page.md: a page whose design is the content carries an image, not just its words (#451)
Closes #334.
A page whose design IS the content — a cover, a designed divider, a title page set as
a design rather than as type — now owes an <img> whose alt carries the appearance,
beside the <h1> and <p> that transcribe the words printed on it and after them, with
the same named placeholder src and "log" entry a logo already takes, and no
<figcaption> of its own.
The gap was structural. Everything the IMAGES AND ALT TEXT bullet says decides what an
alt SAYS, which is reachable only once an <img> exists, and the only sentence telling
the page agent to emit one was the mark example, scoped to a logo, a masthead or a
wordmark — a graphic ON a page, never a page that IS one. On the shipped model the
cover of a 92-page document came back as five paragraphs of text: every printed word
present, so the answer reads as complete, while the colours, the banner and the shape
of the type were gone with nothing in the "log" field recording that the page had a
design. Both agents wrote that reading down — the page agent refused a second time
("the cover design ... is the page itself rather than a distinct image requiring <img>
markup") and the checker downgraded its own finding ("this is borderline — the cover IS
the page — so this note is informational").
Bounded on the other side by the case that produced it: on the same document acir-p003
is the title page, the cover's words in plain capitals on white, where all three arms
emit no <img> and all three are right. A rule keyed on the page's role makes them wrong
and asks a model to describe black type on white, so the rule is keyed on the design.
Three review rounds, each finding what the previous push created: the enumeration named
a title page flatly and contradicted its own guard; "beside" turned out to permit the
shape the one compliant arm produced, the whole page inside a <figure> with the
document's <h1> in the <figcaption> and a 414-character alt reading out every printed
word, which the recheck passed with ok: true; and the caption clause that replaced it
read as licensing a caption of invented prose, so the caption is refused outright with
its reason. The mark rule's src rationale was amended in the same pass, because "the
image you were given is the whole page rather than the graphic on it" stops
distinguishing anything on a page that is a graphic.
The checker half of this defect is NOT fixed here and is filed as #452: on the arm that
did emit the appearance-only alt the contract asks for, the recheck refused it and
proposed alt="", the also-carried-in-full exemption applied to the one case page.md
names as outside it — wording that was already in the contract twice, so this PR's
wording change is not what repairs it.
Prompt text and pins only: no code, no dependency, no workflow path. Both copies of the
prompt are byte-identical, npm test 1692 pass / 0 fail, and nothing here was measured
against a model — spend is halted, and the evidence is the agents' own text.
Co-authored-by: bbertucc <46652+bbertucc@users.noreply.github.com>
Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>