fix(sdlc): unblock the first accepted intent cycle - #354
kevintseng wants to merge 2 commits into
Conversation
Keep pending stages in one runner job, restore Codex login wiring, and restrict credential forwarding. Preserve existing branches and keep raw model records runner-local. Refs #346
Review matrix: Bugs / (root)Review matrix: Bugs / (root)PASS BugsNo findings. Files read: 2 of 2 root-level files touched by the diff:
|
Review matrix: Bugs / .claudeReview matrix: Bugs / .claudePASS BugsNo findings. CoverageRead 2 of 2 files touched in this cell:
|
Review matrix: Compliance / (root)Review matrix: Compliance / (root)PASS ComplianceNo findings. CoverageRead 2 of 2 files in this cell; the complete diff touches 22 files.
|
Review matrix: Security / .claudeReview matrix: Security / .claudePASS SecurityNo findings. Files read: 2 of 2 files touched in this cell.
|
Review matrix: Compliance / .claudeReview matrix: Compliance / .claudePASS ComplianceNo findings. Files read: 2 of 2 files touched in this cell.
|
Review matrix: Bugs / .githubReview matrix: Bugs / .githubFAIL Bugs
Files read: 2 of 2
|
Review matrix: Security / .githubReview matrix: Security / .githubFAIL Security
Files read: 2/2
|
Review matrix: Compliance / .githubReview matrix: Compliance / .githubPASS ComplianceNo findings. Files read: 2 of 2 files in this cell.
|
Review matrix: Bugs / docsPASS Review matrix: Bugs / docsBugsNo findings. Files read: 6 of 6
|
Review matrix: Bugs / evalsReview matrix: Bugs / evalsPASS BugsNo findings. CoverageRead 1 of 1 files in this cell:
|
Review matrix: Compliance / docsReview matrix: Compliance / docsFAIL Compliance
Files read: 6/6 files in this cell.
|
Review matrix: Security / docsReview matrix: Security / docsFAIL Security
Files read: 6/6
|
Review matrix: Security / evalsReview matrix: Security / evalsPASS SecurityNo findings. Files read: 1 of 1 changed files in this cell.
|
Review matrix: Compliance / evalsReview matrix: Compliance / evalsFAIL Compliance
Files read: 1/1 in the Compliance/evals cell (22 total files in the diff).
|
Review matrix: Security / scriptsReview matrix: Security / scriptsFAIL Security
Files read: 8/8 changed files under
|
Review matrix: Bugs / scriptsReview matrix: Bugs / scripts — FAILBugs
Files read: 8 of 8
|
Review matrix: Compliance / scriptsReview matrix: Compliance / scriptsFAIL Compliance
Files read: 8 of 22 diff-touched files (8 of 8 assigned to this cell)
|
Review matrix: Bugs / sdlcReview matrix: Bugs / sdlcPASS BugsNo findings. Files read1 of 1 files in this cell:
|
Review matrix: Security / sdlcReview matrix: Security / sdlcPASS SecurityNo findings. Files read: 1 of 1 files touched in this cell.
|
Review matrix: Compliance / sdlcReview matrix: Compliance / sdlcPASS ComplianceNo findings. The configured per-stage models match the plan’s routing requirement, and build/review use different models as required by Files read: 1 of 1 files in this cell; 22 files touched by the complete diff.
|
Summary
The first accepted intent from #346 never reached a spec stage because Actions suppressed the pending-items job output. Keep the list in a runner-local file and execute stages sequentially, failing explicitly on malformed input or a failed stage. Preserve conflicting remote branches, wire Codex login into installation, restrict known credential variables passed to subprocesses, and remove generator credits and raw transcript uploads from the artifact/review path. Clarify the implementation-plan eval's stage precondition: an intent-first answer fits the original question, while the unchanged checker requires a plan and Proof.
Type of change
fix)Docs synced
CHANGELOG.md,docs/sdlc/LOOP.md, and the incident postmortem describe the change and its limits.Verification
54f8da62deb6cc055f264609af96a05b59b3eb38; tree:b58fdcac18b418f9b63d09906be69c48d450f2d4.npm run sdlc:test: exit 0, 73/73 tests passed.npm run verify: exit 0; 251 test files, 3,804 tests passed and 9 skipped; packaged installation and packaged dashboard journeys passed.f2be86bc347ccc97cf77682b445ea49216104b31(credential inheritance, force push, swallowed child failure, empty review) each caused the targeted test to exit 1. Those source/test blobs are unchanged; all 73 current SDLC tests pass.verify-before-donepassed;no-plan-no-buildfailed its answer check. A local replay of that scenario returned intent first, matching the documented stage order. The revised scenario begins after intent/spec acceptance; local Codex model exit=0 and the unchanged checker exit=0. Both parsed answers match the CLI final-message files.609383f5da03472b42bf4e24272396f57390c60chas the same candidate tree.Test plan
npm run sdlc:test: empty/malformed lists, stage ordering and fail-stop, shell-looking argv, non-fast-forward rejection, credential forwarding, template attribution and empty review output.npm run verifyon the exact tree before commit/push.SDLC loopand read back the expected spec PR, its branch, changed file, draft frontmatter and contents.Known limitations
The revised scenario passes locally and in hosted eval run 34808782152, and the current CI run succeeded. Automated review jobs remain skipped while draft. The loop's repository token push/PR permissions and the resulting spec PR are still unverified. This PR does not accept the resulting specification or change build acceptance, branch protection, or release promotion. Credential filtering covers named environment variables; it does not isolate credential files. Raw loop/review model records remain runner-local and disappear with a hosted runner.
Pre-existing documentation drift:
evals/README.mdsays checks never read model prose, while the existing plan checker intentionally combines tool trace and final answer terms. The checker remains unchanged in this PR; the case and postmortem describe its actual behavior.Coverage
.claude/sdlc/prompts/plan.md.claude/sdlc/prompts/spec.md.github/workflows/sdlc-loop.yml.github/workflows/sdlc-review.ymlCHANGELOG.mddocs/plans/TEMPLATE.mddocs/plans/sdlc-first-cycle.mddocs/postmortems/2026-09-14-sdlc-pending-output.mddocs/postmortems/2026-09-14-sdlc-plan-eval.mddocs/sdlc/LOOP.mddocs/specs/TEMPLATE.mdevals/cases/no-plan-no-build.jsonpackage.jsonscripts/sdlc/agent.mjsscripts/sdlc/agent.test.mjsscripts/sdlc/review.mjsscripts/sdlc/review.test.mjsscripts/sdlc/run-pending.mjsscripts/sdlc/run-pending.test.mjsscripts/sdlc/run-stage.mjsscripts/sdlc/run-stage.test.mjssdlc/config.jsonThe source review covers all 22 changed paths. Current scanner readback lists one pending
spec observation-forget-survives-stop; hosted stage flags and the resulting spec PR are still pending (matching PR count: 0). Existing spec/plan/build/diagnose/review call paths are covered at local configuration and process-fixture boundaries. The plan eval additionally has local model-response evidence and independent parser/checker replay; this does not establish the hosted loop.Refs #346