Skip to content

feat: a true status-line badge, the capture drain and the fidelity audits of run A - #730

Merged
REPPL merged 75 commits into
mainfrom
integ/land-6
Sep 27, 2026
Merged

REPPL merged 75 commits into
mainfrom
integ/land-6

Conversation

@REPPL

@REPPL REPPL commented Sep 26, 2026

Copy link
Copy Markdown
Collaborator

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 facilitator or waiting 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 while abcd mode reads managed, and the refusal names abcd mode product-thinker and abcd mode facilitator; once the mode names somebody the question runs and is marked open, and the next human message resets the mode to managed. Where abcd mode could not write the state, the question runs with a loud NOT CHECKED warning rather than a refusal nobody could answer, and a probe the gate leaves behind is swept by the next one. The badge and the abcd mode notice 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 setup reads 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 on main, and links a docs tree only when the site declares one. Every ledger verb's refusal of bad input exits 2, including a --found-at that 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, surprise and reframe exit 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; mentions exits 2 on a --ref that names no commit; and migrate, 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-1 lands 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 --tree front 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:

  • Status-line badge: review FIX FIRST (one medium, three low, one nit), then second review SHIP; its one low (a stale mode probe) and one nit (the shim's "unchanged" payload claim) are fixed on this branch.
  • Site, links and capture refusals: review FIX FIRST (four minor), all four fixed on the branch; no second review on file.

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

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
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
@REPPL
REPPL added this pull request to the merge queue Sep 27, 2026
Merged via the queue into main with commit 976f89d Sep 27, 2026
13 checks passed
@REPPL
REPPL deleted the integ/land-6 branch September 27, 2026 01:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant