@rsaglobaltech/specgate 0.18.0 → 0.20.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.
Files changed (211) hide show
  1. package/CHANGELOG.md +122 -1
  2. package/bin/specgate.ts +47 -47
  3. package/dist/bin/specgate.js +47 -46
  4. package/dist/bin/specgate.js.map +1 -1
  5. package/dist/packages/core/src/application/ArchiveChangeUseCase.js +1 -1
  6. package/dist/packages/core/src/application/ArchiveChangeUseCase.js.map +1 -1
  7. package/dist/packages/core/src/application/ValidateProjectUseCase.js +1 -1
  8. package/dist/packages/core/src/application/ValidateProjectUseCase.js.map +1 -1
  9. package/dist/packages/core/src/domain/ChangeTemplates.js +1 -1
  10. package/dist/packages/core/src/domain/DeltaFeature.js +3 -3
  11. package/dist/packages/core/src/domain/DeltaFeature.js.map +1 -1
  12. package/dist/packages/core/src/domain/DerivedMatrix.js +9 -9
  13. package/dist/packages/core/src/domain/DerivedMatrix.js.map +1 -1
  14. package/dist/packages/core/src/domain/DoneVerification.js +10 -2
  15. package/dist/packages/core/src/domain/DoneVerification.js.map +1 -1
  16. package/dist/packages/core/src/domain/DraftChecklist.js +3 -3
  17. package/dist/packages/core/src/domain/DraftChecklist.js.map +1 -1
  18. package/dist/packages/core/src/domain/GherkinTags.js +12 -12
  19. package/dist/packages/core/src/domain/GherkinTags.js.map +1 -1
  20. package/dist/packages/core/src/domain/HarnessConfig.js +1 -0
  21. package/dist/packages/core/src/domain/HarnessConfig.js.map +1 -1
  22. package/dist/packages/core/src/domain/InboundChange.js +1 -1
  23. package/dist/packages/core/src/domain/InboundChange.js.map +1 -1
  24. package/dist/packages/core/src/domain/Language.js +2 -2
  25. package/dist/packages/core/src/domain/Language.js.map +1 -1
  26. package/dist/packages/core/src/domain/Lockfile.js +7 -7
  27. package/dist/packages/core/src/domain/Lockfile.js.map +1 -1
  28. package/dist/packages/core/src/domain/PackDelta.js +1 -1
  29. package/dist/packages/core/src/domain/PackDelta.js.map +1 -1
  30. package/dist/packages/core/src/domain/RequirementGraph.js +2 -2
  31. package/dist/packages/core/src/domain/SpecParser.js +6 -6
  32. package/dist/packages/core/src/domain/SpecParser.js.map +1 -1
  33. package/dist/packages/core/src/domain/TraceMerge.js +4 -4
  34. package/dist/packages/core/src/domain/TraceMerge.js.map +1 -1
  35. package/dist/packages/core/src/domain/TraceabilityFormat.js +4 -4
  36. package/dist/packages/core/src/domain/TraceabilityFormat.js.map +1 -1
  37. package/dist/packages/core/src/domain/ValueAnnotations.js +8 -8
  38. package/dist/packages/core/src/domain/ValueAnnotations.js.map +1 -1
  39. package/dist/packages/core/src/domain/WriteScope.js +3 -3
  40. package/dist/packages/core/src/domain/WriteScope.js.map +1 -1
  41. package/dist/packages/core/src/infrastructure/ChangeWorkspace.js +2 -2
  42. package/dist/packages/core/src/infrastructure/ChangeWorkspace.js.map +1 -1
  43. package/dist/packages/core/src/infrastructure/ConsoleReporter.js +2 -2
  44. package/dist/packages/core/src/infrastructure/ConsoleReporter.js.map +1 -1
  45. package/dist/packages/core/src/infrastructure/DerivedMatrixSources.js +2 -2
  46. package/dist/packages/core/src/infrastructure/DerivedMatrixSources.js.map +1 -1
  47. package/dist/packages/core/src/infrastructure/DiskLanguageRepository.js +4 -4
  48. package/dist/packages/core/src/infrastructure/DiskLanguageRepository.js.map +1 -1
  49. package/dist/packages/core/src/infrastructure/DiskPackDeltaRepository.js +1 -1
  50. package/dist/packages/core/src/infrastructure/DiskPackDeltaRepository.js.map +1 -1
  51. package/dist/packages/core/src/infrastructure/GitContributionStager.js +3 -3
  52. package/dist/packages/core/src/infrastructure/GitContributionStager.js.map +1 -1
  53. package/dist/packages/core/src/infrastructure/HarnessConfigFile.js +12 -3
  54. package/dist/packages/core/src/infrastructure/HarnessConfigFile.js.map +1 -1
  55. package/dist/packages/core/src/infrastructure/RemotePackResolver.js +5 -5
  56. package/dist/packages/core/src/infrastructure/RemotePackResolver.js.map +1 -1
  57. package/dist/packages/core/test/unit/delta-feature.test.js +3 -3
  58. package/dist/packages/core/test/unit/delta-feature.test.js.map +1 -1
  59. package/dist/packages/core/test/unit/derived-matrix.test.js +8 -8
  60. package/dist/packages/core/test/unit/derived-matrix.test.js.map +1 -1
  61. package/dist/packages/core/test/unit/gherkin-tags.test.js +8 -8
  62. package/dist/packages/core/test/unit/gherkin-tags.test.js.map +1 -1
  63. package/dist/packages/core/test/unit/inbound-change.test.js +1 -1
  64. package/dist/packages/core/test/unit/inbound-change.test.js.map +1 -1
  65. package/dist/packages/core/test/unit/matrix-dependencies.test.js +5 -5
  66. package/dist/packages/core/test/unit/matrix-dependencies.test.js.map +1 -1
  67. package/dist/packages/core/test/unit/new-requirement.test.js +1 -1
  68. package/dist/packages/core/test/unit/new-requirement.test.js.map +1 -1
  69. package/dist/packages/core/test/unit/value-annotations.test.js +5 -5
  70. package/dist/packages/core/test/unit/value-annotations.test.js.map +1 -1
  71. package/dist/packages/core/test/unit/write-scope-status.test.js +5 -5
  72. package/dist/packages/core/test/unit/write-scope-status.test.js.map +1 -1
  73. package/dist/packages/mcp-spec-driven/src/native-tools.js +3 -3
  74. package/dist/packages/mcp-spec-driven/src/native-tools.js.map +1 -1
  75. package/dist/packages/mcp-spec-driven/src/server.js +1 -7
  76. package/dist/packages/mcp-spec-driven/src/server.js.map +1 -1
  77. package/dist/packages/mcp-spec-driven/src/tools.js +4 -4
  78. package/dist/packages/mcp-spec-driven/src/tools.js.map +1 -1
  79. package/dist/scripts/add.js +10 -0
  80. package/dist/scripts/add.js.map +1 -0
  81. package/dist/scripts/agents/init.js +26 -47
  82. package/dist/scripts/agents/init.js.map +1 -1
  83. package/dist/scripts/alm/cli.js +37 -3
  84. package/dist/scripts/alm/cli.js.map +1 -1
  85. package/dist/scripts/alm/providers/index.js +1 -1
  86. package/dist/scripts/alm/providers/index.js.map +1 -1
  87. package/dist/scripts/change/instructions.js +2 -2
  88. package/dist/scripts/change/instructions.js.map +1 -1
  89. package/dist/scripts/cli/commands/alm/PullCommand.js +1 -1
  90. package/dist/scripts/cli/commands/alm/PullCommand.js.map +1 -1
  91. package/dist/scripts/cli/commands/change/ChangeCommand.js +99 -98
  92. package/dist/scripts/cli/commands/change/ChangeCommand.js.map +1 -1
  93. package/dist/scripts/cli/commands/config/CiInitCommand.js +6 -4
  94. package/dist/scripts/cli/commands/config/CiInitCommand.js.map +1 -1
  95. package/dist/scripts/cli/commands/config/CompletionCommand.js +10 -10
  96. package/dist/scripts/cli/commands/config/CompletionCommand.js.map +1 -1
  97. package/dist/scripts/cli/commands/config/ConfigInitCommand.js +11 -19
  98. package/dist/scripts/cli/commands/config/ConfigInitCommand.js.map +1 -1
  99. package/dist/scripts/cli/commands/config/ConfigSetCommand.js +24 -11
  100. package/dist/scripts/cli/commands/config/ConfigSetCommand.js.map +1 -1
  101. package/dist/scripts/cli/commands/harness/RunCommand.js +94 -38
  102. package/dist/scripts/cli/commands/harness/RunCommand.js.map +1 -1
  103. package/dist/scripts/cli/commands/pack/BundlePackCommand.js +36 -2
  104. package/dist/scripts/cli/commands/pack/BundlePackCommand.js.map +1 -1
  105. package/dist/scripts/cli/commands/pack/ExpandDomainPackCommand.js +2 -2
  106. package/dist/scripts/cli/commands/pack/ExpandDomainPackCommand.js.map +1 -1
  107. package/dist/scripts/cli/commands/pack/InferPackCommand.js +2 -1
  108. package/dist/scripts/cli/commands/pack/InferPackCommand.js.map +1 -1
  109. package/dist/scripts/cli/commands/pack/InitPackCommand.js +23 -32
  110. package/dist/scripts/cli/commands/pack/InitPackCommand.js.map +1 -1
  111. package/dist/scripts/cli/commands/pack/LintPackCommand.js +4 -3
  112. package/dist/scripts/cli/commands/pack/LintPackCommand.js.map +1 -1
  113. package/dist/scripts/cli/commands/project/AddCommand.js +75 -0
  114. package/dist/scripts/cli/commands/project/AddCommand.js.map +1 -0
  115. package/dist/scripts/cli/commands/project/AdoptCommand.js +9 -3
  116. package/dist/scripts/cli/commands/project/AdoptCommand.js.map +1 -1
  117. package/dist/scripts/cli/commands/project/Forja.js +104 -0
  118. package/dist/scripts/cli/commands/project/Forja.js.map +1 -0
  119. package/dist/scripts/cli/commands/project/InitProjectCommand.js +61 -6
  120. package/dist/scripts/cli/commands/project/InitProjectCommand.js.map +1 -1
  121. package/dist/scripts/cli/commands/project/OnboardCommand.js +17 -24
  122. package/dist/scripts/cli/commands/project/OnboardCommand.js.map +1 -1
  123. package/dist/scripts/cli/commands/project/UpdateCommand.js +23 -43
  124. package/dist/scripts/cli/commands/project/UpdateCommand.js.map +1 -1
  125. package/dist/scripts/cli/commands/quality/CheckCommand.js +50 -22
  126. package/dist/scripts/cli/commands/quality/CheckCommand.js.map +1 -1
  127. package/dist/scripts/cli/commands/quality/DoctorCommand.js +27 -10
  128. package/dist/scripts/cli/commands/quality/DoctorCommand.js.map +1 -1
  129. package/dist/scripts/cli/commands/quality/FixCommand.js +24 -29
  130. package/dist/scripts/cli/commands/quality/FixCommand.js.map +1 -1
  131. package/dist/scripts/cli/commands/quality/ReportCommand.js +8 -4
  132. package/dist/scripts/cli/commands/quality/ReportCommand.js.map +1 -1
  133. package/dist/scripts/cli/commands/quality/ValidateSpecsCommand.js +69 -16
  134. package/dist/scripts/cli/commands/quality/ValidateSpecsCommand.js.map +1 -1
  135. package/dist/scripts/cli/commands/spec/DoneCommand.js +69 -28
  136. package/dist/scripts/cli/commands/spec/DoneCommand.js.map +1 -1
  137. package/dist/scripts/cli/commands/spec/DraftCommand.js +166 -81
  138. package/dist/scripts/cli/commands/spec/DraftCommand.js.map +1 -1
  139. package/dist/scripts/cli/commands/spec/MatrixCommand.js +24 -27
  140. package/dist/scripts/cli/commands/spec/MatrixCommand.js.map +1 -1
  141. package/dist/scripts/cli/commands/spec/NewCommand.js +11 -14
  142. package/dist/scripts/cli/commands/spec/NewCommand.js.map +1 -1
  143. package/dist/scripts/cli/commands/spec/PetCommand.js +102 -0
  144. package/dist/scripts/cli/commands/spec/PetCommand.js.map +1 -0
  145. package/dist/scripts/cli/commands/spec/PlanCommand.js +34 -39
  146. package/dist/scripts/cli/commands/spec/PlanCommand.js.map +1 -1
  147. package/dist/scripts/cli/commands/spec/ReqCommand.js +51 -58
  148. package/dist/scripts/cli/commands/spec/ReqCommand.js.map +1 -1
  149. package/dist/scripts/cli/commands/spec/StatusCommand.js +93 -47
  150. package/dist/scripts/cli/commands/spec/StatusCommand.js.map +1 -1
  151. package/dist/scripts/cli/commands/spec/StudioCommand.js +16 -24
  152. package/dist/scripts/cli/commands/spec/StudioCommand.js.map +1 -1
  153. package/dist/scripts/cli/commands/specops/ContributeCommand.js +24 -32
  154. package/dist/scripts/cli/commands/specops/ContributeCommand.js.map +1 -1
  155. package/dist/scripts/cli/commands/specops/DiffCommand.js +3 -2
  156. package/dist/scripts/cli/commands/specops/DiffCommand.js.map +1 -1
  157. package/dist/scripts/cli/commands/specops/SyncCommand.js +4 -3
  158. package/dist/scripts/cli/commands/specops/SyncCommand.js.map +1 -1
  159. package/dist/scripts/docs/blocks.js +4 -4
  160. package/dist/scripts/docs/blocks.js.map +1 -1
  161. package/dist/scripts/docs/build-site.js +104 -9
  162. package/dist/scripts/docs/build-site.js.map +1 -1
  163. package/dist/scripts/docs/components.js +30 -25
  164. package/dist/scripts/docs/components.js.map +1 -1
  165. package/dist/scripts/docs/nav.js +144 -40
  166. package/dist/scripts/docs/nav.js.map +1 -1
  167. package/dist/scripts/docs/record-journey.js +2 -2
  168. package/dist/scripts/docs/record-journey.js.map +1 -1
  169. package/dist/scripts/docs/record-terminal.js +12 -12
  170. package/dist/scripts/docs/record-terminal.js.map +1 -1
  171. package/dist/scripts/draft/brief-setup.js +4 -0
  172. package/dist/scripts/draft/brief-setup.js.map +1 -1
  173. package/dist/scripts/draft/confined-agent.js +19 -0
  174. package/dist/scripts/draft/confined-agent.js.map +1 -1
  175. package/dist/scripts/draft/drafting-guide.js +3 -1
  176. package/dist/scripts/draft/drafting-guide.js.map +1 -1
  177. package/dist/scripts/gen_mcp_tools.js +4 -4
  178. package/dist/scripts/gen_mcp_tools.js.map +1 -1
  179. package/dist/scripts/harness/init.js +25 -16
  180. package/dist/scripts/harness/init.js.map +1 -1
  181. package/dist/scripts/harness/report.js +39 -40
  182. package/dist/scripts/harness/report.js.map +1 -1
  183. package/dist/scripts/harness/worktree-lock.js +2 -2
  184. package/dist/scripts/harness/worktree-lock.js.map +1 -1
  185. package/dist/scripts/lib/command.js +3 -2
  186. package/dist/scripts/lib/command.js.map +1 -1
  187. package/dist/scripts/lib/derived-writes.js +1 -1
  188. package/dist/scripts/lib/diagnostics.js +12 -16
  189. package/dist/scripts/lib/diagnostics.js.map +1 -1
  190. package/dist/scripts/lib/placeholders.js +4 -4
  191. package/dist/scripts/lib/placeholders.js.map +1 -1
  192. package/dist/scripts/lib/surface.js +45 -14
  193. package/dist/scripts/lib/surface.js.map +1 -1
  194. package/dist/scripts/lib/ui.js +356 -0
  195. package/dist/scripts/lib/ui.js.map +1 -0
  196. package/dist/scripts/merge-traceability.js +3 -3
  197. package/dist/scripts/pet/pet.js +331 -0
  198. package/dist/scripts/pet/pet.js.map +1 -0
  199. package/dist/scripts/pet.js +10 -0
  200. package/dist/scripts/pet.js.map +1 -0
  201. package/dist/scripts/plugin/gate-hook.js +1 -1
  202. package/dist/scripts/plugin/gate-hook.js.map +1 -1
  203. package/dist/scripts/schema/registry.js +2 -2
  204. package/dist/scripts/schema/registry.js.map +1 -1
  205. package/dist/scripts/specops/add.js +23 -32
  206. package/dist/scripts/specops/add.js.map +1 -1
  207. package/dist/scripts/specops/lock.js +4 -4
  208. package/dist/scripts/specops/lock.js.map +1 -1
  209. package/dist/scripts/specops/remove.js +15 -24
  210. package/dist/scripts/specops/remove.js.map +1 -1
  211. package/package.json +1 -2
