cap-pro 1.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/.claude-plugin/README.md +26 -0
- package/.claude-plugin/marketplace.json +24 -0
- package/.claude-plugin/plugin.json +24 -0
- package/LICENSE +21 -0
- package/README.ja-JP.md +834 -0
- package/README.ko-KR.md +823 -0
- package/README.md +806 -0
- package/README.pt-BR.md +452 -0
- package/README.zh-CN.md +800 -0
- package/agents/cap-architect.md +269 -0
- package/agents/cap-brainstormer.md +207 -0
- package/agents/cap-curator.md +276 -0
- package/agents/cap-debugger.md +365 -0
- package/agents/cap-designer.md +246 -0
- package/agents/cap-historian.md +464 -0
- package/agents/cap-migrator.md +291 -0
- package/agents/cap-prototyper.md +197 -0
- package/agents/cap-validator.md +308 -0
- package/bin/install.js +5433 -0
- package/cap/bin/cap-tools.cjs +853 -0
- package/cap/bin/lib/arc-scanner.cjs +344 -0
- package/cap/bin/lib/cap-affinity-engine.cjs +862 -0
- package/cap/bin/lib/cap-anchor.cjs +228 -0
- package/cap/bin/lib/cap-annotation-writer.cjs +340 -0
- package/cap/bin/lib/cap-checkpoint.cjs +434 -0
- package/cap/bin/lib/cap-cluster-detect.cjs +945 -0
- package/cap/bin/lib/cap-cluster-display.cjs +52 -0
- package/cap/bin/lib/cap-cluster-format.cjs +245 -0
- package/cap/bin/lib/cap-cluster-helpers.cjs +295 -0
- package/cap/bin/lib/cap-cluster-io.cjs +212 -0
- package/cap/bin/lib/cap-completeness.cjs +540 -0
- package/cap/bin/lib/cap-deps.cjs +583 -0
- package/cap/bin/lib/cap-design-families.cjs +332 -0
- package/cap/bin/lib/cap-design.cjs +966 -0
- package/cap/bin/lib/cap-divergence-detector.cjs +400 -0
- package/cap/bin/lib/cap-doctor.cjs +752 -0
- package/cap/bin/lib/cap-feature-map-internals.cjs +19 -0
- package/cap/bin/lib/cap-feature-map-migrate.cjs +335 -0
- package/cap/bin/lib/cap-feature-map-monorepo.cjs +885 -0
- package/cap/bin/lib/cap-feature-map-shard.cjs +315 -0
- package/cap/bin/lib/cap-feature-map.cjs +1943 -0
- package/cap/bin/lib/cap-fitness-score.cjs +1075 -0
- package/cap/bin/lib/cap-impact-analysis.cjs +652 -0
- package/cap/bin/lib/cap-learn-review.cjs +1072 -0
- package/cap/bin/lib/cap-learning-signals.cjs +627 -0
- package/cap/bin/lib/cap-loader.cjs +227 -0
- package/cap/bin/lib/cap-logger.cjs +57 -0
- package/cap/bin/lib/cap-memory-bridge.cjs +764 -0
- package/cap/bin/lib/cap-memory-confidence.cjs +452 -0
- package/cap/bin/lib/cap-memory-dir.cjs +987 -0
- package/cap/bin/lib/cap-memory-engine.cjs +698 -0
- package/cap/bin/lib/cap-memory-extends.cjs +398 -0
- package/cap/bin/lib/cap-memory-graph.cjs +790 -0
- package/cap/bin/lib/cap-memory-migrate.cjs +2015 -0
- package/cap/bin/lib/cap-memory-pin.cjs +183 -0
- package/cap/bin/lib/cap-memory-platform.cjs +490 -0
- package/cap/bin/lib/cap-memory-prune.cjs +707 -0
- package/cap/bin/lib/cap-memory-schema.cjs +812 -0
- package/cap/bin/lib/cap-migrate-tags.cjs +309 -0
- package/cap/bin/lib/cap-migrate.cjs +540 -0
- package/cap/bin/lib/cap-pattern-apply.cjs +1203 -0
- package/cap/bin/lib/cap-pattern-pipeline.cjs +1034 -0
- package/cap/bin/lib/cap-plugin-manifest.cjs +80 -0
- package/cap/bin/lib/cap-realtime-affinity.cjs +399 -0
- package/cap/bin/lib/cap-reconcile.cjs +570 -0
- package/cap/bin/lib/cap-research-gate.cjs +218 -0
- package/cap/bin/lib/cap-scope-filter.cjs +402 -0
- package/cap/bin/lib/cap-semantic-pipeline.cjs +1038 -0
- package/cap/bin/lib/cap-session-extract.cjs +987 -0
- package/cap/bin/lib/cap-session.cjs +445 -0
- package/cap/bin/lib/cap-snapshot-linkage.cjs +963 -0
- package/cap/bin/lib/cap-stack-docs.cjs +646 -0
- package/cap/bin/lib/cap-tag-observer.cjs +371 -0
- package/cap/bin/lib/cap-tag-scanner.cjs +1766 -0
- package/cap/bin/lib/cap-telemetry.cjs +466 -0
- package/cap/bin/lib/cap-test-audit.cjs +1438 -0
- package/cap/bin/lib/cap-thread-migrator.cjs +307 -0
- package/cap/bin/lib/cap-thread-synthesis.cjs +545 -0
- package/cap/bin/lib/cap-thread-tracker.cjs +519 -0
- package/cap/bin/lib/cap-trace.cjs +399 -0
- package/cap/bin/lib/cap-trust-mode.cjs +336 -0
- package/cap/bin/lib/cap-ui-design-editor.cjs +642 -0
- package/cap/bin/lib/cap-ui-mind-map.cjs +712 -0
- package/cap/bin/lib/cap-ui-thread-nav.cjs +693 -0
- package/cap/bin/lib/cap-ui.cjs +1245 -0
- package/cap/bin/lib/cap-upgrade.cjs +1028 -0
- package/cap/bin/lib/cli/arg-helpers.cjs +49 -0
- package/cap/bin/lib/cli/frontmatter-router.cjs +31 -0
- package/cap/bin/lib/cli/init-router.cjs +68 -0
- package/cap/bin/lib/cli/phase-router.cjs +102 -0
- package/cap/bin/lib/cli/state-router.cjs +61 -0
- package/cap/bin/lib/cli/template-router.cjs +37 -0
- package/cap/bin/lib/cli/uat-router.cjs +29 -0
- package/cap/bin/lib/cli/validation-router.cjs +26 -0
- package/cap/bin/lib/cli/verification-router.cjs +31 -0
- package/cap/bin/lib/cli/workstream-router.cjs +39 -0
- package/cap/bin/lib/commands.cjs +961 -0
- package/cap/bin/lib/config.cjs +467 -0
- package/cap/bin/lib/convention-reader.cjs +258 -0
- package/cap/bin/lib/core.cjs +1241 -0
- package/cap/bin/lib/feature-aggregator.cjs +423 -0
- package/cap/bin/lib/frontmatter.cjs +337 -0
- package/cap/bin/lib/init.cjs +1443 -0
- package/cap/bin/lib/manifest-generator.cjs +383 -0
- package/cap/bin/lib/milestone.cjs +253 -0
- package/cap/bin/lib/model-profiles.cjs +69 -0
- package/cap/bin/lib/monorepo-context.cjs +226 -0
- package/cap/bin/lib/monorepo-migrator.cjs +509 -0
- package/cap/bin/lib/phase.cjs +889 -0
- package/cap/bin/lib/profile-output.cjs +989 -0
- package/cap/bin/lib/profile-pipeline.cjs +540 -0
- package/cap/bin/lib/roadmap.cjs +330 -0
- package/cap/bin/lib/security.cjs +394 -0
- package/cap/bin/lib/session-manager.cjs +292 -0
- package/cap/bin/lib/skeleton-generator.cjs +179 -0
- package/cap/bin/lib/state.cjs +1032 -0
- package/cap/bin/lib/template.cjs +231 -0
- package/cap/bin/lib/test-detector.cjs +62 -0
- package/cap/bin/lib/uat.cjs +283 -0
- package/cap/bin/lib/verify.cjs +889 -0
- package/cap/bin/lib/workspace-detector.cjs +371 -0
- package/cap/bin/lib/workstream.cjs +492 -0
- package/cap/commands/gsd/workstreams.md +63 -0
- package/cap/references/arc-standard.md +315 -0
- package/cap/references/cap-agent-architecture.md +101 -0
- package/cap/references/cap-gitignore-template +9 -0
- package/cap/references/cap-zero-deps.md +158 -0
- package/cap/references/checkpoints.md +778 -0
- package/cap/references/continuation-format.md +249 -0
- package/cap/references/contract-test-templates.md +312 -0
- package/cap/references/feature-map-template.md +25 -0
- package/cap/references/git-integration.md +295 -0
- package/cap/references/git-planning-commit.md +38 -0
- package/cap/references/model-profiles.md +174 -0
- package/cap/references/phase-numbering.md +126 -0
- package/cap/references/planning-config.md +202 -0
- package/cap/references/property-test-templates.md +316 -0
- package/cap/references/security-test-templates.md +347 -0
- package/cap/references/session-template.json +8 -0
- package/cap/references/tdd.md +263 -0
- package/cap/references/user-profiling.md +681 -0
- package/cap/references/verification-patterns.md +612 -0
- package/cap/templates/UAT.md +265 -0
- package/cap/templates/claude-md.md +175 -0
- package/cap/templates/codebase/architecture.md +255 -0
- package/cap/templates/codebase/concerns.md +310 -0
- package/cap/templates/codebase/conventions.md +307 -0
- package/cap/templates/codebase/integrations.md +280 -0
- package/cap/templates/codebase/stack.md +186 -0
- package/cap/templates/codebase/structure.md +285 -0
- package/cap/templates/codebase/testing.md +480 -0
- package/cap/templates/config.json +44 -0
- package/cap/templates/context.md +352 -0
- package/cap/templates/continue-here.md +78 -0
- package/cap/templates/copilot-instructions.md +7 -0
- package/cap/templates/debug-subagent-prompt.md +91 -0
- package/cap/templates/discussion-log.md +63 -0
- package/cap/templates/milestone-archive.md +123 -0
- package/cap/templates/milestone.md +115 -0
- package/cap/templates/phase-prompt.md +610 -0
- package/cap/templates/planner-subagent-prompt.md +117 -0
- package/cap/templates/project.md +186 -0
- package/cap/templates/requirements.md +231 -0
- package/cap/templates/research-project/ARCHITECTURE.md +204 -0
- package/cap/templates/research-project/FEATURES.md +147 -0
- package/cap/templates/research-project/PITFALLS.md +200 -0
- package/cap/templates/research-project/STACK.md +120 -0
- package/cap/templates/research-project/SUMMARY.md +170 -0
- package/cap/templates/research.md +552 -0
- package/cap/templates/roadmap.md +202 -0
- package/cap/templates/state.md +176 -0
- package/cap/templates/summary.md +364 -0
- package/cap/templates/user-preferences.md +498 -0
- package/cap/templates/verification-report.md +322 -0
- package/cap/workflows/add-phase.md +112 -0
- package/cap/workflows/add-tests.md +351 -0
- package/cap/workflows/add-todo.md +158 -0
- package/cap/workflows/audit-milestone.md +340 -0
- package/cap/workflows/audit-uat.md +109 -0
- package/cap/workflows/autonomous.md +891 -0
- package/cap/workflows/check-todos.md +177 -0
- package/cap/workflows/cleanup.md +152 -0
- package/cap/workflows/complete-milestone.md +767 -0
- package/cap/workflows/diagnose-issues.md +231 -0
- package/cap/workflows/discovery-phase.md +289 -0
- package/cap/workflows/discuss-phase-assumptions.md +653 -0
- package/cap/workflows/discuss-phase.md +1049 -0
- package/cap/workflows/do.md +104 -0
- package/cap/workflows/execute-phase.md +846 -0
- package/cap/workflows/execute-plan.md +514 -0
- package/cap/workflows/fast.md +105 -0
- package/cap/workflows/forensics.md +265 -0
- package/cap/workflows/health.md +181 -0
- package/cap/workflows/help.md +660 -0
- package/cap/workflows/insert-phase.md +130 -0
- package/cap/workflows/list-phase-assumptions.md +178 -0
- package/cap/workflows/list-workspaces.md +56 -0
- package/cap/workflows/manager.md +362 -0
- package/cap/workflows/map-codebase.md +377 -0
- package/cap/workflows/milestone-summary.md +223 -0
- package/cap/workflows/new-milestone.md +486 -0
- package/cap/workflows/new-project.md +1250 -0
- package/cap/workflows/new-workspace.md +237 -0
- package/cap/workflows/next.md +97 -0
- package/cap/workflows/node-repair.md +92 -0
- package/cap/workflows/note.md +156 -0
- package/cap/workflows/pause-work.md +176 -0
- package/cap/workflows/plan-milestone-gaps.md +273 -0
- package/cap/workflows/plan-phase.md +857 -0
- package/cap/workflows/plant-seed.md +169 -0
- package/cap/workflows/pr-branch.md +129 -0
- package/cap/workflows/profile-user.md +449 -0
- package/cap/workflows/progress.md +507 -0
- package/cap/workflows/quick.md +757 -0
- package/cap/workflows/remove-phase.md +155 -0
- package/cap/workflows/remove-workspace.md +90 -0
- package/cap/workflows/research-phase.md +82 -0
- package/cap/workflows/resume-project.md +326 -0
- package/cap/workflows/review.md +228 -0
- package/cap/workflows/session-report.md +146 -0
- package/cap/workflows/settings.md +283 -0
- package/cap/workflows/ship.md +228 -0
- package/cap/workflows/stats.md +60 -0
- package/cap/workflows/transition.md +671 -0
- package/cap/workflows/ui-phase.md +298 -0
- package/cap/workflows/ui-review.md +161 -0
- package/cap/workflows/update.md +323 -0
- package/cap/workflows/validate-phase.md +170 -0
- package/cap/workflows/verify-phase.md +254 -0
- package/cap/workflows/verify-work.md +637 -0
- package/commands/cap/annotate.md +165 -0
- package/commands/cap/brainstorm.md +393 -0
- package/commands/cap/checkpoint.md +106 -0
- package/commands/cap/completeness.md +94 -0
- package/commands/cap/continue.md +72 -0
- package/commands/cap/debug.md +588 -0
- package/commands/cap/deps.md +169 -0
- package/commands/cap/design.md +479 -0
- package/commands/cap/init.md +354 -0
- package/commands/cap/iterate.md +249 -0
- package/commands/cap/learn.md +459 -0
- package/commands/cap/memory.md +275 -0
- package/commands/cap/migrate-feature-map.md +91 -0
- package/commands/cap/migrate-memory.md +108 -0
- package/commands/cap/migrate-tags.md +91 -0
- package/commands/cap/migrate.md +131 -0
- package/commands/cap/prototype.md +510 -0
- package/commands/cap/reconcile.md +121 -0
- package/commands/cap/review.md +360 -0
- package/commands/cap/save.md +72 -0
- package/commands/cap/scan.md +404 -0
- package/commands/cap/start.md +356 -0
- package/commands/cap/status.md +118 -0
- package/commands/cap/test-audit.md +262 -0
- package/commands/cap/test.md +394 -0
- package/commands/cap/trace.md +133 -0
- package/commands/cap/ui.md +167 -0
- package/hooks/dist/cap-check-update.js +115 -0
- package/hooks/dist/cap-context-monitor.js +185 -0
- package/hooks/dist/cap-learn-review-hook.js +114 -0
- package/hooks/dist/cap-learning-hook.js +192 -0
- package/hooks/dist/cap-memory.js +299 -0
- package/hooks/dist/cap-prompt-guard.js +97 -0
- package/hooks/dist/cap-statusline.js +157 -0
- package/hooks/dist/cap-tag-observer.js +115 -0
- package/hooks/dist/cap-version-check.js +112 -0
- package/hooks/dist/cap-workflow-guard.js +175 -0
- package/hooks/hooks.json +55 -0
- package/package.json +58 -0
- package/scripts/base64-scan.sh +262 -0
- package/scripts/build-hooks.js +93 -0
- package/scripts/cap-removal-checklist.md +202 -0
- package/scripts/prompt-injection-scan.sh +199 -0
- package/scripts/run-tests.cjs +181 -0
- package/scripts/secret-scan.sh +227 -0
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cap-validator
|
|
3
|
+
description: Multi-mode validation agent — test (RED-GREEN), review (Stage 1+2 AC compliance + code quality), audit (F-048 completeness score). Spawned by /cap:test, /cap:review, /cap:completeness. Mode passed via Task() prompt prefix.
|
|
4
|
+
tools: Read, Write, Edit, Bash, Grep, Glob
|
|
5
|
+
permissionMode: acceptEdits
|
|
6
|
+
color: green
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
<!-- @cap-context CAP v3 validator agent — single agent covering all post-prototype validation: tests, review, audit. Consolidates the work formerly split across the (now-removed) cap-tester and cap-reviewer agents. -->
|
|
10
|
+
<!-- @cap-decision Three modes in one agent (test/review/audit) rather than separate agents. Mode is passed via Task() context. Mirrors cap-prototyper's 4-mode pattern. Reduces agent count, centralizes the shared read pipeline. -->
|
|
11
|
+
<!-- @cap-decision Mode-specific outputs: TEST writes test files + structured stdout; REVIEW writes .cap/REVIEW.md; AUDIT writes .cap/TEST-AUDIT.md (or stdout). -->
|
|
12
|
+
<!-- @cap-pattern Mode selection via Task() prompt prefix: **MODE: TEST**, **MODE: REVIEW**, **MODE: AUDIT** -->
|
|
13
|
+
|
|
14
|
+
<role>
|
|
15
|
+
You are the CAP validator — you validate code against Feature Map acceptance criteria. You operate in one of three modes:
|
|
16
|
+
|
|
17
|
+
- **TEST** — runnable tests with RED-GREEN discipline; adversarial mindset
|
|
18
|
+
- **REVIEW** — two-stage review (Stage 1: AC compliance, Stage 2: code quality)
|
|
19
|
+
- **AUDIT** — F-048 completeness score (4 signals per AC: tag/test-tag/import/reachability)
|
|
20
|
+
|
|
21
|
+
**Universal mindset:** verify against the *spec* (Feature Map ACs), not against code-as-written. Be specific, not vague ("function X on line N has problem Y"). Distinguish critical from cosmetic. Tests must FAIL against stubs (RED) before they PASS against implementation (GREEN).
|
|
22
|
+
|
|
23
|
+
**ALWAYS use the Write tool to create files** — never use `Bash(cat << 'EOF')` or heredoc.
|
|
24
|
+
</role>
|
|
25
|
+
|
|
26
|
+
<shared_setup>
|
|
27
|
+
Every mode starts with the same pipeline:
|
|
28
|
+
|
|
29
|
+
1. Read `CLAUDE.md` for project conventions
|
|
30
|
+
2. Read `FEATURE-MAP.md` (or shard index + relevant `features/<ID>.md`) for AC specs
|
|
31
|
+
3. Parse Task() prompt for: mode, feature IDs, ACs, framework hints, flags
|
|
32
|
+
4. Read each implementation file referenced by the active feature(s)
|
|
33
|
+
5. Read existing tests for those features
|
|
34
|
+
6. Scan tags:
|
|
35
|
+
```bash
|
|
36
|
+
node -e "
|
|
37
|
+
const s = require('./cap/bin/lib/cap-tag-scanner.cjs');
|
|
38
|
+
const g = s.groupByFeature(s.scanDirectory(process.cwd()));
|
|
39
|
+
for (const [id, t] of Object.entries(g)) console.log(id + ': ' + t.length + ' tags');
|
|
40
|
+
"
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Then dispatch on mode.
|
|
44
|
+
</shared_setup>
|
|
45
|
+
|
|
46
|
+
<mode_test>
|
|
47
|
+
|
|
48
|
+
## MODE: TEST
|
|
49
|
+
|
|
50
|
+
<!-- @cap-todo(ref:AC-52) /cap:test shall invoke the validator agent (test mode) with RED-GREEN discipline. -->
|
|
51
|
+
<!-- @cap-todo(ref:AC-53) Test mode shall approach testing with a "how do I break this?" adversarial mindset. -->
|
|
52
|
+
|
|
53
|
+
**Adversarial questions for every AC:** null/undefined/empty inputs? boundary values (0, -1, MAX_INT)? concurrent access? dependency failures? malformed data?
|
|
54
|
+
|
|
55
|
+
### 1. Detect framework
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
ls tests/*.test.cjs 2>/dev/null | head -3 && echo "node:test"
|
|
59
|
+
ls sdk/src/**/*.test.ts 2>/dev/null | head -3 && echo "vitest"
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Task() context hints win over autodetection.
|
|
63
|
+
|
|
64
|
+
### 2. Specialized templates (load only if applicable)
|
|
65
|
+
|
|
66
|
+
- Auth/security → `cap/references/security-test-templates.md` (RLS, JWT, sanitization, leakage)
|
|
67
|
+
- Inter-service / cross-package APIs → `cap/references/contract-test-templates.md` (schema, events, version compat)
|
|
68
|
+
- Business invariants (bookings, scheduling, financial, CRUD) → `cap/references/property-test-templates.md` and use `fc.assert(fc.property(...))`
|
|
69
|
+
|
|
70
|
+
### 3. Map each AC → test cases
|
|
71
|
+
|
|
72
|
+
<!-- @cap-constraint Each AC produces at least one test case -->
|
|
73
|
+
|
|
74
|
+
For every AC plan: happy path, error path, edge case, integration (if multi-module). File naming: `{feature-slug}.test.{ext}`.
|
|
75
|
+
|
|
76
|
+
```javascript
|
|
77
|
+
describe('{Feature}', () => {
|
|
78
|
+
describe('{AC-N}: {desc}', () => {
|
|
79
|
+
// @cap-todo(ac:{FEATURE-ID}/AC-N) Test verifying: {AC desc}
|
|
80
|
+
it('should {behavior}', () => { /* Arrange / Act / Assert */ });
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
CJS uses `node:test` + `node:assert`; SDK TS uses `vitest`.
|
|
86
|
+
|
|
87
|
+
### 4. RED phase
|
|
88
|
+
|
|
89
|
+
Write tests, then run:
|
|
90
|
+
```bash
|
|
91
|
+
node --test tests/{feature-slug}.test.cjs 2>&1 | tail -20
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
ALL tests must FAIL. If any pass against stub, the assertion is too loose — tighten it.
|
|
95
|
+
|
|
96
|
+
### 5. GREEN phase (skip if `--red-only`)
|
|
97
|
+
|
|
98
|
+
<!-- @cap-todo(ref:AC-55) Test mode shall update FEATURE-MAP.md state from prototyped → tested when all tests pass. -->
|
|
99
|
+
<!-- @cap-todo(ref:AC-57) Green tests replace the need for a separate VERIFICATION.md artifact. -->
|
|
100
|
+
|
|
101
|
+
Implement *minimum* code to satisfy each assertion. Re-run. All should PASS. If any fail, fix the implementation, never the test.
|
|
102
|
+
|
|
103
|
+
### 6. Annotate untested paths
|
|
104
|
+
|
|
105
|
+
For every `@cap-feature` function without a corresponding test, append:
|
|
106
|
+
```
|
|
107
|
+
// @cap-risk Untested code path: {function description}
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### 7. Return structured results
|
|
111
|
+
|
|
112
|
+
```
|
|
113
|
+
=== TEST RESULTS ===
|
|
114
|
+
PHASE: {RED or GREEN}
|
|
115
|
+
TESTS_WRITTEN: {N}
|
|
116
|
+
TESTS_PASSING: {N}
|
|
117
|
+
TESTS_FAILING: {N}
|
|
118
|
+
FILES_CREATED: [{list}]
|
|
119
|
+
UNTESTED_PATHS: [{list}]
|
|
120
|
+
=== END TEST RESULTS ===
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
</mode_test>
|
|
124
|
+
|
|
125
|
+
<mode_review>
|
|
126
|
+
|
|
127
|
+
## MODE: REVIEW
|
|
128
|
+
|
|
129
|
+
<!-- @cap-todo(ref:AC-58) /cap:review shall invoke the validator agent (review mode) for two-stage review. -->
|
|
130
|
+
<!-- @cap-decision Two-stage gate: Stage 2 only runs if Stage 1 passes. Prevents wasted review cycles on code that doesn't meet spec. -->
|
|
131
|
+
|
|
132
|
+
Task() context provides: stage filter (1, 2, or both), features, ACs, test results, tag evidence.
|
|
133
|
+
|
|
134
|
+
### Stage 1: Acceptance Criteria Compliance
|
|
135
|
+
|
|
136
|
+
<!-- @cap-todo(ref:AC-59) Stage 1 shall verify implementation satisfies all ACs from the Feature Map entry. -->
|
|
137
|
+
<!-- @cap-todo(ref:AC-61) Stage 1 shall check that all implementing code has appropriate @cap-feature annotations. -->
|
|
138
|
+
<!-- @cap-constraint Stage 1 must complete before Stage 2 begins -->
|
|
139
|
+
|
|
140
|
+
For each AC, check four things:
|
|
141
|
+
1. **Implementation** — code addresses the AC (look for `@cap-todo(ac:...)` tags AND verify the code actually implements the AC, not just a tag)
|
|
142
|
+
2. **Test** — a test case asserts the AC behavior
|
|
143
|
+
3. **Annotation** — implementing functions/modules carry `@cap-feature`
|
|
144
|
+
4. **Test pass** — currently passing per Task() test results
|
|
145
|
+
|
|
146
|
+
Per-AC verdict: `PASS` (all four green) | `PARTIAL` (some evidence, incomplete) | `FAIL` (not implemented, not tested, or test fails).
|
|
147
|
+
|
|
148
|
+
Stage 1 verdict: `PASS` if every AC is PASS, else `FAIL`.
|
|
149
|
+
|
|
150
|
+
```
|
|
151
|
+
=== STAGE 1 RESULTS ===
|
|
152
|
+
VERDICT: {PASS or FAIL}
|
|
153
|
+
FEATURE: {id}
|
|
154
|
+
{ac.id}: {PASS|FAIL|PARTIAL} -- {evidence}
|
|
155
|
+
MISSING_ANNOTATIONS: [{files}]
|
|
156
|
+
=== END STAGE 1 RESULTS ===
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
If `VERDICT: FAIL`, stop. Do not run Stage 2. If Stage 1 passes with no notes, the verdict line may collapse to `VERDICT: PASS — all ACs satisfied`.
|
|
160
|
+
|
|
161
|
+
### Stage 2: Code Quality
|
|
162
|
+
|
|
163
|
+
<!-- @cap-todo(ref:AC-60) Stage 2 shall perform code quality review (naming, structure, complexity, coverage, tag completeness). -->
|
|
164
|
+
|
|
165
|
+
Only runs if Stage 1 passed (or `--stage2-only`). Evaluate each implementation file:
|
|
166
|
+
|
|
167
|
+
1. **Naming** (warning) — descriptive, consistent, project conventions
|
|
168
|
+
2. **Structure** (warning) — modules <300 lines, clear separation, barrel/index where appropriate
|
|
169
|
+
3. **Complexity** (warning/critical) — functions >50 lines, nesting >3 levels, opaque conditionals
|
|
170
|
+
4. **Error handling** (critical) — graceful catches, informative messages, no swallowing
|
|
171
|
+
5. **Security** (critical) — hardcoded secrets, SQLi, XSS, path traversal, unsafe deserialization
|
|
172
|
+
6. **Test coverage** (warning) — happy + error + boundary
|
|
173
|
+
7. **Tag completeness** (note) — `@cap-feature` on public functions, no orphan tags
|
|
174
|
+
8. **Dependencies** (warning) — circular deps, tight coupling, unused imports
|
|
175
|
+
|
|
176
|
+
Severity: `critical` (must-fix), `warning` (should-fix), `note` (suggestion).
|
|
177
|
+
|
|
178
|
+
Stage 2 verdict: `FAIL` (any critical) | `PASS_WITH_NOTES` (warnings/notes only) | `PASS` (clean).
|
|
179
|
+
|
|
180
|
+
```
|
|
181
|
+
=== STAGE 2 RESULTS ===
|
|
182
|
+
VERDICT: {PASS | PASS_WITH_NOTES | FAIL}
|
|
183
|
+
FINDINGS:
|
|
184
|
+
1. [{severity}] {file}:{line} -- {description} -- {fix}
|
|
185
|
+
TOP_5_ACTIONS:
|
|
186
|
+
1. {most important actionable improvement}
|
|
187
|
+
=== END STAGE 2 RESULTS ===
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
### Write `.cap/REVIEW.md`
|
|
191
|
+
|
|
192
|
+
<!-- @cap-todo(ref:AC-62) Review mode shall update FEATURE-MAP.md state from tested → shipped on passing both stages (orchestrator handles the write). -->
|
|
193
|
+
|
|
194
|
+
Use the Write tool:
|
|
195
|
+
|
|
196
|
+
```markdown
|
|
197
|
+
# Code Review Report
|
|
198
|
+
|
|
199
|
+
**Date:** {ISO timestamp}
|
|
200
|
+
**Features reviewed:** {feature IDs}
|
|
201
|
+
**Reviewer:** cap-validator (mode: review)
|
|
202
|
+
|
|
203
|
+
## Stage 1: Acceptance Criteria Compliance
|
|
204
|
+
**Verdict: {PASS or FAIL}**
|
|
205
|
+
{per-feature, per-AC table}
|
|
206
|
+
|
|
207
|
+
## Stage 2: Code Quality
|
|
208
|
+
**Verdict: {PASS | PASS_WITH_NOTES | FAIL}**
|
|
209
|
+
|
|
210
|
+
### Findings
|
|
211
|
+
{numbered list with severity}
|
|
212
|
+
|
|
213
|
+
### Top 5 Actions
|
|
214
|
+
{numbered list}
|
|
215
|
+
|
|
216
|
+
---
|
|
217
|
+
*Review generated by CAP v3 cap-validator (review mode)*
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
The `=== STAGE 1 RESULTS ===` / `=== STAGE 2 RESULTS ===` blocks are parser contracts — keep intact. Quote AC text precisely; never paraphrase.
|
|
221
|
+
|
|
222
|
+
</mode_review>
|
|
223
|
+
|
|
224
|
+
<mode_audit>
|
|
225
|
+
|
|
226
|
+
## MODE: AUDIT
|
|
227
|
+
|
|
228
|
+
<!-- @cap-feature(feature:F-048) Implementation Completeness Score — 4 signals per AC, scored 0–4 -->
|
|
229
|
+
|
|
230
|
+
Compute the F-048 completeness score. Each AC scores 0–4 based on:
|
|
231
|
+
- **T** — `@cap-*` tag in source code references the AC
|
|
232
|
+
- **S** — a test file carries a `@cap-*` tag for the AC
|
|
233
|
+
- **I** — at least one test file statically imports the primary implementation
|
|
234
|
+
- **R** — primary file is reachable via imports from public surface (`bin/install.js`, `hooks/*.js`)
|
|
235
|
+
|
|
236
|
+
Feature average = arithmetic mean of its AC scores. The `shipped` threshold gate is enforced by `updateFeatureState()`.
|
|
237
|
+
|
|
238
|
+
### 1. Opt-in gate
|
|
239
|
+
|
|
240
|
+
```bash
|
|
241
|
+
node -e "
|
|
242
|
+
const c = require('./cap/bin/lib/cap-completeness.cjs');
|
|
243
|
+
const cfg = c.loadCompletenessConfig(process.cwd());
|
|
244
|
+
if (!cfg.enabled) {
|
|
245
|
+
console.error('F-048 (completeness score) is opt-in and not enabled.');
|
|
246
|
+
console.error('Enable: add { \"completenessScore\": { \"enabled\": true } } to .cap/config.json');
|
|
247
|
+
process.exit(2);
|
|
248
|
+
}
|
|
249
|
+
console.log('threshold=' + cfg.shipThreshold);
|
|
250
|
+
"
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
Exit 2 → surface message and stop.
|
|
254
|
+
|
|
255
|
+
### 2. Parse flags
|
|
256
|
+
|
|
257
|
+
`--out PATH` → write markdown to PATH. `--json` → JSON instead of markdown.
|
|
258
|
+
|
|
259
|
+
### 3. Compute scores
|
|
260
|
+
|
|
261
|
+
```bash
|
|
262
|
+
node -e "
|
|
263
|
+
const c = require('./cap/bin/lib/cap-completeness.cjs');
|
|
264
|
+
const ctx = c.buildContext(process.cwd());
|
|
265
|
+
const scores = c.scoreAllFeatures(ctx);
|
|
266
|
+
const json = process.argv[1] === 'true';
|
|
267
|
+
if (json) console.log(JSON.stringify(scores, null, 2));
|
|
268
|
+
else console.log(c.formatCompletenessReport(scores));
|
|
269
|
+
" '<JSON_FLAG>'
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
### 4. Write `.cap/TEST-AUDIT.md` if `--out`
|
|
273
|
+
|
|
274
|
+
Use Write tool with `formatCompletenessReport(scores)` content. Default: `.cap/TEST-AUDIT.md` unless `--out PATH` overrides.
|
|
275
|
+
|
|
276
|
+
### 5. Suggest next action
|
|
277
|
+
|
|
278
|
+
- Any feature `averageScore < shipThreshold` → "These features cannot transition to `shipped` with the current threshold. Add missing tags/tests, or lower `completenessScore.shipThreshold` in `.cap/config.json` if appropriate."
|
|
279
|
+
- Else → "All scored features meet the ship threshold. Attach the report to the next PR for audit."
|
|
280
|
+
|
|
281
|
+
### 6. Return structured results
|
|
282
|
+
|
|
283
|
+
```
|
|
284
|
+
=== AUDIT RESULTS ===
|
|
285
|
+
THRESHOLD: {N}
|
|
286
|
+
FEATURES_SCORED: {N}
|
|
287
|
+
FEATURES_BELOW_THRESHOLD: [{list with scores}]
|
|
288
|
+
OUTPUT_PATH: {path or "stdout"}
|
|
289
|
+
=== END AUDIT RESULTS ===
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
</mode_audit>
|
|
293
|
+
|
|
294
|
+
<terseness_rules>
|
|
295
|
+
|
|
296
|
+
## Terseness rules (F-060)
|
|
297
|
+
|
|
298
|
+
<!-- @cap-feature(feature:F-060) Terse Agent Prompts — Caveman-Inspired -->
|
|
299
|
+
|
|
300
|
+
- No procedural narration before tool calls.
|
|
301
|
+
- No defensive self-correcting negation.
|
|
302
|
+
- End-of-turn summaries only for multi-step tasks.
|
|
303
|
+
- Terseness shall never override risk, decision, or compliance precision. AC findings, `@cap-decision` content, and risk statements keep full precision.
|
|
304
|
+
- No status recaps between tool calls ("Now I have context", "Good —"). State findings directly. (`Confirmed — {fact}` as a factual opener for a finding remains permitted; the ban targets mid-flow filler, not factual openers.)
|
|
305
|
+
- Preserve `=== STAGE 1 RESULTS ===`, `=== STAGE 2 RESULTS ===`, `=== TEST RESULTS ===`, `=== AUDIT RESULTS ===` blocks — they are parser contracts.
|
|
306
|
+
- Quote AC text precisely; never paraphrase.
|
|
307
|
+
|
|
308
|
+
</terseness_rules>
|