feat: a true status-line badge, the capture drain and the fidelity audits of run A - #730
Merged
Merged
Conversation
The badge reads exactly one of three labels (abcd-managed, waiting on the product thinker, waiting on the technical facilitator) and never the bare tool name. Its colour ends at the badge: the closing sequence restores the default foreground and background (SGR 39;49) rather than a full reset, so the rest of the row keeps the host's own styling. The guard hook now answers for the host's question tool (AskUserQuestion): in a managed checkout with the local tier, a question asked while the mode reads managed is refused with exit 2, naming `abcd mode product-thinker` and `abcd mode facilitator`; once the mode names somebody the question runs and a question_open marker is written in .abcd/.work.local/. The prompt-router hook resets the mode to managed on the next human message when the marker is present, clears it, and says so in one stderr line. The mode verb is unchanged. The PreToolUse matcher widens to Bash|AskUserQuestion, keeping one entry group. The question gate lives in guard_question.go; guard.go gains one dispatch before its shell-command path and a paragraph of help text. Decision taken here: the paint closes with 39;49 instead of SGR 0, the reading of "colour ends at the badge" that also stops the badge cancelling a dimmed host surface. Refs: iss-2609170627427239, iss-2609170709035405 Assisted-by: Claude:claude-opus-5-5
Resolves: iss-2609170627427239 Assisted-by: Claude:claude-opus-5-5
…badge Resolved as itd-2609212130146198 scopes it. The two-tone split the capture proposed is not built. Resolves: iss-2609170709035405 Assisted-by: Claude:claude-opus-5-5
The badge reads one of three labels, the guard refuses a question while the mode reads managed, the verb stays the setter, the prompt hook resets the mode on the answer, and the badge's colour ends at the badge. Delivers: itd-2609212130146198 Assisted-by: Claude:claude-opus-5-5
The review of the status-line badge lane (FIX FIRST) named one medium, two low and one nit; each is captured before it is fixed. Refs: iss-2609260100382261 Refs: iss-2609260100393814 Refs: iss-2609260100396332 Refs: iss-2609260100391018 Assisted-by: Claude:claude-opus-5-5
…efusal With .abcd/.work.local/ present but not writable, HasTier read true and the absent store read managed, so the question gate refused every question with exit 2 while its named remedy, `abcd mode facilitator`, failed on permission denied: a refusal nobody could answer, repeated forever. mode.CanSet probes what SetAt needs: the tier is a real directory, nothing at the store's path that the writer's rename cannot replace, and a file can be created in the tier (created and removed, so no residue either way). The gate asks it before refusing, and where the verb could not set the state it fails open loud, exit 1, NOT CHECKED, the guard's own contract. HasTier's comment says what it tests, presence, and points at CanSet for writability. Refs: iss-2609260100382261 Assisted-by: Claude:claude-opus-5-5
ResetOnAnswer wrote managed and then removed the marker. With a directory planted at the marker's path the removal failed after the write, so every later message reset a hand-set mode again and repeated the same error, with the cause never cleared. The reset now refuses a directory at the marker's path before it writes anything: the gate only ever writes one file there, and the write-then-remove ordering is safe only for a marker the reset can remove. The refusal names the path and leaves the mode as the human set it, one line per message. The store's errors now say whether the mode moved, and the prompt hook prints that one line as it is, so no path reads "not reset" after a reset. Refs: iss-2609260100393814 Assisted-by: Claude:claude-opus-5-5
…tice The badge hard-coded "waiting on the technical facilitator" while mode.State.Addressee(), which claimed to be the one seam for that wording, said "facilitator", so `abcd mode facilitator` printed "waiting on the facilitator" beside a badge naming the technical facilitator. The intent this lane ships rules the badge's words: `waiting on the technical facilitator`, `waiting on the product thinker`. Addressee now returns the role in full, and mode.State.WaitingOn composes the "waiting on the …" phrase once; the badge's two role labels and the set form's notice both read it. TestBadgeAndNoticeNameTheSamePerson renders both for each role state and requires the notice's words to appear whole as the badge. Refs: iss-2609260100396332 Assisted-by: Claude:claude-opus-5-5
The PreToolUse entry guards the shell tool and the host's question tool, but its shim said "shell commands run UNGUARDED" whenever the binary was missing or failed to run, a question call included, naming a hole that call did not open. The shim reads the payload once, picks the noun from its tool_name, and says "questions through AskUserQuestion run UNGUARDED" for a question call; the shell wording is unchanged. The payload is handed to the binary byte for byte, which TestGuardShimHandsTheBinaryThePayload holds. Refs: iss-2609260100391018 Assisted-by: Claude:claude-opus-5-5
…where abcd mode could answer Resolves: iss-2609260100382261 Assisted-by: Claude:claude-opus-5-5
…annot clear Resolves: iss-2609260100393814 Assisted-by: Claude:claude-opus-5-5
…he owed person in one place Resolves: iss-2609260100396332 Assisted-by: Claude:claude-opus-5-5
…t let through Resolves: iss-2609260100391018 Assisted-by: Claude:claude-opus-5-5
site setup read the repository's environments, an environment's deployment branch policies and its secret names with per_page=100 and no pagination, so an environment past the hundredth read as absent and setup would have created it through the endpoint that replaces its whole protection set, required reviewers included. Each list read now follows the pages to the total_count the forge reports, and a page that cannot be read, or a list that comes back short of its total, fails the read rather than shortening it. The pages are followed by number against total_count through the existing gh seam rather than with `gh api --paginate`: that concatenates one JSON document per page into a single capped read, where a truncation at a document boundary would pass as a shorter list. The forge's gh call is now a field, so the tests drive the real ghForge against an in-process fake of the API. Refs: iss-2609260927217168 Assisted-by: Claude:claude-opus-5-5
…reads Resolves: iss-2609260927217168 Assisted-by: Claude:claude-opus-5-5
site setup took the default branch from scaffold's local derivation (origin/HEAD, else the checked-out branch, else main), so on a checkout with no origin/HEAD run from a feature branch the workflow gated on that branch and a correctly restricted environment was told to remove its rule for the real default. The Forge seam gains DefaultBranch, read from the repository object's default_branch, and setup resolves the forge before the repository stage so the workflow, the environments' branch rule and the push step all name the forge's branch. The checkout's branch stands in only when the forge cannot answer or names a branch outside the workflow's allowlist (scaffold.SafeBranchName, the allowlist the local derivation already held), and the notes then say so, naming the branch used. The forge is now read before the repository stage writes, so a refused repository stage reports that no remote change was attempted rather than that nothing remote was; the brief chapter and the command page say the default branch is the forge's. Refs: iss-2609260927214634 Assisted-by: Claude:claude-opus-5-5
…the forge's Resolves: iss-2609260927214634 Assisted-by: Claude:claude-opus-5-5
The site header always linked /docs/, and a link to a documentation page always became its /docs/ route, so a managed repository set up with site setup, whose composition declares no docs surface and whose workflow runs no docs build, served a navigation entry and body links that 404 on every page. The /docs/ tree is not this build's output (the docs build writes it beside it), so the composition's existing docs block is what says it is there: with a docs.index the header links it and docs pages reach their routes, as on abcd's own site; without one the header carries no Docs entry and a link to a documentation page goes to the forge's view of the file, like any other file the site has no page for. No new switch: the page-set switches do not carry the docs tree, and the docs block already names it. Refs: iss-2609260928152365 Assisted-by: Claude:claude-opus-5-5
… it has one Resolves: iss-2609260928152365 Assisted-by: Claude:claude-opus-5-5
Two defects confirmed while working lane drain1: the renderer's forge links name blob/main whatever the default branch is, and the verification matrix calls resolve's grounds required. Refs: iss-2609261206437257, iss-2609261206436289 Assisted-by: Claude:claude-opus-5-5
capture resolve refused an unknown id and a transition conflict at exit 1, the code a fault takes, while a malformed grounds value on the same verb exited 2; so did an impact, a provenance reference, a --shipped-in or a --production-mode outside its shape, and the sibling verbs (wontfix, promote, defer, link and the capture write's --blocked-by) had the same split. The core gains ErrRequestRefused, which marks a refusal of the request's own input while keeping its message, beside the sentinels it already raised for an unknown id, a conflict and grounds; the surface's one captureRefusal maps all four to exit 2 on every ledger verb, names the verb once, and leaves exit 1 to a fault (a ledger that cannot be read or moved; an I/O error behind an existence probe stays a fault). It replaces groundsUsageError, whose class it subsumes. The verification matrix row said an unknown id and a transition conflict each had their own exit code (x-099), and that grounds were required (x-098); it now states the shared code and that grounds are recorded when given, and the command page and the capture chapter say which refusals exit 2. Refs: iss-2609260552251398, iss-2609261206436289 Assisted-by: Claude:claude-opus-5-5
Resolves: iss-2609260552251398 Assisted-by: Claude:claude-opus-5-5
Resolves: iss-2609261206436289 Assisted-by: Claude:claude-opus-5-5
Eight renderer sites built the forge's view of a repository file as <repository>/blob/main/<path>, so a managed repository whose default branch is not main served forge links that 404 on every page that carried one. The build reads no forge, so it cannot learn the branch's name; the forge's HEAD names the default branch whatever it is called. One forgeBlob helper now builds every such link, and the golden pages differ from before only in blob/main becoming blob/HEAD. Refs: iss-2609261206437257 Assisted-by: Claude:claude-opus-5-5
…anch Resolves: iss-2609261206437257 Assisted-by: Claude:claude-opus-5-5
The drain1 review (FIX FIRST) found a forge list read that holds no total across pages, --found-at refusals exiting 1, an unreadable status directory reading as an unknown id, and history links that still name main. Refs: iss-2609261241117925, iss-2609261241119343, iss-2609261241121312, iss-2609261241126008 Assisted-by: Claude:claude-opus-5-5
listAll read total_count afresh on every page and never compared it with the first page's. A list that shrank between two page reads shifted an entry from the second page onto the first, where it was never read, and the second page's smaller total then matched what had been served, so the read returned whole with one environment missing; setup would read it as absent and on confirm PUT the endpoint that replaces its whole protection set. The read now holds page 1's total and fails closed on a later page reporting another, whether the list shrank or grew. Refs: iss-2609261241117925 Assisted-by: Claude:claude-opus-5-5
A --found-at path that leaves the checkout or does not exist in it is the caller's input with nothing written, yet checkFoundAt returned plain errors, so the capture write exited 1, the code a fault takes, while the command page and the brief say a flag value naming nothing exits 2 on the capture write alike. Both now unwrap to ErrRequestRefused. A path the check could not stat for any other reason (a directory on the way that cannot be searched, an I/O error) says nothing about the input, so it stays a fault at exit 1, and the page and the brief say so. Refs: iss-2609261241119343 Assisted-by: Claude:claude-opus-5-5
…wn id findIssue skipped a status directory os.ReadDir could not read, so with open/ unreadable resolve, wontfix and defer reported the id as not found in any status directory: ErrUnknownIssueID, the refusal of the caller's input at exit 2, about a ledger nobody read. The same swallow sat in the mint's occupancy check (issPresent read an unreadable folder as holding nothing, so a forced id could be reserved past a copy it could not see), in the one-status-per-id check that list and status run before they render (an unreadable folder rendered as empty), and in the orphan-placeholder sweep. One readStatusDir now reads every status directory these use: an absent one is still no entries, any other read error is returned naming the directory ledger-relatively, and the surface maps it to exit 1. scanLedger keeps its skip because every caller runs the one-status-per-id check first. Refs: iss-2609261241121312 Assisted-by: Claude:claude-opus-5-5
The forge file links went to blob/HEAD, but three builders still named a branch called main: a record page's history link (commits/main/<path>), the graph page's history base, and a record page's link for a relative target that is not markdown (tree/main/ for a directory, blob/main/ for a file). On a repository whose default branch is not main every one of them 404s. One forgeView helper now builds every forge link into the repository, forgeBlob among them, each naming HEAD. The golden pages differ only in commits/main and tree/main becoming commits/HEAD and tree/HEAD. Refs: iss-2609261241126008, iss-2609261206437257 Assisted-by: Claude:claude-opus-5-5
Assisted-by: Claude:claude-opus-5-5
Ingests the intent-auditor verdicts for the name banlist (7 criteria: MET 5, MET_WITH_CONCERNS 2) and the record-families glossary page (5 criteria: MET 4, MET_WITH_CONCERNS 1), each claim cited into the tree at 5b4a43b. Two divergences of substance are captured: the public banned-names family does not reach the shipped artefact, and ahoy writes no public family where the docs-lint config path is gitignored. Refs: iss-2609261457358637 Refs: iss-2609261457353277 Assisted-by: Claude:claude-fable-5-1
Ingests the intent-auditor verdicts for the lab verb family (6 criteria: MET 5, MET_WITH_CONCERNS 1; one scope condition survived, one untested) and the spec-tied review pin and staleness view (5 criteria: MET 2, MET_WITH_CONCERNS 3), each claim cited into the tree at 5b4a43b. Two divergences of substance are captured: halt-and-record reaches only the lab's own gates, and the review pin is a charter obligation rather than a tool write. Refs: iss-2609261457366568 Refs: iss-2609261457365969 Assisted-by: Claude:claude-fable-5-1
Assisted-by: Claude:claude-opus-5-5
…2609020625402518 Both audited against the tree at 4001d80: every criterion MET, every scope condition survived, no divergence found, nothing captured. Assisted-by: Claude:claude-fable-5-1
…2609020625405170 Both audited against the tree at 4001d80: every criterion MET, every scope condition survived, no divergence found, nothing captured. The coldreading-tagged eval was run for the two read-block criteria. Assisted-by: Claude:claude-fable-5-1
Refs: iss-2609261924541555 Assisted-by: Claude:claude-opus-5-5
Refs: iss-2609261943168303 Assisted-by: Claude:claude-opus-5-5
idRe, behind FilenameNumRe, ran regexp.MustCompile on every call, and the resolver and peers call it once per record file, so every scan compiled the same pattern once per record in the checkout. The pattern is a pure function of a fixed family tag, and a *regexp.Regexp is safe for concurrent use, so each family's is compiled once and shared. Deriving one id drops from 89 allocations to 3. The bare-board tests in internal/surface/cli spent 29% of their CPU compiling it. Refs: iss-2609261943168303, iss-2609261924541555 Assisted-by: Claude:claude-opus-5-5
ProseShapeClaims compiled one regexp per sub-verb path and ran it over the whole chapter. The pattern opens on a character class, so the engine has no literal to skip to and each run is a full NFA pass. Every word of a path is spelt literally in its pattern and blanking only removes bytes, so a path with a word the masked text lacks cannot match: it is skipped before it is compiled. The claims reported are unchanged; the core ProseShapeClaims tests fail when the filter skips a path that can match. TestSurfaceChapterProseStatesNoShape: 1.62s -> 0.54s, and 38.2s -> 12.8s under -race. Refs: iss-2609261924541555 Assisted-by: Claude:claude-opus-5-5
TestHistoryCaptureAcceptsWhatTheHooksAccept is one goroutine running the scanner's two passes over 9 MiB. Under -race it took 125.5s against 6.1s uninstrumented: a third of the package's race time, on the macOS check leg that overran the merge queue's 30-minute cap. The detector has nothing to watch there, so it skips under -race and the plain lane asserts the same cap on both CI legs. A raceEnabled build-tag pair answers it, the mechanism internal/adapter/scanner and internal/core/guard already use for their cost guards. Refs: iss-2609261924541555 Assisted-by: Claude:claude-opus-5-5
…nce per family Resolves: iss-2609261943168303 Assisted-by: Claude:claude-opus-5-5
TestSurfaceChapterProseStatesNoShape matches every sub-verb path against every committed chapter in one goroutine. With the path prefilter it takes 0.6s uninstrumented and still 12.8s under -race, the largest race cost left in the package, with nothing for the detector to watch. It skips under -race through the same raceEnabled pair, and the plain lane asserts it on both CI legs. Refs: iss-2609261924541555 Assisted-by: Claude:claude-opus-5-5
Assisted-by: Claude:claude-opus-5-5[1m]
…he cap's margin Paired on one machine, base d850f06 against this branch: cli under -race 410.1s -> 186.1s, and go test -race ./internal/... 532.7s -> 310.0s, where cli is no longer the lane's tail. The plain lane is unchanged within noise. Resolves: iss-2609261924541555 Assisted-by: Claude:claude-opus-5-5
itd-34 (receipt rcp-03d2e3b295e8): 4 MET, 1 MET_WITH_CONCERNS — the bundle command refuses without --bundle on the CLI and the ask lives on the plugin page, as the spec records. itd-2609150819445595 (receipt rcp-dd80727d7bd1): 8 MET, both scope conditions survived; the listing, the board count and the dispatcher were exercised live on the tree at 4ce401c. Assisted-by: Claude:claude-fable-5-1
itd-53 (receipt rcp-d2372b1cb47f): 1 MET, 3 MET_WITH_CONCERNS — the run, ingest, no-reviewer and NOT_MET-capture halves of the drain are plugin-page prose, not code; the press release's missing-or-unmet list has no surface, captured as iss-2609262107472569. itd-48 (receipt rcp-80414ddf96b9): 4 MET — the consistency pass; the shape role moved to itd-34's lint by decision 1, and the pass has not yet run over the real corpus. Refs: iss-2609262107472569 Assisted-by: Claude:claude-fable-5-1
Main carries integ2 through integ5 (#726-#729). Two conflicts, both by hunk: reading-presets.json takes main's figures and is re-measured in a later commit; brief 04-surfaces/06-capture.md keeps main's admission, surprise and reframe paragraphs and drain1's exit-code paragraph after them. commands.md and surface.json regenerate with no drift; the other expected files auto-merged. Assisted-by: Claude:claude-opus-5-5
…er-verb claim The re-merge brought integ3's admit, surprise and reframe beside drain1's claim that every refusal of a ledger verb's input exits 2. They, the disposition verb and the mentions listing exit 1 on their input's refusals, and migrate exits 2 on a fault. Refs: iss-2609262211082803 Assisted-by: Claude:claude-opus-5-5
…exits 1 The reading ledger's verbs now route through captureRefusal as the issue verbs do. The core marks the request's own refusals: a malformed item, occasion or record id, a disposition field outside its shape, a supersedes that names no standing answer or its absence, an item already admitted or at another position, an admission over an answer in another state or ground, a second open reframe, a reframe with nothing to record, an occasion not committed before the rewrite, and a named mentions ref that names no commit. An answer or admission before characterisation joins them. A contested or tangled answer set and a record that contradicts itself stay faults. Migrate, which takes no input to refuse, exits 1 on its faults instead of 2. The capture page and brief chapter say so. TestReadingLedgerRefusalsExit2, TestReadingLedgerStandingRefusalsExit2 and TestCaptureMigrateFaultExits1 were watched fail on a scratch copy of the merge (23 cases exited with the other code) and pass here. Refs: iss-2609262211082803 Assisted-by: Claude:claude-opus-5-5
…t-code rule Resolves: iss-2609262211082803 Assisted-by: Claude:claude-opus-5-5
Records only: the fidelity-audit notes of 32 shipped intents (each OWED marker becomes its ingested verdict) and 8 new minor captures in issues/open/. Clean: no collision with the intents main or the lanes edited. Refs: iss-2609261423210391 Refs: iss-2609261423214723 Refs: iss-2609261423222935 Refs: iss-2609261457358637 Refs: iss-2609261457353277 Refs: iss-2609261457366568 Refs: iss-2609261457365969 Refs: iss-2609262107472569 Assisted-by: Claude:claude-opus-5-5
Measured on a clean clone of b198acc (dry-run assemble, rule (e)): widening 1,265,015 tokens / 4,870,311 bytes, 1,280,000 kept (1.18% headroom); entailment 377,255 / 1,452,432, 380,000 -> 390,000 (0.73% headroom was below the floor); detection 1,274,051 / 4,905,099, 1,290,000 kept (1.25%). Comparative is unchanged. Refs: iss-2609251455354719 Assisted-by: Claude:claude-opus-5-5
REPPL
enabled auto-merge
September 26, 2026 22:40
…k fits the queue's cap #730's macOS check was cancelled at the 30-minute cap twice (the PR run and its re-run). ciFast is the reviewed fix (review-ciFast SHIP): it speeds the suite and touches no timeout, job name or ruleset. Resolves: iss-2609261924541555 Resolves: iss-2609261943168303 Assisted-by: Claude:claude-opus-5-5[1m]
The 9 MiB history capture starts no goroutine of ours, but the identity probe's git calls do start os/exec's pipe-copy goroutines, so "one goroutine" was not literal; the comment, the skip message and the resolution text say "no goroutine of ours". The prose prefilter's blanking replaces bytes with spaces rather than removing them; the argument holds because a space can spell no word, and the comment says so. Wording only, from the ciFast review. Refs: iss-2609261924541555 Assisted-by: Claude:claude-opus-5-5
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.
Two reviewed lanes and the fidelity audits of run A land together on one integration branch, with one recalibration of the cold-reading windows at the merged tip.
The status-line badge is true at every stop (itd-2609212130146198). The badge reads
abcd-managed,waiting on the technical facilitatororwaiting on the product thinker, and its colour ends at the badge, so nothing after it takes the badge's paint. In a checkout abcd manages, a question through the host's question tool is refused whileabcd modereads managed, and the refusal namesabcd mode product-thinkerandabcd mode facilitator; once the mode names somebody the question runs and is marked open, and the next human message resets the mode to managed. Whereabcd modecould not write the state, the question runs with a loudNOT CHECKEDwarning rather than a refusal nobody could answer, and a probe the gate leaves behind is swept by the next one. The badge and theabcd modenotice name the owed person in the same words, and the guard hook's shim names the tool whose call went through unguarded.Site setup, site links and capture refusals.
abcd site setupreads every page of the forge lists it decides on, refuses a list whose total moves between pages, and restricts deployment to the forge's default branch rather than the checkout's. The rendered site links forge files, history and directories on the default branch (HEAD) rather than onmain, and links a docs tree only when the site declares one. Every ledger verb's refusal of bad input exits 2, including a--found-atthat names nothing in the checkout; exit 1 is a fault, and an unreadable status directory is reported as one rather than as an unknown id.Re-merge. This branch re-merges main after integ2-5 (#726-#729). Two files conflicted and were combined by hunk: the capture brief chapter keeps main's admission, surprise and reframe paragraphs and this branch's exit-code paragraph, and the reading presets take main's figures before they are re-measured. The generated CLI reference regenerates with no drift. Where the lanes meet: the claim that every ledger verb's refusal of bad input exits 2 is now true of every capture sub-verb.
disposition,admit,surpriseandreframeexit 2 on an id or occasion that is malformed or names nothing, a ground or flag value outside its shape, a request the standing records do not admit, and an answer or admission before characterisation;mentionsexits 2 on a--refthat names no commit; andmigrate, which takes no input to refuse, exits 1 on a fault where it exited 2 (iss-2609262211082803, three tests watched fail first). The scaffold's reported default branch and site setup's forge-read default branch stay one source per path behind one sanitiser, and both lanes' tests pass. The worked-example, Use-line and bare-render tests pass over this branch's verbs unchanged, and there is no test import cycle. The windows are re-measured at the re-merged tip, after the audits merge: widening 1,265,015 tokens (window 1,280,000 kept), entailment 377,255 (380,000 to 390,000), detection 1,274,051 (1,290,000 kept).Fidelity audits of run A. The records-only branch
chore/audit-run-a-1lands here: the fidelity audit of 32 shipped intents, each OWED marker replaced by its ingested verdict, and 8 minor captures of promise gaps the audits found, which stay open. Across the 32 intents the criteria read 180 met, 36 met with concerns and 5 not met; the not-met are itd-65 ac-11 (superseded whole by a recorded decision) and itd-36's four criteria its spec declared out of scope, already open issues. Per intent (met/concerns/not met, receipt): itd-2609061543533170 4/2/0 (rcp-070279698e5f); itd-146 6/0/0 (rcp-cdad1c08a756); itd-65 6/4/1 (rcp-28b4f73968a9); itd-66 6/2/0 (rcp-04706634ba21); itd-93 8/0/0 (rcp-1957b22ad5cc); itd-112 6/0/0 (rcp-c0f8eb651646); itd-117 6/1/0 (rcp-056068d9886e); itd-122 9/0/0 (rcp-4bf2cc7ba486); itd-2609020625405251 7/1/0 (rcp-dd287c31bbb6); itd-2609231434459890 8/0/0 (rcp-46f69cff6b50); itd-2609212113220149 5/0/0 (rcp-47bbe53f5074); itd-2609212130136102 5/0/0 (rcp-dd80f3fcae80); itd-105 6/1/0 (rcp-bba9a75a2d1d); itd-121 10/0/0 (rcp-e85e544ece36); itd-136 7/1/0 (rcp-5a9275d115bd); itd-135 4/4/0 (rcp-0070560a7803); itd-137 6/1/0 (rcp-6a21b21ffdd6); itd-138 3/2/0 (rcp-06e2fd44220d); itd-36 5/4/4 (rcp-f3f5495f519e); itd-69 1/2/0 (rcp-2cf45c57ec66); itd-74 5/2/0 (rcp-3ceed52bdb99); itd-2609211913453478 4/1/0 (rcp-682701bb01e2); itd-2609212137128014 5/1/0 (rcp-2e848c471a09); itd-28 2/3/0 (rcp-9945c0269d6c); itd-2609020625400194 8/0/0 (rcp-77c7c87559c2); itd-2609020625402518 5/0/0 (rcp-987317795e99); itd-2609020625402599 8/0/0 (rcp-6654dbf923b3); itd-2609020625405170 8/0/0 (rcp-df264ca3973f); itd-34 4/1/0 (rcp-03d2e3b295e8); itd-2609150819445595 8/0/0 (rcp-dd80727d7bd1); itd-53 1/3/0 (rcp-d2372b1cb47f); itd-48 4/0/0 (rcp-80414ddf96b9). The captures: iss-2609261423210391 (itd-135: no test that the Beta badge is absent at v1), iss-2609261423214723 (itd-138: the README one-liner is held to the template by assertion, not rendered from it), iss-2609261423222935 (itd-69: no--treefront door for the lockstep check), iss-2609261457358637 (itd-74: the public banlist gates docs and README only), iss-2609261457353277 (itd-74: no public family scaffolded where the docs-lint path is gitignored), iss-2609261457366568 (itd-2609212137128014: halt-and-record is mechanised for the lab's own gates only), iss-2609261457365969 (itd-28: the review pin is a charter obligation, not written by a tool), iss-2609262107472569 (itd-53: no surface lists shipped intents whose review is missing or not met).Reviews:
Delivers: itd-2609212130146198
Resolves: iss-2609170627427239
Resolves: iss-2609170709035405
Resolves: iss-2609260100382261
Resolves: iss-2609260100393814
Resolves: iss-2609260100396332
Resolves: iss-2609260100391018
Resolves: iss-2609261403493536
Refs: iss-2609170627427239
Refs: iss-2609170709035405
Refs: iss-2609260100382261
Refs: iss-2609260100393814
Refs: iss-2609260100396332
Refs: iss-2609260100391018
Refs: iss-2609261403493536
Resolves: iss-2609260927217168
Resolves: iss-2609260927214634
Resolves: iss-2609260928152365
Resolves: iss-2609260552251398
Resolves: iss-2609261206436289
Resolves: iss-2609261206437257
Resolves: iss-2609261241117925
Resolves: iss-2609261241119343
Resolves: iss-2609261241121312
Resolves: iss-2609261241126008
Refs: iss-2609260927217168
Refs: iss-2609260927214634
Refs: iss-2609260928152365
Refs: iss-2609260552251398
Refs: iss-2609261206436289
Refs: iss-2609261206437257
Refs: iss-2609261241117925
Refs: iss-2609261241119343
Refs: iss-2609261241121312
Refs: iss-2609261241126008
Refs: iss-2609251455354719
Resolves: iss-2609262211082803
Refs: iss-2609261423210391
Refs: iss-2609261423214723
Refs: iss-2609261423222935
Refs: iss-2609261457358637
Refs: iss-2609261457353277
Refs: iss-2609261457366568
Refs: iss-2609261457365969
Refs: iss-2609262107472569
Assisted-by: Claude:claude-opus-5-5