@delete101020/aidlc 4.0.17 → 4.0.19

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 (2) hide show
  1. package/dist/bundle.js +66 -24
  2. package/package.json +1 -1
package/dist/bundle.js CHANGED
@@ -19695,7 +19695,10 @@ var require_FollowUpHookSchema = __commonJS({
19695
19695
  if (!Array.isArray(produces)) {
19696
19696
  return false;
19697
19697
  }
19698
- return produces.some((p) => typeof p === "string" && path17.posix.basename(p.replace(/\\/g, "/")) === exports2.FOLLOW_UPS_FILE);
19698
+ return produces.some((entry) => {
19699
+ const p = entry && typeof entry === "object" ? entry.path : entry;
19700
+ return typeof p === "string" && path17.posix.basename(p.replace(/\\/g, "/")) === exports2.FOLLOW_UPS_FILE;
19701
+ });
19699
19702
  }
19700
19703
  function collectFollowUpHookIssues(raw) {
19701
19704
  const issues = [];
@@ -19761,7 +19764,8 @@ var require_WorkspaceSchema = __commonJS({
19761
19764
  "use strict";
19762
19765
  Object.defineProperty(exports2, "__esModule", { value: true });
19763
19766
  exports2.WorkspaceValidationError = exports2.WorkspaceSchema = void 0;
19764
- exports2.normalizeStep = normalizeStep3;
19767
+ exports2.normalizeStep = normalizeStep4;
19768
+ exports2.producesEntries = producesEntries;
19765
19769
  exports2.stepAgentId = stepAgentId3;
19766
19770
  exports2.stepDagId = stepDagId;
19767
19771
  exports2.collectWorkspaceRefIssues = collectWorkspaceRefIssues3;
@@ -19831,6 +19835,13 @@ var require_WorkspaceSchema = __commonJS({
19831
19835
  pipeline: zod_1.z.string().min(1)
19832
19836
  })
19833
19837
  ]);
19838
+ var ProducesEntrySchema = zod_1.z.union([
19839
+ zod_1.z.string().min(1),
19840
+ zod_1.z.object({
19841
+ path: zod_1.z.string().min(1),
19842
+ optional: zod_1.z.boolean().default(false)
19843
+ }).strict()
19844
+ ]);
19834
19845
  var PipelineStepObjectSchema = zod_1.z.object({
19835
19846
  agent: zod_1.z.string().min(1),
19836
19847
  /** Display name for the step. Falls back to the agent id when omitted. */
@@ -19848,8 +19859,12 @@ var require_WorkspaceSchema = __commonJS({
19848
19859
  * `depends_on` it, which the runner cannot tell from an oversight.
19849
19860
  */
19850
19861
  optional: zod_1.z.boolean().default(false),
19851
- /** Artifact paths the step is expected to produce. Checked after work. */
19852
- produces: zod_1.z.array(zod_1.z.string().min(1)).default([]),
19862
+ /**
19863
+ * Artifact paths the step is expected to produce. Checked after work —
19864
+ * except entries marked `{ path, optional: true }`, which are listed when
19865
+ * present and never block mark-done when absent.
19866
+ */
19867
+ produces: zod_1.z.array(ProducesEntrySchema).default([]),
19853
19868
  /**
19854
19869
  * Optional content markers asserted against the `produces` files after
19855
19870
  * they pass the existence check. Each marker must appear (plain substring)
@@ -19975,13 +19990,14 @@ var require_WorkspaceSchema = __commonJS({
19975
19990
  */
19976
19991
  gates: zod_1.z.record(zod_1.z.string(), RecipeGateSchema).optional()
19977
19992
  });
19978
- function normalizeStep3(step) {
19993
+ function normalizeStep4(step) {
19979
19994
  if (typeof step === "string") {
19980
19995
  return {
19981
19996
  agent: step,
19982
19997
  enabled: true,
19983
19998
  optional: false,
19984
19999
  produces: [],
20000
+ produces_optional: [],
19985
20001
  produces_contains: [],
19986
20002
  requires: [],
19987
20003
  depends_on: [],
@@ -19991,7 +20007,19 @@ var require_WorkspaceSchema = __commonJS({
19991
20007
  }
19992
20008
  const obj = step;
19993
20009
  const requires = Array.isArray(obj.requires) ? obj.requires : [];
19994
- const produces = Array.isArray(obj.produces) ? obj.produces : [];
20010
+ const produces = [];
20011
+ const produces_optional = [];
20012
+ for (const entry of Array.isArray(obj.produces) ? obj.produces : []) {
20013
+ if (typeof entry === "string") {
20014
+ produces.push(entry);
20015
+ } else if (entry && typeof entry === "object" && typeof entry.path === "string") {
20016
+ const e = entry;
20017
+ produces.push(e.path);
20018
+ if (e.optional === true) {
20019
+ produces_optional.push(e.path);
20020
+ }
20021
+ }
20022
+ }
19995
20023
  const produces_contains = Array.isArray(obj.produces_contains) ? obj.produces_contains : [];
19996
20024
  const depends_on = Array.isArray(obj.depends_on) ? obj.depends_on : [];
19997
20025
  const skills = Array.isArray(obj.skills) ? obj.skills.map(String).filter((s) => s.length > 0) : typeof obj.skill === "string" && obj.skill.length > 0 ? [obj.skill] : void 0;
@@ -20008,6 +20036,7 @@ var require_WorkspaceSchema = __commonJS({
20008
20036
  enabled: typeof obj.enabled === "boolean" ? obj.enabled : true,
20009
20037
  optional: obj.optional === true,
20010
20038
  produces,
20039
+ produces_optional,
20011
20040
  produces_contains,
20012
20041
  requires,
20013
20042
  depends_on,
@@ -20018,6 +20047,10 @@ var require_WorkspaceSchema = __commonJS({
20018
20047
  ...git && { git }
20019
20048
  };
20020
20049
  }
20050
+ function producesEntries(norm) {
20051
+ const optional = new Set(norm.produces_optional);
20052
+ return norm.produces.map((p) => optional.has(p) ? { path: p, optional: true } : p);
20053
+ }
20021
20054
  function stepAgentId3(step) {
20022
20055
  if (typeof step === "string") {
20023
20056
  return step;
@@ -20028,7 +20061,7 @@ var require_WorkspaceSchema = __commonJS({
20028
20061
  return "";
20029
20062
  }
20030
20063
  function stepDagId(step) {
20031
- const norm = normalizeStep3(step);
20064
+ const norm = normalizeStep4(step);
20032
20065
  return norm.name ?? norm.agent;
20033
20066
  }
20034
20067
  function collectWorkspaceRefIssues3(config) {
@@ -20048,7 +20081,7 @@ var require_WorkspaceSchema = __commonJS({
20048
20081
  }
20049
20082
  for (const pipeline of config.pipelines) {
20050
20083
  for (const step of pipeline.steps) {
20051
- const norm = normalizeStep3(step);
20084
+ const norm = normalizeStep4(step);
20052
20085
  const id = norm.name ?? norm.agent;
20053
20086
  if (!agentIds.has(norm.agent)) {
20054
20087
  issues.push({
@@ -20352,7 +20385,7 @@ var require_PipelineAssembler = __commonJS({
20352
20385
  agent: norm.agent,
20353
20386
  name: norm.name ?? id,
20354
20387
  enabled: norm.enabled,
20355
- produces: norm.produces,
20388
+ produces: (0, WorkspaceSchema_1.producesEntries)(norm),
20356
20389
  requires: norm.requires,
20357
20390
  depends_on,
20358
20391
  auto_review,
@@ -20677,7 +20710,7 @@ ${raw.slice(0, 200)}`);
20677
20710
  agent: norm.agent,
20678
20711
  name: norm.name ?? a.phase,
20679
20712
  enabled: norm.enabled,
20680
- produces: norm.produces,
20713
+ produces: (0, WorkspaceSchema_1.producesEntries)(norm),
20681
20714
  requires: norm.requires,
20682
20715
  depends_on: anchor ? [anchor] : usesDag && steps.length > 0 ? [(0, WorkspaceSchema_1.stepDagId)(steps[steps.length - 1])] : [],
20683
20716
  auto_review: norm.auto_review,
@@ -21198,11 +21231,15 @@ var require_PipelineRunner = __commonJS({
21198
21231
  if (missingRequires.length > 0) {
21199
21232
  throw new PipelineRunError3(`Step "${step.agent}" is blocked \u2014 required upstream artifacts are missing.`, missingRequires);
21200
21233
  }
21201
- const resolvedProduces = norm.produces.map((p) => (0, RunState_1.resolvePath)(p, state.context));
21234
+ const optionalProduces = new Set(norm.produces_optional);
21235
+ const resolvedProduces = [];
21202
21236
  const missing = [];
21203
- for (const rel of resolvedProduces) {
21237
+ for (const p of norm.produces) {
21238
+ const rel = (0, RunState_1.resolvePath)(p, state.context);
21204
21239
  const abs = path17.isAbsolute(rel) ? rel : path17.join(workspaceRoot, rel);
21205
- if (!fs14.existsSync(abs)) {
21240
+ if (fs14.existsSync(abs)) {
21241
+ resolvedProduces.push(rel);
21242
+ } else if (!optionalProduces.has(p)) {
21206
21243
  missing.push(rel);
21207
21244
  }
21208
21245
  }
@@ -25260,7 +25297,7 @@ var require_PlanGenerator = __commonJS({
25260
25297
  Object.defineProperty(exports2, "__esModule", { value: true });
25261
25298
  exports2.generatePlan = generatePlan;
25262
25299
  exports2.renderPlanMarkdown = renderPlanMarkdown;
25263
- function normalizeStep3(step) {
25300
+ function normalizeStep4(step) {
25264
25301
  if (typeof step === "string") {
25265
25302
  return { name: step };
25266
25303
  }
@@ -25376,7 +25413,7 @@ var require_PlanGenerator = __commonJS({
25376
25413
  }
25377
25414
  function generatePlan(epicId, context, pipeline, workspace) {
25378
25415
  const complexity = inferScopeComplexity(context.scope);
25379
- const steps = (pipeline.steps || []).map(normalizeStep3);
25416
+ const steps = (pipeline.steps || []).map(normalizeStep4);
25380
25417
  const agentCountPerPhase = allocateAgentCount(complexity, steps.length);
25381
25418
  const phaseAllocations = steps.map((step) => {
25382
25419
  const agentId = step.agent || "unknown";
@@ -33273,13 +33310,13 @@ var require_dist = __commonJS({
33273
33310
  "../core/dist/index.js"(exports2) {
33274
33311
  "use strict";
33275
33312
  Object.defineProperty(exports2, "__esModule", { value: true });
33276
- exports2.followUpEpicId = exports2.renderIntentMarkdown = exports2.openFollowUpEpic = exports2.openIncidentEpic = exports2.SignalParseError = exports2.isSignal = exports2.parseSignal = exports2.SignalSchema = exports2.EpicStepEditError = exports2.resolveStepRef = exports2.describeGateEffect = exports2.commitEpicStepEdit = exports2.planSetEpicStepGates = exports2.planRemoveEpicStep = exports2.planAddEpicStep = exports2.EpicWorkflowSwitchError = exports2.canSwitchEpicWorkflow = exports2.epicWorkflowLock = exports2.applyEpicWorkflowSwitch = exports2.stageEpicWorkflowSwitch = exports2.planEpicWorkflowSwitch = exports2.EpicDescriptionError = exports2.setEpicDescription = exports2.lockedEpicDirError = exports2.EpicScaffoldError = exports2.epicsRoot = exports2.mapStepStatusToEpic = exports2.mirrorRunStateToEpic = exports2.scaffoldEpic = exports2.resolveArtifactCommitConfig = exports2.commitApprovedArtifacts = exports2.PipelineAdaptError = exports2.applyAdaptation = exports2.parseAdaptationVerdict = exports2.buildAdaptationPrompt = exports2.buildPhaseCatalog = exports2.slugEpicId = exports2.parseClassificationVerdict = exports2.buildClassificationPrompt = exports2.heuristicClassify = exports2.PipelineAssembleError = exports2.recipePipelineId = exports2.assemblePipeline = exports2.collectWorkspaceRefIssues = exports2.stepDagId = exports2.stepAgentId = exports2.normalizeStep = exports2.WorkspaceValidationError = exports2.validateWorkspace = exports2.WorkspaceSchema = void 0;
33277
- exports2.epicPipelinePath = exports2.EPIC_PIPELINE_FILENAME = exports2.unusedAfterStepRemoval = exports2.skillReferences = exports2.agentReferences = exports2.renameSkillRefs = exports2.renameAgentRefs = exports2.dropRecipesForPipeline = exports2.dropRecipeStep = exports2.recipesDrawingFrom = exports2.WORKSPACE_DIR = exports2.WORKSPACE_FILENAME = exports2.WorkspaceParseError = exports2.WorkspaceNotFoundError = exports2.WorkspaceLoader = exports2.renderPlanMarkdown = exports2.generatePlan = exports2.collectContext = exports2.followUpHookFailures = exports2.pendingFollowUpDone = exports2.applyFollowUpHookRun = exports2.trackFollowUpChildren = exports2.writeFollowUpHookLedger = exports2.readFollowUpHookLedger = exports2.followUpHookLedgerPath = exports2.runFollowUpHook = exports2.fillFollowUpHookCommand = exports2.resolveFollowUpHooks = exports2.epicPipelineId = exports2.FOLLOW_UP_HOOK_TIMEOUT_MS = exports2.FOLLOW_UP_HOOKS_LEDGER = exports2.stepProducesFollowUps = exports2.collectFollowUpHookIssues = exports2.FOLLOW_UP_HOOK_PLACEHOLDERS = exports2.FOLLOW_UP_HOOK_KEYS = exports2.FOLLOW_UP_INTENT = exports2.FOLLOW_UPS_FILE = exports2.openManifestFollowUp = exports2.followUpChildId = exports2.followUpsOf = exports2.readEpicFollowUps = exports2.parseFollowUps = exports2.FollowUpsParseError = exports2.FollowUpManifestSchema = exports2.FollowUpItemSchema = exports2.SIGNAL_FILE = exports2.FOLLOW_UP_ARTIFACT = exports2.readEpicSignal = exports2.existingEpicIds = exports2.followUpIdFor = void 0;
33278
- exports2.commandBodyIsStale = exports2.readEpicTags = exports2.normalizeTags = exports2.normalizeTag = exports2.epicMatchesTags = exports2.applyTagEdit = exports2.MAX_TAG_LENGTH = exports2.EPIC_TAGS_KEY = exports2.strictModeSection = exports2.resolveEpicStrictMode = exports2.epicStrictMode = exports2.commandBodyPredatesStrictMode = exports2.STRICT_MODE_KEY = exports2.STRICT_MODE_HEADING = exports2.writeUserEpicIdPrefix = exports2.userConfigPath = exports2.readUserConfig = exports2.readGitUserName = exports2.ensureUserConfigIgnored = exports2.USER_CONFIG_RELPATH = exports2.USER_CONFIG_IGNORE_LINE = exports2.suggestEpicId = exports2.resolveEpicIdPrefixChain = exports2.resolveEpicIdPrefix = exports2.epicIdDateStamp = exports2.deriveEpicIdPrefix = exports2.EPIC_ID_PREFIX_PATTERN = exports2.EPIC_ID_PREFIX_KEY = exports2.resolveArtifactLanguage = exports2.commandBodyPredatesArtifactLanguage = exports2.artifactLanguageSection = exports2.ARTIFACT_LANGUAGE_HEADING = exports2.stripPersonaDirectives = exports2.composeAgentPrompt = exports2.PROJECT_INSTRUCTION_FILES = exports2.findProjectInstructions = exports2.stripPersonaMetadata = exports2.PersonaLoader = exports2.SkillNotFoundError = exports2.SkillLoader = exports2.EnvVarMissingError = exports2.EnvResolver = exports2.epicPipelineReport = exports2.planEpicPipelineExtraction = exports2.epicOwningPipeline = exports2.unstageEpicPipeline = exports2.stageEpicPipeline = exports2.writeEpicPipelines = exports2.splitEpicPipelines = exports2.mergeEpicPipelines = void 0;
33279
- exports2.checkBudget = exports2.weighStepProgress = exports2.isActiveStatus = exports2.isStepOptional = exports2.isRunComplete = exports2.deriveRunProgress = exports2.PipelineRunError = exports2.retryAutoReview = exports2.submitAutoReviewVerdict = exports2.dirtyUpstreamOf = exports2.rerunApprovedStep = exports2.canRerunApprovedStep = exports2.requestStepUpdate = exports2.rerunStep = exports2.rejectStep = exports2.approveStep = exports2.undoStepDone = exports2.canUndoStepDone = exports2.markStepDone = exports2.canStartStep = exports2.startRun = exports2.activateBackendFromWorkspace = exports2.activateRunStateBackend = exports2.resolveRunStateBackend = exports2.GitRunStateStore = exports2.RUN_ID_PATTERN = exports2.FileRunStateStore = exports2.RunStateStore = exports2.harnessCapabilities = exports2.NO_HARNESS_CAPABILITIES = exports2.RunnerValidationError = exports2.validateRunnerExport = exports2.CustomRunnerLoader = exports2.buildClaudeSpawnEnv = exports2.hasClaudeLogin = exports2.isInsideClaudeCodeSession = exports2.createJsonSink = exports2.createLineSink = exports2.isCodexMcpConfigured = exports2.codexConfigPath = exports2.readProjectMcpServer = exports2.mcpRegistrarFor = exports2.codexMcpRegistrar = exports2.claudeMcpRegistrar = exports2.CodexRunner = exports2.DefaultRunner = exports2.RunnerRegistry = exports2.targetPath = exports2.scopePaths = exports2.discoverAssets = void 0;
33280
- exports2.uninstallWorkflowGlobalsByIds = exports2.isWorkflowGloballyInstalled = exports2.installWorkflowGlobalsByIds = exports2.installGlobalDefaults = exports2.resolveProviderModel = exports2.isClaudeTierAlias = exports2.CLAUDE_TIER_ALIASES = exports2.FAST_MODEL = exports2.CODING_MODEL = exports2.PLANNING_MODEL = exports2.isBuiltinPreset = exports2.BUILTIN_PRESET_IDS = exports2.writeBuiltinAutoReviewValidators = exports2.resolvePrimaryStack = exports2.getSdlcArtifactTemplates = exports2.getBuiltinArtifactTemplates = exports2.phaseArtifactFileName = exports2.sdlcClaudeCommand = exports2.builtinClaudeCommand = exports2.loadAllBuiltinPresets = exports2.loadBuiltinPreset = exports2.planRecipeMigration = exports2.getBuiltinRecipeSummaries = exports2.getAllBuiltinPipelineSummaries = exports2.getSdlcBuiltinPipelineSummary = exports2.getBuiltinPipelineSummary = exports2.getBuiltinWorkflowByPipelineId = exports2.getBuiltinWorkflow = exports2.workflowSlug = exports2.builtinTemplatesRoot = exports2.pipelineCommandId = exports2.PHASES = exports2.BUILTIN_WORKFLOWS = exports2.withBackfilledStepNames = exports2.describeDrift = exports2.reconcileRunSteps = exports2.RUN_STATE_SCHEMA_VERSION = exports2.migrateRunState = exports2.stepIdentity = exports2.resolvePath = exports2.AutoReviewerError = exports2.runAutoReview = exports2.renderRunReport = exports2.verifyRun = exports2.runExecLoop = exports2.estimateCostUsd = exports2.providerAliases = exports2.ratesFromConfig = exports2.mergeRates = exports2.BUILTIN_RATES = void 0;
33281
- exports2.resolveCommand = exports2.remapClaudePath = exports2.claudeConfigEnv = exports2.claudeJsonPath = exports2.isDefaultClaudeConfigDir = exports2.claudeConfigDir = exports2.resolveClaudeConfigDir = exports2.defaultClaudeConfigDir = exports2.getClaudeConfigDirOverride = exports2.setClaudeConfigDir = exports2.resolveDeclaredPath = exports2.expandHome = exports2.ProfileLoadError = exports2.UnknownStandardError = exports2.builtinProfiles = exports2.loadActiveProfile = exports2.loadProfile = exports2.listProfileManifests = exports2.resolveStandard = exports2.workspaceStandard = exports2.isBuiltinProfileId = exports2.ProfileSchema = exports2.TRACE_RULES = exports2.PROFILES_DIR = exports2.DEFAULT_PROFILE_ID = exports2.BUILTIN_PROFILE_IDS = exports2.setEpicMemoryHook = exports2.isEpicMemoryHookEnabled = exports2.installAnnotationTools = exports2.relativeEpicRoot = exports2.provisionDeclaredWorkflows = exports2.provisionWorkflowFiles = exports2.writeWorkflowArtifactTemplates = exports2.writeWorkflowCommands = exports2.provisionShortcutDocs = exports2.writeTwoLayerCommands = exports2.shortcutCommandDoc = exports2.backboneCommandDoc = exports2.unprovisionedPhases = exports2.nextEligiblePhase = exports2.resolveComposition = exports2.shortcutCommandId = exports2.getCanonicalPhase = exports2.isCanonicalPhase = exports2.BACKBONE_COMMAND_ID = exports2.CANONICAL_PHASE_IDS = exports2.CANONICAL_PHASES = exports2.renderTemplate = exports2.DEFAULT_GLOBAL_WORKFLOW_IDS = exports2.detectGlobalBuiltinSource = void 0;
33282
- exports2.AIDLC_CORE_VERSION = exports2.AIDLC_CLI_GUIDE_TEXT = exports2.AIDLC_KNOWLEDGE = exports2.clearResolveCommandCache = void 0;
33313
+ exports2.renderIntentMarkdown = exports2.openFollowUpEpic = exports2.openIncidentEpic = exports2.SignalParseError = exports2.isSignal = exports2.parseSignal = exports2.SignalSchema = exports2.EpicStepEditError = exports2.resolveStepRef = exports2.describeGateEffect = exports2.commitEpicStepEdit = exports2.planSetEpicStepGates = exports2.planRemoveEpicStep = exports2.planAddEpicStep = exports2.EpicWorkflowSwitchError = exports2.canSwitchEpicWorkflow = exports2.epicWorkflowLock = exports2.applyEpicWorkflowSwitch = exports2.stageEpicWorkflowSwitch = exports2.planEpicWorkflowSwitch = exports2.EpicDescriptionError = exports2.setEpicDescription = exports2.lockedEpicDirError = exports2.EpicScaffoldError = exports2.epicsRoot = exports2.mapStepStatusToEpic = exports2.mirrorRunStateToEpic = exports2.scaffoldEpic = exports2.resolveArtifactCommitConfig = exports2.commitApprovedArtifacts = exports2.PipelineAdaptError = exports2.applyAdaptation = exports2.parseAdaptationVerdict = exports2.buildAdaptationPrompt = exports2.buildPhaseCatalog = exports2.slugEpicId = exports2.parseClassificationVerdict = exports2.buildClassificationPrompt = exports2.heuristicClassify = exports2.PipelineAssembleError = exports2.recipePipelineId = exports2.assemblePipeline = exports2.collectWorkspaceRefIssues = exports2.stepDagId = exports2.stepAgentId = exports2.producesEntries = exports2.normalizeStep = exports2.WorkspaceValidationError = exports2.validateWorkspace = exports2.WorkspaceSchema = void 0;
33314
+ exports2.EPIC_PIPELINE_FILENAME = exports2.unusedAfterStepRemoval = exports2.skillReferences = exports2.agentReferences = exports2.renameSkillRefs = exports2.renameAgentRefs = exports2.dropRecipesForPipeline = exports2.dropRecipeStep = exports2.recipesDrawingFrom = exports2.WORKSPACE_DIR = exports2.WORKSPACE_FILENAME = exports2.WorkspaceParseError = exports2.WorkspaceNotFoundError = exports2.WorkspaceLoader = exports2.renderPlanMarkdown = exports2.generatePlan = exports2.collectContext = exports2.followUpHookFailures = exports2.pendingFollowUpDone = exports2.applyFollowUpHookRun = exports2.trackFollowUpChildren = exports2.writeFollowUpHookLedger = exports2.readFollowUpHookLedger = exports2.followUpHookLedgerPath = exports2.runFollowUpHook = exports2.fillFollowUpHookCommand = exports2.resolveFollowUpHooks = exports2.epicPipelineId = exports2.FOLLOW_UP_HOOK_TIMEOUT_MS = exports2.FOLLOW_UP_HOOKS_LEDGER = exports2.stepProducesFollowUps = exports2.collectFollowUpHookIssues = exports2.FOLLOW_UP_HOOK_PLACEHOLDERS = exports2.FOLLOW_UP_HOOK_KEYS = exports2.FOLLOW_UP_INTENT = exports2.FOLLOW_UPS_FILE = exports2.openManifestFollowUp = exports2.followUpChildId = exports2.followUpsOf = exports2.readEpicFollowUps = exports2.parseFollowUps = exports2.FollowUpsParseError = exports2.FollowUpManifestSchema = exports2.FollowUpItemSchema = exports2.SIGNAL_FILE = exports2.FOLLOW_UP_ARTIFACT = exports2.readEpicSignal = exports2.existingEpicIds = exports2.followUpIdFor = exports2.followUpEpicId = void 0;
33315
+ exports2.readEpicTags = exports2.normalizeTags = exports2.normalizeTag = exports2.epicMatchesTags = exports2.applyTagEdit = exports2.MAX_TAG_LENGTH = exports2.EPIC_TAGS_KEY = exports2.strictModeSection = exports2.resolveEpicStrictMode = exports2.epicStrictMode = exports2.commandBodyPredatesStrictMode = exports2.STRICT_MODE_KEY = exports2.STRICT_MODE_HEADING = exports2.writeUserEpicIdPrefix = exports2.userConfigPath = exports2.readUserConfig = exports2.readGitUserName = exports2.ensureUserConfigIgnored = exports2.USER_CONFIG_RELPATH = exports2.USER_CONFIG_IGNORE_LINE = exports2.suggestEpicId = exports2.resolveEpicIdPrefixChain = exports2.resolveEpicIdPrefix = exports2.epicIdDateStamp = exports2.deriveEpicIdPrefix = exports2.EPIC_ID_PREFIX_PATTERN = exports2.EPIC_ID_PREFIX_KEY = exports2.resolveArtifactLanguage = exports2.commandBodyPredatesArtifactLanguage = exports2.artifactLanguageSection = exports2.ARTIFACT_LANGUAGE_HEADING = exports2.stripPersonaDirectives = exports2.composeAgentPrompt = exports2.PROJECT_INSTRUCTION_FILES = exports2.findProjectInstructions = exports2.stripPersonaMetadata = exports2.PersonaLoader = exports2.SkillNotFoundError = exports2.SkillLoader = exports2.EnvVarMissingError = exports2.EnvResolver = exports2.epicPipelineReport = exports2.planEpicPipelineExtraction = exports2.epicOwningPipeline = exports2.unstageEpicPipeline = exports2.stageEpicPipeline = exports2.writeEpicPipelines = exports2.splitEpicPipelines = exports2.mergeEpicPipelines = exports2.epicPipelinePath = void 0;
33316
+ exports2.weighStepProgress = exports2.isActiveStatus = exports2.isStepOptional = exports2.isRunComplete = exports2.deriveRunProgress = exports2.PipelineRunError = exports2.retryAutoReview = exports2.submitAutoReviewVerdict = exports2.dirtyUpstreamOf = exports2.rerunApprovedStep = exports2.canRerunApprovedStep = exports2.requestStepUpdate = exports2.rerunStep = exports2.rejectStep = exports2.approveStep = exports2.undoStepDone = exports2.canUndoStepDone = exports2.markStepDone = exports2.canStartStep = exports2.startRun = exports2.activateBackendFromWorkspace = exports2.activateRunStateBackend = exports2.resolveRunStateBackend = exports2.GitRunStateStore = exports2.RUN_ID_PATTERN = exports2.FileRunStateStore = exports2.RunStateStore = exports2.harnessCapabilities = exports2.NO_HARNESS_CAPABILITIES = exports2.RunnerValidationError = exports2.validateRunnerExport = exports2.CustomRunnerLoader = exports2.buildClaudeSpawnEnv = exports2.hasClaudeLogin = exports2.isInsideClaudeCodeSession = exports2.createJsonSink = exports2.createLineSink = exports2.isCodexMcpConfigured = exports2.codexConfigPath = exports2.readProjectMcpServer = exports2.mcpRegistrarFor = exports2.codexMcpRegistrar = exports2.claudeMcpRegistrar = exports2.CodexRunner = exports2.DefaultRunner = exports2.RunnerRegistry = exports2.targetPath = exports2.scopePaths = exports2.discoverAssets = exports2.commandBodyIsStale = void 0;
33317
+ exports2.isWorkflowGloballyInstalled = exports2.installWorkflowGlobalsByIds = exports2.installGlobalDefaults = exports2.resolveProviderModel = exports2.isClaudeTierAlias = exports2.CLAUDE_TIER_ALIASES = exports2.FAST_MODEL = exports2.CODING_MODEL = exports2.PLANNING_MODEL = exports2.isBuiltinPreset = exports2.BUILTIN_PRESET_IDS = exports2.writeBuiltinAutoReviewValidators = exports2.resolvePrimaryStack = exports2.getSdlcArtifactTemplates = exports2.getBuiltinArtifactTemplates = exports2.phaseArtifactFileName = exports2.sdlcClaudeCommand = exports2.builtinClaudeCommand = exports2.loadAllBuiltinPresets = exports2.loadBuiltinPreset = exports2.planRecipeMigration = exports2.getBuiltinRecipeSummaries = exports2.getAllBuiltinPipelineSummaries = exports2.getSdlcBuiltinPipelineSummary = exports2.getBuiltinPipelineSummary = exports2.getBuiltinWorkflowByPipelineId = exports2.getBuiltinWorkflow = exports2.workflowSlug = exports2.builtinTemplatesRoot = exports2.pipelineCommandId = exports2.PHASES = exports2.BUILTIN_WORKFLOWS = exports2.withBackfilledStepNames = exports2.describeDrift = exports2.reconcileRunSteps = exports2.RUN_STATE_SCHEMA_VERSION = exports2.migrateRunState = exports2.stepIdentity = exports2.resolvePath = exports2.AutoReviewerError = exports2.runAutoReview = exports2.renderRunReport = exports2.verifyRun = exports2.runExecLoop = exports2.estimateCostUsd = exports2.providerAliases = exports2.ratesFromConfig = exports2.mergeRates = exports2.BUILTIN_RATES = exports2.checkBudget = void 0;
33318
+ exports2.remapClaudePath = exports2.claudeConfigEnv = exports2.claudeJsonPath = exports2.isDefaultClaudeConfigDir = exports2.claudeConfigDir = exports2.resolveClaudeConfigDir = exports2.defaultClaudeConfigDir = exports2.getClaudeConfigDirOverride = exports2.setClaudeConfigDir = exports2.resolveDeclaredPath = exports2.expandHome = exports2.ProfileLoadError = exports2.UnknownStandardError = exports2.builtinProfiles = exports2.loadActiveProfile = exports2.loadProfile = exports2.listProfileManifests = exports2.resolveStandard = exports2.workspaceStandard = exports2.isBuiltinProfileId = exports2.ProfileSchema = exports2.TRACE_RULES = exports2.PROFILES_DIR = exports2.DEFAULT_PROFILE_ID = exports2.BUILTIN_PROFILE_IDS = exports2.setEpicMemoryHook = exports2.isEpicMemoryHookEnabled = exports2.installAnnotationTools = exports2.relativeEpicRoot = exports2.provisionDeclaredWorkflows = exports2.provisionWorkflowFiles = exports2.writeWorkflowArtifactTemplates = exports2.writeWorkflowCommands = exports2.provisionShortcutDocs = exports2.writeTwoLayerCommands = exports2.shortcutCommandDoc = exports2.backboneCommandDoc = exports2.unprovisionedPhases = exports2.nextEligiblePhase = exports2.resolveComposition = exports2.shortcutCommandId = exports2.getCanonicalPhase = exports2.isCanonicalPhase = exports2.BACKBONE_COMMAND_ID = exports2.CANONICAL_PHASE_IDS = exports2.CANONICAL_PHASES = exports2.renderTemplate = exports2.DEFAULT_GLOBAL_WORKFLOW_IDS = exports2.detectGlobalBuiltinSource = exports2.uninstallWorkflowGlobalsByIds = void 0;
33319
+ exports2.AIDLC_CORE_VERSION = exports2.AIDLC_CLI_GUIDE_TEXT = exports2.AIDLC_KNOWLEDGE = exports2.clearResolveCommandCache = exports2.resolveCommand = void 0;
33283
33320
  var WorkspaceSchema_1 = require_WorkspaceSchema();
33284
33321
  Object.defineProperty(exports2, "WorkspaceSchema", { enumerable: true, get: function() {
33285
33322
  return WorkspaceSchema_1.WorkspaceSchema;
@@ -33293,6 +33330,9 @@ var require_dist = __commonJS({
33293
33330
  Object.defineProperty(exports2, "normalizeStep", { enumerable: true, get: function() {
33294
33331
  return WorkspaceSchema_1.normalizeStep;
33295
33332
  } });
33333
+ Object.defineProperty(exports2, "producesEntries", { enumerable: true, get: function() {
33334
+ return WorkspaceSchema_1.producesEntries;
33335
+ } });
33296
33336
  Object.defineProperty(exports2, "stepAgentId", { enumerable: true, get: function() {
33297
33337
  return WorkspaceSchema_1.stepAgentId;
33298
33338
  } });
@@ -42924,7 +42964,7 @@ var require_package = __commonJS({
42924
42964
  "package.json"(exports2, module2) {
42925
42965
  module2.exports = {
42926
42966
  name: "@delete101020/aidlc",
42927
- version: "4.0.17",
42967
+ version: "4.0.19",
42928
42968
  description: "AIDLC Native CLI, a fork of AIDLC \u2014 drive Claude through the six-stage AI-Native SDLC Playbook: Plan \u2192 Design \u2192 Build \u2192 Test \u2192 Deploy \u2192 Maintain, with artifact gates, requirements traceability, an incident loop back to Plan, and Spec Kit support.",
42929
42969
  license: "MIT",
42930
42970
  repository: {
@@ -47377,7 +47417,9 @@ ${id}`));
47377
47417
  steps.forEach((step, i) => {
47378
47418
  const agent = typeof step === "string" ? step : String(step.agent ?? "?");
47379
47419
  const review = step.human_review ? import_chalk8.default.yellow(" [review]") : "";
47380
- const prod = Array.isArray(step.produces) && step.produces.length ? import_chalk8.default.dim(` \u2192 ${step.produces.join(", ")}`) : "";
47420
+ const norm = (0, import_core10.normalizeStep)(step);
47421
+ const optional = new Set(norm.produces_optional);
47422
+ const prod = norm.produces.length ? import_chalk8.default.dim(` \u2192 ${norm.produces.map((p) => optional.has(p) ? `${p} (optional)` : p).join(", ")}`) : "";
47381
47423
  console.log(` ${import_chalk8.default.dim(String(i + 1) + ".")} ${import_chalk8.default.bold(agent)}${review}${prod}`);
47382
47424
  });
47383
47425
  console.log();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@delete101020/aidlc",
3
- "version": "4.0.17",
3
+ "version": "4.0.19",
4
4
  "description": "AIDLC Native CLI, a fork of AIDLC — drive Claude through the six-stage AI-Native SDLC Playbook: Plan → Design → Build → Test → Deploy → Maintain, with artifact gates, requirements traceability, an incident loop back to Plan, and Spec Kit support.",
5
5
  "license": "MIT",
6
6
  "repository": {