substrate-ai 0.20.117 → 0.20.119

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/cli/index.js CHANGED
@@ -1,17 +1,17 @@
1
1
  #!/usr/bin/env node
2
- import { FileKvStore, SUBSTRATE_OWNED_SETTINGS_KEYS, VALID_PHASES, buildPipelineStatusOutput, createDatabaseAdapter, createDoltOperatorReader, findPackageRoot, formatOutput, formatPipelineStatusHuman, formatPipelineSummary, formatTokenTelemetry, getAllDescendantPids, getAutoHealthData, getSubstrateDefaultSettings, inspectProcessTree, parseDbTimestampAsUtc, registerHealthCommand, resolveBmadMethodSrcPath, resolveBmadMethodVersion } from "../health-D08AST4P.js";
2
+ import { FileKvStore, SUBSTRATE_OWNED_SETTINGS_KEYS, VALID_PHASES, buildPipelineStatusOutput, createDatabaseAdapter, createDoltOperatorReader, findPackageRoot, formatOutput, formatPipelineStatusHuman, formatPipelineSummary, formatTokenTelemetry, getAllDescendantPids, getAutoHealthData, getSubstrateDefaultSettings, inspectProcessTree, parseDbTimestampAsUtc, registerHealthCommand, resolveBmadMethodSrcPath, resolveBmadMethodVersion } from "../health-DSg6dtya.js";
3
3
  import { createLogger } from "../logger-KeHncl-f.js";
4
4
  import { createEventBus } from "../helpers-CElYrONe.js";
5
5
  import { AdapterRegistry, BudgetConfigSchema, CURRENT_CONFIG_FORMAT_VERSION, CURRENT_TASK_GRAPH_VERSION, ConfigError, CostTrackerConfigSchema, DEFAULT_CONFIG, DoltClient, DoltNotInstalled, GlobalSettingsSchema, InMemoryDatabaseAdapter, IngestionServer, MonitorDatabaseImpl, OPERATIONAL_FINDING, PartialGlobalSettingsSchema, PartialProviderConfigSchema, ProvidersSchema, RoutingRecommender, STORY_METRICS, TelemetryConfigSchema, addTokenUsage, aggregateTokenUsageForRun, checkDoltInstalled, compareRunMetrics, createAmendmentRun, createConfigSystem, createDecision, createPipelineRun, createStderrLogger, getActiveDecisions, getAllCostEntriesFiltered, getBaselineRunMetrics, getDecisionsByCategory, getDecisionsByPhaseForRun, getLatestCompletedRun, getLatestRun, getPipelineRunById, getPlanningCostTotal, getRetryableEscalations, getRunMetrics, getRunningPipelineRuns, getSessionCostSummary, getSessionCostSummaryFiltered, getStoryMetricsForRun, getTokenUsageSummary, incrementRunRestarts, initSchema, initWorkGraphSchema, initializeDolt, listRunMetrics, loadParentRunDecisions, supersedeDecision, swallowDebug, tagRunAsBaseline, updatePipelineRun } from "../dist-Bc0-6VcX.js";
