8000 feat(bep): give bep serve a chain-preserving way out of an unreadable audit line (T75) by minimal-foundry[bot] · Pull Request #2608 · gominimal/minimal · GitHub
[go: up one dir, main page]

Skip to content

feat(bep): give bep serve a chain-preserving way out of an unreadable audit line (T75) - #2608

Merged
norrietaylor merged 8 commits into
mainfrom
agent/2588-give-bep-serve-a-chain-preserving-way-out-of-an
Oct 26, 2026
Merged

norrietaylor merged 8 commits into
mainfrom
agent/2588-give-bep-serve-a-chain-preserving-way-out-of-an

Conversation

@minimal-foundry
@minimal-foundry minimal-foundry Bot commented Oct 26, 2026 •
Copy link
Copy Markdown
Contributor

T75 — Give bep serve a chain-preserving way out of an unreadable audit line

slice: S10
kind: task
covers: BEP-068
size: M
est: 120 code, 140 tests
executor: agent
difficulty: needs care
model: strongest
diagnostics: the refusal names bep serve --quarantine-unreadable in place of a hand edit
observability: one warn line per quarantined segment, and a quarantine audit record
layers:
- recover:
- crates/bep/src/audit.rs: a quarantine moves each segment holding an unreadable line into <audit dir>/quarantine/ and appends a quarantine record that carries the moved segment's final hash, so the chain stays verifiable; a record of a kind this bep does not know is told apart from a corrupt line
- crates/bep/src/main.rs: bep serve --quarantine-unreadable runs the quarantine and starts; refuse_unreadable names that flag
test: cargo nextest run -p bep quarantine_keeps_the_chain_and_starts
produces: none
consumes: none
proof: bep serve --quarantine-unreadable starts past an unreadable audit line, and the chain still verifies across the quarantine.
depends on:
- blocked by #2290

Proof

A person can run bep serve --quarantine-unreadable against an audit log that holds an unreadable line. bep moves each segment with such a line into /quarantine/ and starts. audit::verify_chain still verifies the log across the gap through the appended quarantine record. Without the flag, the refusal names --quarantine-unreadable in place of a hand edit.

Notes from the agent: Design: no Kind::Quarantine variant. Exhaustive matches on Kind exist in crates/bep/src/control.rs and crates/minimal/src/cmd/box_audit.rs, and both are outside the layers. The quarantine record is a separate QuarantineRecord line (kind "quarantine", segment, from_hash, final_hash, unreadable, previous_hash). The reader classifies each line. A schema record with an unknown kind, or a quarantine record, is counted in the new ReadBatch::other_kinds, not in skipped, so it does not refuse the start. holds_revocation (prune) no longer count 8000 s these lines as possible revocations. A line with a known kind and a malformed field is still corrupt.

Chain: final_hash is the previous_hash of the first record of the next segment, when that record is readable. Otherwise it is the file's last-line hash. So a quarantine still bridges when the unreadable line is the segment's last line. verify_chain/verify_segments are new. They accept any hash on the first retained record, because older segments can be pruned, and they follow quarantine gaps from the head to the found hash. When the active segment is moved, the log opens segment n+1, chained to the moved head.

The quarantine also appends again each revocation it can read in a moved segment, so those revocations stay in force at later starts. Without this, the move drops them from the log. A revocation that only an unreadable line holds is lost. The --help text and the refusal say so.

The refusal text changed: 'Repair or remove those lines' is replaced by the flag instruction. The existing test serve_refuses…[truncated]

Tests

line exit tail
cargo nextest run -p bep quarantine_keeps_the_chain_and_starts 0 Applying loadouts: default Running task runtime-implement-test-0 in session task-runtime-implement-test-0-4b31... Compiling bep v0.0.1 (/workbench/crates/bep) Finished 'test' profile [unoptimized] target(s) in 12.42s ──────────── Nextest run ID 4913224c-5c35-4302-9668-04a7fa00a963 with nexte

Verify

min task run agent-verify passed ([tasks.verify]).

Residuals

Closes #2588


Generated by Claude Code

bep serve --quarantine-unreadable moves each audit segment that holds a
line bep cannot read into <audit dir>/quarantine/ and starts. For each
moved segment the log gets a quarantine record that carries the hash
the chain runs from and the segment's final hash. verify_chain bridges
the gap with it, so the chain still verifies. The revocations read in a
moved segment are appended again, so they stay in force.

