Skip to content

Trim Digital Workshop to Library, CAM, and Sender with a slicer-style layout - #12

Open
NoobyNull wants to merge 10 commits into
mainfrom
claude/happy-mendel-x9y14x
Open

NoobyNull wants to merge 10 commits into
mainfrom
claude/happy-mendel-x9y14x

Conversation

@NoobyNull

@NoobyNull NoobyNull commented Oct 14, 2026 •

Copy link
Copy Markdown
Owner

Narrows Digital Workshop to three pillars: library management, CAM, and sender + machine control. Projects stay, reshaped to work like a slicer project: design → CAM setup → G-code → run. The screen now uses the Bambu Studio / OrcaSlicer layout (stages 7–9), and PR builds now publish a Linux installer (stage 10). The direction is written up in .planning/WORKSHOP-SCOPE.md.

Each stage is its own commit.

1. Remove the GraphQLite graph layer and the dead DW_BUILD_TOOLS option

  • GraphManager was written on every import and category change, but nothing ever read from it. Removed the module, the GraphQLite download, its release-payload requirement, and the now-unused SQLite extension-loading API.
  • The Linux installer removes a graphqlite.so left behind by older installs.
  • DW_BUILD_TOOLS pointed at tools/matgen and tools/texgen, which don't exist.

2. Remove project costing, the Cut Optimizer, and stock sizes

  • Removed the costing engine and panel, rate categories, board-foot math, the cut optimizer (core, panel, .clo files), and per-material stock sizes, plus their menus, saved-layout keys, and tests.
  • No costing, cut-plan, or stock data is deleted. Existing databases keep their costing_records / cut_plans / rate_categories / stock_sizes tables. New databases and upgrades don't create them. (Stage 5 removes only the project index rows that pointed at them.)
  • .dwproj export no longer writes costs.json / cut_plans.json. Older archives that contain them still import (new test).
  • The Materials panel keeps the material list (feeds & speeds reads it). Only its stock-size table goes.

3. Replace the Project Plan with a slicer-style contents tree

  • Removed the six-stage Project Plan module, its view, its adapters, and the run-truth reporting that only fed it.
  • The Project panel now shows each design, the CAM setups made from it, the G-code they produced, and the runs of that G-code. Designs and setups have Open in CAM, and there's an Add Design from Library button. Stale G-code reads Out of date, interrupted runs read Interrupted, and the state is always shown as text, not color alone.
  • Removed the guided carve step flow (PrepareCarveFlow and step guidance), which nothing in the app used. preparation_identity stays, because the protected Run package is keyed on it.
  • New setups are named "CAM Setup: ". The stored source key keeps its old spelling, so setups saved by earlier releases still resolve.

4. Remove the Guided Workshop experience

  • Removed View → Experience, the experience router, and the ExperienceMode field on every workshop intent.
  • Layouts: migration v2 folds the old Guided Workshop and Advanced Workbench built-ins into one Workshop layout. Custom layouts are preserved byte-for-byte, and the active selection maps across (new test covers each case).
  • A G-code stream now always holds the Sender workspace, which is what happened in practice without Guided.
  • The responsive layout helpers lose their "Guided" names (workshop_layout_metrics.h).

5. Trim project item types

  • Drop the Stock, CutPlan, Cost, Labor, Consumable, and Zeroing item types. A project now holds designs, CAM setups, G-code, runs, and the materials and tools they need.
  • Schema v19 removes index rows of those types once (new migration test), and project sync prunes any that reappear. The source tables are still left alone.
  • New project folders no longer get heightmaps/ (left over from the removed Direct Carve CAM) or costing/. Existing folders are untouched.

6. Docs

  • New .planning/WORKSHOP-SCOPE.md: the three-pillar scope, the slicer project model, and PureCutCNC used for toolpath math only through the existing stateless POST /api/job JobSpec endpoint (no web-UI parity requirement), plus revised CAM phases 3–7.
  • CAM-INTEGRATION-DESIGN.md is marked partly superseded. STATE, PROJECT, MILESTONES, ROADMAP, and the README are updated.

