diff options
| -rw-r--r-- | .claude/workflows/test/test-code-verify.mjs (renamed from .claude/workflows/test-code-verify.mjs) | 12 | ||||
| -rw-r--r-- | .pre-commit-config.yaml | 2 | ||||
| -rw-r--r-- | docs/superpowers/plans/2026-09-06-codex-dynamic-workflow.md | 28 | ||||
| -rw-r--r-- | docs/superpowers/specs/2026-09-06-codex-dynamic-workflow-design.md | 6 |
4 files changed, 24 insertions, 24 deletions
diff --git a/.claude/workflows/test-code-verify.mjs b/.claude/workflows/test/test-code-verify.mjs index 6ebe3cfa0..aae588003 100644 --- a/.claude/workflows/test-code-verify.mjs +++ b/.claude/workflows/test/test-code-verify.mjs @@ -2,7 +2,7 @@ import assert from 'node:assert/strict' import { readdirSync, readFileSync } from 'node:fs' const AsyncFunction = Object.getPrototypeOf(async function () {}).constructor -const source = readFileSync(new URL('./code-verify.js', import.meta.url), 'utf8') +const source = readFileSync(new URL('../code-verify.js', import.meta.url), 'utf8') const workflowBody = source.replace(/^export /m, '') const RESULT = { @@ -61,7 +61,7 @@ await check('defaults to codex', async () => { }) await check('bridge owns the Codex subprocess contract', async () => { - const bridge = readFileSync(new URL('../agents/codex-code-verifier.md', import.meta.url), 'utf8') + const bridge = readFileSync(new URL('../../agents/codex-code-verifier.md', import.meta.url), 'utf8') assert.match(bridge, /model: haiku/) assert.match(bridge, /effort: low/) assert.match(bridge, /\.codex\/agents\/code-verifier\.toml/) @@ -132,13 +132,13 @@ await check('only validate bypasses the router for one-level nesting', async () await check('router rejections preserve caller null-result contracts', async () => { for (const name of ['fanout-dev.js', 'pr-babysit.js']) { - const src = readFileSync(new URL(name, new URL('.', import.meta.url)), 'utf8') + const src = readFileSync(new URL(`../${name}`, import.meta.url), 'utf8') assert.match(src, /workflow\('code-verify',[\s\S]*?\}\)\.catch\(\(\) => null\)\s*\.then/) } }) await check('driver review drops a failed routed scanner', async () => { - const src = readFileSync(new URL('./driver-review.js', import.meta.url), 'utf8').replace(/^export /m, '') + const src = readFileSync(new URL('../driver-review.js', import.meta.url), 'utf8').replace(/^export /m, '') const fn = new AsyncFunction( 'args', 'agent', 'pipeline', 'parallel', 'phase', 'log', 'workflow', 'budget', src) const pipeline = async (items, ...stages) => Promise.all(items.map(async item => { @@ -154,7 +154,7 @@ await check('driver review drops a failed routed scanner', async () => { }) await check('validate dispatches directly to stay within one workflow level', async () => { - const src = readFileSync(new URL('./validate.js', import.meta.url), 'utf8') + const src = readFileSync(new URL('../validate.js', import.meta.url), 'utf8') assert.equal((src.match(/workflow\(['"]code-verify['"]/g) || []).length, 0) assert.match(src, /const reviewProvider = reviewStageNames\.length === 2 \? 'both'/) assert.match(src, /agentType:\s*'codex-code-verifier'/) @@ -164,7 +164,7 @@ await check('validate dispatches directly to stay within one workflow level', as }) await check('validate keeps provider results and gates separate', async () => { - const src = readFileSync(new URL('./validate.js', import.meta.url), 'utf8').replace(/^export /m, '') + const src = readFileSync(new URL('../validate.js', import.meta.url), 'utf8').replace(/^export /m, '') const calls = [] let failCodex = false let blocking = false diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 476352b4d..fbd3b1019 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -85,7 +85,7 @@ repos: - id: code-verify-logic name: code-verify-logic files: ^\.claude/(workflows/|agents/codex-code-verifier\.md$) - entry: node .claude/workflows/test-code-verify.mjs + entry: node .claude/workflows/test/test-code-verify.mjs pass_filenames: false language: system - id: ci-select-test diff --git a/docs/superpowers/plans/2026-09-06-codex-dynamic-workflow.md b/docs/superpowers/plans/2026-09-06-codex-dynamic-workflow.md index 19c6620c5..fff0d5a53 100644 --- a/docs/superpowers/plans/2026-09-06-codex-dynamic-workflow.md +++ b/docs/superpowers/plans/2026-09-06-codex-dynamic-workflow.md @@ -27,7 +27,7 @@ **Files:** - Create: `.claude/workflows/code-verify.js` -- Create: `.claude/workflows/test-code-verify.mjs` +- Create: `.claude/workflows/test/test-code-verify.mjs` - Modify: `.pre-commit-config.yaml` **Interfaces:** @@ -72,7 +72,7 @@ The mock identifies the native Claude call by `agentType: 'code-verifier'` and t Run: ```bash -node .claude/workflows/test-code-verify.mjs +node .claude/workflows/test/test-code-verify.mjs ``` Expected: FAIL because `.claude/workflows/code-verify.js` does not exist. @@ -152,7 +152,7 @@ return the result file's JSON verbatim; if any command fails, do not fabricate a Run: ```bash -node .claude/workflows/test-code-verify.mjs +node .claude/workflows/test/test-code-verify.mjs .claude/workflows/check.sh .claude/workflows/code-verify.js ``` @@ -166,7 +166,7 @@ Add under `repo: local`: - id: code-verify-logic name: code-verify-logic files: ^\.claude/workflows/ - entry: node .claude/workflows/test-code-verify.mjs + entry: node .claude/workflows/test/test-code-verify.mjs pass_filenames: false language: system ``` @@ -183,7 +183,7 @@ Expected: PASS. ```bash git add .claude/workflows/code-verify.js \ - .claude/workflows/test-code-verify.mjs .pre-commit-config.yaml + .claude/workflows/test/test-code-verify.mjs .pre-commit-config.yaml git commit -m "workflows: add Codex verifier routing" ``` @@ -192,7 +192,7 @@ git commit -m "workflows: add Codex verifier routing" ### Task 2: Route Canonical Verifier Calls **Files:** -- Modify: `.claude/workflows/test-code-verify.mjs` +- Modify: `.claude/workflows/test/test-code-verify.mjs` - Modify: `.claude/workflows/driver-review.js` - Modify: `.claude/workflows/fanout-dev.js` - Modify: `.claude/workflows/pr-babysit.js` @@ -214,7 +214,7 @@ Scan every `.claude/workflows/*.js` except `code-verify.js` and fail if it match Run: ```bash -node .claude/workflows/test-code-verify.mjs +node .claude/workflows/test/test-code-verify.mjs ``` Expected: FAIL naming direct calls in `driver-review.js`, `fanout-dev.js`, and `pr-babysit.js`. @@ -239,14 +239,14 @@ Keep every caller's existing null/result handling. Remove the `max` effort overr Run: ```bash -node .claude/workflows/test-code-verify.mjs +node .claude/workflows/test/test-code-verify.mjs for f in .claude/workflows/*.js; do .claude/workflows/check.sh "$f"; done ``` Expected: no bypasses and every workflow syntax check passes. ```bash -git add .claude/workflows/test-code-verify.mjs \ +git add .claude/workflows/test/test-code-verify.mjs \ .claude/workflows/driver-review.js .claude/workflows/fanout-dev.js \ .claude/workflows/pr-babysit.js git commit -m "workflows: route code verification through Codex" @@ -258,7 +258,7 @@ git commit -m "workflows: route code verification through Codex" **Files:** - Modify: `.claude/workflows/validate.js` -- Modify: `.claude/workflows/test-code-verify.mjs` +- Modify: `.claude/workflows/test/test-code-verify.mjs` **Interfaces:** - Consumes: `workflow('code-verify', { provider: 'both', prompt, schema, label })` @@ -273,7 +273,7 @@ Assert that `validate.js` contains one `workflow('code-verify'` call with `provi Run: ```bash -node .claude/workflows/test-code-verify.mjs +node .claude/workflows/test/test-code-verify.mjs ``` Expected: FAIL because `validate.js` still owns separate Claude and Codex review agents. @@ -323,14 +323,14 @@ Flatten stage-thunk results before updating `latest`. When building the next `to Run: ```bash -node .claude/workflows/test-code-verify.mjs +node .claude/workflows/test/test-code-verify.mjs .claude/workflows/check.sh .claude/workflows/validate.js ``` Expected: PASS. ```bash -git add .claude/workflows/validate.js .claude/workflows/test-code-verify.mjs +git add .claude/workflows/validate.js .claude/workflows/test/test-code-verify.mjs git commit -m "validate: share dual review routing" ``` @@ -362,7 +362,7 @@ Replace the claim that Codex only works around workflow edges with concise guida Run: ```bash -node .claude/workflows/test-code-verify.mjs +node .claude/workflows/test/test-code-verify.mjs for f in .claude/workflows/*.js; do .claude/workflows/check.sh "$f"; done git diff --check origin/master...HEAD pre-commit run --all-files diff --git a/docs/superpowers/specs/2026-09-06-codex-dynamic-workflow-design.md b/docs/superpowers/specs/2026-09-06-codex-dynamic-workflow-design.md index 1ee9f4143..6cb9d3236 100644 --- a/docs/superpowers/specs/2026-09-06-codex-dynamic-workflow-design.md +++ b/docs/superpowers/specs/2026-09-06-codex-dynamic-workflow-design.md @@ -125,7 +125,7 @@ result. ## Verification -Add `.claude/workflows/test-code-verify.mjs` using only Node's standard +Add `.claude/workflows/test/test-code-verify.mjs` using only Node's standard library. Execute the router with mocked workflow primitives and verify: - omitted provider dispatches only Codex; @@ -140,7 +140,7 @@ Register the test as a local pre-commit hook for `.claude/workflows/` changes. Also run: 1. `.claude/workflows/check.sh` for every workflow JavaScript file. -2. `node .claude/workflows/test-code-verify.mjs`. +2. `node .claude/workflows/test/test-code-verify.mjs`. 3. `pre-commit run --all-files`. 4. One live read-only `code-verify` workflow call with a small schema, checking that Codex used the canonical role and returned valid structured output. @@ -148,7 +148,7 @@ Also run: ## Repository Changes - Add `.claude/workflows/code-verify.js`. -- Add `.claude/workflows/test-code-verify.mjs`. +- Add `.claude/workflows/test/test-code-verify.mjs`. - Add `.claude/agents/codex-code-verifier.md`. - Modify `.claude/workflows/{driver-review,fanout-dev,pr-babysit,validate}.js`. - Modify `.pre-commit-config.yaml` to run the router self-test. |
