# Backlog

What the reconciliation at stage 08 step 6 decided **not** to do, with the reason and the stage that closes it. One row per item, and every row names who closes it: an entry with no owner is a wish rather than a backlog item.

This file exists because the alternative is silence. A thing that was found, considered and deferred looks exactly like a thing nobody noticed, and the difference is the whole value of having looked.

---

## Open, with an owner

| What is missing | Where it is visible | Why it was deferred | Who closes it |
|---|---|---|---|
| **Neither webfont is loaded.** No `@font-face` and no font host on any of the 62 coloured pages, so `Archivo` and `IBM Plex Mono` resolve from the reader's own machine and fall back to `system-ui` and `ui-monospace` everywhere else | `design/kit/typography.html`, the block with the red rule | The token is correct: it names the family and its fallbacks. What is missing is a link in the document, which is a **build decision and a new external dependency**, and it is the one item on this list whose answer costs money and a request | the user, at handoff |
| **The focus ring on `rail-out` is 1.93:1 in the shipped dark theme.** The record rail is the only full width inverted surface in the product, `--bg-invert` under `--text-on-invert`, and `rail.css` says outright that the way out "is a link and carries the link's" states. The link's ring is `--color-focus`, whose pair is measured against the PAGE ground, so on an inverted surface the pair is inverted with it and the ring lands on the wrong side. 5 instances on 5 screens, the whole `entry` family. Light measures 3.07:1 and passes by a hundredth | `design/entry.html` and its four states, `.rail .rail-out` on keyboard focus. Reproduced by `design/kit/checks/focus.mjs` | **Found at stage 13 by an instrument written for the accessibility checklist, on its first full run.** It is a real WCAG 1.4.11 failure and it is NOT fixed here: the handoff documents the product and does not edit it, and a change to a state token after the acceptance of stage 12 would void every pixel comparison that acceptance stood on. The cure is a question rather than a value: either an inverted surface gets its own focus role, or the rail stops being the only place a control sits on inverted ground | the user, and it is the one row on this list that is a defect rather than a deferral |
| **`--ease-enter` and `--move-sm` are read by nothing in the repository.** Not a component, not a screen, not the stand, not an inline attribute. Both were declared at stage 11 for the work motion calls a connection, and this product has no connection motion: every screen is a separate document, so the moment that would have used them is answered once by `@view-transition` in `base.css`. `--move-sm` is even overridden under `prefers-reduced-motion`, which is an override of something nobody reads | `design/system/tokens.css` section 1g, and `design/kit/motion.html` shows both in the register | Found at stage 13 by the idle control of the map, in two knees. `DESIGN.md` names both in the same sentence that says a token with no reader fails this system's idle control, so the file states the rule and breaks it in one line. Removing them is a one line decision and it is still a change to `design/system/`, which this stage may not make | the user, and it is cheap |
| **A bordered box that holds prose cannot have its border span and its text capped at once, and two of them do.** `.prov`, the provenance rule inside the framed record, and `.cons`, the box naming what a rejection changes. Capped at the measure, the first stops about 436px into an 820px record and ends in mid air, and the second's right edge sits 32px inside the option list above it | `design/entry.html` and its four states; `design/reject*.html` and `design/escalate*.html` | **Both readings are right and they are about different things.** Freed, `.prov` ran 90 and 93 characters at 2200 and 2560 on ten screens and `.cons` ran 81 inside the dialog on ten more, which the width sweep found the moment the cap came off. A sentence at 81 characters is a reading defect; a border stopping short is cosmetic. Holding the rule full width while capping the sentence needs a wrapper neither markup has, and percentage padding resolves against the container rather than the element and did not hold. The cure is a markup change, which makes it a decision rather than a fix | the user, and it is cosmetic |
| **The 66 Figma boards are one control behind the product.** Every board at 1440 and 360 was compiled from the coloured screens before 2026-08-27, so all of them draw a top bar with one control where the product now has two | The `UI · 1440` and `UI · 360` pages of the Figma file, against any screen under `design/` | **A recompilation is a run rather than an edit**, and it needs the plugin connected and the bridge open, which is a session with the user in it. Nothing about the boards is wrong as a record of what was compiled; they are simply older than the product. The tooling that made them is not in this repository either, which is its own open question | the user, and it is a run rather than a decision |
| **`design/kit/shell.html` says `all 52 in colour` in its Where it stands list.** The product has been 66 pages since stage 12 | `design/kit/shell.html`, the last link of the block | Found on 2026-08-27 while adding the theme control to that page. It is the same class the icons page was carrying and it has the same cure: **the number should be computed rather than transcribed**, and the page has no script that could compute it today. Correcting the digit would preserve the defect, which is the rule this project already wrote down | the user, or whoever gives that page a readout |
| **Eight literal tracking values against three tokens no product rule reads.** Six of the eight are small monospace, .04 to .14em | `design/kit/typography.html`, the whole last section | Collapsing them would change stage 04's typography to make a token look used, which is the wrong way round. The spread already satisfies what the dark ground needs. `tag` closed one of the eight in round 1 by reading `--track-mono`; seven are left | step 9, with the count in front of it |
| **`--width-dialog: 520px` has no origin.** Its four neighbours carry one, in the file or in `DESIGN.md` | `design/kit/geometry.html`, under What stops growing | A value with no origin is not a wrong value. Inventing an origin now would be the defect, because it would read as measured | step 9, with `--radius-object` and `--measure` |
| **2px is the fourth line width and it has no token.** The focus ring, the alert toast, the current nav item's underline and the framed record | `design/kit/geometry.html` | `--focus-ring` already bakes 2px into a composite, so a token would have to explain why the ring and the underline are the same number and the panel edge is not. That is a real question about what 2px MEANS here | step 9 |
| **`z1` declares one anatomy for a signed in bar and the product renders two.** The register's axis is `session`, and on the screens the annunciator sometimes carries an override marker and sometimes does not: 9 boxes against 8. 55 of the 61 signed in bars in the coloured corpus are the form the register does NOT publish | The Figma compilation of `design/*.html`, where the bar is refused as an instance on 55 of 61 screens and drawn instead. Reported by the placement pass as `z1 session=Signed in, state=Rest: frames 9/8` | **Found on 2026-08-27 by placing the library into the product rather than by reading either.** The specimen the library publishes is lifted from the first screen alphabetically, which happens to be the minority form, and nothing in the register or on the component page is wrong when read on its own: the bar really does have one `session` axis. What it does not have is a name for the marker. The cure is a second axis or a component for the annunciator, and both are changes to `design/system/`, which the handoff may not make | the user, and it is the largest single class of refusal in the compilation |
| **`impeccable`'s deterministic detector cannot run in this repository and reports success.** Its static engine imports four packages inside a `try` and falls back to a regular expression when they do not resolve; none of them resolve here, and its browser engine has no Chrome. It returns an empty list and exit 0 on any input | Run it on any page of this project. It was canaried at stage 13 with a file carrying `#777` on `#fff`, `transition: all`, an empty button, two `h1` and a marketing sentence, and returned the same empty list | **Found twice at stage 13, once at step 7 and again at step 8**, and both times the finding was the instrument rather than the pages. This matters beyond one stage: the rule of evidence in `CLAUDE.md` requires critique on more than one instrument, and one of the named ones is incapable of contributing. It is an external tool, so the cure is a decision about the environment rather than an edit here | the user, before the next stage that names `impeccable` in its contract |
| **Node 6.1 has no specification, no route and no permission, and the exam proved it by trying.** `sitemap.md` gives it one table row and a five part entity sketch. There is no `ia/docs/pages/6.1.md`, no URL, no `?as-of` ruling, no statement of who may open it, and no built screen carries a control that reaches it, so the claim that it is reached from a case or from a client is untestable | `ia/docs/sitemap.md`, and the second exam run in `handoff/docs/onboarding-gaps.md` section 4 | **Found by an agent with clean context building the node from the handoff alone**, which is the only instrument that could find it: every document is correct on its own, and what is missing is a file nobody promised. Of that run's nine gaps, five are this shape, and they are the IA and voice layers being genuinely empty for a cluster the track deferred rather than a hole in the handoff | the user, and only if cluster 6 is ever built |
| **There is no voice rule for a string the product writes for somebody who is not the analyst.** `voice.md` is 474 lines and every one of them assumes the reader is at the console. A client summary is addressed to a client | `voice/docs/voice.md`, and the second exam run | Found the same way, by building a screen that needed one. The five rules that bind every string all speak to the analyst or to the person who reads the record months later; neither is a customer. Writing that rule is a voice decision before it is a writing task | the user, with cluster 6 |
| **A field has no error state, and the product has a case that wants one.** The reject dialog holds its main action out of reach until a reason is given and says so in a `hint` that never changes | `design/kit/input.html` and `design/kit/hint.html` | The current answer is defensible and it is not a drawn one. Adding a red state would be the first time this product tells the analyst she was wrong about a field, which is a voice decision before it is a visual one | stage 09, with the prohibitions |
| **The inverted chip takes no hover.** Both of its hover surfaces are spent: the ground is the invert plate, which is the top of the ramp, and the boundary is what identifies it against that plate | `design/kit/chip.html` | A token for two instances would break the rule that one use is not a role. The right cure is a product question: the inverted plate is what this system uses for a thing that **reports**, and an interactive chip probably should not wear it | stage 09 |
| **`div.expand` does not become `details.expand`.** Step 2 ruled the rename and step 6 did not execute it | 23 instances across 20 screens | It is not a rename. A `details` collapses by default and needs a `summary`, and a summary is a **string**, which belongs to `voice/docs/microcopy.md` and not to a stylesheet. Executing it here would have meant inventing 23 sentences | stage 09, with the microcopy that goes with it |
| **The annunciator's `|` has no `aria-hidden`.** A screen reader announces the vertical rule between the parts of the strip | `design/kit/annun.html` | Found at the step 4 gate. It is an accessibility fix rather than a system one, and it belongs with the pass that reads the product to a screen reader rather than to a browser | stage 11 |
| **`--radius-object` and `--measure` have zero uses.** One is measured for physical applications, the other is a prose column | `design/kit/geometry.html` and `design/kit/typography.html` | Neither is wrong and neither is used. A token with no consumer is either a decision waiting for a screen or noise, and the count is what decides which | step 9 |