A record of the schema with a kind this bep does not know is now told
apart from a corrupt line. It no longer refuses the start. The refusal
names the flag in place of a hand edit.
@coderabbitai
coderabbitai Bot commented Oct 26, 2026 •
Copy link
Copy Markdown
Contributor

Important

Review skipped

Bot user detected.

To trigger a single review, invoke the @coderabbitai review command.

Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: cc9686ce-edb2-406f-81bd-4a983a379616

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

< 8000 /td>

@minimal-foundry
minimal-foundry Bot commented Oct 26, 2026 •
Copy link
Copy Markdown
Contributor Author

Approved: every review thread resolved at 667d71c0ebf1.

@norrietaylor resolved the last thread, which releases the approval this review had withheld.

Nothing to do.

@minimal-foundry minimal-foundry Bot left a comment
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

minimal-review — advisory review

Verdict COMMENT — 2 findings, 1 inline.

Panel: 3 of 3 personas ran (correctness, security, supply-chain).

Comment thread crates/bep/src/audit.rs Resolved
@minimal-arch minimal-arch Bot left a comment
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

arch-review: CONDITIONS · 2 conditions · the full ruling

The quarantine keeps the chain verifiable and keeps readable revocations in force. The default still refuses, and the code is in the helper's crate. Two items remain. The quarantine appends each restated revocation as a plain revocation record, so the log shows a second destroy event. Gatehouse §6.10 line 839 says the destroy is the mode's one revocation event. C1 adds a quarantine_restated marker to that record. Spec 24 BEP-041 forbids this removal, and the spec does not state the quarantine. C2 amends the spec in this PR.

Ruled at a8fe4bf against gominimal/arch@109541a48c31 by claude-opus-5-5.

Comment thread crates/bep/src/audit.rs Resolved
Comment thread crates/bep/src/audit.rs Resolved
quarantine_unreadable now plans every move without changing the log,
then writes each segment's quarantine record and revocations before it
renames that segment. A failure part wa
8000
y no longer leaves a moved
segment with no record, so its revocations stay in force.
@minimal-foundry
Copy link
Copy Markdown
Contributor Author

Round 1 of 10 on the runtime's review findings, pushed as 7dbfcf7819e2.

line exit tail
cargo nextest run -p bep quarantine_keeps_the_chain_and_starts 0 Applying loadouts: default Running task runtime-implement-test-0 in session task-runtime-implement-test-0-cc9a... Compiling bep v0.0.1 (/workbench/crates/bep) Finished 'test' profile [unoptimized] target(s) in 13.56s ──────────── Nextest run ID ac2b939d-a716-4e2a-9be0-9df32cfa3152 with nexte

Verify min task run agent-verify passed.

Review threads the coder judged:

  • 👍 valid — crates/bep/src/audit.rs: Split quarantine_unreadable into a plan phase that changes nothing, then a phase that writes each segment's record and revocations before it renames that segment. Added test quarantine_that_fails_leaves_no_moved_segment_unrecorded.

bep serve --quarantine-unreadable starts past an unreadable audit line, and the chain still verifies across the quarantine. A quarantine that fails part way now leaves every unrecorded segment in place, so no revocation drops out of the log.

Notes from the agent: Revise round 1. quarantine_unreadable now runs in two phases. The first phase reads every segment, builds the records and the revocation lists, and checks each quarantine target. It changes nothing on disk. The second phase opens the next segment if the active segment is bad. Then, for each segment, it writes the quarantine record and the revocations, and after that it renames the segment. If a failure or a crash happens between the write and the rename, the segment stays in place and the next quarantine moves it again. In that case the log holds a duplicate quarantine record with the same hashes. verify_segments matches gaps by from_hash, so a duplicate does not break verification. A duplicate revocation does no harm. clippy -p bep --all-targets is clean.

@minimal-foundry minimal-foundry Bot left a comment
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

minimal-review — advisory review

Verdict COMMENT — 3 findings, 3 inline.

Panel: 3 of 3 personas ran (correctness, security, supply-chain).

Comment thread crates/bep/src/audit.rs Resolved
Comment thread crates/bep/src/audit.rs Resolved
Comment thread crates/bep/src/audit.rs Resolved
@minimal-arch minimal-arch Bot left a comment
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

arch-review: PASS · the full ruling

The change conforms to Gatehouse §6.10 lines 836 and 839. The compare fixes the order from the last head. Each segment's quarantine record and its revocations now go to the log before the segment moves. So a failure or a crash cannot leave a moved segment without its revocations. Without the flag, bep still refuses the start. With the flag, every readable revocation stays in the retained log, and the chain verifies across the gap.