7. Slicer-style main tab rules

  • Home, Library, Prepare, Preview, Device, Project, plus the rules for entering them and for the two primary actions: a running job holds Device; Generate stays blocked until the CAM rebuild can make toolpaths; Send to Machine needs loaded G-code and an idle machine. Each block has a plain-language reason. UI-free and unit tested (main_tabs.*).

8. Lay out the app like a 3D-printing slicer

  • Top bar: menu button (File, Edit, View, Tools, Help) and Save; the six tabs; project name and save state; machine status with Connect/Disconnect; Generate and Send to Machine where a slicer puts Slice and Print.
  • Prepare: sidebar with Tool & Material, project contents, and CAM | Properties, beside the 3D canvas. Preview: G-code statistics and listing beside the toolpath and playback. Device: live view with G-code, job progress, and MDI underneath, and status, jog, and safety (plus WCS, Tool & Material, Macros, Machine Settings) on the right. Library, Home, and Project get their own pages.
  • Opening a design lands in Prepare, G-code in Preview (previously project G-code opened the Sender). Send to Machine opens loaded G-code in Device and never starts the machine.
  • Pages are ImGui dock layouts rebuilt on tab change and locked against undocking. Section widths come from the font size. Page windows have no close buttons. Materials, Tool Library, Machine Profiles, Lighting, and Log Viewer stay floating.
  • Ctrl+1–6 switch tabs (Ctrl+1/2 used to be Workshop/Sender).
  • Leaving the Library runs its existing return path first. Prepare, Preview, and Project re-enter the project the way Back to Project did.
  • Removed: layout presets in the UI, group panels, auto-context switching, the Workshop/Sender toggle, and the project context bar. Saved presets stay in the config file but are no longer read.

9. Compact project contents

  • One line per design, setup, G-code file, or run: icon and name on the left, state in words on the right. Click or Enter opens. The selected design offers Open in CAM, and a right-click menu has the same actions.

10. Linux installer on pull request builds

  • CI passed the PR ref (12/merge) to make-installer.sh as the version, so the .run path pointed into a missing directory and no Linux artifact was uploaded (only a warning). Slashes are now replaced, and PR builds publish DigitalWorkshop-linux like Windows and macOS. I downloaded that artifact, installed it into a clean home, and launched it.

