@substrate-ai/sdlc 0.20.58 → 0.20.59
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/verification/checks/cross-story-consistency-check.d.ts +65 -0
- package/dist/verification/checks/cross-story-consistency-check.d.ts.map +1 -0
- package/dist/verification/checks/cross-story-consistency-check.js +229 -0
- package/dist/verification/checks/cross-story-consistency-check.js.map +1 -0
- package/dist/verification/checks/index.d.ts +1 -0
- package/dist/verification/checks/index.d.ts.map +1 -1
- package/dist/verification/checks/index.js +1 -0
- package/dist/verification/checks/index.js.map +1 -1
- package/dist/verification/findings.d.ts +16 -0
- package/dist/verification/findings.d.ts.map +1 -1
- package/dist/verification/findings.js +16 -0
- package/dist/verification/findings.js.map +1 -1
- package/dist/verification/index.d.ts +4 -0
- package/dist/verification/index.d.ts.map +1 -1
- package/dist/verification/index.js +6 -0
- package/dist/verification/index.js.map +1 -1
- package/dist/verification/types.d.ts +22 -0
- package/dist/verification/types.d.ts.map +1 -1
- package/dist/verification/verification-pipeline.d.ts.map +1 -1
- package/dist/verification/verification-pipeline.js +2 -0
- package/dist/verification/verification-pipeline.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CrossStoryConsistencyCheck — Story 68-1.
|
|
3
|
+
*
|
|
4
|
+
* Tier B cross-story verification check that detects when concurrent stories
|
|
5
|
+
* modify overlapping file sets, and validates that their interface signatures
|
|
6
|
+
* do not conflict.
|
|
7
|
+
*
|
|
8
|
+
* Motivating incidents:
|
|
9
|
+
* - Epic 66 run a832487a: 66-1+66-2+66-7 concurrent dispatch — concurrent
|
|
10
|
+
* stories modifying shared test files caused transient verification failures
|
|
11
|
+
* when the earlier-committing story's changes affected the later story's
|
|
12
|
+
* verification gate.
|
|
13
|
+
* - Epic 67 run a59e4c96: 67-1+67-2 concurrent dispatch —
|
|
14
|
+
* methodology-pack.test.ts BUDGET_LIMIT constant (30000 vs 32000) was updated
|
|
15
|
+
* by story 67-1 AFTER 67-2's verification ran on the un-bumped tree, causing
|
|
16
|
+
* a false pipeline failure verdict despite fully coherent on-disk state.
|
|
17
|
+
*
|
|
18
|
+
* Two detection layers:
|
|
19
|
+
* Layer 1 — path intersection: detect shared file paths between the current
|
|
20
|
+
* story's modified files and priorStoryFiles (other concurrent stories).
|
|
21
|
+
* Runs unconditionally when Tier B context is present.
|
|
22
|
+
* Layer 2 — diff validation: only runs when buildCheckPassed !== false and
|
|
23
|
+
* Layer 1 found at least one collision path. Parses git diff output for
|
|
24
|
+
* type signature changes (export interface/type) and constant reassignments
|
|
25
|
+
* in the collision file set.
|
|
26
|
+
*
|
|
27
|
+
* Per Story 60-4/60-10 convention: motivating incident citations appear in this
|
|
28
|
+
* header comment rather than inline in the check logic.
|
|
29
|
+
*/
|
|
30
|
+
import type { VerificationCheck, VerificationContext, VerificationResult } from '../types.js';
|
|
31
|
+
/**
|
|
32
|
+
* Compute the set of file paths that collide between the current story's
|
|
33
|
+
* modified files and the prior stories' modified files.
|
|
34
|
+
*
|
|
35
|
+
* Uses `context._crossStoryConflictingFiles` as a direct override when
|
|
36
|
+
* supplied (test-hook / runtime-probe path). Otherwise computes the
|
|
37
|
+
* intersection of `devStoryResult.files_modified` ∩ `priorStoryFiles`.
|
|
38
|
+
*/
|
|
39
|
+
export declare function computeCollisionPaths(context: VerificationContext): string[];
|
|
40
|
+
/**
|
|
41
|
+
* Parse a unified diff text for type signature changes or constant reassignments.
|
|
42
|
+
*
|
|
43
|
+
* Returns `true` when the diff contains any added or removed export
|
|
44
|
+
* interface/type declaration OR any added/removed constant assignment —
|
|
45
|
+
* indicating a potential interface-level change that concurrent story authors
|
|
46
|
+
* should review.
|
|
47
|
+
*/
|
|
48
|
+
export declare function diffContainsInterfaceOrConstChange(diffText: string): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Standalone function implementing the cross-story consistency check logic.
|
|
51
|
+
* Exported separately so tests can call it directly without instantiating the class.
|
|
52
|
+
*/
|
|
53
|
+
export declare function runCrossStoryConsistencyCheck(context: VerificationContext): Promise<VerificationResult>;
|
|
54
|
+
/**
|
|
55
|
+
* VerificationCheck class for cross-story consistency analysis.
|
|
56
|
+
*
|
|
57
|
+
* name = 'cross-story-consistency'
|
|
58
|
+
* tier = 'B' (requires cross-story context; skipped for single-story runs)
|
|
59
|
+
*/
|
|
60
|
+
export declare class CrossStoryConsistencyCheck implements VerificationCheck {
|
|
61
|
+
readonly name = "cross-story-consistency";
|
|
62
|
+
readonly tier: "B";
|
|
63
|
+
run(context: VerificationContext): Promise<VerificationResult>;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=cross-story-consistency-check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cross-story-consistency-check.d.ts","sourceRoot":"","sources":["../../../src/verification/checks/cross-story-consistency-check.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAOH,OAAO,KAAK,EACV,iBAAiB,EACjB,mBAAmB,EAEnB,kBAAkB,EACnB,MAAM,aAAa,CAAA;AAuBpB;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,EAAE,CAkB5E;AAMD;;;;;;;GAOG;AACH,wBAAgB,kCAAkC,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAO5E;AAqDD;;;GAGG;AACH,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,CAkG7B;AAMD;;;;;GAKG;AACH,qBAAa,0BAA2B,YAAW,iBAAiB;IAClE,QAAQ,CAAC,IAAI,6BAA4B;IACzC,QAAQ,CAAC,IAAI,EAAG,GAAG,CAAS;IAEtB,GAAG,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAGrE"}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CrossStoryConsistencyCheck — Story 68-1.
|
|
3
|
+
*
|
|
4
|
+
* Tier B cross-story verification check that detects when concurrent stories
|
|
5
|
+
* modify overlapping file sets, and validates that their interface signatures
|
|
6
|
+
* do not conflict.
|
|
7
|
+
*
|
|
8
|
+
* Motivating incidents:
|
|
9
|
+
* - Epic 66 run a832487a: 66-1+66-2+66-7 concurrent dispatch — concurrent
|
|
10
|
+
* stories modifying shared test files caused transient verification failures
|
|
11
|
+
* when the earlier-committing story's changes affected the later story's
|
|
12
|
+
* verification gate.
|
|
13
|
+
* - Epic 67 run a59e4c96: 67-1+67-2 concurrent dispatch —
|
|
14
|
+
* methodology-pack.test.ts BUDGET_LIMIT constant (30000 vs 32000) was updated
|
|
15
|
+
* by story 67-1 AFTER 67-2's verification ran on the un-bumped tree, causing
|
|
16
|
+
* a false pipeline failure verdict despite fully coherent on-disk state.
|
|
17
|
+
*
|
|
18
|
+
* Two detection layers:
|
|
19
|
+
* Layer 1 — path intersection: detect shared file paths between the current
|
|
20
|
+
* story's modified files and priorStoryFiles (other concurrent stories).
|
|
21
|
+
* Runs unconditionally when Tier B context is present.
|
|
22
|
+
* Layer 2 — diff validation: only runs when buildCheckPassed !== false and
|
|
23
|
+
* Layer 1 found at least one collision path. Parses git diff output for
|
|
24
|
+
* type signature changes (export interface/type) and constant reassignments
|
|
25
|
+
* in the collision file set.
|
|
26
|
+
*
|
|
27
|
+
* Per Story 60-4/60-10 convention: motivating incident citations appear in this
|
|
28
|
+
* header comment rather than inline in the check logic.
|
|
29
|
+
*/
|
|
30
|
+
import { execSync } from 'child_process';
|
|
31
|
+
import { CATEGORY_CROSS_STORY_CONCURRENT_MODIFICATION, renderFindings, } from '../findings.js';
|
|
32
|
+
// ---------------------------------------------------------------------------
|
|
33
|
+
// Layer 2 diff patterns
|
|
34
|
+
// ---------------------------------------------------------------------------
|
|
35
|
+
/**
|
|
36
|
+
* Matches added/removed export interface or type declarations.
|
|
37
|
+
* Example: `+export interface Foo {` or `-export type Bar =`
|
|
38
|
+
*/
|
|
39
|
+
const INTERFACE_CHANGE_PATTERN = /^[+-]\s*(export\s+(?:interface|type)\s+\w+)/;
|
|
40
|
+
/**
|
|
41
|
+
* Matches added/removed constant assignments.
|
|
42
|
+
* Example: `+const BUDGET_LIMIT = 32000` or `-const BUDGET_LIMIT = 30000`
|
|
43
|
+
* Also matches `export const`, `let`, `var`.
|
|
44
|
+
*/
|
|
45
|
+
const CONST_CHANGE_PATTERN = /^[+-]\s*(?:export\s+)?(?:const|let|var)\s+\w+\s*=/;
|
|
46
|
+
// ---------------------------------------------------------------------------
|
|
47
|
+
// Layer 1: collision path computation
|
|
48
|
+
// ---------------------------------------------------------------------------
|
|
49
|
+
/**
|
|
50
|
+
* Compute the set of file paths that collide between the current story's
|
|
51
|
+
* modified files and the prior stories' modified files.
|
|
52
|
+
*
|
|
53
|
+
* Uses `context._crossStoryConflictingFiles` as a direct override when
|
|
54
|
+
* supplied (test-hook / runtime-probe path). Otherwise computes the
|
|
55
|
+
* intersection of `devStoryResult.files_modified` ∩ `priorStoryFiles`.
|
|
56
|
+
*/
|
|
57
|
+
export function computeCollisionPaths(context) {
|
|
58
|
+
// Test-hook override: use provided collision paths directly
|
|
59
|
+
if (context._crossStoryConflictingFiles !== undefined &&
|
|
60
|
+
context._crossStoryConflictingFiles.length > 0) {
|
|
61
|
+
return context._crossStoryConflictingFiles;
|
|
62
|
+
}
|
|
63
|
+
const currentFiles = context.devStoryResult?.files_modified ?? [];
|
|
64
|
+
const priorFiles = context.priorStoryFiles ?? [];
|
|
65
|
+
if (currentFiles.length === 0 || priorFiles.length === 0) {
|
|
66
|
+
return [];
|
|
67
|
+
}
|
|
68
|
+
const priorSet = new Set(priorFiles);
|
|
69
|
+
return currentFiles.filter((f) => priorSet.has(f));
|
|
70
|
+
}
|
|
71
|
+
// ---------------------------------------------------------------------------
|
|
72
|
+
// Layer 2: diff validation
|
|
73
|
+
// ---------------------------------------------------------------------------
|
|
74
|
+
/**
|
|
75
|
+
* Parse a unified diff text for type signature changes or constant reassignments.
|
|
76
|
+
*
|
|
77
|
+
* Returns `true` when the diff contains any added or removed export
|
|
78
|
+
* interface/type declaration OR any added/removed constant assignment —
|
|
79
|
+
* indicating a potential interface-level change that concurrent story authors
|
|
80
|
+
* should review.
|
|
81
|
+
*/
|
|
82
|
+
export function diffContainsInterfaceOrConstChange(diffText) {
|
|
83
|
+
const lines = diffText.split('\n');
|
|
84
|
+
for (const line of lines) {
|
|
85
|
+
if (INTERFACE_CHANGE_PATTERN.test(line))
|
|
86
|
+
return true;
|
|
87
|
+
if (CONST_CHANGE_PATTERN.test(line))
|
|
88
|
+
return true;
|
|
89
|
+
}
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Run `git diff --no-renames <commitSha>^...<commitSha> -- <file>` to get
|
|
94
|
+
* the per-file diff for the story's commit.
|
|
95
|
+
*
|
|
96
|
+
* Returns `null` when git is unavailable or the file wasn't part of the commit.
|
|
97
|
+
*/
|
|
98
|
+
function getDiffForFile(workingDir, commitSha, filePath) {
|
|
99
|
+
try {
|
|
100
|
+
return execSync(`git diff --no-renames ${commitSha}~1 ${commitSha} -- ${filePath}`, {
|
|
101
|
+
cwd: workingDir,
|
|
102
|
+
encoding: 'utf-8',
|
|
103
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Get numstat diff for a story commit to confirm a file was modified.
|
|
112
|
+
* Returns lines like: `5\t3\tsrc/foo.ts`
|
|
113
|
+
*/
|
|
114
|
+
function getNumstatDiff(workingDir, commitSha) {
|
|
115
|
+
try {
|
|
116
|
+
return execSync(`git diff --no-renames --numstat ${commitSha}~1 ${commitSha}`, {
|
|
117
|
+
cwd: workingDir,
|
|
118
|
+
encoding: 'utf-8',
|
|
119
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
// ---------------------------------------------------------------------------
|
|
127
|
+
// Standalone function
|
|
128
|
+
// ---------------------------------------------------------------------------
|
|
129
|
+
/**
|
|
130
|
+
* Standalone function implementing the cross-story consistency check logic.
|
|
131
|
+
* Exported separately so tests can call it directly without instantiating the class.
|
|
132
|
+
*/
|
|
133
|
+
export async function runCrossStoryConsistencyCheck(context) {
|
|
134
|
+
const start = Date.now();
|
|
135
|
+
const findings = [];
|
|
136
|
+
// --- Early exit: no Tier B context ---
|
|
137
|
+
// If priorStoryFiles is absent AND no test-hook override, this is a
|
|
138
|
+
// single-story run. Return pass immediately without any analysis.
|
|
139
|
+
if ((context.priorStoryFiles === undefined || context.priorStoryFiles.length === 0) &&
|
|
140
|
+
(context._crossStoryConflictingFiles === undefined ||
|
|
141
|
+
context._crossStoryConflictingFiles.length === 0)) {
|
|
142
|
+
return {
|
|
143
|
+
status: 'pass',
|
|
144
|
+
details: 'cross-story-consistency: no Tier B context (priorStoryFiles absent) — skipping check',
|
|
145
|
+
duration_ms: Date.now() - start,
|
|
146
|
+
findings: [],
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
// --- Layer 1: path intersection ---
|
|
150
|
+
const collisionPaths = computeCollisionPaths(context);
|
|
151
|
+
if (collisionPaths.length > 0) {
|
|
152
|
+
findings.push({
|
|
153
|
+
category: 'cross-story-file-collision',
|
|
154
|
+
severity: 'warn',
|
|
155
|
+
message: `Layer 1 collision: story "${context.storyKey}" shares ${collisionPaths.length} file(s) ` +
|
|
156
|
+
`with concurrent stories: ${collisionPaths.join(', ')}. ` +
|
|
157
|
+
`Recommended action: serialize these stories to avoid race conditions. ` +
|
|
158
|
+
`Motivating incidents: Epic 66 (a832487a), Epic 67 (a59e4c96).`,
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
// --- Layer 2: diff validation (gated behind buildCheckPassed) ---
|
|
162
|
+
// Only run when build passed AND there are collision paths to analyze.
|
|
163
|
+
// If buildCheckPassed is absent/undefined, treat as true (fail-open).
|
|
164
|
+
const shouldRunLayer2 = context.buildCheckPassed !== false && collisionPaths.length > 0;
|
|
165
|
+
if (shouldRunLayer2) {
|
|
166
|
+
const numstat = getNumstatDiff(context.workingDir, context.commitSha);
|
|
167
|
+
// Parse binary file names from numstat (appear as "-\t-\t<file>")
|
|
168
|
+
const binaryFiles = new Set();
|
|
169
|
+
if (numstat !== null) {
|
|
170
|
+
for (const line of numstat.split('\n')) {
|
|
171
|
+
const binMatch = /^-\t-\t(.+)$/.exec(line.trim());
|
|
172
|
+
if (binMatch?.[1])
|
|
173
|
+
binaryFiles.add(binMatch[1]);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
for (const filePath of collisionPaths) {
|
|
177
|
+
// Skip binary files
|
|
178
|
+
if (binaryFiles.has(filePath))
|
|
179
|
+
continue;
|
|
180
|
+
// Normalize path for git (always use forward slashes)
|
|
181
|
+
const normalizedPath = filePath.replace(/\\/g, '/');
|
|
182
|
+
const diffText = getDiffForFile(context.workingDir, context.commitSha, normalizedPath);
|
|
183
|
+
if (diffText === null)
|
|
184
|
+
continue;
|
|
185
|
+
if (diffContainsInterfaceOrConstChange(diffText)) {
|
|
186
|
+
findings.push({
|
|
187
|
+
category: CATEGORY_CROSS_STORY_CONCURRENT_MODIFICATION,
|
|
188
|
+
severity: 'warn',
|
|
189
|
+
message: `Layer 2 interface/constant change in shared file "${filePath}": ` +
|
|
190
|
+
`this story's commit modified export signatures or constants that may ` +
|
|
191
|
+
`conflict with concurrent story changes. Manual review recommended. ` +
|
|
192
|
+
`(Epic 66/67 reconciliation pattern: verify working-tree coherence via ` +
|
|
193
|
+
`build + tests before treating pipeline outcome as definitive.)`,
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
// --- Derive status ---
|
|
199
|
+
const status = findings.some((f) => f.severity === 'error')
|
|
200
|
+
? 'fail'
|
|
201
|
+
: findings.some((f) => f.severity === 'warn')
|
|
202
|
+
? 'warn'
|
|
203
|
+
: 'pass';
|
|
204
|
+
return {
|
|
205
|
+
status,
|
|
206
|
+
details: findings.length > 0
|
|
207
|
+
? renderFindings(findings)
|
|
208
|
+
: 'cross-story-consistency: no file collisions detected between concurrent stories',
|
|
209
|
+
duration_ms: Date.now() - start,
|
|
210
|
+
findings,
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
// ---------------------------------------------------------------------------
|
|
214
|
+
// Check class
|
|
215
|
+
// ---------------------------------------------------------------------------
|
|
216
|
+
/**
|
|
217
|
+
* VerificationCheck class for cross-story consistency analysis.
|
|
218
|
+
*
|
|
219
|
+
* name = 'cross-story-consistency'
|
|
220
|
+
* tier = 'B' (requires cross-story context; skipped for single-story runs)
|
|
221
|
+
*/
|
|
222
|
+
export class CrossStoryConsistencyCheck {
|
|
223
|
+
name = 'cross-story-consistency';
|
|
224
|
+
tier = 'B';
|
|
225
|
+
async run(context) {
|
|
226
|
+
return runCrossStoryConsistencyCheck(context);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
//# sourceMappingURL=cross-story-consistency-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cross-story-consistency-check.js","sourceRoot":"","sources":["../../../src/verification/checks/cross-story-consistency-check.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,4 +16,5 @@ export { BuildCheck, BUILD_CHECK_TIMEOUT_MS, detectBuildCommand } from './build-
|
|
|
16
16
|
export { RuntimeProbeCheck } from './runtime-probe-check.js';
|
|
17
17
|
export type { RuntimeProbeExecutors } from './runtime-probe-check.js';
|
|
18
18
|
export { SourceAcShelloutCheck, runShelloutCheck, scanFile, isCommentLine, isInStringLiteralContext, } from './source-ac-shellout-check.js';
|
|
19
|
+
export { CrossStoryConsistencyCheck, runCrossStoryConsistencyCheck, computeCollisionPaths, diffContainsInterfaceOrConstChange, } from './cross-story-consistency-check.js';
|
|
19
20
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/verification/checks/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,kBAAkB,EAAE,gCAAgC,EAAE,MAAM,2BAA2B,CAAA;AAChG,OAAO,EAAE,+BAA+B,EAAE,4BAA4B,EAAE,MAAM,yCAAyC,CAAA;AACvH,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACzF,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,YAAY,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AACrE,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,QAAQ,EACR,aAAa,EACb,wBAAwB,GACzB,MAAM,+BAA+B,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/verification/checks/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,kBAAkB,EAAE,gCAAgC,EAAE,MAAM,2BAA2B,CAAA;AAChG,OAAO,EAAE,+BAA+B,EAAE,4BAA4B,EAAE,MAAM,yCAAyC,CAAA;AACvH,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACzF,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,YAAY,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AACrE,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,QAAQ,EACR,aAAa,EACb,wBAAwB,GACzB,MAAM,+BAA+B,CAAA;AACtC,OAAO,EACL,0BAA0B,EAC1B,6BAA6B,EAC7B,qBAAqB,EACrB,kCAAkC,GACnC,MAAM,oCAAoC,CAAA"}
|
|
@@ -15,4 +15,5 @@ export { AcceptanceCriteriaEvidenceCheck, extractAcceptanceCriteriaIds } from '.
|
|
|
15
15
|
export { BuildCheck, BUILD_CHECK_TIMEOUT_MS, detectBuildCommand } from './build-check.js';
|
|
16
16
|
export { RuntimeProbeCheck } from './runtime-probe-check.js';
|
|
17
17
|
export { SourceAcShelloutCheck, runShelloutCheck, scanFile, isCommentLine, isInStringLiteralContext, } from './source-ac-shellout-check.js';
|
|
18
|
+
export { CrossStoryConsistencyCheck, runCrossStoryConsistencyCheck, computeCollisionPaths, diffContainsInterfaceOrConstChange, } from './cross-story-consistency-check.js';
|
|
18
19
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/verification/checks/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,kBAAkB,EAAE,gCAAgC,EAAE,MAAM,2BAA2B,CAAA;AAChG,OAAO,EAAE,+BAA+B,EAAE,4BAA4B,EAAE,MAAM,yCAAyC,CAAA;AACvH,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACzF,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAE5D,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,QAAQ,EACR,aAAa,EACb,wBAAwB,GACzB,MAAM,+BAA+B,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/verification/checks/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,kBAAkB,EAAE,gCAAgC,EAAE,MAAM,2BAA2B,CAAA;AAChG,OAAO,EAAE,+BAA+B,EAAE,4BAA4B,EAAE,MAAM,yCAAyC,CAAA;AACvH,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACzF,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAE5D,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,QAAQ,EACR,aAAa,EACb,wBAAwB,GACzB,MAAM,+BAA+B,CAAA;AACtC,OAAO,EACL,0BAA0B,EAC1B,6BAA6B,EAC7B,qBAAqB,EACrB,kCAAkC,GACnC,MAAM,oCAAoC,CAAA"}
|
|
@@ -75,6 +75,22 @@ export interface VerificationFinding {
|
|
|
75
75
|
* a dependency-confusion attack vector.
|
|
76
76
|
*/
|
|
77
77
|
export declare const CATEGORY_SHELLOUT_NPX_FALLBACK: "source-ac-shellout-npx-fallback";
|
|
78
|
+
/**
|
|
79
|
+
* cross-story-concurrent-modification — Story 68-1, Epic 66/67 cross-story-interaction fix.
|
|
80
|
+
*
|
|
81
|
+
* Severity: warn (defensive rollout per Story 60-16 pattern). Emitted by
|
|
82
|
+
* CrossStoryConsistencyCheck (Layer 2) when post-completion analysis shows two
|
|
83
|
+
* concurrent stories modified the same file AND interface signatures differ
|
|
84
|
+
* between their commits.
|
|
85
|
+
*
|
|
86
|
+
* Motivating incidents: Epic 66 run a832487a (66-1+66-2+66-7 concurrent dispatch)
|
|
87
|
+
* + Epic 67 run a59e4c96 (67-1+67-2 methodology-pack.test.ts budget constant race).
|
|
88
|
+
*
|
|
89
|
+
* NOTE: Promotion to 'error' is deferred pending empirical low-false-positive
|
|
90
|
+
* validation across multiple substrate-on-substrate dispatch runs. Do NOT change
|
|
91
|
+
* severity to 'error' until at least 3 consecutive runs with zero false positives.
|
|
92
|
+
*/
|
|
93
|
+
export declare const CATEGORY_CROSS_STORY_CONCURRENT_MODIFICATION: "cross-story-concurrent-modification";
|
|
78
94
|
/**
|
|
79
95
|
* Render a list of findings into the multi-line human-readable string that
|
|
80
96
|
* populates VerificationResult.details. One line per finding:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"findings.d.ts","sourceRoot":"","sources":["../../src/verification/findings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAMH;;;;;;;;GAQG;AACH,MAAM,MAAM,2BAA2B,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAA;AAEnE;;;;;;;GAOG;AACH,MAAM,WAAW,mBAAmB;IAClC,+DAA+D;IAC/D,QAAQ,EAAE,MAAM,CAAA;IAChB,gEAAgE;IAChE,QAAQ,EAAE,2BAA2B,CAAA;IACrC,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAA;IACf,qGAAqG;IACrG,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,yDAAyD;IACzD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;;;;;;;OAQG;IACH,WAAW,CAAC,EAAE,cAAc,GAAG,0BAA0B,CAAA;IACzD;;;;;OAKG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAA;CACjC;AAgBD;;;;;;;;GAQG;AACH,eAAO,MAAM,8BAA8B,EACzC,iCAA0C,CAAA;
|
|
1
|
+
{"version":3,"file":"findings.d.ts","sourceRoot":"","sources":["../../src/verification/findings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAMH;;;;;;;;GAQG;AACH,MAAM,MAAM,2BAA2B,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAA;AAEnE;;;;;;;GAOG;AACH,MAAM,WAAW,mBAAmB;IAClC,+DAA+D;IAC/D,QAAQ,EAAE,MAAM,CAAA;IAChB,gEAAgE;IAChE,QAAQ,EAAE,2BAA2B,CAAA;IACrC,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAA;IACf,qGAAqG;IACrG,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,yDAAyD;IACzD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;;;;;;;OAQG;IACH,WAAW,CAAC,EAAE,cAAc,GAAG,0BAA0B,CAAA;IACzD;;;;;OAKG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAA;CACjC;AAgBD;;;;;;;;GAQG;AACH,eAAO,MAAM,8BAA8B,EACzC,iCAA0C,CAAA;AAE5C;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,4CAA4C,EACvD,qCAA8C,CAAA;AAMhD;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,mBAAmB,EAAE,GAAG,MAAM,CAKtE"}
|
|
@@ -33,6 +33,22 @@ const SEVERITY_PREFIX = {
|
|
|
33
33
|
* a dependency-confusion attack vector.
|
|
34
34
|
*/
|
|
35
35
|
export const CATEGORY_SHELLOUT_NPX_FALLBACK = 'source-ac-shellout-npx-fallback';
|
|
36
|
+
/**
|
|
37
|
+
* cross-story-concurrent-modification — Story 68-1, Epic 66/67 cross-story-interaction fix.
|
|
38
|
+
*
|
|
39
|
+
* Severity: warn (defensive rollout per Story 60-16 pattern). Emitted by
|
|
40
|
+
* CrossStoryConsistencyCheck (Layer 2) when post-completion analysis shows two
|
|
41
|
+
* concurrent stories modified the same file AND interface signatures differ
|
|
42
|
+
* between their commits.
|
|
43
|
+
*
|
|
44
|
+
* Motivating incidents: Epic 66 run a832487a (66-1+66-2+66-7 concurrent dispatch)
|
|
45
|
+
* + Epic 67 run a59e4c96 (67-1+67-2 methodology-pack.test.ts budget constant race).
|
|
46
|
+
*
|
|
47
|
+
* NOTE: Promotion to 'error' is deferred pending empirical low-false-positive
|
|
48
|
+
* validation across multiple substrate-on-substrate dispatch runs. Do NOT change
|
|
49
|
+
* severity to 'error' until at least 3 consecutive runs with zero false positives.
|
|
50
|
+
*/
|
|
51
|
+
export const CATEGORY_CROSS_STORY_CONCURRENT_MODIFICATION = 'cross-story-concurrent-modification';
|
|
36
52
|
// ---------------------------------------------------------------------------
|
|
37
53
|
// Rendering
|
|
38
54
|
// ---------------------------------------------------------------------------
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"findings.js","sourceRoot":"","sources":["../../src/verification/findings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AA6DH,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,MAAM,eAAe,GAAgD;IACnE,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;CACb,CAAA;AAED,8EAA8E;AAC9E,qEAAqE;AACrE,8EAA8E;AAE9E;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,8BAA8B,GACzC,iCAA0C,CAAA;AAE5C,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAAC,QAA+B;IAC5D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IACpC,OAAO,QAAQ;SACZ,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;SACzE,IAAI,CAAC,IAAI,CAAC,CAAA;AACf,CAAC"}
|
|
1
|
+
{"version":3,"file":"findings.js","sourceRoot":"","sources":["../../src/verification/findings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AA6DH,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,MAAM,eAAe,GAAgD;IACnE,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;CACb,CAAA;AAED,8EAA8E;AAC9E,qEAAqE;AACrE,8EAA8E;AAE9E;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,8BAA8B,GACzC,iCAA0C,CAAA;AAE5C;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,4CAA4C,GACvD,qCAA8C,CAAA;AAEhD,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAAC,QAA+B;IAC5D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IACpC,OAAO,QAAQ;SACZ,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;SACzE,IAAI,CAAC,IAAI,CAAC,CAAA;AACf,CAAC"}
|
|
@@ -18,4 +18,8 @@ export { TrivialOutputCheck, DEFAULT_TRIVIAL_OUTPUT_THRESHOLD } from './checks/i
|
|
|
18
18
|
export { AcceptanceCriteriaEvidenceCheck, extractAcceptanceCriteriaIds } from './checks/index.js';
|
|
19
19
|
export { BuildCheck, BUILD_CHECK_TIMEOUT_MS, detectBuildCommand } from './checks/index.js';
|
|
20
20
|
export { SourceAcFidelityCheck } from './source-ac-fidelity-check.js';
|
|
21
|
+
export { SourceAcShelloutCheck, runShelloutCheck } from './checks/index.js';
|
|
22
|
+
export { CATEGORY_SHELLOUT_NPX_FALLBACK } from './findings.js';
|
|
23
|
+
export { CrossStoryConsistencyCheck, runCrossStoryConsistencyCheck, } from './checks/index.js';
|
|
24
|
+
export { CATEGORY_CROSS_STORY_CONCURRENT_MODIFICATION } from './findings.js';
|
|
21
25
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/verification/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,oBAAoB,EAAE,iCAAiC,EAAE,MAAM,4BAA4B,CAAA;AACpG,YAAY,EACV,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EACvB,mBAAmB,EACnB,aAAa,EACb,eAAe,EACf,mBAAmB,EACnB,2BAA2B,GAC5B,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAG9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,YAAY,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAA;AAE5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAA;AAEtE,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAA;AAC3E,OAAO,EACL,wBAAwB,EACxB,gBAAgB,EAChB,sBAAsB,EACtB,yBAAyB,EACzB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,mBAAmB,CAAA;AAC1B,YAAY,EACV,kBAAkB,EAClB,WAAW,EACX,YAAY,EACZ,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,kBAAkB,EAAE,gCAAgC,EAAE,MAAM,mBAAmB,CAAA;AACxF,OAAO,EAAE,+BAA+B,EAAE,4BAA4B,EAAE,MAAM,mBAAmB,CAAA;AACjG,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAE1F,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/verification/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,oBAAoB,EAAE,iCAAiC,EAAE,MAAM,4BAA4B,CAAA;AACpG,YAAY,EACV,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EACvB,mBAAmB,EACnB,aAAa,EACb,eAAe,EACf,mBAAmB,EACnB,2BAA2B,GAC5B,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAG9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,YAAY,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAA;AAE5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAA;AAEtE,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAA;AAC3E,OAAO,EACL,wBAAwB,EACxB,gBAAgB,EAChB,sBAAsB,EACtB,yBAAyB,EACzB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,mBAAmB,CAAA;AAC1B,YAAY,EACV,kBAAkB,EAClB,WAAW,EACX,YAAY,EACZ,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,kBAAkB,EAAE,gCAAgC,EAAE,MAAM,mBAAmB,CAAA;AACxF,OAAO,EAAE,+BAA+B,EAAE,4BAA4B,EAAE,MAAM,mBAAmB,CAAA;AACjG,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAE1F,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAA;AAErE,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAC3E,OAAO,EAAE,8BAA8B,EAAE,MAAM,eAAe,CAAA;AAE9D,OAAO,EACL,0BAA0B,EAC1B,6BAA6B,GAC9B,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,4CAA4C,EAAE,MAAM,eAAe,CAAA"}
|
|
@@ -20,4 +20,10 @@ export { AcceptanceCriteriaEvidenceCheck, extractAcceptanceCriteriaIds } from '.
|
|
|
20
20
|
export { BuildCheck, BUILD_CHECK_TIMEOUT_MS, detectBuildCommand } from './checks/index.js';
|
|
21
21
|
// Story 58-2: source AC fidelity check
|
|
22
22
|
export { SourceAcFidelityCheck } from './source-ac-fidelity-check.js';
|
|
23
|
+
// Story 67-3: bare npx fallback static-analysis gate
|
|
24
|
+
export { SourceAcShelloutCheck, runShelloutCheck } from './checks/index.js';
|
|
25
|
+
export { CATEGORY_SHELLOUT_NPX_FALLBACK } from './findings.js';
|
|
26
|
+
// Story 68-1: cross-story consistency check + finding category
|
|
27
|
+
export { CrossStoryConsistencyCheck, runCrossStoryConsistencyCheck, } from './checks/index.js';
|
|
28
|
+
export { CATEGORY_CROSS_STORY_CONCURRENT_MODIFICATION } from './findings.js';
|
|
23
29
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/verification/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,oBAAoB,EAAE,iCAAiC,EAAE,MAAM,4BAA4B,CAAA;AAYpG,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAE9C,2CAA2C;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAEnE,0DAA0D;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAA;AACtE,iFAAiF;AACjF,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAA;AAC3E,OAAO,EACL,wBAAwB,EACxB,gBAAgB,EAChB,sBAAsB,EACtB,yBAAyB,EACzB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,mBAAmB,CAAA;AAQ1B,+CAA+C;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,kBAAkB,EAAE,gCAAgC,EAAE,MAAM,mBAAmB,CAAA;AACxF,OAAO,EAAE,+BAA+B,EAAE,4BAA4B,EAAE,MAAM,mBAAmB,CAAA;AACjG,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC1F,uCAAuC;AACvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/verification/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,oBAAoB,EAAE,iCAAiC,EAAE,MAAM,4BAA4B,CAAA;AAYpG,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAE9C,2CAA2C;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAEnE,0DAA0D;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAA;AACtE,iFAAiF;AACjF,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAA;AAC3E,OAAO,EACL,wBAAwB,EACxB,gBAAgB,EAChB,sBAAsB,EACtB,yBAAyB,EACzB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,mBAAmB,CAAA;AAQ1B,+CAA+C;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,kBAAkB,EAAE,gCAAgC,EAAE,MAAM,mBAAmB,CAAA;AACxF,OAAO,EAAE,+BAA+B,EAAE,4BAA4B,EAAE,MAAM,mBAAmB,CAAA;AACjG,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC1F,uCAAuC;AACvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAA;AACrE,qDAAqD;AACrD,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAC3E,OAAO,EAAE,8BAA8B,EAAE,MAAM,eAAe,CAAA;AAC9D,+DAA+D;AAC/D,OAAO,EACL,0BAA0B,EAC1B,6BAA6B,GAC9B,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,4CAA4C,EAAE,MAAM,eAAe,CAAA"}
|
|
@@ -109,6 +109,28 @@ export interface VerificationContext {
|
|
|
109
109
|
* passes (non-fatal for projects that don't use the planning-artifacts layout).
|
|
110
110
|
*/
|
|
111
111
|
sourceEpicContent?: string;
|
|
112
|
+
/**
|
|
113
|
+
* Signal indicating whether the BuildCheck (Tier A) passed for this story.
|
|
114
|
+
*
|
|
115
|
+
* Used by CrossStoryConsistencyCheck (Story 68-1) to gate Layer 2 diff validation:
|
|
116
|
+
* if the build did not pass, Layer 2 is skipped to avoid false positives from
|
|
117
|
+
* broken code changes that may never ship.
|
|
118
|
+
*
|
|
119
|
+
* Absent/undefined → treated as `true` (fail-open, so existing single-story
|
|
120
|
+
* runs without this field populated are unaffected).
|
|
121
|
+
*/
|
|
122
|
+
buildCheckPassed?: boolean;
|
|
123
|
+
/**
|
|
124
|
+
* Pre-computed set of file paths that collide between concurrent stories.
|
|
125
|
+
*
|
|
126
|
+
* Story 68-1 test hook: when set, CrossStoryConsistencyCheck uses this list
|
|
127
|
+
* directly as the Layer 1 collision result instead of computing the intersection
|
|
128
|
+
* from devStoryResult.files_modified ∩ priorStoryFiles.
|
|
129
|
+
*
|
|
130
|
+
* Not populated in production — used only by tests and runtime probes to
|
|
131
|
+
* drive detection without requiring real concurrent-story context.
|
|
132
|
+
*/
|
|
133
|
+
_crossStoryConflictingFiles?: string[];
|
|
112
134
|
}
|
|
113
135
|
/**
|
|
114
136
|
* Result returned by a single VerificationCheck.run() invocation.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/verification/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AAGxD,YAAY,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,MAAM,eAAe,CAAA;AAMrF;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,6GAA6G;IAC7G,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,mFAAmF;IACnF,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,+EAA+E;IAC/E,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAMD;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,uEAAuE;IACvE,MAAM,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAA;IACtC,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,kEAAkE;IAClE,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,oEAAoE;IACpE,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,yDAAyD;IACzD,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;CACjC;AAMD;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC,8CAA8C;IAC9C,QAAQ,EAAE,MAAM,CAAA;IAChB,sDAAsD;IACtD,UAAU,EAAE,MAAM,CAAA;IAClB,2DAA2D;IAC3D,SAAS,EAAE,MAAM,CAAA;IACjB,8DAA8D;IAC9D,OAAO,EAAE,MAAM,CAAA;IACf,sEAAsE;IACtE,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;IAC1B;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,aAAa,CAAA;IAC5B;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,eAAe,CAAA;IAChC;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;;;;;;OAOG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/verification/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AAGxD,YAAY,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,MAAM,eAAe,CAAA;AAMrF;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,6GAA6G;IAC7G,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,mFAAmF;IACnF,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,+EAA+E;IAC/E,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAMD;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,uEAAuE;IACvE,MAAM,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAA;IACtC,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,kEAAkE;IAClE,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,oEAAoE;IACpE,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,yDAAyD;IACzD,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;CACjC;AAMD;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC,8CAA8C;IAC9C,QAAQ,EAAE,MAAM,CAAA;IAChB,sDAAsD;IACtD,UAAU,EAAE,MAAM,CAAA;IAClB,2DAA2D;IAC3D,SAAS,EAAE,MAAM,CAAA;IACjB,8DAA8D;IAC9D,OAAO,EAAE,MAAM,CAAA;IACf,sEAAsE;IACtE,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;IAC1B;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,aAAa,CAAA;IAC5B;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,eAAe,CAAA;IAChC;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;;;;;;OAOG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B;;;;;;;;;OASG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B;;;;;;;;;OASG;IACH,2BAA2B,CAAC,EAAE,MAAM,EAAE,CAAA;CACvC;AAMD;;;;;;;;GAQG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;IAChC,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;IACnB;wDACoD;IACpD,QAAQ,CAAC,EAAE,mBAAmB,EAAE,CAAA;CACjC;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAwB,SAAQ,kBAAkB;IACjE,SAAS,EAAE,MAAM,CAAA;CAClB;AAMD;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,uBAAuB,EAAE,CAAA;IACjC,gDAAgD;IAChD,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;IAChC,WAAW,EAAE,MAAM,CAAA;CACpB;AAMD;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,+EAA+E;IAC/E,IAAI,EAAE,MAAM,CAAA;IACZ,mFAAmF;IACnF,IAAI,EAAE,GAAG,GAAG,GAAG,CAAA;IACf;;;OAGG;IACH,GAAG,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAA;CAC/D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verification-pipeline.d.ts","sourceRoot":"","sources":["../../src/verification/verification-pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,KAAK,EACV,iBAAiB,EACjB,mBAAmB,EAEnB,mBAAmB,EACpB,MAAM,YAAY,CAAA;AAGnB,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAA;
|
|
1
|
+
{"version":3,"file":"verification-pipeline.d.ts","sourceRoot":"","sources":["../../src/verification/verification-pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,KAAK,EACV,iBAAiB,EACjB,mBAAmB,EAEnB,mBAAmB,EACpB,MAAM,YAAY,CAAA;AAGnB,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAA;AA+BhF;;;;;;GAMG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA2B;IAChD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;IAElD;;;OAGG;gBACS,GAAG,EAAE,aAAa,CAAC,UAAU,CAAC,EAAE,MAAM,GAAE,iBAAiB,EAAO;IAO5E;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI;IAIxC;;;;;;;;;;OAUG;IACG,GAAG,CAAC,OAAO,EAAE,mBAAmB,EAAE,IAAI,GAAE,GAAG,GAAG,GAAS,GAAG,OAAO,CAAC,mBAAmB,CAAC;CAqE7F;AAMD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,iCAAiC,CAC/C,GAAG,EAAE,aAAa,CAAC,UAAU,CAAC,EAC9B,MAAM,CAAC,EAAE,wBAAwB,GAChC,oBAAoB,CAYtB"}
|
|
@@ -17,6 +17,7 @@ import { BuildCheck } from './checks/build-check.js';
|
|
|
17
17
|
import { RuntimeProbeCheck } from './checks/runtime-probe-check.js';
|
|
18
18
|
import { SourceAcFidelityCheck } from './source-ac-fidelity-check.js';
|
|
19
19
|
import { SourceAcShelloutCheck } from './checks/source-ac-shellout-check.js';
|
|
20
|
+
import { CrossStoryConsistencyCheck } from './checks/cross-story-consistency-check.js';
|
|
20
21
|
// ---------------------------------------------------------------------------
|
|
21
22
|
// Helpers
|
|
22
23
|
// ---------------------------------------------------------------------------
|
|
@@ -167,6 +168,7 @@ export function createDefaultVerificationPipeline(bus, config) {
|
|
|
167
168
|
new RuntimeProbeCheck(), // Epic 55 Phase 2: runtime behavior verification
|
|
168
169
|
new SourceAcFidelityCheck(), // Story 58-2: source AC fidelity gate
|
|
169
170
|
new SourceAcShelloutCheck(), // Story 67-3: bare npx fallback static-analysis gate (obs_2026-05-03_023 fix #3)
|
|
171
|
+
new CrossStoryConsistencyCheck(), // Story 68-1: cross-story file collision + diff validation (Epic 66/67)
|
|
170
172
|
];
|
|
171
173
|
return new VerificationPipeline(bus, checks);
|
|
172
174
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verification-pipeline.js","sourceRoot":"","sources":["../../src/verification/verification-pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAUH,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAA;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAA;AAErE,OAAO,EAAE,+BAA+B,EAAE,MAAM,gDAAgD,CAAA;AAChG,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAA;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAA;
|
|
1
|
+
{"version":3,"file":"verification-pipeline.js","sourceRoot":"","sources":["../../src/verification/verification-pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAUH,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAA;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAA;AAErE,OAAO,EAAE,+BAA+B,EAAE,MAAM,gDAAgD,CAAA;AAChG,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAA;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAA;AAC5E,OAAO,EAAE,0BAA0B,EAAE,MAAM,2CAA2C,CAAA;AAEtF,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E;;;GAGG;AACH,SAAS,eAAe,CACtB,MAAiC;IAEjC,IAAI,MAAM,GAA6B,MAAM,CAAA;IAC7C,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM;YAAE,OAAO,MAAM,CAAA;QACtC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM;YAAE,MAAM,GAAG,MAAM,CAAA;IAC1C,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,8EAA8E;AAC9E,uBAAuB;AACvB,8EAA8E;AAE9E;;;;;;GAMG;AACH,MAAM,OAAO,oBAAoB;IACd,IAAI,CAA2B;IAC/B,OAAO,GAAwB,EAAE,CAAA;IAElD;;;OAGG;IACH,YAAY,GAA8B,EAAE,SAA8B,EAAE;QAC1E,IAAI,CAAC,IAAI,GAAG,GAAG,CAAA;QACf,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QACtB,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,QAAQ,CAAC,KAAwB;QAC/B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC1B,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,GAAG,CAAC,OAA4B,EAAE,OAAkB,GAAG;QAC3D,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA;QAC1D,MAAM,YAAY,GAA8B,EAAE,CAAA;QAElD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;YAC7B,IAAI,MAA+B,CAAA;YAEnC,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;gBAC1C,MAAM,GAAG;oBACP,SAAS,EAAE,KAAK,CAAC,IAAI;oBACrB,MAAM,EAAE,SAAS,CAAC,MAAM;oBACxB,OAAO,EAAE,SAAS,CAAC,OAAO;oBAC1B,WAAW,EAAE,SAAS,CAAC,WAAW;oBAClC,6DAA6D;oBAC7D,8DAA8D;oBAC9D,0DAA0D;oBAC1D,GAAG,CAAC,SAAS,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC9E,CAAA;YACH,CAAC;YAAC,OAAO,GAAY,EAAE,CAAC;gBACtB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,CAAA;gBACvC,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;gBAChE,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,kCAAkC,KAAK,CAAC,IAAI,mCAAmC,OAAO,IAAI,CAC3F,CAAA;gBACD,8DAA8D;gBAC9D,6DAA6D;gBAC7D,wDAAwD;gBACxD,MAAM,GAAG;oBACP,SAAS,EAAE,KAAK,CAAC,IAAI;oBACrB,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,OAAO;oBAChB,WAAW,EAAE,OAAO;oBACpB,QAAQ,EAAE;wBACR;4BACE,QAAQ,EAAE,iBAAiB;4BAC3B,QAAQ,EAAE,MAAM;4BAChB,OAAO;yBACR;qBACF;iBACF,CAAA;YACH,CAAC;YAED,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YAEzB,yDAAyD;YACzD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,6BAA6B,EAAE;gBAC5C,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,WAAW,EAAE,MAAM,CAAC,WAAW;aAChC,CAAC,CAAA;QACJ,CAAC;QAED,MAAM,OAAO,GAAwB;YACnC,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,MAAM,EAAE,YAAY;YACpB,MAAM,EAAE,eAAe,CAAC,YAAY,CAAC;YACrC,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,aAAa;SACxC,CAAA;QAED,0DAA0D;QAC1D,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,6BAA6B,EAAE,OAAO,CAAC,CAAA;QAEtD,OAAO,OAAO,CAAA;IAChB,CAAC;CACF;AAED,8EAA8E;AAC9E,2BAA2B;AAC3B,8EAA8E;AAE9E;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,iCAAiC,CAC/C,GAA8B,EAC9B,MAAiC;IAEjC,MAAM,MAAM,GAAwB;QAClC,IAAI,kBAAkB,EAAE;QACxB,IAAI,kBAAkB,CAAC,MAAM,CAAC;QAC9B,IAAI,+BAA+B,EAAE;QACrC,IAAI,UAAU,EAAE,EAAE,8DAA8D;QAChF,IAAI,iBAAiB,EAAE,EAAE,iDAAiD;QAC1E,IAAI,qBAAqB,EAAE,EAAE,sCAAsC;QACnE,IAAI,qBAAqB,EAAE,EAAE,iFAAiF;QAC9G,IAAI,0BAA0B,EAAE,EAAE,wEAAwE;KAC3G,CAAA;IACD,OAAO,IAAI,oBAAoB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;AAC9C,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@substrate-ai/sdlc",
|
|
3
|
-
"version": "0.20.
|
|
3
|
+
"version": "0.20.59",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"node": ">=22.0.0"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@substrate-ai/core": "0.20.
|
|
27
|
+
"@substrate-ai/core": "0.20.59",
|
|
28
28
|
"js-yaml": "^4.1.1",
|
|
29
29
|
"zod": "^4.3.6"
|
|
30
30
|
},
|