@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.
Files changed (120) hide show
  1. package/bin/forge.mjs +119 -107
  2. package/bin/forgekit.mjs +83 -83
  3. package/bin/review.mjs +81 -81
  4. package/package.json +2 -1
  5. package/scripts/prepack.mjs +78 -78
  6. package/scripts/run-tests.mjs +50 -50
  7. package/src/adr.mjs +236 -236
  8. package/src/adr.test.mjs +170 -170
  9. package/src/change.mjs +327 -234
  10. package/src/change.test.mjs +145 -83
  11. package/src/cleanup-sessions.mjs +84 -84
  12. package/src/config.mjs +103 -103
  13. package/src/defer.mjs +75 -75
  14. package/src/doctor.mjs +350 -341
  15. package/src/doctor.test.mjs +114 -114
  16. package/src/fleet.test.mjs +50 -0
  17. package/src/init.mjs +680 -621
  18. package/src/install.mjs +815 -815
  19. package/src/install.test.mjs +180 -180
  20. package/src/integrity-check.mjs +60 -60
  21. package/src/integrity.mjs +688 -682
  22. package/src/integrity.test.mjs +612 -566
  23. package/src/lib/fleet.mjs +61 -4
  24. package/src/lib.mjs +160 -143
  25. package/src/lib.test.mjs +128 -0
  26. package/src/models.defaults.json +41 -41
  27. package/src/new-session.mjs +99 -99
  28. package/src/openspec-overlays/README.md +19 -19
  29. package/src/openspec-overlays/openspec-apply-change-footer.md +14 -14
  30. package/src/openspec-overlays/opsx-apply-completion-step.md +1 -1
  31. package/src/openspec-overlays/opsx-apply-implement-step.md +11 -11
  32. package/src/paths.mjs +92 -92
  33. package/src/plan-engine.mjs +321 -278
  34. package/src/plan-engine.test.mjs +447 -283
  35. package/src/preferences.defaults.json +78 -78
  36. package/src/preferences.mjs +438 -438
  37. package/src/preferences.test.mjs +174 -174
  38. package/src/record-evidence.mjs +204 -204
  39. package/src/repo-root.mjs +33 -0
  40. package/src/resolve-model.mjs +312 -312
  41. package/src/resolve-model.test.mjs +194 -194
  42. package/src/review/cli.test.mjs +117 -117
  43. package/src/review/export.mjs +172 -172
  44. package/src/review/export.test.mjs +197 -197
  45. package/src/review/fixtures/valid-review.json +42 -42
  46. package/src/review/lib.mjs +894 -894
  47. package/src/review/lib.test.mjs +266 -266
  48. package/src/review/schema.json +196 -196
  49. package/src/review/signals.test.mjs +62 -62
  50. package/src/score-cli.mjs +68 -68
  51. package/src/score.mjs +568 -568
  52. package/src/score.test.mjs +366 -366
  53. package/src/session-reminder.mjs +207 -207
  54. package/src/session-status.mjs +70 -70
  55. package/src/set-models.mjs +186 -186
  56. package/src/set-phase.mjs +205 -205
  57. package/src/set-prefs.mjs +294 -294
  58. package/src/specs-sync.mjs +232 -0
  59. package/src/specs-sync.test.mjs +114 -0
  60. package/src/spine.mjs +93 -93
  61. package/src/triage-prompt.mjs +175 -175
  62. package/src/triage-prompt.test.mjs +50 -50
  63. package/src/vendor-openspec-overlays.mjs +176 -176
  64. package/src/vendor-openspec-overlays.test.mjs +62 -62
  65. package/vendor/skills/archive-to-adr/SKILL.md +149 -149
  66. package/vendor/skills/forge/SKILL.md +136 -136
  67. package/vendor/skills/forge/docs/forge.md +650 -647
  68. package/vendor/skills/forge/phases/brainstorm.md +23 -23
  69. package/vendor/skills/forge/phases/finish.md +90 -87
  70. package/vendor/skills/forge/phases/implement.md +77 -77
  71. package/vendor/skills/forge/phases/plan-openspec.md +60 -60
  72. package/vendor/skills/forge/phases/plan-specs.md +163 -117
  73. package/vendor/skills/forge/phases/review.md +25 -25
  74. package/vendor/skills/forge/phases/verify.md +124 -124
  75. package/vendor/skills/forge/references/forge-layout.md +85 -85
  76. package/vendor/skills/forge/references/pace.md +115 -115
  77. package/vendor/skills/forge/references/plan-routing.md +52 -51
  78. package/vendor/skills/forge/references/runtime-integrity.md +232 -232
  79. package/vendor/skills/forge/references/substantial-work.md +37 -37
  80. package/vendor/skills/forge/references/test-evidence.md +30 -30
  81. package/vendor/skills/forge/references/test-strategy.md +68 -68
  82. package/vendor/skills/forge/skills/subagent-driven-development/SKILL.md +87 -87
  83. package/vendor/skills/forge/subagents/final-reviewer-prompt.md +56 -56
  84. package/vendor/skills/forge/subagents/implementer-prompt.md +38 -38
  85. package/vendor/skills/git-resolve-adr-conflict/SKILL.md +132 -132
  86. package/vendor/skills/thorough-code-review/SKILL.md +290 -290
  87. package/vendor/skills/thorough-code-review/examples.md +133 -133
  88. package/vendor/skills/thorough-code-review/reference/accepted-risks.md +26 -26
  89. package/vendor/skills/thorough-code-review/reference/lenses.md +96 -96
  90. package/vendor/skills/thorough-code-review/reference/phase1-scout.md +62 -62
  91. package/vendor/skills/thorough-code-review/reference/phase2-skeptic.md +105 -105
  92. package/vendor/skills/thorough-code-review/reference/report-schema.json +222 -222
  93. package/vendor/skills/thorough-code-review/reference/report-template.md +115 -115
  94. package/vendor/skills/thorough-code-review/reference/severity-rubric.md +49 -49
  95. package/vendor/skills/thorough-code-review/reference/signals-preflight.md +55 -55
  96. package/vendor/templates/adr/README.md +7 -7
  97. package/vendor/templates/adr/decisions.md +141 -141
  98. package/vendor/templates/adr/hooks/check-pending-adrs.mjs +74 -74
  99. package/vendor/templates/adr/hooks/check-pending-adrs.sh +3 -3
  100. package/vendor/templates/adr/hooks/openspec-archive-agent-message.mjs +52 -52
  101. package/vendor/templates/adr/hooks/openspec-archive-agent-message.sh +3 -3
  102. package/vendor/templates/project/claude/commands/forge-apply.md +75 -75
  103. package/vendor/templates/project/claude/commands/forge-brainstorm.md +7 -7
  104. package/vendor/templates/project/claude/commands/forge-build.md +17 -17
  105. package/vendor/templates/project/claude/commands/forge-plan.md +12 -12
  106. package/vendor/templates/project/claude/commands/forge-skip.md +14 -14
  107. package/vendor/templates/project/claude/commands/forge-status.md +16 -16
  108. package/vendor/templates/project/claude/commands/forge.md +16 -16
  109. package/vendor/templates/project/claude/hooks/forge-prompt-hook.mjs +73 -73
  110. package/vendor/templates/project/claude/hooks/forge-session-start.mjs +19 -19
  111. package/vendor/templates/project/claude/hooks/forge-triage-hook.mjs +77 -77
  112. package/vendor/templates/project/cursor/commands/forge-apply.md +75 -75
  113. package/vendor/templates/project/cursor/commands/forge-brainstorm.md +10 -10
  114. package/vendor/templates/project/cursor/commands/forge-build.md +17 -17
  115. package/vendor/templates/project/cursor/commands/forge-plan.md +15 -15
  116. package/vendor/templates/project/cursor/commands/forge-skip.md +14 -14
  117. package/vendor/templates/project/cursor/commands/forge-status.md +16 -16
  118. package/vendor/templates/project/cursor/commands/forge.md +16 -16
  119. package/vendor/templates/project/cursor/hooks/forge-session-start.mjs +30 -30
  120. 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 | --> |