substrate-ai 0.20.37 → 0.20.40
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-CcahKCG1.js +4 -0
- package/dist/cli/index.js +238 -114
- package/dist/{decisions-DlPFWRDm.js → decisions-UFV5YFaW.js} +1 -1
- package/dist/{dist-BnMsd9hC.js → dist-VcMmfo2w.js} +2 -2
- package/dist/{errors-DSGhhrgv.js → errors-CogpxBUg.js} +2 -2
- package/dist/{experimenter-CN8PhRbv.js → experimenter-2KGF4bLj.js} +1 -1
- package/dist/{health-DvAr7miW.js → health-B54Vy4Ux.js} +2 -2
- package/dist/{health-BAcRfZ4s.js → health-qUCPCz1O.js} +96 -5
- package/dist/index.js +2 -2
- package/dist/{routing-sauIk945.js → routing-BNGNSI0w.js} +1 -1
- package/dist/{run-__o2iU0w.js → run-D2xj574m.js} +3 -3
- package/dist/{run-YBY2vrF4.js → run-Dhxrf7Nj.js} +8 -8
- package/dist/{upgrade-D3NuTkSL.js → upgrade-CF4__LCr.js} +2 -2
- package/dist/{upgrade-BXfinu5K.js → upgrade-Csv0GRft.js} +2 -2
- package/dist/{version-manager-impl-ChzfLw90.js → version-manager-impl-C-mrgne3.js} +1 -1
- package/package.json +1 -1
- package/packs/bmad/manifest.yaml +6 -0
- package/packs/bmad/prompts/probe-author.md +21 -7
- package/dist/adapter-registry-Cu2eLuau.js +0 -4
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { addTokenUsage, createDecision, createPipelineRun, createRequirement, getArtifactByTypeForRun, getArtifactsByRun, getDecisionsByCategory, getDecisionsByPhase, getDecisionsByPhaseForRun, getLatestRun, getPipelineRunById, getRunningPipelineRuns, getTokenUsageSummary, listRequirements, registerArtifact, updateDecision, updatePipelineRun, updatePipelineRunConfig, upsertDecision } from "./dist-
|
|
1
|
+
import { addTokenUsage, createDecision, createPipelineRun, createRequirement, getArtifactByTypeForRun, getArtifactsByRun, getDecisionsByCategory, getDecisionsByPhase, getDecisionsByPhaseForRun, getLatestRun, getPipelineRunById, getRunningPipelineRuns, getTokenUsageSummary, listRequirements, registerArtifact, updateDecision, updatePipelineRun, updatePipelineRunConfig, upsertDecision } from "./dist-VcMmfo2w.js";
|
|
2
2
|
import "./decisions-C0pz9Clx.js";
|
|
3
3
|
|
|
4
4
|
export { getLatestRun };
|
|
@@ -11014,5 +11014,5 @@ async function callLLM(params) {
|
|
|
11014
11014
|
}
|
|
11015
11015
|
|
|
11016
11016
|
//#endregion
|
|
11017
|
-
export { ADVISORY_NOTES, AdapterRegistry, AdtError, BudgetConfigSchema, CURRENT_CONFIG_FORMAT_VERSION, CURRENT_TASK_GRAPH_VERSION, Categorizer, ClaudeCodeAdapter, CodexCLIAdapter, ConfigError, ConfigIncompatibleFormatError, ConsumerAnalyzer, CostTrackerConfigSchema, DEFAULT_CONFIG, DEFAULT_GLOBAL_SETTINGS, DispatcherImpl, DoltClient, DoltNotInstalled, DoltQueryError, ESCALATION_DIAGNOSIS, EXPERIMENT_RESULT, EfficiencyScorer, GeminiCLIAdapter, GlobalSettingsSchema, IngestionServer, LEARNING_FINDING, LogTurnAnalyzer, ModelRoutingConfigSchema, MonitorDatabaseImpl, OPERATIONAL_FINDING, PartialGlobalSettingsSchema, PartialProviderConfigSchema, ProviderPolicySchema, ProvidersSchema, Recommender, RoutingConfigError, RoutingRecommender, RoutingResolver, RoutingTelemetry, RoutingTokenAccumulator, RoutingTuner, STORY_METRICS, STORY_OUTCOME, SubstrateConfigSchema, TASK_TYPE_PHASE_MAP, TEST_EXPANSION_FINDING, TEST_PLAN, TelemetryConfigSchema, TelemetryNormalizer, TelemetryPipeline, TurnAnalyzer, VersionManagerImpl, addTokenUsage, aggregateTokenUsageForRun, aggregateTokenUsageForStory, buildAuditLogEntry, buildBranchName, buildModificationDirective, buildPRBody, buildWorktreePath, callLLM, checkDoltInstalled, compareRunMetrics, createAmendmentRun, createConfigSystem, createDatabaseAdapter as createDatabaseAdapter$1, createDecision, createDoltClient, createExperimenter, createPipelineRun, createRequirement, createVersionManager, detectInterfaceChanges, determineVerdict, getActiveDecisions, getAllCostEntriesFiltered, getArtifactByTypeForRun, getArtifactsByRun, getBaselineRunMetrics, getDecisionsByCategory, getDecisionsByPhase, getDecisionsByPhaseForRun, getLatestCompletedRun, getLatestRun, getModelTier, getPipelineRunById, getPlanningCostTotal, getRetryableEscalations, getRunMetrics, getRunningPipelineRuns, getSessionCostSummary, getSessionCostSummaryFiltered, getStoryMetricsForRun, getTokenUsageSummary, incrementRunRestarts, initSchema, initializeDolt, listRequirements, listRunMetrics, loadModelRoutingConfig, loadParentRunDecisions, registerArtifact, resolvePromptFile, supersedeDecision, tagRunAsBaseline, updateDecision, updatePipelineRun, updatePipelineRunConfig, upsertDecision, writeRunMetrics, writeStoryMetrics };
|
|
11018
|
-
//# sourceMappingURL=dist-
|
|
11017
|
+
export { ADVISORY_NOTES, AdapterRegistry, AdtError, BudgetConfigSchema, CURRENT_CONFIG_FORMAT_VERSION, CURRENT_TASK_GRAPH_VERSION, Categorizer, ClaudeCodeAdapter, CodexCLIAdapter, ConfigError, ConfigIncompatibleFormatError, ConsumerAnalyzer, CostTrackerConfigSchema, DEFAULT_CONFIG, DEFAULT_GLOBAL_SETTINGS, DispatcherImpl, DoltClient, DoltNotInstalled, DoltQueryError, ESCALATION_DIAGNOSIS, EXPERIMENT_RESULT, EfficiencyScorer, GeminiCLIAdapter, GlobalSettingsSchema, InMemoryDatabaseAdapter, IngestionServer, LEARNING_FINDING, LogTurnAnalyzer, ModelRoutingConfigSchema, MonitorDatabaseImpl, OPERATIONAL_FINDING, PartialGlobalSettingsSchema, PartialProviderConfigSchema, ProviderPolicySchema, ProvidersSchema, Recommender, RoutingConfigError, RoutingRecommender, RoutingResolver, RoutingTelemetry, RoutingTokenAccumulator, RoutingTuner, STORY_METRICS, STORY_OUTCOME, SubstrateConfigSchema, TASK_TYPE_PHASE_MAP, TEST_EXPANSION_FINDING, TEST_PLAN, TelemetryConfigSchema, TelemetryNormalizer, TelemetryPipeline, TurnAnalyzer, VersionManagerImpl, addTokenUsage, aggregateTokenUsageForRun, aggregateTokenUsageForStory, buildAuditLogEntry, buildBranchName, buildModificationDirective, buildPRBody, buildWorktreePath, callLLM, checkDoltInstalled, compareRunMetrics, createAmendmentRun, createConfigSystem, createDatabaseAdapter as createDatabaseAdapter$1, createDecision, createDoltClient, createExperimenter, createPipelineRun, createRequirement, createVersionManager, detectInterfaceChanges, determineVerdict, getActiveDecisions, getAllCostEntriesFiltered, getArtifactByTypeForRun, getArtifactsByRun, getBaselineRunMetrics, getDecisionsByCategory, getDecisionsByPhase, getDecisionsByPhaseForRun, getLatestCompletedRun, getLatestRun, getModelTier, getPipelineRunById, getPlanningCostTotal, getRetryableEscalations, getRunMetrics, getRunningPipelineRuns, getSessionCostSummary, getSessionCostSummaryFiltered, getStoryMetricsForRun, getTokenUsageSummary, incrementRunRestarts, initSchema, initializeDolt, listRequirements, listRunMetrics, loadModelRoutingConfig, loadParentRunDecisions, registerArtifact, resolvePromptFile, supersedeDecision, tagRunAsBaseline, updateDecision, updatePipelineRun, updatePipelineRunConfig, upsertDecision, writeRunMetrics, writeStoryMetrics };
|
|
11018
|
+
//# sourceMappingURL=dist-VcMmfo2w.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AdtError } from "./dist-
|
|
1
|
+
import { AdtError } from "./dist-VcMmfo2w.js";
|
|
2
2
|
|
|
3
3
|
//#region src/core/errors.ts
|
|
4
4
|
/** Error thrown when task configuration is invalid */
|
|
@@ -71,4 +71,4 @@ var TaskGraphIncompatibleFormatError = class extends AdtError {
|
|
|
71
71
|
|
|
72
72
|
//#endregion
|
|
73
73
|
export { BudgetExceededError, GitError, RecoveryError, TaskConfigError, TaskGraphCycleError, TaskGraphError, TaskGraphIncompatibleFormatError, WorkerError, WorkerNotFoundError };
|
|
74
|
-
//# sourceMappingURL=errors-
|
|
74
|
+
//# sourceMappingURL=errors-CogpxBUg.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { buildAuditLogEntry, buildBranchName, buildModificationDirective, buildPRBody, buildWorktreePath, createExperimenter, determineVerdict, resolvePromptFile } from "./dist-
|
|
1
|
+
import { buildAuditLogEntry, buildBranchName, buildModificationDirective, buildPRBody, buildWorktreePath, createExperimenter, determineVerdict, resolvePromptFile } from "./dist-VcMmfo2w.js";
|
|
2
2
|
|
|
3
3
|
export { createExperimenter };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { DEFAULT_STALL_THRESHOLD_SECONDS, getAllDescendantPids, getAutoHealthData, inspectProcessTree, isOrchestratorProcessLine, registerHealthCommand, runHealthAction } from "./health-
|
|
1
|
+
import { DEFAULT_STALL_THRESHOLD_SECONDS, getAllDescendantPids, getAutoHealthData, inspectProcessTree, isOrchestratorProcessLine, registerHealthCommand, runHealthAction } from "./health-qUCPCz1O.js";
|
|
2
2
|
import "./logger-KeHncl-f.js";
|
|
3
|
-
import "./dist-
|
|
3
|
+
import "./dist-VcMmfo2w.js";
|
|
4
4
|
import "./decisions-C0pz9Clx.js";
|
|
5
5
|
|
|
6
6
|
export { inspectProcessTree };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createLogger } from "./logger-KeHncl-f.js";
|
|
2
|
-
import { DoltClient, DoltQueryError, LEARNING_FINDING, createDatabaseAdapter$1 as createDatabaseAdapter, createDecision, getDecisionsByCategory, getLatestRun, getPipelineRunById, initSchema } from "./dist-
|
|
2
|
+
import { DoltClient, DoltQueryError, LEARNING_FINDING, createDatabaseAdapter$1 as createDatabaseAdapter, createDecision, getDecisionsByCategory, getLatestRun, getPipelineRunById, initSchema } from "./dist-VcMmfo2w.js";
|
|
3
3
|
import { createRequire } from "module";
|
|
4
4
|
import { dirname, join } from "path";
|
|
5
5
|
import { readFile } from "fs/promises";
|
|
@@ -4508,10 +4508,90 @@ function computeTakenOptionPerGroup(hardClauses, workingDir) {
|
|
|
4508
4508
|
* 3. The presence of `## Runtime Probes` heading followed by a fenced yaml block
|
|
4509
4509
|
* (represented as a single "runtime-probes-section" clause)
|
|
4510
4510
|
*/
|
|
4511
|
+
/**
|
|
4512
|
+
* Negation phrases that mark a paragraph as "the paths in this paragraph
|
|
4513
|
+
* are references the dev should NOT deliver/modify". When any of these
|
|
4514
|
+
* phrases appears in a paragraph, every path-clause in that paragraph is
|
|
4515
|
+
* tagged `negation: true` so the verification emit routes them to the
|
|
4516
|
+
* info-severity `source-ac-negation-reference` finding instead of the
|
|
4517
|
+
* under-delivery error path.
|
|
4518
|
+
*
|
|
4519
|
+
* Strata Run 16 (Story 1-16, 2026-04-27): the AC contained
|
|
4520
|
+
*
|
|
4521
|
+
* "the existing test scaffolding is documented (NOT replaced):
|
|
4522
|
+
* `packages/memory` already uses vitest (Story 1.8+);
|
|
4523
|
+
* `packages/memory-mcp` already uses pytest (Story 1.10+); ...
|
|
4524
|
+
* 1.16 does NOT replace or rewrite existing test infrastructure."
|
|
4525
|
+
*
|
|
4526
|
+
* Substrate emitted 6 ERROR-level under-delivery findings on the listed
|
|
4527
|
+
* paths; the dev had correctly NOT modified them. The flood of
|
|
4528
|
+
* false-positive ERRORs masked a real WARN about the missing `## Runtime
|
|
4529
|
+
* Probes` section (which itself would have surfaced two real defects in
|
|
4530
|
+
* the delivery). Detecting the negation context up-front separates the
|
|
4531
|
+
* legitimate "paths the AC mentions but the dev should not modify" case
|
|
4532
|
+
* from genuine under-delivery.
|
|
4533
|
+
*
|
|
4534
|
+
* Patterns are case-sensitive on the keyword (NOT, MUST NOT, gitignored)
|
|
4535
|
+
* because lowercased forms are common in non-imperative prose ("not
|
|
4536
|
+
* really" / "must not exceed" appear in unrelated contexts and
|
|
4537
|
+
* over-trigger). The strata observation enumerates the canonical forms.
|
|
4538
|
+
*/
|
|
4539
|
+
const NEGATION_PHRASE_PATTERNS = [
|
|
4540
|
+
/\(NOT\s+\w+/,
|
|
4541
|
+
/documented\s*\(NOT/i,
|
|
4542
|
+
/\bMUST\s+NOT\b|\bSHALL\s+NOT\b/,
|
|
4543
|
+
/\bdo(?:es)?\s+NOT\s+\w+/,
|
|
4544
|
+
/\bdeferred\s+to\b/i,
|
|
4545
|
+
/\b(?:is|are)\s+gitignored\b/i
|
|
4546
|
+
];
|
|
4547
|
+
/**
|
|
4548
|
+
* Find all line indices that fall within a negation context. The scope of
|
|
4549
|
+
* a single negation context is the line that contains the negation phrase
|
|
4550
|
+
* PLUS any markdown indented-continuation lines following it (so a bullet
|
|
4551
|
+
* that wraps onto multiple indented lines is treated as one logical unit).
|
|
4552
|
+
*
|
|
4553
|
+
* The continuation walk stops at the first of: blank line, next markdown
|
|
4554
|
+
* bullet (`- `, `* `, numbered list), or any non-indented non-blank line.
|
|
4555
|
+
*
|
|
4556
|
+
* Coarser scopes (e.g., paragraph-wide aggregation) over-triggered on
|
|
4557
|
+
* test fixtures like:
|
|
4558
|
+
*
|
|
4559
|
+
* The implementation MUST validate input.
|
|
4560
|
+
* The system MUST NOT skip authentication.
|
|
4561
|
+
* Files SHALL be placed in `src/auth/validator.ts`.
|
|
4562
|
+
*
|
|
4563
|
+
* — three independent statements wrapped without blank-line separators.
|
|
4564
|
+
* The "MUST NOT" on line 2 should not mark the unrelated path on line 3
|
|
4565
|
+
* as a negation reference. Only the bullet's CONTINUATION-LINE structure
|
|
4566
|
+
* constitutes "the same logical reference unit" as the negation phrase.
|
|
4567
|
+
*/
|
|
4568
|
+
function detectNegationContextLines(lines) {
|
|
4569
|
+
const result = new Set();
|
|
4570
|
+
for (let i = 0; i < lines.length; i++) {
|
|
4571
|
+
const line = lines[i] ?? "";
|
|
4572
|
+
if (NEGATION_PHRASE_PATTERNS.some((pat) => pat.test(line))) {
|
|
4573
|
+
result.add(i);
|
|
4574
|
+
let j = i + 1;
|
|
4575
|
+
while (j < lines.length) {
|
|
4576
|
+
const next = lines[j] ?? "";
|
|
4577
|
+
if (next.trim() === "") break;
|
|
4578
|
+
if (/^\s*(?:-|\*|\d+\.)\s+/.test(next)) break;
|
|
4579
|
+
if (/^\s+\S/.test(next)) {
|
|
4580
|
+
result.add(j);
|
|
4581
|
+
j++;
|
|
4582
|
+
continue;
|
|
4583
|
+
}
|
|
4584
|
+
break;
|
|
4585
|
+
}
|
|
4586
|
+
}
|
|
4587
|
+
}
|
|
4588
|
+
return result;
|
|
4589
|
+
}
|
|
4511
4590
|
function extractHardClauses(sectionContent) {
|
|
4512
4591
|
const clauses = [];
|
|
4513
4592
|
const lines = sectionContent.split("\n");
|
|
4514
4593
|
const alternativeOptions = detectAlternativeOptions(lines);
|
|
4594
|
+
const negationContextLines = detectNegationContextLines(lines);
|
|
4515
4595
|
const mustPattern = /\b(MUST NOT|MUST|SHALL NOT|SHALL)\b/;
|
|
4516
4596
|
for (const line of lines) {
|
|
4517
4597
|
const match = mustPattern.exec(line);
|
|
@@ -4530,10 +4610,12 @@ function extractHardClauses(sectionContent) {
|
|
|
4530
4610
|
let pathMatch;
|
|
4531
4611
|
while ((pathMatch = pathPattern.exec(line)) !== null) {
|
|
4532
4612
|
const alt = findOptionForLine(lineIdx, alternativeOptions);
|
|
4613
|
+
const inNegation = negationContextLines.has(lineIdx);
|
|
4533
4614
|
clauses.push({
|
|
4534
4615
|
type: "path",
|
|
4535
4616
|
text: `\`${pathMatch[1]}\``,
|
|
4536
|
-
...alt ? { alternative: alt } : {}
|
|
4617
|
+
...alt ? { alternative: alt } : {},
|
|
4618
|
+
...inNegation ? { negation: true } : {}
|
|
4537
4619
|
});
|
|
4538
4620
|
}
|
|
4539
4621
|
}
|
|
@@ -4583,15 +4665,24 @@ var SourceAcFidelityCheck = class {
|
|
|
4583
4665
|
for (const clause of hardClauses) if (clause.type === "runtime-probes-section") {
|
|
4584
4666
|
if (!storyContent.includes("## Runtime Probes")) {
|
|
4585
4667
|
const truncated = clause.text.length > 120 ? clause.text.slice(0, 120) : clause.text;
|
|
4668
|
+
const isEventDrivenAc = detectsEventDrivenAC(context.sourceEpicContent);
|
|
4586
4669
|
findings.push({
|
|
4587
4670
|
category: "source-ac-drift",
|
|
4588
|
-
severity: "warn",
|
|
4589
|
-
message: `runtime-probes-section: "${truncated}" present in epics source but absent in story artifact`
|
|
4671
|
+
severity: isEventDrivenAc ? "error" : "warn",
|
|
4672
|
+
message: isEventDrivenAc ? `runtime-probes-section: "${truncated}" present in epics source but absent in story artifact AND source AC is event-driven (probes are required for event-driven ACs — runtime-probes check will skip without the section)` : `runtime-probes-section: "${truncated}" present in epics source but absent in story artifact`
|
|
4590
4673
|
});
|
|
4591
4674
|
}
|
|
4592
4675
|
} else if (!storyContent.includes(clause.text)) {
|
|
4593
4676
|
const truncated = clause.text.length > 120 ? clause.text.slice(0, 120) : clause.text;
|
|
4594
4677
|
if (clause.type === "path") {
|
|
4678
|
+
if (clause.negation === true) {
|
|
4679
|
+
findings.push({
|
|
4680
|
+
category: "source-ac-negation-reference",
|
|
4681
|
+
severity: "info",
|
|
4682
|
+
message: `path: "${truncated}" referenced in source AC inside a negation context (e.g., "(NOT replaced)", "MUST NOT", "deferred to", "documented (NOT", "does NOT replace", "is gitignored") — the AC explicitly directed the dev NOT to deliver/modify this path; treated as reference-only, not a deliverable`
|
|
4683
|
+
});
|
|
4684
|
+
continue;
|
|
4685
|
+
}
|
|
4595
4686
|
if (isOperationalPath(clause.text)) {
|
|
4596
4687
|
findings.push({
|
|
4597
4688
|
category: "source-ac-operational-path-reference",
|
|
@@ -6344,4 +6435,4 @@ function registerHealthCommand(program, _version = "0.0.0", projectRoot = proces
|
|
|
6344
6435
|
|
|
6345
6436
|
//#endregion
|
|
6346
6437
|
export { BMAD_BASELINE_TOKENS_FULL, DEFAULT_STALL_THRESHOLD_SECONDS, DoltMergeConflict, FileStateStore, FindingsInjector, RunManifest, RuntimeProbeListSchema, STOP_AFTER_VALID_PHASES, STORY_KEY_PATTERN$1 as STORY_KEY_PATTERN, SUBSTRATE_OWNED_SETTINGS_KEYS, SupervisorLock, VALID_PHASES, WorkGraphRepository, ZERO_FINDING_COUNTS, __commonJS, __require, __toESM, applyConfigToGraph, buildPipelineStatusOutput, createDatabaseAdapter$1 as createDatabaseAdapter, createDefaultVerificationPipeline, createGraphOrchestrator, createSdlcCodeReviewHandler, createSdlcCreateStoryHandler, createSdlcDevStoryHandler, createSdlcPhaseHandler, createStateStore, detectCycles, detectsEventDrivenAC, extractTargetFilesFromStoryContent, findPackageRoot, formatOutput, formatPipelineStatusHuman, formatPipelineSummary, formatTokenTelemetry, getAllDescendantPids, getAutoHealthData, getSubstrateDefaultSettings, inspectProcessTree, isOrchestratorProcessLine, parseDbTimestampAsUtc, parseRuntimeProbes, registerHealthCommand, renderFindings, resolveBmadMethodSrcPath, resolveBmadMethodVersion, resolveGraphPath, resolveMainRepoRoot, resolveRunManifest, rollupFindingCounts, runHealthAction, validateStoryKey };
|
|
6347
|
-
//# sourceMappingURL=health-
|
|
6438
|
+
//# sourceMappingURL=health-qUCPCz1O.js.map
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { childLogger, createLogger, logger } from "./logger-KeHncl-f.js";
|
|
2
2
|
import { assertDefined, createEventBus, createTuiApp, deepClone, formatDuration, generateId, isPlainObject, isTuiCapable, printNonTtyWarning, sleep, withRetry } from "./helpers-CElYrONe.js";
|
|
3
|
-
import { AdapterRegistry, AdtError, ClaudeCodeAdapter, CodexCLIAdapter, ConfigError, ConfigIncompatibleFormatError, GeminiCLIAdapter } from "./dist-
|
|
3
|
+
import { AdapterRegistry, AdtError, ClaudeCodeAdapter, CodexCLIAdapter, ConfigError, ConfigIncompatibleFormatError, GeminiCLIAdapter } from "./dist-VcMmfo2w.js";
|
|
4
4
|
import "./adapter-registry-DXLMTmfD.js";
|
|
5
|
-
import { BudgetExceededError, GitError, RecoveryError, TaskConfigError, TaskGraphCycleError, TaskGraphError, TaskGraphIncompatibleFormatError, WorkerError, WorkerNotFoundError } from "./errors-
|
|
5
|
+
import { BudgetExceededError, GitError, RecoveryError, TaskConfigError, TaskGraphCycleError, TaskGraphError, TaskGraphIncompatibleFormatError, WorkerError, WorkerNotFoundError } from "./errors-CogpxBUg.js";
|
|
6
6
|
|
|
7
7
|
//#region src/core/di.ts
|
|
8
8
|
/**
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ModelRoutingConfigSchema, ProviderPolicySchema, RoutingConfigError, RoutingRecommender, RoutingResolver, RoutingTelemetry, RoutingTokenAccumulator, RoutingTuner, TASK_TYPE_PHASE_MAP, getModelTier, loadModelRoutingConfig } from "./dist-
|
|
1
|
+
import { ModelRoutingConfigSchema, ProviderPolicySchema, RoutingConfigError, RoutingRecommender, RoutingResolver, RoutingTelemetry, RoutingTokenAccumulator, RoutingTuner, TASK_TYPE_PHASE_MAP, getModelTier, loadModelRoutingConfig } from "./dist-VcMmfo2w.js";
|
|
2
2
|
import "./routing-CcBOCuC9.js";
|
|
3
3
|
|
|
4
4
|
export { loadModelRoutingConfig };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import "./health-
|
|
1
|
+
import "./health-qUCPCz1O.js";
|
|
2
2
|
import "./logger-KeHncl-f.js";
|
|
3
3
|
import "./helpers-CElYrONe.js";
|
|
4
|
-
import "./dist-
|
|
5
|
-
import { normalizeGraphSummaryToStatus, registerRunCommand, resolveMaxReviewCycles, runRunAction, wireNdjsonEmitter } from "./run-
|
|
4
|
+
import "./dist-VcMmfo2w.js";
|
|
5
|
+
import { normalizeGraphSummaryToStatus, registerRunCommand, resolveMaxReviewCycles, runRunAction, wireNdjsonEmitter } from "./run-Dhxrf7Nj.js";
|
|
6
6
|
import "./routing-CcBOCuC9.js";
|
|
7
7
|
import "./decisions-C0pz9Clx.js";
|
|
8
8
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { BMAD_BASELINE_TOKENS_FULL, DoltMergeConflict, FileStateStore, FindingsInjector, RunManifest, RuntimeProbeListSchema, STOP_AFTER_VALID_PHASES, STORY_KEY_PATTERN, VALID_PHASES, WorkGraphRepository, __commonJS, __require, __toESM, applyConfigToGraph, buildPipelineStatusOutput, createDatabaseAdapter, createDefaultVerificationPipeline, createGraphOrchestrator, createSdlcCodeReviewHandler, createSdlcCreateStoryHandler, createSdlcDevStoryHandler, createSdlcPhaseHandler, detectCycles, detectsEventDrivenAC, extractTargetFilesFromStoryContent, formatOutput, formatPipelineSummary, formatTokenTelemetry, inspectProcessTree, parseDbTimestampAsUtc, renderFindings, resolveGraphPath, resolveMainRepoRoot, validateStoryKey } from "./health-
|
|
1
|
+
import { BMAD_BASELINE_TOKENS_FULL, DoltMergeConflict, FileStateStore, FindingsInjector, RunManifest, RuntimeProbeListSchema, STOP_AFTER_VALID_PHASES, STORY_KEY_PATTERN, VALID_PHASES, WorkGraphRepository, __commonJS, __require, __toESM, applyConfigToGraph, buildPipelineStatusOutput, createDatabaseAdapter, createDefaultVerificationPipeline, createGraphOrchestrator, createSdlcCodeReviewHandler, createSdlcCreateStoryHandler, createSdlcDevStoryHandler, createSdlcPhaseHandler, detectCycles, detectsEventDrivenAC, extractTargetFilesFromStoryContent, formatOutput, formatPipelineSummary, formatTokenTelemetry, inspectProcessTree, parseDbTimestampAsUtc, renderFindings, resolveGraphPath, resolveMainRepoRoot, validateStoryKey } from "./health-qUCPCz1O.js";
|
|
2
2
|
import { createLogger } from "./logger-KeHncl-f.js";
|
|
3
3
|
import { TypedEventBusImpl, createEventBus, createTuiApp, isTuiCapable, printNonTtyWarning, sleep } from "./helpers-CElYrONe.js";
|
|
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, createConfigSystem, createDatabaseAdapter$1, createDecision, createPipelineRun, createRequirement, detectInterfaceChanges, getArtifactByTypeForRun, getArtifactsByRun, getDecisionsByCategory, getDecisionsByPhase, getDecisionsByPhaseForRun, getLatestRun, getPipelineRunById, getRunMetrics, getRunningPipelineRuns, getStoryMetricsForRun, getTokenUsageSummary, initSchema, listRequirements, loadModelRoutingConfig, registerArtifact, updatePipelineRun, updatePipelineRunConfig, upsertDecision, writeRunMetrics, writeStoryMetrics } from "./dist-
|
|
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, createConfigSystem, createDatabaseAdapter$1, createDecision, createPipelineRun, createRequirement, detectInterfaceChanges, getArtifactByTypeForRun, getArtifactsByRun, getDecisionsByCategory, getDecisionsByPhase, getDecisionsByPhaseForRun, getLatestRun, getPipelineRunById, getRunMetrics, getRunningPipelineRuns, getStoryMetricsForRun, getTokenUsageSummary, initSchema, listRequirements, loadModelRoutingConfig, registerArtifact, updatePipelineRun, updatePipelineRunConfig, upsertDecision, writeRunMetrics, writeStoryMetrics } from "./dist-VcMmfo2w.js";
|
|
5
5
|
import { basename, dirname, extname, join } from "path";
|
|
6
6
|
import { access, readFile, readdir, stat } from "fs/promises";
|
|
7
7
|
import { EventEmitter } from "node:events";
|
|
@@ -4848,7 +4848,7 @@ function createDispatcher(options) {
|
|
|
4848
4848
|
},
|
|
4849
4849
|
routingResolver: options.config?.routingResolver ?? void 0
|
|
4850
4850
|
};
|
|
4851
|
-
return new DispatcherImpl(options.eventBus, options.adapterRegistry, config);
|
|
4851
|
+
return new DispatcherImpl(options.eventBus, options.adapterRegistry, config, ...options.logger !== void 0 ? [options.logger] : []);
|
|
4852
4852
|
}
|
|
4853
4853
|
/**
|
|
4854
4854
|
* Detect the package manager / build system used in a project.
|
|
@@ -8346,19 +8346,19 @@ const TIMEOUT_RETRY_MULTIPLIER = 1.5;
|
|
|
8346
8346
|
*/
|
|
8347
8347
|
async function runProbeAuthor(deps, params) {
|
|
8348
8348
|
const start = Date.now();
|
|
8349
|
-
const { storyKey, storyFilePath, pipelineRunId, sourceAcContent, epicContent, emitEvent } = params;
|
|
8349
|
+
const { storyKey, storyFilePath, pipelineRunId, sourceAcContent, epicContent, emitEvent, bypassGates } = params;
|
|
8350
8350
|
const tokenUsage = {
|
|
8351
8351
|
input: 0,
|
|
8352
8352
|
output: 0
|
|
8353
8353
|
};
|
|
8354
|
-
if (!detectsEventDrivenAC(epicContent)) {
|
|
8354
|
+
if (bypassGates !== true && !detectsEventDrivenAC(epicContent)) {
|
|
8355
8355
|
logger$14.debug({ storyKey }, "probe-author: source AC not event-driven — skipping");
|
|
8356
8356
|
return makeSkippedResult(tokenUsage, start);
|
|
8357
8357
|
}
|
|
8358
8358
|
let storyContent;
|
|
8359
8359
|
try {
|
|
8360
8360
|
storyContent = await readFile$1(storyFilePath, "utf-8");
|
|
8361
|
-
if (/^## Runtime Probes/m.test(storyContent)) {
|
|
8361
|
+
if (bypassGates !== true && /^## Runtime Probes/m.test(storyContent)) {
|
|
8362
8362
|
logger$14.info({ storyKey }, "probe-author: story artifact already has ## Runtime Probes — skipping");
|
|
8363
8363
|
return makeSkippedResult(tokenUsage, start);
|
|
8364
8364
|
}
|
|
@@ -45150,5 +45150,5 @@ function registerRunCommand(program, _version = "0.0.0", projectRoot = process.c
|
|
|
45150
45150
|
}
|
|
45151
45151
|
|
|
45152
45152
|
//#endregion
|
|
45153
|
-
export { AdapterTelemetryPersistence, AppError, DoltRepoMapMetaRepository, DoltSymbolRepository, ERR_REPO_MAP_STORAGE_WRITE, EpicIngester, GitClient, GrammarLoader, RepoMapInjector, RepoMapModule, RepoMapQueryEngine, RepoMapStorage, SymbolParser, createContextCompiler, createDispatcher, createEventEmitter, createImplementationOrchestrator, createPackLoader, createPhaseOrchestrator, createStopAfterGate, createTelemetryAdvisor, formatPhaseCompletionSummary, getFactoryRunSummaries, getScenarioResultsForRun, getTwinRunsForRun, listGraphRuns, normalizeGraphSummaryToStatus, registerExportCommand, registerFactoryCommand, registerRunCommand, registerScenariosCommand, resolveMaxReviewCycles, resolveStoryKeys, runAnalysisPhase, runPlanningPhase, runRunAction, runSolutioningPhase, validateStopAfterFromConflict, wireNdjsonEmitter };
|
|
45154
|
-
//# sourceMappingURL=run-
|
|
45153
|
+
export { AdapterTelemetryPersistence, AppError, DoltRepoMapMetaRepository, DoltSymbolRepository, ERR_REPO_MAP_STORAGE_WRITE, EpicIngester, GitClient, GrammarLoader, RepoMapInjector, RepoMapModule, RepoMapQueryEngine, RepoMapStorage, SymbolParser, createContextCompiler, createDispatcher, createEventEmitter, createImplementationOrchestrator, createPackLoader, createPhaseOrchestrator, createStopAfterGate, createTelemetryAdvisor, formatPhaseCompletionSummary, getFactoryRunSummaries, getScenarioResultsForRun, getTwinRunsForRun, listGraphRuns, normalizeGraphSummaryToStatus, registerExportCommand, registerFactoryCommand, registerRunCommand, registerScenariosCommand, resolveMaxReviewCycles, resolveStoryKeys, runAnalysisPhase, runPlanningPhase, runProbeAuthor, runRunAction, runSolutioningPhase, validateStopAfterFromConflict, wireNdjsonEmitter };
|
|
45154
|
+
//# sourceMappingURL=run-Dhxrf7Nj.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createVersionManager } from "./dist-
|
|
1
|
+
import { createVersionManager } from "./dist-VcMmfo2w.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-CF4__LCr.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import "./dist-
|
|
1
|
+
import "./dist-VcMmfo2w.js";
|
|
2
2
|
import "./version-manager-impl-BmOWu8ml.js";
|
|
3
|
-
import { isGlobalInstall, registerUpgradeCommand, runUpgradeCommand } from "./upgrade-
|
|
3
|
+
import { isGlobalInstall, registerUpgradeCommand, runUpgradeCommand } from "./upgrade-CF4__LCr.js";
|
|
4
4
|
|
|
5
5
|
export { isGlobalInstall, registerUpgradeCommand, runUpgradeCommand };
|
package/package.json
CHANGED
package/packs/bmad/manifest.yaml
CHANGED
|
@@ -224,6 +224,12 @@ prompts:
|
|
|
224
224
|
# Test plan prompt (Story 25-7)
|
|
225
225
|
test-plan: prompts/test-plan.md
|
|
226
226
|
test-expansion: prompts/test-expansion.md
|
|
227
|
+
# Probe-author phase (Epic 60 Phase 2 — Story 60-12; manifest registration
|
|
228
|
+
# repaired in v0.20.38 / Story 60-14g after the eval harness surfaced that
|
|
229
|
+
# `pack.getPrompt('probe-author')` had been throwing since Sprint 13,
|
|
230
|
+
# causing runProbeAuthor to silently return template_load_failed in every
|
|
231
|
+
# production dispatch).
|
|
232
|
+
probe-author: prompts/probe-author.md
|
|
227
233
|
|
|
228
234
|
constraints:
|
|
229
235
|
create-story: constraints/create-story.yaml
|
|
@@ -142,13 +142,27 @@ Author runtime probes for the story described above. Use the AC sections provide
|
|
|
142
142
|
|
|
143
143
|
## Output Contract
|
|
144
144
|
|
|
145
|
-
Emit a single `yaml` fenced block containing
|
|
145
|
+
Emit a single `yaml` fenced block containing **TWO TOP-LEVEL FIELDS**:
|
|
146
|
+
|
|
147
|
+
1. `result: success` (when probes were authored) or `result: failed` (when no useful probes could be derived from the AC — empty `probes:` list expected)
|
|
148
|
+
2. `probes:` — a list of probe entries conforming to `RuntimeProbeListSchema`
|
|
149
|
+
|
|
150
|
+
Do not emit any other content after the yaml block. Do not emit a bare list at the YAML root — the parser requires the `result` + `probes` envelope.
|
|
146
151
|
|
|
147
152
|
```yaml
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
153
|
+
result: success
|
|
154
|
+
probes:
|
|
155
|
+
- name: example-probe
|
|
156
|
+
sandbox: host
|
|
157
|
+
command: echo "hello world"
|
|
158
|
+
expect_stdout_regex:
|
|
159
|
+
- 'hello world'
|
|
160
|
+
description: example probe showing output contract shape
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
When the AC has no runtime-testable behaviors (e.g., pure TypeScript types or test-only stories), emit:
|
|
164
|
+
|
|
165
|
+
```yaml
|
|
166
|
+
result: success
|
|
167
|
+
probes: []
|
|
154
168
|
```
|