Skip to content

fix(examples): make the portfolio watches evaluate; pin the wall-hook FDM failure - #1382

Open
w1ne wants to merge 3 commits into
developfrom
fix/wall-hook-fdm-gate-20261113
Open

w1ne wants to merge 3 commits into
developfrom
fix/wall-hook-fdm-gate-20261113

Conversation

@w1ne

@w1ne w1ne commented Nov 13, 2026

Copy link
Copy Markdown
Owner

Summary

This PR closes four of the remaining unclaimed EVALUATION_EXEMPT entries in tests/integration/fast/exampleParseSmoke.test.ts. Three portfolio watch examples now evaluate cleanly and are tested. The wall-hook example is now pinned to its intended failure.

Reproduction (develop 80f7542be)

npx tsx src/agent/cli/index.ts evaluate examples/portfolio/pocket-watch/build.kcad.ts --json
# ok:false, cli.script-exception "TypeError: watch.fixed is not a function"
npx tsx src/agent/cli/index.ts evaluate examples/portfolio/watch-from-screenshot-agent-loop-v2.kcad.ts --json
# ok:false, same TypeError
npx tsx src/agent/cli/index.ts evaluate examples/portfolio/pocket-watch-v2/build.kcad.ts --json
# ok:true: the exemption is stale

Changes

File Defect Change
pocket-watch/build.kcad.ts, watch-from-screenshot-agent-loop-v2.kcad.ts Called the removed watch.fixed API Add the connector-pair + 'fastened' mate shim that pocket-watch-v2 already uses, typed as const
pocket-watch/build.kcad.ts feature.subtractive-noop: the lanyard cutter (top at z 23.6 mm) never reached the torus (z 28.95–35.05 mm) Remove the no-op cutter. The geometry stays the same as it always evaluated: a whole ring with the bail post entering its bottom
pocket-watch/build.kcad.ts validate: mechanism.mate-gap, minute hand 1.15 mm and pinion cap 1.65 mm from their declared parent (the dial) Re-parent: minute hand → hour hand, pinion cap → minute hand
watch-from-screenshot-agent-loop-v2.kcad.ts End caps mated to the case band, 7.16 mm away Re-parent end caps → their spring bar, dial → rehaut. No geometry change
exampleParseSmoke.test.ts Four exemptions Remove the three watch exemptions. Move print-prep/wall-hook to EXPECTED_FAILURE, pinned to dfm.fdm.overhang-unsupported with "938.2 mm² … '+z' up", the exact output documented in the file

No engine code changes.

Results

  • evaluate: pocket-watch ok:true, 227 features (one info-level authoring.prefer-api.hole-by-cylinder). Wristwatch ok:true, 364 features, 0 diagnostics.
  • validate: pocket-watch ok:true, 0 mechanism failures (status unverified, the same as pocket-watch-v2).
  • exampleParseSmoke.test.ts full file: 260/260 passed (73.5 s). Targeted run: pocket-watch 1.2 s, pocket-watch-v2 1.5 s, wristwatch 1.3 s, wall-hook 0.3 s; budget 15 s.
  • ESLint on the changed files: clean.
  • scripts/typecheckExamples.ts: errors in the changed files fall from 41 to 27 (pocket-watch) and from 75 to 50 (wristwatch). All 45 TS2339 (fixed missing) are gone. The remaining implicit-any/string | number errors are pre-existing.

Demo

docs/demos/portfolio-watches-evaluate-20261113/demo.mp4: a 6 s static local pocket-watch turntable. I inspected frames at 0.5 s (front: dial, screws, hands, whole ring on the bail post) and 3 s (rear: the yellow case back shows through the open frame pocket, as designed). Provenance and hashes are in capture-settings.json.

Limits

  • The wristwatch evaluates, but validate still reports mechanism: broken: 6 mate gaps (lug feet 1.11 mm and spring bars 1.21 mm from their parents) and pre-existing interferences (crystal through dial ticks, bezel and case back into the case band). I tried lengthening the spring bars into the lug ears. It removed the gaps but created new bar/ear/cap overlaps, because the ears have no bar holes. I reverted it; a correct fix needs a lug redesign.
  • Portfolio artifacts (build.mp4, build.stl, hero-frame.png) are not regenerated.

🤖 Generated with Claude Code

github-actions Bot and others added 3 commits November 13, 2026 17:44
… failure

Three portfolio watch examples were exempt from the evaluate smoke test
with "uses removed legacy arm.fixed API".

- pocket-watch-v2 already evaluates clean; drop the stale exemption.
- pocket-watch and watch-from-screenshot-agent-loop-v2 threw
  "watch.fixed is not a function". Add the same connector-pair +
  'fastened' mate shim that pocket-watch-v2 uses (typed `as const`).
- pocket-watch then hit feature.subtractive-noop: the lanyard cutter
  (top z 23.6 mm) never reached the torus (z 28.95-35.05 mm). Remove the
  no-op cutter; the ring stays whole, as it always evaluated, and the bail
  post enters its bottom.
- Re-parent mates whose declared parent never touched the child: minute
  hand -> hour hand, pinion cap -> minute hand (pocket-watch validate now
  ok), spring-bar end caps -> their spring bar, dial -> rehaut.

print-prep/wall-hook is an intentional FDM-overhang demonstration. Move it
from the exemption list to EXPECTED_FAILURE, pinned to its documented
938.2 mm2 '+z' overhang diagnostic.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: w1ne <41898282+w1ne@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: w1ne <41898282+w1ne@users.noreply.github.com>
Signed-off-by: w1ne <41898282+w1ne@users.noreply.github.com>

This branch has not been deployed

No deployments
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