@substrate-ai/sdlc 0.20.27 → 0.20.29
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-probe-check.d.ts","sourceRoot":"","sources":["../../../src/verification/checks/runtime-probe-check.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EACV,iBAAiB,EACjB,mBAAmB,EAEnB,kBAAkB,EACnB,MAAM,aAAa,CAAA;AAEpB,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,YAAY,EAClB,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"runtime-probe-check.d.ts","sourceRoot":"","sources":["../../../src/verification/checks/runtime-probe-check.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EACV,iBAAiB,EACjB,mBAAmB,EAEnB,kBAAkB,EACnB,MAAM,aAAa,CAAA;AAEpB,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,YAAY,EAClB,MAAM,oBAAoB,CAAA;AAqG3B;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC,WAAW,CAAC,CAAA;IACnD;wEACoE;IACpE,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC,WAAW,CAAC,GAAG,SAAS,CAAA;CACjE;AAWD,qBAAa,iBAAkB,YAAW,iBAAiB;IACzD,QAAQ,CAAC,IAAI,oBAAmB;IAChC,QAAQ,CAAC,IAAI,EAAG,GAAG,CAAS;IAE5B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAuB;gBAEtC,SAAS,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC;IAOhD,GAAG,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC;CA0JrE"}
|
|
@@ -39,6 +39,81 @@ const CATEGORY_TIMEOUT = 'runtime-probe-timeout';
|
|
|
39
39
|
* from "tool errored loudly".
|
|
40
40
|
*/
|
|
41
41
|
const CATEGORY_ASSERTION_FAIL = 'runtime-probe-assertion-fail';
|
|
42
|
+
/**
|
|
43
|
+
* Story 60-11: source AC describes an event-driven mechanism (hook, timer,
|
|
44
|
+
* signal, webhook) but no probe's command invokes a known production-trigger
|
|
45
|
+
* pattern. Strata Run 13 (Story 1-12, 2026-04-26): vault conflict hook
|
|
46
|
+
* shipped SHIP_IT non-functional because the dev's probe ran the hook script
|
|
47
|
+
* directly with `bash .git/hooks/post-merge` — git only fires post-merge on
|
|
48
|
+
* a SUCCESSFUL merge, so under conflict (the hook's actual use case) the
|
|
49
|
+
* production trigger never fires. Direct-invocation probe missed it; only
|
|
50
|
+
* e2e smoke caught it. Sibling to obs_012's success-shape gap.
|
|
51
|
+
*
|
|
52
|
+
* Severity is warn (advisory, non-blocking) until the heuristic is
|
|
53
|
+
* calibrated against several runs. Flip to error once false-positive rate
|
|
54
|
+
* is verified low.
|
|
55
|
+
*/
|
|
56
|
+
const CATEGORY_MISSING_TRIGGER = 'runtime-probe-missing-production-trigger';
|
|
57
|
+
// ---------------------------------------------------------------------------
|
|
58
|
+
// Story 60-11: event-driven trigger heuristic
|
|
59
|
+
// ---------------------------------------------------------------------------
|
|
60
|
+
/**
|
|
61
|
+
* Source-AC keywords that signal an event-driven implementation. Word-boundary
|
|
62
|
+
* matched, case-insensitive. When any of these appears in source AC text AND
|
|
63
|
+
* no probe's command invokes a known production trigger, the check emits a
|
|
64
|
+
* `runtime-probe-missing-production-trigger` warn finding.
|
|
65
|
+
*
|
|
66
|
+
* Each keyword is paired with the trigger patterns that satisfy it:
|
|
67
|
+
* - `git hook` / `post-merge` / etc. → satisfied by `git merge|pull|push|commit|rebase`
|
|
68
|
+
* - `systemd` / `timer` / `unit` → satisfied by `systemctl ... start|enable|trigger`
|
|
69
|
+
* - `cron` / `crontab` / `schedule` → satisfied by `crontab|run-parts|schedule`
|
|
70
|
+
* - `signal` / `SIGHUP|SIGTERM|SIGUSR` → satisfied by `kill -<signal>`
|
|
71
|
+
* - `webhook` / `HTTP POST` / `endpoint` → satisfied by `curl ... -X POST` or wget
|
|
72
|
+
* - `inotify` / `path watch` → satisfied by `touch|mkdir|rm` (filesystem mutation)
|
|
73
|
+
*/
|
|
74
|
+
const EVENT_DRIVEN_KEYWORDS = [
|
|
75
|
+
/\b(?:git\s+hook|post-merge|post-commit|post-rewrite|pre-push|pre-commit|pre-merge-commit)\b/i,
|
|
76
|
+
/\b(?:systemd\s+(?:unit|service|timer|path)|systemctl|\.timer\b|\.service\b)\b/i,
|
|
77
|
+
/\b(?:cron\s*(?:job|tab|expression)?|crontab|scheduled\s+task)\b/i,
|
|
78
|
+
/\b(?:signal\s+handler|SIG(?:HUP|TERM|INT|USR1|USR2|KILL))\b/,
|
|
79
|
+
/\b(?:webhook|HTTP\s+(?:POST|GET)\s+endpoint|REST\s+endpoint)\b/i,
|
|
80
|
+
/\b(?:inotify|path\s+watch|file\s+watcher)\b/i,
|
|
81
|
+
];
|
|
82
|
+
/**
|
|
83
|
+
* Production-trigger command patterns. If ANY probe's command matches one of
|
|
84
|
+
* these, the heuristic considers the trigger covered. Word-boundary matched.
|
|
85
|
+
*/
|
|
86
|
+
const TRIGGER_COMMAND_PATTERNS = [
|
|
87
|
+
/\bgit\s+(?:merge|pull|push|commit|rebase|cherry-pick)\b/,
|
|
88
|
+
/\bsystemctl\b/,
|
|
89
|
+
/\bcrontab\b|\brun-parts\b/,
|
|
90
|
+
/\bkill\s+-/,
|
|
91
|
+
/\bcurl\s+(?:[^|]*\s)?-X\s+(?:POST|GET|PUT|DELETE)/i,
|
|
92
|
+
/\bwget\s+--method=(?:POST|GET|PUT|DELETE)/i,
|
|
93
|
+
/\b(?:touch|mkdir|rm)\s+/, // filesystem-watch triggers
|
|
94
|
+
];
|
|
95
|
+
/**
|
|
96
|
+
* Returns true if the source AC text mentions an event-driven mechanism.
|
|
97
|
+
*/
|
|
98
|
+
function detectsEventDrivenAC(sourceEpicContent) {
|
|
99
|
+
for (const pattern of EVENT_DRIVEN_KEYWORDS) {
|
|
100
|
+
if (pattern.test(sourceEpicContent))
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Returns true if any probe's command line invokes a known production trigger.
|
|
107
|
+
*/
|
|
108
|
+
function probesInvokeProductionTrigger(probes) {
|
|
109
|
+
for (const probe of probes) {
|
|
110
|
+
for (const pattern of TRIGGER_COMMAND_PATTERNS) {
|
|
111
|
+
if (pattern.test(probe.command))
|
|
112
|
+
return true;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
42
117
|
const defaultExecutors = {
|
|
43
118
|
host: (probe) => executeProbeOnHost(probe, { cwd: process.cwd() }),
|
|
44
119
|
// twin intentionally omitted → RuntimeProbeCheck emits a warn finding
|
|
@@ -112,6 +187,29 @@ export class RuntimeProbeCheck {
|
|
|
112
187
|
};
|
|
113
188
|
}
|
|
114
189
|
const findings = [];
|
|
190
|
+
// Story 60-11: event-driven AC + missing-trigger heuristic. Runs once
|
|
191
|
+
// per check invocation against the parsed probe list and the source AC
|
|
192
|
+
// text. If the source AC describes an event-driven mechanism (hook,
|
|
193
|
+
// timer, signal, webhook) AND no probe's command invokes a known
|
|
194
|
+
// production-trigger pattern, emit an advisory warn finding so the
|
|
195
|
+
// dev-story retry prompt and post-run analysis can flag the gap. Does
|
|
196
|
+
// not block (severity: warn) until calibrated.
|
|
197
|
+
if (context.sourceEpicContent !== undefined) {
|
|
198
|
+
if (detectsEventDrivenAC(context.sourceEpicContent) &&
|
|
199
|
+
!probesInvokeProductionTrigger(parsed.probes)) {
|
|
200
|
+
findings.push({
|
|
201
|
+
category: CATEGORY_MISSING_TRIGGER,
|
|
202
|
+
severity: 'warn',
|
|
203
|
+
message: `source AC describes an event-driven mechanism (hook / timer / signal / webhook) ` +
|
|
204
|
+
`but no probe's command invokes a known production trigger ` +
|
|
205
|
+
`(git merge/pull/push, systemctl, crontab, kill -<sig>, curl -X POST, etc.). ` +
|
|
206
|
+
`Probes that call the implementation directly skip the wiring layer ` +
|
|
207
|
+
`the AC's user-facing event would exercise — see strata Run 13 / Story 1-12 ` +
|
|
208
|
+
`for the canonical case (post-merge hook never fires under git's conflict semantic). ` +
|
|
209
|
+
`Authoring guidance: probes/event-driven section of create-story.md.`,
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
}
|
|
115
213
|
for (const probe of parsed.probes) {
|
|
116
214
|
if (probe.sandbox === 'twin') {
|
|
117
215
|
findings.push({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-probe-check.js","sourceRoot":"","sources":["../../../src/verification/checks/runtime-probe-check.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAQH,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EACL,kBAAkB,EAClB,kBAAkB,GAGnB,MAAM,oBAAoB,CAAA;AAE3B,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E,MAAM,cAAc,GAAG,2BAA2B,CAAA;AAClD,MAAM,aAAa,GAAG,oBAAoB,CAAA;AAC1C,MAAM,iBAAiB,GAAG,wBAAwB,CAAA;AAClD,MAAM,aAAa,GAAG,oBAAoB,CAAA;AAC1C,MAAM,gBAAgB,GAAG,uBAAuB,CAAA;AAChD;;;;;GAKG;AACH,MAAM,uBAAuB,GAAG,8BAA8B,CAAA;
|
|
1
|
+
{"version":3,"file":"runtime-probe-check.js","sourceRoot":"","sources":["../../../src/verification/checks/runtime-probe-check.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@substrate-ai/sdlc",
|
|
3
|
-
"version": "0.20.
|
|
3
|
+
"version": "0.20.29",
|
|
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.29",
|
|
28
28
|
"js-yaml": "^4.1.1",
|
|
29
29
|
"zod": "^4.3.6"
|
|
30
30
|
},
|