| **The warm ramp is one step short at the fill level, in both themes.** Four usable steps above the page and five fill roles that want one each | `design/kit/checks/themes.mjs`, which reports both collisions as declared | The collision lands on a different pair in each theme, which is what proves the roles are two rather than one: in dark `--bg-selected` and `--bg-active` share a ground, in light `--bg-quiet` and `--bg-active` do. Both are tolerable because the pair never paints the same element and one of them lasts as long as a click. A fifth step is a measurement, not a guess | stage 09, with the patterns that use the fills |
| **`--bg-action` is 2.29 off the light page against 7.71 off the dark one.** The accent button's ground barely reads as a plate in light | `design/kit/color.html`, and the fill line of the theme check | The control is identified by `--line-control` at 4.44, which is what 1.4.11 asks, and the label on it clears 7.48 either way. It is not a failure and it is not the same drawing | stage 09 |

## Opened by stage 09, when the usage rules were first run

| What is missing | Where it is visible | Why it was deferred | Who closes it |
|---|---|---|---|
| **Closed in colour at stage 12. Twenty one grey screens still have no `h1` at 360**, and sixteen coloured ones did until the rollout retagged them. The heading of a case screen is the queue readout, the readout stands in the list column, and at 360 a case screen hides that column: the heading leaves with what carries it. The screens are `case`, `case-acted`, `case-amend`, `case-expired`, `case-investigating`, `case-no-baseline`, `case-unrecorded`, `case-write-failed`, `queue-decided`, `queue-escalated`, `reject`, `reject-axis-b`, `reject-chosen`, `reject-other`, `reject-tenant-normal`, `reject-write-failed`, plus `escalate` and `keyboard` in grey only | Rule R11 in `architecture.md`. `node design/kit/checks/rules.mjs design` now prints 0 broken; the bare `node design/kit/checks/rules.mjs` still prints the twenty one grey ones, which is the measured lag of a frozen corpus rather than a defect list, and `design/kit/checks/diverge.mjs` is where that lag is measured | **Stage 05 already found the contradiction underneath it** and could not see this consequence: `case-file.md` section 7 says "one h1, the case and its client" while nineteen screens make the readout the h1 and the case an h2. Two node specifications disagree, and picking one is an IA decision rather than a system one. The fix is two tag changes on sixteen screens and it changes the document outline of the whole product | stage 12, with the rollout that touches every screen anyway, or sooner if the node specifications are reconciled first |
| **Four escalate screens draw a full width dialog at 360 over a pane that is still rendered.** `reject` drops its scrim at that width with `scrim--desk-only` and the escalate family does not | Rule R3, and `node design/kit/checks/rules.mjs` prints the four | None of the four is in colour yet, so the fix would land on a grey page that is frozen. Whichever of them is built in colour has to answer it, and that is a decision about the escalate flow rather than about the system | the stage that colours `escalate`, which is stage 09 step 5 or stage 12 |
| **Two inline style attributes are still live on two coloured screens**, and two compatibility tokens in `tokens.css` exist only to keep them resolving: `queue-streaming` sets `padding:var(--s4)` on an `empty` and `queue-empty` sets `margin-top:var(--s4)` on a `btn`. The comment on the tokens says step 6 of stage 08 removes them and step 6 did not | `design/system/tokens.css` section 2g, and the two screens | The third of the three, on `entry-gone`, had an exact home already and became `class="wrapline"` at stage 09 with no pixel moved. These two do not: each is a one instance value, and a variant on one instance breaks the rule that one use is not a role | stage 12, when the rollout says whether a second instance exists |
| **The stand's theme bench announces every demonstration twice.** Each component page renders its component in a dark half and a light half, and a screen reader reads both, headings included. On the four pattern pages the demonstration carries up to four product headings, which land at the same level as the page's own sections | every page in `design/kit/` with a `k-bench` | Marking the light half `aria-hidden` would fix it in one line, and it would be one line in 77 pages written across two stages. It is worth doing once, deliberately, rather than on the four pages that happened to notice it | stage 11, with the pass that reads the product to a screen reader rather than to a browser |

