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.
Files changed (27) hide show
  1. package/dist/adapter-registry-qU0IkbbQ.js +4 -0
  2. package/dist/cli/index.js +41 -37
  3. package/dist/{decision-router-DblHY8se.js → decision-router-BAPpON_C.js} +4 -2
  4. package/dist/{decisions-fBdZmqOK.js → decisions-Dvw5HhyM.js} +1 -1
  5. package/dist/{dist-DnvGvKLu.js → dist-DiNK6QOD.js} +104 -17
  6. package/dist/{errors-i3s5sshZ.js → errors-B21JUhcc.js} +2 -2
  7. package/dist/{experimenter-DU2Cv51N.js → experimenter-D55L011w.js} +1 -1
  8. package/dist/{health-2Kfa00-H.js → health-BQRsVP6s.js} +3 -3
  9. package/dist/{health-Caa24SFM.js → health-Cm-pA1mZ.js} +3 -3
  10. package/dist/{index-BJEANS9i.d.ts → index-BqVBOAO0.d.ts} +25 -1
  11. package/dist/index.d.ts +1 -1
  12. package/dist/index.js +2 -2
  13. package/dist/{interactive-prompt-B91mG5v4.js → interactive-prompt-CgerI5Y6.js} +2 -2
  14. package/dist/{manifest-read-DJFbGhSd.js → manifest-read-Doh2Ion5.js} +17 -3
  15. package/dist/modules/interactive-prompt/index.js +3 -3
  16. package/dist/{routing-DFIBY9Yk.js → routing-_PGfe_cD.js} +1 -1
  17. package/dist/{run-Ppco-3HT.js → run-BHRkyn_H.js} +6 -6
  18. package/dist/{run-Dbwlb4Md.js → run-CRvusFIv.js} +674 -183
  19. package/dist/src/modules/decision-router/index.d.ts +1 -1
  20. package/dist/src/modules/decision-router/index.js +1 -1
  21. package/dist/src/modules/recovery-engine/index.d.ts +9 -1
  22. package/dist/{upgrade-CnIsoLpT.js → upgrade-CTj4hi8J.js} +2 -2
  23. package/dist/{upgrade-yULZIAAW.js → upgrade-DB7KzD9c.js} +2 -2
  24. package/dist/{version-manager-impl-C7ZhqLX3.js → version-manager-impl-HJMonRJi.js} +1 -1
  25. package/package.json +3 -3
  26. package/packs/bmad/prompts/probe-author.md +17 -0
  27. 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-DblHY8se.js";
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-BJEANS9i.js";
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-DnvGvKLu.js";
1
+ import "./dist-DiNK6QOD.js";
2
2
  import "./version-manager-impl-qFBiO4Eh.js";
3
- import { isGlobalInstall, registerUpgradeCommand, runUpgradeCommand } from "./upgrade-yULZIAAW.js";
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-DnvGvKLu.js";
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-yULZIAAW.js.map
126
+ //# sourceMappingURL=upgrade-DB7KzD9c.js.map
@@ -1,4 +1,4 @@
1
- import { VersionManagerImpl, createVersionManager } from "./dist-DnvGvKLu.js";
1
+ import { VersionManagerImpl, createVersionManager } from "./dist-DiNK6QOD.js";
2
2
  import "./version-manager-impl-qFBiO4Eh.js";
3
3
 
4
4
  export { createVersionManager };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "substrate-ai",
3
- "version": "0.20.138",
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 '**/*integration*' --exclude '**/*e2e*'",
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.
@@ -1,4 +0,0 @@
1
- import { AdapterRegistry } from "./dist-DnvGvKLu.js";
2
- import "./adapter-registry-DIcrxjH8.js";
3
-
4
- export { AdapterRegistry };