summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhathach <[email protected]>2026-09-06 14:51:49 +0700
committerhathach <[email protected]>2026-09-06 14:51:49 +0700
commit5c7aacf38df66873f5ffe6e312807b209de5676a (patch)
treef6ac2df739aa9cd2ebcc99a4a6b28d17e6483ac5
parent45978c47b5b3e84b3e9dd92b554547d7022fba25 (diff)
workflows: move code verify testclaude/codex-dynamic-workflows
-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.yaml2
-rw-r--r--docs/superpowers/plans/2026-09-06-codex-dynamic-workflow.md28
-rw-r--r--docs/superpowers/specs/2026-09-06-codex-dynamic-workflow-design.md6
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.