fix(foyer): round-12 true captions — NodeSlide two-layer evidence + honest publish gates - #12
Merged
Merged
Conversation
…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]>
3 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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.
ec2a44e), hovers its card to reveal the apparatus, and asserts theapparatus text contains
matches backend— the real two-layer evidencenode-foyer's
e2e/rules.tstwo-layer caption rule requires before it willaccept a caption claiming both layers were checked.
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."
LEDGER_SWEEP_MINUTES = 30).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).
beats, per the round-12 charter ("state the everyday purpose before naming
the technical address"). Comprehension still blocks on
non_expert_senseafter re-judging twice (worse of 2 runs:
rework, 2 P0) -- keptunpublished with its honest record rather than stretched further.
assertHolds()'s text-matchesbranch recorded the generic phrase"<sel> text matches"for every capture, discarding what was actuallychecked, so no caption could ever satisfy a rule that greps
assertedforspecific matched text. Now records the matched pattern (or the
equalsvalue) -- a more honest receipt on its own, independent of this bug.
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 unpublishedversus the round-11 draft, which had cherry-picked the better run.
Vendored
judge.jsonfor all three captures and the node-foyer manifestdraft (
data/walkthroughs.manifest.json) under the companion node-foyerworktree; 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 citationsdata/walkthroughs.manifest.json->public/media/walkthroughs.json): 0 problems, media budget 3.47 MiB / 4 MiBe2e/foyer.spec.tsfile-mode stand-in for FYagent: 13/14 (rebuilt fresh; round-11's report could not be located)🤖 Generated with Claude Code