Ruled at 7dbfcf7 against gominimal/arch@109541a48c31 by claude-opus-5-5.

A quarantine's restated revocation carries the quarantine_restated
marker, so it does not read as a second destroy. Prune keeps a segment
with a record of a kind this bep does not know, since it can be a newer
bep's revocation. The quarantine warn line says what is lost.

Refs T75
@minimal-foundry
Copy link
Copy Markdown
Contributor Author

Round 2 of 10 on the runtime's review findings, pushed as 4259c1d10b0c.

line exit tail
cargo nextest run -p bep quarantine_keeps_the_chain_and_starts 0 Applying loadouts: default Running task runtime-implement-test-0 in session task-runtime-implement-test-0-73d4... Compiling bep v0.0.1 (/workbench/crates/bep) Finished 'test' profile [unoptimized] target(s) in 24.16s ──────────── Nextest run ID 1f97d578-360e-4303-9866-d5e625c4354b with nexte

Verify min task run agent-verify passed.

Review threads the coder judged:

  • 👍 valid — crates/bep/src/audit.rs: A restated revocation now carries marker quarantine_restated (audit::RESTATED). The test asserts the marker. revoke::restore keys on kind, so enforcement does not change.
  • 👎 invalid — crates/bep/src/audit.rs:761: The spec amendment is needed, but the spec 24 document is outside this task's layers (only crates/bep/src/audit.rs and main.rs). I recorded the BEP-041 and BEP-068 amendments in the result notes for a follow-up in docs/specs/24-*/.
  • 👍 valid — crates/bep/src/audit.rs:310: holds_revocation now returns true for a record of an unknown kind, so prune keeps its segment. A start still does not refuse it, because the task requires that an unknown kind is told apart from a corrupt line.
  • 👍 valid — crates/bep/src/audit.rs:341: holds_revocation now returns true for Line::OtherKind, and segment_with_unparsable_line_survives_prune asserts it. Unknown kinds stay out of skipped, as the task requires.
  • 👍 valid — crates/bep/src/audit.rs:825: The per-segment warn line already names the segment and its quarantine path. Its message now says that a revocation on an unreadable line is no longer in force, and to check the destroyed boxes that segment can record.

bep serve --quarantine-unreadable starts past an unreadable audit line. The moved segment goes to <audit dir>/quarantine/, and verify_chain still verifies the log across the gap. A revocation that was in the moved segment is recorded again with the quarantine_restated marker and stays in force at the next start.

Notes from the agent: Round 2. I also ran cargo nextest run -p bep (213 passed) and cargo clippy -p bep --all-targets (no warnings). Thread C2 asks for amendments to the spec 24 document (BEP-041 and BEP-068 sub-requirements). That file is outside this task's layers, so I did not change it. A follow-up must amend docs/specs/24-*/: BEP-041 must allow the quarantine move, and BEP-068 needs the refusal and --quarantine-unreadable sub-requirements. For the unknown-kind findings, I made prune fail closed. A start does not refuse a record of an unknown kind, because the task requires that bep tells such a record apart from a corrupt line, and the test starts with one present. revoke::Restored does not carry the unknown-kind count, and revoke.rs is outside the layers, so I added no start-time warn for it.

@minimal-arch minimal-arch Bot left a comment
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

arch-review: PASS · the full ruling

The compare from 7dbfcf7 conforms to Gatehouse §6.10 line 839. A restated revocation now carries the quarantine_restated marker, so the destroy stays the one revocation event. Restore at start still reads the restated record, because it matches on kind only. Prune now keeps a segment with an unknown kind until the ceiling. This is the fail-closed reading of the compaction rule. The earlier PASS stands for the rest of the change.

Ruled at 4259c1d against gominimal/arch@109541a48c31 by claude-opus-5-5.

@minimal-foundry minimal-foundry Bot left a comment
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

minimal-review — advisory review

Verdict COMMENT — 1 finding, 1 inline.

Panel: 2 of 3 personas ran (correctness, supply-chain); did not complete: security.

Comment thread crates/bep/src/audit.rs Resolved
A line of a kind this bep does not know can hold a newer bep's
revocation. The quarantine cannot record it again, so it now counts
those lines per moved segment and names the count in its warn line.
@minimal-foundry
Copy link
Copy Markdown
Contributor Author

Round 3 of 10 on the runtime's review findings, pushed as bd17d34276d0.

