musubix3 0.1.19 → 0.1.21

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.
Files changed (80) hide show
  1. package/.github/plugin/marketplace.json +2 -2
  2. package/.github/skills/sdd-change/SKILL.md +28 -45
  3. package/CHANGELOG.md +126 -0
  4. package/README-ja.md +171 -5
  5. package/README.md +185 -8
  6. package/dist/packages/analysis/src/adapters.d.ts +2 -2
  7. package/dist/packages/analysis/src/adapters.js +33 -3
  8. package/dist/packages/analysis/src/adapters.js.map +1 -1
  9. package/dist/packages/analysis/src/approval-record.js +4 -0
  10. package/dist/packages/analysis/src/approval-record.js.map +1 -1
  11. package/dist/packages/analysis/src/approval.d.ts +51 -0
  12. package/dist/packages/analysis/src/approval.js +341 -2
  13. package/dist/packages/analysis/src/approval.js.map +1 -1
  14. package/dist/packages/analysis/src/attestation.js +4 -0
  15. package/dist/packages/analysis/src/attestation.js.map +1 -1
  16. package/dist/packages/analysis/src/change-evidence.d.ts +65 -8
  17. package/dist/packages/analysis/src/change-evidence.js +173 -46
  18. package/dist/packages/analysis/src/change-evidence.js.map +1 -1
  19. package/dist/packages/analysis/src/change-waiver.d.ts +46 -13
  20. package/dist/packages/analysis/src/change-waiver.js +481 -152
  21. package/dist/packages/analysis/src/change-waiver.js.map +1 -1
  22. package/dist/packages/analysis/src/change.d.ts +1 -0
  23. package/dist/packages/analysis/src/change.js +194 -66
  24. package/dist/packages/analysis/src/change.js.map +1 -1
  25. package/dist/packages/analysis/src/evidence-merge-guard.d.ts +9 -0
  26. package/dist/packages/analysis/src/evidence-merge-guard.js +62 -0
  27. package/dist/packages/analysis/src/evidence-merge-guard.js.map +1 -0
  28. package/dist/packages/analysis/src/evidence-merge.d.ts +55 -0
  29. package/dist/packages/analysis/src/evidence-merge.js +1182 -0
  30. package/dist/packages/analysis/src/evidence-merge.js.map +1 -0
  31. package/dist/packages/analysis/src/evidence-writer-lock.d.ts +189 -0
  32. package/dist/packages/analysis/src/evidence-writer-lock.js +843 -0
  33. package/dist/packages/analysis/src/evidence-writer-lock.js.map +1 -0
  34. package/dist/packages/analysis/src/files.js +11 -0
  35. package/dist/packages/analysis/src/files.js.map +1 -1
  36. package/dist/packages/analysis/src/formal.js +7 -0
  37. package/dist/packages/analysis/src/formal.js.map +1 -1
  38. package/dist/packages/analysis/src/gate.d.ts +1 -1
  39. package/dist/packages/analysis/src/gate.js +23 -6
  40. package/dist/packages/analysis/src/gate.js.map +1 -1
  41. package/dist/packages/analysis/src/graph.js +6 -0
  42. package/dist/packages/analysis/src/graph.js.map +1 -1
  43. package/dist/packages/analysis/src/index.d.ts +3 -0
  44. package/dist/packages/analysis/src/index.js +3 -0
  45. package/dist/packages/analysis/src/index.js.map +1 -1
  46. package/dist/packages/analysis/src/knowledge.js +4 -0
  47. package/dist/packages/analysis/src/knowledge.js.map +1 -1
  48. package/dist/packages/analysis/src/model-correspondence.js +5 -1
  49. package/dist/packages/analysis/src/model-correspondence.js.map +1 -1
  50. package/dist/packages/analysis/src/mutation.js +4 -0
  51. package/dist/packages/analysis/src/mutation.js.map +1 -1
  52. package/dist/packages/analysis/src/order.d.ts +16 -1
  53. package/dist/packages/analysis/src/order.js +10 -0
  54. package/dist/packages/analysis/src/order.js.map +1 -1
  55. package/dist/packages/analysis/src/performance.js +5 -1
  56. package/dist/packages/analysis/src/performance.js.map +1 -1
  57. package/dist/packages/analysis/src/quality-refresh.d.ts +18 -0
  58. package/dist/packages/analysis/src/quality-refresh.js +312 -0
  59. package/dist/packages/analysis/src/quality-refresh.js.map +1 -0
  60. package/dist/packages/analysis/src/tdd.d.ts +86 -3
  61. package/dist/packages/analysis/src/tdd.js +604 -52
  62. package/dist/packages/analysis/src/tdd.js.map +1 -1
  63. package/dist/packages/analysis/src/trace.d.ts +24 -0
  64. package/dist/packages/analysis/src/trace.js +101 -3
  65. package/dist/packages/analysis/src/trace.js.map +1 -1
  66. package/dist/packages/analysis/src/workflow-waiver.d.ts +6 -2
  67. package/dist/packages/analysis/src/workflow-waiver.js +9 -5
  68. package/dist/packages/analysis/src/workflow-waiver.js.map +1 -1
  69. package/dist/packages/analysis/src/workflow.d.ts +1 -1
  70. package/dist/packages/analysis/src/workflow.js +103 -21
  71. package/dist/packages/analysis/src/workflow.js.map +1 -1
  72. package/dist/packages/cli/src/install.js +51 -6
  73. package/dist/packages/cli/src/install.js.map +1 -1
  74. package/dist/packages/cli/src/main.js +252 -79
  75. package/dist/packages/cli/src/main.js.map +1 -1
  76. package/dist/packages/domain/src/design.js +8 -1
  77. package/dist/packages/domain/src/design.js.map +1 -1
  78. package/dist/packages/domain/src/types.d.ts +1 -0
  79. package/package.json +7 -2
  80. package/plugin.json +1 -1
@@ -1,4 +1,3 @@
1
- import type { TddEvidence } from './tdd.js';
2
1
  export declare const changePhases: readonly ["impact", "requirements", "design", "red", "implementation", "green", "quality"];
3
2
  export type ChangePhase = typeof changePhases[number];
