Skip to content

release: v0.19.0 (lockstep) — setFeatureRoleVisible + public-product/docs pass - #426

Merged
sobechestnut-dev merged 19 commits into
mainfrom
dev
Aug 28, 2026
Merged

release: v0.19.0 (lockstep) — setFeatureRoleVisible + public-product/docs pass#426
sobechestnut-dev merged 19 commits into
mainfrom
dev

Conversation

@sobechestnut-dev

Copy link
Copy Markdown
Contributor

Promotion of devmain to cut v0.19.0 (14 lockstep packages).

What ships

Release checklist

  • Version PR squash-merged → dev at 0.19.0; CHANGELOGs + doc surfaces stamped.
  • RELEASE_NOTES_DRAFT.md folded into docs/README.md (current-state + history) and removed.
  • RELEASE_REVIEW.md resolved (all dispositions reviewed/resolved for v0.19.0).
  • npm run docs:release-check PASS; docs:links OK (245).

After merge: tag v0.19.0 on mainrelease-publish.yml publishes the 14 packages.

🤖 Generated with Claude Code

sobechestnut-dev and others added 19 commits August 27, 2026 17:34
…ace + guide (#420)

Document the shipped RS274NGC programming layer (v0.18.0) for consumers:
- New manual guide docs/manual/concept-parametric-programs.md — worked
  bolt-circle example, what runs, the parametricProgram honesty tiers, the
  maxProgramIterations/maxCallDepth bounds, and the scope limits.
- Compatibility coverage: a construct-by-construct table + the full rs274-*
  warning-code set in docs/compatibility/gcode-motion-coverage.md.
- Added parametricProgram to the capability-model concept page.
- Refreshed stale statuses: the #189 epic row (O-word/params gap now closed →
  phase 7 shipped v0.18.0), the DD index (DD-017 Proposed → Accepted/shipped),
  and DD-017's own status header + Phase 3/4 decision-log entries.

No engine change. Follows docs/USER_FACING_DOCS_STYLE.md.

Co-authored-by: Nathaniel Chestnut <sobechestnut-dev@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
…presentation

- Add the Visual Feature Coverage Matrix (docs/VISUAL_FEATURE_COVERAGE.md): a
  persistent, release-maintained inventory of every user-facing capability and
  its demo/media/README/Pages/docs coverage with an explicit disposition.
- Rewrite tools/screenshots into a manifest-driven harness:
  - lib/presentation.mjs: one canonical mid-grey slicer/CAD documentation look
    (DOC_BACKGROUND), applied via the public renderer.setTheme() — a doc setting,
    not a library default (the renderer still ships a transparent background).
  - lib/browser.mjs: auto-locate a launchable Chromium from the Playwright cache
    (tries candidates in order, tolerating an OS-blocked revision), locate the
    bundled ffmpeg for animation, and the deterministic GL-readback.
  - shots.manifest.json: every image as data (source/params/class/caption/alt).
  - capture.mjs: one entry point over toolpath/canvas2d/model pages; fixes the
    stale activeCamera->camera handle rename that broke the old harness.
  - Fold capture-2d.mjs / capture-model.mjs into the unified runner.
- Regenerate all 14 existing images on the mid-grey presentation.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…mo corpus

- New MIT-clean RS274NGC parametric fixture (test-data/fixtures/parametric/
  bolt-circle.ngc): a bolt circle + frame COMPUTED from parameters via a
  while-loop, a subroutine, and degree trig. Verified parametricProgram:known,
  cutMoves:known, 34 computed segments.
- Add it to the demo corpus so it is loadable interactively and by the harness.
- Extend the capture runner with a non-rectangular bed recipe (auto-fit a
  circular/polygon BedShape around the model and frame the bed).
- New feature-proof media: parametric-bolt-circle, bed-circular, bed-polygon,
  render-tubes, render-lines — all on the mid-grey documentation presentation.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…triggers

- Release "teeth": generate RELEASE_REVIEW.md from a changed-capability inventory
  (diff since previous v* tag + changelog bullets) in stamp-release-docs.mjs;
  block dev->main promotion in check-release-docs.mjs until every changed-package
  disposition and the Product/Docs/Visual markers are resolved for the exact
  version. Bootstrap RELEASE_REVIEW.md resolved for v0.18.0.