line exit tail
cargo nextest run -p bep quarantine_keeps_the_chain_and_starts 0 Applying loadouts: default Running task runtime-implement-test-0 in session task-runtime-implement-test-0-3c47... Compiling bep v0.0.1 (/workbench/crates/bep) Finished 'test' profile [unoptimized] target(s) in 12.41s ──────────── Nextest run ID f2a0fdb3-3f85-4df8-b858-cfb9f6176a99 with nexte

Verify min task run agent-verify passed.

Review threads the coder judged:

  • 👍 valid — crates/bep/src/audit.rs:248: quarantine_unreadable now counts unknown-kind lines in each moved segment (Quarantined::other_kinds) and the warn line names the count and says a revocation on such a line is no longer in force; the audit test pins the count.

bep serve --quarantine-unreadable starts past an unreadable audit line, and the chain still verifies across the quarantine. The warn line for each moved segment now also counts the lines of a kind this bep does not know, which the move does not record again.

Notes from the agent: Round 3: one thread. The quarantine now counts Line::OtherKind lines per moved segment in a new Quarantined::other_kinds field and names the count in the warn line. The QuarantineRecord schema did not change. The test quarantine_of_the_active_segment_opens_the_next now writes an unknown-kind line into the moved segment and asserts the count. I also ran cargo nextest run -p bep quarantine (3 passed), cargo fmt --check, and cargo clippy -p bep --all-targets, all clean.

@minimal-arch minimal-arch Bot left a comment
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

arch-review: PASS · the full ruling

The compare counts the lines of an unknown kind in each quarantined segment. The warn line reports the count as other_kinds. Section 6.10 line 839 says a revocation stands, and the move cannot restate a line whose kind it does not know. The warn line now states that loss, as it states the loss on a corrupt line. The chain and the quarantine record do not change. BEP-068 conforms, so the PASS on 4259c1d1 stands.

Ruled at bd17d34 against gominimal/arch@109541a48c31 by claude-opus-5-5.

@minimal-foundry minimal-foundry Bot left a comment
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

minimal-review — approval withheld

Verdict COMMENT — APPROVE withheld: 5 unresolved threads — minimal-foundry[bot] crates/bep/src/audit.rs, minimal-arch[bot] crates/bep/src/audit.rs, minimal-arch[bot] crates/bep/src/audit.rs:761, minimal-foundry[bot] crates/bep/src/audit.rs:341, minimal-foundry[bot] crates/bep/src/audit.rs:248. No findings.

Panel: 3 of 3 personas ran (correctness, security, supply-chain).

@minimal-foundry minimal-foundry Bot left a comment
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

minimal-review — approved

Verdict APPROVE — every review thread is resolved; @norrietaylor closed the last one. The review of bd17d34276d0 withheld this approval on the threads open then. Posted as a comment: the App cannot approve its own pull request; the check and the label carry it.

@minimal-foundry minimal-foundry Bot added the review:approved minimal-review approved the current head label Oct 26, 2026
@norrietaylor norrietaylor left a comment
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Own review at bd17d34. --quarantine-unreadable plans before it writes. It re-records each moved segment's revocations with the quarantine_restated marker and a quarantine record before the rename, and keeps the chain. Prune keeps a segment that holds a corrupt or unknown-kind line. The warn line counts the lines that cannot be restated. The spec gap (BEP-041, BEP-068) is filed as #2613.


Generated by Claude Code

@norrietaylor norrietaylor changed the title T75 — Give bep serve a chain-preserving way out of an unreadable audit line feat(bep): give bep serve a chain-preserving way out of an unreadable audit line (T75) Oct 26, 2026
@norrietaylor norrietaylor left a comment
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Babysitter approval at bd17d34: every merge gate passes at this head (arch PASS at bd17d34, zero open threads, every lane aggregator green). Squash title feat(bep): give bep serve a chain-preserving way out of an unreadable audit line (T75) and the squashed message pass commitlint. Queued for squash merge.


Generated by Claude Code

@norrietaylor
norrietaylor added this pull request to the merge queue Oct 26, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Oct 26, 2026
Copy link
Copy Markdown
Member

/revise

