musubix3 0.1.11 → 0.1.13
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/.github/plugin/marketplace.json +2 -2
- package/.github/skills/sdd-change/SKILL.md +1 -0
- package/.github/skills/sdd-issue-report/SKILL.md +45 -0
- package/CHANGELOG.md +88 -0
- package/README-ja.md +73 -2
- package/README.md +121 -5
- package/dist/packages/analysis/src/adapters.js +25 -2
- package/dist/packages/analysis/src/adapters.js.map +1 -1
- package/dist/packages/analysis/src/change.d.ts +16 -0
- package/dist/packages/analysis/src/change.js +200 -52
- package/dist/packages/analysis/src/change.js.map +1 -1
- package/dist/packages/analysis/src/config.d.ts +7 -2
- package/dist/packages/analysis/src/config.js +50 -5
- package/dist/packages/analysis/src/config.js.map +1 -1
- package/dist/packages/analysis/src/files.d.ts +1 -0
- package/dist/packages/analysis/src/files.js +1 -1
- package/dist/packages/analysis/src/files.js.map +1 -1
- package/dist/packages/analysis/src/gate.js +2 -2
- package/dist/packages/analysis/src/gate.js.map +1 -1
- package/dist/packages/analysis/src/model-correspondence.js +4 -1
- package/dist/packages/analysis/src/model-correspondence.js.map +1 -1
- package/dist/packages/analysis/src/tdd.js +50 -14
- package/dist/packages/analysis/src/tdd.js.map +1 -1
- package/dist/packages/cli/src/install.d.ts +1 -1
- package/dist/packages/cli/src/install.js +1 -1
- package/dist/packages/cli/src/install.js.map +1 -1
- package/dist/packages/cli/src/main.js +9 -3
- package/dist/packages/cli/src/main.js.map +1 -1
- package/dist/packages/domain/src/design.js +17 -3
- package/dist/packages/domain/src/design.js.map +1 -1
- package/dist/packages/domain/src/requirements.d.ts +1 -0
- package/dist/packages/domain/src/requirements.js +32 -2
- package/dist/packages/domain/src/requirements.js.map +1 -1
- package/package.json +1 -1
- package/plugin.json +1 -1
|
@@ -19,10 +19,17 @@ export interface ChangePhaseEvidence {
|
|
|
19
19
|
recordedAt: string;
|
|
20
20
|
fingerprints: ChangeFingerprints;
|
|
21
21
|
}
|
|
22
|
+
export interface ChangeTddBatch {
|
|
23
|
+
requirementIds: string[];
|
|
24
|
+
red?: ChangePhaseEvidence;
|
|
25
|
+
implementation?: ChangePhaseEvidence;
|
|
26
|
+
green?: ChangePhaseEvidence;
|
|
27
|
+
}
|
|
22
28
|
export interface ChangeRecord {
|
|
23
29
|
changeId: string;
|
|
24
30
|
requirementIds: string[];
|
|
25
31
|
phases: Partial<Record<ChangePhase, ChangePhaseEvidence>>;
|
|
32
|
+
tddBatches?: ChangeTddBatch[];
|
|
26
33
|
}
|
|
27
34
|
export interface ChangeEvidence {
|
|
28
35
|
schemaVersion: 1;
|
|
@@ -37,7 +44,16 @@ export interface ChangeCompleteness {
|
|
|
37
44
|
valid: boolean;
|
|
38
45
|
}
|
|
39
46
|
export declare function loadChangeEvidence(root: string): Promise<ChangeEvidence | null>;
|
|
47
|
+
/** @id CODE-CHANGE-REQUIREMENT-BATCHES-001
|
|
48
|
+
* @implements REQ-CHANGE-REQUIREMENT-BATCHES-001 REQ-CHANGE-REQUIREMENT-BATCHES-003 REQ-CHANGE-REQUIREMENT-BATCHES-004
|
|
49
|
+
* @design DES-CHANGE-REQUIREMENT-BATCHES-001
|
|
50
|
+
*/
|
|
51
|
+
export declare function effectiveBatches(change: ChangeRecord): ChangeTddBatch[];
|
|
40
52
|
export declare function recordChangePhase(root: string, changeId: string, phase: ChangePhase, requirementIds: string[]): Promise<ChangeEvidence>;
|
|
53
|
+
/** @id CODE-CHANGE-REQUIREMENT-BATCHES-002
|
|
54
|
+
* @implements REQ-CHANGE-REQUIREMENT-BATCHES-005
|
|
55
|
+
* @design DES-CHANGE-REQUIREMENT-BATCHES-002
|
|
56
|
+
*/
|
|
41
57
|
export declare function validateChangeEvidence(root: string): Promise<{
|
|
42
58
|
present: boolean;
|
|
43
59
|
valid: boolean;
|
|
@@ -64,6 +64,31 @@ export async function loadChangeEvidence(root) {
|
|
|
64
64
|
throw new Error('Invalid change chronology evidence.');
|
|
65
65
|
return value;
|
|
66
66
|
}
|
|
67
|
+
const tddBatchPhases = ['red', 'implementation', 'green'];
|
|
68
|
+
function batchKey(requirementIds) {
|
|
69
|
+
return [...new Set(requirementIds)].sort().join(',');
|
|
70
|
+
}
|
|
71
|
+
/** @id CODE-CHANGE-REQUIREMENT-BATCHES-001
|
|
72
|
+
* @implements REQ-CHANGE-REQUIREMENT-BATCHES-001 REQ-CHANGE-REQUIREMENT-BATCHES-003 REQ-CHANGE-REQUIREMENT-BATCHES-004
|
|
73
|
+
* @design DES-CHANGE-REQUIREMENT-BATCHES-001
|
|
74
|
+
*/
|
|
75
|
+
export function effectiveBatches(change) {
|
|
76
|
+
const batches = change.tddBatches ?? [];
|
|
77
|
+
if (change.phases.red || change.phases.implementation || change.phases.green) {
|
|
78
|
+
const legacyBatch = { requirementIds: [...change.requirementIds] };
|
|
79
|
+
if (change.phases.red)
|
|
80
|
+
legacyBatch.red = change.phases.red;
|
|
81
|
+
if (change.phases.implementation)
|
|
82
|
+
legacyBatch.implementation = change.phases.implementation;
|
|
83
|
+
if (change.phases.green)
|
|
84
|
+
legacyBatch.green = change.phases.green;
|
|
85
|
+
return [legacyBatch, ...batches];
|
|
86
|
+
}
|
|
87
|
+
return batches;
|
|
88
|
+
}
|
|
89
|
+
function batchFor(batches, requirementId) {
|
|
90
|
+
return batches.find((batch) => batch.requirementIds.includes(requirementId));
|
|
91
|
+
}
|
|
67
92
|
export async function recordChangePhase(root, changeId, phase, requirementIds) {
|
|
68
93
|
if (!/^CHANGE-\d+$/.test(changeId))
|
|
69
94
|
throw new Error('Change ID must match CHANGE-<digits>.');
|
|
@@ -76,7 +101,8 @@ export async function recordChangePhase(root, changeId, phase, requirementIds) {
|
|
|
76
101
|
throw new Error(`Missing staged change document: .musubix/changes/${changeId}.md`);
|
|
77
102
|
}
|
|
78
103
|
const evidence = await loadChangeEvidence(root) ?? { schemaVersion: 1, changes: [] };
|
|
79
|
-
if (evidence.changes.some((entry) => changePhases.some((entryPhase) => entry.phases[entryPhase] && !Number.isInteger(entry.phases[entryPhase].order))
|
|
104
|
+
if (evidence.changes.some((entry) => changePhases.some((entryPhase) => entry.phases[entryPhase] && !Number.isInteger(entry.phases[entryPhase].order))
|
|
105
|
+
|| (entry.tddBatches ?? []).some((batch) => tddBatchPhases.some((batchPhase) => batch[batchPhase] && !Number.isInteger(batch[batchPhase].order))))) {
|
|
80
106
|
throw new Error('Existing change evidence lacks monotonic order; regenerate it before recording new phases.');
|
|
81
107
|
}
|
|
82
108
|
let change = evidence.changes.find((entry) => entry.changeId === changeId);
|
|
@@ -86,25 +112,92 @@ export async function recordChangePhase(root, changeId, phase, requirementIds) {
|
|
|
86
112
|
change = { changeId, requirementIds: [...new Set(requirementIds)].sort(), phases: {} };
|
|
87
113
|
evidence.changes.push(change);
|
|
88
114
|
}
|
|
89
|
-
|
|
90
|
-
|
|
115
|
+
const normalizedRequirementIds = [...new Set(requirementIds)].sort();
|
|
116
|
+
const isFullSet = JSON.stringify(normalizedRequirementIds) === JSON.stringify([...change.requirementIds].sort());
|
|
117
|
+
const isBatchPhase = tddBatchPhases.includes(phase);
|
|
118
|
+
if (!isBatchPhase || isFullSet) {
|
|
119
|
+
// impact/requirements/design/quality (always), and red/implementation/green
|
|
120
|
+
// recorded with the change's exact full requirement ID set: identical,
|
|
121
|
+
// unchanged, once-per-change behavior (REQ-CHANGE-REQUIREMENT-BATCHES-002).
|
|
122
|
+
if (change.phases[phase])
|
|
123
|
+
throw new Error(`${changeId}:${phase} is already recorded.`);
|
|
124
|
+
if (phase === 'requirements' && !change.phases.impact)
|
|
125
|
+
throw new Error('requirements requires the preceding impact phase.');
|
|
126
|
+
if (phase === 'design' && !change.phases.requirements)
|
|
127
|
+
throw new Error('design requires the preceding requirements phase.');
|
|
128
|
+
if (phase === 'red' && !change.phases.design)
|
|
129
|
+
throw new Error('red requires the preceding design phase.');
|
|
130
|
+
if (phase === 'implementation' && !change.phases.red)
|
|
131
|
+
throw new Error('implementation requires the preceding red phase.');
|
|
132
|
+
if (phase === 'green' && !change.phases.implementation)
|
|
133
|
+
throw new Error('green requires the preceding implementation phase.');
|
|
134
|
+
if (phase === 'quality') {
|
|
135
|
+
const covered = new Set(effectiveBatches(change).filter((batch) => batch.green).flatMap((batch) => batch.requirementIds));
|
|
136
|
+
const missing = change.requirementIds.filter((id) => !covered.has(id));
|
|
137
|
+
if (missing.length)
|
|
138
|
+
throw new Error(`quality requires Green evidence covering all change requirement IDs; missing ${missing.join(', ')}.`);
|
|
139
|
+
}
|
|
140
|
+
if (!isFullSet) {
|
|
141
|
+
throw new Error(!isBatchPhase
|
|
142
|
+
? 'Every phase must use the same requirement IDs.'
|
|
143
|
+
: 'Every phase must use requirement IDs declared on the change.');
|
|
144
|
+
}
|
|
145
|
+
const order = await appendEvidenceOrder(root, { kind: 'change', entityId: changeId, phase });
|
|
146
|
+
change.phases[phase] = {
|
|
147
|
+
phase,
|
|
148
|
+
order: order.sequence,
|
|
149
|
+
recordedAt: new Date().toISOString(),
|
|
150
|
+
fingerprints: await currentFingerprints(root, changeId, change.requirementIds),
|
|
151
|
+
};
|
|
91
152
|
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
153
|
+
else {
|
|
154
|
+
// red/implementation/green recorded with a proper, non-empty subset of the
|
|
155
|
+
// change's requirement IDs: an independent requirement batch
|
|
156
|
+
// (REQ-CHANGE-REQUIREMENT-BATCHES-001, -003).
|
|
157
|
+
if (!normalizedRequirementIds.length || !normalizedRequirementIds.every((id) => change.requirementIds.includes(id))) {
|
|
158
|
+
throw new Error('A requirement batch must use a non-empty subset of the change requirement IDs.');
|
|
159
|
+
}
|
|
160
|
+
const batchPhase = phase;
|
|
161
|
+
change.tddBatches ??= [];
|
|
162
|
+
const key = batchKey(normalizedRequirementIds);
|
|
163
|
+
let batch = change.tddBatches.find((entry) => batchKey(entry.requirementIds) === key);
|
|
164
|
+
if (batchPhase === 'red') {
|
|
165
|
+
if (batch?.red)
|
|
166
|
+
throw new Error(`${changeId}:red is already recorded for requirement batch ${normalizedRequirementIds.join(', ')}.`);
|
|
167
|
+
if (!change.phases.design)
|
|
168
|
+
throw new Error('red requires the preceding design phase.');
|
|
169
|
+
if (!batch) {
|
|
170
|
+
batch = { requirementIds: normalizedRequirementIds };
|
|
171
|
+
change.tddBatches.push(batch);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
else if (batchPhase === 'implementation') {
|
|
175
|
+
if (!batch?.red)
|
|
176
|
+
throw new Error(`implementation requires the preceding red phase for requirement batch ${normalizedRequirementIds.join(', ')}.`);
|
|
177
|
+
if (batch.implementation)
|
|
178
|
+
throw new Error(`${changeId}:implementation is already recorded for requirement batch ${normalizedRequirementIds.join(', ')}.`);
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
if (!batch?.implementation)
|
|
182
|
+
throw new Error(`green requires the preceding implementation phase for requirement batch ${normalizedRequirementIds.join(', ')}.`);
|
|
183
|
+
if (batch.green)
|
|
184
|
+
throw new Error(`${changeId}:green is already recorded for requirement batch ${normalizedRequirementIds.join(', ')}.`);
|
|
185
|
+
}
|
|
186
|
+
const order = await appendEvidenceOrder(root, { kind: 'change', entityId: changeId, phase: `${phase}:${key}` });
|
|
187
|
+
batch[batchPhase] = {
|
|
188
|
+
phase,
|
|
189
|
+
order: order.sequence,
|
|
190
|
+
recordedAt: new Date().toISOString(),
|
|
191
|
+
fingerprints: await currentFingerprints(root, changeId, normalizedRequirementIds),
|
|
192
|
+
};
|
|
95
193
|
}
|
|
96
|
-
if (change.phases[phase])
|
|
97
|
-
throw new Error(`${changeId}:${phase} is already recorded.`);
|
|
98
|
-
const order = await appendEvidenceOrder(root, { kind: 'change', entityId: changeId, phase });
|
|
99
|
-
change.phases[phase] = {
|
|
100
|
-
phase,
|
|
101
|
-
order: order.sequence,
|
|
102
|
-
recordedAt: new Date().toISOString(),
|
|
103
|
-
fingerprints: await currentFingerprints(root, changeId, change.requirementIds),
|
|
104
|
-
};
|
|
105
194
|
await writeJson(root, '.musubix/evidence/changes.json', evidence);
|
|
106
195
|
return evidence;
|
|
107
196
|
}
|
|
197
|
+
/** @id CODE-CHANGE-REQUIREMENT-BATCHES-002
|
|
198
|
+
* @implements REQ-CHANGE-REQUIREMENT-BATCHES-005
|
|
199
|
+
* @design DES-CHANGE-REQUIREMENT-BATCHES-002
|
|
200
|
+
*/
|
|
108
201
|
export async function validateChangeEvidence(root) {
|
|
109
202
|
const evidence = await loadChangeEvidence(root);
|
|
110
203
|
const documents = (await files(root))
|
|
@@ -132,59 +225,113 @@ export async function validateChangeEvidence(root) {
|
|
|
132
225
|
}
|
|
133
226
|
}
|
|
134
227
|
const tdd = await loadTddEvidence(root);
|
|
228
|
+
const singularPhases = ['impact', 'requirements', 'design', 'quality'];
|
|
135
229
|
for (const change of evidence.changes) {
|
|
136
|
-
const
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
if (
|
|
141
|
-
diagnostics.push(error('
|
|
230
|
+
const batches = effectiveBatches(change);
|
|
231
|
+
const fullSetKey = batchKey(change.requirementIds);
|
|
232
|
+
for (const singularPhase of singularPhases) {
|
|
233
|
+
const item = change.phases[singularPhase];
|
|
234
|
+
if (!item)
|
|
235
|
+
diagnostics.push(error('CHANGE_PHASE_MISSING', `${change.changeId} is missing ${singularPhase}.`));
|
|
236
|
+
if (item && !Number.isInteger(item.order)) {
|
|
237
|
+
diagnostics.push(error('CHANGE_ORDER_MIGRATION_REQUIRED', `${change.changeId}:${singularPhase} lacks monotonic order evidence; regenerate this change chronology.`));
|
|
238
|
+
}
|
|
239
|
+
else if (item) {
|
|
240
|
+
const record = evidenceOrderRecord(order.records, 'change', change.changeId, singularPhase);
|
|
241
|
+
if (!record || record.sequence !== item.order) {
|
|
242
|
+
diagnostics.push(error('CHANGE_ORDER_MISMATCH', `${change.changeId}:${singularPhase} does not match the monotonic evidence order log.`));
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
if (change.phases.requirements?.order !== undefined && change.phases.impact?.order !== undefined
|
|
247
|
+
&& change.phases.requirements.order <= change.phases.impact.order) {
|
|
248
|
+
diagnostics.push(error('CHANGE_PHASE_ORDER', `${change.changeId}:requirements is not after impact.`));
|
|
249
|
+
}
|
|
250
|
+
if (change.phases.design?.order !== undefined && change.phases.requirements?.order !== undefined
|
|
251
|
+
&& change.phases.design.order <= change.phases.requirements.order) {
|
|
252
|
+
diagnostics.push(error('CHANGE_PHASE_ORDER', `${change.changeId}:design is not after requirements.`));
|
|
253
|
+
}
|
|
254
|
+
for (const batchPhase of tddBatchPhases) {
|
|
255
|
+
const covered = new Set(batches.filter((batch) => batch[batchPhase]).flatMap((batch) => batch.requirementIds));
|
|
256
|
+
const missing = change.requirementIds.filter((id) => !covered.has(id));
|
|
257
|
+
if (missing.length) {
|
|
258
|
+
diagnostics.push(error('CHANGE_PHASE_MISSING', `${change.changeId} is missing ${batchPhase} for ${missing.join(', ')}.`));
|
|
142
259
|
}
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
260
|
+
}
|
|
261
|
+
for (const batch of batches) {
|
|
262
|
+
const key = batchKey(batch.requirementIds);
|
|
263
|
+
const isFullSet = key === fullSetKey;
|
|
264
|
+
for (const batchPhase of tddBatchPhases) {
|
|
265
|
+
const item = batch[batchPhase];
|
|
266
|
+
if (!item)
|
|
267
|
+
continue;
|
|
268
|
+
if (!Number.isInteger(item.order)) {
|
|
269
|
+
diagnostics.push(error('CHANGE_ORDER_MIGRATION_REQUIRED', `${change.changeId}:${batchPhase} lacks monotonic order evidence; regenerate this change chronology.`));
|
|
270
|
+
continue;
|
|
271
|
+
}
|
|
272
|
+
const orderPhaseKey = isFullSet ? batchPhase : `${batchPhase}:${key}`;
|
|
273
|
+
const record = evidenceOrderRecord(order.records, 'change', change.changeId, orderPhaseKey);
|
|
274
|
+
if (!record || record.sequence !== item.order) {
|
|
275
|
+
diagnostics.push(error('CHANGE_ORDER_MISMATCH', `${change.changeId}:${batchPhase} does not match the monotonic evidence order log.`));
|
|
147
276
|
}
|
|
148
277
|
}
|
|
149
|
-
if (
|
|
150
|
-
&&
|
|
151
|
-
diagnostics.push(error('CHANGE_PHASE_ORDER', `${change.changeId}
|
|
278
|
+
if (batch.red?.order !== undefined && change.phases.design?.order !== undefined
|
|
279
|
+
&& batch.red.order <= change.phases.design.order) {
|
|
280
|
+
diagnostics.push(error('CHANGE_PHASE_ORDER', `${change.changeId}:red is not after design.`));
|
|
281
|
+
}
|
|
282
|
+
if (batch.implementation?.order !== undefined && batch.red?.order !== undefined
|
|
283
|
+
&& batch.implementation.order <= batch.red.order) {
|
|
284
|
+
diagnostics.push(error('CHANGE_PHASE_ORDER', `${change.changeId}:implementation is not after red.`));
|
|
285
|
+
}
|
|
286
|
+
if (batch.green?.order !== undefined && batch.implementation?.order !== undefined
|
|
287
|
+
&& batch.green.order <= batch.implementation.order) {
|
|
288
|
+
diagnostics.push(error('CHANGE_PHASE_ORDER', `${change.changeId}:green is not after implementation.`));
|
|
289
|
+
}
|
|
290
|
+
if (change.phases.quality?.order !== undefined && batch.green?.order !== undefined
|
|
291
|
+
&& change.phases.quality.order <= batch.green.order) {
|
|
292
|
+
diagnostics.push(error('CHANGE_PHASE_ORDER', `${change.changeId}:quality is not after green.`));
|
|
152
293
|
}
|
|
153
294
|
}
|
|
154
295
|
const impact = change.phases.impact;
|
|
155
296
|
const requirements = change.phases.requirements;
|
|
156
297
|
const design = change.phases.design;
|
|
157
|
-
const red = change.phases.red;
|
|
158
|
-
const implementation = change.phases.implementation;
|
|
159
|
-
const green = change.phases.green;
|
|
160
298
|
if (impact && requirements && impact.fingerprints.requirements === requirements.fingerprints.requirements) {
|
|
161
299
|
diagnostics.push(error('CHANGE_REQUIREMENTS_UNCHANGED', `${change.changeId} did not change requirements after impact analysis.`));
|
|
162
300
|
}
|
|
163
301
|
if (requirements && design && requirements.fingerprints.design === design.fingerprints.design) {
|
|
164
302
|
diagnostics.push(error('CHANGE_DESIGN_UNCHANGED', `${change.changeId} did not change design after requirements.`));
|
|
165
303
|
}
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
304
|
+
for (const batch of batches) {
|
|
305
|
+
const red = batch.red;
|
|
306
|
+
const implementation = batch.implementation;
|
|
307
|
+
const green = batch.green;
|
|
308
|
+
if (design && red && design.fingerprints.tests === red.fingerprints.tests) {
|
|
309
|
+
diagnostics.push(error('CHANGE_TESTS_UNCHANGED', `${change.changeId} did not add or change tests before Red.`));
|
|
310
|
+
}
|
|
311
|
+
if (red && implementation && red.fingerprints.implementation === implementation.fingerprints.implementation) {
|
|
312
|
+
diagnostics.push(error('CHANGE_IMPLEMENTATION_UNCHANGED', `${change.changeId} did not change implementation after Red.`));
|
|
313
|
+
}
|
|
314
|
+
if (red && implementation) {
|
|
315
|
+
for (const requirementId of batch.requirementIds) {
|
|
316
|
+
const before = red.fingerprints.requirementImplementations?.[requirementId];
|
|
317
|
+
const after = implementation.fingerprints.requirementImplementations?.[requirementId];
|
|
318
|
+
if (!before || !after || (!before.paths.length && !after.paths.length)) {
|
|
319
|
+
diagnostics.push(error('CHANGE_IMPLEMENTATION_SCOPE_MISSING', `${change.changeId} has no Code Graph implementation scope for ${requirementId}.`));
|
|
320
|
+
}
|
|
321
|
+
else if (JSON.stringify(before.fingerprints) === JSON.stringify(after.fingerprints)) {
|
|
322
|
+
diagnostics.push(error('CHANGE_RELEVANT_IMPLEMENTATION_UNCHANGED', `${change.changeId} did not change implementation related to ${requirementId} after Red.`));
|
|
323
|
+
}
|
|
181
324
|
}
|
|
182
325
|
}
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
326
|
+
if (red && green && red.fingerprints.tests !== green.fingerprints.tests) {
|
|
327
|
+
diagnostics.push(error('CHANGE_TEST_CHANGED_AFTER_RED', `${change.changeId} changed tests between Red and Green.`));
|
|
328
|
+
}
|
|
186
329
|
}
|
|
187
330
|
for (const requirementId of change.requirementIds) {
|
|
331
|
+
const batch = batchFor(batches, requirementId);
|
|
332
|
+
const red = batch?.red;
|
|
333
|
+
const implementation = batch?.implementation;
|
|
334
|
+
const green = batch?.green;
|
|
188
335
|
const cycles = tdd?.cycles.filter((cycle) => cycle.requirementId === requirementId) ?? [];
|
|
189
336
|
const validCycle = cycles.find((cycle) => requirements
|
|
190
337
|
&& red
|
|
@@ -286,9 +433,10 @@ export async function validateChangeCompleteness(root) {
|
|
|
286
433
|
&& !/^(TODO|TBD|N\/A|none|未定)$/i.test(requirement.acceptance.trim())
|
|
287
434
|
&& /(?:\d|test|check|verif|assert|given|when|then|return|status|pass|fail|テスト|確認|検証|以下|以上)/i.test(requirement.acceptance);
|
|
288
435
|
const requirements = change.phases.requirements;
|
|
289
|
-
const
|
|
290
|
-
const
|
|
291
|
-
const
|
|
436
|
+
const batch = batchFor(effectiveBatches(change), requirementId);
|
|
437
|
+
const red = batch?.red;
|
|
438
|
+
const implementation = batch?.implementation;
|
|
439
|
+
const green = batch?.green;
|
|
292
440
|
const hasTdd = tdd?.cycles.some((cycle) => cycle.requirementId === requirementId
|
|
293
441
|
&& requirements
|
|
294
442
|
&& red
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"change.js","sourceRoot":"","sources":["../../../../packages/analysis/src/change.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"change.js","sourceRoot":"","sources":["../../../../packages/analysis/src/change.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,7 @@ export interface CommandConfig {
|
|
|
17
17
|
path: string;
|
|
18
18
|
};
|
|
19
19
|
adapter?: 'vitest' | 'jest' | 'pytest' | 'go-test' | 'cargo' | 'junit' | 'dotnet';
|
|
20
|
+
cwd?: string;
|
|
20
21
|
required: boolean;
|
|
21
22
|
timeoutMs: number;
|
|
22
23
|
}
|
|
@@ -136,14 +137,18 @@ export interface CommandScaffoldProposal {
|
|
|
136
137
|
* @design DES-CLI-WORKFLOW-UX-006
|
|
137
138
|
*/
|
|
138
139
|
export declare function scaffoldCommands(root: string): Promise<CommandScaffoldProposal[]>;
|
|
140
|
+
export declare function commandCwd(root: string, command: CommandConfig): string;
|
|
139
141
|
/**
|
|
140
142
|
* REQ-CLI-WORKFLOW-UX-004: scan every configured command's `args` for tokens
|
|
141
143
|
* that look like repository-relative file paths and report any that do not
|
|
142
144
|
* exist under the project root. Read-only; never modifies the config file.
|
|
145
|
+
* REQ-COMMAND-WORKING-DIRECTORY-002/003: a command's own `cwd` (when set) is
|
|
146
|
+
* validated first, and its `args` are checked against that directory rather
|
|
147
|
+
* than always the project root.
|
|
143
148
|
*/
|
|
144
149
|
/** @id CODE-CLI-WORKFLOW-UX-004
|
|
145
|
-
* @implements REQ-CLI-WORKFLOW-UX-004
|
|
146
|
-
* @design DES-CLI-WORKFLOW-UX-004
|
|
150
|
+
* @implements REQ-CLI-WORKFLOW-UX-004 REQ-COMMAND-WORKING-DIRECTORY-002 REQ-COMMAND-WORKING-DIRECTORY-003
|
|
151
|
+
* @design DES-CLI-WORKFLOW-UX-004 DES-COMMAND-WORKING-DIRECTORY-002
|
|
147
152
|
*/
|
|
148
153
|
export declare function configLint(root: string): Promise<{
|
|
149
154
|
valid: boolean;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { resolve } from 'node:path';
|
|
1
2
|
import { error } from '../../domain/src/index.js';
|
|
2
|
-
import { exists, files, readText, within } from './files.js';
|
|
3
|
+
import { exists, files, isDirectory, readText, within } from './files.js';
|
|
3
4
|
export const checkNames = ['requirements', 'design', 'constitution', 'trace', 'graph', 'formal', 'model-correspondence', 'mutation', 'workflow', 'tdd', 'change-history', 'change-completeness', 'performance', 'attestation', 'approval', 'test-identities', 'commands'];
|
|
4
5
|
export const defaultConfig = {
|
|
5
6
|
schemaVersion: 1,
|
|
@@ -147,13 +148,16 @@ export function parseConfig(input) {
|
|
|
147
148
|
throw new Error('commands must be an array.');
|
|
148
149
|
const commands = rawCommands.map((raw) => {
|
|
149
150
|
const c = object(raw, 'command');
|
|
150
|
-
keys(c, ['name', 'command', 'args', 'tddArgs', 'tddReport', 'testReport', 'mutationReport', 'adapter', 'required', 'timeoutMs'], 'command');
|
|
151
|
+
keys(c, ['name', 'command', 'args', 'tddArgs', 'tddReport', 'testReport', 'mutationReport', 'adapter', 'cwd', 'required', 'timeoutMs'], 'command');
|
|
151
152
|
if (typeof c.name !== 'string' || !/^[a-zA-Z0-9_-]+$/.test(c.name))
|
|
152
153
|
throw new Error('Command name must be a simple nonempty identifier.');
|
|
153
154
|
if (typeof c.command !== 'string' || !c.command.trim() || c.command.includes('\0'))
|
|
154
155
|
throw new Error('Command executable must be nonempty.');
|
|
155
156
|
if (c.required !== undefined && typeof c.required !== 'boolean')
|
|
156
157
|
throw new Error('command.required must be boolean.');
|
|
158
|
+
if (c.cwd !== undefined && (typeof c.cwd !== 'string' || !c.cwd.trim() || c.cwd.includes('\0'))) {
|
|
159
|
+
throw new Error('command.cwd must be a nonempty relative path.');
|
|
160
|
+
}
|
|
157
161
|
if (c.adapter !== undefined && !['vitest', 'jest', 'pytest', 'go-test', 'cargo', 'junit', 'dotnet'].includes(String(c.adapter))) {
|
|
158
162
|
throw new Error('command.adapter must be vitest, jest, pytest, go-test, cargo, junit, or dotnet.');
|
|
159
163
|
}
|
|
@@ -221,6 +225,7 @@ export function parseConfig(input) {
|
|
|
221
225
|
...(testReport ? { testReport } : {}),
|
|
222
226
|
...(mutationReport ? { mutationReport } : {}),
|
|
223
227
|
...(adapter ? { adapter } : {}),
|
|
228
|
+
...(c.cwd !== undefined ? { cwd: c.cwd } : {}),
|
|
224
229
|
required: c.required !== false,
|
|
225
230
|
timeoutMs,
|
|
226
231
|
};
|
|
@@ -483,6 +488,18 @@ export async function scaffoldCommands(root) {
|
|
|
483
488
|
}
|
|
484
489
|
return proposals;
|
|
485
490
|
}
|
|
491
|
+
/* @id CODE-COMMAND-WORKING-DIRECTORY-001
|
|
492
|
+
* @implements REQ-COMMAND-WORKING-DIRECTORY-001
|
|
493
|
+
* @design DES-COMMAND-WORKING-DIRECTORY-001
|
|
494
|
+
*/
|
|
495
|
+
// Resolve a command's own working directory, defaulting to the project root
|
|
496
|
+
// when it declares no `cwd`. Reuses `within()` so an escaping `cwd` throws
|
|
497
|
+
// the same error every other path-containment check in this project throws;
|
|
498
|
+
// callers that want a lint diagnostic instead of a thrown error (configLint,
|
|
499
|
+
// below) must catch it themselves.
|
|
500
|
+
export function commandCwd(root, command) {
|
|
501
|
+
return command.cwd === undefined ? root : within(root, command.cwd);
|
|
502
|
+
}
|
|
486
503
|
function looksLikeRepoRelativePath(arg) {
|
|
487
504
|
if (arg.startsWith('-'))
|
|
488
505
|
return false;
|
|
@@ -490,23 +507,51 @@ function looksLikeRepoRelativePath(arg) {
|
|
|
490
507
|
return false;
|
|
491
508
|
return arg.includes('/');
|
|
492
509
|
}
|
|
510
|
+
/* @id CODE-ADAPTER-PATTERN-RECOGNITION-002
|
|
511
|
+
* @implements REQ-ADAPTER-PATTERN-RECOGNITION-002
|
|
512
|
+
* @design DES-ADAPTER-PATTERN-RECOGNITION-001
|
|
513
|
+
*/
|
|
514
|
+
// Go's package-pattern syntax ("./...", "pkg/...") is not a filesystem path;
|
|
515
|
+
// it is a recursive package wildcard understood only by the `go` toolchain.
|
|
516
|
+
// Scoped to the go-test adapter so the orphaned-path check is not weakened
|
|
517
|
+
// for any other command's genuinely path-like arguments.
|
|
518
|
+
function isGoPackagePattern(arg) {
|
|
519
|
+
return /(?:^|\/)\.\.\.$/.test(arg);
|
|
520
|
+
}
|
|
493
521
|
/**
|
|
494
522
|
* REQ-CLI-WORKFLOW-UX-004: scan every configured command's `args` for tokens
|
|
495
523
|
* that look like repository-relative file paths and report any that do not
|
|
496
524
|
* exist under the project root. Read-only; never modifies the config file.
|
|
525
|
+
* REQ-COMMAND-WORKING-DIRECTORY-002/003: a command's own `cwd` (when set) is
|
|
526
|
+
* validated first, and its `args` are checked against that directory rather
|
|
527
|
+
* than always the project root.
|
|
497
528
|
*/
|
|
498
529
|
/** @id CODE-CLI-WORKFLOW-UX-004
|
|
499
|
-
* @implements REQ-CLI-WORKFLOW-UX-004
|
|
500
|
-
* @design DES-CLI-WORKFLOW-UX-004
|
|
530
|
+
* @implements REQ-CLI-WORKFLOW-UX-004 REQ-COMMAND-WORKING-DIRECTORY-002 REQ-COMMAND-WORKING-DIRECTORY-003
|
|
531
|
+
* @design DES-CLI-WORKFLOW-UX-004 DES-COMMAND-WORKING-DIRECTORY-002
|
|
501
532
|
*/
|
|
502
533
|
export async function configLint(root) {
|
|
503
534
|
const config = await loadConfig(root);
|
|
504
535
|
const diagnostics = [];
|
|
505
536
|
for (const command of config.commands) {
|
|
537
|
+
let base;
|
|
538
|
+
try {
|
|
539
|
+
base = commandCwd(root, command);
|
|
540
|
+
}
|
|
541
|
+
catch {
|
|
542
|
+
diagnostics.push(error('CONFIG_CWD_INVALID', `Command "${command.name}" has a cwd that escapes the project root: ${command.cwd}`));
|
|
543
|
+
continue;
|
|
544
|
+
}
|
|
545
|
+
if (command.cwd !== undefined && !await isDirectory(base)) {
|
|
546
|
+
diagnostics.push(error('CONFIG_CWD_INVALID', `Command "${command.name}" has a cwd that does not exist: ${command.cwd}`));
|
|
547
|
+
continue;
|
|
548
|
+
}
|
|
506
549
|
for (const arg of command.args) {
|
|
507
550
|
if (!looksLikeRepoRelativePath(arg))
|
|
508
551
|
continue;
|
|
509
|
-
if (
|
|
552
|
+
if (command.adapter === 'go-test' && isGoPackagePattern(arg))
|
|
553
|
+
continue;
|
|
554
|
+
if (!await exists(within(root, resolve(base, arg)))) {
|
|
510
555
|
diagnostics.push(error('CONFIG_ORPHANED_PATH', `Command "${command.name}" references a path that does not exist: ${arg}`));
|
|
511
556
|
}
|
|
512
557
|
}
|