## Opened by the self sufficiency test, stage 09 step 5

**The screen was `escalate`, the fourth verdict and the only one of the four with no coloured rendering.** It was assembled from the system with no style of its own and no inline declaration, and these are the four places the system did not reach. **Nothing below was drawn into the system to make the screen work**, which is the whole point of the test: the screen shows what came out of what exists.

| What is missing | Where it is visible | Why it was deferred | Who closes it |
|---|---|---|---|
| **`rcpt` is not a component, and `contact` is the nearest thing that is.** The grey escalate writes a recipient as `.rcpt` with `who`, `meta` and `how`; the system has `contact` with `who`, `meta` and a paragraph, on the outage pages. The screen uses `contact`, so the recipient's name renders at 17px rather than 14 | `design/escalate.html`, the first block of the dialog, against `wireframes/escalate.html` | The two are the same anatomy under two names, which by the anatomy rule of stage 08 makes them one component. Whether that component is called `contact` and gains the escalate use, or is renamed, is a decision about the register rather than about this screen. **The larger name is arguably the better drawing**: it is the answer to the heading above it | stage 12, when the three remaining escalate states arrive and give the question a third and fourth instance |
| **The recipient has no `is-gone` state.** The grey corpus draws it: a dashed border and the name struck through, for a lead who has left the rota between the page and the send | `wireframes/escalate-no-recipient.html`, which has no coloured copy | It is a state of a component that does not exist yet, so it cannot be written before the row above is settled. It is also the one state on this screen that carries a **product** question: what Harrier does when the person it is paging is gone. Node 4.6 already depends on the open question of who receives an escalation | with `rcpt`, and after node 4.6's recipient question is answered |
| **`.esc-first` was declared on three grey screens and worn by no element on any of them.** It reorders a block inside the dialog at 360, and no block ever asked for it | `wireframes/escalate.html` line 24 and its two siblings, all in a page local style block | Stage 08 dropped it from the system as "an order and a margin", and building the screen proved the drop was right rather than lucky: the block it would have moved is already first in source order. **Recorded because a rule that was dead in the grey is worth knowing about before somebody revives it** | nobody. It is closed by being named |
| **`claim--against` is written on 41 pages and declared in no stylesheet, at any stage.** It marks the evidence that points the other way, on 19 coloured screens and 22 grey ones, and it has drawn nothing since stage 04 while the register listed it as a variant beside `claim--absence`, which does draw | `design/system/components/claim.css`, which now says so, and any case screen with contradicting evidence | **A stage forbidden to draw is the wrong place to decide what contradicting evidence looks like.** Attribute A2 spends saturation on two closed sets and calls a fifth use a defect, so this either opens the economy or reuses a value that already means something else. The class stays in the markup because it carries the meaning either way, and the tag inside it already says "points the other way" in words | stage 06's economy, reopened deliberately, or stage 12 when the count of contradicted verdicts is known |
| **`.seek` has no consumer.** One of the nine places, a stack of fields inside a dialog or a block, standing on none of the 52 coloured screens | `design/system/places.css` | It stands in the grey corpus on `log-not-found`, which has no coloured copy yet. A place with no consumer in the sample is not the same as a place with no consumer, and deleting it would mean writing it again at stage 12 | stage 12, which either uses it or deletes it |
| **Forty five coloured screens link a screen that has no coloured copy.** The global navigation's Log item and the `?` keyboard trigger both point at pages that do not exist under `design/`, so every screen in the sample carries two links that 404. Six more link a specific log or escalate state | any coloured screen, in the top bar | **It is a property of the sample rather than a defect of a screen.** Colour holds 52 pages of 62 until stage 12, and the shell writes the navigation from a registry that marks every MVP item as built, correctly, because it is built in grey. The registry already has the branch for an item that is not built yet and it is unreachable today. Wiring it for a colour-only condition would put the sample's incompleteness into the product's own navigation logic | stage 12, which closes it by existing: the rollout builds the pages the links already point at |
| **A three line handover at 360 is one line, and the system has no way to say why in the field itself.** The screen carries two `anote` paragraphs, one per viewport, to explain that the phone gets one prompt instead of three | `design/escalate.html`, the handover block | An `anote` is the case study's own annotation and not product copy, so at handoff those two paragraphs go and the explanation goes with them. What the product would need is a `hint` on the field, and that is a microcopy decision rather than a component one | stage 13, with the pass that separates the annotations from the product |