6
- import { AdapterTelemetryPersistence, AppError, DoltRepoMapMetaRepository, DoltSymbolRepository, ERR_REPO_MAP_STORAGE_WRITE, EpicIngester, GLOBSTAR, GitClient, GrammarLoader, Minimatch, Minipass, RepoMapInjector, RepoMapModule, RepoMapQueryEngine, RepoMapStorage, SymbolParser, createContextCompiler, createDispatcher, createEventEmitter, createGitWorktreeManager, createImplementationOrchestrator, createPackLoader, createPhaseOrchestrator, createStopAfterGate, createTelemetryAdvisor, escape, formatPhaseCompletionSummary, getFactoryRunSummaries, getScenarioResultsForRun, getTwinRunsForRun, listGraphRuns, registerExportCommand, registerFactoryCommand, registerRunCommand, registerScenariosCommand, resolveStoryKeys, runAnalysisPhase, runPlanningPhase, runProbeAuthor, runSolutioningPhase, unescape, validateStopAfterFromConflict } from "../run-7kur1xoT.js";
6
+ import { AdapterTelemetryPersistence, AppError, DoltRepoMapMetaRepository, DoltSymbolRepository, ERR_REPO_MAP_STORAGE_WRITE, EpicIngester, GLOBSTAR, GitClient, GrammarLoader, Minimatch, Minipass, RepoMapInjector, RepoMapModule, RepoMapQueryEngine, RepoMapStorage, SymbolParser, createContextCompiler, createDispatcher, createEventEmitter, createGitWorktreeManager, createImplementationOrchestrator, createPackLoader, createPhaseOrchestrator, createStopAfterGate, createTelemetryAdvisor, escape, formatPhaseCompletionSummary, getFactoryRunSummaries, getScenarioResultsForRun, getTwinRunsForRun, listGraphRuns, registerExportCommand, registerFactoryCommand, registerRunCommand, registerScenariosCommand, resolveStoryKeys, runAnalysisPhase, runPlanningPhase, runProbeAuthor, runSolutioningPhase, unescape, validateStopAfterFromConflict } from "../run-ClsMsm4P.js";
7
7
  import "../adapter-registry-DIcrxjH8.js";
8
- import { RunManifest, SupervisorLock, ZERO_FINDINGS_BY_AUTHOR, ZERO_FINDING_COUNTS, ZERO_PROBE_AUTHOR_METRICS, aggregateProbeAuthorMetrics, parseRuntimeProbes, readCurrentRunId, resolveMainRepoRoot, resolveRunManifest, rollupFindingCounts, rollupFindingsByAuthor, rollupProbeAuthorByClass, rollupProbeAuthorMetrics, runAcTraceabilityCheck } from "../manifest-read-BXhbIwv6.js";
8
+ import { RunManifest, SupervisorLock, ZERO_FINDINGS_BY_AUTHOR, ZERO_FINDING_COUNTS, ZERO_PROBE_AUTHOR_METRICS, aggregateProbeAuthorMetrics, parseRuntimeProbes, readCurrentRunId, resolveMainRepoRoot, resolveRunManifest, rollupFindingCounts, rollupFindingsByAuthor, rollupProbeAuthorByClass, rollupProbeAuthorMetrics, runAcTraceabilityCheck } from "../manifest-read-BE70EnPy.js";
9
9
  import "../errors-CwQM_6Yk.js";
10
10
  import "../routing-DFxoKHDt.js";
11
11
  import { WorkGraphRepository } from "../work-graph-repository-DZyJv5pV.js";
12
12
  import "../decisions-CzSIEeGP.js";
13
13
  import "../decision-router-DblHY8se.js";
14
- import "../interactive-prompt-CBPiHLsh.js";
14
+ import "../interactive-prompt-B4sDQpFI.js";
15
15
  import "../recovery-engine-BKGBeBnW.js";
16
16
  import "../version-manager-impl-qFBiO4Eh.js";
17
17
  import { registerUpgradeCommand } from "../upgrade-BlBDCOfS.js";
@@ -6890,7 +6890,7 @@ async function runStatusAction(options) {
6890
6890
  logger$15.debug({ err }, "Work graph query failed, continuing without work graph data");
6891
6891
  }
