Skip to content

fix(foyer): round-12 true captions — NodeSlide two-layer evidence + honest publish gates - #12

Merged
HomenShum merged 2 commits into
mainfrom
foyer/round-12-true-captions
Sep 13, 2026
Merged

HomenShum merged 2 commits into
mainfrom
foyer/round-12-true-captions

Conversation

@HomenShum

Copy link
Copy Markdown
Owner

Summary

Round-11 review (Steward critical) flagged FYwall beat 02: the caption
claimed "this product's front door and back door were both checked live,
and they reported the same version" while it was shown over NodeVoice,
whose own pill on that exact frame reads "1 layer" — a caption false of its
own frame.

  • Repoints beat 02 at NodeSlide (verified frontend+backend on production
    ec2a44e), hovers its card to reveal the apparatus, and asserts the
    apparatus text contains matches backend — the real two-layer evidence
    node-foyer's e2e/rules.ts two-layer caption rule requires before it will
    accept a caption claiming both layers were checked.
  • Rewrites the caption in plain words (round-11's judge failed the "mom
    test" on the jargon "front door and back door"): "Green means verified.
    For this product both the website people see and the service behind it
    were checked live a moment ago, and both reported the same version."
  • Beat 00: "every few minutes" -> "every half hour" (LEDGER_SWEEP_MINUTES = 30).
  • Two further comprehension cycles on FYwall (judge is noisy, documented in
    this repo's own README) removed remaining jargon ("sweep", "deploy
    workflow") and named a persona up front, until the judge passed clean:
    publish, 0 P0, comprehension passed (worse of 2 runs kept).
  • FYagent: one attempt at plain-language captions for the two JSON-endpoint
    beats, per the round-12 charter ("state the everyday purpose before naming
    the technical address"). Comprehension still blocks on non_expert_sense
    after re-judging twice (worse of 2 runs: rework, 2 P0) -- kept
    unpublished with its honest record rather than stretched further.
  • Fixed a real capturer bug found while wiring the NodeSlide assert:
    assertHolds()'s text-matches branch recorded the generic phrase
    "<sel> text matches" for every capture, discarding what was actually
    checked, so no caption could ever satisfy a rule that greps asserted for
    specific matched text. Now records the matched pattern (or the equals
    value) -- a more honest receipt on its own, independent of this bug.
  • FYphone: not re-captured (no caption issue was found in review). Re-ran
    the "run the judge twice, keep the worse" rule honestly against the two
    existing judge runs on its current MP4 -- the worse run has comprehension: blocked, so it is correctly demoted from published to unpublished
    versus the round-11 draft, which had cherry-picked the better run.

Vendored judge.json for all three captures and the node-foyer manifest
draft (data/walkthroughs.manifest.json) under the companion node-foyer
worktree; the planner's seal script now prints zero problems.

Test plan

  • node check.mjs -- 60/60 JS files parse, 36/36 tour steps, 34/34 prose citations
  • Fresh capture -> render -> judge cycle for FYwall (3 comprehension cycles) and FYagent (1 cycle) against production / a fresh built preview
  • node-foyer's seal script (data/walkthroughs.manifest.json -> public/media/walkthroughs.json): 0 problems, media budget 3.47 MiB / 4 MiB
  • node-foyer e2e/foyer.spec.ts file-mode stand-in for FYagent: 13/14 (rebuilt fresh; round-11's report could not be located)

🤖 Generated with Claude Code

HomenShum and others added 2 commits September 12, 2026 21:57
…lf-hour wording, plain-language FYagent endpoints

Round-11 review (Steward critical): FYwall beat 02 claimed "front door and
back door were both checked" over NodeVoice, whose own pill on the same
frame reads "1 layer" — a caption false of its own frame. Repoints the beat
at NodeSlide (verified frontend+backend on production ec2a44e), asserts the
apparatus text "matches backend" is really on screen, and rewrites the
caption in plain words (the round-11 judge failed the "mom test" on the
jargon "front door and back door").

Also: beat 00 said "every few minutes"; the ledger sweep runs every half
hour (LEDGER_SWEEP_MINUTES = 30) — wording corrected. Two further comprehension
cycles on FYwall removed remaining jargon ("sweep", "deploy workflow") and
named a persona up front, until the video judge passed clean (publish, 0 P0,
comprehension passed, 2 runs kept-worse).

FYagent: one attempt at plain-language captions for the two JSON-endpoint
beats (state the everyday purpose before naming the technical address, per
the judge's non_expert_sense P0). Comprehension still blocks on
non_expert_sense after re-judging twice — kept unpublished with its honest
record rather than stretched further, per the round-12 charter.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
assertHolds()'s text-matches branch recorded the fixed phrase "<sel> text
matches" for every capture, discarding what was actually checked. node-foyer's
two-layer caption rule (e2e/rules.ts) requires the literal string "matches
backend" inside a frame's `asserted` field before it will accept a caption
that claims both layers were checked -- a generic phrase can never satisfy
that no matter what the live text said, so the round-12 NodeSlide beat failed
the planner's seal on a capturer bug, not a caption bug. Records the matched
pattern (or the equals value) instead; also a more honest receipt on its own.

capture.json for FYwall/FYagent regenerated for the three frames this
touches (all still bare `matches` asserts); no DOM re-fetch was needed since
the fix only changes how an already-observed result is recorded, not what
was checked, so live counters (stable-sweeps) could not have moved.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
@HomenShum
HomenShum merged commit b723950 into main Sep 13, 2026
2 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