@rasensio/aidlc 1.15.2 → 1.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +4 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/compliance.d.ts +36 -0
- package/dist/commands/compliance.d.ts.map +1 -0
- package/dist/commands/compliance.js +275 -0
- package/dist/commands/compliance.js.map +1 -0
- package/dist/commands/constitution.d.ts +26 -0
- package/dist/commands/constitution.d.ts.map +1 -0
- package/dist/commands/constitution.js +145 -0
- package/dist/commands/constitution.js.map +1 -0
- package/dist/commands/cost.d.ts.map +1 -1
- package/dist/commands/cost.js +54 -35
- package/dist/commands/cost.js.map +1 -1
- package/dist/commands/doctor.js +7 -0
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/gate.d.ts.map +1 -1
- package/dist/commands/gate.js +13 -0
- package/dist/commands/gate.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +119 -10
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/metrics.d.ts.map +1 -1
- package/dist/commands/metrics.js +6 -1
- package/dist/commands/metrics.js.map +1 -1
- package/dist/commands/review.d.ts +2 -27
- package/dist/commands/review.d.ts.map +1 -1
- package/dist/commands/review.js +10 -166
- package/dist/commands/review.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +7 -0
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/transition.d.ts.map +1 -1
- package/dist/commands/transition.js +24 -1
- package/dist/commands/transition.js.map +1 -1
- package/dist/compile/adapters/claude-code.d.ts.map +1 -1
- package/dist/compile/adapters/claude-code.js +2 -1
- package/dist/compile/adapters/claude-code.js.map +1 -1
- package/dist/compile/adapters/codex.d.ts +22 -1
- package/dist/compile/adapters/codex.d.ts.map +1 -1
- package/dist/compile/adapters/codex.js +61 -27
- package/dist/compile/adapters/codex.js.map +1 -1
- package/dist/compile/adapters/cursor.d.ts.map +1 -1
- package/dist/compile/adapters/cursor.js +2 -19
- package/dist/compile/adapters/cursor.js.map +1 -1
- package/dist/compile/adapters/kiro.d.ts.map +1 -1
- package/dist/compile/adapters/kiro.js +1 -19
- package/dist/compile/adapters/kiro.js.map +1 -1
- package/dist/compile/adapters/windsurf.d.ts.map +1 -1
- package/dist/compile/adapters/windsurf.js +2 -1
- package/dist/compile/adapters/windsurf.js.map +1 -1
- package/dist/compile/guidance-install.d.ts +16 -19
- package/dist/compile/guidance-install.d.ts.map +1 -1
- package/dist/compile/guidance-install.js +26 -111
- package/dist/compile/guidance-install.js.map +1 -1
- package/dist/compile/layer-install.d.ts +122 -0
- package/dist/compile/layer-install.d.ts.map +1 -0
- package/dist/compile/layer-install.js +195 -0
- package/dist/compile/layer-install.js.map +1 -0
- package/dist/compile/loaders.d.ts +14 -0
- package/dist/compile/loaders.d.ts.map +1 -1
- package/dist/compile/loaders.js +23 -18
- package/dist/compile/loaders.js.map +1 -1
- package/dist/compile/skill-format.d.ts +39 -0
- package/dist/compile/skill-format.d.ts.map +1 -0
- package/dist/compile/skill-format.js +50 -0
- package/dist/compile/skill-format.js.map +1 -0
- package/dist/compliance/check.d.ts +79 -0
- package/dist/compliance/check.d.ts.map +1 -0
- package/dist/compliance/check.js +224 -0
- package/dist/compliance/check.js.map +1 -0
- package/dist/compliance/config.d.ts +91 -0
- package/dist/compliance/config.d.ts.map +1 -0
- package/dist/compliance/config.js +173 -0
- package/dist/compliance/config.js.map +1 -0
- package/dist/compliance/findings.d.ts +70 -0
- package/dist/compliance/findings.d.ts.map +1 -0
- package/dist/compliance/findings.js +132 -0
- package/dist/compliance/findings.js.map +1 -0
- package/dist/compliance/gate-criterion.d.ts +87 -0
- package/dist/compliance/gate-criterion.d.ts.map +1 -0
- package/dist/compliance/gate-criterion.js +168 -0
- package/dist/compliance/gate-criterion.js.map +1 -0
- package/dist/compliance/install.d.ts +135 -0
- package/dist/compliance/install.d.ts.map +1 -0
- package/dist/compliance/install.js +291 -0
- package/dist/compliance/install.js.map +1 -0
- package/dist/compliance/report.d.ts +144 -0
- package/dist/compliance/report.d.ts.map +1 -0
- package/dist/compliance/report.js +347 -0
- package/dist/compliance/report.js.map +1 -0
- package/dist/compliance/resolver.d.ts +65 -0
- package/dist/compliance/resolver.d.ts.map +1 -0
- package/dist/compliance/resolver.js +176 -0
- package/dist/compliance/resolver.js.map +1 -0
- package/dist/compliance/schema.d.ts +74 -0
- package/dist/compliance/schema.d.ts.map +1 -0
- package/dist/compliance/schema.js +474 -0
- package/dist/compliance/schema.js.map +1 -0
- package/dist/compliance/types.d.ts +140 -0
- package/dist/compliance/types.d.ts.map +1 -0
- package/dist/compliance/types.js +29 -0
- package/dist/compliance/types.js.map +1 -0
- package/dist/constitution/check.d.ts +22 -0
- package/dist/constitution/check.d.ts.map +1 -0
- package/dist/constitution/check.js +89 -0
- package/dist/constitution/check.js.map +1 -0
- package/dist/constitution/docx.d.ts +51 -0
- package/dist/constitution/docx.d.ts.map +1 -0
- package/dist/constitution/docx.js +157 -0
- package/dist/constitution/docx.js.map +1 -0
- package/dist/constitution/entries.d.ts +27 -0
- package/dist/constitution/entries.d.ts.map +1 -0
- package/dist/constitution/entries.js +65 -0
- package/dist/constitution/entries.js.map +1 -0
- package/dist/constitution/extract.d.ts +34 -0
- package/dist/constitution/extract.d.ts.map +1 -0
- package/dist/constitution/extract.js +117 -0
- package/dist/constitution/extract.js.map +1 -0
- package/dist/constitution/snapshot.d.ts +47 -0
- package/dist/constitution/snapshot.d.ts.map +1 -0
- package/dist/constitution/snapshot.js +159 -0
- package/dist/constitution/snapshot.js.map +1 -0
- package/dist/constitution/statements.d.ts +37 -0
- package/dist/constitution/statements.d.ts.map +1 -0
- package/dist/constitution/statements.js +64 -0
- package/dist/constitution/statements.js.map +1 -0
- package/dist/constitution/types.d.ts +80 -0
- package/dist/constitution/types.d.ts.map +1 -0
- package/dist/constitution/types.js +9 -0
- package/dist/constitution/types.js.map +1 -0
- package/dist/core/gate.d.ts +10 -0
- package/dist/core/gate.d.ts.map +1 -1
- package/dist/core/gate.js.map +1 -1
- package/dist/core/paths.d.ts +48 -0
- package/dist/core/paths.d.ts.map +1 -0
- package/dist/core/paths.js +57 -0
- package/dist/core/paths.js.map +1 -0
- package/dist/core/types.d.ts +12 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/cost/hooks/registry.d.ts +44 -0
- package/dist/cost/hooks/registry.d.ts.map +1 -0
- package/dist/cost/hooks/registry.js +66 -0
- package/dist/cost/hooks/registry.js.map +1 -0
- package/dist/cost/pin.d.ts +63 -0
- package/dist/cost/pin.d.ts.map +1 -0
- package/dist/cost/pin.js +95 -0
- package/dist/cost/pin.js.map +1 -0
- package/dist/cost/providers/claude-code.d.ts +9 -2
- package/dist/cost/providers/claude-code.d.ts.map +1 -1
- package/dist/cost/providers/claude-code.js +10 -5
- package/dist/cost/providers/claude-code.js.map +1 -1
- package/dist/cost/providers/codex.d.ts +107 -0
- package/dist/cost/providers/codex.d.ts.map +1 -0
- package/dist/cost/providers/codex.js +283 -0
- package/dist/cost/providers/codex.js.map +1 -0
- package/dist/cost/providers/index.d.ts.map +1 -1
- package/dist/cost/providers/index.js +6 -0
- package/dist/cost/providers/index.js.map +1 -1
- package/dist/cost/rates.d.ts.map +1 -1
- package/dist/cost/rates.js +14 -0
- package/dist/cost/rates.js.map +1 -1
- package/dist/cost/report.d.ts +23 -1
- package/dist/cost/report.d.ts.map +1 -1
- package/dist/cost/report.js +26 -5
- package/dist/cost/report.js.map +1 -1
- package/dist/cost/sessions.d.ts +10 -1
- package/dist/cost/sessions.d.ts.map +1 -1
- package/dist/cost/sessions.js +10 -2
- package/dist/cost/sessions.js.map +1 -1
- package/dist/cost/sync.d.ts.map +1 -1
- package/dist/cost/sync.js +190 -5
- package/dist/cost/sync.js.map +1 -1
- package/dist/doctor/migrations/compliance-pack-drift.d.ts +62 -0
- package/dist/doctor/migrations/compliance-pack-drift.d.ts.map +1 -0
- package/dist/doctor/migrations/compliance-pack-drift.js +255 -0
- package/dist/doctor/migrations/compliance-pack-drift.js.map +1 -0
- package/dist/doctor/migrations/index.d.ts.map +1 -1
- package/dist/doctor/migrations/index.js +11 -0
- package/dist/doctor/migrations/index.js.map +1 -1
- package/dist/doctor/migrations/legacy-cost-hooks.d.ts.map +1 -1
- package/dist/doctor/migrations/legacy-cost-hooks.js +7 -4
- package/dist/doctor/migrations/legacy-cost-hooks.js.map +1 -1
- package/dist/doctor/migrations/missing-cost-shim.d.ts.map +1 -1
- package/dist/doctor/migrations/missing-cost-shim.js +5 -4
- package/dist/doctor/migrations/missing-cost-shim.js.map +1 -1
- package/dist/doctor/migrations/outdated-cost-hooks.d.ts.map +1 -1
- package/dist/doctor/migrations/outdated-cost-hooks.js +7 -4
- package/dist/doctor/migrations/outdated-cost-hooks.js.map +1 -1
- package/dist/doctor/runner.js +14 -0
- package/dist/doctor/runner.js.map +1 -1
- package/dist/doctor/types.d.ts +35 -3
- package/dist/doctor/types.d.ts.map +1 -1
- package/dist/menu/roster.d.ts.map +1 -1
- package/dist/menu/roster.js +5 -0
- package/dist/menu/roster.js.map +1 -1
- package/dist/metrics/report.d.ts.map +1 -1
- package/dist/metrics/report.js +11 -2
- package/dist/metrics/report.js.map +1 -1
- package/dist/review/findings-parser.d.ts +92 -0
- package/dist/review/findings-parser.d.ts.map +1 -0
- package/dist/review/findings-parser.js +196 -0
- package/dist/review/findings-parser.js.map +1 -0
- package/dist/setup/setup-compute.d.ts +10 -15
- package/dist/setup/setup-compute.d.ts.map +1 -1
- package/dist/setup/setup-compute.js +39 -0
- package/dist/setup/setup-compute.js.map +1 -1
- package/package.json +2 -2
package/dist/metrics/report.js
CHANGED
|
@@ -227,13 +227,22 @@ export function computeMetrics(projectRoot, config, now = () => new Date().toISO
|
|
|
227
227
|
if (own !== null)
|
|
228
228
|
withCost++;
|
|
229
229
|
// True cost: own + one-level caused bugfix costs (non-transitive by design).
|
|
230
|
+
//
|
|
231
|
+
// A null constituent nulls the total. The previous form skipped a bugfix whose
|
|
232
|
+
// own cost was unmeasured and still reported a non-null parent, which is the
|
|
233
|
+
// "unmeasured reads as fine" failure on the number this project uses to judge
|
|
234
|
+
// whether a feature was worth building — and it understates, always, because a
|
|
235
|
+
// skipped constituent can only be missing spend (agent-portability/AC-28).
|
|
230
236
|
let trueCost = null;
|
|
231
237
|
if (own?.microUsd != null) {
|
|
232
238
|
trueCost = own.microUsd;
|
|
233
239
|
for (const bugfix of causedBy.get(name) ?? []) {
|
|
234
240
|
const bc = costOf(bugfix);
|
|
235
|
-
if (bc?.microUsd
|
|
236
|
-
trueCost
|
|
241
|
+
if (bc?.microUsd == null) {
|
|
242
|
+
trueCost = null;
|
|
243
|
+
break;
|
|
244
|
+
}
|
|
245
|
+
trueCost += bc.microUsd;
|
|
237
246
|
}
|
|
238
247
|
}
|
|
239
248
|
instances.push({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/metrics/report.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/metrics/report.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The findings-file grammar. One parser, more than one caller.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from `commands/review.ts` because compliance packs need to parse the
|
|
5
|
+
* same block format with one extra field, and `extractBulletField` was
|
|
6
|
+
* module-private — so "extend the parsing shape" would have meant a second
|
|
7
|
+
* grammar. `commands/transition.ts` already documents why that is forbidden:
|
|
8
|
+
* *"ONE parser for one format. A second grammar for the same format is the bug
|
|
9
|
+
* class this instance exists to prevent."*
|
|
10
|
+
*
|
|
11
|
+
* A second grammar would drift on exactly what a fresh one omits: the
|
|
12
|
+
* `## F1: title [critical] [open]` heading form as well as the bullet form, the
|
|
13
|
+
* status and severity normalisation, and the placeholder sentinels. A scaffolded
|
|
14
|
+
* compliance file whose placeholder the compliance parser did not recognise would
|
|
15
|
+
* satisfy control coverage with no review having happened.
|
|
16
|
+
*
|
|
17
|
+
* Nothing here is compliance-specific. `compliance/findings.ts` wraps it.
|
|
18
|
+
*
|
|
19
|
+
* Requirements: compliance-packs/AC-81, and the behaviour
|
|
20
|
+
* `retire-owner-quote-titles` and the review-gate work established.
|
|
21
|
+
*/
|
|
22
|
+
import type { Finding, FindingSeverity, FindingStatus } from '../core/types.js';
|
|
23
|
+
/** Parsed findings-file frontmatter. */
|
|
24
|
+
export interface FindingsFileMeta {
|
|
25
|
+
artifact: string;
|
|
26
|
+
reviewed_at: string;
|
|
27
|
+
reviewer: string;
|
|
28
|
+
}
|
|
29
|
+
/** Extract a simple `key: value` field from a YAML block. */
|
|
30
|
+
export declare function extractField(block: string, key: string): string | undefined;
|
|
31
|
+
/** Parse the frontmatter of a findings file. Missing fields read as empty. */
|
|
32
|
+
export declare function parseFrontmatter(content: string): FindingsFileMeta;
|
|
33
|
+
/** The body of a findings file, with frontmatter removed. */
|
|
34
|
+
export declare function stripFrontmatter(content: string): string;
|
|
35
|
+
/**
|
|
36
|
+
* Extract a bullet field value: `- **FieldName:** value`.
|
|
37
|
+
*
|
|
38
|
+
* The single definition of the bullet grammar. `compliance/findings.ts` calls this
|
|
39
|
+
* for its `Control` field rather than writing a second regex.
|
|
40
|
+
*/
|
|
41
|
+
export declare function extractBulletField(block: string, fieldName: string): string | undefined;
|
|
42
|
+
/**
|
|
43
|
+
* Normalize a `- **Status:**` value.
|
|
44
|
+
*
|
|
45
|
+
* An unrecognized leading token is a WARNING and the finding is treated as `open` —
|
|
46
|
+
* the conservative direction. Skipping an unparseable status would silently remove a
|
|
47
|
+
* finding that might be critical and open.
|
|
48
|
+
*/
|
|
49
|
+
export declare function normalizeStatus(raw: string): {
|
|
50
|
+
status: FindingStatus;
|
|
51
|
+
note?: string;
|
|
52
|
+
warning?: string;
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Normalize a `- **Severity:**` value. An unrecognized leading token defaults to the
|
|
56
|
+
* MOST severe reading (`critical`), not the least — the same conservative direction.
|
|
57
|
+
*/
|
|
58
|
+
export declare function normalizeSeverity(raw: string): {
|
|
59
|
+
severity: FindingSeverity;
|
|
60
|
+
note?: string;
|
|
61
|
+
warning?: string;
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* Sentinels from `generatePlaceholderFindings`. BOTH are matched so that a reword
|
|
65
|
+
* of one does not silently defeat the guard — and the round-trip test asserts the
|
|
66
|
+
* live scaffold still flags, so a reword fails the test rather than the gate.
|
|
67
|
+
*/
|
|
68
|
+
export declare const PLACEHOLDER_SECTION = "(pending review)";
|
|
69
|
+
export declare const PLACEHOLDER_ISSUE = "Review has not yet been performed";
|
|
70
|
+
/** Whether a parsed finding is the scaffold `aidlc review` writes, not a real finding. */
|
|
71
|
+
export declare function isPlaceholderFinding(f: {
|
|
72
|
+
section?: string;
|
|
73
|
+
issue?: string;
|
|
74
|
+
}): boolean;
|
|
75
|
+
/**
|
|
76
|
+
* Split a findings-file body into `## `-headed blocks.
|
|
77
|
+
*
|
|
78
|
+
* Returns every block, including non-finding sections such as
|
|
79
|
+
* `## Controls Checked` — a caller decides what each heading means.
|
|
80
|
+
*/
|
|
81
|
+
export declare function splitBlocks(body: string): string[];
|
|
82
|
+
/**
|
|
83
|
+
* Parse a single finding block, or null when it is not a finding.
|
|
84
|
+
*
|
|
85
|
+
* A block with no severity — in a bullet or in the heading — is not a finding.
|
|
86
|
+
* That is what lets a `## Controls Checked` section coexist with finding blocks in
|
|
87
|
+
* one file without being miscounted as a finding.
|
|
88
|
+
*/
|
|
89
|
+
export declare function parseSingleFinding(block: string, index: number): Finding | null;
|
|
90
|
+
/** Parse every finding block in a findings-file body. */
|
|
91
|
+
export declare function parseFindings(content: string): Finding[];
|
|
92
|
+
//# sourceMappingURL=findings-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findings-parser.d.ts","sourceRoot":"","sources":["../../src/review/findings-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAMhF,wCAAwC;AACxC,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,6DAA6D;AAC7D,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAI3E;AAED,8EAA8E;AAC9E,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,CAWlE;AAED,6DAA6D;AAC7D,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGxD;AAMD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAIvF;AAyBD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG;IAC5C,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAWA;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG;IAC9C,QAAQ,EAAE,eAAe,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAWA;AAMD;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,qBAAqB,CAAC;AACtD,eAAO,MAAM,iBAAiB,sCAAsC,CAAC;AAErE,0FAA0F;AAC1F,wBAAgB,oBAAoB,CAAC,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAKrF;AAMD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAElD;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAgD/E;AAED,yDAAyD;AACzD,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,EAAE,CAOxD"}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The findings-file grammar. One parser, more than one caller.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from `commands/review.ts` because compliance packs need to parse the
|
|
5
|
+
* same block format with one extra field, and `extractBulletField` was
|
|
6
|
+
* module-private — so "extend the parsing shape" would have meant a second
|
|
7
|
+
* grammar. `commands/transition.ts` already documents why that is forbidden:
|
|
8
|
+
* *"ONE parser for one format. A second grammar for the same format is the bug
|
|
9
|
+
* class this instance exists to prevent."*
|
|
10
|
+
*
|
|
11
|
+
* A second grammar would drift on exactly what a fresh one omits: the
|
|
12
|
+
* `## F1: title [critical] [open]` heading form as well as the bullet form, the
|
|
13
|
+
* status and severity normalisation, and the placeholder sentinels. A scaffolded
|
|
14
|
+
* compliance file whose placeholder the compliance parser did not recognise would
|
|
15
|
+
* satisfy control coverage with no review having happened.
|
|
16
|
+
*
|
|
17
|
+
* Nothing here is compliance-specific. `compliance/findings.ts` wraps it.
|
|
18
|
+
*
|
|
19
|
+
* Requirements: compliance-packs/AC-81, and the behaviour
|
|
20
|
+
* `retire-owner-quote-titles` and the review-gate work established.
|
|
21
|
+
*/
|
|
22
|
+
/** Extract a simple `key: value` field from a YAML block. */
|
|
23
|
+
export function extractField(block, key) {
|
|
24
|
+
const regex = new RegExp(`^${key}:\\s*(.+)$`, 'm');
|
|
25
|
+
const match = block.match(regex);
|
|
26
|
+
return match ? match[1].trim() : undefined;
|
|
27
|
+
}
|
|
28
|
+
/** Parse the frontmatter of a findings file. Missing fields read as empty. */
|
|
29
|
+
export function parseFrontmatter(content) {
|
|
30
|
+
const fmMatch = content.match(/^---\n([\s\S]*?)\n---/);
|
|
31
|
+
if (!fmMatch) {
|
|
32
|
+
return { artifact: '', reviewed_at: '', reviewer: '' };
|
|
33
|
+
}
|
|
34
|
+
const fmBlock = fmMatch[1];
|
|
35
|
+
return {
|
|
36
|
+
artifact: extractField(fmBlock, 'artifact') ?? '',
|
|
37
|
+
reviewed_at: extractField(fmBlock, 'reviewed_at') ?? '',
|
|
38
|
+
reviewer: extractField(fmBlock, 'reviewer') ?? '',
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/** The body of a findings file, with frontmatter removed. */
|
|
42
|
+
export function stripFrontmatter(content) {
|
|
43
|
+
const bodyMatch = content.match(/^---\n[\s\S]*?\n---\n([\s\S]*)/);
|
|
44
|
+
return bodyMatch ? bodyMatch[1] : content;
|
|
45
|
+
}
|
|
46
|
+
// ---------------------------------------------------------------------------
|
|
47
|
+
// Bullet fields
|
|
48
|
+
// ---------------------------------------------------------------------------
|
|
49
|
+
/**
|
|
50
|
+
* Extract a bullet field value: `- **FieldName:** value`.
|
|
51
|
+
*
|
|
52
|
+
* The single definition of the bullet grammar. `compliance/findings.ts` calls this
|
|
53
|
+
* for its `Control` field rather than writing a second regex.
|
|
54
|
+
*/
|
|
55
|
+
export function extractBulletField(block, fieldName) {
|
|
56
|
+
const regex = new RegExp(`^\\s*-\\s*\\*\\*${fieldName}:\\*\\*\\s*(.+)$`, 'mi');
|
|
57
|
+
const match = block.match(regex);
|
|
58
|
+
return match ? match[1].trim() : undefined;
|
|
59
|
+
}
|
|
60
|
+
// ---------------------------------------------------------------------------
|
|
61
|
+
// Status / severity normalization
|
|
62
|
+
//
|
|
63
|
+
// Real review files carry trailing prose: `- **Status:** resolved (requirements.md
|
|
64
|
+
// rev 2, 2026-08-18)`. Measured across the tree, 185 of 229 status bullets (81%) do.
|
|
65
|
+
// Matching the whole string against the vocabulary therefore loses most findings —
|
|
66
|
+
// and worse, `status === 'open'` never matches, so a critical open finding cannot
|
|
67
|
+
// block the gate. So: match the LEADING token, keep the remainder as a note.
|
|
68
|
+
// ---------------------------------------------------------------------------
|
|
69
|
+
const FINDING_STATUSES = ['open', 'resolved', 'accepted-risk', 'rejected'];
|
|
70
|
+
const FINDING_SEVERITIES = ['critical', 'major', 'minor', 'info'];
|
|
71
|
+
/** Split a raw field value into its leading token and the remainder. */
|
|
72
|
+
function splitLeadingToken(raw) {
|
|
73
|
+
const trimmed = raw.trim();
|
|
74
|
+
const match = trimmed.match(/^([A-Za-z][A-Za-z-]*)\b[\s:—–-]*([\s\S]*)$/);
|
|
75
|
+
if (!match)
|
|
76
|
+
return { head: trimmed.toLowerCase() };
|
|
77
|
+
const rest = match[2].trim().replace(/^\((.*)\)$/s, '$1').trim();
|
|
78
|
+
return { head: match[1].toLowerCase(), rest: rest.length > 0 ? rest : undefined };
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Normalize a `- **Status:**` value.
|
|
82
|
+
*
|
|
83
|
+
* An unrecognized leading token is a WARNING and the finding is treated as `open` —
|
|
84
|
+
* the conservative direction. Skipping an unparseable status would silently remove a
|
|
85
|
+
* finding that might be critical and open.
|
|
86
|
+
*/
|
|
87
|
+
export function normalizeStatus(raw) {
|
|
88
|
+
const { head, rest } = splitLeadingToken(raw);
|
|
89
|
+
const match = FINDING_STATUSES.find((s) => s === head);
|
|
90
|
+
if (match) {
|
|
91
|
+
return { status: match, note: rest };
|
|
92
|
+
}
|
|
93
|
+
return {
|
|
94
|
+
status: 'open',
|
|
95
|
+
note: raw.trim() || undefined,
|
|
96
|
+
warning: `unrecognized status "${raw.trim()}" — treated as open`,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Normalize a `- **Severity:**` value. An unrecognized leading token defaults to the
|
|
101
|
+
* MOST severe reading (`critical`), not the least — the same conservative direction.
|
|
102
|
+
*/
|
|
103
|
+
export function normalizeSeverity(raw) {
|
|
104
|
+
const { head, rest } = splitLeadingToken(raw);
|
|
105
|
+
const match = FINDING_SEVERITIES.find((s) => s === head);
|
|
106
|
+
if (match) {
|
|
107
|
+
return { severity: match, note: rest };
|
|
108
|
+
}
|
|
109
|
+
return {
|
|
110
|
+
severity: 'critical',
|
|
111
|
+
note: raw.trim() || undefined,
|
|
112
|
+
warning: `unrecognized severity "${raw.trim()}" — treated as critical`,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
// ---------------------------------------------------------------------------
|
|
116
|
+
// Placeholder detection
|
|
117
|
+
// ---------------------------------------------------------------------------
|
|
118
|
+
/**
|
|
119
|
+
* Sentinels from `generatePlaceholderFindings`. BOTH are matched so that a reword
|
|
120
|
+
* of one does not silently defeat the guard — and the round-trip test asserts the
|
|
121
|
+
* live scaffold still flags, so a reword fails the test rather than the gate.
|
|
122
|
+
*/
|
|
123
|
+
export const PLACEHOLDER_SECTION = '(pending review)';
|
|
124
|
+
export const PLACEHOLDER_ISSUE = 'Review has not yet been performed';
|
|
125
|
+
/** Whether a parsed finding is the scaffold `aidlc review` writes, not a real finding. */
|
|
126
|
+
export function isPlaceholderFinding(f) {
|
|
127
|
+
return ((f.section?.includes(PLACEHOLDER_SECTION) ?? false) ||
|
|
128
|
+
(f.issue?.includes(PLACEHOLDER_ISSUE) ?? false));
|
|
129
|
+
}
|
|
130
|
+
// ---------------------------------------------------------------------------
|
|
131
|
+
// Blocks
|
|
132
|
+
// ---------------------------------------------------------------------------
|
|
133
|
+
/**
|
|
134
|
+
* Split a findings-file body into `## `-headed blocks.
|
|
135
|
+
*
|
|
136
|
+
* Returns every block, including non-finding sections such as
|
|
137
|
+
* `## Controls Checked` — a caller decides what each heading means.
|
|
138
|
+
*/
|
|
139
|
+
export function splitBlocks(body) {
|
|
140
|
+
return body.split(/^## /m).filter((b) => b.trim().length > 0);
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Parse a single finding block, or null when it is not a finding.
|
|
144
|
+
*
|
|
145
|
+
* A block with no severity — in a bullet or in the heading — is not a finding.
|
|
146
|
+
* That is what lets a `## Controls Checked` section coexist with finding blocks in
|
|
147
|
+
* one file without being miscounted as a finding.
|
|
148
|
+
*/
|
|
149
|
+
export function parseSingleFinding(block, index) {
|
|
150
|
+
const lines = block.split('\n');
|
|
151
|
+
const titleLine = lines[0]?.trim() ?? '';
|
|
152
|
+
// Title — may be "Finding 1" or "F1: Title [severity] [status]"
|
|
153
|
+
const titleMatch = titleLine.match(/^(?:Finding\s+\d+|F\d+)(?::\s*(.+?))?(?:\s*\[(\w+)\]\s*\[(\w+)\])?$/i);
|
|
154
|
+
const title = titleMatch?.[1]?.trim() ?? titleLine;
|
|
155
|
+
const severityRaw = extractBulletField(block, 'Severity');
|
|
156
|
+
const section = extractBulletField(block, 'Section');
|
|
157
|
+
const issue = extractBulletField(block, 'Issue');
|
|
158
|
+
const suggestion = extractBulletField(block, 'Suggestion');
|
|
159
|
+
const statusRaw = extractBulletField(block, 'Status');
|
|
160
|
+
// A finding must have at least a severity to be valid.
|
|
161
|
+
if (!severityRaw && !titleMatch?.[2]) {
|
|
162
|
+
return null;
|
|
163
|
+
}
|
|
164
|
+
const { severity, note: severityNote } = normalizeSeverity(severityRaw ?? titleMatch?.[2] ?? 'info');
|
|
165
|
+
const { status, note: statusNote } = normalizeStatus(statusRaw ?? titleMatch?.[3] ?? 'open');
|
|
166
|
+
// The remainder of a `Status:`/`Severity:` value lands in resolution_note — a field
|
|
167
|
+
// Finding already declares and nothing previously populated.
|
|
168
|
+
const note = [statusNote, severityNote].filter(Boolean).join('; ') || undefined;
|
|
169
|
+
const finding = {
|
|
170
|
+
id: `F${index}`,
|
|
171
|
+
title: title || `Finding ${index}`,
|
|
172
|
+
severity,
|
|
173
|
+
status,
|
|
174
|
+
section: section ?? undefined,
|
|
175
|
+
issue: issue ?? undefined,
|
|
176
|
+
suggested_resolution: suggestion ?? undefined,
|
|
177
|
+
resolution_note: note,
|
|
178
|
+
};
|
|
179
|
+
// Parse-time-only flag: findings are read from disk and never written back, so this
|
|
180
|
+
// serialises nothing.
|
|
181
|
+
if (isPlaceholderFinding(finding)) {
|
|
182
|
+
finding.placeholder = true;
|
|
183
|
+
}
|
|
184
|
+
return finding;
|
|
185
|
+
}
|
|
186
|
+
/** Parse every finding block in a findings-file body. */
|
|
187
|
+
export function parseFindings(content) {
|
|
188
|
+
const findings = [];
|
|
189
|
+
for (const block of splitBlocks(stripFrontmatter(content))) {
|
|
190
|
+
const finding = parseSingleFinding(block, findings.length + 1);
|
|
191
|
+
if (finding)
|
|
192
|
+
findings.push(finding);
|
|
193
|
+
}
|
|
194
|
+
return findings;
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=findings-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findings-parser.js","sourceRoot":"","sources":["../../src/review/findings-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,16 @@ export interface SetupAnswers {
|
|
|
22
22
|
template?: string;
|
|
23
23
|
/** Default lifecycle scope */
|
|
24
24
|
scope?: CycleScope;
|
|
25
|
+
/**
|
|
26
|
+
* Compliance pack the wizard selected, or `null` for none.
|
|
27
|
+
*
|
|
28
|
+
* `undefined` and `null` mean different things here, which is the whole reason the
|
|
29
|
+
* field is three-valued. `undefined` is "the wizard did not ask" — a non-prompting
|
|
30
|
+
* path — and must leave any existing selection alone. `null` is "the user answered
|
|
31
|
+
* none", which must remove the selection. Collapsing them would make a skipped
|
|
32
|
+
* question silently clear a project's pack.
|
|
33
|
+
*/
|
|
34
|
+
compliancePack?: string | null;
|
|
25
35
|
}
|
|
26
36
|
/** Configuration produced/consumed by the setup wizard. */
|
|
27
37
|
export interface SetupConfig {
|
|
@@ -41,20 +51,5 @@ export interface SetupConfig {
|
|
|
41
51
|
*/
|
|
42
52
|
[key: string]: unknown;
|
|
43
53
|
}
|
|
44
|
-
/**
|
|
45
|
-
* Compute the setup result by merging existing config with new answers.
|
|
46
|
-
*
|
|
47
|
-
* Idempotent: `computeSetup(computeSetup(config, answers), answers)` equals
|
|
48
|
-
* `computeSetup(config, answers)`.
|
|
49
|
-
*
|
|
50
|
-
* Merge rules:
|
|
51
|
-
* - `platforms`: sorted union of existing + answers (no duplicates)
|
|
52
|
-
* - `actions`: sorted union of existing + answers (no duplicates)
|
|
53
|
-
* - `defaults.scope`: answers overrides existing if provided
|
|
54
|
-
* - `defaults.template`: answers overrides existing if provided
|
|
55
|
-
*
|
|
56
|
-
* Scalar config values (`version`, `stalled_threshold_days`,
|
|
57
|
-
* `claim_timeout_minutes`) carry forward from existing or use defaults.
|
|
58
|
-
*/
|
|
59
54
|
export declare function computeSetup(existing: SetupConfig | null, answers: SetupAnswers): SetupConfig;
|
|
60
55
|
//# sourceMappingURL=setup-compute.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-compute.d.ts","sourceRoot":"","sources":["../../src/setup/setup-compute.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAMnD,0EAA0E;AAC1E,MAAM,WAAW,YAAY;IAC3B,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4CAA4C;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2DAA2D;IAC3D,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"setup-compute.d.ts","sourceRoot":"","sources":["../../src/setup/setup-compute.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAMnD,0EAA0E;AAC1E,MAAM,WAAW,YAAY;IAC3B,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4CAA4C;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2DAA2D;IAC3D,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB;;;;;;;;OAQG;IACH,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,2DAA2D;AAC3D,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE;QACR,KAAK,EAAE,UAAU,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,qBAAqB,EAAE,MAAM,CAAC;IAC9B;;;;OAIG;IACH,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAuFD,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,WAAW,GAAG,IAAI,EAC5B,OAAO,EAAE,YAAY,GACpB,WAAW,CAuBb"}
|
|
@@ -49,6 +49,39 @@ function sortedUnion(a, b) {
|
|
|
49
49
|
* Scalar config values (`version`, `stalled_threshold_days`,
|
|
50
50
|
* `claim_timeout_minutes`) carry forward from existing or use defaults.
|
|
51
51
|
*/
|
|
52
|
+
/**
|
|
53
|
+
* The `compliance` key for a merged config, or nothing.
|
|
54
|
+
*
|
|
55
|
+
* Three cases, deliberately distinct:
|
|
56
|
+
* answer undefined the wizard did not ask — keep whatever is there
|
|
57
|
+
* answer null the user chose none — drop the section
|
|
58
|
+
* answer a pack id record the selection, preserving `enforce`
|
|
59
|
+
*
|
|
60
|
+
* The pack's installed *files* are recorded by the installer, not here. This decides
|
|
61
|
+
* only which pack the project has selected; `aidlc compliance add` writes the hashes.
|
|
62
|
+
*/
|
|
63
|
+
function complianceSection(base, answers) {
|
|
64
|
+
if (answers.compliancePack === undefined) {
|
|
65
|
+
return 'compliance' in base ? { compliance: base.compliance } : {};
|
|
66
|
+
}
|
|
67
|
+
if (answers.compliancePack === null) {
|
|
68
|
+
return { compliance: undefined };
|
|
69
|
+
}
|
|
70
|
+
const existing = typeof base.compliance === 'object' && base.compliance !== null
|
|
71
|
+
? base.compliance
|
|
72
|
+
: {};
|
|
73
|
+
const packs = Array.isArray(existing.packs) ? existing.packs : [];
|
|
74
|
+
return {
|
|
75
|
+
compliance: {
|
|
76
|
+
enforce: existing.enforce === true,
|
|
77
|
+
// Selecting a pack in the wizard records the intent; the installer fills in the
|
|
78
|
+
// version, timestamp and hashes when it writes the files.
|
|
79
|
+
packs: packs.some((p) => p.id === answers.compliancePack)
|
|
80
|
+
? packs
|
|
81
|
+
: [...packs, { id: answers.compliancePack }],
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
}
|
|
52
85
|
export function computeSetup(existing, answers) {
|
|
53
86
|
const base = existing ?? DEFAULT_CONFIG;
|
|
54
87
|
return {
|
|
@@ -62,6 +95,12 @@ export function computeSetup(existing, answers) {
|
|
|
62
95
|
},
|
|
63
96
|
platforms: sortedUnion(base.platforms, answers.platforms ?? []),
|
|
64
97
|
actions: sortedUnion(base.actions, answers.actions ?? []),
|
|
98
|
+
// `compliance` is an OWNED field, not carried through with the unknown keys.
|
|
99
|
+
// Ownership is what makes the wizard's answer authoritative: without it the
|
|
100
|
+
// spread above would preserve an existing section and selecting "none" could
|
|
101
|
+
// never remove a pack. The answer REPLACES rather than unions — unioning a
|
|
102
|
+
// selection would make "none" unexpressible.
|
|
103
|
+
...complianceSection(base, answers),
|
|
65
104
|
stalled_threshold_days: base.stalled_threshold_days,
|
|
66
105
|
claim_timeout_minutes: base.claim_timeout_minutes,
|
|
67
106
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-compute.js","sourceRoot":"","sources":["../../src/setup/setup-compute.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"setup-compute.js","sourceRoot":"","sources":["../../src/setup/setup-compute.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rasensio/aidlc",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.17.0",
|
|
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.
|
|
27
|
+
"@rasensio/aidlc-content": "1.17.0"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"@types/node": "22.15.32",
|