@izkac/forgekit 0.3.12 → 0.3.14
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/bin/forge.mjs +119 -107
- package/bin/forgekit.mjs +83 -83
- package/bin/review.mjs +81 -81
- package/package.json +2 -1
- package/scripts/prepack.mjs +78 -78
- package/scripts/run-tests.mjs +50 -50
- package/src/adr.mjs +236 -236
- package/src/adr.test.mjs +170 -170
- package/src/change.mjs +327 -234
- package/src/change.test.mjs +145 -83
- package/src/cleanup-sessions.mjs +84 -84
- package/src/config.mjs +103 -103
- package/src/defer.mjs +75 -75
- package/src/doctor.mjs +350 -341
- package/src/doctor.test.mjs +114 -114
- package/src/fleet.test.mjs +50 -0
- package/src/init.mjs +680 -621
- package/src/install.mjs +815 -815
- package/src/install.test.mjs +180 -180
- package/src/integrity-check.mjs +60 -60
- package/src/integrity.mjs +688 -682
- package/src/integrity.test.mjs +612 -566
- package/src/lib/fleet.mjs +61 -4
- package/src/lib.mjs +160 -143
- package/src/lib.test.mjs +128 -0
- package/src/models.defaults.json +41 -41
- package/src/new-session.mjs +99 -99
- package/src/openspec-overlays/README.md +19 -19
- package/src/openspec-overlays/openspec-apply-change-footer.md +14 -14
- package/src/openspec-overlays/opsx-apply-completion-step.md +1 -1
- package/src/openspec-overlays/opsx-apply-implement-step.md +11 -11
- package/src/paths.mjs +92 -92
- package/src/plan-engine.mjs +321 -278
- package/src/plan-engine.test.mjs +447 -283
- package/src/preferences.defaults.json +78 -78
- package/src/preferences.mjs +438 -438
- package/src/preferences.test.mjs +174 -174
- package/src/record-evidence.mjs +204 -204
- package/src/repo-root.mjs +33 -0
- package/src/resolve-model.mjs +312 -312
- package/src/resolve-model.test.mjs +194 -194
- package/src/review/cli.test.mjs +117 -117
- package/src/review/export.mjs +172 -172
- package/src/review/export.test.mjs +197 -197
- package/src/review/fixtures/valid-review.json +42 -42
- package/src/review/lib.mjs +894 -894
- package/src/review/lib.test.mjs +266 -266
- package/src/review/schema.json +196 -196
- package/src/review/signals.test.mjs +62 -62
- package/src/score-cli.mjs +68 -68
- package/src/score.mjs +568 -568
- package/src/score.test.mjs +366 -366
- package/src/session-reminder.mjs +207 -207
- package/src/session-status.mjs +70 -70
- package/src/set-models.mjs +186 -186
- package/src/set-phase.mjs +205 -205
- package/src/set-prefs.mjs +294 -294
- package/src/specs-sync.mjs +232 -0
- package/src/specs-sync.test.mjs +114 -0
- package/src/spine.mjs +93 -93
- package/src/triage-prompt.mjs +175 -175
- package/src/triage-prompt.test.mjs +50 -50
- package/src/vendor-openspec-overlays.mjs +176 -176
- package/src/vendor-openspec-overlays.test.mjs +62 -62
- package/vendor/skills/archive-to-adr/SKILL.md +149 -149
- package/vendor/skills/forge/SKILL.md +136 -136
- package/vendor/skills/forge/docs/forge.md +650 -647
- package/vendor/skills/forge/phases/brainstorm.md +23 -23
- package/vendor/skills/forge/phases/finish.md +90 -87
- package/vendor/skills/forge/phases/implement.md +77 -77
- package/vendor/skills/forge/phases/plan-openspec.md +60 -60
- package/vendor/skills/forge/phases/plan-specs.md +163 -117
- package/vendor/skills/forge/phases/review.md +25 -25
- package/vendor/skills/forge/phases/verify.md +124 -124
- package/vendor/skills/forge/references/forge-layout.md +85 -85
- package/vendor/skills/forge/references/pace.md +115 -115
- package/vendor/skills/forge/references/plan-routing.md +52 -51
- package/vendor/skills/forge/references/runtime-integrity.md +232 -232
- package/vendor/skills/forge/references/substantial-work.md +37 -37
- package/vendor/skills/forge/references/test-evidence.md +30 -30
- package/vendor/skills/forge/references/test-strategy.md +68 -68
- package/vendor/skills/forge/skills/subagent-driven-development/SKILL.md +87 -87
- package/vendor/skills/forge/subagents/final-reviewer-prompt.md +56 -56
- package/vendor/skills/forge/subagents/implementer-prompt.md +38 -38
- package/vendor/skills/git-resolve-adr-conflict/SKILL.md +132 -132
- package/vendor/skills/thorough-code-review/SKILL.md +290 -290
- package/vendor/skills/thorough-code-review/examples.md +133 -133
- package/vendor/skills/thorough-code-review/reference/accepted-risks.md +26 -26
- package/vendor/skills/thorough-code-review/reference/lenses.md +96 -96
- package/vendor/skills/thorough-code-review/reference/phase1-scout.md +62 -62
- package/vendor/skills/thorough-code-review/reference/phase2-skeptic.md +105 -105
- package/vendor/skills/thorough-code-review/reference/report-schema.json +222 -222
- package/vendor/skills/thorough-code-review/reference/report-template.md +115 -115
- package/vendor/skills/thorough-code-review/reference/severity-rubric.md +49 -49
- package/vendor/skills/thorough-code-review/reference/signals-preflight.md +55 -55
- package/vendor/templates/adr/README.md +7 -7
- package/vendor/templates/adr/decisions.md +141 -141
- package/vendor/templates/adr/hooks/check-pending-adrs.mjs +74 -74
- package/vendor/templates/adr/hooks/check-pending-adrs.sh +3 -3
- package/vendor/templates/adr/hooks/openspec-archive-agent-message.mjs +52 -52
- package/vendor/templates/adr/hooks/openspec-archive-agent-message.sh +3 -3
- package/vendor/templates/project/claude/commands/forge-apply.md +75 -75
- package/vendor/templates/project/claude/commands/forge-brainstorm.md +7 -7
- package/vendor/templates/project/claude/commands/forge-build.md +17 -17
- package/vendor/templates/project/claude/commands/forge-plan.md +12 -12
- package/vendor/templates/project/claude/commands/forge-skip.md +14 -14
- package/vendor/templates/project/claude/commands/forge-status.md +16 -16
- package/vendor/templates/project/claude/commands/forge.md +16 -16
- package/vendor/templates/project/claude/hooks/forge-prompt-hook.mjs +73 -73
- package/vendor/templates/project/claude/hooks/forge-session-start.mjs +19 -19
- package/vendor/templates/project/claude/hooks/forge-triage-hook.mjs +77 -77
- package/vendor/templates/project/cursor/commands/forge-apply.md +75 -75
- package/vendor/templates/project/cursor/commands/forge-brainstorm.md +10 -10
- package/vendor/templates/project/cursor/commands/forge-build.md +17 -17
- package/vendor/templates/project/cursor/commands/forge-plan.md +15 -15
- package/vendor/templates/project/cursor/commands/forge-skip.md +14 -14
- package/vendor/templates/project/cursor/commands/forge-status.md +16 -16
- package/vendor/templates/project/cursor/commands/forge.md +16 -16
- package/vendor/templates/project/cursor/hooks/forge-session-start.mjs +30 -30
- package/vendor/templates/project/cursor/hooks/forge-session-start.sh +3 -3
|
@@ -1,115 +1,115 @@
|
|
|
1
|
-
# Code review report template
|
|
2
|
-
|
|
3
|
-
**Generated, not hand-authored.** The JSON sidecar is the single source of truth; the paired markdown is produced from it by `review render --file <json>`. This file documents the structure the renderer emits — edit the JSON (and the renderer in the review CLI `lib.mjs`), never the `.md` directly.
|
|
4
|
-
|
|
5
|
-
Path: `.reviews/<timestamp>-<scope-slug>-review.md` (or `-reverify.md` for fix verification), per [report-schema.json](report-schema.json).
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
```markdown
|
|
10
|
-
# Code review — {SCOPE_DESCRIPTION}
|
|
11
|
-
|
|
12
|
-
**Review ID:** {REVIEW_ID}
|
|
13
|
-
**Kind:** review | reverify
|
|
14
|
-
**Created:** {ISO_TIMESTAMP}
|
|
15
|
-
**Scope:** {SCOPE_TYPE} — {SCOPE_DETAIL}
|
|
16
|
-
**Lenses:** {LENS_LIST}
|
|
17
|
-
**Parent report:** {PARENT_REVIEW_ID or —}
|
|
18
|
-
|
|
19
|
-
## Executive summary
|
|
20
|
-
|
|
21
|
-
{TWO_TO_FOUR_SENTENCES: what was reviewed, verdict counts, overall risk posture.}
|
|
22
|
-
|
|
23
|
-
### Verdict counts
|
|
24
|
-
|
|
25
|
-
| Verdict | Count |
|
|
26
|
-
| ------- | ----- |
|
|
27
|
-
| Confirmed | |
|
|
28
|
-
| Downgraded | |
|
|
29
|
-
| False positive | |
|
|
30
|
-
| Needs decision | |
|
|
31
|
-
| Resolved | |
|
|
32
|
-
| Still open | |
|
|
33
|
-
| Partially fixed | |
|
|
34
|
-
| Regressed | |
|
|
35
|
-
|
|
36
|
-
### Top actions
|
|
37
|
-
|
|
38
|
-
1. {Highest priority confirmed/critical item}
|
|
39
|
-
2. {Second}
|
|
40
|
-
3. {Third}
|
|
41
|
-
|
|
42
|
-
---
|
|
43
|
-
|
|
44
|
-
## Critical
|
|
45
|
-
|
|
46
|
-
### {F-001}: {Short title}
|
|
47
|
-
|
|
48
|
-
- **Lens:** security
|
|
49
|
-
- **Location:** `path:line`
|
|
50
|
-
- **Severity:** critical {or `minor (was important)` when downgraded}
|
|
51
|
-
- **Verdict:** confirmed
|
|
52
|
-
- **Claim:** ...
|
|
53
|
-
- **Reason:** ...
|
|
54
|
-
- **Second skeptic:** {only for dangerous-quadrant findings} verdict — reason
|
|
55
|
-
|
|
56
|
-
{Repeat per finding}
|
|
57
|
-
|
|
58
|
-
---
|
|
59
|
-
|
|
60
|
-
## Important
|
|
61
|
-
|
|
62
|
-
{Same structure}
|
|
63
|
-
|
|
64
|
-
---
|
|
65
|
-
|
|
66
|
-
## Minor
|
|
67
|
-
|
|
68
|
-
{Same structure}
|
|
69
|
-
|
|
70
|
-
---
|
|
71
|
-
|
|
72
|
-
## Needs decision
|
|
73
|
-
|
|
74
|
-
{Architectural items with `needs_decision` verdict — link ADRs if applicable}
|
|
75
|
-
|
|
76
|
-
---
|
|
77
|
-
|
|
78
|
-
## Coverage ledger
|
|
79
|
-
|
|
80
|
-
{From the recall pass — files reviewed/skipped and active lenses that produced
|
|
81
|
-
no findings, each with a one-line reason. Omitted when no `coverage` object.}
|
|
82
|
-
|
|
83
|
-
---
|
|
84
|
-
|
|
85
|
-
## Appendix A — Rejected findings (false positives)
|
|
86
|
-
|
|
87
|
-
### {F-00X}: {Short title}
|
|
88
|
-
|
|
89
|
-
- **Claim:** ...
|
|
90
|
-
- **Why rejected:** ...
|
|
91
|
-
|
|
92
|
-
---
|
|
93
|
-
|
|
94
|
-
## Appendix B — Dedupe pre-flight
|
|
95
|
-
|
|
96
|
-
{If smells lens ran; else omit section}
|
|
97
|
-
|
|
98
|
-
| ID | Location | Claim |
|
|
99
|
-
| -- | -------- | ----- |
|
|
100
|
-
| dup-001 | ... | ... |
|
|
101
|
-
|
|
102
|
-
---
|
|
103
|
-
|
|
104
|
-
## Appendix C — Method
|
|
105
|
-
|
|
106
|
-
- Phase 1: Scout pass ({N} tentative findings)
|
|
107
|
-
- Phase 2: Adversarial skeptic verification (severity-routed, budgeted)
|
|
108
|
-
- {If reverify: Re-verification against parent report {PARENT_ID}}
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
## JSON sidecar
|
|
112
|
-
|
|
113
|
-
Author the `.json` (the source of truth), then `review render` to (re)generate this markdown and `review export` to validate before handing off in CI contexts.
|
|
114
|
-
|
|
115
|
-
Main report body includes only `confirmed` and `downgraded` findings (initial review) or `still_open`, `partially_fixed`, `regressed` (reverify). Render places `false_positive` in Appendix A automatically.
|
|
1
|
+
# Code review report template
|
|
2
|
+
|
|
3
|
+
**Generated, not hand-authored.** The JSON sidecar is the single source of truth; the paired markdown is produced from it by `review render --file <json>`. This file documents the structure the renderer emits — edit the JSON (and the renderer in the review CLI `lib.mjs`), never the `.md` directly.
|
|
4
|
+
|
|
5
|
+
Path: `.reviews/<timestamp>-<scope-slug>-review.md` (or `-reverify.md` for fix verification), per [report-schema.json](report-schema.json).
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
```markdown
|
|
10
|
+
# Code review — {SCOPE_DESCRIPTION}
|
|
11
|
+
|
|
12
|
+
**Review ID:** {REVIEW_ID}
|
|
13
|
+
**Kind:** review | reverify
|
|
14
|
+
**Created:** {ISO_TIMESTAMP}
|
|
15
|
+
**Scope:** {SCOPE_TYPE} — {SCOPE_DETAIL}
|
|
16
|
+
**Lenses:** {LENS_LIST}
|
|
17
|
+
**Parent report:** {PARENT_REVIEW_ID or —}
|
|
18
|
+
|
|
19
|
+
## Executive summary
|
|
20
|
+
|
|
21
|
+
{TWO_TO_FOUR_SENTENCES: what was reviewed, verdict counts, overall risk posture.}
|
|
22
|
+
|
|
23
|
+
### Verdict counts
|
|
24
|
+
|
|
25
|
+
| Verdict | Count |
|
|
26
|
+
| ------- | ----- |
|
|
27
|
+
| Confirmed | |
|
|
28
|
+
| Downgraded | |
|
|
29
|
+
| False positive | |
|
|
30
|
+
| Needs decision | |
|
|
31
|
+
| Resolved | |
|
|
32
|
+
| Still open | |
|
|
33
|
+
| Partially fixed | |
|
|
34
|
+
| Regressed | |
|
|
35
|
+
|
|
36
|
+
### Top actions
|
|
37
|
+
|
|
38
|
+
1. {Highest priority confirmed/critical item}
|
|
39
|
+
2. {Second}
|
|
40
|
+
3. {Third}
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Critical
|
|
45
|
+
|
|
46
|
+
### {F-001}: {Short title}
|
|
47
|
+
|
|
48
|
+
- **Lens:** security
|
|
49
|
+
- **Location:** `path:line`
|
|
50
|
+
- **Severity:** critical {or `minor (was important)` when downgraded}
|
|
51
|
+
- **Verdict:** confirmed
|
|
52
|
+
- **Claim:** ...
|
|
53
|
+
- **Reason:** ...
|
|
54
|
+
- **Second skeptic:** {only for dangerous-quadrant findings} verdict — reason
|
|
55
|
+
|
|
56
|
+
{Repeat per finding}
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## Important
|
|
61
|
+
|
|
62
|
+
{Same structure}
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## Minor
|
|
67
|
+
|
|
68
|
+
{Same structure}
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## Needs decision
|
|
73
|
+
|
|
74
|
+
{Architectural items with `needs_decision` verdict — link ADRs if applicable}
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Coverage ledger
|
|
79
|
+
|
|
80
|
+
{From the recall pass — files reviewed/skipped and active lenses that produced
|
|
81
|
+
no findings, each with a one-line reason. Omitted when no `coverage` object.}
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## Appendix A — Rejected findings (false positives)
|
|
86
|
+
|
|
87
|
+
### {F-00X}: {Short title}
|
|
88
|
+
|
|
89
|
+
- **Claim:** ...
|
|
90
|
+
- **Why rejected:** ...
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## Appendix B — Dedupe pre-flight
|
|
95
|
+
|
|
96
|
+
{If smells lens ran; else omit section}
|
|
97
|
+
|
|
98
|
+
| ID | Location | Claim |
|
|
99
|
+
| -- | -------- | ----- |
|
|
100
|
+
| dup-001 | ... | ... |
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## Appendix C — Method
|
|
105
|
+
|
|
106
|
+
- Phase 1: Scout pass ({N} tentative findings)
|
|
107
|
+
- Phase 2: Adversarial skeptic verification (severity-routed, budgeted)
|
|
108
|
+
- {If reverify: Re-verification against parent report {PARENT_ID}}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## JSON sidecar
|
|
112
|
+
|
|
113
|
+
Author the `.json` (the source of truth), then `review render` to (re)generate this markdown and `review export` to validate before handing off in CI contexts.
|
|
114
|
+
|
|
115
|
+
Main report body includes only `confirmed` and `downgraded` findings (initial review) or `still_open`, `partially_fixed`, `regressed` (reverify). Render places `false_positive` in Appendix A automatically.
|
|
@@ -1,49 +1,49 @@
|
|
|
1
|
-
# Severity rubric
|
|
2
|
-
|
|
3
|
-
Calibrate severity before Phase 2. Skeptics may **downgrade** with evidence; upgrade only with new evidence.
|
|
4
|
-
|
|
5
|
-
## Critical
|
|
6
|
-
|
|
7
|
-
Must fix before merge or production. Examples:
|
|
8
|
-
|
|
9
|
-
- Exploitable auth bypass or IDOR on production path
|
|
10
|
-
- SQL/command injection with attacker-controlled input reaching sink
|
|
11
|
-
- Secret or credential committed or logged
|
|
12
|
-
- Data loss, corruption, or double-charge on money paths
|
|
13
|
-
- Broken idempotency causing duplicate financial side effects
|
|
14
|
-
|
|
15
|
-
## Important
|
|
16
|
-
|
|
17
|
-
Should fix soon; real defect or serious debt with plausible trigger. Examples:
|
|
18
|
-
|
|
19
|
-
- Logic bug on common edge case (empty input, race under concurrency)
|
|
20
|
-
- Missing authorization on sensitive internal endpoint (if not ADR-accepted)
|
|
21
|
-
- Error responses cached by idempotency middleware
|
|
22
|
-
- Test gap on behaviour-critical path
|
|
23
|
-
- Significant duplication that must stay in sync (rule of three)
|
|
24
|
-
|
|
25
|
-
## Minor
|
|
26
|
-
|
|
27
|
-
Nice to have; low likelihood or defense-in-depth. Examples:
|
|
28
|
-
|
|
29
|
-
- Naming inconsistency
|
|
30
|
-
- Missing progress indicator
|
|
31
|
-
- Unlikely edge case with graceful degradation
|
|
32
|
-
- Style nits not affecting behaviour
|
|
33
|
-
- Pre-existing file size (only flag growth **this change** introduced)
|
|
34
|
-
|
|
35
|
-
## Needs decision (not a severity)
|
|
36
|
-
|
|
37
|
-
Architectural or policy trade-off — route to `NEEDS_DECISION` verdict, not Critical by default.
|
|
38
|
-
|
|
39
|
-
Examples: accepted inter-service trust model per ADR, intentional public surface, documented technical debt.
|
|
40
|
-
|
|
41
|
-
## Project-specific downgrades
|
|
42
|
-
|
|
43
|
-
Before marking Critical/Important on themes covered by the project's accepted-risk digest, read that digest (and ADRs):
|
|
44
|
-
|
|
45
|
-
- Formally accepted trust boundaries (e.g. LAN-only HMAC)
|
|
46
|
-
- Documented intentional broad access patterns
|
|
47
|
-
- Actor/header trust models bound by an upstream session
|
|
48
|
-
|
|
49
|
-
Re-flag only if a listed re-open trigger has fired. See [accepted-risks.md](accepted-risks.md) and [examples/accepted-risks-janus.md](../examples/accepted-risks-janus.md).
|
|
1
|
+
# Severity rubric
|
|
2
|
+
|
|
3
|
+
Calibrate severity before Phase 2. Skeptics may **downgrade** with evidence; upgrade only with new evidence.
|
|
4
|
+
|
|
5
|
+
## Critical
|
|
6
|
+
|
|
7
|
+
Must fix before merge or production. Examples:
|
|
8
|
+
|
|
9
|
+
- Exploitable auth bypass or IDOR on production path
|
|
10
|
+
- SQL/command injection with attacker-controlled input reaching sink
|
|
11
|
+
- Secret or credential committed or logged
|
|
12
|
+
- Data loss, corruption, or double-charge on money paths
|
|
13
|
+
- Broken idempotency causing duplicate financial side effects
|
|
14
|
+
|
|
15
|
+
## Important
|
|
16
|
+
|
|
17
|
+
Should fix soon; real defect or serious debt with plausible trigger. Examples:
|
|
18
|
+
|
|
19
|
+
- Logic bug on common edge case (empty input, race under concurrency)
|
|
20
|
+
- Missing authorization on sensitive internal endpoint (if not ADR-accepted)
|
|
21
|
+
- Error responses cached by idempotency middleware
|
|
22
|
+
- Test gap on behaviour-critical path
|
|
23
|
+
- Significant duplication that must stay in sync (rule of three)
|
|
24
|
+
|
|
25
|
+
## Minor
|
|
26
|
+
|
|
27
|
+
Nice to have; low likelihood or defense-in-depth. Examples:
|
|
28
|
+
|
|
29
|
+
- Naming inconsistency
|
|
30
|
+
- Missing progress indicator
|
|
31
|
+
- Unlikely edge case with graceful degradation
|
|
32
|
+
- Style nits not affecting behaviour
|
|
33
|
+
- Pre-existing file size (only flag growth **this change** introduced)
|
|
34
|
+
|
|
35
|
+
## Needs decision (not a severity)
|
|
36
|
+
|
|
37
|
+
Architectural or policy trade-off — route to `NEEDS_DECISION` verdict, not Critical by default.
|
|
38
|
+
|
|
39
|
+
Examples: accepted inter-service trust model per ADR, intentional public surface, documented technical debt.
|
|
40
|
+
|
|
41
|
+
## Project-specific downgrades
|
|
42
|
+
|
|
43
|
+
Before marking Critical/Important on themes covered by the project's accepted-risk digest, read that digest (and ADRs):
|
|
44
|
+
|
|
45
|
+
- Formally accepted trust boundaries (e.g. LAN-only HMAC)
|
|
46
|
+
- Documented intentional broad access patterns
|
|
47
|
+
- Actor/header trust models bound by an upstream session
|
|
48
|
+
|
|
49
|
+
Re-flag only if a listed re-open trigger has fired. See [accepted-risks.md](accepted-risks.md) and [examples/accepted-risks-janus.md](../examples/accepted-risks-janus.md).
|
|
@@ -1,55 +1,55 @@
|
|
|
1
|
-
# Signals pre-flight
|
|
2
|
-
|
|
3
|
-
Ground the scout in real tool output **before** reading code by hand. Tool-confirmed problems are facts, not guesses — they raise recall on the smells / contracts / tests / errors lenses and cut hallucinated findings.
|
|
4
|
-
|
|
5
|
-
## Steps
|
|
6
|
-
|
|
7
|
-
1. **Plan the commands.** Run the planner for the review scope:
|
|
8
|
-
|
|
9
|
-
```bash
|
|
10
|
-
review signals --type branch # detect changed files vs main
|
|
11
|
-
review signals --type uncommitted # working tree + untracked
|
|
12
|
-
review signals --paths services/persona,services/mercury
|
|
13
|
-
review signals --json # machine-readable
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
It maps the scope to the **workspaces that own it** and prints the exact per-workspace grounding commands (this monorepo has no root typecheck — each package owns its scripts).
|
|
17
|
-
|
|
18
|
-
2. **Run the grounding commands** it lists, e.g.:
|
|
19
|
-
|
|
20
|
-
```bash
|
|
21
|
-
npm run typecheck --workspace=your-workspace
|
|
22
|
-
npm run test --workspace=your-workspace
|
|
23
|
-
npm run lint --workspace=your-workspace
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
Add, when available and relevant to the scope:
|
|
27
|
-
|
|
28
|
-
- `npx knip` (or the repo's dead-code script) — unused exports / dead code → **smells**
|
|
29
|
-
- the service's OpenAPI **route-parity** test — mounted routes vs registry → **contracts**
|
|
30
|
-
|
|
31
|
-
3. **Convert real failures to grounded tentative findings.** A type error, failing test, lint error, or dead export becomes an `F-###` (or `dup-###`) tentative finding with `confidence: high` and the tool output as `evidence`. Do **not** invent findings the tools did not support.
|
|
32
|
-
|
|
33
|
-
4. **Record what ran** in the report JSON `signals` object so the grounding is auditable:
|
|
34
|
-
|
|
35
|
-
```json
|
|
36
|
-
"signals": {
|
|
37
|
-
"tools": [
|
|
38
|
-
{ "name": "typecheck your-workspace", "status": "pass" },
|
|
39
|
-
{ "name": "test your-workspace", "status": "fail", "summary": "1 failing: consent.test.ts" },
|
|
40
|
-
{ "name": "knip", "status": "skipped", "summary": "not in scope" }
|
|
41
|
-
]
|
|
42
|
-
}
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
## Rules
|
|
46
|
-
|
|
47
|
-
- Read-only. The pre-flight never edits code.
|
|
48
|
-
- Scope-bound. Run tools for the **workspaces in scope**, not the whole repo, unless the scope is repo-wide.
|
|
49
|
-
- A passing tool is signal too — it lets the coverage pass mark a lens genuinely exercised.
|
|
50
|
-
- If a tool can't run (missing script, environment), record it `skipped` with a reason rather than omitting it.
|
|
51
|
-
|
|
52
|
-
## Notes
|
|
53
|
-
|
|
54
|
-
- The **dedupe pre-flight** (smells lens) is the same pattern with the `dedupe` skill as the tool; keep emitting `dup-###` findings and the `dedupe_preflight` summary.
|
|
55
|
-
- Grounded findings at `critical`/`important` still go through Phase 2 — a failing test might be an intentional WIP. Below `important`, skip the skeptic: the tool output is the proof; the orchestrator just checks for intentional-WIP signals (commit message, TODO, user context) and records the verdict directly.
|
|
1
|
+
# Signals pre-flight
|
|
2
|
+
|
|
3
|
+
Ground the scout in real tool output **before** reading code by hand. Tool-confirmed problems are facts, not guesses — they raise recall on the smells / contracts / tests / errors lenses and cut hallucinated findings.
|
|
4
|
+
|
|
5
|
+
## Steps
|
|
6
|
+
|
|
7
|
+
1. **Plan the commands.** Run the planner for the review scope:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
review signals --type branch # detect changed files vs main
|
|
11
|
+
review signals --type uncommitted # working tree + untracked
|
|
12
|
+
review signals --paths services/persona,services/mercury
|
|
13
|
+
review signals --json # machine-readable
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
It maps the scope to the **workspaces that own it** and prints the exact per-workspace grounding commands (this monorepo has no root typecheck — each package owns its scripts).
|
|
17
|
+
|
|
18
|
+
2. **Run the grounding commands** it lists, e.g.:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
npm run typecheck --workspace=your-workspace
|
|
22
|
+
npm run test --workspace=your-workspace
|
|
23
|
+
npm run lint --workspace=your-workspace
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Add, when available and relevant to the scope:
|
|
27
|
+
|
|
28
|
+
- `npx knip` (or the repo's dead-code script) — unused exports / dead code → **smells**
|
|
29
|
+
- the service's OpenAPI **route-parity** test — mounted routes vs registry → **contracts**
|
|
30
|
+
|
|
31
|
+
3. **Convert real failures to grounded tentative findings.** A type error, failing test, lint error, or dead export becomes an `F-###` (or `dup-###`) tentative finding with `confidence: high` and the tool output as `evidence`. Do **not** invent findings the tools did not support.
|
|
32
|
+
|
|
33
|
+
4. **Record what ran** in the report JSON `signals` object so the grounding is auditable:
|
|
34
|
+
|
|
35
|
+
```json
|
|
36
|
+
"signals": {
|
|
37
|
+
"tools": [
|
|
38
|
+
{ "name": "typecheck your-workspace", "status": "pass" },
|
|
39
|
+
{ "name": "test your-workspace", "status": "fail", "summary": "1 failing: consent.test.ts" },
|
|
40
|
+
{ "name": "knip", "status": "skipped", "summary": "not in scope" }
|
|
41
|
+
]
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Rules
|
|
46
|
+
|
|
47
|
+
- Read-only. The pre-flight never edits code.
|
|
48
|
+
- Scope-bound. Run tools for the **workspaces in scope**, not the whole repo, unless the scope is repo-wide.
|
|
49
|
+
- A passing tool is signal too — it lets the coverage pass mark a lens genuinely exercised.
|
|
50
|
+
- If a tool can't run (missing script, environment), record it `skipped` with a reason rather than omitting it.
|
|
51
|
+
|
|
52
|
+
## Notes
|
|
53
|
+
|
|
54
|
+
- The **dedupe pre-flight** (smells lens) is the same pattern with the `dedupe` skill as the tool; keep emitting `dup-###` findings and the `dedupe_preflight` summary.
|
|
55
|
+
- Grounded findings at `critical`/`important` still go through Phase 2 — a failing test might be an intentional WIP. Below `important`, skip the skeptic: the tool output is the proof; the orchestrator just checks for intentional-WIP signals (commit message, TODO, user context) and records the verdict directly.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
# Architecture Decision Records
|
|
2
|
-
|
|
3
|
-
Canonical index of ADRs for this project. See [decisions.md]({{DECISIONS_REL}}) for the full convention (when to write, template, cross-links with OpenSpec).
|
|
4
|
-
|
|
5
|
-
| # | Title | Status | Date |
|
|
6
|
-
| ----- | ----- | ------ | ---- |
|
|
7
|
-
| <!-- add rows as ADRs are written: | NNNN | Title | Status | YYYY-MM-DD | --> |
|
|
1
|
+
# Architecture Decision Records
|
|
2
|
+
|
|
3
|
+
Canonical index of ADRs for this project. See [decisions.md]({{DECISIONS_REL}}) for the full convention (when to write, template, cross-links with OpenSpec).
|
|
4
|
+
|
|
5
|
+
| # | Title | Status | Date |
|
|
6
|
+
| ----- | ----- | ------ | ---- |
|
|
7
|
+
| <!-- add rows as ADRs are written: | NNNN | Title | Status | YYYY-MM-DD | --> |
|