Round on #2608 after a merge-queue failure at bd17d34. No round is in flight. #2596 (T68) landed on main and gave audit::Decision a jti field. The queue build failed in clippy, tests and both Linux lanes with E0063, missing field jti in initializer of audit::Decision, at crates/bep/src/audit.rs:884. That is the self.append(&Decision { .. }) that quarantine_unreadable uses to restate a revocation.

  1. Merge main into this branch. It also brings the zstd advisory bump (build(deps): zstd 0.14.3, zstd-safe 8.2.0, zstd-sys 2.1.2, for RUSTSEC-2026-0391, -0398 and -0403 #2627).
  2. Set jti: String::new() on that restated revocation, with the comment main uses on a revocation record ("A mint or a revocation carries no handle."). Do the same for any other Decision { .. } this PR adds, tests included.
  3. Change nothing else. Run cargo clippy --workspace --all-targets --locked -- -D warnings and cargo nextest run -p bep.

Generated by Claude Code

T68 added the jti field to audit::Decision. The quarantine's restated
revocation and the quarantine test did not set it.
@minimal-foundry
Copy link
Copy Markdown
Contributor Author

Round 4 of 10 on a /revise note, pushed as 798c9d255cc7.

line exit tail
cargo nextest run -p bep quarantine_keeps_the_chain_and_starts 0 Applying loadouts: default Running task runtime-implement-test-0 in session task-runtime-implement-test-0-aa2e... Compiling bep v0.0.1 (/workbench/crates/bep) Finished 'test' profile [unoptimized] target(s) in 40.64s ──────────── Nextest run ID 9c230f30-cdb0-4fe9-8270-23ccaeaeb853 with nexte

Verify min task run agent-verify passed.

bep serve --quarantine-unreadable starts past an unreadable audit line, and the chain still verifies across the quarantine. The branch now compiles against main's audit::Decision with its jti field.

Notes from the agent: The merge of origin/main (with #2596 T68 and the zstd bump #2627) was already on the branch as bae8cd7, with no conflict markers. This round added one commit. It sets jti: String::new() on the restated revocation in quarantine_unreadable, with main's comment "A mint or a revocation carries no handle." It also sets the field in the Decision closure of the quarantine_keeps_the_chain_and_starts test. That closure also builds Kind::Decision records, so its comment adds that the test's decisions carry no handle either. No other Decision initializer in this PR lacked the field. The workspace clippy failed only in crates/boxes, because this box has Rust 1.98.1 and rust-toolchain.toml pins 1.99.0. The 1.98 clippy reports lints such as double_must_use in boxes code that this branch does not change. The bep-scoped clippy with -D warnings is clean. The workspace clippy result on the pinned toolchain is unverified here.

@minimal-arch minimal-arch Bot left a comment
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

arch-review: PASS · the full ruling

The ruling on bd17d34 stands. This head merges main and sets an empty jti on the restated revocation in quarantine_unreadable. That is the value main gives a revocation in control.rs. Older audit lines still parse, because Record::jti defaults to empty. The record shape of Gatehouse §6.10 line 836 and the revocation rule of line 839 still hold.

Ruled at 798c9d2 against gominimal/arch@109541a48c31 by claude-opus-5-5.

@minimal-foundry minimal-foundry Bot left a comment
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

minimal-review — advisory review

Verdict COMMENT — 1 finding, 1 inline.

Panel: 3 of 3 personas ran (correctness, security, supply-chain).

Comment thread crates/bep/src/audit.rs Resolved
@minimal-foundry minimal-foundry Bot removed the review:approved minimal-review approved the current head label Oct 26, 2026
verify_chain now accepts a quarantine record across a gap only before the
first line of a segment, after the gap, for a segment numbered between the
two, and when quarantine/ holds that segment and it agrees with the record.
@minimal-foundry
Copy link
Copy Markdown
Contributor Author

Round 5 of 10 on the runtime's review findings, pushed as 667d71c0ebf1.

line exit tail
cargo nextest run -p bep quarantine_keeps_the_chain_and_starts 0 Applying loadouts: default Running task runtime-implement-test-0 in session task-runtime-implement-test-0-fae4... Compiling bep v0.0.1 (/workbench/crates/bep) Finished 'test' profile [unoptimized] target(s) in 23.20s ──────────── Nextest run ID 2d66202d-933a-4241-9f84-cd2122c1c7a4 with nexte

Verify min task run agent-verify passed.

Review threads the coder judged:

  • 👍 valid — crates/bep/src/audit.rs: verify_segments now accepts a bridge only before the first line of a segment, after the gap, for a segment numbered between the two, and only when quarantine/ holds that segment and its unreadable count and edge hashes agree with the record. Test: forged_quarantine_record_bridges_no_gap.

bep serve --quarantine-unreadable starts past an unreadable audit line, and the chain still verifies across the quarantine. A quarantine record now bridges a gap only when quarantine/ holds the moved segment and that segment agrees with the record, so an appended record cannot hide removed records.

Notes from the agent: Revise round 5. verify_segments now takes a second argument: the segments under quarantine/, by file name. verify_chain reads them. A bridge is accepted only at the first line of a segment, from a record at or after the gap, for a moved segment numbered between the two retained segments. The moved file must hold exactly unreadable lines that do not parse (at least one). Its first and last lines, where they parse, must carry from_hash and final_hash. New test forged_quarantine_record_bridges_no_gap in audit.rs covers a removed whole segment and a run removed inside one segment. A writer who also forges a matching file under quarantine/ is still the T31 residual: the bare chain does not detect a recomputed edit. The full bep suite ran once after the commit: 217 passed.

@minimal-foundry minimal-foundry Bot added the needs-human An agent handed off; a human must act, then clear this label. Set by defer and handoffs. label Oct 26, 2026
@minimal-foundry
Copy link
Copy Markdown
Contributor Author

The runtime will not revise this pull request again on its own: the diff is +842/-51 (893 lines), past 3x the plan's estimate of 260 lines (est: 120 code, 140 tests, as #2588 reads now), at round 5 (the last trigger was the runtime's review findings). A person decides now. Remove needs-human from this pull request to let /revise <note> or the automatic rounds resume, or finish #2588 by hand.

@minimal-arch minimal-arch Bot left a comment
Copy link
Copy Markdown

Choos 10BC8 e a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

arch-review: PASS · the full ruling

The new commit makes the audit chain check stricter. A quarantine record now bridges a gap only when its moved segment exists under quarantine/ and agrees with the record. This fails closed, and §6.10 line 836 asks for a whole-log chain check. The quarantine writer still produces records that verify. The ruling on 798c9d2 stands for the rest, and residual #2613 stays open.

Ruled at 667d71c against gominimal/arch@109541a48c31 by claude-opus-5-5.

@minimal-foundry minimal-foundry Bot left a comment
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

minimal-review — approval withheld

Verdict COMMENT — APPROVE withheld: 1 unresolved thread — minimal-foundry[bot] crates/bep/src/audit.rs. No findings.

Panel: 3 of 3 personas ran (correctness, security, supply-chain).

@norrietaylor norrietaylor removed the needs-human An agent handed off; a human must act, then clear this label. Set by defer and handoffs. label Oct 26, 2026
@minimal-foundry
Copy link
Copy Markdown
Contributor Author

Round 1 of 10 on a failed check suite: the coder changed nothing. every commit this round put on the branch above 667d71c is a merge of the base branch, so it carries no work of its own

@norrietaylor norrietaylor left a comment
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Own review at 667d71c. The merge of main sets jti on the restated revocation, which fixes the E0063 the queue hit. f637f6a9 tightens verify_chain: a quarantine record bridges a gap only before the first line of a segment, for a segment numbered between the two, and only when quarantine/ holds that segment and it agrees with the record. That fails closed, and arch passes it. The epic owner ruled the security threads on 2026-10-26. Spec residual #2613.


Generated by Claude Code

@minimal-foundry minimal-foundry Bot left a comment
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

minimal-review — approved

Verdict APPROVE — every review thread is resolved; @norrietaylor closed the last one. The review of 667d71c0ebf1 withheld this approval on the threads open then. Posted as a comment: the App cannot approve its own pull request; the check and the label carry it.

@minimal-foundry minimal-foundry Bot added the review:approved minimal-review approved the current head label Oct 26, 2026
@norrietaylor norrietaylor left a comment
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Babysitter approval at 667d71c: every merge gate passes at this head (arch PASS at 667d71c, zero open threads, every lane aggregator green). Squash title feat(bep): give bep serve a chain-preserving way out of an unreadable audit line (T75) and the squashed message pass commitlint. Queued for squash merge.


Generated by Claude Code

@norrietaylor
norrietaylor added this pull request to the merge queue Oct 26, 2026
Merged via the queue into main with commit 2ced764 Oct 26, 2026
40 of 42 checks passed
@norrietaylor
norrietaylor deleted the agent/2588-give-bep-serve-a-chain-preserving-way-out-of-an branch October 26, 2026 20:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

review:approved minimal-review approved the current head

Projects

None yet

Development

Successfully merging this pull request may close these issues.

T75 — Give bep serve a chain-preserving way out of an unreadable audit line

1 participant

0