ship: v0.2 P5 final review + milestone ship #14

Merged
coreci-bot merged 2 commits from phase/05-final-review-ship into milestone/v0.2-mvp 2026-09-29 14:31:07 +00:00
Owner

FINAL PHASE: multi-persona review (4 P0 fixed with attack-proofs — real quote anchoring, cited-only export gate, zombie-run armor, fetch SSRF re-guarding; + 6 cheap P1s), audit PASS-WITH-NOTES (both critical notes fixed), milestone ship v0.2.5 = the MVP release candidate. All REQ-01..34 covered across v0.2.0-v0.2.4. Gates: 129 backend + 97 frontend, all green. Milestone merge to main HALTS at the owner approval gate (D-018) with G-009 (live-mode scope) presented for ratification.

FINAL PHASE: multi-persona review (4 P0 fixed with attack-proofs — real quote anchoring, cited-only export gate, zombie-run armor, fetch SSRF re-guarding; + 6 cheap P1s), audit PASS-WITH-NOTES (both critical notes fixed), milestone ship v0.2.5 = the MVP release candidate. All REQ-01..34 covered across v0.2.0-v0.2.4. Gates: 129 backend + 97 frontend, all green. Milestone merge to main HALTS at the owner approval gate (D-018) with G-009 (live-mode scope) presented for ratification.
coreci-bot added 2 commits 2026-09-29 14:31:02 +00:00
---ci---
phase: 5
milestone: v0.2
status: execute
persona: backend-engineer
task: review-P0s
requirements:
  covered: [REQ-20, REQ-23, REQ-32]
---/ci---

Final review found the milestone's two flagship trust
guarantees unenforced - both now attack-proven:

A1 (P0): quote anchoring was tautological end-to-end - the
report's [p-N] markers returned the STORED passage's own quote to
the anchorer (always ratio 1.0). extract_report_claims now takes
the WRITER's text adjacent to each marker (header-stripped
fragment) and anchors THAT against the cited passage; fabricated
quotes riding real passage IDs now flag unanchored and FAIL the
export gate (attack test added; verbatim-quote anchor test added).

C2 (P0): the REQ-23 gate had the wrong denominator - liveness
probed cited URLs but the ledger counted ALL visited pages,
defaulting unprobed to dead (deep-report runs failed their own
gate). Ledger entries now cover cited URLs only; ratio and
citations_checked are cited-page-scoped.

C1 (P0): zombie runs - planner JSON of the wrong shape, searching-
step network errors, and EngineError escaped without FAILED
persist or run_error. Plan parsing validates shape (dict of
lists of str); run() has a catch-all -> FAILED + run_error.

S1 (P0): fetch adapters followed redirects with no re-guarding -
a search result 302ing to 169.254.169.254 became evidence. Both
adapters now hop manually with per-hop url_allowed + a 5-hop cap
(attack test added).

P1s: approve-with-plan over HTTP (422 on bad plan, REQ-14's
'edited' half); FAILED distinct from cancelled; question/context
length caps; probe wired into create_run for probe-capable
adapters + surfaced in /api/config (M6); README live-mode env
var corrected to NEXT_PUBLIC_ (M3) + honest fake-adapter note
(M5). 129 backend (14 adversarial) + 97 frontend green.
---ci---
phase: 5
milestone: v0.2
status: execute
persona: ci-lead-developer
task: audit-fixes
requirements:
  covered: []
  partial: []
message: >-
  Audit PASS-WITH-NOTES; both critical notes fixed: REQUIREMENTS.md
  traceability rows for P2/P3/P4 now complete (the P2/P3 ship
  blocks claimed traceability updates that never landed - the
  audit caught the false statements); PLAN.md rewritten as the P5
  final-phase plan (review 4 P0 + 15 P1 findings, audit verdict,
  ship v0.2.5, owner-gate halt). Notes fixed: ROADMAP P5 status;
  security-engineer persona deactivated per its removal policy.
  Acknowledged notes: G-005 schema-drift check not wired into a
  gate (openapi.json snapshot discipline is manual); squash-merge
  commits carry no ---ci--- blocks per the documented v0.1
  convention (docs-commit pairing).
---/ci---
coreci-bot merged commit 023667e7e4 into milestone/v0.2-mvp 2026-09-29 14:31:07 +00:00
Sign in to join this conversation.