Not done here (open decisions, listed in the scope doc)

  • AI tagging: kept for now as a library feature.
  • Materials: two material systems (the .dwmat Materials panel and the .vtdb tool database's own material table) should be merged.
  • Home could become a slicer-style start screen with project thumbnails, and the Library's picker modes could fold into a plain "Add to Project".
  • Saved layout presets are still stored and migrated in the config, but nothing reads them. They can be removed in a follow-up.
  • web/season-countdown/ is an unrelated app living in this repo. I left it alone.

Verification (local, Linux GCC Release)

  • Baseline on main: 1,496 passed / 2 skipped (both need optional external fixtures).
  • Head of this branch: 1,261 passed / 2 skipped. Every test that went away belonged to a removed feature. New tests cover the project contents tree, the v2 layout migration, the v19 schema migration, retired-item pruning, legacy .dwproj import, the main tab rules, and the side-column layout sizing.
  • All six isolated module suites pass.
  • check_source_sizes passes. Caps were lowered or removed where files shrank or were deleted.
  • No new compiler warnings in touched files.
  • I verified the build and tests after each stage, not each individual commit (stage 8 was also checked alone). CI covers Windows, macOS, clang, and the Debug -Werror coverage build.
  • Ran the app under Xvfb and clicked through every tab: opened a recent project, opened a design (Prepare), opened its G-code (Preview), used Send to Machine (Device), visited Library and Project, opened the menu, and switched tabs with Ctrl+3 and Ctrl+5.

🤖 Generated with Claude Code

https://claude.ai/code/session_01LvX2RtJkBcWGyvKubz2s5W

GraphManager was dual-written on import and category changes but no code
ever read from it. Drop the module, the GraphQLite download, its release
payload requirement, and the now-unused SQLite extension-loading API.
The Linux installer removes graphqlite.so left behind by older installs.

DW_BUILD_TOOLS pointed at tools/matgen and tools/texgen, which do not
exist, so enabling it broke configuration.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LvX2RtJkBcWGyvKubz2s5W
Digital Workshop is narrowing to library management, CAM, and the sender.
Costing (estimates, rate categories, board-foot math), the 2D cut
optimizer, and per-material stock sizes are removed along with their
panels, menu entries, saved-layout keys, and tests.

Existing user data is left alone: databases that already have the
costing_records, cut_plans, rate_categories, or stock_sizes tables keep
them, but new databases and upgrades no longer create them. Project index
rows that pointed at those tables are pruned on the next project sync.
.dwproj export no longer writes costs.json or cut_plans.json; archives
from earlier releases that contain them still import.

The Materials panel keeps the material list, which feeds and speeds still
reads; only its stock-size table goes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LvX2RtJkBcWGyvKubz2s5W
@coderabbitai

coderabbitai Bot commented Oct 14, 2026 •

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration
  • Configuration used: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 7ab06d90-335b-4f99-9ff8-1963633e8256
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 14, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-14T14:37:33.692930Z 7915699 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

The six-stage Project Plan (Design & Size, Material & Blank, Choose Tool,
Carve Preview, Machine Setup, Review & Run) was built around the guided
Direct Carve flow, which was removed in the v0.8.0 CAM rebuild. Remove the
project_plan module, its view and adapters, and the run-truth reporting
that only fed it.

The Project panel now shows the project the way a slicer shows a project
file: each design, the CAM setups made from it, the G-code those setups
produced, and the runs of that G-code. Designs and setups open in CAM;
an Add Design from Library button replaces the plan's next-step card.
Stale G-code reads as "Out of date" and interrupted runs as
"Interrupted", so the state never depends on color alone.

Also remove the guided carve step flow (PrepareCarveFlow and its step
guidance), which nothing in the application used. The setup identity in
preparation_identity stays: the protected Run package is keyed on it.
New setups are named "CAM Setup: <design>"; their stored source key
keeps its historical spelling so setups saved by earlier releases resolve.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LvX2RtJkBcWGyvKubz2s5W
Guided Workshop was the novice front end for the Direct Carve flow and
the Project Plan, both of which are gone. What remained was a second
layout preset and an experience flag threaded through every workshop
intent.

Remove View > Experience, the experience router, and the source field on
the workshop intents; the WorkshopCommandTarget interface moves into the
workshop contract. Layout migration v2 folds the Guided Workshop and
Advanced Workbench built-ins into a single Workshop layout, keeps custom
layouts byte-for-byte, and maps the active selection across. A G-code
stream now always holds the Sender workspace.

The responsive layout helpers used for the default dock layout and Home
lose their Guided names, and the accessibility architecture test points
at the new Project panel.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LvX2RtJkBcWGyvKubz2s5W
A project now holds designs, their CAM setups, the G-code those setups
produced, the runs of that G-code, and the materials and tools they
require. Drop the Stock, CutPlan, Cost, Labor, Consumable, and Zeroing
item types, which belonged to costing, the Cut Optimizer, and the
Project Plan.

Schema v19 removes project index rows of those types once. Project sync
also prunes any that reappear, for example from an older client sharing
the database. Project warnings call setups "CAM setup".

New project folders no longer get heightmaps/ (left over from the
removed Direct Carve CAM) or costing/, project.json stops writing a
heightmaps list, and storage validation stops requiring those folders.
Existing project folders keep them untouched.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LvX2RtJkBcWGyvKubz2s5W
Add .planning/WORKSHOP-SCOPE.md: Digital Workshop is library management,
CAM, and the sender; projects work like slicer projects (design, CAM
setup, G-code, run); and PureCutCNC is used for its toolpath math through
the existing stateless JobSpec endpoint, with no web-UI parity
requirement. It lists what this change removed, what it kept on purpose,
and the decisions still open, and replaces CAM phases 3-6.

Mark the superseded parts of CAM-INTEGRATION-DESIGN.md, update STATE,
PROJECT, MILESTONES, and ROADMAP, track the new doc in .gitignore like the
other milestone-level plans, and rewrite the README feature overview
around the three pillars.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LvX2RtJkBcWGyvKubz2s5W
@NoobyNull NoobyNull changed the title Trim Digital Workshop to Library, CAM, and Sender Trim Digital Workshop to Library, CAM, and Sender with slicer-style projects Oct 14, 2026
Home, Library, Prepare, Preview, Device, and Project, in the order a
3D-printing slicer shows its tabs, plus the rules for entering them and for
the two primary actions:

- A running job holds the Device tab, as the Sender workspace did.
- Generate (the slicer's Slice) stays blocked until the CAM rebuild can
  produce toolpaths.
- Send to Machine (the slicer's Print) needs loaded G-code and an idle
  machine.

Every block carries a plain-language reason for its tooltip. The rules live
in the UI-free workshop module and are covered by the isolated suite.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LvX2RtJkBcWGyvKubz2s5W
Replace the free-form docking workspace with the Bambu Studio / OrcaSlicer
layout: a top bar of tabs and one fixed page per tab.

- Top bar: menu button (File, Edit, View, Tools, Help) and Save on the
  left; the Home, Library, Prepare, Preview, Device, and Project tabs; the
  project name with its save state; machine status with Connect or
  Disconnect; and Generate and Send to Machine on the right, where a
  slicer puts Slice and Print. Disabled tabs and actions explain why in a
  tooltip, and the selected tab is underlined as well as filled.
- Prepare: a sidebar with Tool & Material, the project contents, and
  CAM | Properties beside the 3D canvas.
- Preview: G-code statistics and listing beside the toolpath and playback.
  Opening project or external G-code lands here, not in the sender.
- Device: the live view with G-code, job progress, and MDI underneath, and
  status, jog, and safety (with WCS, Tool & Material, Macros, and Machine
  Settings) on the right. Send to Machine opens loaded G-code here; it
  never starts the machine. A running job keeps Device open.
- Library, Home, and Project get their own pages.
- Pages are ImGui dock layouts rebuilt on tab change and locked against
  undocking; section widths come from the font size, so high UI scales
  stay readable. Page windows lose their close buttons. Materials, Tool
  Library, Machine Profiles, Lighting, and the Log Viewer stay floating.
- Ctrl+1 to Ctrl+6 switch tabs; View lists them too.
- Leaving the Library runs its return path first, so a Library preview
  never lingers in the project. Prepare, Preview, and Project re-enter the
  project the way Back to Project did.

Removed: layout presets in the UI, group panels, auto-context switching,
the Workshop/Sender toggle, and the project context bar, whose project and
machine labels move into the top bar. Saved layout presets stay in the
config file but are no longer read.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LvX2RtJkBcWGyvKubz2s5W
Each design, CAM setup, G-code file, and run is one line, like a slicer's
object list: icon and name on the left, the state in words on the right
(with the warning icon when it needs attention). Clicking or pressing Enter
on a row opens it; the selected design offers Open in CAM, and every row
has the same actions in a right-click menu. The kind and full status move
to the row's tooltip. This lets the list fit in the Prepare sidebar.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LvX2RtJkBcWGyvKubz2s5W
@NoobyNull NoobyNull changed the title Trim Digital Workshop to Library, CAM, and Sender with slicer-style projects Trim Digital Workshop to Library, CAM, and Sender with a slicer-style layout Oct 15, 2026
Pull request refs look like "12/merge". Passed to make-installer.sh as the
version, the slash pointed the .run file at a directory that does not
exist, so makeself failed quietly and the upload step found nothing. Replace
slashes in the version so pull requests and slash-named branches get a
DigitalWorkshop-linux artifact like Windows and macOS do.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LvX2RtJkBcWGyvKubz2s5W
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants