Skip to content

📝 docs(spec): decompose the 2026-08-18 audit Next wave as epic P5-AUD2 (D-152) - #76

Merged
konih merged 2 commits into
mainfrom
lane/aud2-spec
Aug 18, 2026
Merged

📝 docs(spec): decompose the 2026-08-18 audit Next wave as epic P5-AUD2 (D-152)#76
konih merged 2 commits into
mainfrom
lane/aud2-spec

Conversation

@konih

@konih konih commented Aug 18, 2026

Copy link
Copy Markdown
Contributor

Spec-first decomposition of the "Next (risk reduction)" wave named by agent-context/PROJECT-AUDIT-2026-08-18.md. Spec-only — no code, no schema, no workflow changes.

What lands

  • openspec/specs/p5-aud2-audit-remediation/spec.md — 5 INVEST stories, 26 REQs, every one carrying Test: / Verify: / Level:.
  • openspec/specs/backlog.md — the AUD2 section + story table.
  • docs/decisions/decisions.mdD-152 (why a new epic rather than loose commits or reopening P5-AUD).

The stories

ID Closes Note
AUD2-S01 REL-01 / REL-02 / REL-07 exec transport trio — one function, CallExec
AUD2-S02 REL-03 errors.Is(err, forge.ErrNotFound) at the provider-declaration fetch; engine-grade
AUD2-S03 SEC-03 cosign identity + issuer pin in hack/install.sh, with a SECURITY.md drift gate
AUD2-S04 TEST-02 kills the mutant the auditor demonstrated survives every wired gate
AUD2-S05 exit gate, wired PR-visibly

{S01 ∥ S02 ∥ S03 ∥ S04} → S05, file-disjoint.

Three things recorded so they aren't re-litigated

  1. No release-condition story. The audit had exactly two P1s (RELSE-01, SEC-01); both closed the same day and v0.3.0 shipped.
  2. WG-S01 is deliberately excluded — it carries the LGTM governance marker, and GOVERNANCE says such stories are surfaced to the maintainer rather than auto-merged.
  3. The exit gate is a task check stage, not a release-exitgate step. That job is pull_request-skipped (RELSE-08) — which is exactly how AUD-S18's own stale CHECK_STAGES pin survived four merges (INBOX 2026-08-16). S05 adds the stage and updates CHECK_STAGES in the same commit.

Every Verify: line is the audit's own verification recipe, lifted verbatim — e.g. REL-02's "stub forking sleep 60 & must return within ~2× timeout", TEST-02's "the mutation is killed". Three of the four findings exist because a passing suite did not notice them, so each story's DoD names the mutation that must redden.

Gate

task check green on this head (exit 0), including changelog-verifyCHANGELOG.md regenerated and amended into the commit.

konih added 2 commits August 18, 2026 23:51
…2 (D-152)

Five INVEST stories over the audit's named risk-reduction wave: the exec
transport trio (REL-01 bound stdout, REL-02 WaitDelay, REL-07 stderr), REL-03
ErrNotFound discrimination at the provider-declaration fetch, SEC-03 cosign
identity pin in install.sh, TEST-02's demonstrated surviving mutant, and a
PR-visible exit gate.

Every Verify: line is the audit's own verification recipe, not an invented one.
WG-S01 is deliberately excluded (LGTM governance marker). The exit gate is a
task check stage rather than a release-exitgate step, because that job is
pull_request-skipped (RELSE-08) — the same blind spot that hid AUD-S18's stale
CHECK_STAGES pin for four merges.
docs/decisions/decisions.md is inside the mkdocs docs_dir; a relative link out
to openspec/ has no target among documentation files and aborts the strict
build. Every other spec reference in this file is a plain backticked path —
follow that convention.

Gap noted: mkdocs --strict is not a task check stage, so no local gate catches
this class. Logged to the INBOX as a Later-wave docs item.
@konih
konih merged commit 3b71da8 into main Aug 18, 2026
7 checks passed
@konih
konih deleted the lane/aud2-spec branch August 18, 2026 21:58
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