## Opened by stage 10, when a reader tried to build three screens

**A reader with clean context was given the next stage's real job**, three named screens and four questions about each. Its two lists are in `critique.md`; these are the rows where the answer genuinely is not written anywhere, as opposed to being written somewhere it could not find.

| What is missing | Where it is visible | Why it was deferred | Who closes it |
|---|---|---|---|
| **`amend` is a dialog in one document and a case screen in four others.** The audit lists it among the eleven dialogs; `scrim.html` says all eleven scrims are a reject or an escalate; `dialog.html` lists five reject screens and no amend; `field.html` and `input.html` place its seven fields on `case-amend.html`, a case screen | `design/kit/scrim.html`, `dialog.html`, `field.html`, `docs/responsive.md` section 2 | It is a question about the flow rather than about width: whether amending is a modal answer like rejecting or an edit in place. Node 4.3 decides it and `flows.md` is where the answer belongs | stage 12, when `amend` is built, and the four documents are reconciled in the same pass |
| **Whether `amend`'s scrim is `--desk-only` is decided nowhere**, and that one class decides whether the screen exists at all below 1280. `reject` drops its scrim at that width and `escalate` cannot | `design/kit/scrim.html`, which says 7 of 11 are and names none | It follows from the row above: a modal amendment behaves like reject and an edit in place has no scrim to drop | with the row above |
| **`--row-tracks-log` has no narrow value.** `--row-tracks` collapses to one track below the point and the log's seven stay seven. It is invisible today only because the pattern hides the whole list first | `tokens.css`, beside the collapse rule | The log is deliberately not rendered below the point, so the value is unreachable. It becomes reachable the moment anybody renders a log row anywhere else, and then it is seven tracks in a phone's column | stage 12, if a log row ever appears outside the log |
| **The log at rest has no decision about its foot.** `case-pane` documents the head and the body of the "what the view covers" filling and says nothing about `pane-foot` | `design/kit/case-pane.html`, the variants table | The three case panes with no foot are cases already ruled on, which is a different reason from a view that was never a case. Both readings are defensible and neither is written | stage 12, when the log is built in colour |
| **The scope bar goes below the point and the readout keeps claiming a scope.** The readout is a counted claim about what you are looking at, and its only control is not rendered | `patterns/queue-list.css` | The claim is still true, because the scope is still applied; what is gone is the ability to change it. Whether a claim you cannot act on should be worded differently is a voice decision | stage 12, with the narrow only line the log already needs |