@@ -56,16 +56,8 @@ const MatrixCommand_1 = require("./MatrixCommand");
56
56
  const TraceabilityMatrix_1 = require("../../../../packages/core/src/domain/TraceabilityMatrix");
57
57
  const SpecSections_1 = require("../../../../packages/core/src/domain/SpecSections");
58
58
  const RequirementRemoval_1 = require("../../../../packages/core/src/domain/RequirementRemoval");
59
- const COLOR_ENABLED = process.stdout.isTTY && process.env.NO_COLOR === undefined && process.env.TERM !== "dumb";
60
- const c = {
61
- reset: COLOR_ENABLED ? "\x1b[0m" : "",
62
- bold: COLOR_ENABLED ? "\x1b[1m" : "",
63
- dim: COLOR_ENABLED ? "\x1b[2m" : "",
64
- red: COLOR_ENABLED ? "\x1b[31m" : "",
65
- green: COLOR_ENABLED ? "\x1b[32m" : "",
66
- yellow: COLOR_ENABLED ? "\x1b[33m" : "",
67
- cyan: COLOR_ENABLED ? "\x1b[36m" : "",
68
- };
59
+ const ui_1 = require("../../../lib/ui");
60
+ const ui = __importStar(require("../../../lib/ui"));
69
61
  exports.COL = {
70
62
  requirement: 1,
71
63
  scenarioId: 2,
@@ -120,8 +112,8 @@ function updateRequirementFields(content, reqId, fields) {
120
112
  }
121
113
  function readMatrix(tracePath) {
122
114
  if (!fs.existsSync(tracePath)) {
123
- process.stderr.write(`${c.red}✖${c.reset} docs/specs/traceability.md not found.\n` +
124
- ` ${c.dim}Run \`specgate init\` first, or pass --project-dir to an existing project.${c.reset}\n`);
115
+ process.stderr.write(`${ui_1.c.red}✖${ui_1.c.reset} docs/specs/traceability.md not found.\n` +
116
+ ` ${ui_1.c.dim}Run \`specgate init\` first, or pass --project-dir to an existing project.${ui_1.c.reset}\n`);
125
117
  process.exit(2);
126
118
  }
127
119
  return fs.readFileSync(tracePath, "utf8");
@@ -133,10 +125,10 @@ function meaningfulCell(value) {
133
125
  }
134
126
  function statusColor(status) {
135
127
  if (["Implemented", "Verified", "Released"].includes(status))
136
- return c.green;
128
+ return ui_1.c.green;
137
129
  if (status === "Draft" || !status)
138
- return c.yellow;
139
- return c.reset;
130
+ return ui_1.c.yellow;
131
+ return ui_1.c.reset;
140
132
  }
141
133
  function collectFieldFlags(argv) {
142
134
  const fields = {};
@@ -166,21 +158,21 @@ function collectFieldFlags(argv) {
166
158
  */
167
159
  function usage() {
168
160
  process.stdout.write(`
169
- 📝 ${c.bold}specgate req${c.reset} — add, link and close requirements without hand-editing the matrix
161
+ 📝 ${ui_1.c.bold}specgate req${ui_1.c.reset} — add, link and close requirements without hand-editing the matrix
170
162
 
171
163
  ` +
172
- ` ${c.dim}specgate req${c.reset} list requirements and their status
164
+ ` ${ui_1.c.dim}specgate req${ui_1.c.reset} list requirements and their status
173
165
  ` +
174
- ` ${c.dim}specgate req add${c.reset} "<title>" add one, Draft
166
+ ` ${ui_1.c.dim}specgate req add${ui_1.c.reset} "<title>" add one, Draft
175
167
  ` +
176
- ` ${c.dim}specgate req link${c.reset} REQ-007 --test <path> set a field (--feature/--test/--code/--uc/--cmd)
168
+ ` ${ui_1.c.dim}specgate req link${ui_1.c.reset} REQ-007 --test <path> set a field (--feature/--test/--code/--uc/--cmd)
177
169
  ` +
178
- ` ${c.dim}specgate req done${c.reset} REQ-007 mark Implemented (same as specgate done REQ-007)
170
+ ` ${ui_1.c.dim}specgate req done${ui_1.c.reset} REQ-007 mark Implemented (same as specgate done REQ-007)
179
171
  ` +
180
- ` ${c.dim}specgate req rm${c.reset} REQ-007 remove its row and its prose (--dry-run, --force)
172
+ ` ${ui_1.c.dim}specgate req rm${ui_1.c.reset} REQ-007 remove its row and its prose (--dry-run, --force)
181
173
 
182
174
  ` +
183
- ` Run ${c.cyan}specgate req <subcommand> --help${c.reset} for a subcommand's own flags.
175
+ ` Run ${ui_1.c.cyan}specgate req <subcommand> --help${ui_1.c.reset} for a subcommand's own flags.
184
176
 
185
177
  `);
186
178
  }
@@ -195,17 +187,17 @@ const STATUS_FLAG = ` --status <status> Draft · Approved · Implemented ·
195
187
  * Found 2026-10-06 walking the daily loop on a fresh repo.
196
188
  */
197
189
  const SUB_USAGE = {
198
- add: `\n 📝 ${c.bold}specgate req add${c.reset} "<title>" [field flags]\n\n` +
190
+ add: `\n 📝 ${ui_1.c.bold}specgate req add${ui_1.c.reset} "<title>" [field flags]\n\n` +
199
191
  ` Reserves the next REQ-NNN, adds its row to docs/specs/traceability.md\n` +
200
192
  ` and a draft \`## REQ-NNN\` section to spec.md. Status defaults to Draft.\n\n` +
201
193
  ` FIELD FLAGS (optional)\n${FIELD_FLAGS}${STATUS_FLAG}\n`,
202
- link: `\n 📝 ${c.bold}specgate req link${c.reset} REQ-NNN <field flag>...\n\n` +
194
+ link: `\n 📝 ${ui_1.c.bold}specgate req link${ui_1.c.reset} REQ-NNN <field flag>...\n\n` +
203
195
  ` Sets fields on every row of REQ-NNN. At least one flag is required.\n\n` +
204
196
  ` FIELD FLAGS\n${FIELD_FLAGS}\n` +
205
197
  ` The status changes through \`specgate done REQ-NNN [--status <status>] [--check]\`,\n` +
206
198
  ` which can verify the requirement before it claims anything.\n\n` +
207
199
  ` EXAMPLE\n specgate req link REQ-007 --feature features/orders.feature --test test/orders.test.js\n\n`,
208
- rm: `\n 📝 ${c.bold}specgate req rm${c.reset} REQ-NNN [--dry-run] [--force]\n\n` +
200
+ rm: `\n 📝 ${ui_1.c.bold}specgate req rm${ui_1.c.reset} REQ-NNN [--dry-run] [--force]\n\n` +
209
201
  ` Removes the requirement's rows and its spec.md section.\n\n` +
210
202
  ` --dry-run show what would be removed, write nothing\n` +
211
203
  ` --force required once the requirement has left Draft —\n` +
@@ -230,21 +222,21 @@ function cmdList(tracePath, io) {
230
222
  return 0;
231
223
  }
232
224
  if (reqs.length === 0) {
233
- process.stdout.write(`\n ${c.dim}No requirements yet. Add one: specgate req add "…"${c.reset}\n\n`);
225
+ process.stdout.write(ui.header("req") + ui.info("No requirements yet.") + ui.next('specgate req add "<title>"'));
234
226
  return 0;
235
227
  }
236
- process.stdout.write(`\n ${c.bold}📝 Requirements${c.reset} ${c.dim}(${reqs.length})${c.reset}\n\n`);
228
+ process.stdout.write(ui.header("req", `${reqs.length} requirement(s)`));
237
229
  for (const r of reqs) {
238
230
  const meaningful = (v) => meaningfulCell(v) !== null;
239
- process.stdout.write(` ${c.cyan}${(r.requirement || "").padEnd(9)}${c.reset} ${c.dim}${r.scenarioId || ""}${c.reset} ${statusColor(r.status)}${r.status || "Draft"}${c.reset}\n`);
231
+ process.stdout.write(` ${ui_1.c.cyan}${ui.pad(r.requirement || "", 9)}${ui_1.c.reset} ${ui.muted(ui.pad(r.scenarioId || "", 8))} ${statusColor(r.status)}${r.status || "Draft"}${ui_1.c.reset}\n`);
240
232
  if (meaningful(r.featureFile))
241
- process.stdout.write(` ${c.dim}feature: ${r.featureFile}${c.reset}\n`);
233
+ process.stdout.write(` ${ui.muted(`feature ${r.featureFile}`)}\n`);
242
234
  if (meaningful(r.testArtifact))
243
- process.stdout.write(` ${c.dim}test: ${r.testArtifact}${c.reset}\n`);
235
+ process.stdout.write(` ${ui.muted(`test ${r.testArtifact}`)}\n`);
244
236
  if (meaningful(r.technicalArtifact))
245
- process.stdout.write(` ${c.dim}code: ${r.technicalArtifact}${c.reset}\n`);
237
+ process.stdout.write(` ${ui.muted(`code ${r.technicalArtifact}`)}\n`);
246
238
  }
247
- process.stdout.write(`\n ${c.dim}Next: specgate req link <REQ> --test … · specgate req done <REQ>${c.reset}\n\n`);
239
+ process.stdout.write(ui.next("specgate req link <REQ> --test <path>", "then specgate done <REQ>"));
248
240
  return 0;
249
241
  }
250
242
  class ReqCommand extends command_1.BaseCommand {
@@ -295,7 +287,7 @@ class ReqCommand extends command_1.BaseCommand {
295
287
  .join(" ")
296
288
  .trim();
297
289
  if (!title && !fields.useCase) {
298
- process.stderr.write(`${c.red}✖${c.reset} A title is required: specgate req add "<what the requirement does>"\n`);
290
+ process.stderr.write(`${ui_1.c.red}✖${ui_1.c.reset} A title is required: specgate req add "<what the requirement does>"\n`);
299
291
  process.exit(2);
300
292
  }
301
293
  if (title && !fields.useCase)
@@ -331,11 +323,12 @@ class ReqCommand extends command_1.BaseCommand {
331
323
  explicit.scenarioId = result.scenarioId;
332
324
  (0, derived_writes_1.writeRequirementFields)(resolvedDir, result.reqId, explicit);
333
325
  }
334
- process.stdout.write(`${c.green}✔${c.reset} Added ${c.bold}${result.reqId}${c.reset} ${c.dim}(${result.scenarioId}, status ${status || "Draft"})${c.reset}\n` +
326
+ process.stdout.write(ui.header("req add", result.reqId) +
327
+ ui.ok(`Added ${ui_1.c.bold}${result.reqId}${ui_1.c.reset} ${ui.muted(`(${result.scenarioId}, status ${status || "Draft"})`)}`) +
335
328
  (wroteSection
336
- ? ` ${c.dim}spec.md: added a draft \`## ${result.reqId}\` section — rewrite the obligation${c.reset}\n`
329
+ ? ui.fileLine("changed", "spec.md", `draft ## ${result.reqId} section — rewrite the obligation`)
337
330
  : "") +
338
- ` ${c.dim}Next: specgate req link ${result.reqId} --feature <path> --test <path>${c.reset}\n`);
331
+ ui.next(`specgate req link ${result.reqId} --feature <path> --test <path>`));
339
332
  process.exit(0);
340
333
  }
341
334
  if (sub === "rm" || sub === "remove") {
@@ -344,7 +337,7 @@ class ReqCommand extends command_1.BaseCommand {
344
337
  const dryRun = args.includes("--dry-run");
345
338
  const force = args.includes("--force");
346
339
  if (!reqId) {
347
- process.stderr.write(`${c.red}✖${c.reset} Expected a REQ-id: specgate req rm REQ-007\n`);
340
+ process.stderr.write(`${ui_1.c.red}✖${ui_1.c.reset} Expected a REQ-id: specgate req rm REQ-007\n`);
348
341
  process.exit(2);
349
342
  }
350
343
  const traceContent = readMatrix(tracePath);
@@ -352,7 +345,7 @@ class ReqCommand extends command_1.BaseCommand {
352
345
  const specContent = fs.existsSync(specPath) ? fs.readFileSync(specPath, "utf8") : "";
353
346
  const plan = (0, RequirementRemoval_1.planRemoval)(traceContent, reqId, specContent);
354
347
  if (plan.rows.length === 0 && !plan.hasProse) {
355
- process.stderr.write(`${c.red}✖${c.reset} ${reqId} is not in docs/specs/traceability.md or spec.md.\n`);
348
+ process.stderr.write(`${ui_1.c.red}✖${ui_1.c.reset} ${reqId} is not in docs/specs/traceability.md or spec.md.\n`);
356
349
  process.exit(1);
357
350
  }
358
351
  // Removing a delivered requirement deletes the record that something
@@ -360,10 +353,10 @@ class ReqCommand extends command_1.BaseCommand {
360
353
  // loud once.
361
354
  const delivered = plan.statuses.filter(RequirementRemoval_1.isDelivered);
362
355
  if (delivered.length > 0 && !force) {
363
- process.stderr.write(`${c.red}✖${c.reset} ${reqId} is ${delivered.join(", ")}, not Draft.\n` +
364
- ` ${c.dim}Removing it deletes the record that this was delivered. Re-run with --force ` +
365
- `if that is what you mean, or set it to Deprecated instead:${c.reset}\n` +
366
- ` ${c.dim}specgate done ${reqId} --status Deprecated${c.reset}\n`);
356
+ process.stderr.write(`${ui_1.c.red}✖${ui_1.c.reset} ${reqId} is ${delivered.join(", ")}, not Draft.\n` +
357
+ ` ${ui_1.c.dim}Removing it deletes the record that this was delivered. Re-run with --force ` +
358
+ `if that is what you mean, or set it to Deprecated instead:${ui_1.c.reset}\n` +
359
+ ` ${ui_1.c.dim}specgate done ${reqId} --status Deprecated${ui_1.c.reset}\n`);
367
360
  process.exit(1);
368
361
  }
369
362
  const nextTrace = (0, RequirementRemoval_1.removeMatrixRows)(traceContent, reqId);
@@ -376,19 +369,19 @@ class ReqCommand extends command_1.BaseCommand {
376
369
  }
377
370
  (0, MatrixCommand_1.refreshDerivedMatrix)(resolvedDir);
378
371
  }
379
- const prefix = dryRun ? `${c.dim}[dry-run]${c.reset} ` : "";
380
- process.stdout.write(`${prefix}${c.green}✔${c.reset} Removed ${c.bold}${reqId}${c.reset} ` +
381
- `${c.dim}(${plan.rows.length} matrix row(s)${plan.hasProse ? ", and its prose in spec.md" : ""})${c.reset}\n`);
372
+ const prefix = dryRun ? `${ui_1.c.dim}[dry-run]${ui_1.c.reset} ` : "";
373
+ process.stdout.write(`${prefix}${ui_1.c.green}✔${ui_1.c.reset} Removed ${ui_1.c.bold}${reqId}${ui_1.c.reset} ` +
374
+ `${ui_1.c.dim}(${plan.rows.length} matrix row(s)${plan.hasProse ? ", and its prose in spec.md" : ""})${ui_1.c.reset}\n`);
382
375
  // Say what was left behind. A feature file nothing references fails
383
376
  // `validate` with feature_not_in_matrix, and finding that out from a red
384
377
  // build instead of from here would be the tool wasting somebody's time.
385
378
  for (const feature of plan.orphanedFeatures) {
386
- process.stdout.write(` ${c.yellow}⚠${c.reset} ${feature} is no longer referenced by any row.\n` +
387
- ` ${c.dim}Delete it, or point another requirement at it — \`validate\` fails on ` +
388
- `a feature file that is not in the matrix.${c.reset}\n`);
379
+ process.stdout.write(` ${ui_1.c.yellow}⚠${ui_1.c.reset} ${feature} is no longer referenced by any row.\n` +
380
+ ` ${ui_1.c.dim}Delete it, or point another requirement at it — \`validate\` fails on ` +
381
+ `a feature file that is not in the matrix.${ui_1.c.reset}\n`);
389
382
  }
390
- process.stdout.write(` ${c.dim}Nothing else was touched: tests, implementation and git history keep ` +
391
- `whatever they said about ${reqId}.${c.reset}\n`);
383
+ process.stdout.write(` ${ui_1.c.dim}Nothing else was touched: tests, implementation and git history keep ` +
384
+ `whatever they said about ${reqId}.${ui_1.c.reset}\n`);
392
385
  process.exit(0);
393
386
  }
394
387
  if (sub === "link") {
@@ -397,20 +390,20 @@ class ReqCommand extends command_1.BaseCommand {
397
390
  // Implemented` printed a tick and left the row Draft. One way to change
398
391
  // a status — `done`, which can check first — instead of two that differ.
399
392
  if (status !== null) {
400
- process.stderr.write(`${c.red}✖${c.reset} req link does not change the status.\n` +
401
- ` ${c.dim}Use: specgate done ${rest.find((a) => /^REQ-\d+$/.test(a)) || "REQ-NNN"} --status ${status} --check${c.reset}\n`);
393
+ process.stderr.write(`${ui_1.c.red}✖${ui_1.c.reset} req link does not change the status.\n` +
394
+ ` ${ui_1.c.dim}Use: specgate done ${rest.find((a) => /^REQ-\d+$/.test(a)) || "REQ-NNN"} --status ${status} --check${ui_1.c.reset}\n`);
402
395
  process.exit(2);
403
396
  }
404
397
  const reqId = rest.find((a) => /^REQ-\d+$/.test(a));
405
398
  if (!reqId) {
406
- process.stderr.write(`${c.red}✖${c.reset} Expected a REQ-id: specgate req link REQ-007 --test …\n`);
399
+ process.stderr.write(`${ui_1.c.red}✖${ui_1.c.reset} Expected a REQ-id: specgate req link REQ-007 --test …\n`);
407
400
  process.exit(2);
408
401
  }
409
402
  if (Object.keys(fields).length === 0) {
410
- process.stderr.write(`${c.red}✖${c.reset} Nothing to link. Pass at least one field flag (--feature/--test/--code/--uc/…).\n`);
403
+ process.stderr.write(`${ui_1.c.red}✖${ui_1.c.reset} Nothing to link. Pass at least one field flag (--feature/--test/--code/--uc/…).\n`);
411
404
  process.exit(2);
412
405
  }
413
- // Derived project: the link goes into the requirement's csda:trace in
406
+ // Derived project: the link goes into the requirement's specgate:trace in
414
407
  // spec.md, or the next regeneration would drop it.
415
408
  const derivedRows = (0, derived_writes_1.isDerivedProject)(resolvedDir)
416
409
  ? (0, derived_writes_1.writeRequirementFields)(resolvedDir, reqId, fields)
@@ -419,14 +412,14 @@ class ReqCommand extends command_1.BaseCommand {
419
412
  ? new LinkRequirementUseCase_1.LinkRequirementUseCase(new DiskTraceabilityRepository_1.DiskTraceabilityRepository(), exports.COL).execute(resolvedDir, reqId, fields)
420
413
  : { ok: derivedRows !== null };
421
414
  if (!result.ok) {
422
- process.stderr.write(`${c.red}✖${c.reset} ${reqId} not found in traceability.md.\n` +
423
- ` ${c.dim}List existing: specgate req list${c.reset}\n`);
415
+ process.stderr.write(`${ui_1.c.red}✖${ui_1.c.reset} ${reqId} not found in traceability.md.\n` +
416
+ ` ${ui_1.c.dim}List existing: specgate req list${ui_1.c.reset}\n`);
424
417
  process.exit(1);
425
418
  }
426
419
  const set = Object.keys(fields)
427
420
  .map((k) => `${k}=${fields[k]}`)
428
421
  .join(", ");
429
- process.stdout.write(`${c.green}✔${c.reset} ${c.bold}${reqId}${c.reset} ${c.dim}updated: ${set}${c.reset}\n`);
422
+ process.stdout.write(ui.ok(`${ui_1.c.bold}${reqId}${ui_1.c.reset} ${ui.muted(`updated: ${set}`)}`));
430
423
  process.exit(0);
431
424
  }
432
425
  if (sub === "done") {
@@ -1 +1 @@
1
- {"version":3,"file":"ReqCommand.js","sourceRoot":"","sources":["../../../../../scripts/cli/commands/spec/ReqCommand.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ReqCommand.js","sourceRoot":"","sources":["../../../../../scripts/cli/commands/spec/ReqCommand.ts"],"names":[],"mappings":"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"}
@@ -37,7 +37,9 @@ exports.StatusCommand = void 0;
37
37
  exports.parseArgs = parseArgs;
38
38
  exports.summarise = summarise;
39
39
  exports.needsOf = needsOf;
40
+ exports.forjaAddCommand = forjaAddCommand;
40
41
  exports.nextCommandPlain = nextCommandPlain;
42
+ exports.nextReason = nextReason;
41
43
  const fs = __importStar(require("node:fs"));
42
44
  const path = __importStar(require("node:path"));
43
45
  const project_root_1 = require("../../../lib/project-root");
@@ -51,16 +53,11 @@ const DerivedMatrixSources_1 = require("../../../../packages/core/src/infrastruc
51
53
  const MatrixCommand_1 = require("./MatrixCommand");
52
54
  const DraftCommand_1 = require("./DraftCommand");
53
55
  const derived_writes_1 = require("../../../lib/derived-writes");
54
- const COLOR_ENABLED = process.stdout.isTTY && process.env.NO_COLOR === undefined && process.env.TERM !== "dumb";
55
- const c = {
56
- reset: COLOR_ENABLED ? "\x1b[0m" : "",
57
- bold: COLOR_ENABLED ? "\x1b[1m" : "",
58
- dim: COLOR_ENABLED ? "\x1b[2m" : "",
59
- red: COLOR_ENABLED ? "\x1b[31m" : "",
60
- green: COLOR_ENABLED ? "\x1b[32m" : "",
61
- yellow: COLOR_ENABLED ? "\x1b[33m" : "",
62
- cyan: COLOR_ENABLED ? "\x1b[36m" : "",
63
- };
56
+ const Forja_1 = require("../project/Forja");
57
+ const ui_1 = require("../../../lib/ui");
58
+ const ui = __importStar(require("../../../lib/ui"));
59
+ const pet_1 = require("../../../pet/pet");
60
+ const PetCommand_1 = require("./PetCommand");
64
61
  function parseArgs(argv) {
65
62
  const opts = { projectDir: ".", format: "text" };
66
63
  for (let i = 0; i < argv.length; i++) {
@@ -72,13 +69,13 @@ function parseArgs(argv) {
72
69
  else if (a === "--json")
73
70
  opts.format = "json";
74
71
  else if (a === "--help" || a === "-h") {
75
- process.stdout.write(`\n ${c.bold}${c.cyan}📊 status${c.reset} ${c.dim}— project state at a glance + what to do next${c.reset}\n\n` +
76
- ` ${c.bold}USAGE${c.reset}\n` +
77
- ` ${c.cyan}specgate status${c.reset} [--project-dir <path>] [--json]\n\n` +
78
- ` ${c.bold}OPTIONS${c.reset}\n` +
79
- ` ${c.green}--project-dir <path>${c.reset} ${c.dim}Project root (auto-detected from cwd if omitted).${c.reset}\n` +
80
- ` ${c.green}--json${c.reset} ${c.dim}One JSON document on stdout; prose on stderr.${c.reset}\n` +
81
- ` ${c.green}-h, --help${c.reset} ${c.dim}Show this help.${c.reset}\n\n`);
72
+ process.stdout.write(`\n ${ui_1.c.bold}${ui_1.c.cyan}📊 status${ui_1.c.reset} ${ui_1.c.dim}— project state at a glance + what to do next${ui_1.c.reset}\n\n` +
73
+ ` ${ui_1.c.bold}USAGE${ui_1.c.reset}\n` +
74
+ ` ${ui_1.c.cyan}specgate status${ui_1.c.reset} [--project-dir <path>] [--json]\n\n` +
75
+ ` ${ui_1.c.bold}OPTIONS${ui_1.c.reset}\n` +
76
+ ` ${ui_1.c.green}--project-dir <path>${ui_1.c.reset} ${ui_1.c.dim}Project root (auto-detected from cwd if omitted).${ui_1.c.reset}\n` +
77
+ ` ${ui_1.c.green}--json${ui_1.c.reset} ${ui_1.c.dim}One JSON document on stdout; prose on stderr.${ui_1.c.reset}\n` +
78
+ ` ${ui_1.c.green}-h, --help${ui_1.c.reset} ${ui_1.c.dim}Show this help.${ui_1.c.reset}\n\n`);
82
79
  process.exit(0);
83
80
  }
84
81
  else if (a.startsWith("-")) {
@@ -118,7 +115,14 @@ function summarise(projectDir, traceContent) {
118
115
  counts[it.category] = (counts[it.category] || 0) + 1;
119
116
  const pending = items.length - counts.DONE;
120
117
  const orphans = (0, PlanCommand_1.detectOrphans)(projectDir, items);
121
- return { items, counts, pending, orphans, derived: (0, derived_writes_1.isDerivedProject)(projectDir) };
118
+ return {
119
+ items,
120
+ counts,
121
+ pending,
122
+ orphans,
123
+ derived: (0, derived_writes_1.isDerivedProject)(projectDir),
124
+ forja: (0, Forja_1.findForjaProject)(projectDir) !== null,
125
+ };
122
126
  }
123
127
  /**
124
128
  * Requirement → the open question that blocks it, as `Q3 (docs/specs/…/questions.md)`,
@@ -200,7 +204,25 @@ function firstReal(items) {
200
204
  function briefFirst({ items, brief }) {
201
205
  return brief && brief.next && !firstReal(items) ? brief.next : null;
202
206
  }
203
- function nextCommandPlain({ items, counts, orphans, derived, brief }) {
207
+ /**
208
+ * In a forja project the next requirement's code has a place to go: `add
209
+ * usecase` writes the use case there and the test that names the requirement
210
+ * (ADR-0033). The name comes from the scenario's file; the module is the
211
+ * user's to choose.
212
+ */
213
+ function forjaAddCommand(todo) {
214
+ // The matrix may hold the file as a link (`[x](features/x.feature)`): take the name.
215
+ const base = (/([^/\\[\]()`]+)\.feature/.exec(String(todo.featureFile || todo.feature_file || "")) ||
216
+ [])[1] || "";
217
+ const name = base
218
+ .split(/[^A-Za-z0-9]+/)
219
+ .filter(Boolean)
220
+ .map((w) => w[0].toUpperCase() + w.slice(1))
221
+ .join("") || "<Name>";
222
+ return `specgate add usecase <module>/${name} --req ${todo.requirement}`;
223
+ }
224
+ const needsCode = (todo) => ["NEEDS_EVERYTHING", "NEEDS_TEST", "NEEDS_IMPLEMENTATION"].includes(todo.category);
225
+ function nextCommandPlain({ items, counts, orphans, derived, brief, forja }) {
204
226
  const first = (cats) => (items || []).find((it) => cats.includes(it.category));
205
227
  if (orphans.length > 0)
206
228
  return "specgate fix";
@@ -216,6 +238,8 @@ function nextCommandPlain({ items, counts, orphans, derived, brief }) {
216
238
  return `specgate plan`;
217
239
  if (onlyBaseline(items))
218
240
  return 'specgate new "<a behaviour you rely on>"';
241
+ if (forja && needsCode(todo))
242
+ return forjaAddCommand(todo);
219
243
  // On a generated matrix a test that names its requirement is the link;
220
244
  // `done` is what you run once it exists, and it checks first.
221
245
  if (derived)
@@ -226,7 +250,7 @@ function nextCommandPlain({ items, counts, orphans, derived, brief }) {
226
250
  return 'specgate new "<what it does>"';
227
251
  return "specgate check";
228
252
  }
229
- function nextReason({ items, counts, orphans, derived, brief }) {
253
+ function nextReason({ items, counts, orphans, derived, brief, forja }) {
230
254
  if (orphans.length > 0)
231
255
  return `${orphans.length} orphan feature file(s) not in the matrix`;
232
256
  if ((items || []).some((it) => it.category === "NEEDS_STATUS_UPDATE"))
@@ -241,6 +265,8 @@ function nextReason({ items, counts, orphans, derived, brief }) {
241
265
  return `${todo.requirement}'s feature file is missing — plan shows which`;
242
266
  if (todo && onlyBaseline(items))
243
267
  return "only the adoption baseline is specified — add one requirement your code already meets";
268
+ if (todo && forja && needsCode(todo))
269
+ return `${todo.requirement}'s use case and the test that names it, where the architecture expects them`;
244
270
  if (todo && derived)
245
271
  return `once a test mentions ${todo.requirement} — that mention is the link; done checks first`;
246
272
  if (todo)
@@ -258,49 +284,69 @@ function titleOf(item) {
258
284
  return t && t !== "-" ? t : "";
259
285
  }
260
286
  function emitText(projectDir, summary, lock, notes = []) {
261
- const { items, counts, pending, orphans } = summary;
262
- process.stdout.write(`\n ${c.bold}📊 Project status${c.reset} ${c.dim}${path.basename(path.resolve(projectDir))}${c.reset}\n\n`);
263
- process.stdout.write(` ${c.bold}Requirements${c.reset} ${c.dim}${counts.total} total · ${counts.DONE} done · ${pending} pending${c.reset}\n`);
264
- const queue = (title, cats, color) => {
287
+ const { items, counts, orphans } = summary;
288
+ const out = (t) => process.stdout.write(t);
289
+ out(ui.header("status", path.basename(path.resolve(projectDir))));
290
+ out(` ${ui_1.c.bold}Requirements${ui_1.c.reset} ${ui.progress(counts.DONE, counts.total, "done")}\n`);
291
+ const queue = (title, cats, mark, color) => {
265
292
  const group = items.filter((it) => cats.includes(it.category));
266
293
  if (group.length === 0)
267
294
  return;
268
- process.stdout.write(`\n ${c.bold}${title}${c.reset}\n`);
269
- for (const it of group.slice(0, QUEUE_LIMIT)) {
295
+ out("\n" + ui.section(title));
296
+ const rows = group.slice(0, QUEUE_LIMIT).map((it) => {
270
297
  const name = titleOf(it);
271
- process.stdout.write(` ${c.cyan}${String(it.requirement).padEnd(9)}${c.reset} ${(name.length > 44 ? name.slice(0, 43) + "…" : name).padEnd(45)} ${color}${needsOf(it)}${c.reset}\n`);
272
- }
298
+ return [
299
+ `${mark} ${ui_1.c.accent}${it.requirement}${ui_1.c.reset}`,
300
+ name.length > 44 ? name.slice(0, 43) + "…" : name,
301
+ `${color}${needsOf(it)}${ui_1.c.reset}`,
302
+ ];
303
+ });
304
+ out(ui.table(rows));
273
305
  if (group.length > QUEUE_LIMIT)
274
- process.stdout.write(` ${c.dim}… ${group.length - QUEUE_LIMIT} more — specgate plan lists them all${c.reset}\n`);
306
+ out(` ${ui.muted(`… ${group.length - QUEUE_LIMIT} more — specgate plan lists them all`)}\n`);
275
307
  };
276
- queue("Ready to close", ["NEEDS_STATUS_UPDATE"], c.green);
277
- queue("To do", TODO_CATEGORIES, c.yellow);
278
- queue("Waiting for an answer", ["WAITING_FOR_ANSWER"], c.dim);
308
+ queue("Ready to close", ["NEEDS_STATUS_UPDATE"], ui.state("ready"), ui_1.c.ok);
309
+ queue("To do", TODO_CATEGORIES, ui.state("todo"), ui_1.c.warn);
310
+ queue("Waiting for an answer", ["WAITING_FOR_ANSWER"], ui.state("blocked"), ui_1.c.muted);
279
311
  const waiting = items.filter((it) => it.category === "WAITING_FOR_ANSWER" && it.question);
280
312
  if (waiting.length > 0)
281
- process.stdout.write(` ${c.dim}Questions: ${[...new Set(waiting.map((it) => it.question))].join(" · ")}${c.reset}\n`);
313
+ out(` ${ui.muted(`Questions: ${[...new Set(waiting.map((it) => it.question))].join(" · ")}`)}\n`);
282
314
  if (orphans.length > 0)
283
- process.stdout.write(`\n ${c.red}${orphans.length} orphan feature file(s)${c.reset} ${c.dim}— not in the matrix${c.reset}\n`);
315
+ out("\n" + ui.fail(`${orphans.length} orphan feature file(s) ${ui.muted("— not in the matrix")}`));
284
316
  if (notes.length > 0) {
285
- process.stdout.write(`\n ${c.bold}Spec notes${c.reset} ${c.dim}(not failures — ADR-0029)${c.reset}\n`);
286
- for (const n of notes.slice(0, 5)) {
287
- process.stdout.write(` ${c.yellow}${n.code}${c.reset} ${n.message}\n`);
288
- }
317
+ out("\n" + ui.section("Spec notes"));
318
+ out(` ${ui.muted("Not failures — ADR-0029")}\n`);
319
+ for (const n of notes.slice(0, 5))
320
+ out(` ${ui_1.c.warn}${ui_1.sym.warn}${ui_1.c.reset} ${ui.muted(n.code)} ${n.message}\n`);
289
321
  if (notes.length > 5)
290
- process.stdout.write(` ${c.dim}… ${notes.length - 5} more in --json${c.reset}\n`);
322
+ out(` ${ui.muted(`… ${notes.length - 5} more in --json`)}\n`);
291
323
  }
292
324
  if (summary.brief) {
293
325
  const b = summary.brief;
294
326
  const done = b.modules.filter((m) => m.state === "archived").length;
295
- process.stdout.write(`\n ${c.bold}Brief${c.reset} ${c.dim}${b.brief} · ${done} of ${b.modules.length} module(s) drafted${b.next ? ` · next: ${b.next.module}` : ""}${c.reset}\n`);
327
+ out(`\n ${ui_1.c.bold}Brief${ui_1.c.reset} ${ui.progress(done, b.modules.length, "module(s) drafted")}` +
328
+ `${b.next ? ` ${ui.muted("next:")} ${b.next.module}` : ""} ${ui.muted(b.brief)}\n`);
296
329
  }
297
330
  if (lock && lock.packs && lock.packs.length > 0) {
298
- process.stdout.write(`\n ${c.bold}Packs${c.reset} ${c.dim}(.specops.lock)${c.reset}\n`);
299
- for (const p of lock.packs) {
300
- process.stdout.write(` ${c.cyan}${p.pack_id || "?"}${c.reset} ${c.dim}@ ${p.version || "?"}${c.reset}\n`);
301
- }
331
+ out("\n" + ui.section("Packs"));
332
+ out(ui.table(lock.packs.map((p) => [
333
+ `${ui_1.c.accent}${p.pack_id || "?"}${ui_1.c.reset}`,
334
+ ui.muted(`@ ${p.version || "?"}`),
335
+ ])));
336
+ }
337
+ out(ui.next(nextCommandPlain(summary), nextReason(summary)));
338
+ // The cat, at the foot of the dashboard: a terminal only — never in a log, a
339
+ // pipe or CI, where it would be noise — and gone with `config set pet off`.
340
+ const showPet = process.env.SPECGATE_PET === "1" ||
341
+ (!!process.stdout.isTTY && !process.env.CI && process.env.SPECGATE_NESTED !== "1");
342
+ if (showPet && (0, pet_1.petEnabled)(projectDir)) {
343
+ const view = (0, PetCommand_1.petFor)(projectDir, summary);
344
+ if (view)
345
+ out((0, pet_1.miniPet)(view));
302
346
  }
303
- process.stdout.write(`\n ${c.bold}Next${c.reset} ${c.green}${nextCommandPlain(summary)}${c.reset} ${c.dim}— ${nextReason(summary)}${c.reset}\n\n`);
347
+ // A bare `specgate` shows this screen: say where the rest of the tool is.
348
+ if (process.env.SPECGATE_BARE === "1")
349
+ out(` ${ui.muted("All commands: specgate --help")}\n\n`);
304
350
  }
305
351
  function emitJson(projectDir, summary, lock, notes = []) {
306
352
  const { counts, pending, orphans } = summary;
@@ -351,8 +397,8 @@ class StatusCommand extends command_1.BaseCommand {
351
397
  }
352
398
  const tracePath = path.join(projectDir, "docs/specs/traceability.md");
353
399
  if (!fs.existsSync(tracePath)) {
354
- process.stderr.write(`${c.red}✖${c.reset} docs/specs/traceability.md not found in ${projectDir}\n` +
355
- ` ${c.dim}Not a spec-driven project? Scaffold one with \`specgate init\`.${c.reset}\n`);
400
+ process.stderr.write(`${ui_1.c.red}✖${ui_1.c.reset} docs/specs/traceability.md not found in ${projectDir}\n` +
401
+ ` ${ui_1.c.dim}Not a spec-driven project? Scaffold one with \`specgate init\`.${ui_1.c.reset}\n`);
356
402
  process.exit(2);
357
403
  }
358
404
  // A generated matrix is a cache: read it fresh.