Skip to content

release: 1.4.1 — fix showcase zoom-churn + close the audit blind spot - #14

Merged
HeyRenan merged 4 commits into
mainfrom
fix-showcase-camera-hold
Jul 6, 2026
Merged

release: 1.4.1 — fix showcase zoom-churn + close the audit blind spot#14
HeyRenan merged 4 commits into
mainfrom
fix-showcase-camera-hold

Conversation

@HeyRenan

@HeyRenan HeyRenan commented Jul 6, 2026

Copy link
Copy Markdown
Owner

Two fixes for the zoom-churn bug you spotted in the v1.4.0 showcase.

1. The showcase (asset). It re-zoomed the deploy card 3× — framed #deploy-panel, pulled out, framed #rollback-countdown (which lives inside the panel), pulled out, framed #deploy-panel again. Now one held camera on #deploy-panel carries the whole flow (block → auto-rollback → re-run → ship), swapping only the annotation + state colour. Lighter too (6.2MB → 5.0MB). Authoring fix, not the motor.

2. The gate that missed it (engine). audit-roster only flagged re-framing the same selector after camera:"out"; it missed a nested element of the same card. The live audit now runs the DOM contains check both ways, so framing a child — or the parent — of a card framed a beat ago is flagged zoom-churn. Warning, never fatal. +1 test (573 total).

Bumped to 1.4.1 + CHANGELOG.

🤖 Generated with Claude Code

HeyRenan added 2 commits July 6, 2026 16:17
… churn)

The v1.4.0 showcase re-zoomed the deploy card 3x: it framed #deploy-panel,
zoomed out, framed #rollback-countdown (which lives INSIDE #deploy-panel),
zoomed out, then framed #deploy-panel again — same card, three needless
focuses. Authoring bug, not the motor: the roster used camera:out between
annotations on one panel (violating the zoom-churn rule the docs already
state, which the audit missed because the selectors were nested, not identical).

Fix: one held camera on #deploy-panel across the whole deploy flow (block ->
auto-rollback -> re-run -> ship), swapping only the annotation + state colour.
The deploy card is now framed once. Lighter too (6.2MB -> 5.0MB, 68s -> 60s).
The v1.4.0 showcase (fixed in the previous commit on this branch) exposed a gate
blind spot: the zoom-churn safeguard only flagged re-framing the SAME selector
after camera:"out", so re-framing a NESTED element of the same card
(#deploy-panel -> #rollback-countdown-inside-it -> #deploy-panel) slipped past
PLACE-clean + the audit.

- auditRosterLive: DOM-aware zoom-churn — runs contains() both ways, so framing a
  child (or the parent) of a card framed a beat ago, across a camera:"out", warns.
- audit-roster.mjs surfaces the live warnings alongside the static ones.
- +1 test (573 total); bump 1.4.1 + CHANGELOG.
@HeyRenan HeyRenan changed the title fix: showcase re-render — hold the deploy-panel camera (kill zoom churn) release: 1.4.1 — fix showcase zoom-churn + close the audit blind spot Jul 6, 2026
HeyRenan added 2 commits July 6, 2026 16:51
PR #13 shipped the new didactic showcase.mp4 but left the OLD ~90-step
feature-cram roster committed as assets-src/showcase-steps.json — so the mp4 and
its source were out of sync, and re-rendering "the same command" (README's
promise) would reproduce the old reel, not the shipped one. This class is exactly
"will it break again?": fix the OUTPUT but not the SOURCE and it regresses on the
next render.

Replace assets-src/showcase-steps.json with the fixed 19-step held-camera flow
(byte-identical to the roster that rendered the shipped assets/showcase.mp4).
Audit-clean (0 zoom-churn, no off-screen/anchor errors). Now source == output;
re-rendering reproduces the fixed, churn-free reel.

Render:
  node showreel/scripts/rec.mjs \
    "file://$PWD/assets-src/demo/index.html?gate=fail" \
    --steps assets-src/showcase-steps.json assets/showcase.mp4 \
    --fps 30 --width 1600 --height 900
…own artifacts)

The professional call on zoom-churn: keep it a WARN in the motor (a craft issue,
not broken output; the contains() heuristic can flag a motivated return, so
hard-erroring every render would be wrong), and enforce it in CI. The roster-audit
job now runs the committed showcase roster with --strict, so ANY warning (churn,
arbitrary-primitive, random-camera) fails the build. The project holds its own
showcase to zero-churn; end-users keep warn-by-default + opt-in --strict.

Verified: the fixed showcase roster passes --strict at the CI dims (1280x676),
exit 0.
@HeyRenan
HeyRenan merged commit c0f5bd8 into main Jul 6, 2026
2 checks passed
@HeyRenan
HeyRenan deleted the fix-showcase-camera-hold branch July 6, 2026 20:07
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