@rsaglobaltech/specgate 0.27.9 → 1.0.0-rc.2
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 +57 -0
- package/dist/packages/core/src/application/ValidateChangeUseCase.js +19 -3
- package/dist/packages/core/src/application/ValidateChangeUseCase.js.map +1 -1
- package/dist/packages/core/src/domain/ApiContract.js +157 -0
- package/dist/packages/core/src/domain/ApiContract.js.map +1 -0
- package/dist/packages/core/src/domain/Approvals.js +127 -0
- package/dist/packages/core/src/domain/Approvals.js.map +1 -0
- package/dist/packages/core/src/domain/ChangeLayers.js +285 -0
- package/dist/packages/core/src/domain/ChangeLayers.js.map +1 -0
- package/dist/packages/core/src/domain/HarnessConfig.js.map +1 -1
- package/dist/packages/core/src/domain/HarnessGaps.js +182 -0
- package/dist/packages/core/src/domain/HarnessGaps.js.map +1 -0
- package/dist/packages/core/src/domain/HarnessReport.js +16 -1
- package/dist/packages/core/src/domain/HarnessReport.js.map +1 -1
- package/dist/packages/core/src/domain/HarnessRun.js.map +1 -1
- package/dist/packages/core/src/domain/Principles.js +119 -0
- package/dist/packages/core/src/domain/Principles.js.map +1 -0
- package/dist/packages/core/src/domain/RequirementGraph.js +12 -1
- package/dist/packages/core/src/domain/RequirementGraph.js.map +1 -1
- package/dist/packages/core/src/domain/Workspace.js +150 -0
- package/dist/packages/core/src/domain/Workspace.js.map +1 -0
- package/dist/packages/core/src/domain/WorkspaceStory.js +176 -0
- package/dist/packages/core/src/domain/WorkspaceStory.js.map +1 -0
- package/dist/packages/core/src/index.js +1 -0
- package/dist/packages/core/src/index.js.map +1 -1
- package/dist/packages/core/src/infrastructure/HarnessConfigFile.js +12 -0
- package/dist/packages/core/src/infrastructure/HarnessConfigFile.js.map +1 -1
- package/dist/packages/mcp-spec-driven/src/tools.js +18 -0
- package/dist/packages/mcp-spec-driven/src/tools.js.map +1 -1
- package/dist/scripts/alm/cli.js +45 -4
- package/dist/scripts/alm/cli.js.map +1 -1
- package/dist/scripts/alm/clients.js +3 -1
- package/dist/scripts/alm/clients.js.map +1 -1
- package/dist/scripts/alm/phases.js +279 -0
- package/dist/scripts/alm/phases.js.map +1 -0
- package/dist/scripts/alm/port.js +33 -5
- package/dist/scripts/alm/port.js.map +1 -1
- package/dist/scripts/alm/providers/azure.js +72 -11
- package/dist/scripts/alm/providers/azure.js.map +1 -1
- package/dist/scripts/alm/providers/github.js +67 -7
- package/dist/scripts/alm/providers/github.js.map +1 -1
- package/dist/scripts/alm/providers/index.js +8 -2
- package/dist/scripts/alm/providers/index.js.map +1 -1
- package/dist/scripts/alm/providers/jira.js +86 -8
- package/dist/scripts/alm/providers/jira.js.map +1 -1
- package/dist/scripts/alm/providers/linear.js +167 -0
- package/dist/scripts/alm/providers/linear.js.map +1 -0
- package/dist/scripts/change/artifacts.js +15 -1
- package/dist/scripts/change/artifacts.js.map +1 -1
- package/dist/scripts/change/instructions.js +47 -5
- package/dist/scripts/change/instructions.js.map +1 -1
- package/dist/scripts/cli/commands/alm/PhaseCommand.js +153 -0
- package/dist/scripts/cli/commands/alm/PhaseCommand.js.map +1 -0
- package/dist/scripts/cli/commands/alm/PullCommand.js +33 -2
- package/dist/scripts/cli/commands/alm/PullCommand.js.map +1 -1
- package/dist/scripts/cli/commands/alm/pull-back.js +104 -0
- package/dist/scripts/cli/commands/alm/pull-back.js.map +1 -0
- package/dist/scripts/cli/commands/change/ChangeCommand.js +149 -15
- package/dist/scripts/cli/commands/change/ChangeCommand.js.map +1 -1
- package/dist/scripts/cli/commands/change/TicketCommand.js +20 -7
- package/dist/scripts/cli/commands/change/TicketCommand.js.map +1 -1
- package/dist/scripts/cli/commands/harness/RunCommand.js +64 -20
- package/dist/scripts/cli/commands/harness/RunCommand.js.map +1 -1
- package/dist/scripts/cli/commands/project/AdoptCommand.js +44 -4
- package/dist/scripts/cli/commands/project/AdoptCommand.js.map +1 -1
- package/dist/scripts/cli/commands/project/InitProjectCommand.js +9 -14
- package/dist/scripts/cli/commands/project/InitProjectCommand.js.map +1 -1
- package/dist/scripts/cli/commands/project/MigrateCommand.js +166 -0
- package/dist/scripts/cli/commands/project/MigrateCommand.js.map +1 -0
- package/dist/scripts/cli/commands/project/OnboardCommand.js +23 -5
- package/dist/scripts/cli/commands/project/OnboardCommand.js.map +1 -1
- package/dist/scripts/cli/commands/quality/CheckCommand.js +25 -0
- package/dist/scripts/cli/commands/quality/CheckCommand.js.map +1 -1
- package/dist/scripts/cli/commands/quality/ValidateSpecsCommand.js +15 -0
- package/dist/scripts/cli/commands/quality/ValidateSpecsCommand.js.map +1 -1
- package/dist/scripts/cli/commands/spec/ContractCommand.js +117 -0
- package/dist/scripts/cli/commands/spec/ContractCommand.js.map +1 -0
- package/dist/scripts/cli/commands/spec/DoneCommand.js +22 -0
- package/dist/scripts/cli/commands/spec/DoneCommand.js.map +1 -1
- package/dist/scripts/cli/commands/spec/DraftCommand.js +22 -8
- package/dist/scripts/cli/commands/spec/DraftCommand.js.map +1 -1
- package/dist/scripts/cli/commands/spec/DriftCommand.js +128 -0
- package/dist/scripts/cli/commands/spec/DriftCommand.js.map +1 -0
- package/dist/scripts/cli/commands/spec/StatusCommand.js +85 -0
- package/dist/scripts/cli/commands/spec/StatusCommand.js.map +1 -1
- package/dist/scripts/cli/commands/spec/StudioCommand.js +48 -6
- package/dist/scripts/cli/commands/spec/StudioCommand.js.map +1 -1
- package/dist/scripts/cli/commands/workspace/WorkspaceCommand.js +612 -0
- package/dist/scripts/cli/commands/workspace/WorkspaceCommand.js.map +1 -0
- package/dist/scripts/contract.js +10 -0
- package/dist/scripts/contract.js.map +1 -0
- package/dist/scripts/docs/nav.js +16 -1
- package/dist/scripts/docs/nav.js.map +1 -1
- package/dist/scripts/draft/drafting-guide.js +6 -0
- package/dist/scripts/draft/drafting-guide.js.map +1 -1
- package/dist/scripts/draft/ticket-guide.js +5 -0
- package/dist/scripts/draft/ticket-guide.js.map +1 -1
- package/dist/scripts/drift.js +10 -0
- package/dist/scripts/drift.js.map +1 -0
- package/dist/scripts/harness/gap-evidence.js +149 -0
- package/dist/scripts/harness/gap-evidence.js.map +1 -0
- package/dist/scripts/harness/prompt.js +54 -1
- package/dist/scripts/harness/prompt.js.map +1 -1
- package/dist/scripts/harness/report.js +104 -5
- package/dist/scripts/harness/report.js.map +1 -1
- package/dist/scripts/lib/approvals.js +243 -0
- package/dist/scripts/lib/approvals.js.map +1 -0
- package/dist/scripts/lib/change-review.js +19 -11
- package/dist/scripts/lib/change-review.js.map +1 -1
- package/dist/scripts/lib/contracts.js +211 -0
- package/dist/scripts/lib/contracts.js.map +1 -0
- package/dist/scripts/lib/drift.js +80 -0
- package/dist/scripts/lib/drift.js.map +1 -0
- package/dist/scripts/lib/live-model.js +1 -0
- package/dist/scripts/lib/live-model.js.map +1 -1
- package/dist/scripts/lib/migrate.js +264 -0
- package/dist/scripts/lib/migrate.js.map +1 -0
- package/dist/scripts/lib/role-packages.js +230 -0
- package/dist/scripts/lib/role-packages.js.map +1 -0
- package/dist/scripts/lib/steering.js +180 -0
- package/dist/scripts/lib/steering.js.map +1 -0
- package/dist/scripts/lib/studio-app-page.js +28 -5
- package/dist/scripts/lib/studio-app-page.js.map +1 -1
- package/dist/scripts/lib/studio-app.js +29 -0
- package/dist/scripts/lib/studio-app.js.map +1 -1
- package/dist/scripts/lib/studio-route.js +20 -0
- package/dist/scripts/lib/studio-route.js.map +1 -1
- package/dist/scripts/lib/surface.js +55 -0
- package/dist/scripts/lib/surface.js.map +1 -1
- package/dist/scripts/lib/workspace-draft.js +146 -0
- package/dist/scripts/lib/workspace-draft.js.map +1 -0
- package/dist/scripts/lib/workspace-live-page.js +90 -0
- package/dist/scripts/lib/workspace-live-page.js.map +1 -0
- package/dist/scripts/lib/workspace-live.js +199 -0
- package/dist/scripts/lib/workspace-live.js.map +1 -0
- package/dist/scripts/lib/workspace.js +619 -0
- package/dist/scripts/lib/workspace.js.map +1 -0
- package/dist/scripts/migrate.js +10 -0
- package/dist/scripts/migrate.js.map +1 -0
- package/dist/scripts/schema/registry.js +12 -0
- package/dist/scripts/schema/registry.js.map +1 -1
- package/dist/scripts/workspace.js +10 -0
- package/dist/scripts/workspace.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* The three layers of a change (ADR-0042): what the business needs, how the
|
|
4
|
+
* system will do it, and the work that does it — each with the role that owns
|
|
5
|
+
* it, so a product owner, an architect and a developer each write and review
|
|
6
|
+
* their own part instead of one proposal that mixes the three.
|
|
7
|
+
*
|
|
8
|
+
* Pure: the caller reads the files. A 0.27 change has no `discover.md`; its
|
|
9
|
+
* `proposal.md` is read as the Discover, and a missing `design.md` is a
|
|
10
|
+
* warning that names `specgate migrate 1.0`, never an error — a change already
|
|
11
|
+
* in flight stays valid.
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.layer = exports.LEGACY_DISCOVER = exports.LAYERED_SCHEMA = exports.LAYERS = void 0;
|
|
15
|
+
exports.templateDiscover = templateDiscover;
|
|
16
|
+
exports.templateLayeredDesign = templateLayeredDesign;
|
|
17
|
+
exports.templateLayeredTasks = templateLayeredTasks;
|
|
18
|
+
exports.templateDraftTasks = templateDraftTasks;
|
|
19
|
+
exports.isUntouchedLayer = isUntouchedLayer;
|
|
20
|
+
exports.designFromProposal = designFromProposal;
|
|
21
|
+
exports.acceptanceCriteria = acceptanceCriteria;
|
|
22
|
+
exports.checkLayers = checkLayers;
|
|
23
|
+
exports.discoverRewritten = discoverRewritten;
|
|
24
|
+
const Diagnostic_1 = require("./Diagnostic");
|
|
25
|
+
const BriefCards_1 = require("./BriefCards");
|
|
26
|
+
exports.LAYERS = Object.freeze([
|
|
27
|
+
{
|
|
28
|
+
id: "discover",
|
|
29
|
+
file: "discover.md",
|
|
30
|
+
owner: "product",
|
|
31
|
+
purpose: "the business context, the use case and its acceptance criteria",
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
id: "design",
|
|
35
|
+
file: "design.md",
|
|
36
|
+
owner: "architect",
|
|
37
|
+
purpose: "the modules, mechanisms and channels that meet each criterion",
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
id: "tasks",
|
|
41
|
+
file: "tasks.md",
|
|
42
|
+
owner: "developer",
|
|
43
|
+
purpose: "verifiable tasks, each naming the requirement it delivers",
|
|
44
|
+
},
|
|
45
|
+
]);
|
|
46
|
+
/** The schema new changes follow from 1.0 on. 0.27 changes say `spec-driven`. */
|
|
47
|
+
exports.LAYERED_SCHEMA = "layered";
|
|
48
|
+
/** The Discover of a 0.27 change: its proposal. */
|
|
49
|
+
exports.LEGACY_DISCOVER = "proposal.md";
|
|
50
|
+
const layer = (id) => exports.LAYERS.find((l) => l.id === id);
|
|
51
|
+
exports.layer = layer;
|
|
52
|
+
// ── Templates ────────────────────────────────────────────────────────────────
|
|
53
|
+
function templateDiscover(changeId) {
|
|
54
|
+
return `# Discover: ${changeId}
|
|
55
|
+
|
|
56
|
+
> Owner: product — what the business needs and why. No technology here: the
|
|
57
|
+
> design says how.
|
|
58
|
+
|
|
59
|
+
## Context
|
|
60
|
+
|
|
61
|
+
<!-- Who has the problem, and what it costs them today. -->
|
|
62
|
+
|
|
63
|
+
## Use case
|
|
64
|
+
|
|
65
|
+
<!-- What the person does, step by step, once this exists. -->
|
|
66
|
+
|
|
67
|
+
## Acceptance criteria
|
|
68
|
+
|
|
69
|
+
<!-- One line each, numbered: the design must answer every one. -->
|
|
70
|
+
- AC-1:
|
|
71
|
+
`;
|
|
72
|
+
}
|
|
73
|
+
function templateLayeredDesign(changeId) {
|
|
74
|
+
return `# Design: ${changeId}
|
|
75
|
+
|
|
76
|
+
> Owner: architect — how the system meets the Discover. Name each acceptance
|
|
77
|
+
> criterion (AC-1, AC-2…) where it is answered.
|
|
78
|
+
|
|
79
|
+
## Modules
|
|
80
|
+
|
|
81
|
+
<!-- Which modules or services change, and what each one owns. -->
|
|
82
|
+
|
|
83
|
+
## Mechanisms
|
|
84
|
+
|
|
85
|
+
<!-- How: data, rules, flows. Answer each criterion: "AC-1 — …". -->
|
|
86
|
+
|
|
87
|
+
## Channels
|
|
88
|
+
|
|
89
|
+
<!-- APIs, events, queues between modules or repositories. -->
|
|
90
|
+
|
|
91
|
+
## Decisions
|
|
92
|
+
|
|
93
|
+
<!-- The ADRs this touches, or the choice made here and what was rejected. -->
|
|
94
|
+
`;
|
|
95
|
+
}
|
|
96
|
+
function templateLayeredTasks() {
|
|
97
|
+
return `# Tasks
|
|
98
|
+
|
|
99
|
+
> Owner: developer — each task is verifiable and names the requirement it
|
|
100
|
+
> delivers (REQ-NNN).
|
|
101
|
+
|
|
102
|
+
## 1. Specification
|
|
103
|
+
|
|
104
|
+
- [ ] 1.1 Write the delta spec for each affected capability
|
|
105
|
+
- [ ] 1.2 Run \`specgate change validate\`
|
|
106
|
+
|
|
107
|
+
## 2. Implementation
|
|
108
|
+
|
|
109
|
+
- [ ] 2.1 REQ-NNN —
|
|
110
|
+
`;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* A draft's tasks before the review: the developer's layer, with nothing to
|
|
114
|
+
* tick yet — a draft has no work to check off until its requirements are
|
|
115
|
+
* agreed.
|
|
116
|
+
*/
|
|
117
|
+
function templateDraftTasks() {
|
|
118
|
+
return `# Tasks
|
|
119
|
+
|
|
120
|
+
> Owner: developer — verifiable tasks, each naming the requirement it
|
|
121
|
+
> delivers (REQ-NNN). Written once the draft is reviewed.
|
|
122
|
+
`;
|
|
123
|
+
}
|
|
124
|
+
const normal = (t) => t.replace(/\r\n/g, "\n").trim();
|
|
125
|
+
/** True when a layer is still as `change new` wrote it: not written yet. */
|
|
126
|
+
function isUntouchedLayer(id, content, changeId) {
|
|
127
|
+
const template = id === "discover"
|
|
128
|
+
? templateDiscover(changeId)
|
|
129
|
+
: id === "design"
|
|
130
|
+
? templateLayeredDesign(changeId)
|
|
131
|
+
: templateLayeredTasks();
|
|
132
|
+
if (id === "tasks" && normal(content) === normal(templateDraftTasks()))
|
|
133
|
+
return true;
|
|
134
|
+
return normal(content) === normal(template);
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* A first `design.md` for a 0.27 change, from its proposal, for
|
|
138
|
+
* `specgate migrate 1.0`: the proposal's Approach becomes the Mechanisms, and
|
|
139
|
+
* every criterion the proposal states is listed for the architect to answer.
|
|
140
|
+
*/
|
|
141
|
+
function designFromProposal(proposal, changeId) {
|
|
142
|
+
const approach = section(proposal, /approach|enfoque|ansatz/i);
|
|
143
|
+
const criteria = acceptanceCriteria(proposal);
|
|
144
|
+
const body = [
|
|
145
|
+
`# Design: ${changeId}`,
|
|
146
|
+
"",
|
|
147
|
+
"> Owner: architect — written by `specgate migrate 1.0` from the proposal. Review it.",
|
|
148
|
+
"",
|
|
149
|
+
"## Modules",
|
|
150
|
+
"",
|
|
151
|
+
"<!-- Which modules or services change, and what each one owns. -->",
|
|
152
|
+
"",
|
|
153
|
+
"## Mechanisms",
|
|
154
|
+
"",
|
|
155
|
+
approach.trim() || "<!-- How: data, rules, flows. -->",
|
|
156
|
+
"",
|
|
157
|
+
];
|
|
158
|
+
if (criteria.length > 0) {
|
|
159
|
+
body.push(...criteria.map((c) => `- ${c.id} — <!-- how it is met -->`), "");
|
|
160
|
+
}
|
|
161
|
+
body.push("## Channels", "", "<!-- APIs, events, queues. -->", "", "## Decisions", "", "");
|
|
162
|
+
return body.join("\n");
|
|
163
|
+
}
|
|
164
|
+
// ── Reading the layers ───────────────────────────────────────────────────────
|
|
165
|
+
/** The text under the first `##` heading matching `heading`, up to the next `##`. */
|
|
166
|
+
function section(md, heading) {
|
|
167
|
+
const lines = md.replace(/\r\n/g, "\n").split("\n");
|
|
168
|
+
const start = lines.findIndex((l) => /^##\s/.test(l) && heading.test(l));
|
|
169
|
+
if (start < 0)
|
|
170
|
+
return "";
|
|
171
|
+
const out = [];
|
|
172
|
+
for (const l of lines.slice(start + 1)) {
|
|
173
|
+
if (/^##\s/.test(l))
|
|
174
|
+
break;
|
|
175
|
+
out.push(l);
|
|
176
|
+
}
|
|
177
|
+
return out.join("\n");
|
|
178
|
+
}
|
|
179
|
+
const withoutComments = (t) => t.replace(/<!--[\s\S]*?-->/g, "");
|
|
180
|
+
/**
|
|
181
|
+
* The numbered criteria of a Discover: `- AC-1: text` (or `—`, `-`) under
|
|
182
|
+
* "Acceptance criteria" ("Criterios de aceptación", "Akzeptanzkriterien").
|
|
183
|
+
* A criterion with no text yet is not one.
|
|
184
|
+
*/
|
|
185
|
+
function acceptanceCriteria(discover) {
|
|
186
|
+
const body = withoutComments(section(discover, /acceptance criteria|criterios de aceptaci[oó]n|akzeptanzkriterien/i));
|
|
187
|
+
const out = [];
|
|
188
|
+
for (const m of body.matchAll(/^\s*[-*]\s*(AC-\d+)\s*[:—–-]\s*(.*\S)\s*$/gm)) {
|
|
189
|
+
out.push({ id: m[1], text: m[2] });
|
|
190
|
+
}
|
|
191
|
+
return out;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Words of how, in a layer about what: the brief's list plus the architecture's.
|
|
195
|
+
* Not "table": a client reads "a table of their shipments"; storage is caught
|
|
196
|
+
* by database, SQL and the brief's own list.
|
|
197
|
+
*/
|
|
198
|
+
const DISCOVER_TECHNICAL = new RegExp(`${BriefCards_1.TECHNICAL.source}|\\b(api|apis|endpoints?|database|base de datos|sql|http|json|microservices?|microservicios?|queue|cola de mensajes|controllers?)\\b`, "i");
|
|
199
|
+
/** REST in capitals only: "the rest of the week" is plain English. */
|
|
200
|
+
const DISCOVER_REST = /\bREST(?:ful)?\b/;
|
|
201
|
+
/**
|
|
202
|
+
* The layer rules (REQ-284..REQ-286), plus the 0.27 notice (REQ-283). All
|
|
203
|
+
* warnings: a change is drafted one layer at a time, and the project's gate
|
|
204
|
+
* must not fail while the architect has not written the design yet.
|
|
205
|
+
* `change validate --strict` fails on them.
|
|
206
|
+
*/
|
|
207
|
+
function checkLayers(files) {
|
|
208
|
+
const out = [];
|
|
209
|
+
const dir = `docs/specs/changes/${files.changeId}`;
|
|
210
|
+
const legacy = files.discoverFile === exports.LEGACY_DISCOVER;
|
|
211
|
+
if (files.design === null) {
|
|
212
|
+
out.push((0, Diagnostic_1.warning)("layer_no_design", legacy
|
|
213
|
+
? `Change "${files.changeId}" has the 0.27 layout: a proposal and no design.md.`
|
|
214
|
+
: `Change "${files.changeId}" has no design.md.`, {
|
|
215
|
+
target: files.changeId,
|
|
216
|
+
file: `${dir}/design.md`,
|
|
217
|
+
fix: legacy
|
|
218
|
+
? "Run `specgate migrate 1.0` to add its design.md from the proposal, or write one: the architect's layer."
|
|
219
|
+
: "Write design.md: the architect's layer, answering each acceptance criterion.",
|
|
220
|
+
}));
|
|
221
|
+
}
|
|
222
|
+
const discover = files.discover && withoutComments(files.discover);
|
|
223
|
+
// The rules below judge the layers of a 1.0 change; a proposal was never
|
|
224
|
+
// written to them.
|
|
225
|
+
if (legacy || !discover)
|
|
226
|
+
return out;
|
|
227
|
+
// REQ-284: the Discover is the business story.
|
|
228
|
+
const tech = DISCOVER_TECHNICAL.exec(discover) || DISCOVER_REST.exec(discover);
|
|
229
|
+
if (tech) {
|
|
230
|
+
out.push((0, Diagnostic_1.warning)("layer_discover_technical", `discover.md names ${tech[0]}: how, not what.`, {
|
|
231
|
+
target: files.changeId,
|
|
232
|
+
file: `${dir}/${files.discoverFile}`,
|
|
233
|
+
fix: "Say what the business needs; the technology goes in design.md.",
|
|
234
|
+
}));
|
|
235
|
+
}
|
|
236
|
+
// REQ-285: the design answers every criterion.
|
|
237
|
+
const criteria = acceptanceCriteria(files.discover || "");
|
|
238
|
+
if (files.design !== null && criteria.length > 0) {
|
|
239
|
+
const design = withoutComments(files.design);
|
|
240
|
+
for (const c of criteria) {
|
|
241
|
+
if (!new RegExp(`\\b${c.id}\\b`).test(design)) {
|
|
242
|
+
out.push((0, Diagnostic_1.warning)("layer_design_misses_criterion", `design.md does not answer ${c.id}: "${c.text}".`, {
|
|
243
|
+
target: c.id,
|
|
244
|
+
file: `${dir}/design.md`,
|
|
245
|
+
fix: `Say in design.md how ${c.id} is met, naming it ("${c.id} — …").`,
|
|
246
|
+
}));
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
// REQ-286: every task names the requirement it delivers — once the
|
|
251
|
+
// developer has written them; the template's placeholder is not a task.
|
|
252
|
+
if (files.tasks !== null && !isUntouchedLayer("tasks", files.tasks, files.changeId)) {
|
|
253
|
+
const lines = files.tasks.replace(/\r\n/g, "\n").split("\n");
|
|
254
|
+
let heading = "";
|
|
255
|
+
lines.forEach((l, i) => {
|
|
256
|
+
if (/^##\s/.test(l))
|
|
257
|
+
heading = l;
|
|
258
|
+
const task = /^\s*[-*]\s*\[[ xX]\]\s*(.*)$/.exec(l);
|
|
259
|
+
if (!task)
|
|
260
|
+
return;
|
|
261
|
+
// The specification tasks are the process, not a requirement's work.
|
|
262
|
+
if (/specification|especificaci[oó]n|spezifikation/i.test(heading))
|
|
263
|
+
return;
|
|
264
|
+
if (/\bREQ-\d+\b/.test(task[1]))
|
|
265
|
+
return;
|
|
266
|
+
out.push((0, Diagnostic_1.warning)("layer_task_without_requirement", `Task "${task[1].trim() || "(empty)"}" names no requirement.`, {
|
|
267
|
+
target: files.changeId,
|
|
268
|
+
file: `${dir}/tasks.md`,
|
|
269
|
+
line: i + 1,
|
|
270
|
+
fix: "Name the requirement the task delivers (REQ-NNN), or move it under the specification tasks.",
|
|
271
|
+
}));
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
return out;
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* REQ-287: whether the Discover differs from the version it was agreed at —
|
|
278
|
+
* the one approved, or else the first committed. Whitespace and comments do not
|
|
279
|
+
* count: rewording a placeholder is not a new story.
|
|
280
|
+
*/
|
|
281
|
+
function discoverRewritten(baseline, current) {
|
|
282
|
+
const flat = (t) => withoutComments(t).replace(/\s+/g, " ").trim();
|
|
283
|
+
return flat(baseline) !== flat(current);
|
|
284
|
+
}
|
|
285
|
+
//# sourceMappingURL=ChangeLayers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChangeLayers.js","sourceRoot":"","sources":["../../../../../packages/core/src/domain/ChangeLayers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HarnessConfig.js","sourceRoot":"","sources":["../../../../../packages/core/src/domain/HarnessConfig.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"HarnessConfig.js","sourceRoot":"","sources":["../../../../../packages/core/src/domain/HarnessConfig.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* The two gaps a context harness is measured by (REQ-300..REQ-303).
|
|
4
|
+
*
|
|
5
|
+
* The 1.0 line takes them from the InfoQ article on enterprise spec-driven
|
|
6
|
+
* development (docs/specs/enterprise-sdd-gap.md, 6):
|
|
7
|
+
*
|
|
8
|
+
* - **spec → implementation**: the spec was clear and the code diverged. The
|
|
9
|
+
* fix is stronger validation and constraints — the check that caught it.
|
|
10
|
+
* - **intent → spec**: a detail of the use case was missed while talking. The
|
|
11
|
+
* fix is better elicitation — the module whose questions came late.
|
|
12
|
+
*
|
|
13
|
+
* A person's classification is the truth. What the harness recorded only
|
|
14
|
+
* suggests one: a rejection the agent fixed on a later attempt reads as the
|
|
15
|
+
* code diverging, and a requirement that changed after review — an answered
|
|
16
|
+
* question, a note, a modified delta — as intent the spec had missed. Pure
|
|
17
|
+
* arithmetic over records, like the rest of the report.
|
|
18
|
+
*/
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.GAPS = void 0;
|
|
21
|
+
exports.checkName = checkName;
|
|
22
|
+
exports.summariseGaps = summariseGaps;
|
|
23
|
+
exports.parseGapMarks = parseGapMarks;
|
|
24
|
+
exports.GAPS = Object.freeze(["spec-impl", "intent-spec"]);
|
|
25
|
+
/** "quality check: pmd" → "pmd"; "test command: npm test" → "test command". */
|
|
26
|
+
function checkName(stage) {
|
|
27
|
+
const s = (stage || "").trim();
|
|
28
|
+
const quality = /^quality check:\s*(\S+)/.exec(s);
|
|
29
|
+
if (quality)
|
|
30
|
+
return quality[1];
|
|
31
|
+
const colon = s.indexOf(":");
|
|
32
|
+
return colon > 0 ? s.slice(0, colon).trim() : s || "gate";
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Every requirement's gap, if it has one, and the rates.
|
|
36
|
+
*
|
|
37
|
+
* `attemptsOf` holds each requirement's attempts across every run, oldest
|
|
38
|
+
* first; `requirements` the ones the ledger records, in any order.
|
|
39
|
+
*/
|
|
40
|
+
function summariseGaps(requirements, attemptsOf, input = {}) {
|
|
41
|
+
const moduleOf = (id) => (input.moduleOf && input.moduleOf[id]) || "spec";
|
|
42
|
+
const marks = new Map();
|
|
43
|
+
for (const m of input.marks ?? [])
|
|
44
|
+
marks.set(m.requirement, m); // the latest wins
|
|
45
|
+
const evidence = new Map();
|
|
46
|
+
for (const e of input.evidence ?? [])
|
|
47
|
+
if (!evidence.has(e.requirement))
|
|
48
|
+
evidence.set(e.requirement, e);
|
|
49
|
+
const ids = [...new Set([...requirements, ...marks.keys()])].sort();
|
|
50
|
+
const rows = [];
|
|
51
|
+
const when = new Map();
|
|
52
|
+
for (const id of ids) {
|
|
53
|
+
const mark = marks.get(id);
|
|
54
|
+
if (mark) {
|
|
55
|
+
rows.push({
|
|
56
|
+
requirement: id,
|
|
57
|
+
gap: mark.gap,
|
|
58
|
+
source: "person",
|
|
59
|
+
why: mark.reason,
|
|
60
|
+
module: moduleOf(id),
|
|
61
|
+
});
|
|
62
|
+
when.set(id, mark.markedAt);
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
const log = attemptsOf.get(id) ?? [];
|
|
66
|
+
const onSpec = log.some((a) => a.endedAt === "spec");
|
|
67
|
+
const said = evidence.get(id);
|
|
68
|
+
if (said || onSpec) {
|
|
69
|
+
rows.push({
|
|
70
|
+
requirement: id,
|
|
71
|
+
gap: "intent-spec",
|
|
72
|
+
source: "suggested",
|
|
73
|
+
why: said ? said.why : "the gate failed on the specification",
|
|
74
|
+
module: moduleOf(id),
|
|
75
|
+
});
|
|
76
|
+
if (said && said.at)
|
|
77
|
+
when.set(id, said.at);
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
// A rejection followed by a pass: the agent got there, the code had diverged.
|
|
81
|
+
const fixed = log.findIndex((a, i) => a.endedAt === "gate" && log.slice(i + 1).some((b) => b.endedAt === "pass"));
|
|
82
|
+
if (fixed >= 0) {
|
|
83
|
+
const check = checkName(log[fixed].gateStage || "");
|
|
84
|
+
rows.push({
|
|
85
|
+
requirement: id,
|
|
86
|
+
gap: "spec-impl",
|
|
87
|
+
source: "suggested",
|
|
88
|
+
why: `rejected at ${log[fixed].gateStage || "the gate"}, then passed`,
|
|
89
|
+
check,
|
|
90
|
+
module: moduleOf(id),
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
const total = requirements.length;
|
|
95
|
+
const count = (g) => rows.filter((r) => r.gap === g).length;
|
|
96
|
+
const rate = (n) => (total > 0 ? n / total : null);
|
|
97
|
+
const modules = new Map();
|
|
98
|
+
for (const id of requirements) {
|
|
99
|
+
const name = moduleOf(id);
|
|
100
|
+
const m = modules.get(name) || { module: name, requirements: 0, specImpl: 0, intentSpec: 0 };
|
|
101
|
+
m.requirements += 1;
|
|
102
|
+
modules.set(name, m);
|
|
103
|
+
}
|
|
104
|
+
for (const r of rows) {
|
|
105
|
+
const m = modules.get(r.module) || {
|
|
106
|
+
module: r.module,
|
|
107
|
+
requirements: 0,
|
|
108
|
+
specImpl: 0,
|
|
109
|
+
intentSpec: 0,
|
|
110
|
+
};
|
|
111
|
+
if (r.gap === "spec-impl")
|
|
112
|
+
m.specImpl += 1;
|
|
113
|
+
else
|
|
114
|
+
m.intentSpec += 1;
|
|
115
|
+
modules.set(r.module, m);
|
|
116
|
+
}
|
|
117
|
+
return {
|
|
118
|
+
requirements: total,
|
|
119
|
+
specImpl: { count: count("spec-impl"), rate: rate(count("spec-impl")) },
|
|
120
|
+
intentSpec: { count: count("intent-spec"), rate: rate(count("intent-spec")) },
|
|
121
|
+
byModule: [...modules.values()].sort((a, b) => a.module.localeCompare(b.module)),
|
|
122
|
+
strengthen: {
|
|
123
|
+
specImpl: commonest(rows.filter((r) => r.gap === "spec-impl" && r.check).map((r) => r.check)),
|
|
124
|
+
intentSpec: newestOfCommonest(rows.filter((r) => r.gap === "intent-spec").map((r) => r.module), rows
|
|
125
|
+
.filter((r) => r.gap === "intent-spec")
|
|
126
|
+
.map((r) => [r.module, when.get(r.requirement) || ""])),
|
|
127
|
+
},
|
|
128
|
+
marked: rows.filter((r) => r.source === "person").length,
|
|
129
|
+
suggested: rows.filter((r) => r.source === "suggested").length,
|
|
130
|
+
rows,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
function tally(names) {
|
|
134
|
+
const n = new Map();
|
|
135
|
+
for (const name of names)
|
|
136
|
+
n.set(name, (n.get(name) ?? 0) + 1);
|
|
137
|
+
return n;
|
|
138
|
+
}
|
|
139
|
+
/** The commonest name; a tie goes to the first alphabetically. */
|
|
140
|
+
function commonest(names) {
|
|
141
|
+
const best = [...tally(names).entries()].sort((a, b) => b[1] - a[1] || a[0].localeCompare(b[0]));
|
|
142
|
+
return best.length ? best[0][0] : null;
|
|
143
|
+
}
|
|
144
|
+
/** The commonest name; a tie goes to the one seen most recently. */
|
|
145
|
+
function newestOfCommonest(names, dated) {
|
|
146
|
+
const counts = tally(names);
|
|
147
|
+
if (counts.size === 0)
|
|
148
|
+
return null;
|
|
149
|
+
const top = Math.max(...counts.values());
|
|
150
|
+
const latest = new Map();
|
|
151
|
+
for (const [name, at] of dated)
|
|
152
|
+
if (at > (latest.get(name) ?? ""))
|
|
153
|
+
latest.set(name, at);
|
|
154
|
+
return [...counts.entries()]
|
|
155
|
+
.filter(([, n]) => n === top)
|
|
156
|
+
.map(([name]) => name)
|
|
157
|
+
.sort((a, b) => (latest.get(b) ?? "").localeCompare(latest.get(a) ?? "") || a.localeCompare(b))[0];
|
|
158
|
+
}
|
|
159
|
+
/** The ledger of classifications, one JSON object per line (REQ-300). */
|
|
160
|
+
function parseGapMarks(jsonl) {
|
|
161
|
+
const marks = [];
|
|
162
|
+
for (const line of (jsonl || "").split("\n")) {
|
|
163
|
+
if (!line.trim())
|
|
164
|
+
continue;
|
|
165
|
+
try {
|
|
166
|
+
const p = JSON.parse(line);
|
|
167
|
+
if (p && typeof p.requirement === "string" && exports.GAPS.includes(p.gap)) {
|
|
168
|
+
marks.push({
|
|
169
|
+
requirement: p.requirement,
|
|
170
|
+
gap: p.gap,
|
|
171
|
+
reason: String(p.reason ?? ""),
|
|
172
|
+
markedAt: String(p.markedAt ?? ""),
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
catch {
|
|
177
|
+
// A half-written line is what a killed process leaves; skip it.
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return marks;
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=HarnessGaps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HarnessGaps.js","sourceRoot":"","sources":["../../../../../packages/core/src/domain/HarnessGaps.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,6 +35,7 @@ exports.parseFalseFailures = parseFalseFailures;
|
|
|
35
35
|
exports.sparkline = sparkline;
|
|
36
36
|
const QualitySummary_1 = require("./QualitySummary");
|
|
37
37
|
const RunBudget_1 = require("./RunBudget");
|
|
38
|
+
const HarnessGaps_1 = require("./HarnessGaps");
|
|
38
39
|
/**
|
|
39
40
|
* A run's rows, with the requirement it was on reported as stopped when the
|
|
40
41
|
* run never finished: killed, its record still says what it was doing.
|
|
@@ -70,7 +71,7 @@ exports.STAGE_LABELS = Object.freeze({
|
|
|
70
71
|
done: "`specgate done` failed",
|
|
71
72
|
commit: "commit failed",
|
|
72
73
|
});
|
|
73
|
-
function summariseRuns(runs, falseFailures = [], costPerRunHint = {}) {
|
|
74
|
+
function summariseRuns(runs, falseFailures = [], costPerRunHint = {}, gapInput = {}) {
|
|
74
75
|
// REQ-269: every run's time counts, each requirement once, at its latest
|
|
75
76
|
// outcome. Two runs of REQ-002 — failed, then passed — read "1 of 2 passed"
|
|
76
77
|
// and listed REQ-002 as delivering nothing (truck-flote, S55).
|
|
@@ -161,8 +162,22 @@ function summariseRuns(runs, falseFailures = [], costPerRunHint = {}) {
|
|
|
161
162
|
? (failedRows.length - falseCount) / failedRows.length
|
|
162
163
|
: null,
|
|
163
164
|
quality: (0, QualitySummary_1.summariseQuality)(runs),
|
|
165
|
+
gaps: (0, HarnessGaps_1.summariseGaps)(current.map((r) => r.requirement), attemptsByRequirement(rows), gapInput),
|
|
164
166
|
};
|
|
165
167
|
}
|
|
168
|
+
/** Each requirement's attempts across every run, oldest first. */
|
|
169
|
+
function attemptsByRequirement(rows) {
|
|
170
|
+
const out = new Map();
|
|
171
|
+
for (const row of rows) {
|
|
172
|
+
const list = out.get(row.requirement) ?? [];
|
|
173
|
+
for (const a of row.attemptLog ?? []) {
|
|
174
|
+
if (a && a.endedAt)
|
|
175
|
+
list.push({ endedAt: a.endedAt, gateStage: a.gateStage });
|
|
176
|
+
}
|
|
177
|
+
out.set(row.requirement, list);
|
|
178
|
+
}
|
|
179
|
+
return out;
|
|
180
|
+
}
|
|
166
181
|
/** The ledger of human marks, one JSON object per line. */
|
|
167
182
|
function parseFalseFailures(jsonl) {
|
|
168
183
|
const marks = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HarnessReport.js","sourceRoot":"","sources":["../../../../../packages/core/src/domain/HarnessReport.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;;;
|
|
1
|
+
{"version":3,"file":"HarnessReport.js","sourceRoot":"","sources":["../../../../../packages/core/src/domain/HarnessReport.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HarnessRun.js","sourceRoot":"","sources":["../../../../../packages/core/src/domain/HarnessRun.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;AAwBH,wDAQC;AA6BD,0CAKC;AAED,sDASC;
|
|
1
|
+
{"version":3,"file":"HarnessRun.js","sourceRoot":"","sources":["../../../../../packages/core/src/domain/HarnessRun.ts"],"names":[],"mappings":"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"}
|