Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
2642f04
feat(adapters): close dark-capability gaps with full four-adapter par…
sobechestnut-dev Aug 28, 2026
8810ba4
docs(adapters): correct parity claims + document the closed dark-capa…
sobechestnut-dev Aug 28, 2026
718d1bd
feat(renderer-three): capture({ includeBuildVolume: false }) for grid…
sobechestnut-dev Aug 28, 2026
90cee34
feat(demo): rebuild the demo as the Feature Lab on the published core…
sobechestnut-dev Aug 28, 2026
3ea5f9c
feat(example-react): two-tier example on the published adapter (DD-03…
sobechestnut-dev Aug 29, 2026
cc588e7
feat(example-vue): new two-tier Vue example on the published adapter …
sobechestnut-dev Aug 29, 2026
92f9fcd
feat(example-svelte): two-tier example on the published adapter (DD-0…
sobechestnut-dev Aug 29, 2026
76f1d9e
feat(example-webcomponent): new two-tier Web Component example (DD-03…
sobechestnut-dev Aug 29, 2026
972d58f
docs(adapters): point READMEs + manual at the two-tier examples (DD-0…
sobechestnut-dev Aug 29, 2026
b7f1fc0
chore(examples): expose showcase handle on window + WC diagnostics pa…
sobechestnut-dev Aug 29, 2026
829cacc
docs(visual-coverage): record the DD-031 consumer-UX demonstration su…
sobechestnut-dev Aug 29, 2026
0e5ff63
fix(demo,examples): rail-collapse overlap + WC travel desync + clean …
sobechestnut-dev Aug 29, 2026
c256ae8
feat(model-adapters): shared model controller + React model-viewer ad…
sobechestnut-dev Aug 29, 2026
7922dcd
feat(model-adapters): Vue, Svelte & Web Component model-viewer adapte…
sobechestnut-dev Aug 29, 2026
2fa364c
feat(demo-kit,example-react): model fixtures + React Prepare/Preview …
sobechestnut-dev Aug 29, 2026
9ad74c6
feat(demo,examples): Prepare/Preview model viewing in Feature Lab + a…
sobechestnut-dev Aug 29, 2026
9530df1
fix(demo): hide toolpath count-pill + scrub strip in Prepare mode (DD…
sobechestnut-dev Aug 29, 2026
b25ddb6
docs(model-adapters): document source-model viewing + changeset (DD-031)
sobechestnut-dev Aug 29, 2026
01dfa77
test(adapters): resolve gcode-model-renderer from source in adapter v…
sobechestnut-dev Aug 30, 2026
639d982
fix(release-gates): consumer-vue + pack-check + formatting for the mo…
sobechestnut-dev Aug 30, 2026
b1e1258
fix(lint): clear eslint/prettier errors surfaced by the first branch …
sobechestnut-dev Aug 30, 2026
5f97f0e
Merge pull request #427 from ChestnutLabs/feat/consumer-ux-parity
sobechestnut-dev Aug 30, 2026
c6b819c
release: version packages (lockstep) (#428)
github-actions[bot] Aug 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions .claude/launch.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,28 @@
"tools/example-svelte"
],
"port": 5202
},
{
"name": "example-vue",
"runtimeExecutable": "npm",
"runtimeArgs": [
"run",
"dev",
"--prefix",
"tools/example-vue"
],
"port": 5203
},
{
"name": "example-webcomponent",
"runtimeExecutable": "npm",
"runtimeArgs": [
"run",
"dev",
"--prefix",
"tools/example-webcomponent"
],
"port": 5204
}
]
}
31 changes: 31 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,37 @@ homepage, feature gallery, manual, demo/examples, screenshots, and the coverage
inventory, then resolve the review. Surfaces live in `tools/release/doc-surfaces.mjs`; the flow is
documented in [`docs/reference/release-process.md`](docs/reference/release-process.md).

## Framework parity completion check (mandatory)

**A public capability is not "done" until it has a deliberate parity decision across every framework
adapter** (DD-031). This applies to **both** viewer surfaces: the toolpath/Preview side
(`GcodePreview` over `gcode-preview-core`) and the source-model/Prepare side (`ModelViewer` over
`gcode-model-renderer`'s `createModelPreviewController`, exposed on each adapter's `/model` subpath).
When a change adds or materially changes a consumer-meaningful capability on a controller or a
renderer, answer each — "not applicable" is a valid, explicit answer, but it must be a decision, not
an omission:

1. Does **core** (`GcodePreviewControls` / `GcodePreviewState` / `PreviewEvent`) expose it correctly?
2. Do **Vue**, **React**, **Svelte**, and the **Web Component** expose it — declaratively where it
logically belongs, imperatively via `controls` otherwise?
3. Are the **lower-level APIs** (`useGcodePreview` / `createGcodePreview` / `element`) covered?
4. Are **events/callbacks** equivalent (allowing each framework's naming idiom)?
5. Is it exercised by the **portable behavioral suite** (`gcode-preview-core/src/testing.ts` for
toolpath; `gcode-model-renderer/src/model-testing.ts` for the model viewer)? The
controls/state-completeness **parity guards** there fail CI if a `GcodePreviewControls` /
`ModelPreviewControls` method (or a state field) isn't reachable through an adapter — add new
controls/state to the matching required list.
6. Does the **Feature Lab demo** expose it, and do the **framework showcase examples** demonstrate it
where useful?
7. Is it **documented** consistently across the adapter READMEs + `docs/manual/adapters.md`, and does
**visual coverage** (`docs/VISUAL_FEATURE_COVERAGE.md`) need updating?

Deliberate per-framework differences (e.g. the Web Component's property-vs-attribute split and the
`<gcode-model-viewer>` tag, Svelte's `.svelte` subpath, the `/model` subpath for source-model viewing)
are fine — but they must be **documented as intentional**, never accidental drift.
No capability should be reachable only through the `raw.renderer()` escape hatch for lack of a public
surface. The release review (`RELEASE_REVIEW.md`) carries a parity line so this is checked before a cut.

## Repo orientation

- `packages/*` — the 14 published packages (foundation → parse → color → render → adapters). Build
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -452,7 +452,7 @@ row inspects the *toolpath*, the bottom row presents the *source model* (see

Design rationale, boundaries, and the accepted architecture live in
[`docs/design/`](docs/design); the [docs index](docs/README.md) maps the whole set. Fourteen
packages publish to npm in lockstep (currently **v0.19.0**) with npm provenance.
packages publish to npm in lockstep (currently **v0.20.0**) with npm provenance.

## Development

Expand Down
40 changes: 34 additions & 6 deletions RELEASE_REVIEW.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,10 @@
parses them literally. Delete rows only for packages that did not change.
-->

# Release review — v0.19.0
# Release review — v0.20.0

**Review version:** v0.19.0
**Changed-capability inventory diffed against:** `v0.18.0`
**Review version:** v0.20.0
**Changed-capability inventory diffed against:** `v0.19.0`

This artifact records the per-release **Public Product + Documentation + Visual** reconciliation:
before the `dev` -> `main` promotion, compare the changed capabilities below against the README,
Expand All @@ -28,9 +28,13 @@ each disposition. Guidance: CLAUDE.md "Public-docs completion check" and

| Package | Changed src files | Changelog summary | Disposition |
|---|--:|---|---|
| `@chestnutlabs/gcode-preview-core` | 2 | feat(renderer): `setFeatureRoleVisible(role, visible)` — show/hide a single feature role | Status: reviewed |
| `@chestnutlabs/gcode-renderer-three` | 2 | feat(renderer): `setFeatureRoleVisible(role, visible)` — show/hide a single feature role | Status: reviewed |
| `@chestnutlabs/toolpath-core` | 1 | feat(renderer): `setFeatureRoleVisible(role, visible)` — show/hide a single feature role | Status: reviewed |
| `@chestnutlabs/gcode-model-renderer` | 4 | Make interactive **source-model viewing** (STL / 3MF) a first-class, declarative half of the SDK — | Status: reviewed |
| `@chestnutlabs/gcode-preview-core` | 4 | Close the dark-capability gaps so no shipped capability is reachable only through the | Status: reviewed |
| `@chestnutlabs/gcode-preview-element` | 6 | Close the dark-capability gaps so no shipped capability is reachable only through the | Status: reviewed |
| `@chestnutlabs/gcode-preview-react` | 7 | Close the dark-capability gaps so no shipped capability is reachable only through the | Status: reviewed |
| `@chestnutlabs/gcode-preview-svelte` | 6 | Close the dark-capability gaps so no shipped capability is reachable only through the | Status: reviewed |
| `@chestnutlabs/gcode-preview-vue` | 6 | Close the dark-capability gaps so no shipped capability is reachable only through the | Status: reviewed |
| `@chestnutlabs/gcode-renderer-three` | 3 | `CaptureOptions` gains `includeBuildVolume?: boolean` (default `true`). Set it to `false` to exclude | Status: reviewed |

Set each **Disposition** to one of `Status: reviewed` / `Status: no-change-needed` /
`Status: not-applicable` (never `Status: pending`).
Expand All @@ -42,3 +46,27 @@ Set each **Disposition** to one of `Status: reviewed` / `Status: no-change-neede
- **Visual review:** resolved — every changed user-facing capability is visually documented, or the coverage matrix records why not.

_Resolve each marker above by replacing `pending` with `resolved` once reconciled._

## Reconciliation notes (v0.20.0)

All seven changed packages are the DD-031 consumer-UX / framework-parity pass, reconciled together:

- **Product:** the whole point of this release is consumer-facing surface. `docs/README.md`
"Current state" leads with v0.20.0; the two-viewer (Preview + Prepare) story is accurate. The root
README and Pages homepage remain accurate (they describe the toolpath viewer + source-model
rendering; the new framework model adapters are additive API documented in the canonical adapter
docs). No existing product copy misrepresents the shipped software.
- **Docs:** `docs/manual/adapters.md` gained "Two viewers: Preview and Prepare" + a per-framework
import table; all four adapter READMEs gained a "Model viewing (Prepare side)" section; the
`gcode-model-renderer` README documents `createModelPreviewController` + the `/testing` suite;
`CLAUDE.md`'s parity check now covers both viewer surfaces. `npm run docs:links` passes.
- **Visual:** the interactive model viewer is now demonstrated in the Feature Lab + all four
showcases (Preview/Prepare toggle) and a minimal model page per framework; the coverage matrix
(`docs/VISUAL_FEATURE_COVERAGE.md` §6/§10) records this. Dark **app-UI** screenshots of Prepare
mode were captured for review but are **not yet canonical `docs/media`** — the manifest harness
emits the mid-grey capability presentation, not app chrome; that gap is explicitly recorded and
carried to the next Visual Review. No shipped capability's existing media is now stale.
- **Framework parity:** every new controller/model capability is exposed across Vue, React, Svelte,
and the Web Component (declaratively where it belongs; the `<gcode-model-viewer>` tag and the
`/model` subpath are documented intentional differences), exercised by the portable behavioral
suites with controls/state completeness parity guards for both the toolpath and model surfaces.
Loading
Loading