Skip to content

record the protocol-first control plane, superseding the headless retirement - #182

Merged
nikolasd merged 2 commits into
mainfrom
adr-0037-protocol-first
Sep 14, 2026
Merged

nikolasd merged 2 commits into
mainfrom
adr-0037-protocol-first

Conversation

@nikolasd

Copy link
Copy Markdown
Owner

What this decides

Crew drives workers over the vendors' own protocols; the terminal becomes a view rather than the
control surface. The decision is recorded with its evidence marked per vendor and per row, because
only claude has been driven this way at all — codex, copilot and omp are inferred and unverified,
and one vendor's proof is not three vendors' evidence. Where the drafting assumptions did not
survive being measured, the document says so rather than restating them: transcript reconciliation
is an audit of the journal's completeness and not a correctness mechanism, and its premise was wrong
because the vendor's transcript is a superset of the stream by construction; a proposed detector for
the unverifiable prompt-tool sentinel is withdrawn, since a denial with no matching ledger request
is produced identically whether or not the sentinel is passed; detection of a dropped event has
never been exercised against a real turn and rests on a unit test; and three of the five things an
earlier draft listed as carried over unchanged are changed, each found by running a worker rather
than by reading one. The approval ledger records what the vendor raises, never every action a
worker took — measured — and that trade is recorded as decided, with the one start-time-verifiable
pin carrying the authorization and a named condition for reopening it.

The write-once exception, applied once

ADR bodies are not edited. The single exception this repo allows is a superseded-by header, and it
becomes available only when the superseding decision exists. 0026 gains exactly that: a status line
and a superseded-by line naming this ADR, with the reason stated — the retired adapters are not
returning, and this is a fresh implementation against the current protocols rather than that code
restored. Nothing else in 0026 changes.

Index

Three rows updated (0025 and 0027 amended, 0026 superseded), one row added, and the interim
paragraph that described a pending decision replaced, since this commit is what resolves it. A
convention note is added for the next ADR that numbers its decision points: spell them in full, not
in the short form the marker guard matches.

Gate

check-markers exits 0 over 446 tracked files. The full workspace gate is not implicated and that
was verified rather than assumed: nothing under crates/, packages/ or scripts/ reads any file
under docs/ at build or test time — no include_str!, read_to_string, readFileSync or
Bun.file against a docs path — so no suite compiles or opens these three files. check-markers is
the only gate that reads them. No generated artefact and no protocol type is touched.

…irement

Drives workers over the vendors' own protocols and makes the terminal a
view rather than the control surface, superseding the headless-retirement
decision and amending the two that made a visible pane the control plane
and defined a vendor turn boundary.

Written from the outline, its addenda and the proof run's own record. The
run was closed after row 5: rows 1, 4, 5 and 9 pass, row 3 fails, row 2 is
proven on send and content but not on render, row 8 is inconclusive, and
rows 6 and 7 never ran. Every claim is marked with the state it is actually
in, per vendor and per row, because only claude has been run at all and one
vendor's proof is not three vendors' evidence.

Several things the first draft asserted did not survive being measured, and
the document says so rather than quietly restating them: reconciliation is
an audit of the journal's completeness and not a correctness mechanism, and
its premise was wrong because the vendor's transcript is a superset of the
stream by construction; a proposed detector for the unverifiable prompt-tool
sentinel is withdrawn, since a denial with no matching ledger request is
produced identically whether or not the sentinel is passed; and three of the
five things listed as carried over unchanged are changed, each found by
running a worker rather than by reading.

The ledger records what the vendor raises, never every action a worker took:
measured, a mutating tool call ran with nobody consulted under the pinned
posture. That trade is recorded as decided, with the one init-verifiable pin
carrying the authorization and a named trigger for reopening it.

Leases keep leader-owned release, and the document states plainly that the
dependency on a correct leader has no safety net in either direction, what
it costs when it fails, and that the manual force-release is today's only
recovery.
The run closed before anyone saw crew's own renderer produce its box, so
"pending" claimed an open action that does not exist. The send and the
content are proven; the render was never confirmed, and the coming
functionality-1 demonstration is the next opportunity rather than an
outstanding item from this run.

Found by reading the ADR's evidence table against the proof run's own
report, which had it right.
@nikolasd
nikolasd merged commit f1e306a into main Sep 14, 2026
13 checks passed
@nikolasd
nikolasd deleted the adr-0037-protocol-first branch September 14, 2026 01:13
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