## Opened by stage 12, when the fan out built the four screens the system had never dressed

| What is missing | Where it is visible | Why it was deferred | Who closes it |
|---|---|---|---|
| **`block--rcpt` carried an order and now nothing does.** The grey escalate writes `<section class="block block--rcpt">` with a page local `order:-1` that puts the recipient first inside the dialog at 360. Stage 08 ruled that the modifier takes its form from `block`; stage 09 executed the ruling by dropping the modifier, and the recipient is first in source order anyway | all four coloured escalate screens, and `contact.css`'s header, which described the grey markup as current until this stage | **One instance is not a role**, which is the rule that also refused `esc-first` before it. The order it protected is real and is held by source order alone, which no rule measures: a block inserted above the recipient by anybody who does not know that would move it, silently, at one width only | the stage that gives the escalate dialog a second block above the recipient, or nobody |
| **The one control that makes a recipient exist takes no focus ring.** The fallback list on `escalate-no-recipient` is a `<label class="opt">` inside a `role="radiogroup"` with no input, while `opt.css` says outright that an `opt` is a link and that the ring exists for it. **44 of the 45** `opt` instances in the product are anchors; this is the one that is not | `design/escalate-no-recipient.html`, and `design/kit/opt.html`'s Limits block, which does not say what to do when the grey hands you a non anchor | **Changing an element is not a colour decision.** The grey is frozen and this is a markup question about how a single choice with no destination is expressed, which is node 4.6's and not the rollout's | the stage that answers node 4.6's open question about who receives an escalation, and `opt.html`'s Limits either way |
| **A 12px gap became 8px on one screen, deliberately.** The grey puts `style="margin-top:var(--s3)"` between the recipient and the fallback list; `.block`'s own gap gives `--space-2` | `design/escalate-no-recipient.html`, the "Who this goes to" block | Refused for the same reason as the row above it: a place class for one instance is what the register exists to prevent. Recorded because the difference from the grey is real and deliberate rather than an oversight | nobody. It is closed by being named |

## Opened by stage 11, and there is one

| What is missing | Where it is visible | Why it was deferred | Who closes it |
|---|---|---|---|
| **`.doorhelp summary` is a control with no state.** It carries `cursor: pointer`, it is the only thing on the sign in page anybody clicks besides the button, and its file says "NO STATES". It is the only control in this product with no hover at all | `design/system/components/door.css`, and the five sign in screens | **Motion lands on states and never creates them.** Drawing a hover here would be inventing a state at the motion stage, which is the pattern this project rules against by name: a class the product never wears animates nothing and documents a lie. It is an order against stage 08's five things, and the smallest one in the backlog | whenever the door is next opened, and it is a ten minute job that nobody should do inside a stage that is not allowed to |

## Opened by stage 13, when the showcase and the product were found to disagree

| What is missing | Where it is visible | Why it was deferred | Who closes it |
|---|---|---|---|
| **No instrument compares the showcase against the product.** Every check in `design/kit/checks/` measures the product against itself: the rendered box against the declared token, the file against the register, one width against another. Not one of them reads what a component page **prescribes** and holds it against what the screens carry. `expand.html` has published a **Copy this** line reading `<details class="expand">` since stage 08 while every product screen carried `<div class="expand">`, and nothing could see the difference. **Cost: 21 instances on 21 screens, wrong for two stages** | `design/kit/expand.html`, its Copy this block, against any case screen before stage 13 | **The class is invisible to everything that already runs here.** To a text detector a component page is prose; to a browser it is a rendered page; and the sentence in it naming which ELEMENT to write is neither. A rendering comparison cannot help either, because the showcase renders its own correct markup: both sides looked right, separately. The shape of the cure is known and it is a new instrument rather than an edit, which is not a thing a documentation pass may write | **a check, not a correction.** It parses the `k-code` block on every component page, extracts the element and the class it prescribes, and compares that against what `design/*.html` actually carries for that class. Owner: the user, with the next instrument written for `design/kit/checks/` |