4
3
  export interface ChangeFingerprints {
@@ -31,9 +30,10 @@ export interface ChangeRecord {
31
30
  requirementIds: string[];
32
31
  phases: Partial<Record<ChangePhase, ChangePhaseEvidence>>;
33
32
  tddBatches?: ChangeTddBatch[];
33
+ qualityHistory?: ChangePhaseEvidence[];
34
34
  }
35
35
  export interface ChangeEvidence {
36
- schemaVersion: 1;
36
+ schemaVersion: 1 | 2;
37
37
  changes: ChangeRecord[];
38
38
  }
39
39
  export interface ChangeCompleteness {
@@ -45,12 +45,47 @@ export interface ChangeCompleteness {
45
45
  valid: boolean;
46
46
  }
47
47
  export declare function loadChangeEvidence(root: string): Promise<ChangeEvidence | null>;
48
+ /** @id CODE-CHANGE-QUALITY-REFRESH-001
49
+ * @implements REQ-CHANGE-QUALITY-REFRESH-001 REQ-CHANGE-QUALITY-REFRESH-003
50
+ * @design DES-CHANGE-QUALITY-REFRESH-001
51
+ */
52
+ export declare function qualityLineage(change: ChangeRecord): ChangePhaseEvidence[];
53
+ export declare function qualityIdentity(ordinal: number): string;
54
+ export declare function qualityPayloadForIdentity(change: ChangeRecord, identity: string): ChangePhaseEvidence | undefined;
55
+ export declare function qualityOrderIdentity(change: ChangeRecord, checkpoint: ChangePhaseEvidence): string;
48
56
  /** @id CODE-CHANGE-REQUIREMENT-BATCHES-001
49
57
  * @implements REQ-CHANGE-REQUIREMENT-BATCHES-001 REQ-CHANGE-REQUIREMENT-BATCHES-003 REQ-CHANGE-REQUIREMENT-BATCHES-004
50
58
  * @design DES-CHANGE-REQUIREMENT-BATCHES-001
51
59
  */
52
60
  export declare function effectiveBatches(change: ChangeRecord): ChangeTddBatch[];
61
+ /** @id CODE-CHANGE-REQUIREMENT-BATCHES-003
62
+ * @implements REQ-CHANGE-REQUIREMENT-BATCHES-005
63
+ * @design DES-CHANGE-REQUIREMENT-BATCHES-002
64
+ */
53
65
  export declare function batchFor(batches: ChangeTddBatch[], requirementId: string): ChangeTddBatch | undefined;
66
+ /** @id CODE-TDD-GREEN-REQUIREMENT-SCOPING-002
67
+ * @implements REQ-TDD-GREEN-REQUIREMENT-SCOPING-003
68
+ * @design DES-TDD-GREEN-REQUIREMENT-SCOPING-002
69
+ * Fail-fast precondition for `tdd red`/`tdd green`, checked by
70
+ * `runTddPhaseUnlocked` (`tdd.ts`) before any side effect. Both phases first
71
+ * share the same "does any candidate change have `phases.design` recorded"
72
+ * check; only once a design-satisfied candidate exists does `green` go on to
73
+ * distinguish a missing `implementation` from a missing `red`. This mirrors
74
+ * `change.ts`'s own `recordChangePhaseUnlocked` phase-precedence rules
75
+ * (`design` before `red` before `implementation` before `green`) so the
76
+ * reported `missingPhase` always names a `change-record` command `change.ts`
77
+ * would itself currently accept.
78
+ */
79
+ export declare function changeRecordPhasePrecondition(evidence: ChangeEvidence | null, phase: 'red' | 'green', requirementId: string): {
80
+ satisfied: boolean;
81
+ changeId?: string;
82
+ missingPhase?: 'design' | 'red' | 'implementation';
83
+ };
84
+ export declare function currentRequirementIdsForBatch(batches: ChangeTddBatch[], batch: ChangeTddBatch, requirementIds: string[]): string[];
85
+ export declare function currentTddOrderWindow(change: ChangeRecord, requirementId: string): {
86
+ after: number;
87
+ through: number;
88
+ } | undefined;
54
89
  /** @id CODE-CHANGE-EVIDENCE-WAIVER-014
55
90
  * @implements REQ-CHANGE-EVIDENCE-WAIVER-016
56
91
  * @design DES-CHANGE-EVIDENCE-WAIVER-001
@@ -64,12 +99,11 @@ export declare function batchKey(requirementIds: string[]): string;
64
99
  * @design DES-CHANGE-EVIDENCE-WAIVER-001
65
100
  */
66
101
  export declare function batchForKey(batches: ChangeTddBatch[], key: string): ChangeTddBatch | undefined;
102
+ export declare function batchesForKey<T extends {
103
+ requirementIds: string[];
104
+ }>(batches: T[], key: string): T[];
67
105
  export declare function requirementsUnchangedCondition(change: ChangeRecord): boolean;
68
106
  export declare function designUnchangedCondition(change: ChangeRecord): boolean;
69
- export declare function hasValidTddCycle(change: ChangeRecord, requirementId: string, tdd: TddEvidence | null): boolean;
70
- export declare function redUnprovenCondition(change: ChangeRecord, requirementId: string, tdd: TddEvidence | null): boolean;
71
- export declare function greenUnprovenCondition(change: ChangeRecord, requirementId: string, tdd: TddEvidence | null): boolean;
72
- export declare function completenessTddUnsatisfiedCondition(change: ChangeRecord, requirementId: string, tdd: TddEvidence | null): boolean;
73
107
  /** @id CODE-CHANGE-EVIDENCE-WAIVER-016
74
108
  * @implements REQ-CHANGE-EVIDENCE-WAIVER-002
75
109
  * @design DES-CHANGE-EVIDENCE-WAIVER-001
@@ -83,9 +117,32 @@ export declare function completenessTddUnsatisfiedCondition(change: ChangeRecord
83
117
  export declare function recordMissingCondition(root: string, evidence: ChangeEvidence | null, changeId: string): Promise<boolean>;
84
118
  export declare function phaseMissingCondition(change: ChangeRecord, phaseName: string): boolean;
85
119
  export declare function orderMigrationRequiredPhaseCondition(change: ChangeRecord, phaseName: string): boolean;
86
- export declare function orderMigrationRequiredBatchCondition(change: ChangeRecord, batchPhaseName: string, key: string): boolean;
87
- export declare function orderMigrationRequiredRequirementCondition(change: ChangeRecord, requirementId: string, tdd: TddEvidence | null): boolean;
120
+ /** @id CODE-CHANGE-EVIDENCE-WAIVER-022
121
+ * @implements REQ-CHANGE-EVIDENCE-WAIVER-011
122
+ * @design DES-CHANGE-EVIDENCE-WAIVER-004
123
+ */
124
+ type BatchOrderState = Pick<ChangeTddBatch, 'requirementIds'> & Partial<Record<'red' | 'implementation' | 'green', {
125
+ order?: number;
126
+ }>>;
127
+ export declare function orderMigrationRequiredBatchItemCondition(batch: BatchOrderState, batchPhaseName: string): boolean;
128
+ export declare function orderMigrationRequiredBatchCondition(change: Pick<ChangeRecord, 'changeId' | 'requirementIds' | 'phases'> & {
129
+ tddBatches?: BatchOrderState[];
130
+ }, batchPhaseName: string, key: string): boolean;
131
+ /** @id CODE-CHANGE-EVIDENCE-WAIVER-024
132
+ * @implements REQ-CHANGE-EVIDENCE-WAIVER-017
133
+ * @design DES-CHANGE-EVIDENCE-WAIVER-004
134
+ * Pure re-derivations of `CHANGE_PHASE_ORDER`'s six transition conditions
135
+ * (GitHub Issue #56), mirroring `orderMigrationRequiredPhaseCondition`'s/
136
+ * `orderMigrationRequiredBatchCondition`'s shape so `evaluateWaiverCondition`
137
+ * never duplicates `change.ts`'s emission-site comparisons.
138
+ */
139
+ export declare function phaseOrderPhaseCondition(change: ChangeRecord, phaseName: string): boolean;
140
+ export declare function phaseOrderBatchItemCondition(change: Pick<ChangeRecord, 'phases'>, batch: BatchOrderState, batchPhaseName: string): boolean;
141
+ export declare function phaseOrderBatchCondition(change: Pick<ChangeRecord, 'changeId' | 'requirementIds' | 'phases'> & {
142
+ tddBatches?: BatchOrderState[];
143
+ }, batchPhaseName: string, key: string): boolean;
88
144
  export declare function testsUnchangedCondition(change: ChangeRecord, batch: ChangeTddBatch): boolean;
89
145
  export declare function implementationUnchangedCondition(batch: ChangeTddBatch): boolean;
90
146
  export declare function relevantImplementationUnchangedCondition(batch: ChangeTddBatch, requirementId: string): boolean;
91
147
  export declare function testChangedAfterRedCondition(batch: ChangeTddBatch): boolean;
148
+ export {};
@@ -9,10 +9,41 @@ export async function loadChangeEvidence(root) {
9
9
  if (!await exists(within(root, path)))
10
10
  return null;
11
11
  const value = JSON.parse(await readText(root, path));
12
- if (value.schemaVersion !== 1 || !Array.isArray(value.changes))
12
+ if (!Number.isInteger(value.schemaVersion) || value.schemaVersion < 1 || !Array.isArray(value.changes)) {
13
13
  throw new Error('Invalid change chronology evidence.');
14
+ }
15
+ if (value.schemaVersion > 2) {
16
+ throw new Error(`CHANGE_EVIDENCE_SCHEMA_UNSUPPORTED: schema version ${value.schemaVersion} is not supported.`);
17
+ }
14
18
  return value;
15
19
  }
20
+ /** @id CODE-CHANGE-QUALITY-REFRESH-001
21
+ * @implements REQ-CHANGE-QUALITY-REFRESH-001 REQ-CHANGE-QUALITY-REFRESH-003
22
+ * @design DES-CHANGE-QUALITY-REFRESH-001
23
+ */
24
+ export function qualityLineage(change) {
25
+ const quality = change.phases.quality;
26
+ return [...(change.qualityHistory ?? []), ...(quality ? [quality] : [])];
27
+ }
28
+ export function qualityIdentity(ordinal) {
29
+ if (!Number.isInteger(ordinal) || ordinal < 1)
30
+ throw new Error('Quality ordinal must be a positive integer.');
31
+ return ordinal === 1 ? 'quality' : `quality:${ordinal}`;
32
+ }
33
+ export function qualityPayloadForIdentity(change, identity) {
34
+ const match = /^quality(?::([1-9]\d*))?$/.exec(identity);
35
+ if (!match)
36
+ return undefined;
37
+ const ordinal = match[1] === undefined ? 1 : Number(match[1]);
38
+ const lineage = qualityLineage(change);
39
+ return lineage[ordinal - 1];
40
+ }
41
+ export function qualityOrderIdentity(change, checkpoint) {
42
+ const index = qualityLineage(change).findIndex((entry) => entry === checkpoint);
43
+ if (index < 0)
44
+ throw new Error('Quality checkpoint is not part of the supplied change lineage.');
45
+ return qualityIdentity(index + 1);
46
+ }
16
47
  /** @id CODE-CHANGE-REQUIREMENT-BATCHES-001
17
48
  * @implements REQ-CHANGE-REQUIREMENT-BATCHES-001 REQ-CHANGE-REQUIREMENT-BATCHES-003 REQ-CHANGE-REQUIREMENT-BATCHES-004
18
49
  * @design DES-CHANGE-REQUIREMENT-BATCHES-001
@@ -31,8 +62,76 @@ export function effectiveBatches(change) {
31
62
  }
32
63
  return batches;
33
64
  }
65
+ /** @id CODE-CHANGE-REQUIREMENT-BATCHES-003
66
+ * @implements REQ-CHANGE-REQUIREMENT-BATCHES-005
67
+ * @design DES-CHANGE-REQUIREMENT-BATCHES-002
68
+ */
34
69
  export function batchFor(batches, requirementId) {
35
- return batches.find((batch) => batch.requirementIds.includes(requirementId));
70
+ const applicable = batches.filter((batch) => batch.requirementIds.includes(requirementId));
71
+ const ordered = applicable.filter((batch) => Number.isInteger(batch.red?.order));
72
+ if (!ordered.length)
73
+ return applicable[0];
74
+ return ordered.reduce((selected, batch) => batch.red.order >= selected.red.order ? batch : selected);
75
+ }
76
+ /** @id CODE-TDD-GREEN-REQUIREMENT-SCOPING-002
77
+ * @implements REQ-TDD-GREEN-REQUIREMENT-SCOPING-003
78
+ * @design DES-TDD-GREEN-REQUIREMENT-SCOPING-002
79
+ * Fail-fast precondition for `tdd red`/`tdd green`, checked by
80
+ * `runTddPhaseUnlocked` (`tdd.ts`) before any side effect. Both phases first
81
+ * share the same "does any candidate change have `phases.design` recorded"
82
+ * check; only once a design-satisfied candidate exists does `green` go on to
83
+ * distinguish a missing `implementation` from a missing `red`. This mirrors
84
+ * `change.ts`'s own `recordChangePhaseUnlocked` phase-precedence rules
85
+ * (`design` before `red` before `implementation` before `green`) so the
86
+ * reported `missingPhase` always names a `change-record` command `change.ts`
87
+ * would itself currently accept.
88
+ */
89
+ export function changeRecordPhasePrecondition(evidence, phase, requirementId) {
90
+ const candidates = (evidence?.changes ?? []).filter((change) => change.requirementIds.includes(requirementId));
91
+ const designSatisfied = candidates.filter((change) => change.phases.design);
92
+ if (!designSatisfied.length) {
93
+ return {
94
+ satisfied: false,
95
+ missingPhase: 'design',
96
+ ...(candidates[0] ? { changeId: candidates[0].changeId } : {}),
97
+ };
98
+ }
99
+ if (phase === 'red')
100
+ return { satisfied: true };
101
+ const batchesByChange = designSatisfied.map((change) => ({
102
+ change,
103
+ batch: batchFor(effectiveBatches(change), requirementId),
104
+ }));
105
+ if (batchesByChange.some(({ batch }) => batch?.red && batch.implementation)) {
106
+ return { satisfied: true };
107
+ }
108
+ const withRed = batchesByChange.find(({ batch }) => batch?.red);
109
+ if (withRed) {
110
+ return { satisfied: false, changeId: withRed.change.changeId, missingPhase: 'implementation' };
111
+ }
112
+ return { satisfied: false, changeId: designSatisfied[0].changeId, missingPhase: 'red' };
113
+ }
114
+ export function currentRequirementIdsForBatch(batches, batch, requirementIds) {
115
+ // `batch` must be an element of `batches`; callers intentionally share one
116
+ // effectiveBatches() result so duplicate batch keys remain distinguishable.
117
+ return requirementIds.filter((requirementId) => batchFor(batches, requirementId) === batch);
118
+ }
119
+ export function currentTddOrderWindow(change, requirementId) {
120
+ const requirementsOrder = change.phases.requirements?.order;
121
+ const batches = effectiveBatches(change);
122
+ const batch = batchFor(batches, requirementId);
123
+ const currentRedOrder = batch?.red?.order;
124
+ if (!Number.isInteger(requirementsOrder) || !Number.isInteger(currentRedOrder))
125
+ return undefined;
126
+ const previousRedOrders = batches
127
+ .filter((candidate) => candidate.requirementIds.includes(requirementId)
128
+ && Number.isInteger(candidate.red?.order)
129
+ && candidate.red.order < currentRedOrder)
130
+ .map((candidate) => candidate.red.order);
131
+ return {
132
+ after: Math.max(requirementsOrder, ...previousRedOrders),
133
+ through: currentRedOrder,
134
+ };
36
135
  }
37
136
  /** @id CODE-CHANGE-EVIDENCE-WAIVER-014
38
137
  * @implements REQ-CHANGE-EVIDENCE-WAIVER-016
@@ -51,6 +150,9 @@ export function batchKey(requirementIds) {
51
150
  export function batchForKey(batches, key) {
52
151
  return batches.find((batch) => batchKey(batch.requirementIds) === key);
53
152
  }
153
+ export function batchesForKey(batches, key) {
154
+ return batches.filter((batch) => batchKey(batch.requirementIds) === key);
155
+ }
54
156
  // Pure, side-effect-free re-derivations of the exact "would this diagnostic
55
157
  // currently fire" conditions used by change.ts's validators. Kept here (with
56
158
  // no dependency on change.ts or change-waiver.ts) so change-waiver.ts can
@@ -67,41 +169,6 @@ export function designUnchangedCondition(change) {
67
169
  const design = change.phases.design;
68
170
  return !!requirements && !!design && requirements.fingerprints.design === design.fingerprints.design;
69
171
  }
70
- export function hasValidTddCycle(change, requirementId, tdd) {
71
- const requirements = change.phases.requirements;
72
- const batch = batchFor(effectiveBatches(change), requirementId);
73
- const red = batch?.red;
74
- const implementation = batch?.implementation;
75
- const green = batch?.green;
76
- const cycles = tdd?.cycles.filter((cycle) => cycle.requirementId === requirementId) ?? [];
77
- return cycles.some((cycle) => requirements
78
- && red
79
- && implementation
80
- && green
81
- && Number.isInteger(requirements.order)
82
- && Number.isInteger(red.order)
83
- && Number.isInteger(implementation.order)
84
- && Number.isInteger(green.order)
85
- && Number.isInteger(cycle.red.order)
86
- && Number.isInteger(cycle.green?.order)
87
- && cycle.red.valid
88
- && cycle.green?.valid
89
- && cycle.red.order > requirements.order
90
- && cycle.red.order <= red.order
91
- && cycle.green.order > implementation.order
92
- && cycle.green.order <= green.order);
93
- }
94
- export function redUnprovenCondition(change, requirementId, tdd) {
95
- const batch = batchFor(effectiveBatches(change), requirementId);
96
- return !!batch?.red && !hasValidTddCycle(change, requirementId, tdd);
97
- }
98
- export function greenUnprovenCondition(change, requirementId, tdd) {
99
- const batch = batchFor(effectiveBatches(change), requirementId);
100
- return !!batch?.green && !hasValidTddCycle(change, requirementId, tdd);
101
- }
102
- export function completenessTddUnsatisfiedCondition(change, requirementId, tdd) {
103
- return !hasValidTddCycle(change, requirementId, tdd);
104
- }
105
172
  const tddBatchPhaseNames = ['red', 'implementation', 'green'];
106
173
  /** @id CODE-CHANGE-EVIDENCE-WAIVER-016
107
174
  * @implements REQ-CHANGE-EVIDENCE-WAIVER-002
@@ -131,17 +198,77 @@ export function orderMigrationRequiredPhaseCondition(change, phaseName) {
131
198
  const item = change.phases[phaseName];
132
199
  return !!item && !Number.isInteger(item.order);
133
200
  }
134
- export function orderMigrationRequiredBatchCondition(change, batchPhaseName, key) {
135
- const batch = batchForKey(effectiveBatches(change), key);
136
- const item = batch?.[batchPhaseName];
201
+ export function orderMigrationRequiredBatchItemCondition(batch, batchPhaseName) {
202
+ const item = batch[batchPhaseName];
137
203
  return !!item && !Number.isInteger(item.order);
138
204
  }
139
- export function orderMigrationRequiredRequirementCondition(change, requirementId, tdd) {
140
- const batch = batchFor(effectiveBatches(change), requirementId);
141
- if (!batch?.red)
142
- return false;
143
- const cycles = (tdd?.cycles ?? []).filter((cycle) => cycle.requirementId === requirementId);
144
- return cycles.some((cycle) => !Number.isInteger(cycle.red.order) || !Number.isInteger(cycle.green?.order));
205
+ export function orderMigrationRequiredBatchCondition(change, batchPhaseName, key) {
206
+ const batches = [...(change.tddBatches ?? [])];
207
+ if (change.phases.red || change.phases.implementation || change.phases.green) {
208
+ const legacyBatch = {
209
+ requirementIds: [...change.requirementIds],
210
+ ...(change.phases.red ? { red: change.phases.red } : {}),
211
+ ...(change.phases.implementation ? { implementation: change.phases.implementation } : {}),
212
+ ...(change.phases.green ? { green: change.phases.green } : {}),
213
+ };
214
+ batches.unshift(legacyBatch);
215
+ }
216
+ return batchesForKey(batches, key)
217
+ .some((batch) => orderMigrationRequiredBatchItemCondition(batch, batchPhaseName));
218
+ }
219
+ /** @id CODE-CHANGE-EVIDENCE-WAIVER-024
220
+ * @implements REQ-CHANGE-EVIDENCE-WAIVER-017
221
+ * @design DES-CHANGE-EVIDENCE-WAIVER-004
222
+ * Pure re-derivations of `CHANGE_PHASE_ORDER`'s six transition conditions
223
+ * (GitHub Issue #56), mirroring `orderMigrationRequiredPhaseCondition`'s/
224
+ * `orderMigrationRequiredBatchCondition`'s shape so `evaluateWaiverCondition`
225
+ * never duplicates `change.ts`'s emission-site comparisons.
226
+ */
227
+ export function phaseOrderPhaseCondition(change, phaseName) {
228
+ if (phaseName === 'requirements') {
229
+ const requirements = change.phases.requirements;
230
+ const impact = change.phases.impact;
231
+ return requirements?.order !== undefined && impact?.order !== undefined && requirements.order <= impact.order;
232
+ }
233
+ if (phaseName === 'design') {
234
+ const design = change.phases.design;
235
+ const requirements = change.phases.requirements;
236
+ return design?.order !== undefined && requirements?.order !== undefined && design.order <= requirements.order;
237
+ }
238
+ return false;
239
+ }
240
+ export function phaseOrderBatchItemCondition(change, batch, batchPhaseName) {
241
+ if (batchPhaseName === 'red') {
242
+ const design = change.phases.design;
243
+ return batch.red?.order !== undefined && design?.order !== undefined && batch.red.order <= design.order;
244
+ }
245
+ if (batchPhaseName === 'implementation') {
246
+ return batch.implementation?.order !== undefined && batch.red?.order !== undefined
247
+ && batch.implementation.order <= batch.red.order;
248
+ }
249
+ if (batchPhaseName === 'green') {
250
+ return batch.green?.order !== undefined && batch.implementation?.order !== undefined
251
+ && batch.green.order <= batch.implementation.order;
252
+ }
253
+ if (batchPhaseName === 'quality') {
254
+ const quality = change.phases.quality;
255
+ return quality?.order !== undefined && batch.green?.order !== undefined && quality.order <= batch.green.order;
256
+ }
257
+ return false;
258
+ }
259
+ export function phaseOrderBatchCondition(change, batchPhaseName, key) {
260
+ const batches = [...(change.tddBatches ?? [])];
261
+ if (change.phases.red || change.phases.implementation || change.phases.green) {
262
+ const legacyBatch = {
263
+ requirementIds: [...change.requirementIds],
264
+ ...(change.phases.red ? { red: change.phases.red } : {}),
265
+ ...(change.phases.implementation ? { implementation: change.phases.implementation } : {}),
266
+ ...(change.phases.green ? { green: change.phases.green } : {}),
267
+ };
268
+ batches.unshift(legacyBatch);
269
+ }
270
+ return batchesForKey(batches, key)
271
+ .some((batch) => phaseOrderBatchItemCondition(change, batch, batchPhaseName));
145
272
  }
146
273
  export function testsUnchangedCondition(change, batch) {
147
274
  const design = change.phases.design;
@@ -1 +1 @@
1
- {"version":3,"file":"change-evidence.js","sourceRoot":"","sources":["../../../../packages/analysis/src/change-evidence.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"change-evidence.js","sourceRoot":"","sources":["../../../../packages/analysis/src/change-evidence.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@ import { inspectEvidenceOrder } from './order.js';
6
6
  * @implements REQ-CHANGE-EVIDENCE-WAIVER-001 REQ-CHANGE-EVIDENCE-WAIVER-004
7
7
  * @design DES-CHANGE-EVIDENCE-WAIVER-001
8
8
  */
9
- export declare const WAIVABLE_CODES: readonly ["CHANGE_REQUIREMENTS_UNCHANGED", "CHANGE_DESIGN_UNCHANGED", "CHANGE_RED_UNPROVEN", "CHANGE_GREEN_UNPROVEN", "CHANGE_COMPLETENESS_TDD", "CHANGE_RECORD_MISSING", "CHANGE_PHASE_MISSING", "CHANGE_ORDER_MIGRATION_REQUIRED", "CHANGE_TESTS_UNCHANGED", "CHANGE_IMPLEMENTATION_UNCHANGED", "CHANGE_RELEVANT_IMPLEMENTATION_UNCHANGED", "CHANGE_TEST_CHANGED_AFTER_RED"];
9
+ export declare const WAIVABLE_CODES: readonly ["CHANGE_REQUIREMENTS_UNCHANGED", "CHANGE_DESIGN_UNCHANGED", "CHANGE_RED_UNPROVEN", "CHANGE_GREEN_UNPROVEN", "CHANGE_COMPLETENESS_TDD", "CHANGE_RECORD_MISSING", "CHANGE_PHASE_MISSING", "CHANGE_ORDER_MIGRATION_REQUIRED", "CHANGE_TESTS_UNCHANGED", "CHANGE_IMPLEMENTATION_UNCHANGED", "CHANGE_RELEVANT_IMPLEMENTATION_UNCHANGED", "CHANGE_TEST_CHANGED_AFTER_RED", "CHANGE_PHASE_ORDER"];
10
10
  export type WaivableCode = typeof WAIVABLE_CODES[number];
11
11
  /** @id CODE-CHANGE-EVIDENCE-WAIVER-017
12
12
  * @implements REQ-CHANGE-EVIDENCE-WAIVER-004 REQ-CHANGE-EVIDENCE-WAIVER-016
@@ -15,12 +15,12 @@ export type WaivableCode = typeof WAIVABLE_CODES[number];
15
15
  * single `CHANGE_LEVEL_CODES` set, so REQ-004's regime matrix is data, never
16
16
  * scattered per-code `if` branches.
17
17
  */
18
- export declare const NEITHER_KEY_CODES: Set<"CHANGE_REQUIREMENTS_UNCHANGED" | "CHANGE_DESIGN_UNCHANGED" | "CHANGE_RED_UNPROVEN" | "CHANGE_GREEN_UNPROVEN" | "CHANGE_COMPLETENESS_TDD" | "CHANGE_RECORD_MISSING" | "CHANGE_PHASE_MISSING" | "CHANGE_ORDER_MIGRATION_REQUIRED" | "CHANGE_TESTS_UNCHANGED" | "CHANGE_IMPLEMENTATION_UNCHANGED" | "CHANGE_RELEVANT_IMPLEMENTATION_UNCHANGED" | "CHANGE_TEST_CHANGED_AFTER_RED">;
19
- export declare const REQUIREMENT_ONLY_CODES: Set<"CHANGE_REQUIREMENTS_UNCHANGED" | "CHANGE_DESIGN_UNCHANGED" | "CHANGE_RED_UNPROVEN" | "CHANGE_GREEN_UNPROVEN" | "CHANGE_COMPLETENESS_TDD" | "CHANGE_RECORD_MISSING" | "CHANGE_PHASE_MISSING" | "CHANGE_ORDER_MIGRATION_REQUIRED" | "CHANGE_TESTS_UNCHANGED" | "CHANGE_IMPLEMENTATION_UNCHANGED" | "CHANGE_RELEVANT_IMPLEMENTATION_UNCHANGED" | "CHANGE_TEST_CHANGED_AFTER_RED">;
20
- export declare const DETAIL_ONLY_CODES: Set<"CHANGE_REQUIREMENTS_UNCHANGED" | "CHANGE_DESIGN_UNCHANGED" | "CHANGE_RED_UNPROVEN" | "CHANGE_GREEN_UNPROVEN" | "CHANGE_COMPLETENESS_TDD" | "CHANGE_RECORD_MISSING" | "CHANGE_PHASE_MISSING" | "CHANGE_ORDER_MIGRATION_REQUIRED" | "CHANGE_TESTS_UNCHANGED" | "CHANGE_IMPLEMENTATION_UNCHANGED" | "CHANGE_RELEVANT_IMPLEMENTATION_UNCHANGED" | "CHANGE_TEST_CHANGED_AFTER_RED">;
21
- export declare const BOTH_KEYS_CODES: Set<"CHANGE_REQUIREMENTS_UNCHANGED" | "CHANGE_DESIGN_UNCHANGED" | "CHANGE_RED_UNPROVEN" | "CHANGE_GREEN_UNPROVEN" | "CHANGE_COMPLETENESS_TDD" | "CHANGE_RECORD_MISSING" | "CHANGE_PHASE_MISSING" | "CHANGE_ORDER_MIGRATION_REQUIRED" | "CHANGE_TESTS_UNCHANGED" | "CHANGE_IMPLEMENTATION_UNCHANGED" | "CHANGE_RELEVANT_IMPLEMENTATION_UNCHANGED" | "CHANGE_TEST_CHANGED_AFTER_RED">;
18
+ export declare const NEITHER_KEY_CODES: Set<"CHANGE_REQUIREMENTS_UNCHANGED" | "CHANGE_DESIGN_UNCHANGED" | "CHANGE_RED_UNPROVEN" | "CHANGE_GREEN_UNPROVEN" | "CHANGE_COMPLETENESS_TDD" | "CHANGE_RECORD_MISSING" | "CHANGE_PHASE_MISSING" | "CHANGE_ORDER_MIGRATION_REQUIRED" | "CHANGE_TESTS_UNCHANGED" | "CHANGE_IMPLEMENTATION_UNCHANGED" | "CHANGE_RELEVANT_IMPLEMENTATION_UNCHANGED" | "CHANGE_TEST_CHANGED_AFTER_RED" | "CHANGE_PHASE_ORDER">;
19
+ export declare const REQUIREMENT_ONLY_CODES: Set<"CHANGE_REQUIREMENTS_UNCHANGED" | "CHANGE_DESIGN_UNCHANGED" | "CHANGE_RED_UNPROVEN" | "CHANGE_GREEN_UNPROVEN" | "CHANGE_COMPLETENESS_TDD" | "CHANGE_RECORD_MISSING" | "CHANGE_PHASE_MISSING" | "CHANGE_ORDER_MIGRATION_REQUIRED" | "CHANGE_TESTS_UNCHANGED" | "CHANGE_IMPLEMENTATION_UNCHANGED" | "CHANGE_RELEVANT_IMPLEMENTATION_UNCHANGED" | "CHANGE_TEST_CHANGED_AFTER_RED" | "CHANGE_PHASE_ORDER">;
20
+ export declare const DETAIL_ONLY_CODES: Set<"CHANGE_REQUIREMENTS_UNCHANGED" | "CHANGE_DESIGN_UNCHANGED" | "CHANGE_RED_UNPROVEN" | "CHANGE_GREEN_UNPROVEN" | "CHANGE_COMPLETENESS_TDD" | "CHANGE_RECORD_MISSING" | "CHANGE_PHASE_MISSING" | "CHANGE_ORDER_MIGRATION_REQUIRED" | "CHANGE_TESTS_UNCHANGED" | "CHANGE_IMPLEMENTATION_UNCHANGED" | "CHANGE_RELEVANT_IMPLEMENTATION_UNCHANGED" | "CHANGE_TEST_CHANGED_AFTER_RED" | "CHANGE_PHASE_ORDER">;
21
+ export declare const BOTH_KEYS_CODES: Set<"CHANGE_REQUIREMENTS_UNCHANGED" | "CHANGE_DESIGN_UNCHANGED" | "CHANGE_RED_UNPROVEN" | "CHANGE_GREEN_UNPROVEN" | "CHANGE_COMPLETENESS_TDD" | "CHANGE_RECORD_MISSING" | "CHANGE_PHASE_MISSING" | "CHANGE_ORDER_MIGRATION_REQUIRED" | "CHANGE_TESTS_UNCHANGED" | "CHANGE_IMPLEMENTATION_UNCHANGED" | "CHANGE_RELEVANT_IMPLEMENTATION_UNCHANGED" | "CHANGE_TEST_CHANGED_AFTER_RED" | "CHANGE_PHASE_ORDER">;
22
22
  /** Retained purely for backward-compatible naming inside this module. */
23
- export declare const CHANGE_LEVEL_CODES: Set<"CHANGE_REQUIREMENTS_UNCHANGED" | "CHANGE_DESIGN_UNCHANGED" | "CHANGE_RED_UNPROVEN" | "CHANGE_GREEN_UNPROVEN" | "CHANGE_COMPLETENESS_TDD" | "CHANGE_RECORD_MISSING" | "CHANGE_PHASE_MISSING" | "CHANGE_ORDER_MIGRATION_REQUIRED" | "CHANGE_TESTS_UNCHANGED" | "CHANGE_IMPLEMENTATION_UNCHANGED" | "CHANGE_RELEVANT_IMPLEMENTATION_UNCHANGED" | "CHANGE_TEST_CHANGED_AFTER_RED">;
23
+ export declare const CHANGE_LEVEL_CODES: Set<"CHANGE_REQUIREMENTS_UNCHANGED" | "CHANGE_DESIGN_UNCHANGED" | "CHANGE_RED_UNPROVEN" | "CHANGE_GREEN_UNPROVEN" | "CHANGE_COMPLETENESS_TDD" | "CHANGE_RECORD_MISSING" | "CHANGE_PHASE_MISSING" | "CHANGE_ORDER_MIGRATION_REQUIRED" | "CHANGE_TESTS_UNCHANGED" | "CHANGE_IMPLEMENTATION_UNCHANGED" | "CHANGE_RELEVANT_IMPLEMENTATION_UNCHANGED" | "CHANGE_TEST_CHANGED_AFTER_RED" | "CHANGE_PHASE_ORDER">;
24
24
  export declare function requiresRequirementId(code: WaivableCode): boolean;
25
25
  export declare function requiresDetail(code: WaivableCode): boolean;
26
26
  export declare const CURRENT_SNAPSHOT_VERSION = 1;
@@ -57,6 +57,11 @@ export type LoadedChangeWaiverEvidence = {
57
57
  * regardless of key insertion order.
58
58
  */
59
59
  export declare function canonicalJson(value: unknown): string;
60
+ /** @id CODE-CHANGE-EVIDENCE-WAIVER-026
61
+ * @implements REQ-CHANGE-EVIDENCE-WAIVER-011
62
+ * @design DES-CHANGE-EVIDENCE-WAIVER-002
63
+ */
64
+ export declare function normalizeChangeRecordMissingDocument(text: string, changeId: string, waiverRecord?: Pick<ChangeWaiverRecord, 'code' | 'approver' | 'recordedAt' | 'snapshotHash'>): string;
60
65
  /** @id CODE-CHANGE-EVIDENCE-WAIVER-002
61
66
  * @implements REQ-CHANGE-EVIDENCE-WAIVER-007
62
67
  * @design DES-CHANGE-EVIDENCE-WAIVER-001
@@ -109,7 +114,7 @@ export declare function parseDetail(code: WaivableCode, detail: string | undefin
109
114
  * @implements REQ-CHANGE-EVIDENCE-WAIVER-011 REQ-CHANGE-EVIDENCE-WAIVER-016
110
115
  * @design DES-CHANGE-EVIDENCE-WAIVER-002
111
116
  */
112
- export declare function snapshotPayload(root: string, evidence: ChangeEvidence | null, tdd: TddEvidence | null, order: Awaited<ReturnType<typeof inspectEvidenceOrder>>, changeId: string, code: WaivableCode, requirementId?: string, detail?: string): Promise<unknown | null>;
117
+ export declare function snapshotPayload(root: string, evidence: ChangeEvidence | null, tdd: TddEvidence | null, order: Awaited<ReturnType<typeof inspectEvidenceOrder>>, changeId: string, code: WaivableCode, requirementId?: string, detail?: string, waiverRecord?: Pick<ChangeWaiverRecord, 'code' | 'approver' | 'recordedAt' | 'snapshotHash'>): Promise<unknown | null>;
113
118
  /** @id CODE-CHANGE-EVIDENCE-WAIVER-005
114
119
  * @implements REQ-CHANGE-EVIDENCE-WAIVER-015 REQ-CHANGE-EVIDENCE-WAIVER-016
115
120
  * @design DES-CHANGE-EVIDENCE-WAIVER-002
@@ -124,10 +129,17 @@ export declare function waiverChainValid(waivers: ChangeWaiverRecord[], index: n
124
129
  * @implements REQ-CHANGE-EVIDENCE-WAIVER-006 REQ-CHANGE-EVIDENCE-WAIVER-016
125
130
  * @design DES-CHANGE-EVIDENCE-WAIVER-002
126
131
  */
127
- export declare function waiverLinkage(root: string, evidence: ChangeEvidence | null, order: Awaited<ReturnType<typeof inspectEvidenceOrder>>, waivers: ChangeWaiverRecord[], index: number): Promise<{
132
+ export declare function waiverLinkage(order: Awaited<ReturnType<typeof inspectEvidenceOrder>>, waivers: ChangeWaiverRecord[], index: number): {
128
133
  valid: boolean;
129
134
  reason?: string;
130
- }>;
135
+ };
136
+ export type WaiverCondition = 'true' | 'false' | 'indeterminate';
137
+ export interface WaiverScope {
138
+ changeId: string;
139
+ code: WaivableCode;
140
+ requirementId?: string;
141
+ detail?: string;
142
+ }
131
143
  export interface WaiverContext {
132
144
  loaded: LoadedChangeWaiverEvidence | null;
133
145
  order: Awaited<ReturnType<typeof inspectEvidenceOrder>>;
@@ -136,7 +148,9 @@ export interface WaiverContext {
136
148
  reason?: string;
137
149
  }>;
138
150
  currentHash: Array<string | undefined>;
151
+ condition: Array<WaiverCondition | undefined>;
139
152
  }
153
+ export declare function evaluateWaiverCondition(root: string, evidence: ChangeEvidence | null, tdd: TddEvidence | null, order: Awaited<ReturnType<typeof inspectEvidenceOrder>>, scope: WaiverScope): Promise<WaiverCondition>;
140
154
  /** @id CODE-CHANGE-EVIDENCE-WAIVER-020
141
155
  * @implements REQ-CHANGE-EVIDENCE-WAIVER-006 REQ-CHANGE-EVIDENCE-WAIVER-007 REQ-CHANGE-EVIDENCE-WAIVER-010 REQ-CHANGE-EVIDENCE-WAIVER-011
142
156
  * @design DES-CHANGE-EVIDENCE-WAIVER-004
@@ -144,7 +158,17 @@ export interface WaiverContext {
144
158
  * consults only this fully resolved value, so no diagnostic-emission call
145
159
  * site or final malformed/stale pass needs to itself `await` anything.
146
160
  */
147
- export declare function buildWaiverContext(root: string, evidence: ChangeEvidence | null, tdd: TddEvidence | null): Promise<WaiverContext>;
161
+ export declare function buildWaiverContext(root: string, evidence: ChangeEvidence | null, tdd: TddEvidence | null, precomputed?: {
162
+ loaded?: LoadedChangeWaiverEvidence | null;
163
+ order?: Awaited<ReturnType<typeof inspectEvidenceOrder>>;
164
+ }): Promise<WaiverContext>;
165
+ export declare function isWaiverStale(waiverContext: WaiverContext, index: number): boolean;
166
+ /**
167
+ * Selects the greatest-`order` validly linked record within a
168
+ * `changeId`/`code`/`requirementId`/`detail` scope group (REQ-006's
169
+ * supersession rule), returning its index, or -1 if none match/link.
170
+ */
171
+ export declare function authoritativeWaiverIndex(waiverContext: WaiverContext, scope: WaiverScope): number;
148
172
  /** @id CODE-CHANGE-EVIDENCE-WAIVER-008
149
173
  * @implements REQ-CHANGE-EVIDENCE-WAIVER-006 REQ-CHANGE-EVIDENCE-WAIVER-008 REQ-CHANGE-EVIDENCE-WAIVER-009 REQ-CHANGE-EVIDENCE-WAIVER-016
150
174
  * @design DES-CHANGE-EVIDENCE-WAIVER-004
@@ -154,7 +178,7 @@ export declare function waivedDiagnostic(waiverContext: WaiverContext, code: Wai
154
178
  * @implements REQ-CHANGE-EVIDENCE-WAIVER-006 REQ-CHANGE-EVIDENCE-WAIVER-007 REQ-CHANGE-EVIDENCE-WAIVER-011
155
179
  * @design DES-CHANGE-EVIDENCE-WAIVER-004
156
180
  */
157
- export declare function reportWaiverEvidenceDiagnostics(waiverContext: WaiverContext, _evidence: ChangeEvidence | null, _tdd: TddEvidence | null): Diagnostic[];
181
+ export declare function reportWaiverEvidenceDiagnostics(waiverContext: WaiverContext): Diagnostic[];
158
182
  /** @id CODE-CHANGE-EVIDENCE-WAIVER-010
159
183
  * @implements REQ-CHANGE-EVIDENCE-WAIVER-001 REQ-CHANGE-EVIDENCE-WAIVER-002 REQ-CHANGE-EVIDENCE-WAIVER-003 REQ-CHANGE-EVIDENCE-WAIVER-004 REQ-CHANGE-EVIDENCE-WAIVER-005 REQ-CHANGE-EVIDENCE-WAIVER-010 REQ-CHANGE-EVIDENCE-WAIVER-015 REQ-CHANGE-EVIDENCE-WAIVER-016
160
184
  * @design DES-CHANGE-EVIDENCE-WAIVER-001
@@ -170,7 +194,7 @@ export declare function recordChangeWaiver(root: string, changeId: string, code:
170
194
  * @implements REQ-CHANGE-EVIDENCE-WAIVER-006 REQ-CHANGE-EVIDENCE-WAIVER-012 REQ-CHANGE-EVIDENCE-WAIVER-016
171
195
  * @design DES-CHANGE-EVIDENCE-WAIVER-005
172
196
  */
173
- export declare function activeWaivers(root: string): Promise<Array<{
197
+ export declare function activeWaivers(root: string, precomputed?: WaiverContext): Promise<Array<{
174
198
  changeId: string;
175
199
  code: string;
176
200
  requirementId?: string;
@@ -179,8 +203,17 @@ export declare function activeWaivers(root: string): Promise<Array<{
179
203
  reason: string;
180
204
  recordedAt: string;
181
205
  }>>;
206
+ export declare function evaluateChangeWaiverState(root: string, evidence: ChangeEvidence, tdd: TddEvidence, order: Awaited<ReturnType<typeof inspectEvidenceOrder>>, waivers: ChangeWaiverEvidence): Promise<{
207
+ stale: Array<{
208
+ changeId: string;
209
+ code: string;
210
+ requirementId?: string;
211
+ detail?: string;
212
+ }>;
213
+ authoritative: Map<string, string>;
214
+ }>;
182
215
  /** @id CODE-CHANGE-EVIDENCE-WAIVER-012
183
216
  * @implements REQ-CHANGE-EVIDENCE-WAIVER-007 REQ-CHANGE-EVIDENCE-WAIVER-011
184
217
  * @design DES-CHANGE-EVIDENCE-WAIVER-005
185
218
  */
186
- export declare function waiverEvidenceDiagnostics(root: string): Promise<Diagnostic[]>;
219
+ export declare function waiverEvidenceDiagnostics(root: string, precomputed?: WaiverContext): Promise<Diagnostic[]>;