Repository navigation
Description
Task
| slice | size | difficulty | model | who | estimated lines |
|---|---|---|---|---|---|
| Audit, HTTP and message conditions | S | routine | light | an agent | 150 (30 code, 120 tests) |
After the proxy refuses a box's request head for ambiguous framing,
min box audit <box>lists the refusal with the marker framing_ambiguous.
Covers:
- BEP-039
Layers:
- proxy:
- crates/bep/src/forward.rs: a test sends an ambiguous head through
forward::forward_requestsand reads oneframing_ambiguousrecord for the box from the audit log; the refusal's log line names the rule (T106 — Audit a refused ambiguous request head on the live path and show it in min box audit #2435) - crates/bep/src/http.rs: the
AuditSinkdoc says the live path writes throughFlow::record, and that the trait serves this module's own tests cargo nextest run -p bep live_path_audits_a_framing_ambiguous_head
- crates/bep/src/forward.rs: a test sends an ambiguous head through
- audit:
- crates/minimal/src/cmd/box_audit.rs: a test renders a
framing_ambiguousrecord thatbep servewrote, in the proxy's id spelling cargo nextest run -p minimal box_audit_lists_a_refused_ambiguous_head
- crates/minimal/src/cmd/box_audit.rs: a test renders a
Waits on:
- T103 — Match min box audit on the box id spelling the proxy writes #2462
- T105 — Strip Alt-Svc on the live response relay and point the HTTP checks at the live path #2782
Plan block
### T106 — Audit a refused ambiguous request head on the live path and show it in min box audit
slice: S15
kind: task
covers: BEP-039
size: S
est: 30 code, 120 tests
executor: agent
difficulty: routine
model: light
diagnostics: `min box audit <box>` lists a request head the proxy refused for ambiguous framing as a `refuse` line with the marker `framing_ambiguous`, pinned by box_audit_lists_a_refused_ambiguous_head
observability: the proxy's log line for the refused head names the box and the framing rule; the audit record carries the marker, since BEP-039's record has no field for the rule
layers:
- proxy:
- crates/bep/src/forward.rs: a test sends an ambiguous head through `forward::forward_requests` and reads one `framing_ambiguous` record for the box from the audit log; the refusal's log line names the rule (#2435)
- crates/bep/src/http.rs: the `AuditSink` doc says the live path writes through `Flow::record`, and that the trait serves this module's own tests
test: cargo nextest run -p bep live_path_audits_a_framing_ambiguous_head
- audit:
- crates/minimal/src/cmd/box_audit.rs: a test renders a `framing_ambiguous` record that `bep serve` wrote, in the proxy's id spelling
test: cargo nextest run -p minimal box_audit_lists_a_refused_ambiguous_head
produces: none
consumes: none
proof: After the proxy refuses a box's request head for ambiguous framing, `min box audit <box>` lists the refusal with the marker framing_ambiguous.
depends on:
- blocked by #2462
- blocked by #2782
Original issue text
Residual of #2362 (T8, epic #1501). Named by minimal-arch condition C1 on 08ed473.
crates/bep/src/http.rs records a framing_ambiguous audit event through the AuditSink trait when the proxy refuses a request head for ambiguous framing (BEP-077). Today the only AuditSink is the test Vec<AuditEvent>. The production sink has to append that record to the min/v1 audit log so that min box audit <box> shows it (BEP-039).
Blocked on #2361 (T9), which builds the audit record writer this sink appends through.
Done when: a production AuditSink in the proxy's connection loop appends the framing_ambiguous record with the box id and the rule name, and min box audit <box> lists it after a refused head.
Generated by Claude Code
Activity
[-]Production AuditSink: append the framing_ambiguous record to the min/v1 audit log (BEP-039)[/-][+]T106 — Audit a refused ambiguous request head on the live path and show it in min box audit[/+]minimal-foundry commentedon Oct 31, 2026
Done. #2809 merged.
branch
agent/2435-audit-a-refused-ambiguous-request-head-on-the-li· epic #1501 · PR #2809Updated 2026-11-01T00:33:59.772Z.