musubix3 0.1.20 → 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 (63) hide show
  1. package/.github/plugin/marketplace.json +2 -2
  2. package/.github/skills/sdd-change/SKILL.md +28 -45
  3. package/CHANGELOG.md +88 -0
  4. package/README-ja.md +103 -3
  5. package/README.md +113 -3
  6. package/dist/packages/analysis/src/approval.d.ts +51 -0
  7. package/dist/packages/analysis/src/approval.js +341 -2
  8. package/dist/packages/analysis/src/approval.js.map +1 -1
  9. package/dist/packages/analysis/src/attestation.js +4 -0
  10. package/dist/packages/analysis/src/attestation.js.map +1 -1
  11. package/dist/packages/analysis/src/change-evidence.d.ts +56 -13
  12. package/dist/packages/analysis/src/change-evidence.js +142 -81
  13. package/dist/packages/analysis/src/change-evidence.js.map +1 -1
  14. package/dist/packages/analysis/src/change-waiver.d.ts +37 -13
  15. package/dist/packages/analysis/src/change-waiver.js +425 -174
  16. package/dist/packages/analysis/src/change-waiver.js.map +1 -1
  17. package/dist/packages/analysis/src/change.d.ts +1 -0
  18. package/dist/packages/analysis/src/change.js +176 -23
  19. package/dist/packages/analysis/src/change.js.map +1 -1
  20. package/dist/packages/analysis/src/evidence-merge-guard.d.ts +5 -0
  21. package/dist/packages/analysis/src/evidence-merge-guard.js +15 -0
  22. package/dist/packages/analysis/src/evidence-merge-guard.js.map +1 -1
  23. package/dist/packages/analysis/src/evidence-merge.d.ts +2 -0
  24. package/dist/packages/analysis/src/evidence-merge.js +173 -38
  25. package/dist/packages/analysis/src/evidence-merge.js.map +1 -1
  26. package/dist/packages/analysis/src/evidence-writer-lock.d.ts +9 -2
  27. package/dist/packages/analysis/src/evidence-writer-lock.js +75 -21
  28. package/dist/packages/analysis/src/evidence-writer-lock.js.map +1 -1
  29. package/dist/packages/analysis/src/files.js +5 -0
  30. package/dist/packages/analysis/src/files.js.map +1 -1
  31. package/dist/packages/analysis/src/gate.d.ts +1 -1
  32. package/dist/packages/analysis/src/gate.js +17 -4
  33. package/dist/packages/analysis/src/gate.js.map +1 -1
  34. package/dist/packages/analysis/src/index.d.ts +1 -0
  35. package/dist/packages/analysis/src/index.js +1 -0
  36. package/dist/packages/analysis/src/index.js.map +1 -1
  37. package/dist/packages/analysis/src/order.d.ts +16 -1
  38. package/dist/packages/analysis/src/order.js +6 -0
  39. package/dist/packages/analysis/src/order.js.map +1 -1
  40. package/dist/packages/analysis/src/quality-refresh.d.ts +18 -0
  41. package/dist/packages/analysis/src/quality-refresh.js +312 -0
  42. package/dist/packages/analysis/src/quality-refresh.js.map +1 -0
  43. package/dist/packages/analysis/src/tdd.d.ts +84 -3
  44. package/dist/packages/analysis/src/tdd.js +589 -50
  45. package/dist/packages/analysis/src/tdd.js.map +1 -1
  46. package/dist/packages/analysis/src/trace.d.ts +24 -0
  47. package/dist/packages/analysis/src/trace.js +95 -3
  48. package/dist/packages/analysis/src/trace.js.map +1 -1
  49. package/dist/packages/analysis/src/workflow-waiver.d.ts +6 -2
  50. package/dist/packages/analysis/src/workflow-waiver.js +9 -5
  51. package/dist/packages/analysis/src/workflow-waiver.js.map +1 -1
  52. package/dist/packages/analysis/src/workflow.d.ts +1 -1
  53. package/dist/packages/analysis/src/workflow.js +4 -4
  54. package/dist/packages/analysis/src/workflow.js.map +1 -1
  55. package/dist/packages/cli/src/install.js +27 -4
  56. package/dist/packages/cli/src/install.js.map +1 -1
  57. package/dist/packages/cli/src/main.js +77 -18
  58. package/dist/packages/cli/src/main.js.map +1 -1
  59. package/dist/packages/domain/src/design.js +8 -1
  60. package/dist/packages/domain/src/design.js.map +1 -1
  61. package/dist/packages/domain/src/types.d.ts +1 -0
  62. package/package.json +7 -2
  63. package/plugin.json +1 -1
@@ -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;
@@ -192,4 +216,4 @@ export declare function evaluateChangeWaiverState(root: string, evidence: Change
192
216
  * @implements REQ-CHANGE-EVIDENCE-WAIVER-007 REQ-CHANGE-EVIDENCE-WAIVER-011
193
217
  * @design DES-CHANGE-EVIDENCE-WAIVER-005
194
218
  */
195
- export declare function waiverEvidenceDiagnostics(root: string): Promise<Diagnostic[]>;
219
+ export declare function waiverEvidenceDiagnostics(root: string, precomputed?: WaiverContext): Promise<Diagnostic[]>;