substrate-ai 0.20.138 → 0.20.141
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/adapter-registry-qU0IkbbQ.js +4 -0
- package/dist/cli/index.js +41 -37
- package/dist/{decision-router-DblHY8se.js → decision-router-BAPpON_C.js} +4 -2
- package/dist/{decisions-fBdZmqOK.js → decisions-Dvw5HhyM.js} +1 -1
- package/dist/{dist-DnvGvKLu.js → dist-DiNK6QOD.js} +104 -17
- package/dist/{errors-i3s5sshZ.js → errors-B21JUhcc.js} +2 -2
- package/dist/{experimenter-DU2Cv51N.js → experimenter-D55L011w.js} +1 -1
- package/dist/{health-2Kfa00-H.js → health-BQRsVP6s.js} +3 -3
- package/dist/{health-Caa24SFM.js → health-Cm-pA1mZ.js} +3 -3
- package/dist/{index-BJEANS9i.d.ts → index-BqVBOAO0.d.ts} +25 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -2
- package/dist/{interactive-prompt-B91mG5v4.js → interactive-prompt-CgerI5Y6.js} +2 -2
- package/dist/{manifest-read-DJFbGhSd.js → manifest-read-Doh2Ion5.js} +17 -3
- package/dist/modules/interactive-prompt/index.js +3 -3
- package/dist/{routing-DFIBY9Yk.js → routing-_PGfe_cD.js} +1 -1
- package/dist/{run-Ppco-3HT.js → run-BHRkyn_H.js} +6 -6
- package/dist/{run-Dbwlb4Md.js → run-CRvusFIv.js} +674 -183
- package/dist/src/modules/decision-router/index.d.ts +1 -1
- package/dist/src/modules/decision-router/index.js +1 -1
- package/dist/src/modules/recovery-engine/index.d.ts +9 -1
- package/dist/{upgrade-CnIsoLpT.js → upgrade-CTj4hi8J.js} +2 -2
- package/dist/{upgrade-yULZIAAW.js → upgrade-DB7KzD9c.js} +2 -2
- package/dist/{version-manager-impl-C7ZhqLX3.js → version-manager-impl-HJMonRJi.js} +1 -1
- package/package.json +3 -3
- package/packs/bmad/prompts/probe-author.md +17 -0
- package/dist/adapter-registry-Bpa7ESBV.js +0 -4
|
@@ -21,7 +21,7 @@ type Severity = 'info' | 'warning' | 'critical' | 'fatal';
|
|
|
21
21
|
* All known halt-able decision types (AC1).
|
|
22
22
|
* Epic 73 (Recovery Engine) will extend this union with additional types.
|
|
23
23
|
*/
|
|
24
|
-
type DecisionType = 'cost-ceiling-exhausted' | 'build-verification-failure' | 'recovery-retry-attempt' | 're-scope-proposal' | 'scope-violation' | 'cross-story-race-recovered' | 'cross-story-race-still-failed' | 'pipeline-escalation';
|
|
24
|
+
type DecisionType = 'cost-ceiling-exhausted' | 'build-verification-failure' | 'recovery-retry-attempt' | 're-scope-proposal' | 'scope-violation' | 'cross-story-race-recovered' | 'cross-story-race-still-failed' | 'pipeline-escalation' | 'auth-failure';
|
|
25
25
|
/**
|
|
26
26
|
* Maps each known decision type to its severity level.
|
|
27
27
|
*
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { DECISION_SEVERITY_MAP, deriveExitCode, routeDecision } from "../../../decision-router-
|
|
1
|
+
import { DECISION_SEVERITY_MAP, deriveExitCode, routeDecision } from "../../../decision-router-BAPpON_C.js";
|
|
2
2
|
|
|
3
3
|
export { DECISION_SEVERITY_MAP, deriveExitCode, routeDecision };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CoreEvents, DatabaseAdapter, TypedEventBus } from "../../../index-
|
|
1
|
+
import { CoreEvents, DatabaseAdapter, TypedEventBus } from "../../../index-BqVBOAO0.js";
|
|
2
2
|
import { z } from "zod";
|
|
3
3
|
|
|
4
4
|
//#region packages/sdlc/dist/verification/findings.d.ts
|
|
@@ -581,9 +581,17 @@ declare const PerStoryStateSchema: z.ZodObject<{
|
|
|
581
581
|
escalation_reason: z.ZodOptional<z.ZodString>;
|
|
582
582
|
escalation_detail: z.ZodOptional<z.ZodString>;
|
|
583
583
|
commit_sha: z.ZodOptional<z.ZodString>;
|
|
584
|
+
baseline_sha: z.ZodOptional<z.ZodString>;
|
|
585
|
+
checkpoint_sha: z.ZodOptional<z.ZodString>;
|
|
584
586
|
story_file: z.ZodOptional<z.ZodString>;
|
|
585
587
|
story_file_input_path: z.ZodOptional<z.ZodString>;
|
|
586
588
|
story_file_sha256: z.ZodOptional<z.ZodString>;
|
|
589
|
+
verdict: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"SHIP_IT">, z.ZodLiteral<"LGTM_WITH_NOTES">, z.ZodLiteral<"NEEDS_MINOR_FIXES">, z.ZodLiteral<"NEEDS_MAJOR_REWORK">, z.ZodString]>>;
|
|
590
|
+
total_turns: z.ZodOptional<z.ZodNumber>;
|
|
591
|
+
total_tokens: z.ZodOptional<z.ZodObject<{
|
|
592
|
+
input: z.ZodNumber;
|
|
593
|
+
output: z.ZodNumber;
|
|
594
|
+
}, z.core.$strip>>;
|
|
587
595
|
}, z.core.$strip>;
|
|
588
596
|
type PerStoryState = z.infer<typeof PerStoryStateSchema>;
|
|
589
597
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import "./dist-
|
|
1
|
+
import "./dist-DiNK6QOD.js";
|
|
2
2
|
import "./version-manager-impl-qFBiO4Eh.js";
|
|
3
|
-
import { isGlobalInstall, registerUpgradeCommand, runUpgradeCommand } from "./upgrade-
|
|
3
|
+
import { isGlobalInstall, registerUpgradeCommand, runUpgradeCommand } from "./upgrade-DB7KzD9c.js";
|
|
4
4
|
|
|
5
5
|
export { isGlobalInstall, registerUpgradeCommand, runUpgradeCommand };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createVersionManager } from "./dist-
|
|
1
|
+
import { createVersionManager } from "./dist-DiNK6QOD.js";
|
|
2
2
|
import { execSync, spawn } from "child_process";
|
|
3
3
|
import * as readline from "readline";
|
|
4
4
|
|
|
@@ -123,4 +123,4 @@ function registerUpgradeCommand(program) {
|
|
|
123
123
|
|
|
124
124
|
//#endregion
|
|
125
125
|
export { isGlobalInstall, registerUpgradeCommand, runUpgradeCommand };
|
|
126
|
-
//# sourceMappingURL=upgrade-
|
|
126
|
+
//# sourceMappingURL=upgrade-DB7KzD9c.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "substrate-ai",
|
|
3
|
-
"version": "0.20.
|
|
3
|
+
"version": "0.20.141",
|
|
4
4
|
"description": "Substrate — multi-agent orchestration daemon for AI coding agents",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
"check:circular": "dpdm --no-warning --exit-code circular:1 packages/core/src/index.ts packages/sdlc/src/index.ts packages/factory/src/index.ts",
|
|
54
54
|
"dev": "tsx watch src/cli/index.ts",
|
|
55
55
|
"test": "vitest run --coverage",
|
|
56
|
-
"test:fast": "vitest run --exclude 'src/__tests__/e2e/**' --exclude '
|
|
56
|
+
"test:fast": "vitest run --exclude 'src/__tests__/e2e/**' --exclude 'src/**/*integration*' --exclude 'packages/**/*integration*' --exclude '**/*e2e*'",
|
|
57
57
|
"test:changed": "vitest run --changed",
|
|
58
58
|
"test:watch": "vitest",
|
|
59
59
|
"test:ui": "vitest --ui",
|
|
@@ -104,4 +104,4 @@
|
|
|
104
104
|
"typescript-eslint": "^8.18.0",
|
|
105
105
|
"vitest": "^2.1.8"
|
|
106
106
|
}
|
|
107
|
-
}
|
|
107
|
+
}
|
|
@@ -82,6 +82,23 @@ Exit-code success is necessary but **not sufficient** for probes calling tools t
|
|
|
82
82
|
|
|
83
83
|
Patterns are JavaScript regex (`new RegExp`). Evaluated only when exit code is 0; non-zero exits emit `runtime-probe-fail` and assertions are skipped to avoid redundant findings.
|
|
84
84
|
|
|
85
|
+
## Anchor test-runner assertions to the runner's summary line
|
|
86
|
+
|
|
87
|
+
When a probe asserts a test suite passed, patterns MUST anchor to the test runner's own summary line — never a bare substring that can appear in test/fixture log output. A passing suite's stdout legitimately contains words like `failed`, `error`, `FAIL` inside fixture data, negative-path test logs, and the code under test's own messages.
|
|
88
|
+
|
|
89
|
+
Substrate Run d21e26a8 (Stories 81-9/81-11, 2026-06-07): a probe forbade `\d+ failed` on `npm run test:fast` output. The suite was 100% green (10152/10152), but an orchestrator test's own log line `Story 29-9 failed: ...` matched the pattern — false-positive probe failure on both stories, AND both dev agents then **edited production log wording to dodge the regex** (a probe-induced production perturbation that had to be reverted in review).
|
|
90
|
+
|
|
91
|
+
**Rule**: for vitest, assert the summary lines, not bare keywords:
|
|
92
|
+
|
|
93
|
+
```yaml
|
|
94
|
+
expect_stdout_regex:
|
|
95
|
+
- 'Test Files\s+\d+ passed' # anchored to vitest's summary
|
|
96
|
+
expect_stdout_no_regex:
|
|
97
|
+
- 'Tests.*\d+ failed' # anchored: only matches the summary line
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
**DO NOT use**: bare `\d+ failed`, `error`, `FAIL` — these match fixture logs on green suites. The same anchoring discipline applies to any runner (jest, pytest, go test): find the runner's machine-stable summary format and pin to it.
|
|
101
|
+
|
|
85
102
|
## Probes for event-driven mechanisms must invoke the production trigger
|
|
86
103
|
|
|
87
104
|
When the source AC describes a hook, timer, signal, webhook, or other event-driven mechanism, the probe MUST invoke the **production trigger** that fires the implementation in real usage — NOT call the implementation script directly. Calling the implementation directly verifies it produces correct outputs given synthetic inputs; it does NOT verify the implementation is wired to the right trigger and will actually fire when the AC's user-facing event occurs.
|