@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.
- package/CHANGELOG.md +122 -1
- package/bin/specgate.ts +47 -47
- package/dist/bin/specgate.js +47 -46
- package/dist/bin/specgate.js.map +1 -1
- package/dist/packages/core/src/application/ArchiveChangeUseCase.js +1 -1
- package/dist/packages/core/src/application/ArchiveChangeUseCase.js.map +1 -1
- package/dist/packages/core/src/application/ValidateProjectUseCase.js +1 -1
- package/dist/packages/core/src/application/ValidateProjectUseCase.js.map +1 -1
- package/dist/packages/core/src/domain/ChangeTemplates.js +1 -1
- package/dist/packages/core/src/domain/DeltaFeature.js +3 -3
- package/dist/packages/core/src/domain/DeltaFeature.js.map +1 -1
- package/dist/packages/core/src/domain/DerivedMatrix.js +9 -9
- package/dist/packages/core/src/domain/DerivedMatrix.js.map +1 -1
- package/dist/packages/core/src/domain/DoneVerification.js +10 -2
- package/dist/packages/core/src/domain/DoneVerification.js.map +1 -1
- package/dist/packages/core/src/domain/DraftChecklist.js +3 -3
- package/dist/packages/core/src/domain/DraftChecklist.js.map +1 -1
- package/dist/packages/core/src/domain/GherkinTags.js +12 -12
- package/dist/packages/core/src/domain/GherkinTags.js.map +1 -1
- package/dist/packages/core/src/domain/HarnessConfig.js +1 -0
- package/dist/packages/core/src/domain/HarnessConfig.js.map +1 -1
- package/dist/packages/core/src/domain/InboundChange.js +1 -1
- package/dist/packages/core/src/domain/InboundChange.js.map +1 -1
- package/dist/packages/core/src/domain/Language.js +2 -2
- package/dist/packages/core/src/domain/Language.js.map +1 -1
- package/dist/packages/core/src/domain/Lockfile.js +7 -7
- package/dist/packages/core/src/domain/Lockfile.js.map +1 -1
- package/dist/packages/core/src/domain/PackDelta.js +1 -1
- package/dist/packages/core/src/domain/PackDelta.js.map +1 -1
- package/dist/packages/core/src/domain/RequirementGraph.js +2 -2
- package/dist/packages/core/src/domain/SpecParser.js +6 -6
- package/dist/packages/core/src/domain/SpecParser.js.map +1 -1
- package/dist/packages/core/src/domain/TraceMerge.js +4 -4
- package/dist/packages/core/src/domain/TraceMerge.js.map +1 -1
- package/dist/packages/core/src/domain/TraceabilityFormat.js +4 -4
- package/dist/packages/core/src/domain/TraceabilityFormat.js.map +1 -1
- package/dist/packages/core/src/domain/ValueAnnotations.js +8 -8
- package/dist/packages/core/src/domain/ValueAnnotations.js.map +1 -1
- package/dist/packages/core/src/domain/WriteScope.js +3 -3
- package/dist/packages/core/src/domain/WriteScope.js.map +1 -1
- package/dist/packages/core/src/infrastructure/ChangeWorkspace.js +2 -2
- package/dist/packages/core/src/infrastructure/ChangeWorkspace.js.map +1 -1
- package/dist/packages/core/src/infrastructure/ConsoleReporter.js +2 -2
- package/dist/packages/core/src/infrastructure/ConsoleReporter.js.map +1 -1
- package/dist/packages/core/src/infrastructure/DerivedMatrixSources.js +2 -2
- package/dist/packages/core/src/infrastructure/DerivedMatrixSources.js.map +1 -1
- package/dist/packages/core/src/infrastructure/DiskLanguageRepository.js +4 -4
- package/dist/packages/core/src/infrastructure/DiskLanguageRepository.js.map +1 -1
- package/dist/packages/core/src/infrastructure/DiskPackDeltaRepository.js +1 -1
- package/dist/packages/core/src/infrastructure/DiskPackDeltaRepository.js.map +1 -1
- package/dist/packages/core/src/infrastructure/GitContributionStager.js +3 -3
- package/dist/packages/core/src/infrastructure/GitContributionStager.js.map +1 -1
- package/dist/packages/core/src/infrastructure/HarnessConfigFile.js +12 -3
- package/dist/packages/core/src/infrastructure/HarnessConfigFile.js.map +1 -1
- package/dist/packages/core/src/infrastructure/RemotePackResolver.js +5 -5
- package/dist/packages/core/src/infrastructure/RemotePackResolver.js.map +1 -1
- package/dist/packages/core/test/unit/delta-feature.test.js +3 -3
- package/dist/packages/core/test/unit/delta-feature.test.js.map +1 -1
- package/dist/packages/core/test/unit/derived-matrix.test.js +8 -8
- package/dist/packages/core/test/unit/derived-matrix.test.js.map +1 -1
- package/dist/packages/core/test/unit/gherkin-tags.test.js +8 -8
- package/dist/packages/core/test/unit/gherkin-tags.test.js.map +1 -1
- package/dist/packages/core/test/unit/inbound-change.test.js +1 -1
- package/dist/packages/core/test/unit/inbound-change.test.js.map +1 -1
- package/dist/packages/core/test/unit/matrix-dependencies.test.js +5 -5
- package/dist/packages/core/test/unit/matrix-dependencies.test.js.map +1 -1
- package/dist/packages/core/test/unit/new-requirement.test.js +1 -1
- package/dist/packages/core/test/unit/new-requirement.test.js.map +1 -1
- package/dist/packages/core/test/unit/value-annotations.test.js +5 -5
- package/dist/packages/core/test/unit/value-annotations.test.js.map +1 -1
- package/dist/packages/core/test/unit/write-scope-status.test.js +5 -5
- package/dist/packages/core/test/unit/write-scope-status.test.js.map +1 -1
- package/dist/packages/mcp-spec-driven/src/native-tools.js +3 -3
- package/dist/packages/mcp-spec-driven/src/native-tools.js.map +1 -1
- package/dist/packages/mcp-spec-driven/src/server.js +1 -7
- package/dist/packages/mcp-spec-driven/src/server.js.map +1 -1
- package/dist/packages/mcp-spec-driven/src/tools.js +4 -4
- package/dist/packages/mcp-spec-driven/src/tools.js.map +1 -1
- package/dist/scripts/add.js +10 -0
- package/dist/scripts/add.js.map +1 -0
- package/dist/scripts/agents/init.js +26 -47
- package/dist/scripts/agents/init.js.map +1 -1
- package/dist/scripts/alm/cli.js +37 -3
- package/dist/scripts/alm/cli.js.map +1 -1
- package/dist/scripts/alm/providers/index.js +1 -1
- package/dist/scripts/alm/providers/index.js.map +1 -1
- package/dist/scripts/change/instructions.js +2 -2
- package/dist/scripts/change/instructions.js.map +1 -1
- package/dist/scripts/cli/commands/alm/PullCommand.js +1 -1
- package/dist/scripts/cli/commands/alm/PullCommand.js.map +1 -1
- package/dist/scripts/cli/commands/change/ChangeCommand.js +99 -98
- package/dist/scripts/cli/commands/change/ChangeCommand.js.map +1 -1
- package/dist/scripts/cli/commands/config/CiInitCommand.js +6 -4
- package/dist/scripts/cli/commands/config/CiInitCommand.js.map +1 -1
- package/dist/scripts/cli/commands/config/CompletionCommand.js +10 -10
- package/dist/scripts/cli/commands/config/CompletionCommand.js.map +1 -1
- package/dist/scripts/cli/commands/config/ConfigInitCommand.js +11 -19
- package/dist/scripts/cli/commands/config/ConfigInitCommand.js.map +1 -1
- package/dist/scripts/cli/commands/config/ConfigSetCommand.js +24 -11
- package/dist/scripts/cli/commands/config/ConfigSetCommand.js.map +1 -1
- package/dist/scripts/cli/commands/harness/RunCommand.js +94 -38
- package/dist/scripts/cli/commands/harness/RunCommand.js.map +1 -1
- package/dist/scripts/cli/commands/pack/BundlePackCommand.js +36 -2
- package/dist/scripts/cli/commands/pack/BundlePackCommand.js.map +1 -1
- package/dist/scripts/cli/commands/pack/ExpandDomainPackCommand.js +2 -2
- package/dist/scripts/cli/commands/pack/ExpandDomainPackCommand.js.map +1 -1
- package/dist/scripts/cli/commands/pack/InferPackCommand.js +2 -1
- package/dist/scripts/cli/commands/pack/InferPackCommand.js.map +1 -1
- package/dist/scripts/cli/commands/pack/InitPackCommand.js +23 -32
- package/dist/scripts/cli/commands/pack/InitPackCommand.js.map +1 -1
- package/dist/scripts/cli/commands/pack/LintPackCommand.js +4 -3
- package/dist/scripts/cli/commands/pack/LintPackCommand.js.map +1 -1
- package/dist/scripts/cli/commands/project/AddCommand.js +75 -0
- package/dist/scripts/cli/commands/project/AddCommand.js.map +1 -0
- package/dist/scripts/cli/commands/project/AdoptCommand.js +9 -3
- package/dist/scripts/cli/commands/project/AdoptCommand.js.map +1 -1
- package/dist/scripts/cli/commands/project/Forja.js +104 -0
- package/dist/scripts/cli/commands/project/Forja.js.map +1 -0
- package/dist/scripts/cli/commands/project/InitProjectCommand.js +61 -6
- package/dist/scripts/cli/commands/project/InitProjectCommand.js.map +1 -1
- package/dist/scripts/cli/commands/project/OnboardCommand.js +17 -24
- package/dist/scripts/cli/commands/project/OnboardCommand.js.map +1 -1
- package/dist/scripts/cli/commands/project/UpdateCommand.js +23 -43
- package/dist/scripts/cli/commands/project/UpdateCommand.js.map +1 -1
- package/dist/scripts/cli/commands/quality/CheckCommand.js +50 -22
- package/dist/scripts/cli/commands/quality/CheckCommand.js.map +1 -1
- package/dist/scripts/cli/commands/quality/DoctorCommand.js +27 -10
- package/dist/scripts/cli/commands/quality/DoctorCommand.js.map +1 -1
- package/dist/scripts/cli/commands/quality/FixCommand.js +24 -29
- package/dist/scripts/cli/commands/quality/FixCommand.js.map +1 -1
- package/dist/scripts/cli/commands/quality/ReportCommand.js +8 -4
- package/dist/scripts/cli/commands/quality/ReportCommand.js.map +1 -1
- package/dist/scripts/cli/commands/quality/ValidateSpecsCommand.js +69 -16
- package/dist/scripts/cli/commands/quality/ValidateSpecsCommand.js.map +1 -1
- package/dist/scripts/cli/commands/spec/DoneCommand.js +69 -28
- package/dist/scripts/cli/commands/spec/DoneCommand.js.map +1 -1
- package/dist/scripts/cli/commands/spec/DraftCommand.js +166 -81
- package/dist/scripts/cli/commands/spec/DraftCommand.js.map +1 -1
- package/dist/scripts/cli/commands/spec/MatrixCommand.js +24 -27
- package/dist/scripts/cli/commands/spec/MatrixCommand.js.map +1 -1
- package/dist/scripts/cli/commands/spec/NewCommand.js +11 -14
- package/dist/scripts/cli/commands/spec/NewCommand.js.map +1 -1
- package/dist/scripts/cli/commands/spec/PetCommand.js +102 -0
- package/dist/scripts/cli/commands/spec/PetCommand.js.map +1 -0
- package/dist/scripts/cli/commands/spec/PlanCommand.js +34 -39
- package/dist/scripts/cli/commands/spec/PlanCommand.js.map +1 -1
- package/dist/scripts/cli/commands/spec/ReqCommand.js +51 -58
- package/dist/scripts/cli/commands/spec/ReqCommand.js.map +1 -1
- package/dist/scripts/cli/commands/spec/StatusCommand.js +93 -47
- package/dist/scripts/cli/commands/spec/StatusCommand.js.map +1 -1
- package/dist/scripts/cli/commands/spec/StudioCommand.js +16 -24
- package/dist/scripts/cli/commands/spec/StudioCommand.js.map +1 -1
- package/dist/scripts/cli/commands/specops/ContributeCommand.js +24 -32
- package/dist/scripts/cli/commands/specops/ContributeCommand.js.map +1 -1
- package/dist/scripts/cli/commands/specops/DiffCommand.js +3 -2
- package/dist/scripts/cli/commands/specops/DiffCommand.js.map +1 -1
- package/dist/scripts/cli/commands/specops/SyncCommand.js +4 -3
- package/dist/scripts/cli/commands/specops/SyncCommand.js.map +1 -1
- package/dist/scripts/docs/blocks.js +4 -4
- package/dist/scripts/docs/blocks.js.map +1 -1
- package/dist/scripts/docs/build-site.js +104 -9
- package/dist/scripts/docs/build-site.js.map +1 -1
- package/dist/scripts/docs/components.js +30 -25
- package/dist/scripts/docs/components.js.map +1 -1
- package/dist/scripts/docs/nav.js +144 -40
- package/dist/scripts/docs/nav.js.map +1 -1
- package/dist/scripts/docs/record-journey.js +2 -2
- package/dist/scripts/docs/record-journey.js.map +1 -1
- package/dist/scripts/docs/record-terminal.js +12 -12
- package/dist/scripts/docs/record-terminal.js.map +1 -1
- package/dist/scripts/draft/brief-setup.js +4 -0
- package/dist/scripts/draft/brief-setup.js.map +1 -1
- package/dist/scripts/draft/confined-agent.js +19 -0
- package/dist/scripts/draft/confined-agent.js.map +1 -1
- package/dist/scripts/draft/drafting-guide.js +3 -1
- package/dist/scripts/draft/drafting-guide.js.map +1 -1
- package/dist/scripts/gen_mcp_tools.js +4 -4
- package/dist/scripts/gen_mcp_tools.js.map +1 -1
- package/dist/scripts/harness/init.js +25 -16
- package/dist/scripts/harness/init.js.map +1 -1
- package/dist/scripts/harness/report.js +39 -40
- package/dist/scripts/harness/report.js.map +1 -1
- package/dist/scripts/harness/worktree-lock.js +2 -2
- package/dist/scripts/harness/worktree-lock.js.map +1 -1
- package/dist/scripts/lib/command.js +3 -2
- package/dist/scripts/lib/command.js.map +1 -1
- package/dist/scripts/lib/derived-writes.js +1 -1
- package/dist/scripts/lib/diagnostics.js +12 -16
- package/dist/scripts/lib/diagnostics.js.map +1 -1
- package/dist/scripts/lib/placeholders.js +4 -4
- package/dist/scripts/lib/placeholders.js.map +1 -1
- package/dist/scripts/lib/surface.js +45 -14
- package/dist/scripts/lib/surface.js.map +1 -1
- package/dist/scripts/lib/ui.js +356 -0
- package/dist/scripts/lib/ui.js.map +1 -0
- package/dist/scripts/merge-traceability.js +3 -3
- package/dist/scripts/pet/pet.js +331 -0
- package/dist/scripts/pet/pet.js.map +1 -0
- package/dist/scripts/pet.js +10 -0
- package/dist/scripts/pet.js.map +1 -0
- package/dist/scripts/plugin/gate-hook.js +1 -1
- package/dist/scripts/plugin/gate-hook.js.map +1 -1
- package/dist/scripts/schema/registry.js +2 -2
- package/dist/scripts/schema/registry.js.map +1 -1
- package/dist/scripts/specops/add.js +23 -32
- package/dist/scripts/specops/add.js.map +1 -1
- package/dist/scripts/specops/lock.js +4 -4
- package/dist/scripts/specops/lock.js.map +1 -1
- package/dist/scripts/specops/remove.js +15 -24
- package/dist/scripts/specops/remove.js.map +1 -1
- 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
|
|
60
|
-
const
|
|
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(
|
|
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(
|
|
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 || ""
|
|
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(` ${
|
|
233
|
+
process.stdout.write(` ${ui.muted(`feature ${r.featureFile}`)}\n`);
|
|
242
234
|
if (meaningful(r.testArtifact))
|
|
243
|
-
process.stdout.write(` ${
|
|
235
|
+
process.stdout.write(` ${ui.muted(`test ${r.testArtifact}`)}\n`);
|
|
244
236
|
if (meaningful(r.technicalArtifact))
|
|
245
|
-
process.stdout.write(` ${
|
|
237
|
+
process.stdout.write(` ${ui.muted(`code ${r.technicalArtifact}`)}\n`);
|
|
246
238
|
}
|
|
247
|
-
process.stdout.write(
|
|
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(
|
|
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
|
-
?
|
|
329
|
+
? ui.fileLine("changed", "spec.md", `draft ## ${result.reqId} section — rewrite the obligation`)
|
|
337
330
|
: "") +
|
|
338
|
-
`
|
|
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
|
|
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(`${
|
|
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
|
|
55
|
-
const
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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 {
|
|
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
|
-
|
|
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,
|
|
262
|
-
process.stdout.write(
|
|
263
|
-
|
|
264
|
-
|
|
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
|
-
|
|
269
|
-
|
|
295
|
+
out("\n" + ui.section(title));
|
|
296
|
+
const rows = group.slice(0, QUEUE_LIMIT).map((it) => {
|
|
270
297
|
const name = titleOf(it);
|
|
271
|
-
|
|
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
|
-
|
|
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.
|
|
277
|
-
queue("To do", TODO_CATEGORIES, c.
|
|
278
|
-
queue("Waiting for an answer", ["WAITING_FOR_ANSWER"], c.
|
|
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
|
-
|
|
313
|
+
out(` ${ui.muted(`Questions: ${[...new Set(waiting.map((it) => it.question))].join(" · ")}`)}\n`);
|
|
282
314
|
if (orphans.length > 0)
|
|
283
|
-
|
|
315
|
+
out("\n" + ui.fail(`${orphans.length} orphan feature file(s) ${ui.muted("— not in the matrix")}`));
|
|
284
316
|
if (notes.length > 0) {
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
299
|
-
|
|
300
|
-
|
|
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
|
-
|
|
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.
|