@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,222 +1,222 @@
1
- {
2
- "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://forgekit.local/schemas/code-review-report.json",
4
- "title": "ThoroughCodeReviewReport",
5
- "type": "object",
6
- "required": ["review_id", "kind", "created_at", "scope", "lenses", "summary", "findings"],
7
- "additionalProperties": false,
8
- "properties": {
9
- "review_id": { "type": "string", "minLength": 1 },
10
- "kind": { "type": "string", "enum": ["review", "reverify"] },
11
- "created_at": { "type": "string", "format": "date-time" },
12
- "scope": {
13
- "type": "object",
14
- "required": ["type", "description"],
15
- "additionalProperties": false,
16
- "properties": {
17
- "type": {
18
- "type": "string",
19
- "enum": ["uncommitted", "branch", "paths", "commit_range", "file"]
20
- },
21
- "description": { "type": "string", "minLength": 1 },
22
- "base_sha": { "type": "string" },
23
- "head_sha": { "type": "string" },
24
- "paths": { "type": "array", "items": { "type": "string" } }
25
- }
26
- },
27
- "lenses": {
28
- "type": "array",
29
- "minItems": 1,
30
- "items": {
31
- "type": "string",
32
- "enum": [
33
- "security",
34
- "correctness",
35
- "smells",
36
- "architecture",
37
- "performance",
38
- "tests",
39
- "contracts",
40
- "errors",
41
- "maintainability"
42
- ]
43
- }
44
- },
45
- "parent_report": { "type": "string" },
46
- "summary": {
47
- "type": "object",
48
- "required": ["tentative_count"],
49
- "additionalProperties": true,
50
- "properties": {
51
- "tentative_count": { "type": "integer", "minimum": 0 },
52
- "headline": { "type": "string" },
53
- "top_actions": { "type": "array", "items": { "type": "string" } },
54
- "confirmed": { "type": "integer", "minimum": 0 },
55
- "downgraded": { "type": "integer", "minimum": 0 },
56
- "false_positive": { "type": "integer", "minimum": 0 },
57
- "needs_decision": { "type": "integer", "minimum": 0 },
58
- "resolved": { "type": "integer", "minimum": 0 },
59
- "still_open": { "type": "integer", "minimum": 0 },
60
- "partially_fixed": { "type": "integer", "minimum": 0 },
61
- "regressed": { "type": "integer", "minimum": 0 }
62
- }
63
- },
64
- "findings": {
65
- "type": "array",
66
- "items": { "$ref": "#/$defs/finding" }
67
- },
68
- "dedupe_preflight": {
69
- "type": "object",
70
- "additionalProperties": false,
71
- "properties": {
72
- "count": { "type": "integer", "minimum": 0 },
73
- "items": {
74
- "type": "array",
75
- "items": {
76
- "type": "object",
77
- "required": ["id", "location", "claim"],
78
- "properties": {
79
- "id": { "type": "string" },
80
- "location": { "type": "string" },
81
- "claim": { "type": "string" }
82
- }
83
- }
84
- }
85
- }
86
- },
87
- "coverage": {
88
- "type": "object",
89
- "description": "Recall / completeness pass ledger.",
90
- "additionalProperties": true,
91
- "properties": {
92
- "files_reviewed": { "type": "array", "items": { "type": "string" } },
93
- "files_skipped": { "type": "array", "items": { "type": "string" } },
94
- "lenses_without_findings": {
95
- "type": "array",
96
- "items": {
97
- "type": "object",
98
- "required": ["lens", "reason"],
99
- "properties": {
100
- "lens": {
101
- "type": "string",
102
- "enum": [
103
- "security",
104
- "correctness",
105
- "smells",
106
- "architecture",
107
- "performance",
108
- "tests",
109
- "contracts",
110
- "errors",
111
- "maintainability"
112
- ]
113
- },
114
- "reason": { "type": "string", "minLength": 1 }
115
- }
116
- }
117
- }
118
- }
119
- },
120
- "signals": {
121
- "type": "object",
122
- "description": "Signals pre-flight: deterministic tools run before the scout.",
123
- "additionalProperties": true,
124
- "properties": {
125
- "tools": {
126
- "type": "array",
127
- "items": {
128
- "type": "object",
129
- "required": ["name"],
130
- "properties": {
131
- "name": { "type": "string", "minLength": 1 },
132
- "status": { "type": "string", "enum": ["pass", "fail", "skipped"] },
133
- "summary": { "type": "string" }
134
- }
135
- }
136
- }
137
- }
138
- },
139
- "stats": {
140
- "type": "object",
141
- "description": "Pipeline stats: subagent counts and shortcut tallies for the run.",
142
- "additionalProperties": false,
143
- "properties": {
144
- "scouts": { "type": "integer", "minimum": 0 },
145
- "skeptics_dedicated": { "type": "integer", "minimum": 0 },
146
- "skeptics_batched": { "type": "integer", "minimum": 0 },
147
- "inline_verdicts": { "type": "integer", "minimum": 0 },
148
- "grounded_skips": { "type": "integer", "minimum": 0 },
149
- "carried_forward": { "type": "integer", "minimum": 0 },
150
- "second_opinions": { "type": "integer", "minimum": 0 }
151
- }
152
- }
153
- },
154
- "$defs": {
155
- "finding": {
156
- "type": "object",
157
- "required": ["id", "lens", "location", "claim", "severity", "verdict", "verdict_reason"],
158
- "additionalProperties": false,
159
- "properties": {
160
- "id": { "type": "string", "pattern": "^(F|dup)-[0-9]{3}$" },
161
- "title": { "type": "string", "minLength": 1 },
162
- "lens": {
163
- "type": "string",
164
- "enum": [
165
- "security",
166
- "correctness",
167
- "smells",
168
- "architecture",
169
- "performance",
170
- "tests",
171
- "contracts",
172
- "errors",
173
- "maintainability"
174
- ]
175
- },
176
- "location": { "type": "string", "minLength": 1 },
177
- "claim": { "type": "string", "minLength": 1 },
178
- "evidence": { "type": "string" },
179
- "severity": { "type": "string", "enum": ["critical", "important", "minor"] },
180
- "phase1_confidence": { "type": "string", "enum": ["low", "medium", "high"] },
181
- "original_severity": { "type": "string", "enum": ["critical", "important", "minor"] },
182
- "verdict": {
183
- "type": "string",
184
- "enum": [
185
- "confirmed",
186
- "false_positive",
187
- "downgraded",
188
- "needs_decision",
189
- "resolved",
190
- "still_open",
191
- "partially_fixed",
192
- "regressed"
193
- ]
194
- },
195
- "verdict_reason": { "type": "string", "minLength": 1 },
196
- "second_opinion": {
197
- "type": "object",
198
- "description": "Independent second skeptic for dangerous-quadrant findings.",
199
- "required": ["verdict", "verdict_reason"],
200
- "additionalProperties": false,
201
- "properties": {
202
- "verdict": {
203
- "type": "string",
204
- "enum": [
205
- "confirmed",
206
- "false_positive",
207
- "downgraded",
208
- "needs_decision",
209
- "resolved",
210
- "still_open",
211
- "partially_fixed",
212
- "regressed"
213
- ]
214
- },
215
- "verdict_reason": { "type": "string", "minLength": 1 },
216
- "agrees": { "type": "boolean" }
217
- }
218
- }
219
- }
220
- }
221
- }
222
- }
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://forgekit.local/schemas/code-review-report.json",
4
+ "title": "ThoroughCodeReviewReport",
5
+ "type": "object",
6
+ "required": ["review_id", "kind", "created_at", "scope", "lenses", "summary", "findings"],
7
+ "additionalProperties": false,
8
+ "properties": {
9
+ "review_id": { "type": "string", "minLength": 1 },
10
+ "kind": { "type": "string", "enum": ["review", "reverify"] },
11
+ "created_at": { "type": "string", "format": "date-time" },
12
+ "scope": {
13
+ "type": "object",
14
+ "required": ["type", "description"],
15
+ "additionalProperties": false,
16
+ "properties": {
17
+ "type": {
18
+ "type": "string",
19
+ "enum": ["uncommitted", "branch", "paths", "commit_range", "file"]
20
+ },
21
+ "description": { "type": "string", "minLength": 1 },
22
+ "base_sha": { "type": "string" },
23
+ "head_sha": { "type": "string" },
24
+ "paths": { "type": "array", "items": { "type": "string" } }
25
+ }
26
+ },
27
+ "lenses": {
28
+ "type": "array",
29
+ "minItems": 1,
30
+ "items": {
31
+ "type": "string",
32
+ "enum": [
33
+ "security",
34
+ "correctness",
35
+ "smells",
36
+ "architecture",
37
+ "performance",
38
+ "tests",
39
+ "contracts",
40
+ "errors",
41
+ "maintainability"
42
+ ]
43
+ }
44
+ },
45
+ "parent_report": { "type": "string" },
46
+ "summary": {
47
+ "type": "object",
48
+ "required": ["tentative_count"],
49
+ "additionalProperties": true,
50
+ "properties": {
51
+ "tentative_count": { "type": "integer", "minimum": 0 },
52
+ "headline": { "type": "string" },
53
+ "top_actions": { "type": "array", "items": { "type": "string" } },
54
+ "confirmed": { "type": "integer", "minimum": 0 },
55
+ "downgraded": { "type": "integer", "minimum": 0 },
56
+ "false_positive": { "type": "integer", "minimum": 0 },
57
+ "needs_decision": { "type": "integer", "minimum": 0 },
58
+ "resolved": { "type": "integer", "minimum": 0 },
59
+ "still_open": { "type": "integer", "minimum": 0 },
60
+ "partially_fixed": { "type": "integer", "minimum": 0 },
61
+ "regressed": { "type": "integer", "minimum": 0 }
62
+ }
63
+ },
64
+ "findings": {
65
+ "type": "array",
66
+ "items": { "$ref": "#/$defs/finding" }
67
+ },
68
+ "dedupe_preflight": {
69
+ "type": "object",
70
+ "additionalProperties": false,
71
+ "properties": {
72
+ "count": { "type": "integer", "minimum": 0 },
73
+ "items": {
74
+ "type": "array",
75
+ "items": {
76
+ "type": "object",
77
+ "required": ["id", "location", "claim"],
78
+ "properties": {
79
+ "id": { "type": "string" },
80
+ "location": { "type": "string" },
81
+ "claim": { "type": "string" }
82
+ }
83
+ }
84
+ }
85
+ }
86
+ },
87
+ "coverage": {
88
+ "type": "object",
89
+ "description": "Recall / completeness pass ledger.",
90
+ "additionalProperties": true,
91
+ "properties": {
92
+ "files_reviewed": { "type": "array", "items": { "type": "string" } },
93
+ "files_skipped": { "type": "array", "items": { "type": "string" } },
94
+ "lenses_without_findings": {
95
+ "type": "array",
96
+ "items": {
97
+ "type": "object",
98
+ "required": ["lens", "reason"],
99
+ "properties": {
100
+ "lens": {
101
+ "type": "string",
102
+ "enum": [
103
+ "security",
104
+ "correctness",
105
+ "smells",
106
+ "architecture",
107
+ "performance",
108
+ "tests",
109
+ "contracts",
110
+ "errors",
111
+ "maintainability"
112
+ ]
113
+ },
114
+ "reason": { "type": "string", "minLength": 1 }
115
+ }
116
+ }
117
+ }
118
+ }
119
+ },
120
+ "signals": {
121
+ "type": "object",
122
+ "description": "Signals pre-flight: deterministic tools run before the scout.",
123
+ "additionalProperties": true,
124
+ "properties": {
125
+ "tools": {
126
+ "type": "array",
127
+ "items": {
128
+ "type": "object",
129
+ "required": ["name"],
130
+ "properties": {
131
+ "name": { "type": "string", "minLength": 1 },
132
+ "status": { "type": "string", "enum": ["pass", "fail", "skipped"] },
133
+ "summary": { "type": "string" }
134
+ }
135
+ }
136
+ }
137
+ }
138
+ },
139
+ "stats": {
140
+ "type": "object",
141
+ "description": "Pipeline stats: subagent counts and shortcut tallies for the run.",
142
+ "additionalProperties": false,
143
+ "properties": {
144
+ "scouts": { "type": "integer", "minimum": 0 },
145
+ "skeptics_dedicated": { "type": "integer", "minimum": 0 },
146
+ "skeptics_batched": { "type": "integer", "minimum": 0 },
147
+ "inline_verdicts": { "type": "integer", "minimum": 0 },
148
+ "grounded_skips": { "type": "integer", "minimum": 0 },
149
+ "carried_forward": { "type": "integer", "minimum": 0 },
150
+ "second_opinions": { "type": "integer", "minimum": 0 }
151
+ }
152
+ }
153
+ },
154
+ "$defs": {
155
+ "finding": {
156
+ "type": "object",
157
+ "required": ["id", "lens", "location", "claim", "severity", "verdict", "verdict_reason"],
158
+ "additionalProperties": false,
159
+ "properties": {
160
+ "id": { "type": "string", "pattern": "^(F|dup)-[0-9]{3}$" },
161
+ "title": { "type": "string", "minLength": 1 },
162
+ "lens": {
163
+ "type": "string",
164
+ "enum": [
165
+ "security",
166
+ "correctness",
167
+ "smells",
168
+ "architecture",
169
+ "performance",
170
+ "tests",
171
+ "contracts",
172
+ "errors",
173
+ "maintainability"
174
+ ]
175
+ },
176
+ "location": { "type": "string", "minLength": 1 },
177
+ "claim": { "type": "string", "minLength": 1 },
178
+ "evidence": { "type": "string" },
179
+ "severity": { "type": "string", "enum": ["critical", "important", "minor"] },
180
+ "phase1_confidence": { "type": "string", "enum": ["low", "medium", "high"] },
181
+ "original_severity": { "type": "string", "enum": ["critical", "important", "minor"] },
182
+ "verdict": {
183
+ "type": "string",
184
+ "enum": [
185
+ "confirmed",
186
+ "false_positive",
187
+ "downgraded",
188
+ "needs_decision",
189
+ "resolved",
190
+ "still_open",
191
+ "partially_fixed",
192
+ "regressed"
193
+ ]
194
+ },
195
+ "verdict_reason": { "type": "string", "minLength": 1 },
196
+ "second_opinion": {
197
+ "type": "object",
198
+ "description": "Independent second skeptic for dangerous-quadrant findings.",
199
+ "required": ["verdict", "verdict_reason"],
200
+ "additionalProperties": false,
201
+ "properties": {
202
+ "verdict": {
203
+ "type": "string",
204
+ "enum": [
205
+ "confirmed",
206
+ "false_positive",
207
+ "downgraded",
208
+ "needs_decision",
209
+ "resolved",
210
+ "still_open",
211
+ "partially_fixed",
212
+ "regressed"
213
+ ]
214
+ },
215
+ "verdict_reason": { "type": "string", "minLength": 1 },
216
+ "agrees": { "type": "boolean" }
217
+ }
218
+ }
219
+ }
220
+ }
221
+ }
222
+ }