- Pages: copy docs/media -> docs-site/media in build-api.mjs; add docs/manual/**
  and docs/media/** to docs-pages.yml triggers; register the previously-dead
  concept-parametric-programs page; link-check now covers docs/manual/**.
- Standard/process: USER_FACING_DOCS_STYLE (coverage rule, two visual classes,
  mid-grey capture default, recognition test), release-process (review step),
  CLAUDE (enforced review + matrix; 13->14), PR template (enforced artifact).
- Fix stale package-count prose (9 -> 14) in publish.mjs / release-publish.yml.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- GitHub Pages homepage (docs/manual/index.md): replace the architecture-first
  opening with a product-first hero + a six-card feature grid (hero/card CSS in
  typedoc-theme.css, theme-aware). Leads with what you can build, not ToolpathIR.
- New comprehensive visual feature gallery (docs/manual/feature-gallery.md),
  organized by capability area with real screenshots + deep links; registered in
  typedoc.manual.json and linked from the homepage + README.
- Add screenshots to concept pages: parametric (bolt circle), live progress
  (known/approx pair), workers (tubes vs lines).
- README: cover the v0.18.0 gaps — parametric RS274NGC programs (with render +
  snippet), non-rectangular beds, capture()/transparent export, render
  diagnostics, parallel geometry pool + staged/held reveal, render scope /
  per-plate; fix stale "dark plate" alt; link the feature gallery.
- Raise the API-reference typedoc baseline 3->4 for the benign `gcode`
  highlight-language note (shiki has no gcode grammar; block still renders).

Pages build verified: manual 1/1 and API 4/4 warnings within budget, media
copied to docs-site/media, every image reference resolves, status line intact.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
… color, nav

Surface previously-hidden capabilities in the showcase demo (verified live in a
headless browser):
- Capture PNG button → renderer.capture() → downloads an 880 KB PNG Blob.
- Render diagnostics panel → renderer.getRenderStats(): backend, hardware-vs-
  software GPU, geometry mode + parallelism, segment/draw counts, tube bytes,
  and the parse/build/first-frame/ready timings.
- Progressive-preview selector (auto / lines / hold / off).
- Two more color modes — By speed (feedrate) and By object — capability-gated
  and honest like the existing ones.
- "More demos" nav linking the model, model-viewer, 2D, CNC-validation, and
  headless-still harness pages so they are discoverable from the showcase.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Update the Visual Feature Coverage Matrix to reflect what landed (mid-grey
regen, parametric/bed/tubes-lines media, README + gallery + concept coverage,
demo exposure) and to track the remaining to-capture list (scrub/progressive
animations, framing/scope comparisons, diagnostics-panel + transparent-capture
screenshots) so the next release review picks them up.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Public product + documentation + visual pass v2
Add a WebM animation path to the screenshot harness and two clips:
- lib/browser.mjs encodeWebm(): the Playwright-bundled ffmpeg is a stripped
  --disable-everything build (decode mjpeg/vp8, mux webm only), so frames are
  captured as JPEG and piped through image2pipe -> VP8 (no PNG decode, palette
  filters, or gif muxer exist). Small, looping, muted output.
- capture.mjs: shots with output:"webm" + anim:{kind:"scrub"|"layers",...}
  sweep the draw-range across frames (camera/theme fixed) with a final-frame hold.
- shots.manifest.json: scrub-sweep (segment scrub drawing the toolpath) and
  layer-buildup (layer-range build-up = the progressive reveal), ~80-100 KB each.
- Embed as <video autoplay loop muted playsinline> (absolute URLs, so no TypeDoc
  warning) in the feature gallery + the workers concept page.
- Coverage matrix + harness README updated.

Verified: valid VP8 720x536 ~3.5s; Pages build within budget; both webm copied
to docs-site/media; mid-frames confirm partial scrub / partial build-up.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…ations

Wire up scrub + progressive animations (WebM)
Adds a per-feature-role visibility toggle (AnyBridge "hide adhesion" request).
Unlike the whole-chunk move-kind toggle, feature roles live per-segment inside
the extrusion geometry, so hidden segments are collapsed to NaN positions (the
GPU discards them) and restored byte-for-byte when shown again.

- gcode-renderer-three: ToolpathRenderer.setFeatureRoleVisible(role, visible) +
  getHiddenFeatureRoles(); applied at the three mesh-creation sites and on toggle,
  not in the per-frame draw-state loop (scrub stays cheap). Extrude-only; no base
  copy saved and geometry byte-identical when never used.
- gcode-preview-core: optional setFeatureRoleVisible on PreviewRenderer (2D no-op)
  + GcodePreviewControls.setFeatureRoleVisible passthrough.
- toolpath-core: export FeatureRoleValue.
- demo: "Hide brim/skirt (declutter)" toggle, gated on featureRoles === 'known'.
- Tests: hide→NaN / show→restore byte-for-byte / unused→byte-identical /
  travel-unaffected. Verified live in tubes (SwiftShader): hiding a present role
  collapsed 32,805 vertices and restored to 0.

Lockstep minor. Gate the UI on capabilities.featureRoles === 'known'.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…ble tsdoc

FeatureRole (the value) isn't imported in scene.ts (only the FeatureRoleValue
type), so the @link couldn't resolve and tripped the API-reference warning gate.
Plain code span instead. API build back to 4/4 within budget.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
feat(renderer): setFeatureRoleVisible — hide/show a feature role (hide brim/skirt)
New MIT fixture (tools/fixtures/make-skirt-brim.mjs → test-data/fixtures/
annotations/skirt-brim-model.gcode): a model wrapped by a skirt + brim, so
model-bounds differ from whole-job bounds and Skirt/Brim segments exist.

Captured (mid-grey presentation, wired into the feature gallery + matrix):
- object-aware framing comparison — frame-all vs frame-object (skirt included
  vs the part framed alone).
- setFeatureRoleVisible before/after — frame-all vs adhesion-hidden (skirt/brim
  shown vs hidden), same framing.
- getRenderStats diagnostics in-context — diagnostics-panel (the demo panel
  reading backend/GPU/geometry/counts/timings beside the render).

Harness: frameContent-aware framing (model vs whole-job bounds), a hideRoles
param (setFeatureRoleVisible), and diagnostics/transparent-checker recipes.
Demo corpus gains the skirt-brim fixture.

Honestly deferred with reasons in the matrix: transparent-background capture
(headless SwiftShader flattens readback alpha — hardware-validated by AnyBridge),
interaction-aware quality + true load-time progressive (motion, not stills),
time-scrub (redundant with scrub-sweep), and a few lower-priority polish shots.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
docs: knock out the visual-coverage remainder (framing, hide-adhesion, diagnostics)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
- docs/README.md current-state leads with v0.19.0 (setFeatureRoleVisible + the
  public-product/docs pass); release-history gains the v0.19.0 line.
- README: mention hide-by-feature-role in the inspection section.
- RELEASE_REVIEW.md resolved (all dispositions reviewed/resolved for v0.19.0).
- Remove RELEASE_NOTES_DRAFT.md. docs:release-check PASS.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@sobechestnut-dev
sobechestnut-dev merged commit 4fa0e8f into main Aug 28, 2026
7 checks passed
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.

1 participant