@rasensio/aidlc 1.26.0 → 1.26.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/dist/commands/review.d.ts +15 -2
- package/dist/commands/review.d.ts.map +1 -1
- package/dist/commands/review.js +163 -9
- package/dist/commands/review.js.map +1 -1
- package/dist/commands/transition.d.ts.map +1 -1
- package/dist/commands/transition.js +45 -8
- package/dist/commands/transition.js.map +1 -1
- package/dist/core/lifecycle.d.ts.map +1 -1
- package/dist/core/lifecycle.js +30 -1
- package/dist/core/lifecycle.js.map +1 -1
- package/dist/doctor/migrations/findings-filename.d.ts +77 -0
- package/dist/doctor/migrations/findings-filename.d.ts.map +1 -0
- package/dist/doctor/migrations/findings-filename.js +189 -0
- package/dist/doctor/migrations/findings-filename.js.map +1 -0
- package/dist/doctor/migrations/index.d.ts.map +1 -1
- package/dist/doctor/migrations/index.js +8 -0
- package/dist/doctor/migrations/index.js.map +1 -1
- package/dist/review/findings-naming.d.ts +112 -0
- package/dist/review/findings-naming.d.ts.map +1 -0
- package/dist/review/findings-naming.js +132 -0
- package/dist/review/findings-naming.js.map +1 -0
- package/package.json +2 -2
|
@@ -3,14 +3,27 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Behavior:
|
|
5
5
|
* - `aidlc review <instance> <artifact>` — create or show findings for an artifact.
|
|
6
|
-
* - Writes structured findings to
|
|
6
|
+
* - Writes structured findings to
|
|
7
|
+
* `.aidlc/state/<instance>/<artifact>.md.review.md`, via
|
|
8
|
+
* `findingsFilename` — never from the argument as typed.
|
|
7
9
|
* - In non-orchestrator mode: creates a placeholder findings file and prints
|
|
8
10
|
* instructions for manual review (the skill `80-review.md` guides AI agents).
|
|
9
11
|
* - With `--json`: output findings structure as JSON.
|
|
10
12
|
* - Integrates with review gate: `evaluateTransition` already checks for `*.review.md`
|
|
11
13
|
* files and parses findings from them.
|
|
12
14
|
*
|
|
13
|
-
*
|
|
15
|
+
* ## The filename used to come from the argument as typed
|
|
16
|
+
*
|
|
17
|
+
* It no longer does. `` `${artifactArg}.review.md` `` meant that typing
|
|
18
|
+
* `requirements` — the phase name, and what the review skill's prose calls the
|
|
19
|
+
* artifact — produced `requirements.review.md`, which the gate could not see
|
|
20
|
+
* because it looks artifacts up by the template's name, `requirements.md`. The
|
|
21
|
+
* review ran, parsed, counted and summarised correctly, and the transition failed
|
|
22
|
+
* saying the findings file was absent. 11 files across 6 completed instances are
|
|
23
|
+
* still on disk under that spelling. `review/findings-naming.ts` now owns the
|
|
24
|
+
* mapping for both this writer and the reader in `transition.ts`.
|
|
25
|
+
*
|
|
26
|
+
* Requirements: 24.1, 24.2, 24.4, AC-1, AC-2, AC-3, AC-7
|
|
14
27
|
*
|
|
15
28
|
* @module
|
|
16
29
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,OAAO,KAAK,EAAE,OAAO,EAAmB,MAAM,kBAAkB,CAAC;AAWjE,wDAAwD;AACxD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,kDAAkD;AAClD,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;AAaD,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,eAAe,GAChB,MAAM,8BAA8B,CAAC;AAEtC;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,CASjE;AAMD;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,GACf,MAAM,CAgBR;AAMD;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAerD"}
|
package/dist/commands/review.js
CHANGED
|
@@ -3,14 +3,27 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Behavior:
|
|
5
5
|
* - `aidlc review <instance> <artifact>` — create or show findings for an artifact.
|
|
6
|
-
* - Writes structured findings to
|
|
6
|
+
* - Writes structured findings to
|
|
7
|
+
* `.aidlc/state/<instance>/<artifact>.md.review.md`, via
|
|
8
|
+
* `findingsFilename` — never from the argument as typed.
|
|
7
9
|
* - In non-orchestrator mode: creates a placeholder findings file and prints
|
|
8
10
|
* instructions for manual review (the skill `80-review.md` guides AI agents).
|
|
9
11
|
* - With `--json`: output findings structure as JSON.
|
|
10
12
|
* - Integrates with review gate: `evaluateTransition` already checks for `*.review.md`
|
|
11
13
|
* files and parses findings from them.
|
|
12
14
|
*
|
|
13
|
-
*
|
|
15
|
+
* ## The filename used to come from the argument as typed
|
|
16
|
+
*
|
|
17
|
+
* It no longer does. `` `${artifactArg}.review.md` `` meant that typing
|
|
18
|
+
* `requirements` — the phase name, and what the review skill's prose calls the
|
|
19
|
+
* artifact — produced `requirements.review.md`, which the gate could not see
|
|
20
|
+
* because it looks artifacts up by the template's name, `requirements.md`. The
|
|
21
|
+
* review ran, parsed, counted and summarised correctly, and the transition failed
|
|
22
|
+
* saying the findings file was absent. 11 files across 6 completed instances are
|
|
23
|
+
* still on disk under that spelling. `review/findings-naming.ts` now owns the
|
|
24
|
+
* mapping for both this writer and the reader in `transition.ts`.
|
|
25
|
+
*
|
|
26
|
+
* Requirements: 24.1, 24.2, 24.4, AC-1, AC-2, AC-3, AC-7
|
|
14
27
|
*
|
|
15
28
|
* @module
|
|
16
29
|
*/
|
|
@@ -18,8 +31,11 @@ import { Command } from 'commander';
|
|
|
18
31
|
import { existsSync, readFileSync, readdirSync } from 'node:fs';
|
|
19
32
|
import { join } from 'node:path';
|
|
20
33
|
import { parseFindings, parseFrontmatter } from '../review/findings-parser.js';
|
|
21
|
-
import {
|
|
34
|
+
import { FINDINGS_SUFFIX, artifactFromFindingsFile, canonicalArtifactName, findingsFilename, } from '../review/findings-naming.js';
|
|
35
|
+
import { atomicWrite, instancePath, loadSnapshot } from '../state/snapshot-store.js';
|
|
22
36
|
import { resolveProjectRoot } from '../core/project-root.js';
|
|
37
|
+
import { loadTemplates, resolveTemplate, phasesForScope } from '../core/template-resolver.js';
|
|
38
|
+
import { loadTemplates as loadBuiltInTemplates } from '@rasensio/aidlc-content';
|
|
23
39
|
// ---------------------------------------------------------------------------
|
|
24
40
|
// Findings file parsing
|
|
25
41
|
//
|
|
@@ -92,7 +108,7 @@ export function registerReview(program) {
|
|
|
92
108
|
.command('review')
|
|
93
109
|
.description('Run an adversarial review of a lifecycle artifact, recording structured findings')
|
|
94
110
|
.argument('<instance>', 'Lifecycle instance name')
|
|
95
|
-
.argument('<artifact>', 'Artifact
|
|
111
|
+
.argument('<artifact>', 'Artifact to review, with or without .md (e.g., requirements or requirements.md)')
|
|
96
112
|
.option('--json', 'Output findings as structured JSON')
|
|
97
113
|
.action((instance, artifact, opts) => {
|
|
98
114
|
runReview(instance, artifact, opts);
|
|
@@ -111,24 +127,47 @@ function runReview(instanceArg, artifactArg, opts) {
|
|
|
111
127
|
process.exitCode = 1;
|
|
112
128
|
return;
|
|
113
129
|
}
|
|
114
|
-
//
|
|
115
|
-
const
|
|
130
|
+
// AC-7: refuse an artifact no gate will ever read, before writing anything.
|
|
131
|
+
const rejection = checkArtifactAllowed(projectRoot, stateDir, instanceArg, artifactArg);
|
|
132
|
+
if (rejection) {
|
|
133
|
+
process.stderr.write(`Error: ${rejection}\n`);
|
|
134
|
+
process.exitCode = 1;
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
// AC-1, AC-2, AC-3: the filename comes from the shared helper, never from the
|
|
138
|
+
// argument as typed, so both spellings land on one file.
|
|
139
|
+
const artifactName = canonicalArtifactName(artifactArg);
|
|
140
|
+
const findingsFileName = findingsFilename(artifactArg);
|
|
116
141
|
const findingsFilePath = join(instDir, findingsFileName);
|
|
117
|
-
|
|
142
|
+
// AC-3: probe the legacy spelling before scaffolding. Without this, running
|
|
143
|
+
// `aidlc review cost-tracking requirements` against one of the six instances
|
|
144
|
+
// that already hold `requirements.review.md` would write a second file beside
|
|
145
|
+
// it — two files for one artifact, which is the thing AC-3 forbids.
|
|
146
|
+
const legacyPath = existsSync(findingsFilePath)
|
|
147
|
+
? null
|
|
148
|
+
: findLegacyFindingsFile(instDir, artifactName);
|
|
149
|
+
const existingPath = existsSync(findingsFilePath) ? findingsFilePath : legacyPath;
|
|
150
|
+
if (existingPath) {
|
|
118
151
|
// Read and output existing findings
|
|
119
|
-
const content = readFileSync(
|
|
152
|
+
const content = readFileSync(existingPath, 'utf8');
|
|
120
153
|
const parsed = parseFindingsFile(content);
|
|
121
154
|
if (opts.json) {
|
|
122
155
|
process.stdout.write(JSON.stringify(parsed, null, 2) + '\n');
|
|
123
156
|
}
|
|
124
157
|
else {
|
|
158
|
+
if (legacyPath) {
|
|
159
|
+
process.stdout.write(`Note: findings are recorded under the legacy filename ` +
|
|
160
|
+
`"${legacyPath.slice(instDir.length + 1)}". ` +
|
|
161
|
+
`The gate reads it, and \`aidlc doctor\` renames it to ` +
|
|
162
|
+
`"${findingsFileName}".\n\n`);
|
|
163
|
+
}
|
|
125
164
|
printFindingsSummary(parsed);
|
|
126
165
|
}
|
|
127
166
|
return;
|
|
128
167
|
}
|
|
129
168
|
// No findings file exists — create a placeholder
|
|
130
169
|
const reviewer = getReviewerIdentity();
|
|
131
|
-
const placeholder = generatePlaceholderFindings(
|
|
170
|
+
const placeholder = generatePlaceholderFindings(artifactName, reviewer);
|
|
132
171
|
// Write the findings file atomically
|
|
133
172
|
atomicWrite(findingsFilePath, placeholder);
|
|
134
173
|
// Parse what we just wrote for output
|
|
@@ -151,6 +190,121 @@ function runReview(instanceArg, artifactArg, opts) {
|
|
|
151
190
|
// ---------------------------------------------------------------------------
|
|
152
191
|
// Helpers
|
|
153
192
|
// ---------------------------------------------------------------------------
|
|
193
|
+
/**
|
|
194
|
+
* Find a findings file for `artifactName` under the legacy spelling.
|
|
195
|
+
*
|
|
196
|
+
* The legacy spelling drops the artifact's own `.md` — `requirements.review.md`
|
|
197
|
+
* for `requirements.md`. `artifactFromFindingsFile` resolves both, so rather than
|
|
198
|
+
* reconstruct the legacy name here (a second derivation, which is the bug class
|
|
199
|
+
* this instance closes) we scan the directory and ask the shared helper.
|
|
200
|
+
*
|
|
201
|
+
* @returns Absolute path, or null when no such file exists.
|
|
202
|
+
*/
|
|
203
|
+
function findLegacyFindingsFile(instDir, artifactName) {
|
|
204
|
+
let entries;
|
|
205
|
+
try {
|
|
206
|
+
entries = readdirSync(instDir).sort();
|
|
207
|
+
}
|
|
208
|
+
catch {
|
|
209
|
+
return null;
|
|
210
|
+
}
|
|
211
|
+
for (const entry of entries) {
|
|
212
|
+
if (!entry.endsWith(FINDINGS_SUFFIX))
|
|
213
|
+
continue;
|
|
214
|
+
if (entry === `${artifactName}${FINDINGS_SUFFIX}`)
|
|
215
|
+
continue;
|
|
216
|
+
if (artifactFromFindingsFile(entry) === artifactName) {
|
|
217
|
+
return join(instDir, entry);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
return null;
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* AC-7: is `artifactArg` an artifact this instance's template actually declares?
|
|
224
|
+
*
|
|
225
|
+
* Today a typo scaffolds a findings file that no gate will ever read — the exact
|
|
226
|
+
* silent-success shape this instance exists to remove, one step earlier in the
|
|
227
|
+
* pipeline.
|
|
228
|
+
*
|
|
229
|
+
* The allowlist is every artifact, **required or optional**, across every phase in
|
|
230
|
+
* the instance's scope. That is deliberately wider than AC-7's literal wording
|
|
231
|
+
* ("the current phase's required artifacts"), and `design.md` records why:
|
|
232
|
+
* `architecture-diagram.md` is an *optional* artifact of design in `full-feature`
|
|
233
|
+
* and `agent-portability` legitimately reviewed it, while re-reviewing an earlier
|
|
234
|
+
* phase's artifact is exactly what the amendment protocol asks for. Both would be
|
|
235
|
+
* refused by the literal reading. The typo is still caught, which is the point.
|
|
236
|
+
*
|
|
237
|
+
* @returns An error message, or null when the argument is acceptable.
|
|
238
|
+
*/
|
|
239
|
+
function checkArtifactAllowed(projectRoot, stateDir, instanceArg, artifactArg) {
|
|
240
|
+
const allowed = declaredArtifacts(projectRoot, stateDir, instanceArg);
|
|
241
|
+
// Unresolvable template → skip the check. A review is not the place to discover
|
|
242
|
+
// a broken template, and refusing to run would be worse than accepting a typo.
|
|
243
|
+
if (allowed === null)
|
|
244
|
+
return null;
|
|
245
|
+
const artifactName = canonicalArtifactName(artifactArg);
|
|
246
|
+
if (allowed.has(artifactName))
|
|
247
|
+
return null;
|
|
248
|
+
const valid = [...allowed].sort().join(', ');
|
|
249
|
+
return (`'${artifactArg}' is not an artifact of instance '${instanceArg}'. ` +
|
|
250
|
+
`Reviewable artifacts: ${valid}`);
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Every artifact name the instance's template declares, or null when the instance
|
|
254
|
+
* state or template cannot be resolved.
|
|
255
|
+
*/
|
|
256
|
+
function declaredArtifacts(projectRoot, stateDir, instanceArg) {
|
|
257
|
+
let instanceState;
|
|
258
|
+
try {
|
|
259
|
+
instanceState = loadSnapshot(stateDir, instanceArg, 'instance.yaml');
|
|
260
|
+
}
|
|
261
|
+
catch {
|
|
262
|
+
return null;
|
|
263
|
+
}
|
|
264
|
+
if (!instanceState?.template)
|
|
265
|
+
return null;
|
|
266
|
+
let resolved;
|
|
267
|
+
try {
|
|
268
|
+
const all = loadAllTemplates(projectRoot);
|
|
269
|
+
const base = all.get(instanceState.template);
|
|
270
|
+
if (!base)
|
|
271
|
+
return null;
|
|
272
|
+
resolved = resolveTemplate(base, all);
|
|
273
|
+
}
|
|
274
|
+
catch {
|
|
275
|
+
return null;
|
|
276
|
+
}
|
|
277
|
+
const phases = phasesForScope(resolved, instanceState.scope);
|
|
278
|
+
const names = new Set();
|
|
279
|
+
for (const phase of phases) {
|
|
280
|
+
for (const a of phase.required_artifacts ?? [])
|
|
281
|
+
names.add(a.name);
|
|
282
|
+
for (const a of phase.optional_artifacts ?? [])
|
|
283
|
+
names.add(a.name);
|
|
284
|
+
}
|
|
285
|
+
return names.size > 0 ? names : null;
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Built-in templates plus any the project defines.
|
|
289
|
+
*
|
|
290
|
+
* Mirrors `loadAllTemplates` in `commands/transition.ts`. Duplicated rather than
|
|
291
|
+
* shared because extracting it would move a function two commands depend on for a
|
|
292
|
+
* caller that only needs a read-only lookup; if a third caller appears, extract it
|
|
293
|
+
* then.
|
|
294
|
+
*/
|
|
295
|
+
function loadAllTemplates(projectRoot) {
|
|
296
|
+
const templates = new Map();
|
|
297
|
+
for (const tpl of loadBuiltInTemplates()) {
|
|
298
|
+
templates.set(tpl.name, tpl.raw);
|
|
299
|
+
}
|
|
300
|
+
const customDir = join(projectRoot, '.aidlc', 'templates');
|
|
301
|
+
if (existsSync(customDir)) {
|
|
302
|
+
for (const [name, tpl] of loadTemplates(customDir)) {
|
|
303
|
+
templates.set(name, tpl);
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
return templates;
|
|
307
|
+
}
|
|
154
308
|
/**
|
|
155
309
|
* Determine reviewer identity from environment.
|
|
156
310
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transition.d.ts","sourceRoot":"","sources":["../../src/commands/transition.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"transition.d.ts","sourceRoot":"","sources":["../../src/commands/transition.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4GpC;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAgB9E;AA4FD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAUzD"}
|
|
@@ -27,6 +27,7 @@ import { existsSync, readdirSync, readFileSync } from 'node:fs';
|
|
|
27
27
|
import { join } from 'node:path';
|
|
28
28
|
import { loadTemplates as loadBuiltInTemplates } from '@rasensio/aidlc-content';
|
|
29
29
|
import { evaluateTransition, nextStep } from '../core/lifecycle.js';
|
|
30
|
+
import { FINDINGS_SUFFIX, artifactFromFindingsFile, isCanonicalFindingsFile, } from '../review/findings-naming.js';
|
|
30
31
|
import { parseFindingsFile } from './review.js';
|
|
31
32
|
import { evaluateKnowledgeCriterion } from '../knowledge/gate-criterion.js';
|
|
32
33
|
import { evaluateTraceabilityCriterion, uncoveredMessage, } from '../traceability/gate-criterion.js';
|
|
@@ -127,11 +128,19 @@ export function getActorIdentity(projectRoot, instance) {
|
|
|
127
128
|
return envActor;
|
|
128
129
|
}
|
|
129
130
|
/**
|
|
130
|
-
* Parse review findings from
|
|
131
|
+
* Parse review findings from `*.review.md` files in the instance directory.
|
|
131
132
|
*
|
|
132
|
-
* Looks for files matching `*.review.md` and parses them into a FindingsIndex.
|
|
133
133
|
* Each finding is parsed from markdown heading format:
|
|
134
134
|
* ## <id>: <title> [<severity>] [<status>]
|
|
135
|
+
*
|
|
136
|
+
* The index is keyed by **artifact name as the template declares it** —
|
|
137
|
+
* `requirements.md`, not `requirements` — because that is what `checkReviewGate`
|
|
138
|
+
* looks up. It used to be keyed by `file.replace('.review.md', '')`, which for the
|
|
139
|
+
* file `aidlc review` wrote from a bare `requirements` argument produced the key
|
|
140
|
+
* `requirements`, and the two never met: a complete review reported as "no
|
|
141
|
+
* findings file". `artifactFromFindingsFile` resolves both spellings to one key,
|
|
142
|
+
* so the 11 legacy files across 6 completed instances now count without a
|
|
143
|
+
* compatibility branch here (AC-4, AC-5).
|
|
135
144
|
*/
|
|
136
145
|
function loadFindings(stateDir, instanceName) {
|
|
137
146
|
const findings = {};
|
|
@@ -143,9 +152,17 @@ function loadFindings(stateDir, instanceName) {
|
|
|
143
152
|
catch {
|
|
144
153
|
return findings;
|
|
145
154
|
}
|
|
146
|
-
|
|
155
|
+
// Sorted so a directory's read order never decides the outcome. Two spellings of
|
|
156
|
+
// one artifact both resolve to the same key, so without an explicit rule the
|
|
157
|
+
// winner would be whichever readdir happened to return last.
|
|
158
|
+
const reviewFiles = entries.filter((f) => f.endsWith(FINDINGS_SUFFIX)).sort();
|
|
159
|
+
// Which file supplied each key, so the canonical spelling can win a collision
|
|
160
|
+
// regardless of sort position and the loser can be named rather than dropped.
|
|
161
|
+
const sourceFile = {};
|
|
147
162
|
for (const file of reviewFiles) {
|
|
148
|
-
const artifactName = file
|
|
163
|
+
const artifactName = artifactFromFindingsFile(file);
|
|
164
|
+
if (artifactName === null)
|
|
165
|
+
continue;
|
|
149
166
|
const filePath = join(instanceDir, file);
|
|
150
167
|
try {
|
|
151
168
|
const content = readFileSync(filePath, 'utf8');
|
|
@@ -155,12 +172,32 @@ function loadFindings(stateDir, instanceName) {
|
|
|
155
172
|
// and severity, and flags the scaffolded placeholder. A second grammar for the
|
|
156
173
|
// same format is the bug class this instance exists to prevent.
|
|
157
174
|
const parsed = parseFindingsFile(content).findings;
|
|
158
|
-
if (parsed.length
|
|
159
|
-
|
|
175
|
+
if (parsed.length === 0)
|
|
176
|
+
continue;
|
|
177
|
+
const held = sourceFile[artifactName];
|
|
178
|
+
if (held !== undefined) {
|
|
179
|
+
// Both spellings exist for one artifact. Canonical wins; the other is
|
|
180
|
+
// reported, because silently preferring one of two files is how the
|
|
181
|
+
// original defect stayed invisible for a month.
|
|
182
|
+
const heldIsCanonical = isCanonicalFindingsFile(held);
|
|
183
|
+
const thisIsCanonical = isCanonicalFindingsFile(file);
|
|
184
|
+
const loser = thisIsCanonical ? held : file;
|
|
185
|
+
process.stderr.write(`warning: ${instanceName} has two findings files for "${artifactName}" ` +
|
|
186
|
+
`(${held}, ${file}); using ${thisIsCanonical ? file : held} and ignoring ` +
|
|
187
|
+
`${loser}. Run \`aidlc doctor\` to reconcile them.\n`);
|
|
188
|
+
if (heldIsCanonical || !thisIsCanonical)
|
|
189
|
+
continue;
|
|
160
190
|
}
|
|
191
|
+
findings[artifactName] = parsed;
|
|
192
|
+
sourceFile[artifactName] = file;
|
|
161
193
|
}
|
|
162
|
-
catch {
|
|
163
|
-
//
|
|
194
|
+
catch (err) {
|
|
195
|
+
// A findings file that will not parse is skipped, but never in silence: the
|
|
196
|
+
// whole defect class this instance closes is a review that looks done and
|
|
197
|
+
// counts for nothing. It still does not throw — one malformed file must not
|
|
198
|
+
// make `aidlc transition` unusable.
|
|
199
|
+
process.stderr.write(`warning: could not parse findings file ${file} in ${instanceName}: ` +
|
|
200
|
+
`${err.message}\n`);
|
|
164
201
|
}
|
|
165
202
|
}
|
|
166
203
|
return findings;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transition.js","sourceRoot":"","sources":["../../src/commands/transition.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"transition.js","sourceRoot":"","sources":["../../src/commands/transition.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/core/lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,gBAAgB,EAChB,aAAa,EACb,QAAQ,EAER,aAAa,EACb,gBAAgB,EAEjB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/core/lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,gBAAgB,EAChB,aAAa,EACb,QAAQ,EAER,aAAa,EACb,gBAAgB,EAEjB,MAAM,YAAY,CAAC;AASpB;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,EACpC,QAAQ,EAAE,gBAAgB,EAC1B,KAAK,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,GAC7B,MAAM,CA4BR;AAMD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,SAAS,CACvB,KAAK,EAAE,aAAa,EACpB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,EACpC,QAAQ,EAAE,gBAAgB,EAC1B,GAAG,EAAE,IAAI,EACT,aAAa,EAAE,MAAM,GACpB,OAAO,CAuBT;AAOD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,QAAQ,CACtB,KAAK,EAAE,aAAa,EACpB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,EACpC,QAAQ,EAAE,gBAAgB,GACzB,QAAQ,CA+CV;AA8ED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,aAAa,EACpB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,EACpC,QAAQ,EAAE,gBAAgB,EAC1B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,aAAa,EACvB,QAAQ,CAAC,EAAE,OAAO,GACjB,gBAAgB,CAiClB"}
|
package/dist/core/lifecycle.js
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { phasesForScope } from './template-resolver.js';
|
|
9
9
|
import { effectiveRequiredArtifacts } from './gate.js';
|
|
10
|
+
import { findingsFilename } from '../review/findings-naming.js';
|
|
10
11
|
// ---------------------------------------------------------------------------
|
|
11
12
|
// completionPercent (Req 11.2)
|
|
12
13
|
// ---------------------------------------------------------------------------
|
|
@@ -287,6 +288,32 @@ function checkRequiredArtifacts(templatePhase, phaseState, violations) {
|
|
|
287
288
|
}
|
|
288
289
|
}
|
|
289
290
|
}
|
|
291
|
+
/**
|
|
292
|
+
* Explain a missing findings file in terms of what is actually on disk (AC-6).
|
|
293
|
+
*
|
|
294
|
+
* The old message was the bare string "no findings file", and it was wrong in the
|
|
295
|
+
* most expensive direction: for a month it was printed while the file sat in the
|
|
296
|
+
* instance directory under one character's difference, so every signal said the
|
|
297
|
+
* review was done and only the gate disagreed — by claiming absence. Naming the
|
|
298
|
+
* filename the gate expects is the half that ends the confusion, because it tells
|
|
299
|
+
* the reader what to rename to.
|
|
300
|
+
*
|
|
301
|
+
* The "holds findings for" clause names artifacts rather than raw filenames.
|
|
302
|
+
* `checkReviewGate` is not given filenames, and widening `evaluateTransition` —
|
|
303
|
+
* a public seam with callers in four test files — to carry them would buy a
|
|
304
|
+
* cosmetic difference. `design.md` records this narrowing of AC-6.
|
|
305
|
+
*/
|
|
306
|
+
function describeMissingFindings(artifactName, findings) {
|
|
307
|
+
// No parentheses here: the caller already wraps this in a pair, and nesting them
|
|
308
|
+
// reads as `... review (no findings file (expected x.md.review.md))`.
|
|
309
|
+
const expected = `no findings file — expected ${findingsFilename(artifactName)}`;
|
|
310
|
+
const others = Object.keys(findings)
|
|
311
|
+
.filter((key) => key !== artifactName)
|
|
312
|
+
.sort();
|
|
313
|
+
if (others.length === 0)
|
|
314
|
+
return expected;
|
|
315
|
+
return `${expected}; the instance holds findings for: ${others.join(', ')}`;
|
|
316
|
+
}
|
|
290
317
|
/**
|
|
291
318
|
* If the template has an adversarial-review gate for the current phase,
|
|
292
319
|
* check that no finding with severity 'critical' and status 'open' exists.
|
|
@@ -315,7 +342,9 @@ function checkReviewGate(template, currentPhaseName, findings, violations) {
|
|
|
315
342
|
violations.push({
|
|
316
343
|
gate: 'review-gate',
|
|
317
344
|
reason: `review gate: "${artifact.name}" has no completed review ` +
|
|
318
|
-
`(${forArtifact.length > 0
|
|
345
|
+
`(${forArtifact.length > 0
|
|
346
|
+
? 'only the scaffolded placeholder is present'
|
|
347
|
+
: describeMissingFindings(artifact.name, findings)})`,
|
|
319
348
|
});
|
|
320
349
|
}
|
|
321
350
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/core/lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAYH,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,0BAA0B,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/core/lifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* findings-filename migration (safe tier): rename a review findings file from the
|
|
3
|
+
* legacy spelling to the canonical one, so one artifact has one findings file.
|
|
4
|
+
*
|
|
5
|
+
* The defect this tidies was silent and expensive. `aidlc review <instance>
|
|
6
|
+
* requirements` built its filename from the argument as typed, giving
|
|
7
|
+
* `requirements.review.md`, while the review gate looks artifacts up by the name
|
|
8
|
+
* the template declares — `requirements.md`. A full adversarial review was
|
|
9
|
+
* written, parsed, counted and summarised, and the transition failed saying the
|
|
10
|
+
* findings file was absent.
|
|
11
|
+
*
|
|
12
|
+
* This repository alone holds **11 such files across 6 completed instances**, every
|
|
13
|
+
* one a `full-feature` instance and every one on `requirements` or `design` — the
|
|
14
|
+
* only two phases any template gates. Eleven reviews that never counted toward the
|
|
15
|
+
* gate they were run for.
|
|
16
|
+
*
|
|
17
|
+
* ## Why this migration is cosmetic, and still worth having
|
|
18
|
+
*
|
|
19
|
+
* `artifactFromFindingsFile` resolves both spellings to one key, so the legacy
|
|
20
|
+
* files already count once the reader ships. This migration does not restore
|
|
21
|
+
* function; it removes the second spelling, so nobody has to know there were ever
|
|
22
|
+
* two. Leaving them means every future reader of an instance directory sees two
|
|
23
|
+
* conventions and has to work out which one the gate honours.
|
|
24
|
+
*
|
|
25
|
+
* ## Safe tier
|
|
26
|
+
*
|
|
27
|
+
* It renames framework-managed state under `.aidlc/state/` and never opens the
|
|
28
|
+
* file — the review's content is untouched, only its name. The alternative,
|
|
29
|
+
* `confirm`, would leave the files misnamed until somebody ran `doctor --yes`, and
|
|
30
|
+
* the whole problem was that nobody knew there was anything to run.
|
|
31
|
+
*
|
|
32
|
+
* ## Collisions are reported, never resolved
|
|
33
|
+
*
|
|
34
|
+
* When both spellings exist for one artifact, renaming would clobber a findings
|
|
35
|
+
* file — a real review, destroyed to tidy a name. Those are reported
|
|
36
|
+
* `applicable: false` with the detail, following `roadmap-item-titles` exactly:
|
|
37
|
+
* pending confirm work makes `aidlc doctor` exit 1 forever on a repo holding one
|
|
38
|
+
* such pair, which trains people to ignore doctor output. `not-applicable` still
|
|
39
|
+
* prints the detail, which is the entire point.
|
|
40
|
+
*
|
|
41
|
+
* Requirements: AC-9
|
|
42
|
+
*/
|
|
43
|
+
import type { DoctorContext, Migration } from '../types.js';
|
|
44
|
+
/** One legacy findings file that can be renamed to the canonical spelling. */
|
|
45
|
+
export interface FindingsRename {
|
|
46
|
+
instance: string;
|
|
47
|
+
/** Absolute source path. */
|
|
48
|
+
from: string;
|
|
49
|
+
/** Absolute destination path. */
|
|
50
|
+
to: string;
|
|
51
|
+
/** Repo-relative source, for `git mv` and for display. */
|
|
52
|
+
fromRel: string;
|
|
53
|
+
/** Repo-relative destination. */
|
|
54
|
+
toRel: string;
|
|
55
|
+
tracked: boolean;
|
|
56
|
+
}
|
|
57
|
+
/** A legacy file whose canonical name is already taken by another findings file. */
|
|
58
|
+
export interface FindingsCollision {
|
|
59
|
+
instance: string;
|
|
60
|
+
legacy: string;
|
|
61
|
+
canonical: string;
|
|
62
|
+
artifact: string;
|
|
63
|
+
}
|
|
64
|
+
export interface FindingsPlan {
|
|
65
|
+
renames: FindingsRename[];
|
|
66
|
+
collisions: FindingsCollision[];
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Everything the migration would do, computed without writing.
|
|
70
|
+
*
|
|
71
|
+
* The single source of pending-ness required by `../types.ts`, so a dry run and a
|
|
72
|
+
* real run cannot disagree. Instances and filenames are both walked in sorted
|
|
73
|
+
* order, so the plan never depends on directory read order.
|
|
74
|
+
*/
|
|
75
|
+
export declare function planFindingsRenames(ctx: DoctorContext): FindingsPlan;
|
|
76
|
+
export declare const findingsFilenameMigration: Migration;
|
|
77
|
+
//# sourceMappingURL=findings-filename.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findings-filename.d.ts","sourceRoot":"","sources":["../../../src/doctor/migrations/findings-filename.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAMH,OAAO,KAAK,EAAe,aAAa,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAQzE,8EAA8E;AAC9E,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,4BAA4B;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAC;IAChB,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,oFAAoF;AACpF,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,UAAU,EAAE,iBAAiB,EAAE,CAAC;CACjC;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,aAAa,GAAG,YAAY,CA+CpE;AAqDD,eAAO,MAAM,yBAAyB,EAAE,SAwDvC,CAAC"}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* findings-filename migration (safe tier): rename a review findings file from the
|
|
3
|
+
* legacy spelling to the canonical one, so one artifact has one findings file.
|
|
4
|
+
*
|
|
5
|
+
* The defect this tidies was silent and expensive. `aidlc review <instance>
|
|
6
|
+
* requirements` built its filename from the argument as typed, giving
|
|
7
|
+
* `requirements.review.md`, while the review gate looks artifacts up by the name
|
|
8
|
+
* the template declares — `requirements.md`. A full adversarial review was
|
|
9
|
+
* written, parsed, counted and summarised, and the transition failed saying the
|
|
10
|
+
* findings file was absent.
|
|
11
|
+
*
|
|
12
|
+
* This repository alone holds **11 such files across 6 completed instances**, every
|
|
13
|
+
* one a `full-feature` instance and every one on `requirements` or `design` — the
|
|
14
|
+
* only two phases any template gates. Eleven reviews that never counted toward the
|
|
15
|
+
* gate they were run for.
|
|
16
|
+
*
|
|
17
|
+
* ## Why this migration is cosmetic, and still worth having
|
|
18
|
+
*
|
|
19
|
+
* `artifactFromFindingsFile` resolves both spellings to one key, so the legacy
|
|
20
|
+
* files already count once the reader ships. This migration does not restore
|
|
21
|
+
* function; it removes the second spelling, so nobody has to know there were ever
|
|
22
|
+
* two. Leaving them means every future reader of an instance directory sees two
|
|
23
|
+
* conventions and has to work out which one the gate honours.
|
|
24
|
+
*
|
|
25
|
+
* ## Safe tier
|
|
26
|
+
*
|
|
27
|
+
* It renames framework-managed state under `.aidlc/state/` and never opens the
|
|
28
|
+
* file — the review's content is untouched, only its name. The alternative,
|
|
29
|
+
* `confirm`, would leave the files misnamed until somebody ran `doctor --yes`, and
|
|
30
|
+
* the whole problem was that nobody knew there was anything to run.
|
|
31
|
+
*
|
|
32
|
+
* ## Collisions are reported, never resolved
|
|
33
|
+
*
|
|
34
|
+
* When both spellings exist for one artifact, renaming would clobber a findings
|
|
35
|
+
* file — a real review, destroyed to tidy a name. Those are reported
|
|
36
|
+
* `applicable: false` with the detail, following `roadmap-item-titles` exactly:
|
|
37
|
+
* pending confirm work makes `aidlc doctor` exit 1 forever on a repo holding one
|
|
38
|
+
* such pair, which trains people to ignore doctor output. `not-applicable` still
|
|
39
|
+
* prints the detail, which is the entire point.
|
|
40
|
+
*
|
|
41
|
+
* Requirements: AC-9
|
|
42
|
+
*/
|
|
43
|
+
import { execFileSync } from 'node:child_process';
|
|
44
|
+
import { existsSync, readdirSync, renameSync, statSync } from 'node:fs';
|
|
45
|
+
import { join, relative } from 'node:path';
|
|
46
|
+
import { trackedFiles } from '../git.js';
|
|
47
|
+
import { FINDINGS_SUFFIX, artifactFromFindingsFile, isCanonicalFindingsFile, } from '../../review/findings-naming.js';
|
|
48
|
+
/**
|
|
49
|
+
* Everything the migration would do, computed without writing.
|
|
50
|
+
*
|
|
51
|
+
* The single source of pending-ness required by `../types.ts`, so a dry run and a
|
|
52
|
+
* real run cannot disagree. Instances and filenames are both walked in sorted
|
|
53
|
+
* order, so the plan never depends on directory read order.
|
|
54
|
+
*/
|
|
55
|
+
export function planFindingsRenames(ctx) {
|
|
56
|
+
const renames = [];
|
|
57
|
+
const collisions = [];
|
|
58
|
+
const stateDir = join(ctx.projectRoot, '.aidlc', 'state');
|
|
59
|
+
if (!existsSync(stateDir))
|
|
60
|
+
return { renames, collisions };
|
|
61
|
+
const tracked = new Set(trackedFiles(ctx.projectRoot, ['.aidlc/state']));
|
|
62
|
+
for (const instance of sortedDirs(stateDir)) {
|
|
63
|
+
const instanceDir = join(stateDir, instance);
|
|
64
|
+
const findingsFiles = sortedEntries(instanceDir).filter((f) => f.endsWith(FINDINGS_SUFFIX));
|
|
65
|
+
for (const file of findingsFiles) {
|
|
66
|
+
if (isCanonicalFindingsFile(file))
|
|
67
|
+
continue;
|
|
68
|
+
const artifact = artifactFromFindingsFile(file);
|
|
69
|
+
// A file that is not resolvable to an artifact — `.review.md` with nothing
|
|
70
|
+
// before it — is left alone. There is no canonical name to move it to.
|
|
71
|
+
if (artifact === null)
|
|
72
|
+
continue;
|
|
73
|
+
const canonical = `${artifact}${FINDINGS_SUFFIX}`;
|
|
74
|
+
if (findingsFiles.includes(canonical)) {
|
|
75
|
+
collisions.push({ instance, legacy: file, canonical, artifact });
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
const from = join(instanceDir, file);
|
|
79
|
+
const to = join(instanceDir, canonical);
|
|
80
|
+
const fromRel = relative(ctx.projectRoot, from);
|
|
81
|
+
renames.push({
|
|
82
|
+
instance,
|
|
83
|
+
from,
|
|
84
|
+
to,
|
|
85
|
+
fromRel,
|
|
86
|
+
toRel: relative(ctx.projectRoot, to),
|
|
87
|
+
tracked: tracked.has(fromRel),
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return { renames, collisions };
|
|
92
|
+
}
|
|
93
|
+
/** Directory entries that are directories, sorted. Missing dir → empty. */
|
|
94
|
+
function sortedDirs(dir) {
|
|
95
|
+
return sortedEntries(dir).filter((name) => {
|
|
96
|
+
try {
|
|
97
|
+
return statSync(join(dir, name)).isDirectory();
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
/** Directory entries, sorted. Missing or unreadable dir → empty. */
|
|
105
|
+
function sortedEntries(dir) {
|
|
106
|
+
try {
|
|
107
|
+
return readdirSync(dir).sort();
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
return [];
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/** One-line summary shared by `check` and `apply`. */
|
|
114
|
+
function describe(plan, verb) {
|
|
115
|
+
const byInstance = new Map();
|
|
116
|
+
for (const r of plan.renames) {
|
|
117
|
+
byInstance.set(r.instance, (byInstance.get(r.instance) ?? 0) + 1);
|
|
118
|
+
}
|
|
119
|
+
const detail = [...byInstance.entries()]
|
|
120
|
+
.map(([instance, n]) => `${instance} (${n})`)
|
|
121
|
+
.join(', ');
|
|
122
|
+
return (`${verb} ${plan.renames.length} review findings file(s) to the canonical ` +
|
|
123
|
+
`<artifact>.md${FINDINGS_SUFFIX} spelling, so the review gate and the filename ` +
|
|
124
|
+
`agree: ${detail}`);
|
|
125
|
+
}
|
|
126
|
+
/** How a collision reads in the not-applicable reason. */
|
|
127
|
+
function describeCollisions(plan) {
|
|
128
|
+
const detail = plan.collisions
|
|
129
|
+
.map((c) => `${c.instance}: ${c.legacy} and ${c.canonical} both review ${c.artifact}`)
|
|
130
|
+
.join('; ');
|
|
131
|
+
return (`${plan.collisions.length} instance directory/ies hold two findings files for one ` +
|
|
132
|
+
`artifact, so renaming would overwrite a real review. Merge or delete one by hand, ` +
|
|
133
|
+
`keeping the canonical spelling: ${detail}`);
|
|
134
|
+
}
|
|
135
|
+
export const findingsFilenameMigration = {
|
|
136
|
+
id: 'findings-filename',
|
|
137
|
+
tier: 'safe',
|
|
138
|
+
check(ctx) {
|
|
139
|
+
const plan = planFindingsRenames(ctx);
|
|
140
|
+
if (plan.renames.length === 0) {
|
|
141
|
+
if (plan.collisions.length > 0) {
|
|
142
|
+
return { applicable: false, reason: describeCollisions(plan) };
|
|
143
|
+
}
|
|
144
|
+
return { applicable: true, pending: false };
|
|
145
|
+
}
|
|
146
|
+
return {
|
|
147
|
+
applicable: true,
|
|
148
|
+
pending: true,
|
|
149
|
+
description: describe(plan, 'would rename'),
|
|
150
|
+
commands: plan.renames.map((r) => `git mv -- ${r.fromRel} ${r.toRel}`),
|
|
151
|
+
};
|
|
152
|
+
},
|
|
153
|
+
apply(ctx) {
|
|
154
|
+
const plan = planFindingsRenames(ctx);
|
|
155
|
+
for (const move of plan.renames) {
|
|
156
|
+
// Re-check the destination immediately before moving. `planFindingsRenames`
|
|
157
|
+
// already excluded collisions, but a concurrent `aidlc review` between plan
|
|
158
|
+
// and apply could have created the canonical file — and clobbering a findings
|
|
159
|
+
// file to tidy a name is the one outcome this migration must never produce.
|
|
160
|
+
if (existsSync(move.to))
|
|
161
|
+
continue;
|
|
162
|
+
if (move.tracked) {
|
|
163
|
+
try {
|
|
164
|
+
execFileSync('git', ['mv', '--', move.fromRel, move.toRel], {
|
|
165
|
+
cwd: ctx.projectRoot,
|
|
166
|
+
stdio: ['ignore', 'ignore', 'pipe'],
|
|
167
|
+
});
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
catch {
|
|
171
|
+
// Fall through to a plain rename: git refuses in states (unmerged index,
|
|
172
|
+
// unborn HEAD) where the move itself is still correct.
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
renameSync(move.from, move.to);
|
|
176
|
+
}
|
|
177
|
+
const parts = [];
|
|
178
|
+
if (plan.renames.length > 0)
|
|
179
|
+
parts.push(describe(plan, 'renamed'));
|
|
180
|
+
if (plan.collisions.length > 0) {
|
|
181
|
+
parts.push(`left ${plan.collisions.length} collision(s) for a human`);
|
|
182
|
+
}
|
|
183
|
+
return {
|
|
184
|
+
changed: plan.renames.length > 0,
|
|
185
|
+
summary: parts.length > 0 ? parts.join('; ') : 'no findings files to rename',
|
|
186
|
+
};
|
|
187
|
+
},
|
|
188
|
+
};
|
|
189
|
+
//# sourceMappingURL=findings-filename.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findings-filename.js","sourceRoot":"","sources":["../../../src/doctor/migrations/findings-filename.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/doctor/migrations/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/doctor/migrations/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AA+B7C,eAAO,MAAM,UAAU,EAAE,SAAS,EA0EjC,CAAC"}
|
|
@@ -24,6 +24,7 @@ import { staleIdeaSkill } from './stale-idea-skill.js';
|
|
|
24
24
|
import { roadmapLayout } from './roadmap-layout.js';
|
|
25
25
|
import { roadmapItemTitles } from './roadmap-item-titles.js';
|
|
26
26
|
import { instanceCompletion } from './instance-completion.js';
|
|
27
|
+
import { findingsFilenameMigration } from './findings-filename.js';
|
|
27
28
|
import { roadmapSyncGhMissing } from './roadmap-sync-gh-missing.js';
|
|
28
29
|
import { knowledgeStaleSources } from './knowledge-stale-sources.js';
|
|
29
30
|
import { complianceLayerUnowned, complianceNoticeMissing, compliancePackMissingLayer, compliancePackProvenance, compliancePackUnregistered, } from './compliance-pack-drift.js';
|
|
@@ -48,6 +49,13 @@ export const MIGRATIONS = [
|
|
|
48
49
|
// and can itself place an item in `in-progress/` for an instance that has
|
|
49
50
|
// since completed, which is exactly what this one then moves to `done/`.
|
|
50
51
|
instanceCompletion,
|
|
52
|
+
// Safe tier, grouped with the other state repairs. Position is for a reader's
|
|
53
|
+
// benefit, not for correctness: it touches only `<artifact>.review.md` filenames
|
|
54
|
+
// inside `.aidlc/state/<instance>/`, which nothing else in this registry reads or
|
|
55
|
+
// writes. Saying so explicitly because the adjacent roadmap migrations DO have
|
|
56
|
+
// load-bearing order, and a reader is entitled to assume the grouping means the
|
|
57
|
+
// same thing twice.
|
|
58
|
+
findingsFilenameMigration,
|
|
51
59
|
// Report tier, ordered after the three migrations that create or rewrite the roadmap
|
|
52
60
|
// layout: this one only reads `.aidlc/config.yaml`, so it cannot be disturbed by them,
|
|
53
61
|
// but keeping the roadmap migrations adjacent is how a reader finds them all.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/doctor/migrations/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,0BAA0B,EAC1B,wBAAwB,EACxB,0BAA0B,GAC3B,MAAM,4BAA4B,CAAC;AAEpC,MAAM,CAAC,MAAM,UAAU,GAAgB;IACrC,aAAa;IACb,kBAAkB;IAClB,aAAa;IACb,cAAc;IACd,eAAe;IACf,4EAA4E;IAC5E,2EAA2E;IAC3E,8EAA8E;IAC9E,cAAc;IACd,aAAa;IACb,0EAA0E;IAC1E,qEAAqE;IACrE,+EAA+E;IAC/E,0EAA0E;IAC1E,mDAAmD;IACnD,iBAAiB;IACjB,8EAA8E;IAC9E,0EAA0E;IAC1E,yEAAyE;IACzE,kBAAkB;IAClB,qFAAqF;IACrF,uFAAuF;IACvF,8EAA8E;IAC9E,oBAAoB;IACpB,mBAAmB;IACnB,iBAAiB;IACjB,cAAc;IACd,wBAAwB;IACxB,aAAa;IACb,kBAAkB;IAClB,6EAA6E;IAC7E,6EAA6E;IAC7E,4EAA4E;IAC5E,eAAe;IACf,eAAe;IACf,gFAAgF;IAChF,iEAAiE;IACjE,iBAAiB;IACjB,yEAAyE;IACzE,0EAA0E;IAC1E,eAAe;IACf,sFAAsF;IACtF,sFAAsF;IACtF,qFAAqF;IACrF,uDAAuD;IACvD,EAAE;IACF,iFAAiF;IACjF,qFAAqF;IACrF,wFAAwF;IACxF,gDAAgD;IAChD,wFAAwF;IACxF,mFAAmF;IACnF,iFAAiF;IACjF,wBAAwB;IACxB,0BAA0B;IAC1B,0BAA0B;IAC1B,sBAAsB;IACtB,iFAAiF;IACjF,qDAAqD;IACrD,uBAAuB;IACvB,sFAAsF;IACtF,oFAAoF;IACpF,uFAAuF;IACvF,uFAAuF;IACvF,oEAAoE;IACpE,qBAAqB;CACtB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/doctor/migrations/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one place that decides how an artifact name and a findings filename map to
|
|
3
|
+
* each other.
|
|
4
|
+
*
|
|
5
|
+
* Before this module there were two independent derivations of the same key, and
|
|
6
|
+
* they disagreed. `aidlc review <instance> <artifact>` wrote
|
|
7
|
+
* `` `${artifactArg}.review.md` `` from the argument as typed, while
|
|
8
|
+
* `loadFindings` keyed its index on `file.replace('.review.md', '')` and
|
|
9
|
+
* `checkReviewGate` looked up the template's artifact name — `requirements.md`.
|
|
10
|
+
* Type `requirements`, which is the phase name and what the skill's prose calls
|
|
11
|
+
* the artifact, and the review was written, parsed, counted and summarised
|
|
12
|
+
* correctly while the gate reported "no findings file".
|
|
13
|
+
*
|
|
14
|
+
* The cost was not hypothetical: **11 findings files across 6 completed
|
|
15
|
+
* instances** sat under the legacy spelling, every one of them a `full-feature`
|
|
16
|
+
* instance and every one on `requirements` or `design` — the only two phases any
|
|
17
|
+
* template gates. Eleven adversarial reviews, none of which counted toward the
|
|
18
|
+
* gate they were run for.
|
|
19
|
+
*
|
|
20
|
+
* ## Why both directions live here
|
|
21
|
+
*
|
|
22
|
+
* Fixing only the writer would leave those 11 files dead. Fixing only the reader
|
|
23
|
+
* would leave two spellings valid forever, which is what the roadmap item warned
|
|
24
|
+
* against. So this module owns the mapping and both callers derive from it — a
|
|
25
|
+
* second derivation anywhere else is the regression, which is why
|
|
26
|
+
* `test/findings-naming.test.ts` asserts the inverse property rather than a list
|
|
27
|
+
* of literals.
|
|
28
|
+
*
|
|
29
|
+
* The convenient part is that the inverse is nearly free:
|
|
30
|
+
*
|
|
31
|
+
* ```
|
|
32
|
+
* artifactFromFindingsFile('requirements.review.md') === 'requirements.md'
|
|
33
|
+
* artifactFromFindingsFile('requirements.md.review.md') === 'requirements.md'
|
|
34
|
+
* ```
|
|
35
|
+
*
|
|
36
|
+
* Strip the suffix, then canonicalize. Both spellings on disk converge on one
|
|
37
|
+
* key, so the legacy files start counting with no compatibility branch at any
|
|
38
|
+
* call site — nothing downstream has to know which spelling it is looking at.
|
|
39
|
+
*
|
|
40
|
+
* ## Why `<artifact>.md.review.md` is canonical
|
|
41
|
+
*
|
|
42
|
+
* The doubled `.md` is ugly, and it is the spelling that already works:
|
|
43
|
+
* `checkReviewGate` looks up the template's artifact name, so the gate needs no
|
|
44
|
+
* change to find these files. It is also the majority on disk — 31 files against
|
|
45
|
+
* 11 — and every instance from `agent-portability` (2026-08-21) onward writes it.
|
|
46
|
+
* Choosing the prettier spelling would move 31 files to stop 11 from moving.
|
|
47
|
+
*
|
|
48
|
+
* Requirements: AC-1, AC-2, AC-3, AC-4, AC-5, AC-10
|
|
49
|
+
*
|
|
50
|
+
* @module
|
|
51
|
+
*/
|
|
52
|
+
/**
|
|
53
|
+
* The suffix that marks a file as review findings.
|
|
54
|
+
*
|
|
55
|
+
* Exported because the doctor migration and `loadFindings` both filter on it, and
|
|
56
|
+
* a literal `'.review.md'` in either would be a second declaration of the fact
|
|
57
|
+
* this module exists to hold once.
|
|
58
|
+
*/
|
|
59
|
+
export declare const FINDINGS_SUFFIX = ".review.md";
|
|
60
|
+
/**
|
|
61
|
+
* Resolve an artifact argument to the filename a template declares for it.
|
|
62
|
+
*
|
|
63
|
+
* `requirements` and `requirements.md` both yield `requirements.md`. That is the
|
|
64
|
+
* whole fix for the writer side: the argument a human or agent naturally types is
|
|
65
|
+
* the phase name, and the extension is load-bearing in a way nothing told them.
|
|
66
|
+
*
|
|
67
|
+
* A string already ending in {@link FINDINGS_SUFFIX} is returned unchanged rather
|
|
68
|
+
* than having `.md` appended. Deciding whether such an argument is legal is
|
|
69
|
+
* policy, and policy belongs in the caller's allowlist — this function's job is
|
|
70
|
+
* the mapping, and quietly producing `x.review.md.md` would be worse than either
|
|
71
|
+
* accepting or refusing it.
|
|
72
|
+
*
|
|
73
|
+
* @param arg - Artifact argument, with or without its extension.
|
|
74
|
+
* @returns The artifact filename, e.g. `requirements.md`.
|
|
75
|
+
*/
|
|
76
|
+
export declare function canonicalArtifactName(arg: string): string;
|
|
77
|
+
/**
|
|
78
|
+
* The canonical findings filename for an artifact argument.
|
|
79
|
+
*
|
|
80
|
+
* @param arg - Artifact argument, with or without its extension.
|
|
81
|
+
* @returns e.g. `requirements.md.review.md`.
|
|
82
|
+
*/
|
|
83
|
+
export declare function findingsFilename(arg: string): string;
|
|
84
|
+
/**
|
|
85
|
+
* The artifact a findings file reviews, under one spelling regardless of how the
|
|
86
|
+
* file itself is spelled.
|
|
87
|
+
*
|
|
88
|
+
* Both the canonical `requirements.md.review.md` and the legacy
|
|
89
|
+
* `requirements.review.md` resolve to `requirements.md`. This is the reader-side
|
|
90
|
+
* half of the fix and the reason the 11 orphaned files need no migration in order
|
|
91
|
+
* to start counting — the migration only tidies the names.
|
|
92
|
+
*
|
|
93
|
+
* @param file - A filename, not a path.
|
|
94
|
+
* @returns The artifact filename, or `null` when `file` is not a findings file or
|
|
95
|
+
* carries no name before the suffix.
|
|
96
|
+
*/
|
|
97
|
+
export declare function artifactFromFindingsFile(file: string): string | null;
|
|
98
|
+
/**
|
|
99
|
+
* Whether a findings filename is already the canonical spelling for the artifact
|
|
100
|
+
* it reviews.
|
|
101
|
+
*
|
|
102
|
+
* The predicate the doctor migration selects on: false means the file is legacy
|
|
103
|
+
* and can be renamed without touching its contents. A non-findings filename is
|
|
104
|
+
* not canonical *and* not legacy, so callers must filter on
|
|
105
|
+
* {@link FINDINGS_SUFFIX} first — this returns false for those, which is the safe
|
|
106
|
+
* direction for a rename planner but would be the wrong answer to "should I
|
|
107
|
+
* ignore this file?".
|
|
108
|
+
*
|
|
109
|
+
* @param file - A filename, not a path.
|
|
110
|
+
*/
|
|
111
|
+
export declare function isCanonicalFindingsFile(file: string): boolean;
|
|
112
|
+
//# sourceMappingURL=findings-naming.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findings-naming.d.ts","sourceRoot":"","sources":["../../src/review/findings-naming.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,eAAe,CAAC;AAK5C;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGzD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOpE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAI7D"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one place that decides how an artifact name and a findings filename map to
|
|
3
|
+
* each other.
|
|
4
|
+
*
|
|
5
|
+
* Before this module there were two independent derivations of the same key, and
|
|
6
|
+
* they disagreed. `aidlc review <instance> <artifact>` wrote
|
|
7
|
+
* `` `${artifactArg}.review.md` `` from the argument as typed, while
|
|
8
|
+
* `loadFindings` keyed its index on `file.replace('.review.md', '')` and
|
|
9
|
+
* `checkReviewGate` looked up the template's artifact name — `requirements.md`.
|
|
10
|
+
* Type `requirements`, which is the phase name and what the skill's prose calls
|
|
11
|
+
* the artifact, and the review was written, parsed, counted and summarised
|
|
12
|
+
* correctly while the gate reported "no findings file".
|
|
13
|
+
*
|
|
14
|
+
* The cost was not hypothetical: **11 findings files across 6 completed
|
|
15
|
+
* instances** sat under the legacy spelling, every one of them a `full-feature`
|
|
16
|
+
* instance and every one on `requirements` or `design` — the only two phases any
|
|
17
|
+
* template gates. Eleven adversarial reviews, none of which counted toward the
|
|
18
|
+
* gate they were run for.
|
|
19
|
+
*
|
|
20
|
+
* ## Why both directions live here
|
|
21
|
+
*
|
|
22
|
+
* Fixing only the writer would leave those 11 files dead. Fixing only the reader
|
|
23
|
+
* would leave two spellings valid forever, which is what the roadmap item warned
|
|
24
|
+
* against. So this module owns the mapping and both callers derive from it — a
|
|
25
|
+
* second derivation anywhere else is the regression, which is why
|
|
26
|
+
* `test/findings-naming.test.ts` asserts the inverse property rather than a list
|
|
27
|
+
* of literals.
|
|
28
|
+
*
|
|
29
|
+
* The convenient part is that the inverse is nearly free:
|
|
30
|
+
*
|
|
31
|
+
* ```
|
|
32
|
+
* artifactFromFindingsFile('requirements.review.md') === 'requirements.md'
|
|
33
|
+
* artifactFromFindingsFile('requirements.md.review.md') === 'requirements.md'
|
|
34
|
+
* ```
|
|
35
|
+
*
|
|
36
|
+
* Strip the suffix, then canonicalize. Both spellings on disk converge on one
|
|
37
|
+
* key, so the legacy files start counting with no compatibility branch at any
|
|
38
|
+
* call site — nothing downstream has to know which spelling it is looking at.
|
|
39
|
+
*
|
|
40
|
+
* ## Why `<artifact>.md.review.md` is canonical
|
|
41
|
+
*
|
|
42
|
+
* The doubled `.md` is ugly, and it is the spelling that already works:
|
|
43
|
+
* `checkReviewGate` looks up the template's artifact name, so the gate needs no
|
|
44
|
+
* change to find these files. It is also the majority on disk — 31 files against
|
|
45
|
+
* 11 — and every instance from `agent-portability` (2026-08-21) onward writes it.
|
|
46
|
+
* Choosing the prettier spelling would move 31 files to stop 11 from moving.
|
|
47
|
+
*
|
|
48
|
+
* Requirements: AC-1, AC-2, AC-3, AC-4, AC-5, AC-10
|
|
49
|
+
*
|
|
50
|
+
* @module
|
|
51
|
+
*/
|
|
52
|
+
/**
|
|
53
|
+
* The suffix that marks a file as review findings.
|
|
54
|
+
*
|
|
55
|
+
* Exported because the doctor migration and `loadFindings` both filter on it, and
|
|
56
|
+
* a literal `'.review.md'` in either would be a second declaration of the fact
|
|
57
|
+
* this module exists to hold once.
|
|
58
|
+
*/
|
|
59
|
+
export const FINDINGS_SUFFIX = '.review.md';
|
|
60
|
+
/** The extension every artifact a template declares carries. */
|
|
61
|
+
const ARTIFACT_EXT = '.md';
|
|
62
|
+
/**
|
|
63
|
+
* Resolve an artifact argument to the filename a template declares for it.
|
|
64
|
+
*
|
|
65
|
+
* `requirements` and `requirements.md` both yield `requirements.md`. That is the
|
|
66
|
+
* whole fix for the writer side: the argument a human or agent naturally types is
|
|
67
|
+
* the phase name, and the extension is load-bearing in a way nothing told them.
|
|
68
|
+
*
|
|
69
|
+
* A string already ending in {@link FINDINGS_SUFFIX} is returned unchanged rather
|
|
70
|
+
* than having `.md` appended. Deciding whether such an argument is legal is
|
|
71
|
+
* policy, and policy belongs in the caller's allowlist — this function's job is
|
|
72
|
+
* the mapping, and quietly producing `x.review.md.md` would be worse than either
|
|
73
|
+
* accepting or refusing it.
|
|
74
|
+
*
|
|
75
|
+
* @param arg - Artifact argument, with or without its extension.
|
|
76
|
+
* @returns The artifact filename, e.g. `requirements.md`.
|
|
77
|
+
*/
|
|
78
|
+
export function canonicalArtifactName(arg) {
|
|
79
|
+
if (arg.endsWith(FINDINGS_SUFFIX))
|
|
80
|
+
return arg;
|
|
81
|
+
return arg.endsWith(ARTIFACT_EXT) ? arg : `${arg}${ARTIFACT_EXT}`;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* The canonical findings filename for an artifact argument.
|
|
85
|
+
*
|
|
86
|
+
* @param arg - Artifact argument, with or without its extension.
|
|
87
|
+
* @returns e.g. `requirements.md.review.md`.
|
|
88
|
+
*/
|
|
89
|
+
export function findingsFilename(arg) {
|
|
90
|
+
return `${canonicalArtifactName(arg)}${FINDINGS_SUFFIX}`;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* The artifact a findings file reviews, under one spelling regardless of how the
|
|
94
|
+
* file itself is spelled.
|
|
95
|
+
*
|
|
96
|
+
* Both the canonical `requirements.md.review.md` and the legacy
|
|
97
|
+
* `requirements.review.md` resolve to `requirements.md`. This is the reader-side
|
|
98
|
+
* half of the fix and the reason the 11 orphaned files need no migration in order
|
|
99
|
+
* to start counting — the migration only tidies the names.
|
|
100
|
+
*
|
|
101
|
+
* @param file - A filename, not a path.
|
|
102
|
+
* @returns The artifact filename, or `null` when `file` is not a findings file or
|
|
103
|
+
* carries no name before the suffix.
|
|
104
|
+
*/
|
|
105
|
+
export function artifactFromFindingsFile(file) {
|
|
106
|
+
if (!file.endsWith(FINDINGS_SUFFIX))
|
|
107
|
+
return null;
|
|
108
|
+
const stem = file.slice(0, -FINDINGS_SUFFIX.length);
|
|
109
|
+
if (stem.length === 0)
|
|
110
|
+
return null;
|
|
111
|
+
return canonicalArtifactName(stem);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Whether a findings filename is already the canonical spelling for the artifact
|
|
115
|
+
* it reviews.
|
|
116
|
+
*
|
|
117
|
+
* The predicate the doctor migration selects on: false means the file is legacy
|
|
118
|
+
* and can be renamed without touching its contents. A non-findings filename is
|
|
119
|
+
* not canonical *and* not legacy, so callers must filter on
|
|
120
|
+
* {@link FINDINGS_SUFFIX} first — this returns false for those, which is the safe
|
|
121
|
+
* direction for a rename planner but would be the wrong answer to "should I
|
|
122
|
+
* ignore this file?".
|
|
123
|
+
*
|
|
124
|
+
* @param file - A filename, not a path.
|
|
125
|
+
*/
|
|
126
|
+
export function isCanonicalFindingsFile(file) {
|
|
127
|
+
const artifact = artifactFromFindingsFile(file);
|
|
128
|
+
if (artifact === null)
|
|
129
|
+
return false;
|
|
130
|
+
return file === `${artifact}${FINDINGS_SUFFIX}`;
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=findings-naming.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findings-naming.js","sourceRoot":"","sources":["../../src/review/findings-naming.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AAEH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,YAAY,CAAC;AAE5C,gEAAgE;AAChE,MAAM,YAAY,GAAG,KAAK,CAAC;AAE3B;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAW;IAC/C,IAAI,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC;QAAE,OAAO,GAAG,CAAC;IAC9C,OAAO,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,YAAY,EAAE,CAAC;AACpE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,OAAO,GAAG,qBAAqB,CAAC,GAAG,CAAC,GAAG,eAAe,EAAE,CAAC;AAC3D,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,wBAAwB,CAAC,IAAY;IACnD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;QAAE,OAAO,IAAI,CAAC;IAEjD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IACpD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEnC,OAAO,qBAAqB,CAAC,IAAI,CAAC,CAAC;AACrC,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAAY;IAClD,MAAM,QAAQ,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAC;IAChD,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACpC,OAAO,IAAI,KAAK,GAAG,QAAQ,GAAG,eAAe,EAAE,CAAC;AAClD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rasensio/aidlc",
|
|
3
|
-
"version": "1.26.
|
|
3
|
+
"version": "1.26.2",
|
|
4
4
|
"description": "AI Development Lifecycle Framework — structured lifecycle guidance for AI coding agents across platforms",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/cli.js",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"commander": "15.0.0",
|
|
25
25
|
"picomatch": "4.0.5",
|
|
26
26
|
"yaml": "2.9.0",
|
|
27
|
-
"@rasensio/aidlc-content": "1.26.
|
|
27
|
+
"@rasensio/aidlc-content": "1.26.2"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"@types/node": "22.15.32",
|