Repository navigation
fix(pixel): report a requested card published twice under identical headings - #6759
Open
Lightheartdevs wants to merge 2 commits into
Open
Lightheartdevs wants to merge 2 commits into
Lightheartdevs wants to merge 2 commits into
Conversation
…eadings Fleet round 114 (Qwen3.5-9B, main 5afd46c): the owner listed three event cards and asked for the Midnight card to start hidden behind a "Show sold out" button. The model published the hidden card and a full copy of it in the section the button revealed, both h2.event-title "Midnight Sold-Out Concert". Every listed name was an exact heading, so the requested-text check passed, the show/hide inspection of the hidden card passed, and the owner was told the site was fully functional; the fleet check (each requested card heading exactly once) failed. missingRequestedText now reports {duplicated: n} for a listed card or heading name that is the whole text of n >= 2 headings sharing one tag and class list, none inside a template or noscript element, while every other name of the same list is exactly one heading. A script that may render the name keeps it silent (the existing opaque check), and so does any owner request to feature, highlight, repeat or duplicate content. The miss goes through the existing publication note, the one bounded revision and the failed delivery note, so the reply says the requirement is not met. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…at cue
Verifier follow-up for the duplicated-requested-heading check.
Headings were pooled across every published HTML file, so a card repeated
on a second page (a waitlist or detail page) was reported as shown twice.
Copies and the exactly-once siblings are now counted within one document,
and the copies must also share their parent element tag, so a classless
footer or dialog heading is not taken for a copy of the card headings.
The repeat cue now also covers "too" (not "too long"), "as well" (not "as
well as"), "also show/put/list ... " and "also in/on/at ...", "in both
places", "top and bottom", "a second time", "once more", "a copy of",
mirror, and carousels, slideshows and marquees, with Portuguese
equivalents. Route notes the host appends to the owner's message ("do not
call exec again") are removed before the cue is tested.
The fixture evidence and the replay context no longer carry the recorded
run id.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.
Problem
Fleet qualification round 114 (Qwen3.5-9B, main 5afd46c, website-create): the owner listed three event cards and asked for the Midnight card to start hidden behind a "Show sold out" button. The model published the hidden card and a full copy of it in a section the button also revealed. Both were
h2.event-title"Midnight Sold-Out Concert", next to oneh2.event-titleeach for "Dawn Jazz" and "River Lantern Walk".#card-midnightpassed.Pixel had no check for requested content that the published page duplicates.
Change
missingRequestedText(plugin/requested-literals.mjs) now reports a{duplicated: n}miss when all of these hold:heading).templateornoscriptelement.repeats: trueand the check stays silent. The cue is deliberately broad:[ODS Portal ...]lines, such as "or copies of existing files" or "do not call exec again") are removed before the cue is tested.The miss uses the existing flow, with its own fixed text in each place:
requestedTextInstruction):Requested names head more than one item, while each other listed item has one heading: "Midnight sold-out concert" (2 headings). Keep one item per name and remove the extra copies (a control that reveals a hidden item must show that item, not a second copy), then republish and re-inspect.REQUESTED_DUPLICATE_HEADING_REVISION_INSTRUCTION), on the next successful tool result for the same snapshot or at finalization.requestedTextDeliveryNote):The published page shows requested items more than once, while each other listed item appears once: "Midnight sold-out concert" (2 headings). The preview is available, but that requirement is not met.Delivery status isfailed, soreplyPayloadSendingreplaces the model's "fully functional" reply with this host text.Relation to #6723 (preview-visible-at-load). #6723's load-visibility check deliberately skips text the owner asked to start hidden, and this PR does not change that. This check is a static count of published bytes, not a visibility check. A start-hidden card is still counted: in round 114 both the hidden card and the copy that the click reveals are published, which is exactly the defect.
Evidence: corpus re-run through the real implementation (current head)
The corpus is 437 published pages from qualification history that have a recorded request and harness card verdict. The harness duplicate column uses the prototype's harness-equivalent heading counts.
index.html, so counting per document changes no corpus result.Tests
tests/requested_duplicate_heading.test.mjs(9 tests) and the fixturetests/requested-duplicate-heading-round114.json. The fixture holds the recorded prompt, write, publication receipt, inspection receipt and final answer. The recorded bytes reproduce the host snapshot digest and the recorded plan hash.[{text: "Midnight sold-out concert", duplicated: 2}], with exact note, revision and delivery strings.faileddelivery.altattributetemplateandnoscriptcopieswaitlist.html), a detail page's heading, a detail page for every carddialogheading, under another parent tagduplicated: 3duplicatedexclusion from the absent filter, the route-note removal, both "too" guards and the "as well as" guard, and each new cue alternative (23 mutations).The fixture evidence and the replay context no longer carry the recorded run id.
Full Linux pixel-agent suite (
node --test tests/*.test.mjs):Composition with in-flight PRs (
git merge-treeagainst head merged with main)tests/requested_*.test.mjspassing 69/69 when merged in: feat(pixel): search and read public pages in one call (pixel_ods_search_read) #6698, fix(pixel): keep Pixel's prompt append-only across owner messages #6702, fix(pixel): recover owner-turn context overflows by trimming tool output when that fits #6715, fix(pixel): let the turn continue after an in-project rm -rf is refused #6722, fix(pixel): read PDF text in the shared page reader; binary bodies are never page reads #6724, fix(pixel): accept year-less event page dates the page does not contradict #6730, fix(pixel): answer after an unchanged file and check preview bytes when a result is saved #6732, fix(pixel): show schema.org event and offer data from a page's markup in the shared reader #6733, fix(model-recovery): keep an interrupted switch owner-recoverable after docker timeouts #6738, fix(pixel): plan within the output limit, continue a cut Portal turn once, report otherwise #6743, fix(pixel): steer preview tools to their direct route and answer wrapped control tools #6747, fix(pixel): every non-passing preview inspection returns a ready, validated next call or a measured diagnosis #6748, fix(pixel): judge an exit-0 unittest run by the runner's own summary; a coding stop takes precedence over test-command coaching #6752, fix(pixel): a refused rm -rf keeps a current passing test, and the owner gets a receipt instead of guard text #6753, fix(pixel): keep a passing show/hide proof across later passing checks of the same snapshot #6754, fix(pixel): remove the owner's private operating contract from the workspace template #6755, fix(pixel): a harness revision or continuation prompt keeps the owner's request scope #6756, fix(pixel): a stopped turn links an earlier preview only when it continues that project #6760, fix(pixel): let macOS tool-call wrappers run outside the diagnostic observer #6761, fix(pixel): tell sandboxed Pixel what its exec sandbox provides #6763, fix(pixel): carry an unanswered revision into OpenClaw's retry of the owner message #6764, fix(pixel): route a new project's rooted /<name>/<file> write like <name>/<file>; the generic refusal says "Not written." #6765.tool-loop-guard.mjs,workspace-preview-inspect.mjsorindex.js), and Improve Pixel task execution, evidence reuse, and visible progress #6645.requested-literals.mjs. This PR adds 2 small hunks there: theconstlines ofrequestedTextInstructionandrequestedTextRevisionInstruction. Resolve by keeping both sides. fix(pixel): check that owner-requested text is visible when the preview loads #6723'sabsentfilter must also excludemiss.duplicated.Known limits
These are from the adversarial probes and are not changed here:
<div hidden>copy) or appears only when printed. The check reads published bytes, not visibility, because in round 114 both the card and its copy started hidden.aria-hiddenclones are not exempt: in the laptop-iteration true duplicate in the corpus (the same page recorded twice), the start-hidden card was itselfaria-hidden="true".dialogor overlay detail view that reuses the full card markup, so the heading keeps its parent tag. The laptop-iteration true duplicate was this pattern: the button revealed an overlay copy of the card instead of the hidden card.🤖 Generated with Claude Code