6892
6892
  if (run === void 0) {
6893
- const { inspectProcessTree: inspectProcessTree$1 } = await import("../health-B42A1Xcd.js");
6893
+ const { inspectProcessTree: inspectProcessTree$1 } = await import("../health-LT-nkfen.js");
6894
6894
  const substrateDirPath = join(projectRoot, ".substrate");
6895
6895
  const processInfo = inspectProcessTree$1({
6896
6896
  projectRoot,
@@ -8419,7 +8419,7 @@ async function runSupervisorAction(options, deps = {}) {
8419
8419
  await initSchema(expAdapter);
8420
8420
  const { runRunAction: runPipeline } = await import(
8421
8421
  /* @vite-ignore */
8422
- "../run-51u0PYQl.js"
8422
+ "../run-BfBS7Zv2.js"
8423
8423
  );
8424
8424
  const runStoryFn = async (opts) => {
8425
8425
  const exitCode = await runPipeline({
@@ -1,6 +1,6 @@
1
1
  import { createLogger } from "./logger-KeHncl-f.js";
2
2
  import { DoltClient, DoltQueryError, createDatabaseAdapter$1 as createDatabaseAdapter, getLatestRun, getPipelineRunById, initSchema } from "./dist-Bc0-6VcX.js";
3
- import { resolveMainRepoRoot, resolveRunManifest } from "./manifest-read-BXhbIwv6.js";
3
+ import { resolveMainRepoRoot, resolveRunManifest } from "./manifest-read-BE70EnPy.js";
4
4
  import { createRequire } from "module";
5
5
  import { dirname, join } from "path";
6
6
  import { existsSync, readFileSync } from "node:fs";
@@ -1000,4 +1000,4 @@ function registerHealthCommand(program, _version = "0.0.0", projectRoot = proces
1000
1000
 
1001
1001
  //#endregion
1002
1002
  export { BMAD_BASELINE_TOKENS_FULL, DEFAULT_STALL_THRESHOLD_SECONDS, FileKvStore, STOP_AFTER_VALID_PHASES, STORY_KEY_PATTERN, SUBSTRATE_OWNED_SETTINGS_KEYS, VALID_PHASES, __commonJS, __require, __toESM, buildPipelineStatusOutput, createDatabaseAdapter$1 as createDatabaseAdapter, createDoltOperatorReader, findPackageRoot, formatOutput, formatPipelineStatusHuman, formatPipelineSummary, formatTokenTelemetry, getAllDescendantPids, getAutoHealthData, getSubstrateDefaultSettings, inspectProcessTree, isOrchestratorProcessLine, parseDbTimestampAsUtc, registerHealthCommand, resolveBmadMethodSrcPath, resolveBmadMethodVersion, runHealthAction, validateStoryKey };
1003
- //# sourceMappingURL=health-D08AST4P.js.map
1003
+ //# sourceMappingURL=health-DSg6dtya.js.map
@@ -1,7 +1,7 @@
1
- import { DEFAULT_STALL_THRESHOLD_SECONDS, getAllDescendantPids, getAutoHealthData, inspectProcessTree, isOrchestratorProcessLine, registerHealthCommand, runHealthAction } from "./health-D08AST4P.js";
1
+ import { DEFAULT_STALL_THRESHOLD_SECONDS, getAllDescendantPids, getAutoHealthData, inspectProcessTree, isOrchestratorProcessLine, registerHealthCommand, runHealthAction } from "./health-DSg6dtya.js";
2
2
  import "./logger-KeHncl-f.js";
3
3
  import "./dist-Bc0-6VcX.js";
4
- import "./manifest-read-BXhbIwv6.js";
4
+ import "./manifest-read-BE70EnPy.js";
5
5
  import "./work-graph-repository-DZyJv5pV.js";
6
6
  import "./decisions-CzSIEeGP.js";
7
7
 
@@ -1,5 +1,5 @@
1
1
  import { createLogger } from "./logger-KeHncl-f.js";
2
- import { readCurrentRunId, resolveMainRepoRoot } from "./manifest-read-BXhbIwv6.js";
2
+ import { readCurrentRunId, resolveMainRepoRoot } from "./manifest-read-BE70EnPy.js";
3
3
  import { join } from "node:path";
4
4
  import { mkdir, readFile, writeFile } from "node:fs/promises";
5
5
  import * as readline from "node:readline";
@@ -180,4 +180,4 @@ async function runInteractivePrompt(decisionContext) {
180
180
 
181
181
  //#endregion
182
182
  export { runInteractivePrompt };
183
- //# sourceMappingURL=interactive-prompt-CBPiHLsh.js.map
183
+ //# sourceMappingURL=interactive-prompt-B4sDQpFI.js.map
@@ -4656,7 +4656,8 @@ const PerStoryStateSchema = z.object({
4656
4656
  z.string()
4657
4657
  ]).optional(),
4658
4658
  verification_re_run: z.boolean().optional(),
4659
- escalation_reason: z.string().optional()
4659
+ escalation_reason: z.string().optional(),
4660
+ commit_sha: z.string().optional()
4660
4661
  });
4661
4662
 
4662
4663
  //#endregion
@@ -5846,4 +5847,4 @@ async function resolveRunManifest(dbRoot, runId) {
5846
5847
 
5847
5848
  //#endregion
5848
5849
  export { FindingsInjector, RunManifest, RuntimeProbeListSchema, SupervisorLock, ZERO_FINDINGS_BY_AUTHOR, ZERO_FINDING_COUNTS, ZERO_PROBE_AUTHOR_METRICS, aggregateProbeAuthorMetrics, applyConfigToGraph, createDefaultVerificationPipeline, createGraphOrchestrator, createSdlcCodeReviewHandler, createSdlcCreateStoryHandler, createSdlcDevStoryHandler, createSdlcPhaseHandler, detectsEventDrivenAC, detectsStateIntegratingAC, extractTargetFilesFromStoryContent, parseRuntimeProbes, readCurrentRunId, renderFindings, resolveGraphPath, resolveMainRepoRoot, resolveRunManifest, rollupFindingCounts, rollupFindingsByAuthor, rollupProbeAuthorByClass, rollupProbeAuthorMetrics, runAcTraceabilityCheck, runStaleVerificationRecovery };
5849
- //# sourceMappingURL=manifest-read-BXhbIwv6.js.map
5850
+ //# sourceMappingURL=manifest-read-BE70EnPy.js.map
@@ -1,6 +1,6 @@
1
1
  import "../../logger-KeHncl-f.js";
2
2
  import "../../dist-Bc0-6VcX.js";
3
- import "../../manifest-read-BXhbIwv6.js";
4
- import { runInteractivePrompt } from "../../interactive-prompt-CBPiHLsh.js";
3
+ import "../../manifest-read-BE70EnPy.js";
4
+ import { runInteractivePrompt } from "../../interactive-prompt-B4sDQpFI.js";
5
5
 
6
6
  export { runInteractivePrompt };
@@ -1,14 +1,14 @@
1
- import "./health-D08AST4P.js";
1
+ import "./health-DSg6dtya.js";
2
2
  import "./logger-KeHncl-f.js";
3
3
  import "./helpers-CElYrONe.js";
4
4
  import "./dist-Bc0-6VcX.js";
5
- import { normalizeGraphSummaryToStatus, registerRunCommand, resolveMaxReviewCycles, resolveProbeAuthorStateIntegrating, runRunAction, wireNdjsonEmitter } from "./run-7kur1xoT.js";
6
- import "./manifest-read-BXhbIwv6.js";
5
+ import { normalizeGraphSummaryToStatus, registerRunCommand, resolveMaxReviewCycles, resolveProbeAuthorStateIntegrating, runRunAction, wireNdjsonEmitter } from "./run-ClsMsm4P.js";
6
+ import "./manifest-read-BE70EnPy.js";
7
7
  import "./routing-DFxoKHDt.js";
8
8
  import "./work-graph-repository-DZyJv5pV.js";
9
9
  import "./decisions-CzSIEeGP.js";
10
10
  import "./decision-router-DblHY8se.js";
11
- import "./interactive-prompt-CBPiHLsh.js";
11
+ import "./interactive-prompt-B4sDQpFI.js";
12
12
  import "./recovery-engine-BKGBeBnW.js";
13
13
 
14
14
  export { runRunAction };
@@ -1,11 +1,11 @@
1
- import { BMAD_BASELINE_TOKENS_FULL, FileKvStore, STOP_AFTER_VALID_PHASES, STORY_KEY_PATTERN, VALID_PHASES, __commonJS, __require, __toESM, buildPipelineStatusOutput, createDatabaseAdapter, formatOutput, formatPipelineSummary, formatTokenTelemetry, inspectProcessTree, parseDbTimestampAsUtc, validateStoryKey } from "./health-D08AST4P.js";
1
+ import { BMAD_BASELINE_TOKENS_FULL, FileKvStore, STOP_AFTER_VALID_PHASES, STORY_KEY_PATTERN, VALID_PHASES, __commonJS, __require, __toESM, buildPipelineStatusOutput, createDatabaseAdapter, formatOutput, formatPipelineSummary, formatTokenTelemetry, inspectProcessTree, parseDbTimestampAsUtc, validateStoryKey } from "./health-DSg6dtya.js";
2
2
  import { createLogger } from "./logger-KeHncl-f.js";
3
3
  import { TypedEventBusImpl, createEventBus, createTuiApp, isTuiCapable, printNonTtyWarning, sleep } from "./helpers-CElYrONe.js";
4
4
  import { ADVISORY_NOTES, Categorizer, ConsumerAnalyzer, DEFAULT_GLOBAL_SETTINGS, DispatcherImpl, DoltClient, ESCALATION_DIAGNOSIS, EXPERIMENT_RESULT, EfficiencyScorer, IngestionServer, LogTurnAnalyzer, OPERATIONAL_FINDING, Recommender, RoutingRecommender, RoutingResolver, RoutingTelemetry, RoutingTokenAccumulator, RoutingTuner, STORY_METRICS, STORY_OUTCOME, SubstrateConfigSchema, TEST_EXPANSION_FINDING, TEST_PLAN, TelemetryNormalizer, TelemetryPipeline, TurnAnalyzer, addTokenUsage, aggregateTokenUsageForRun, aggregateTokenUsageForStory, callLLM, classifyVersionGap, createConfigSystem, createDatabaseAdapter$1, createDecision, createPipelineRun, createRequirement, createStderrLogger, detectInterfaceChanges, getArtifactByTypeForRun, getArtifactsByRun, getDecisionsByCategory, getDecisionsByPhase, getDecisionsByPhaseForRun, getLatestRun, getPipelineRunById, getRunMetrics, getRunningPipelineRuns, getStoryMetricsForRun, getTokenUsageSummary, initSchema, listRequirements, loadModelRoutingConfig, registerArtifact, swallowDebug, updatePipelineRun, updatePipelineRunConfig, upsertDecision, writeRunMetrics, writeStoryMetrics } from "./dist-Bc0-6VcX.js";
5
- import { FindingsInjector, RunManifest, RuntimeProbeListSchema, applyConfigToGraph, createDefaultVerificationPipeline, createGraphOrchestrator, createSdlcCodeReviewHandler, createSdlcCreateStoryHandler, createSdlcDevStoryHandler, createSdlcPhaseHandler, detectsEventDrivenAC, detectsStateIntegratingAC, extractTargetFilesFromStoryContent, renderFindings, resolveGraphPath, resolveMainRepoRoot, runAcTraceabilityCheck, runStaleVerificationRecovery } from "./manifest-read-BXhbIwv6.js";
5
+ import { FindingsInjector, RunManifest, RuntimeProbeListSchema, applyConfigToGraph, createDefaultVerificationPipeline, createGraphOrchestrator, createSdlcCodeReviewHandler, createSdlcCreateStoryHandler, createSdlcDevStoryHandler, createSdlcPhaseHandler, detectsEventDrivenAC, detectsStateIntegratingAC, extractTargetFilesFromStoryContent, parseRuntimeProbes, renderFindings, resolveGraphPath, resolveMainRepoRoot, runAcTraceabilityCheck, runStaleVerificationRecovery } from "./manifest-read-BE70EnPy.js";
6
6
  import { WorkGraphRepository, detectCycles } from "./work-graph-repository-DZyJv5pV.js";
7
7
  import { deriveExitCode, routeDecision } from "./decision-router-DblHY8se.js";
8
- import { runInteractivePrompt } from "./interactive-prompt-CBPiHLsh.js";
8
+ import { runInteractivePrompt } from "./interactive-prompt-B4sDQpFI.js";
9
9
  import { runRecoveryEngine } from "./recovery-engine-BKGBeBnW.js";
10
10
  import { basename, dirname, extname, join } from "path";
11
11
  import { access, readFile, readdir, stat } from "fs/promises";
@@ -14072,6 +14072,7 @@ function createImplementationOrchestrator(deps) {
14072
14072
  return;
14073
14073
  }
14074
14074
  let fidelityRetries = 0;
14075
+ let probeRetries = 0;
14075
14076
  let priorDriftFeedback;
14076
14077
  while (storyFilePath === void 0) {
14077
14078
  try {
@@ -14446,6 +14447,43 @@ function createImplementationOrchestrator(deps) {
14446
14447
  err: fidelityErr
14447
14448
  }, "fidelity gate threw; proceeding without retry");
14448
14449
  }
14450
+ if (storyFilePath !== void 0 && effectiveProjectRoot !== void 0) try {
14451
+ const probeContent = await readFile$1(storyFilePath, "utf-8");
14452
+ const probeParse = parseRuntimeProbes(probeContent);
14453
+ if (probeParse.kind === "invalid" && probeRetries < MAX_FIDELITY_RETRIES) {
14454
+ probeRetries++;
14455
+ const stalePath = storyFilePath.replace(/\.md$/, `.stale-probe-${Date.now()}.md`);
14456
+ renameSync(storyFilePath, stalePath);
14457
+ logger$27.warn({
14458
+ storyKey,
14459
+ error: probeParse.error,
14460
+ retries: probeRetries,
14461
+ stalePath
14462
+ }, `create-story produced an invalid ## Runtime Probes block (${probeParse.error}); renamed to ${stalePath} and retrying (${probeRetries}/${MAX_FIDELITY_RETRIES})`);
14463
+ eventBus.emit("orchestrator:story-warn", {
14464
+ storyKey,
14465
+ msg: `invalid runtime-probe YAML; retry ${probeRetries}/${MAX_FIDELITY_RETRIES}`
14466
+ });
14467
+ priorDriftFeedback = [
14468
+ `### Prior Dispatch — Invalid Runtime Probes YAML (retry ${probeRetries}/${MAX_FIDELITY_RETRIES})`,
14469
+ "",
14470
+ `The previous artifact's \`## Runtime Probes\` block was not valid YAML and has been moved to \`${stalePath}\`.`,
14471
+ "",
14472
+ `Parse error: ${probeParse.error}`,
14473
+ "",
14474
+ "When re-authoring the probes, the fenced ```yaml block MUST be valid YAML:",
14475
+ "- Inside a `command: |` block scalar, EVERY line (including blank-line continuations) must be indented to at least the block indentation. A multi-line shell string with an unindented (column-0) line — e.g. a `git commit -m \"subject\\n\\nCo-Authored-By: ...\"` whose trailer sits at column 0 — terminates the scalar and breaks the YAML.",
14476
+ "- Prefer single-line commands, or keep every continuation line indented under the block scalar."
14477
+ ].join("\n");
14478
+ storyFilePath = void 0;
14479
+ continue;
14480
+ }
14481
+ } catch (probeGateErr) {
14482
+ logger$27.warn({
14483
+ storyKey,
14484
+ err: probeGateErr
14485
+ }, "probe-validity gate threw; proceeding without retry (verification backstop)");
14486
+ }
14449
14487
  }
14450
14488
  if (storyFilePath) try {
14451
14489
  const storyContent = await readFile$1(storyFilePath, "utf-8");
@@ -15422,10 +15460,10 @@ function createImplementationOrchestrator(deps) {
15422
15460
  await persistVerificationResult(storyKey, verifSummary, runManifest);
15423
15461
  if (verifSummary.status === "fail") {
15424
15462
  let shouldFallThroughToComplete = false;
15463
+ const verificationFailReason = (verifSummary.checks ?? []).some((c) => (c.checkName === "build" || c.checkName === "typecheck") && c.status === "fail") ? "build-failure" : "ac-missing-evidence";
15425
15464
  if (runManifest != null) {
15426
15465
  const failFindings = (verifSummary.checks ?? []).flatMap((c) => c.findings ?? []);
15427
- const hasBuildFail = (verifSummary.checks ?? []).some((c) => (c.checkName === "build" || c.checkName === "typecheck") && c.status === "fail");
15428
- const recoveryRootCause = hasBuildFail ? "build-failure" : "ac-missing-evidence";
15466
+ const recoveryRootCause = verificationFailReason;
15429
15467
  const recoveryBudget = {
15430
15468
  max: config.maxReviewCycles,
15431
15469
  remaining: Math.max(0, config.maxReviewCycles - finalReviewCycles)
@@ -15617,6 +15655,10 @@ function createImplementationOrchestrator(deps) {
15617
15655
  phase: "VERIFICATION_FAILED",
15618
15656
  completedAt: new Date().toISOString()
15619
15657
  });
15658
+ if (runManifest !== null) runManifest.patchStoryState(storyKey, { escalation_reason: verificationFailReason }).catch((err) => logger$27.warn({
15659
+ err,
15660
+ storyKey
15661
+ }, "patchStoryState(escalation_reason, verification-failed) failed — pipeline continues"));
15620
15662
  await writeStoryMetricsBestEffort(storyKey, "verification-failed", finalReviewCycles);
15621
15663
  await persistState();
15622
15664
  return "verification-failed";
@@ -16095,6 +16137,10 @@ function createImplementationOrchestrator(deps) {
16095
16137
  sha: commitResult.sha,
16096
16138
  fileCount: commitResult.filesStaged.length
16097
16139
  }, "substrate auto-committed dev-story output before merge-to-main");
16140
+ if (runManifest !== null && commitResult.sha) runManifest.patchStoryState(storyKey, { commit_sha: commitResult.sha }).catch((err) => logger$27.warn({
16141
+ err,
16142
+ storyKey
16143
+ }, "patchStoryState(commit_sha) failed — pipeline continues"));
16098
16144
  }
16099
16145
  try {
16100
16146
  const branchSha = execSync(`git rev-parse ${branchName}`, {
@@ -47192,4 +47238,4 @@ function registerRunCommand(program, version = "0.0.0", projectRoot = process.cw
47192
47238
 
47193
47239
  //#endregion
47194
47240
  export { AdapterTelemetryPersistence, AppError, DoltRepoMapMetaRepository, DoltSymbolRepository, ERR_REPO_MAP_STORAGE_WRITE, EpicIngester, GLOBSTAR$1 as GLOBSTAR, GitClient, GrammarLoader, Minimatch$1 as Minimatch, Minipass, RepoMapInjector, RepoMapModule, RepoMapQueryEngine, RepoMapStorage, SymbolParser, createContextCompiler, createDispatcher, createEventEmitter, createGitWorktreeManager, createImplementationOrchestrator, createPackLoader, createPhaseOrchestrator, createStopAfterGate, createTelemetryAdvisor, escape$1 as escape, formatPhaseCompletionSummary, getFactoryRunSummaries, getScenarioResultsForRun, getTwinRunsForRun, listGraphRuns, normalizeGraphSummaryToStatus, registerExportCommand, registerFactoryCommand, registerRunCommand, registerScenariosCommand, resolveMaxReviewCycles, resolveProbeAuthorStateIntegrating, resolveStoryKeys, runAnalysisPhase, runPlanningPhase, runProbeAuthor, runRunAction, runSolutioningPhase, unescape$1 as unescape, validateStopAfterFromConflict, wireNdjsonEmitter };
47195
- //# sourceMappingURL=run-7kur1xoT.js.map
47241
+ //# sourceMappingURL=run-ClsMsm4P.js.map
@@ -579,6 +579,7 @@ declare const PerStoryStateSchema: z.ZodObject<{
579
579
  probe_author_triggered_by: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"event-driven">, z.ZodLiteral<"state-integrating">, z.ZodLiteral<"both">, z.ZodString]>>;
580
580
  verification_re_run: z.ZodOptional<z.ZodBoolean>;
581
581
  escalation_reason: z.ZodOptional<z.ZodString>;
582
+ commit_sha: z.ZodOptional<z.ZodString>;
582
583
  }, z.core.$strip>;
583
584
  type PerStoryState = z.infer<typeof PerStoryStateSchema>;
584
585
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "substrate-ai",
3
- "version": "0.20.117",
3
+ "version": "0.20.119",
4
4
  "description": "Substrate — multi-agent orchestration daemon for AI coding agents",
5
5
  "type": "module",
6
6
  "license": "MIT",