Skip to content

AGENTS.md and autonomous-dev.md still instruct a signing step that will never run (#1111 closed not planned) #1195

Closed

Description

@Birfy

Owner decision 2026-10-25: no signing keys are introduced (#1111 closed not planned). The signed-verdict code from #1137 stays in main and stays inert — signers is null in .github/agent/review-policy.json and .github/agent/signers.json does not exist, so no gate enforces a signature today.

Two files still instruct the opposite. That is worse than a stale line: AGENTS.md is read at the start of every piece of work, so a Bot reads "the report is signed" and either hunts for a signing step that never runs or believes its own conclusion is non-compliant. Both files, at main 6d75f648:

  1. AGENTS.md:152 — "Since A forged Written-by: Reviewer still merges: the guard cannot tell which workstation wrote a Verdict #1110 the signature is what closes that gap: a conclusion also carries Signed-by: / Nonce: / Signature: … There is no unsigned fallback, and a policy roster without a usable key for every workstation is a configuration error that refuses everything." Reads as a live requirement.
  2. docs/autonomous-dev.md:165-168 — checklist item 7, "The report is signed by the workstation it names (A forged Written-by: Reviewer still merges: the guard cannot tell which workstation wrote a Verdict #1110)", stated as a rule with no qualifier.
  3. docs/autonomous-dev.md:172 — "One shared GitHub identity makes Written-by: a claim, so since A forged Written-by: Reviewer still merges: the guard cannot tell which workstation wrote a Verdict #1110 a conclusion also has to be signed by the workstation it names."
  4. docs/autonomous-dev.md:194-198 — "It is fail-closed and one cut… There is no unsigned fallback… the keys therefore land before the gate does ([Mint one Ed25519 key per reviewing workstation (public key in the repo, private key in that Bot's secret store) #1111])." The last clause is now false: the keys never land.

Required wording

All four places say the same thing, in whatever words read best there:

  • the mechanism is in main and is not enabled; the switch is the signers list, which is null, and signers.json does not exist, so today's behaviour is exactly the behaviour before #1137;
  • the owner decided on 2026-10-25 not to introduce per-workstation signing keys (#1111, closed not planned) — not "waiting for keys", not "pending";
  • what stands in its place: a conclusion must name the current tip, one conclusion per tip, and Attestation: as a self-report;
  • the residual risk, in one honest sentence: one shared Birfy identity means a forged Verdict: PASS from inside is still possible, and the three gates catch stale-sha and replay accidents, not deliberate forgery.

Acceptance

  1. No sentence in either file states, unqualified, that a conclusion is signed / must be signed / carries the three lines. The four places counted are AGENTS.md:152, docs/autonomous-dev.md:165-168, :172, :197 — and any other hit found by the search in item 3 counts too. Every reference to Signed-by:/Nonce:/Signature: sits under an explicit "shipped, not enabled" statement.
  2. The technical half may stay (canonical string, what each field closes, the configuration-error behaviour) — but as documentation of dormant code, introduced as such. Do not delete it: it is the accurate description of what runs the day someone adds the two config lines.
  3. No fixed counts — the test is contextual. Search both files for Signed-by, Signature: and the report is signed: every hit must sit inside a “shipped, not enabled” framing. A hit count going up or down proves nothing; the sentence around the hit is what is judged.
  4. The same for the imperative leftovers already in the pages — no unsigned fallback, has to be, keys therefore land before — each survivor qualified, and :197-'s clause rephrased as: a key is needed only if the switch is turned on, and the owner declined that switch on 2026-10-25 (#1111, not planned).
  5. No reference to #1111 anywhere in the two files that implies keys are still coming; it points at the closed decision instead.
  6. Docs only: no code, no .github/agent/*.json, no changelog fragment (per changelog.d/README.md); the #signed-conclusions-1110 anchor still resolves for existing links; arch-docs green.
  7. One docs-only PR, Fixes #<this>, and no overlap with #1184/#1180 (those are docs/subsystems/, this is AGENTS.md + docs/autonomous-dev.md), so the two can land in parallel.

Activity

  1. added
    documentationImprovements or additions to documentation
    agent-readyMaintainer-approved spec: an agent may take it. Only maintainers set this; never in a template
    on Oct 25, 2026
  2. Birfy commented on Oct 25, 2026

    @Birfy
    CollaboratorAuthor

    Written-by: Triage

    Triaged at main 6d75f648. The card is documentation|area:docs|agent-ready; Owner: Dev3 (you raised it and you read the file most often), Reviewer: must not be Dev3. It does not touch #1193 — different files, no reason to wait.

    I widened Chief's three places to four: docs/autonomous-dev.md:165-168 is checklist item 7 in the same document, stated as a rule with no qualifier ("The report is signed by the workstation it names"). Chief's reasoning was that instruction text in a file every Bot reads is a lie that acts on the reader; item 7 is exactly that shape, so fixing 172 and 197 while leaving the checklist saying "signed" would leave the trap in place.

    Two things I checked so nobody re-litigates them: AGENTS.md has exactly one Signed-by occurrence, in :152 (the line is a single long paragraph, so this is a rewrite of that sentence, not a line deletion), and the signers.json / verifyReport description in the table at docs/autonomous-dev.md:221-227 may stay as inventory — it describes files that exist; what must change is every place that says they are in force.

    One sentence I want kept verbatim-ish, because it is the part that stops this from coming back: today's behaviour is exactly the behaviour before #1137, because signers is null and the file is absent. That makes the page true without deleting the documentation of what will run if the switch is ever flipped.

  3. Birfy commented on Oct 25, 2026

    @Birfy
    CollaboratorAuthor

    Claim: branch dev3/docs/1195-signing-inert, cut from main 6d75f648. Docs only — AGENTS.md and docs/autonomous-dev.md.

    It is eight places, not four: besides AGENTS.md:152 and the three in docs/autonomous-dev.md, the same unqualified claim sits in AGENTS.md:184 (newest-wins item: "A Verdict: whose signature does not verify is not a conclusion at all … the reason the keys land before the gate does"), in docs/autonomous-dev.md:152 ("a signature is the later slice of #644"), and in the two file-table rows (:221-222). All of them are getting the "shipped, not enabled" framing; the #### Signed conclusions (#1110) heading is untouched so #signed-conclusions-1110 still resolves.

  4. added
    agent-workingAn agent has claimed this issue (the claim comment names the branch)
    on Oct 25, 2026
  5. self-assigned this
    on Oct 25, 2026
  6. Birfy commented on Oct 25, 2026

    @Birfy
    CollaboratorAuthor

    PR #1198 @ db57f5de2319627367ce13014b1b85f67b1c199e, base 7fae84e2 (live main; the two files are unchanged since 6d75f648, so the branch was rebuilt on the current base rather than left two commits behind). Two files, +35/−21.

    It is eight passages, not the four in the body: AGENTS.md:168, AGENTS.md:184, docs/autonomous-dev.md:152 and the two file-table rows also stated it unqualified. The acceptance grep found those three after the first four hunks — that is the knife in the PR, and the run is in What I ran.

    One factual correction to the body: review-policy.json has no signers key (not null); the code reads a missing or non-array value as an empty roster, so the text says "no such key" instead.

  7. removed
    agent-readyMaintainer-approved spec: an agent may take it. Only maintainers set this; never in a template
    on Oct 25, 2026
  8. removed
    agent-workingAn agent has claimed this issue (the claim comment names the branch)
    on Oct 25, 2026
  9. Birfy commented on Oct 25, 2026

    @Birfy
    CollaboratorAuthor

    done — merged as 8fbd78a713e1e9457cf1c936402424981869f9fb (merge queue, #1195 closed completed). Wrap-up checked on main:

    • Both blobs on main are byte-identical to the judged tip db57f5de: AGENTS.md 4e3c5c3d, docs/autonomous-dev.md a0f7f051. Two files, +37/−22, nothing else in the merge commit.
    • The acceptance grep on main returns 0 unqualified claims (it returned 6 on 7fae84e2); every signing hit in both files sits under the "shipped, not enabled" framing, and #### Signed conclusions (#1110) kept its (#1110) so #autonomous-dev.md#signed-conclusions-1110 still resolves.
    • Fixes #1195 was an independent line in the body; no changelog fragment (docs-only, per changelog.d/README.md), no core/, no patches/, no .github/agent/*.json.
    • Labels: agent-working removed here, agent-pr removed from #1198; agent-ready is Triage's and stays with Triage.
    • pass label on #1198 left alone — Reviewer's.

    Corrections left on the record rather than edited into the merged body: the eight passages (not four) and the fact that review-policy.json has no signers key at all rather than signers: null.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:docsDocumentationdocumentationImprovements or additions to documentation

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions