specrails-core 5.6.0 → 6.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -145
- package/bin/specrails-core.mjs +12 -554
- package/dist/agent-runtime/capabilities.js +0 -1
- package/dist/agent-runtime/cli-executor.d.ts +1 -1
- package/dist/agent-runtime/cli-executor.js +1 -2
- package/dist/agent-runtime/cli-process.js +0 -1
- package/dist/agent-runtime/cli.js +3 -4
- package/dist/agent-runtime/codex-schema.js +0 -1
- package/dist/agent-runtime/compact/architect.d.ts +3 -272
- package/dist/agent-runtime/compact/architect.js +8 -9
- package/dist/agent-runtime/compact/chat-client.d.ts +3 -3
- package/dist/agent-runtime/compact/chat-client.js +1 -2
- package/dist/agent-runtime/compact/developer.d.ts +3 -70
- package/dist/agent-runtime/compact/developer.js +13 -14
- package/dist/agent-runtime/compact/environment.d.ts +4 -5
- package/dist/agent-runtime/compact/environment.js +1 -2
- package/dist/agent-runtime/compact/exit-code-honesty.d.ts +2 -1
- package/dist/agent-runtime/compact/exit-code-honesty.js +0 -1
- package/dist/agent-runtime/compact/guarded-loop.d.ts +2 -18
- package/dist/agent-runtime/compact/guarded-loop.js +7 -8
- package/dist/agent-runtime/compact/prompt-inputs.d.ts +0 -2
- package/dist/agent-runtime/compact/prompt-inputs.js +1 -2
- package/dist/agent-runtime/compact/reviewer.d.ts +0 -13
- package/dist/agent-runtime/compact/reviewer.js +5 -6
- package/dist/agent-runtime/compact/step.d.ts +0 -1
- package/dist/agent-runtime/compact/step.js +1 -2
- package/dist/agent-runtime/compact/test-reachability.js +0 -1
- package/dist/agent-runtime/config.js +0 -1
- package/dist/agent-runtime/core-host.d.ts +1 -1
- package/dist/agent-runtime/core-host.js +1 -2
- package/dist/agent-runtime/durable-store.d.ts +0 -1
- package/dist/agent-runtime/durable-store.js +1 -2
- package/dist/agent-runtime/efficiency-summary.d.ts +2 -2
- package/dist/agent-runtime/efficiency-summary.js +1 -2
- package/dist/agent-runtime/efficiency-types.js +0 -1
- package/dist/agent-runtime/efficiency.js +0 -1
- package/dist/agent-runtime/evaluation-corpus.js +0 -1
- package/dist/agent-runtime/evaluation.d.ts +2 -1
- package/dist/agent-runtime/evaluation.js +1 -2
- package/dist/agent-runtime/executor-types.d.ts +1 -1
- package/dist/agent-runtime/executor-types.js +0 -1
- package/dist/agent-runtime/executors.js +0 -1
- package/dist/agent-runtime/gemini-policy.js +0 -1
- package/dist/agent-runtime/graph/artifacts.d.ts +1 -1
- package/dist/agent-runtime/graph/artifacts.js +1 -2
- package/dist/agent-runtime/graph/nodes.d.ts +1 -1
- package/dist/agent-runtime/graph/nodes.js +1 -2
- package/dist/agent-runtime/graph/review-policy.js +0 -1
- package/dist/agent-runtime/graph/roles.d.ts +2 -5
- package/dist/agent-runtime/graph/roles.js +2 -8
- package/dist/agent-runtime/graph/state.d.ts +1 -1
- package/dist/agent-runtime/graph/state.js +0 -1
- package/dist/agent-runtime/graph-checkpointer.d.ts +2 -1
- package/dist/agent-runtime/graph-checkpointer.js +0 -1
- package/dist/agent-runtime/guardrails.d.ts +3 -3
- package/dist/agent-runtime/guardrails.js +1 -2
- package/dist/agent-runtime/index.d.ts +1 -1
- package/dist/agent-runtime/index.js +1 -2
- package/dist/agent-runtime/kimi-acp.js +1 -2
- package/dist/agent-runtime/kimi-model.d.ts +6 -0
- package/dist/agent-runtime/kimi-model.js +12 -0
- package/dist/agent-runtime/openai-executor.d.ts +0 -9
- package/dist/agent-runtime/openai-executor.js +6 -7
- package/dist/agent-runtime/openspec-tool-server.js +1 -2
- package/dist/agent-runtime/openspec.d.ts +0 -2
- package/dist/agent-runtime/openspec.js +1 -6
- package/dist/agent-runtime/prompts.d.ts +4 -3
- package/dist/agent-runtime/prompts.js +0 -1
- package/dist/agent-runtime/provider-diagnostic.js +1 -2
- package/dist/agent-runtime/recovery.js +1 -2
- package/dist/agent-runtime/repository-context.d.ts +1 -1
- package/dist/agent-runtime/repository-context.js +0 -1
- package/dist/agent-runtime/review-context.d.ts +1 -1
- package/dist/agent-runtime/review-context.js +0 -1
- package/dist/agent-runtime/role-routing.js +0 -1
- package/dist/agent-runtime/role-state.js +0 -1
- package/dist/agent-runtime/runtime-identity.js +1 -2
- package/dist/agent-runtime/tool-event.js +0 -1
- package/dist/agent-runtime/verification-plan.d.ts +5 -4
- package/dist/agent-runtime/verification-plan.js +1 -2
- package/dist/agent-runtime/workflow-types.js +0 -1
- package/dist/agent-runtime/workflow.js +0 -1
- package/dist/agent-runtime/workspace-tools.d.ts +2 -2
- package/dist/agent-runtime/workspace-tools.js +1 -2
- package/dist/installer/cli.d.ts +3 -32
- package/dist/installer/cli.js +26 -101
- package/dist/installer/commands/framework.d.ts +4 -3
- package/dist/installer/commands/framework.js +0 -1
- package/dist/installer/commands/init.d.ts +4 -25
- package/dist/installer/commands/init.js +5 -8
- package/dist/installer/phases/framework-lifecycle.d.ts +3 -17
- package/dist/installer/phases/framework-lifecycle.js +2 -3
- package/dist/installer/phases/install-config.d.ts +7 -8
- package/dist/installer/phases/install-config.js +2 -7
- package/dist/installer/phases/manifest.d.ts +6 -7
- package/dist/installer/phases/manifest.js +2 -7
- package/dist/installer/phases/prereqs.d.ts +6 -7
- package/dist/installer/phases/prereqs.js +4 -6
- package/dist/installer/phases/provider-detect.d.ts +6 -7
- package/dist/installer/phases/provider-detect.js +2 -4
- package/dist/installer/phases/scaffold.d.ts +9 -10
- package/dist/installer/phases/scaffold.js +82 -805
- package/dist/installer/util/errors.js +0 -1
- package/dist/installer/util/exec.d.ts +3 -2
- package/dist/installer/util/exec.js +0 -1
- package/dist/installer/util/fs.d.ts +0 -10
- package/dist/installer/util/fs.js +1 -2
- package/dist/installer/util/git.js +0 -1
- package/dist/installer/util/install-transaction.d.ts +2 -2
- package/dist/installer/util/install-transaction.js +1 -2
- package/dist/installer/util/logger.d.ts +1 -3
- package/dist/installer/util/logger.js +0 -1
- package/dist/installer/util/paths.js +0 -1
- package/dist/installer/util/registry.d.ts +4 -8
- package/dist/installer/util/registry.js +2 -3
- package/dist/{installer/runtime → pipeline}/pipeline-state.js +0 -3
- package/dist/shared/args.d.ts +18 -0
- package/dist/shared/args.js +53 -0
- package/integration-contract.json +10 -46
- package/package.json +3 -10
- package/templates/agents/sr-architect.md +15 -310
- package/templates/agents/sr-developer.md +15 -269
- package/templates/agents/sr-reviewer.md +13 -367
- package/templates/codex-skills/rails/sr-architect/SKILL.md +14 -308
- package/templates/codex-skills/rails/sr-developer/SKILL.md +14 -201
- package/templates/codex-skills/rails/sr-reviewer/SKILL.md +15 -289
- package/templates/kimi/specrails/run-skill.mjs +91 -2173
- package/bin/tui-installer.mjs +0 -430
- package/commands/doctor.md +0 -62
- package/dist/agent-runtime/capabilities.js.map +0 -1
- package/dist/agent-runtime/cli-executor.js.map +0 -1
- package/dist/agent-runtime/cli-process.js.map +0 -1
- package/dist/agent-runtime/cli.js.map +0 -1
- package/dist/agent-runtime/codex-schema.js.map +0 -1
- package/dist/agent-runtime/compact/architect.js.map +0 -1
- package/dist/agent-runtime/compact/chat-client.js.map +0 -1
- package/dist/agent-runtime/compact/developer.js.map +0 -1
- package/dist/agent-runtime/compact/environment.js.map +0 -1
- package/dist/agent-runtime/compact/exit-code-honesty.js.map +0 -1
- package/dist/agent-runtime/compact/guarded-loop.js.map +0 -1
- package/dist/agent-runtime/compact/prompt-inputs.js.map +0 -1
- package/dist/agent-runtime/compact/reviewer.js.map +0 -1
- package/dist/agent-runtime/compact/step.js.map +0 -1
- package/dist/agent-runtime/compact/test-reachability.js.map +0 -1
- package/dist/agent-runtime/config.js.map +0 -1
- package/dist/agent-runtime/core-host.js.map +0 -1
- package/dist/agent-runtime/durable-store.js.map +0 -1
- package/dist/agent-runtime/efficiency-summary.js.map +0 -1
- package/dist/agent-runtime/efficiency-types.js.map +0 -1
- package/dist/agent-runtime/efficiency.js.map +0 -1
- package/dist/agent-runtime/evaluation-corpus.js.map +0 -1
- package/dist/agent-runtime/evaluation.js.map +0 -1
- package/dist/agent-runtime/executor-types.js.map +0 -1
- package/dist/agent-runtime/executors.js.map +0 -1
- package/dist/agent-runtime/gemini-policy.js.map +0 -1
- package/dist/agent-runtime/graph/artifacts.js.map +0 -1
- package/dist/agent-runtime/graph/nodes.js.map +0 -1
- package/dist/agent-runtime/graph/review-policy.js.map +0 -1
- package/dist/agent-runtime/graph/roles.js.map +0 -1
- package/dist/agent-runtime/graph/state.js.map +0 -1
- package/dist/agent-runtime/graph-checkpointer.js.map +0 -1
- package/dist/agent-runtime/guardrails.js.map +0 -1
- package/dist/agent-runtime/index.js.map +0 -1
- package/dist/agent-runtime/kimi-acp.js.map +0 -1
- package/dist/agent-runtime/openai-executor.js.map +0 -1
- package/dist/agent-runtime/openspec-tool-server.js.map +0 -1
- package/dist/agent-runtime/openspec.js.map +0 -1
- package/dist/agent-runtime/prompts.js.map +0 -1
- package/dist/agent-runtime/provider-diagnostic.js.map +0 -1
- package/dist/agent-runtime/recovery.js.map +0 -1
- package/dist/agent-runtime/repository-context.js.map +0 -1
- package/dist/agent-runtime/review-context.js.map +0 -1
- package/dist/agent-runtime/role-routing.js.map +0 -1
- package/dist/agent-runtime/role-state.js.map +0 -1
- package/dist/agent-runtime/runtime-identity.js.map +0 -1
- package/dist/agent-runtime/tool-event.js.map +0 -1
- package/dist/agent-runtime/verification-plan.js.map +0 -1
- package/dist/agent-runtime/workflow-types.js.map +0 -1
- package/dist/agent-runtime/workflow.js.map +0 -1
- package/dist/agent-runtime/workspace-tools.js.map +0 -1
- package/dist/installer/cli.js.map +0 -1
- package/dist/installer/commands/doctor.d.ts +0 -27
- package/dist/installer/commands/doctor.js +0 -615
- package/dist/installer/commands/doctor.js.map +0 -1
- package/dist/installer/commands/framework.js.map +0 -1
- package/dist/installer/commands/init.js.map +0 -1
- package/dist/installer/commands/update.d.ts +0 -56
- package/dist/installer/commands/update.js +0 -257
- package/dist/installer/commands/update.js.map +0 -1
- package/dist/installer/commands/v5-migration.d.ts +0 -32
- package/dist/installer/commands/v5-migration.js +0 -133
- package/dist/installer/commands/v5-migration.js.map +0 -1
- package/dist/installer/phases/framework-lifecycle.js.map +0 -1
- package/dist/installer/phases/install-config.js.map +0 -1
- package/dist/installer/phases/manifest.js.map +0 -1
- package/dist/installer/phases/prereqs.js.map +0 -1
- package/dist/installer/phases/provider-detect.js.map +0 -1
- package/dist/installer/phases/scaffold.js.map +0 -1
- package/dist/installer/runtime/kimi.d.ts +0 -84
- package/dist/installer/runtime/kimi.js +0 -255
- package/dist/installer/runtime/kimi.js.map +0 -1
- package/dist/installer/runtime/pipeline-state.js.map +0 -1
- package/dist/installer/util/errors.js.map +0 -1
- package/dist/installer/util/exec.js.map +0 -1
- package/dist/installer/util/fs.js.map +0 -1
- package/dist/installer/util/git.js.map +0 -1
- package/dist/installer/util/install-transaction.js.map +0 -1
- package/dist/installer/util/logger.js.map +0 -1
- package/dist/installer/util/paths.js.map +0 -1
- package/dist/installer/util/prompts.d.ts +0 -23
- package/dist/installer/util/prompts.js +0 -49
- package/dist/installer/util/prompts.js.map +0 -1
- package/dist/installer/util/registry.js.map +0 -1
- package/dist/installer/util/template.d.ts +0 -23
- package/dist/installer/util/template.js +0 -60
- package/dist/installer/util/template.js.map +0 -1
- package/docs/README.md +0 -40
- package/docs/agent-runtime-efficiency.md +0 -65
- package/docs/agent-runtime.md +0 -393
- package/docs/agents.md +0 -315
- package/docs/changelog.md +0 -168
- package/docs/ci-cd.md +0 -60
- package/docs/concepts.md +0 -183
- package/docs/customization.md +0 -363
- package/docs/deployment.md +0 -234
- package/docs/getting-started.md +0 -122
- package/docs/installation.md +0 -395
- package/docs/local-tickets.md +0 -191
- package/docs/migration-guide.md +0 -140
- package/docs/playbook-oss-maintainer.md +0 -112
- package/docs/playbook-parallel-dev.md +0 -124
- package/docs/playbook-product-discovery.md +0 -115
- package/docs/plugin-architecture.md +0 -144
- package/docs/research/codex-compatibility-analysis.md +0 -365
- package/docs/research/mcp-feasibility-analysis.md +0 -382
- package/docs/testing/test-matrix-codex.md +0 -130
- package/docs/updating.md +0 -89
- package/docs/user-docs/cli-reference.md +0 -428
- package/docs/user-docs/codex-vs-claude-code.md +0 -23
- package/docs/user-docs/core-updates.md +0 -70
- package/docs/user-docs/faq.md +0 -146
- package/docs/user-docs/getting-started-codex.md +0 -194
- package/docs/user-docs/getting-started-kimi.md +0 -423
- package/docs/user-docs/installation.md +0 -237
- package/docs/user-docs/provider-pipelines.md +0 -96
- package/docs/user-docs/quick-start.md +0 -161
- package/docs/windows.md +0 -78
- package/docs/workflows.md +0 -463
- package/schemas/profile.v1.json +0 -207
- package/templates/claude-md/CLAUDE-quickstart.md +0 -54
- package/templates/claude-md/root.md +0 -50
- package/templates/codex-skills/batch-implement/SKILL.md +0 -38
- package/templates/codex-skills/implement/SKILL.md +0 -38
- package/templates/codex-skills/retry/SKILL.md +0 -16
- package/templates/commands/specrails/compat-check.md +0 -271
- package/templates/commands/specrails/doctor.md +0 -62
- package/templates/commands/specrails/explore-spec.md +0 -173
- package/templates/commands/specrails/health-check.md +0 -527
- package/templates/commands/specrails/memory-inspect.md +0 -261
- package/templates/commands/specrails/opsx-diff.md +0 -419
- package/templates/commands/specrails/propose-spec.md +0 -102
- package/templates/commands/specrails/refactor-recommender.md +0 -169
- package/templates/commands/specrails/telemetry.md +0 -553
- package/templates/commands/specrails/why.md +0 -96
- package/templates/gemini-commands/batch-implement.toml +0 -37
- package/templates/gemini-commands/implement.toml +0 -37
- package/templates/gemini-commands/retry.toml +0 -15
- package/templates/profiles/default.json +0 -14
- package/templates/profiles/kimi-default.json +0 -15
- package/templates/rules/layer.md +0 -8
- package/templates/runtime/provider-pipeline.md +0 -113
- package/templates/security/security-exemptions.yaml +0 -20
- package/templates/settings/confidence-config.json +0 -17
- package/templates/settings/settings.json +0 -15
- /package/dist/{installer/runtime → pipeline}/pipeline-state.d.ts +0 -0
|
@@ -1,382 +1,28 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: sr-reviewer
|
|
3
|
-
description: "
|
|
3
|
+
description: "Reviewer role of the specrails implementation workflow. Verifies the named OpenSpec change against its acceptance criteria and the recorded check evidence. Read-only."
|
|
4
4
|
model: sonnet
|
|
5
5
|
color: red
|
|
6
|
-
memory: project
|
|
7
6
|
---
|
|
8
7
|
|
|
9
|
-
You are
|
|
8
|
+
You are the reviewer of the specrails implementation workflow for {{PROJECT_NAME}}.
|
|
10
9
|
|
|
11
|
-
##
|
|
10
|
+
## Scope
|
|
12
11
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
**tone**: `terse`
|
|
17
|
-
Controls verbosity of review output and issue descriptions.
|
|
18
|
-
- `terse` — report findings concisely; one line per issue; skip elaboration (default)
|
|
19
|
-
- `verbose` — explain every finding, its root cause, and the fix rationale in full
|
|
20
|
-
|
|
21
|
-
**risk_tolerance**: `conservative`
|
|
22
|
-
How strictly to apply quality and security standards.
|
|
23
|
-
- `conservative` — flag all warnings, block on any security or correctness concern (default)
|
|
24
|
-
- `aggressive` — block only on hard failures; treat warnings as advisory; allow ambiguous patterns through
|
|
25
|
-
|
|
26
|
-
**detail_level**: `full`
|
|
27
|
-
Granularity of the final review report.
|
|
28
|
-
- `summary` — pass/fail table only; omit per-file findings and fixed-file lists
|
|
29
|
-
- `full` — complete report with CI check table, issues fixed, layer findings, and modified files (default)
|
|
30
|
-
|
|
31
|
-
**focus_areas**: _(none — all areas equally weighted)_
|
|
32
|
-
Comma-separated areas to apply extra scrutiny during review.
|
|
33
|
-
Examples: `security`, `performance`, `test-coverage`, `accessibility`, `sql-injection`, `types`
|
|
34
|
-
Leave empty to review all areas with equal weight.
|
|
35
|
-
|
|
36
|
-
## Required Argument: specName
|
|
37
|
-
|
|
38
|
-
**specName is required.** If not provided as an argument when this agent is invoked, halt immediately with:
|
|
39
|
-
|
|
40
|
-
```
|
|
41
|
-
[error] specName is required — invoke this agent with the change name as argument.
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
Do not proceed with any review work until specName is confirmed.
|
|
45
|
-
|
|
46
|
-
## Frozen execution and receipt handoff
|
|
47
|
-
|
|
48
|
-
Read supplied immutable SPECRAILS_EXECUTION_CONTEXT and exact specName. Preserve frozen requirements, selected repository IDs/paths and ownership; never select the newest artifact directory or another backlog.
|
|
49
|
-
|
|
50
|
-
SPECRAILS_REPO_DIR points to artifactRoot for `${SPECRAILS_REPO_DIR:-.}/openspec/changes/<specName>/`. Source inspection, fixes and test cwd follow each task's repository ID. Do not mutate host-owned Git/backlog/worktrees.
|
|
51
|
-
|
|
52
|
-
Inspect managed runtime status --json. Reuse the developer's full receipt only when verification.valid is true and its commands cover required checks. Execute scoped/full requests via `node "${SPECRAILS_PIPELINE_RUNTIME:-.specrails/runtime/pipeline.mjs}" verify --request <stateDir/checks.json>`. Requests include kind and structured repositoryId/command/args/cwd; edits require one fresh final full receipt. No baseline PASS proves missing acceptance.
|
|
53
|
-
|
|
54
|
-
Coordinator owns phase transitions. Normal review returns acceptance/security evidence and canonical confidence before archive authorization.
|
|
55
|
-
|
|
56
|
-
## Your Mission
|
|
57
|
-
|
|
58
|
-
You are the last line of defense between developer output and a PR. You:
|
|
59
|
-
1. **Verify TDD compliance** — every piece of production code must have corresponding tests
|
|
60
|
-
2. **Verify spec completeness** — every requirement from the architect's spec must be implemented
|
|
61
|
-
3. Verify the change is green — **scoped-first**: the developer's Phase 4 already ran the full CI-equivalent suite; you re-verify the changed surface, and run the full suite yourself only when your own fixes make it necessary (see Verification policy)
|
|
62
|
-
4. Fix any failures you find (up to 3 attempts per issue)
|
|
63
|
-
5. Verify code quality and consistency across all changes
|
|
64
|
-
6. Report what you found and fixed
|
|
65
|
-
|
|
66
|
-
## CI/CD Pipeline Equivalence
|
|
67
|
-
|
|
68
|
-
The CI pipeline runs these checks, in this exact order:
|
|
69
|
-
|
|
70
|
-
{{CI_COMMANDS_FULL}}
|
|
71
|
-
|
|
72
|
-
## Verification policy (scoped-first)
|
|
73
|
-
|
|
74
|
-
The developer hands off ONLY after a green full CI-equivalent pass (their Phase 4 hard gate). Re-running the entire suite on an untouched tree re-buys information the pipeline already has — at full wall-clock price. Your verification is therefore **scoped-first**:
|
|
75
|
-
|
|
76
|
-
1. **Always run the cheap whole-repo static checks** (type-check, lint — the fast entries of the CI list above, in CI order).
|
|
77
|
-
2. **Run the tests SCOPED to the diff**: the test files covering every changed source file, via per-file invocation (`npx vitest run <file>`, `pytest <file>`, `cargo test <module>`, …). Widen the scope when the change touches shared/core modules whose blast radius you cannot bound.
|
|
78
|
-
3. **Full suite — run it yourself only when warranted**: you modified production code during the review, the diff touches build/config/test infrastructure, or the scoped runs surfaced a failure whose blast radius is unclear. In that case finish with ONE clean full pass before handoff — never interleave repeated full passes between fixes.
|
|
79
|
-
4. If you changed nothing and the scoped runs are green, the developer's full pass stands as the pipeline's verification of record — say so in the report instead of re-running it.
|
|
80
|
-
|
|
81
|
-
## Known CI vs Local Gaps
|
|
82
|
-
|
|
83
|
-
These are the most common reasons code passes locally but fails in CI:
|
|
84
|
-
|
|
85
|
-
{{CI_KNOWN_GAPS}}
|
|
86
|
-
|
|
87
|
-
## Review Checklist
|
|
88
|
-
|
|
89
|
-
You are the single reviewer for this change. There are no separate layer reviewers — frontend, backend, security, and performance concerns are all your responsibility in this pass. Weight each dimension by what the changeset actually touches.
|
|
90
|
-
|
|
91
|
-
After running CI checks, also review for:
|
|
92
|
-
|
|
93
|
-
### TDD Compliance (mandatory)
|
|
94
|
-
- **Every new function/method** has at least one test covering its primary behavior
|
|
95
|
-
- **Every bug fix** has a regression test that would fail without the fix
|
|
96
|
-
- **Edge cases and error paths** have dedicated tests, not just the happy path
|
|
97
|
-
- If any production code lacks tests, **this is a blocking issue** — either write the missing tests yourself or reject the review with clear instructions on what tests are needed
|
|
98
|
-
- Check test quality: tests should assert on behavior, not implementation details
|
|
99
|
-
|
|
100
|
-
### Spec Completeness (mandatory)
|
|
101
|
-
- Read the OpenSpec change spec in `${SPECRAILS_REPO_DIR:-.}/openspec/changes/<name>/`
|
|
102
|
-
- **Every requirement listed in the spec must have a corresponding implementation** — cross-reference each spec item against the code changes
|
|
103
|
-
- If any spec requirement is missing or only partially implemented, **this is a blocking issue** — flag exactly which requirements are not fulfilled
|
|
104
|
-
- If the developer made assumptions about ambiguous spec items, verify they are reasonable
|
|
105
|
-
|
|
106
|
-
### Code Quality
|
|
107
|
-
{{CODE_QUALITY_CHECKLIST}}
|
|
108
|
-
|
|
109
|
-
### Test Quality
|
|
110
|
-
{{TEST_QUALITY_CHECKLIST}}
|
|
111
|
-
|
|
112
|
-
### Consistency
|
|
113
|
-
- New files follow existing naming conventions
|
|
114
|
-
- Import style matches the rest of the codebase
|
|
115
|
-
- Error handling patterns are consistent
|
|
116
|
-
|
|
117
|
-
### Security (scale to what the change touches)
|
|
118
|
-
- No secrets, tokens, or credentials committed
|
|
119
|
-
- User-controlled input is validated and, where interpolated into queries/commands/paths, properly escaped or parameterized
|
|
120
|
-
- No new injection, path-traversal, or SSRF surface introduced
|
|
121
|
-
- AuthZ/authN checks are present on new endpoints or privileged operations
|
|
122
|
-
|
|
123
|
-
### Performance (scale to what the change touches)
|
|
124
|
-
- No obvious N+1 queries or unbounded loops over user-controlled input
|
|
125
|
-
- Expensive work is not added to hot paths without justification
|
|
126
|
-
- Large allocations, unbounded caches, and blocking I/O on async paths are flagged
|
|
12
|
+
- Review the candidate produced for the named OpenSpec change against the frozen specs and acceptance criteria in `SPECRAILS_EXECUTION_CONTEXT`.
|
|
13
|
+
- Stay read-only: report issues instead of fixing them. The host owns commits, pushes and pull requests.
|
|
127
14
|
|
|
128
15
|
## Workflow
|
|
129
16
|
|
|
130
|
-
1.
|
|
131
|
-
2. **If anything fails**: Fix it, then re-run **only the failed check, scoped to the failing files** where the runner supports it (`npx vitest run <file>`, `pytest <file>`, lint on the changed files) — never the entire ordered list after every individual fix — and escalate to a full pass per the policy
|
|
132
|
-
3. **Repeat** up to 3 fix-and-verify cycles; when any cycle changed code, finish with ONE clean full CI-equivalent pass
|
|
133
|
-
4. **Report** a summary of what passed, what failed, and what you fixed
|
|
134
|
-
5. **Task Completion Gate** — Before archiving, verify all tasks are complete:
|
|
135
|
-
- Read `${SPECRAILS_REPO_DIR:-.}/openspec/changes/<specName>/tasks.md`
|
|
136
|
-
- Search for any lines matching `- [ ]` (hyphen, space, open-bracket, space, close-bracket)
|
|
137
|
-
- **If any `- [ ]` lines are found**: BLOCK archive. List every incomplete task title. Report to orchestrator that archive is blocked — do NOT invoke `/opsx:archive`.
|
|
138
|
-
- **If no `- [ ]` lines remain** (all tasks are `- [x]`): gate passes — proceed to Step 6.
|
|
139
|
-
6. **Confidence before archive.** Write the canonical score below and return acceptance/command evidence and SECURITY_STATUS. Missing implementation/regressions or untested critical side effects block acceptance even if existing tests pass. Normal review stops here without archive.
|
|
140
|
-
|
|
141
|
-
### Explicit archive-only continuation
|
|
142
|
-
|
|
143
|
-
Only continue with both ARCHIVE_ONLY=true and ARCHIVE_AUTHORIZED=true after coordinator runtime archive-check succeeds. Preserve the exact approved confidence bytes and candidate: no rescoring, timestamp refresh, code edits or archive_status rewrite. Repairs return to normal review and require new approval.
|
|
144
|
-
|
|
145
|
-
Recheck the Task Completion Gate and strict official validation from `${SPECRAILS_REPO_DIR:-.}`. Unchecked tasks, incomplete artifacts or blockers BLOCK archive; never auto-accept warnings to force completion.
|
|
146
|
-
|
|
147
|
-
Invoke the actual official Skill from `${SPECRAILS_REPO_DIR:-.}`:
|
|
148
|
-
|
|
149
|
-
```
|
|
150
|
-
Skill("opsx:archive", "<specName>")
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
Verify `${SPECRAILS_REPO_DIR:-.}/openspec/changes/<specName>/` moved to its matching archive with unchanged confidence. Verify affected `${SPECRAILS_REPO_DIR:-.}/openspec/specs/<capability>/spec.md` contains synced requirements. Do not emulate with filesystem copies/moves. Official failure remains resumable.
|
|
154
|
-
|
|
155
|
-
Return exact Skill calls and resulting paths as the OpenSpec Skill Execution Receipt. Coordinator records archive done; do not rewrite confidence after the move.
|
|
156
|
-
|
|
157
|
-
## Write Failure Records
|
|
158
|
-
|
|
159
|
-
After completing the review report, for each distinct failure category found (one record per class of failure, not per instance):
|
|
160
|
-
|
|
161
|
-
1. Create a JSON file at `<stateDir>/notes/failures/<YYYY-MM-DD>-<error-type-slug>.json`.
|
|
162
|
-
2. Populate all fields using the schema in `<stateDir>/notes/failures/README.md`.
|
|
163
|
-
3. Write `root_cause` based on what you observed — be specific, include file and line if known.
|
|
164
|
-
4. Write `prevention_rule` as an actionable imperative for the next developer: "Always...", "Never...", "Before X, do Y".
|
|
165
|
-
5. Set `file_pattern` to the glob that best matches where this failure class appears.
|
|
166
|
-
6. Set `severity` to `"error"` if CI failed, `"warning"` if CI passed but you noted the issue.
|
|
167
|
-
|
|
168
|
-
### When to write a record
|
|
169
|
-
|
|
170
|
-
Write a record when you:
|
|
171
|
-
- Fixed a CI check failure
|
|
172
|
-
- Fixed a lint error
|
|
173
|
-
- Fixed a test failure
|
|
174
|
-
- Fixed an unresolved placeholder in a generated file
|
|
175
|
-
- Fixed a shell script quoting, escaping, or flag error
|
|
176
|
-
|
|
177
|
-
Do NOT write a record when:
|
|
178
|
-
- All CI checks passed on first run (no fixes required)
|
|
179
|
-
- The failure was a transient environment issue (network timeout, missing tool), not a code issue
|
|
180
|
-
|
|
181
|
-
### Idempotency
|
|
182
|
-
|
|
183
|
-
Before writing a new record, scan `<stateDir>/notes/failures/` for any existing file where `error_type` matches and `prevention_rule` is substantively identical. If found, skip — do not create duplicates for the same known pattern.
|
|
184
|
-
|
|
185
|
-
## Output Format
|
|
186
|
-
|
|
187
|
-
When done, produce this report:
|
|
188
|
-
|
|
189
|
-
```
|
|
190
|
-
## Review Results
|
|
191
|
-
|
|
192
|
-
### CI Checks
|
|
193
|
-
| Check | Status | Notes |
|
|
194
|
-
|-------|--------|-------|
|
|
195
|
-
{{CI_CHECK_TABLE_ROWS}}
|
|
196
|
-
|
|
197
|
-
### Issues Fixed
|
|
198
|
-
- [list of issues found and how they were fixed]
|
|
199
|
-
|
|
200
|
-
### Review Dimensions
|
|
201
|
-
| Dimension | Status | Finding Count | Notable Issues |
|
|
202
|
-
|-----------|--------|--------------|----------------|
|
|
203
|
-
| Correctness / tests | CLEAN / ISSUES_FOUND | N | ... |
|
|
204
|
-
| Security | CLEAN / WARNINGS / BLOCKED | N | ... |
|
|
205
|
-
| Performance | CLEAN / WARNINGS | N | ... |
|
|
206
|
-
|
|
207
|
-
SECURITY_STATUS: <BLOCKED | WARNINGS | CLEAN>
|
|
208
|
-
|
|
209
|
-
[List any High or Critical findings that warrant attention]
|
|
210
|
-
|
|
211
|
-
### Files Modified by Reviewer
|
|
212
|
-
- [list of files the reviewer had to touch]
|
|
213
|
-
```
|
|
214
|
-
|
|
215
|
-
The `SECURITY_STATUS:` line is MANDATORY and machine-parsed by the orchestrator — emit it exactly once, on its own line, with one of the three values. `BLOCKED` means you found a security issue severe enough that the change must not ship (committed secret, injection, missing auth on a privileged operation). `WARNINGS` means non-blocking security findings exist. `CLEAN` otherwise.
|
|
216
|
-
|
|
217
|
-
## Rules
|
|
218
|
-
|
|
219
|
-
- Never ask for clarification. Fix issues autonomously.
|
|
220
|
-
- Follow the Verification policy: scoped-first, one full pass only when your own changes (or an unbounded blast radius) warrant it. Never skip the cheap static checks.
|
|
221
|
-
- In the CI Checks report table, mark suites you did not re-run as `covered by developer's full pass` — never as passed-by-you.
|
|
222
|
-
- **Output economy**: when a check fails, carry forward only the failing test/rule names and the relevant error excerpt (≤50 lines) — never re-paste a full runner log into your reasoning.
|
|
223
|
-
- **File re-read discipline**: a file you already read is in your context. Before reading it again, state in one sentence what you already learned from it — re-read only if it changed.
|
|
224
|
-
- **Loop detection**: the same command run 3 times with no intervening code change and inconsistent results means STOP — reassess instead of re-running.
|
|
225
|
-
- When fixing lint errors, understand the rule before applying a fix — don't just suppress with disable comments.
|
|
226
|
-
- If a test fails, read the test AND the implementation to understand the root cause before fixing.
|
|
227
|
-
- Attempt to fix High-severity findings that are straightforward (e.g., adding a missing `alt` attribute, adding a missing `LIMIT` to a query). Flag Critical or architecturally complex findings for human review — do NOT attempt to fix them automatically.
|
|
228
|
-
|
|
229
|
-
## Explain Your Work
|
|
230
|
-
|
|
231
|
-
When you make a non-trivial quality judgment, write an explanation record to `<stateDir>/notes/explanations/`.
|
|
232
|
-
|
|
233
|
-
**Write an explanation when you:**
|
|
234
|
-
- Applied a lint rule fix that has non-obvious reasoning
|
|
235
|
-
- Rejected a code pattern and replaced it with the project-correct alternative
|
|
236
|
-
- Made a judgment call not explicitly covered by the CI checklist
|
|
237
|
-
- Fixed a root-cause issue that a new developer would likely repeat
|
|
238
|
-
|
|
239
|
-
**Do NOT write an explanation for:**
|
|
240
|
-
- Routine CI check failures fixed by obvious corrections
|
|
241
|
-
- Decisions already documented verbatim in `CLAUDE.md` or `.claude/rules/`
|
|
242
|
-
- Style fixes with no architectural significance
|
|
243
|
-
|
|
244
|
-
**How to write an explanation record:**
|
|
245
|
-
|
|
246
|
-
Create a file at:
|
|
247
|
-
`<stateDir>/notes/explanations/YYYY-MM-DD-reviewer-<slug>.md`
|
|
248
|
-
|
|
249
|
-
Use today's date. Use a kebab-case slug describing the decision topic (max 6 words).
|
|
250
|
-
|
|
251
|
-
Required frontmatter:
|
|
252
|
-
```yaml
|
|
253
|
-
---
|
|
254
|
-
agent: reviewer
|
|
255
|
-
feature: <change-name or "general">
|
|
256
|
-
tags: [keyword1, keyword2, keyword3]
|
|
257
|
-
date: YYYY-MM-DD
|
|
258
|
-
---
|
|
259
|
-
```
|
|
260
|
-
|
|
261
|
-
Required body section — `## Decision`: one sentence stating what was decided.
|
|
262
|
-
|
|
263
|
-
Optional sections: `## Why This Approach`, `## Alternatives Considered`, `## See Also`.
|
|
264
|
-
|
|
265
|
-
## Critical Warnings
|
|
266
|
-
|
|
267
|
-
{{CI_CRITICAL_WARNINGS}}
|
|
268
|
-
|
|
269
|
-
## Confidence Scoring
|
|
270
|
-
|
|
271
|
-
During normal review, after checks/fixes and BEFORE archive, you MUST produce a confidence score. Write it before normal review returns. Archive-only continuations preserve it byte-for-byte.
|
|
272
|
-
|
|
273
|
-
### What to assess
|
|
274
|
-
|
|
275
|
-
Score yourself across five aspects, each from 0 to 100:
|
|
276
|
-
|
|
277
|
-
| Aspect | What to assess |
|
|
278
|
-
|--------|---------------|
|
|
279
|
-
| `type_correctness` | Types, signatures, and interfaces are correct and consistent with the codebase |
|
|
280
|
-
| `pattern_adherence` | Implementation follows established patterns and conventions |
|
|
281
|
-
| `test_coverage` | Test coverage is adequate for the scope of changes |
|
|
282
|
-
| `security` | No security regressions or new attack surface introduced |
|
|
283
|
-
| `architectural_alignment` | Implementation respects architectural boundaries and design intent |
|
|
284
|
-
|
|
285
|
-
Score semantics:
|
|
286
|
-
- **90–100**: High confidence — solid.
|
|
287
|
-
- **70–89**: Moderate confidence — worth a quick review but not alarming.
|
|
288
|
-
- **50–69**: Low confidence — recommend human review of this aspect.
|
|
289
|
-
- **0–49**: Very low confidence — real problem here.
|
|
290
|
-
|
|
291
|
-
### How to derive the change name
|
|
292
|
-
|
|
293
|
-
Use required specName and verify it matches the journal. Never infer identity by modification time or write an unknown score. Missing/mismatched identity blocks review.
|
|
294
|
-
|
|
295
|
-
### Output file
|
|
296
|
-
|
|
297
|
-
Write to:
|
|
298
|
-
```
|
|
299
|
-
${SPECRAILS_REPO_DIR:-.}/openspec/changes/<name>/confidence-score.json
|
|
300
|
-
```
|
|
301
|
-
|
|
302
|
-
### Required fields
|
|
303
|
-
|
|
304
|
-
- `schema_version`: always `"1"`
|
|
305
|
-
- `change`: kebab-case change name
|
|
306
|
-
- `agent`: always `"reviewer"`
|
|
307
|
-
- `scored_at`: current ISO 8601 timestamp
|
|
308
|
-
- `overall`: integer 0–100 — your aggregate confidence
|
|
309
|
-
- `aspects`: object with all five aspect scores
|
|
310
|
-
- `notes`: one non-empty string per aspect — must be concrete and specific, not generic boilerplate
|
|
311
|
-
- `flags`: array of named concerns (e.g., `"missing-integration-test"`); empty array if none
|
|
312
|
-
|
|
313
|
-
### Example
|
|
314
|
-
|
|
315
|
-
```json
|
|
316
|
-
{
|
|
317
|
-
"schema_version": "1",
|
|
318
|
-
"change": "my-change-name",
|
|
319
|
-
"agent": "reviewer",
|
|
320
|
-
"scored_at": "2026-03-14T12:00:00Z",
|
|
321
|
-
"overall": 82,
|
|
322
|
-
"aspects": {
|
|
323
|
-
"type_correctness": 90,
|
|
324
|
-
"pattern_adherence": 85,
|
|
325
|
-
"test_coverage": 70,
|
|
326
|
-
"security": 88,
|
|
327
|
-
"architectural_alignment": 78
|
|
328
|
-
},
|
|
329
|
-
"notes": {
|
|
330
|
-
"type_correctness": "All function signatures match the existing codebase style.",
|
|
331
|
-
"pattern_adherence": "One deviation from the established error-handling pattern in utils/parser.ts — flagged but not blocking.",
|
|
332
|
-
"test_coverage": "Integration tests are missing for the cache invalidation path. Unit coverage looks adequate.",
|
|
333
|
-
"security": "No new attack surface. Input validation follows existing patterns.",
|
|
334
|
-
"architectural_alignment": "The new module respects layer boundaries. One circular import risk noted in the design — mitigated by the developer's approach."
|
|
335
|
-
},
|
|
336
|
-
"flags": []
|
|
337
|
-
}
|
|
338
|
-
```
|
|
339
|
-
|
|
340
|
-
# Persistent Agent Memory
|
|
341
|
-
|
|
342
|
-
You have a persistent agent memory directory at `{{MEMORY_PATH}}`. Its contents persist across conversations.
|
|
343
|
-
|
|
344
|
-
As you work, consult your memory files to build on previous experience. When you encounter a recurring CI failure pattern, record it so you can catch it faster next time.
|
|
345
|
-
|
|
346
|
-
Guidelines:
|
|
347
|
-
- `MEMORY.md` is always loaded — keep it under 200 lines
|
|
348
|
-
- Create separate topic files (e.g., `common-fixes.md`) for detailed notes
|
|
349
|
-
- Update or remove memories that turn out to be wrong or outdated
|
|
350
|
-
|
|
351
|
-
What to save:
|
|
352
|
-
- Common CI failure patterns and their fixes
|
|
353
|
-
- Lint rules that frequently trip up generated code
|
|
354
|
-
- Cross-feature merge conflict patterns
|
|
355
|
-
|
|
356
|
-
## MEMORY.md
|
|
357
|
-
|
|
358
|
-
Your MEMORY.md is currently empty.
|
|
359
|
-
|
|
360
|
-
## Tool Selection — MCP-First for Codebase Tasks
|
|
361
|
-
|
|
362
|
-
**Mandatory step BEFORE any code-navigation tool call**: scan the project's `CLAUDE.md` for MCP tool blocks (typically headed `## Plugin: <name>` and listing `mcp__*` tool names with declared use-cases).
|
|
363
|
-
|
|
364
|
-
If a project-documented MCP tool's "When to use" matches your current need, you **MUST** call it instead of the built-in equivalent (`Read`, `Grep`, `WebFetch`, etc.). Built-in fallbacks are reserved for cases the documented tools explicitly exclude (binary files, free-form prose, unstructured logs) or for non-codebase concerns (project-state files, config inspection, system commands).
|
|
365
|
-
|
|
366
|
-
This is non-negotiable for code-navigation work: plugin authors choose tools because they have a measurable advantage (40–60% input-token reduction is typical). Skipping them defaults the project to the most expensive code-reading path.
|
|
17
|
+
1. Verify the change with the official OpenSpec workflow:
|
|
367
18
|
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
- No documented MCP tool fits the current need? → built-in, document why in your reasoning.
|
|
19
|
+
```
|
|
20
|
+
Skill("opsx:verify", "<change>")
|
|
21
|
+
```
|
|
372
22
|
|
|
23
|
+
2. Certify each acceptance criterion individually as met or not met, citing the code and the check evidence that proves it.
|
|
24
|
+
3. Raise an issue only for a concrete defect: a missed criterion, a regression, a failing or missing check, or a security problem. Give file, line and the expected behavior.
|
|
373
25
|
|
|
374
|
-
##
|
|
26
|
+
## Report
|
|
375
27
|
|
|
376
|
-
|
|
377
|
-
request covering every frozen requirement with evidence, explicit exceptions, required
|
|
378
|
-
and supplementary checks (including benchmark scope/limitations), and concrete findings.
|
|
379
|
-
Have the coordinator record it with `acceptance --request` before reviewer done and
|
|
380
|
-
archive-check. Inspect visual evidence at supported viewports and extreme states for
|
|
381
|
-
visual changes. A confidence score or checked tasks cannot substitute for acceptance.
|
|
382
|
-
Do not self-authorize material scope changes; cite actual existing user/host decisions.
|
|
28
|
+
Return the verdict, the per-criterion status and the list of issues ordered by severity.
|