## Opened by the fixture correction, after stage 13

| What is missing | Where it is visible | Why it was deferred | Who closes it |
|---|---|---|---|
| **No instrument reads one half of a screen against the other half.** Every check here measures a rendering against a rule of the system: the box against the token, the file against the register, one width against another, one theme against its pair. Not one of them reads a **fixture** on the left of a split pane against a **fixture** on the right. The fleet gave Norsk Marine a ceiling of `Investigate` while the queue row two hundred pixels away wore `acted`, which is defined as Clerk having acted under its latitude, so the product's own drawing said Clerk contained a host at a tenant where it may only look. **Cost: 32 screen files, five stages of critique on five instruments, and both readers who found it were agents with clean context** | `design/queue.html` and its thirty siblings, the Norsk Marine row against the Norsk Marine fleet row, before the correction | **The class is invisible to every instrument that measures a rule.** Both halves were impeccable on their own: the chip was a declared class carrying declared tokens, the ceiling was a declared class carrying declared tokens, and nothing in the system says those two strings are related. It is a check about the PRODUCT's semantics rather than the system's, which is a new kind of instrument here and not a thing a correction pass may invent | **a check, not a correction.** It reads the fleet ceiling for each tenant on a screen, reads every row for that tenant on the same screen, and asserts that no row claims an act above the ceiling. The rung ladder it needs is already written in `ia/docs/pages/reading-conventions.md`. Owner: the user, with the next instrument written for `design/kit/checks/` |

## Closed at stage 12, and the rows above are left standing rather than deleted

**A backlog whose closed rows vanish reads as a backlog nobody ever opened.** Every row named here is still written above, under the stage that opened it, with the reason it was deferred intact. This section says what happened to it, because the difference between "considered and closed" and "never noticed" is the whole value of having looked.

| The row | What stage 12 did |
|---|---|
| **Seventeen coloured screens with no `h1` at 360** | **Closed.** The `h1` follows what renders at 360, which settles the contradiction in favour of `case-file.md` section 7. Three declarations changed, no pixel moved, and `rules.mjs` reports 124 renderings of R11 with nothing broken. The full ruling is in `architecture.md` section 10 |
| **Four escalate screens draw a dialog over a pane at 360** | **Closed by measurement, and stage 10 had already closed it without noticing.** The scrim drops its padding and stretches below the point, and `z5` is not rendered there at all. R3 holds on all four |
| **`rcpt` is not a component and `contact` is the nearest** | **Ruled.** `contact` is the component and keeps its name and its 17px |
| **The recipient has no `is-gone` state** | **Built.** `contact.is-gone`, a domain state: dashed boundary, the name struck and dropped to secondary, and the name stays |
| **`.seek` has no consumer** | **Closed by use.** It stands on `log-not-found` |
| **`--radius-object` and `--measure` have zero uses** | **Half closed, and the other half was already closed at stage 10.** `--measure` widths `miss` as well as fourteen kinds of prose in `base.css`. `--radius-object` still has none |
| **`--row-tracks-log` has no narrow value** | **Ruled unreachable, by measurement.** `queue-list--log` does not render the list below the point at all, and the rollout added no log row anywhere else. The third census is what proves it |
| **The log at rest has no decision about its foot** | **Ruled: no `pane-foot`.** The log's pane is a view that was never a case, so there is nothing on it to rule on. Both readings ended at the same drawing and what was missing was the reason |
| **The scope bar goes below the point while the readout still claims a scope** | **Closed by reading the screen rather than the pattern file.** The narrow line the row asked for was drawn at stage 04 and worded at stage 05 |
| **`claim--against` is declared in no stylesheet** | **Ruled: it stays undrawn**, on 22 coloured pages, and it is a declared exemption in `screens.mjs` with the reason |
| **`.qfoot kbd` and `.key` do the same job in two forms** | **Closed twice, the second time the other way, and the second is the ruling.** Stage 12 closed it as two jobs: a key you could press against a key you are being taught. **The reason contradicted `qfoot.css`'s own first paragraph**, which says the foot of the queue is where the keyboard is TAUGHT, so both forms were on the teaching side of a line drawn between teaching and pressing. Reopened and folded on 2026-08-26 by the owner: one component, `key`, on a `kbd` element everywhere, 307 of them. The estimate in the old row, 21 renderings on 7 screens, was the coloured sample of the day; the corpus it landed on is 147 on 49 |
| **Forty five coloured screens link a screen that has no coloured copy** | **Closed by existing.** The rollout built the pages the links already pointed at. Zero dead internal links across all 62 screens |
| **`amend` is a dialog in one document and a case screen in four others**, and whether its scrim is `--desk-only` is decided nowhere | **Settled by the screen rather than by a document.** `case-amend.html` has no scrim and no dialog: the fields stand in the pane, so amending is an **edit in place**, and the scrim question dissolves. `scrim.html` carries the answer now |

