Skip to content

feat(CC-264b): executor-agnostic Phase 3 post-verify pipeline#164

Merged
screenleon merged 1 commit into
mainfrom
cc-264b-dispatch-post-verify
May 26, 2026
Merged

feat(CC-264b): executor-agnostic Phase 3 post-verify pipeline#164
screenleon merged 1 commit into
mainfrom
cc-264b-dispatch-post-verify

Conversation

@screenleon
Copy link
Copy Markdown
Owner

Summary

  • Add scripts/dispatch-post-verify.sh — Phase 3 executor-agnostic verifier: checks .agent-trace existence, symlink path containment (prevents path traversal), renders latest.last/stderr/git diff/git status, and enforces explicit cmd: pass evidence for each self_verify command
  • Add scripts/test-dispatch-post-verify.sh — 16 regression tests covering happy path, boundary cases, symlink escape rejection, and all self_verify evidence variants (pass, fail-prefix, colon-fail, skipped, absent)
  • Tighten agents/claude-executor.md lifecycle ordering: trace write (step 6) must complete before final text response
  • Update docs/executor-contract.md: self_verify result format documented (cmd: pass / cmd: fail: <reason>), table clarified to "symlink or regular file"
  • Register new suite in scripts/run-all-tests.sh (32 suites) and .github/workflows/lint.yml CI
  • BACKLOG/MILESTONES: CC-264 marked ⚠️ partial, CC-265 (remove caveman) added, CC-266 (adapters/claude dispatch path) added, CC-262 status corrected

Key design decisions

FOUND requires explicit cmd: pass (not just command presence, not rejection of known failure tokens): grep -qF "${cmd}: pass" "$LATEST_LAST". Any other status — skipped, fail, absent — is MISSING and exits 1. This closed-world approach prevents ambiguous executor prose from passing as verified.

Symlink path containment: readlink -f validation for both latest.last and latest.stderr rejects targets outside .agent-trace/ before reading.

Gate result

Full tier — Final: GO (gate-20260526-121852.md)

  • qa-tester: pass (16/16 tests, 32/32 suites)
  • security-reviewer: pass
  • risk-reviewer: pass
  • critic: advise (template wording drift — follow-up in CC-264c)
  • architecture-reviewer: advise (same contract drift finding)

Test plan

  • bash scripts/test-dispatch-post-verify.sh → 16 passed, 0 failed
  • bash scripts/run-all-tests.sh → 32 suites, 0 failed
  • git diff --check origin/main → exit 0

🤖 Generated with Claude Code

Add dispatch-post-verify.sh to validate any executor's .agent-trace output
after dispatch — checks trace existence, symlink path containment, renders
latest.last/stderr/git diff/git status, and enforces explicit 'cmd: pass'
evidence for each self_verify command.

Key design: FOUND only when latest.last contains literal '<cmd>: pass' substring;
any other status (skipped, fail, absent, ambiguous prose) is MISSING and exits 1.
Symlink targets for latest.last and latest.stderr are validated with readlink -f
to reject path traversal outside .agent-trace/.

Includes 16 regression tests (case_fail_selfverify_skipped,
case_symlink_stderr_outofdir_rejected added in R3 to cover gate findings).

Also: tighten claude-executor.md lifecycle ordering (trace write before final
response), update executor-contract.md with self_verify result format and
symlink-or-regular-file clarification, register suite in run-all-tests.sh and
lint.yml CI, update BACKLOG/MILESTONES for CC-264/265/266.

Gate: full tier GO (qa-tester pass, security-reviewer pass, risk-reviewer pass,
critic+architecture-reviewer advise only — no blockers).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@screenleon screenleon merged commit 9970850 into main May 26, 2026
24 checks passed
@screenleon screenleon deleted the cc-264b-dispatch-post-verify branch May 26, 2026 04:35
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