### And three rows are NOT closed, which is why they are still above

`div.expand` does not become `details.expand`: it needs 23 summary sentences, which is microcopy, and it moves to the handoff. Neither webfont is loaded, which costs money and a request. And `.doorhelp summary` still has no state, on five screens this stage never touched.

**The first sentence above was wrong twice, and stage 13 measured both halves.** It needed **one** summary sentence and not 23: the 27 instances carry **7** distinct bodies, and 6 of the 7 are handover notes that already open on a tenant and an analyst, which is their own head. And the owner it names contradicts the row itself, which said stage 09. The correction is the row below rather than an edit here, because this paragraph is what stage 12 believed and the belief is the finding.

## Closed at stage 13, and the row above is left standing rather than deleted

| The row | What stage 13 did |
|---|---|
| **`div.expand` does not become `details.expand`** | **Closed, and the price was wrong by a factor of 23.** 21 instances on 21 screens are now `<details class="expand"><summary>How this was read</summary>`, closed by default, and the 6 handover notes stay a `div` with no head by decision rather than by omission. **The row priced the work at 23 invented sentences; the real count of distinct bodies is 7, and 6 of those already carry their own head, so the true cost was one sentence.** The row also named the wrong owner twice: it said "stage 09, with the microcopy that goes with it" while the stage 12 paragraph above says it moves to the handoff, and the two were never reconciled. The mark moved from `.expand::before` to `.expand > summary::before`, so a filling with no head loses it by construction; the print block in `base.css` now unhides `::details-content` instead of setting `display` on the box, because a native `details` hides its body there and a closed disclosure would otherwise print as its own label. It is rule **R13** in `architecture.md` and a function in `rules.mjs`: **39 held, 93 not applicable, 0 broken** over the coloured corpus at 1440 and 360 |
| **The absorption of the door's five `summary` into this component** | **Dropped out loud rather than deferred.** It was a plan in the stage 08 rename map and it never executed. The door's help is a question on a full page with one form on it; `expand` is depth on a claim inside a list of evidence, and this component's bordered surface would tell the reader there is working to check where there is only an answer. `doorhelp` stays a zone of `doorcard`, declared in `door.css`, and the component's count falls from **32 across 28 screens to 27 across 23** |

**One part of the row is genuinely still open and it is a new row above**, under *Opened by stage 13*: nothing in `design/kit/checks/` compares what a component page prescribes against what the product carries, which is why this sat for two stages with both halves looking correct on their own.

## Closed by the reconciliation itself

| What | What happened |
|---|---|
| **Thirteen components the register did not have** | Written. `inventory.md` section 13 names all of them and why the census missed them. The register went from 60 to 73 |
| **`.icon`, zero instances anywhere** | The stage 07 icon class, superseded by CSS masks. Removed rather than carried |
| **Eight classes that looked like components and were not** | `doorbtn`, `doormark`, `doordest`, `out-contact`, `sa-fresh`, `sa-route`, `z6-more` became zones of their hosts, and `gone-all`, at one instance, waits for a second before it earns a name |
