@ornexus/neocortex 4.60.44 → 4.60.45

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 (31) hide show
  1. package/dist/sbom.cdx.json +23 -23
  2. package/install.js +16 -1
  3. package/install.ps1 +57 -401
  4. package/install.sh +30 -37
  5. package/package.json +2 -2
  6. package/packages/client/dist/runner/headless/run-yoloop.d.ts +9 -0
  7. package/packages/client/dist/runner/headless/run-yoloop.js +2 -2
  8. package/packages/client/dist/yoloop/index.d.ts +1 -1
  9. package/packages/client/dist/yoloop/invoke-hooks.js +10 -8
  10. package/packages/client/dist/yoloop/shared-yoloop-types.d.ts +61 -0
  11. package/packages/client/dist/yoloop/yoloop-client-state-store.d.ts +23 -0
  12. package/packages/client/dist/yoloop/yoloop-client-state-store.js +1 -1
  13. package/packages/shared/dist/invocation/index.js +9 -2
  14. package/targets-stubs/antigravity/gemini.md +1 -1
  15. package/targets-stubs/antigravity/install-antigravity.sh +10 -101
  16. package/targets-stubs/antigravity/skill/SKILL.md +1 -1
  17. package/targets-stubs/claude-code/neocortex-root.agent.yaml +1 -1
  18. package/targets-stubs/claude-code/neocortex-root.md +2 -2
  19. package/targets-stubs/claude-code/neocortex.agent.yaml +1 -1
  20. package/targets-stubs/claude-code/neocortex.md +2 -2
  21. package/targets-stubs/codex/AGENTS.md +1 -1
  22. package/targets-stubs/codex/install-codex.sh +4 -1
  23. package/targets-stubs/cursor/agent.md +2 -2
  24. package/targets-stubs/cursor/install-cursor.sh +4 -1
  25. package/targets-stubs/gemini-cli/agent.md +2 -2
  26. package/targets-stubs/gemini-cli/install-gemini.sh +4 -1
  27. package/targets-stubs/grok/install-grok.sh +4 -1
  28. package/targets-stubs/lib/mcp-merge.js +220 -20
  29. package/targets-stubs/opencode/neocortex-root.md +1 -1
  30. package/targets-stubs/vscode/install-vscode.sh +4 -1
  31. package/targets-stubs/vscode/neocortex.agent.md +2 -2
package/install.sh CHANGED
@@ -4,7 +4,7 @@
4
4
  # Development Orchestrator
5
5
 
6
6
  # Versao do instalador
7
- VERSION="4.60.44"
7
+ VERSION="4.60.45"
8
8
 
9
9
  # Flags
10
10
  MIGRATION_DETECTED=false
@@ -1115,36 +1115,8 @@ install_core() {
1115
1115
  # =============================================================================
1116
1116
 
1117
1117
  install_skills() {
1118
- local errors=0
1119
-
1120
- SKILLS_DIR="${CLAUDE_DIR}/skills"
1121
- SKILLS_DEST="${SKILLS_DIR}/neocortex"
1122
- SKILLS_SOURCE="${SOURCE_DIR}/core/skills"
1123
-
1124
- # Thin-client: skills delivered by remote server, never copied
1125
1118
  ok "Skills: delivered by remote server"
1126
1119
  return 0
1127
-
1128
- mkdir -p "$SKILLS_DIR" 2>/dev/null || { fail "Falha ao criar $SKILLS_DIR"; return 1; }
1129
-
1130
- # Clean previous
1131
- [ -d "$SKILLS_DEST" ] && rm -rf "$SKILLS_DEST" 2>/dev/null
1132
-
1133
- if cp -r "$SKILLS_SOURCE" "$SKILLS_DEST" 2>/dev/null; then
1134
- # Count skills
1135
- local skill_count=0
1136
- for skill_file in "$SKILLS_DEST"/step-skills/*/*.md "$SKILLS_DEST"/domain-skills/*/*.md; do
1137
- if [ -f "$skill_file" ] && [[ "$(basename "$skill_file")" != "_template.md" ]]; then
1138
- ((skill_count++))
1139
- fi
1140
- done
1141
- ok "Skills instaladas ${DIM}($skill_count skills) [modo local]${NC}"
1142
- else
1143
- fail "Falha ao copiar skills"
1144
- ((errors++))
1145
- fi
1146
-
1147
- return $errors
1148
1120
  }
1149
1121
 
1150
1122
  # =============================================================================
@@ -1224,7 +1196,12 @@ install_targets() {
1224
1196
  if managed_copy_file "$opencode_target/neocortex.md" "$opencode_home/agents/neocortex.md" "profile-opencode-neocortex" "$HOME" && \
1225
1197
  managed_copy_file "$opencode_target/neocortex-root.md" "$opencode_home/agents/neocortex-root.md" "profile-opencode-neocortex-root" "$HOME"; then
1226
1198
  if [ -f "$opencode_target/opencode-mcp.json" ] && command -v node >/dev/null 2>&1; then
1227
- node "$SOURCE_DIR/targets-stubs/lib/mcp-merge.js" json "$opencode_target/opencode-mcp.json" "$opencode_home/opencode.json" mcp OPENCODE || true
1199
+ if ! node "$SOURCE_DIR/targets-stubs/lib/mcp-merge.js" json "$opencode_target/opencode-mcp.json" "$opencode_home/opencode.json" mcp OPENCODE; then
1200
+ target_results+=("$target:FAIL")
1201
+ ((target_errors++))
1202
+ warn "opencode ${DIM}(MCP semantic merge bloqueado; config preservada)${NC}"
1203
+ continue
1204
+ fi
1228
1205
  fi
1229
1206
  target_results+=("$target:OK")
1230
1207
  ((target_count++))
@@ -1254,7 +1231,10 @@ install_targets() {
1254
1231
  managed_copy_file "$kimi_target/neocortex.md" "$kimi_code_home/agents/neocortex.md" "profile-kimi-neocortex" "$kimi_code_home" || kimi_ok=1
1255
1232
  managed_copy_file "$kimi_target/neocortex.md" "$HOME/.agents/agents/neocortex.md" "profile-kimi-shared-agent" "$HOME" || kimi_ok=1
1256
1233
  if [ -f "$kimi_target/mcp.json" ] && command -v node >/dev/null 2>&1; then
1257
- node "$SOURCE_DIR/targets-stubs/lib/mcp-merge.js" json "$kimi_target/mcp.json" "$kimi_home/mcp.json" mcpServers KIMI || true
1234
+ if ! node "$SOURCE_DIR/targets-stubs/lib/mcp-merge.js" json "$kimi_target/mcp.json" "$kimi_home/mcp.json" mcpServers KIMI; then
1235
+ kimi_ok=1
1236
+ warn "kimi ${DIM}(MCP semantic merge bloqueado; config preservada)${NC}"
1237
+ fi
1258
1238
  fi
1259
1239
  if [ $kimi_ok -eq 0 ]; then
1260
1240
  target_results+=("$target:OK")
@@ -1763,12 +1743,6 @@ create_project_dirs() {
1763
1743
  "$project_dir/docs/epics" \
1764
1744
  "$project_dir/docs/proposals" 2>/dev/null
1765
1745
 
1766
- # Copy state template if needed
1767
- if [ ! -f "$project_dir/.neocortex/state.json" ]; then
1768
- [ -f "$SOURCE_DIR/core/data/state-template.json" ] && \
1769
- cp "$SOURCE_DIR/core/data/state-template.json" "$project_dir/.neocortex/state.json"
1770
- fi
1771
-
1772
1746
  # Thin-client: never copy core/ to project
1773
1747
 
1774
1748
  # Install target-specific files
@@ -1980,6 +1954,25 @@ main() {
1980
1954
  SELECTED_TARGETS="claude-code"
1981
1955
  fi
1982
1956
 
1957
+ # Stable semantic canonicalization: aliases and duplicates must never
1958
+ # install the same global MCP surface twice.
1959
+ local canonical_targets=""
1960
+ local seen_targets=" "
1961
+ local -a requested_targets
1962
+ local requested_target canonical_target
1963
+ IFS=',' read -r -a requested_targets <<< "$SELECTED_TARGETS"
1964
+ for requested_target in "${requested_targets[@]}"; do
1965
+ requested_target="$(printf '%s' "$requested_target" | xargs)"
1966
+ [ "$requested_target" = "gemini-cli" ] && canonical_target="gemini" || canonical_target="$requested_target"
1967
+ [ -z "$canonical_target" ] && continue
1968
+ case "$seen_targets" in
1969
+ *" $canonical_target "*) continue ;;
1970
+ esac
1971
+ seen_targets="$seen_targets$canonical_target "
1972
+ [ -z "$canonical_targets" ] && canonical_targets="$canonical_target" || canonical_targets="$canonical_targets,$canonical_target"
1973
+ done
1974
+ SELECTED_TARGETS="$canonical_targets"
1975
+
1983
1976
  debug "Targets: $SELECTED_TARGETS"
1984
1977
 
1985
1978
  # Read user tier for platform gating
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ornexus/neocortex",
3
- "version": "4.60.44",
4
- "description": "Neocortex v4.60.44 - Orquestrador de Desenvolvimento de Epics & Stories para Claude Code",
3
+ "version": "4.60.45",
4
+ "description": "Neocortex v4.60.45 - Orquestrador de Desenvolvimento de Epics & Stories para Claude Code",
5
5
  "keywords": [
6
6
  "claude",
7
7
  "claude-code",
@@ -15,6 +15,15 @@ export declare const DEFAULT_HEADLESS_YOLOOP_MAX_ITERATIONS = 20;
15
15
  export declare const DEFAULT_HEADLESS_YOLOOP_MAX_DURATION_MS: number;
16
16
  export declare const DEFAULT_HEADLESS_YOLOOP_LOCAL_CONCURRENCY_CAP = 1;
17
17
  export declare const MAX_HEADLESS_YOLOOP_LOCAL_CONCURRENCY_CAP = 10;
18
+ /**
19
+ * Resolve the absent-override default from physical capacity. The explicit CLI
20
+ * option remains authoritative; this resolver is injectable for deterministic
21
+ * Node 18 fallback tests.
22
+ */
23
+ export declare function resolveDefaultHeadlessYoloopLocalConcurrencyCap(input?: {
24
+ readonly availableParallelism?: number;
25
+ readonly cpuCount?: number;
26
+ }): number;
18
27
  export declare const RUN_YOLOOP_DRIVER_STATES: readonly ["start", "lifecycle_evidence", "metadata_parse", "child_story_delegation", "reinvoke", "git_reconciliation", "terminal_git", "complete", "aborted", "backoff"];
19
28
  export type RunYoloopDriverState = (typeof RUN_YOLOOP_DRIVER_STATES)[number];
20
29
  export interface RunYoloopRootInvokeInput {
@@ -1,4 +1,4 @@
1
- import{createHash as Ee,randomBytes as Re}from"node:crypto";import{spawn as ve}from"node:child_process";import{existsSync as Pe}from"node:fs";import{dirname as Te,join as ye}from"node:path";import{fileURLToPath as xe}from"node:url";import{AUTONOMOUS_GOVERNANCE_EVIDENCE_TAG as we,AUTONOMOUS_GOVERNANCE_REASON_CODES as he,autonomousGovernanceMetadata as Le,buildAutonomousGovernanceEnvelope as De,readAutonomousGovernanceEnvelopeFromMetadata as Me,recordAutonomousGovernance as Ne}from"../../continuity/autonomous-governance.js";import{createDefaultHeadlessAdapterRegistry as je}from"./adapters.js";import{loadHeadlessRuntimeDefaults as He,resolveHeadlessRuntime as ze}from"./resolver.js";import{DEFAULT_HEADLESS_EXECUTION_BACKOFF_MS as Ke,DEFAULT_HEADLESS_EXECUTION_LEASE_MS as $e,DEFAULT_HEADLESS_EXECUTION_LIMIT as Be,DEFAULT_HEADLESS_EXECUTION_MAX_ATTEMPTS as Ue,DEFAULT_HEADLESS_EXECUTION_STALE_LEASE_AFTER_MS as Fe,DEFAULT_HEADLESS_EXECUTION_TIMEOUT_MS as Ye,headlessExecutionEntityId as V,runYoloExecutionPhase as Ve}from"./run-yolo.js";import{HEADLESS_REASON_CODES as p,boundPublicSummary as ie,hashPublicValue as w,redaction as _}from"./types.js";import{validatePhasedYoloopPlan as qe}from"./prepared-story-bundle.js";import{createAnchoredContinuousStoryCommandRunner as We,createBranchlessContinuousStoryWorkspaceManager as Ge}from"./continuous-story-workspace.js";import{executeEpicGitReconciliation as Xe,executeEpicTerminalGit as Ze}from"./epic-terminal-git-runner.js";import{createCliEpicTerminalGitAdapter as Je}from"./epic-terminal-git-cli-adapter.js";import{acquireGitLifecyclePhysicalIntegrationLock as Qe,releaseGitLifecyclePhysicalIntegrationLock as et}from"../../git/git-lifecycle-store.js";import{normalizeContinuousWriteRef as tt}from"../../../../shared/dist/yoloop/wave-decision-receipt.js";const ot=20,rt=1800*1e3,_e=1,at=10,uo=Object.freeze(["start","lifecycle_evidence","metadata_parse","child_story_delegation","reinvoke","git_reconciliation","terminal_git","complete","aborted","backoff"]),de=/^docs\/epics\/epic-[A-Za-z0-9._-]+\.md$/,nt=/^docs\/stories\/[A-Za-z0-9._-]+\.story\.md$/,ce=/^\*yolo @docs\/stories\/[A-Za-z0-9._-]+\.story\.md(?: branchless-preparation)?$/,st=/^\*yolo @docs\/stories\/[A-Za-z0-9._-]+\.story\.md branchless-preparation$/,it=/^(?:\uFEFF)?---(?:\r?\n)/,dt=/^[A-Za-z0-9][A-Za-z0-9._:-]{0,159}$/,q=/(?:[;&|`$<>]|\$\(|\n|\r|\0)/,te=/(raw[_-]?(?:logs?|payloads?)|std(?:out|err)|stack(?:[_-]?trace)?|transcript|objective(?:[_-]?(?:text|body|prompt))|prompt(?:[_-]?(?:body|text))?|private[_-]?(?:urls?|prompts?)|secret|token|password|protected(?:[_-]?(?:field|body|bodies|internals))?|workflow(?:[_-]?body)?|step(?:[_-]?body)?|customer(?:[_-]?(?:pii|data))?|\bpii\b|authorization|api[_-]?key|license[_-]?key|argv|args|executable(?:[_-]?path)?|binary(?:[_-]?path)?|shell|cwd|command[_-]?path|vendor(?:[_-]?(?:payload|corpus|response|output)))/i,L=/(https?:\/\/\S+|(?:^|\s)(?:\/(?:home|Users|media|mnt|tmp|var|etc|private)\/\S+|[A-Za-z]:\\\S+)|ghp_[A-Za-z0-9_]+|sk-[A-Za-z0-9_-]+|-----BEGIN [A-Z ]*PRIVATE KEY-----|authorization\s*:|password\s*=|token\s*=|api[_-]?key\s*=|license[_-]?key\s*=|raw[_-]?(?:logs?)\s*[:=]|transcript|stack\s*trace|stderr:|stdout:|system prompt|workflow body|step body|PROTECTED_|PRIVATE_INTERNALS|CUSTOMER_PII|\bPII\b|VENDOR_CORPUS|P190[_-]?SYNTHETIC[_-]?(?:HEADLESS|CONTINUITY))/i,ct=new Set(["no_private_prompt_or_history","no_raw_vendor_corpus","no_unrelated_story_context"]);function Ce(e){return it.test(e)||e.includes("@neocortex")||e.includes("*yoloop")||q.test(e)||L.test(e)}function po(e){return!Ce(e)&&ce.test(e)}const lt=new Set(["schemaVersion","contractVersion","kind","commandClass","jobId","operationId","idempotencyKey","targetKind","targetRef","commandRef","epicId","runtime","publicSummary","reasonCode","attempts","metadata","redactionSummary","publicSafe"]),ut=new Set(["runtimeId","modelId","source","reasonCode","publicSafe"]),pt="job-aborted",mt="max-iterations-reached",ft="max-duration-reached",yt=new Set(["git-lifecycle-integration-backpressure","git-lifecycle-integration-lock-failed","git-lifecycle-integration-lock-release-failed"]);async function ht(e,t){const o=Te(xe(import.meta.url)),a=ye(o,"../../commands/invoke.js"),r=Pe(a)?a:ye(o,"../../../dist/commands/invoke.js");return new Promise(s=>{const n=ve(process.execPath,["--input-type=module","-e",`
1
+ import{createHash as Te,randomBytes as we}from"node:crypto";import{spawn as xe}from"node:child_process";import{existsSync as Le}from"node:fs";import*as _e from"node:os";import{dirname as De,join as Ce}from"node:path";import{fileURLToPath as Me}from"node:url";import{AUTONOMOUS_GOVERNANCE_EVIDENCE_TAG as Ne,AUTONOMOUS_GOVERNANCE_REASON_CODES as Ie,autonomousGovernanceMetadata as He,buildAutonomousGovernanceEnvelope as je,readAutonomousGovernanceEnvelopeFromMetadata as ze,recordAutonomousGovernance as Be}from"../../continuity/autonomous-governance.js";import{createDefaultHeadlessAdapterRegistry as Ke}from"./adapters.js";import{loadHeadlessRuntimeDefaults as Ue,resolveHeadlessRuntime as $e}from"./resolver.js";import{DEFAULT_HEADLESS_EXECUTION_BACKOFF_MS as Fe,DEFAULT_HEADLESS_EXECUTION_LEASE_MS as Ye,DEFAULT_HEADLESS_EXECUTION_LIMIT as Ve,DEFAULT_HEADLESS_EXECUTION_MAX_ATTEMPTS as qe,DEFAULT_HEADLESS_EXECUTION_STALE_LEASE_AFTER_MS as We,DEFAULT_HEADLESS_EXECUTION_TIMEOUT_MS as Ge,headlessExecutionEntityId as V,runYoloExecutionPhase as Xe}from"./run-yolo.js";import{HEADLESS_REASON_CODES as p,boundPublicSummary as de,hashPublicValue as L,redaction as _}from"./types.js";import{validatePhasedYoloopPlan as Ze}from"./prepared-story-bundle.js";import{createAnchoredContinuousStoryCommandRunner as Je,createBranchlessContinuousStoryWorkspaceManager as Qe}from"./continuous-story-workspace.js";import{executeEpicGitReconciliation as et,executeEpicTerminalGit as tt}from"./epic-terminal-git-runner.js";import{createCliEpicTerminalGitAdapter as ot}from"./epic-terminal-git-cli-adapter.js";import{acquireGitLifecyclePhysicalIntegrationLock as rt,releaseGitLifecyclePhysicalIntegrationLock as at}from"../../git/git-lifecycle-store.js";import{normalizeContinuousWriteRef as nt}from"../../../../shared/dist/yoloop/wave-decision-receipt.js";const st=20,it=1800*1e3,ce=1,Se=10;function be(e={}){let o=e.availableParallelism;if(o===void 0){const t=_e.availableParallelism;if(typeof t=="function")try{o=t()}catch{o=void 0}}if(!Number.isFinite(o)||(o??0)<1){const t=e.cpuCount??(()=>{try{return _e.cpus().length}catch{return ce}})();o=Number.isFinite(t)&&t>0?t:ce}return $(o??ce,1,Se)}const ho=Object.freeze(["start","lifecycle_evidence","metadata_parse","child_story_delegation","reinvoke","git_reconciliation","terminal_git","complete","aborted","backoff"]),le=/^docs\/epics\/epic-[A-Za-z0-9._-]+\.md$/,dt=/^docs\/stories\/[A-Za-z0-9._-]+\.story\.md$/,ue=/^\*yolo @docs\/stories\/[A-Za-z0-9._-]+\.story\.md(?: branchless-preparation)?$/,ct=/^\*yolo @docs\/stories\/[A-Za-z0-9._-]+\.story\.md branchless-preparation$/,lt=/^(?:\uFEFF)?---(?:\r?\n)/,ut=/^[A-Za-z0-9][A-Za-z0-9._:-]{0,159}$/,q=/(?:[;&|`$<>]|\$\(|\n|\r|\0)/,oe=/(raw[_-]?(?:logs?|payloads?)|std(?:out|err)|stack(?:[_-]?trace)?|transcript|objective(?:[_-]?(?:text|body|prompt))|prompt(?:[_-]?(?:body|text))?|private[_-]?(?:urls?|prompts?)|secret|token|password|protected(?:[_-]?(?:field|body|bodies|internals))?|workflow(?:[_-]?body)?|step(?:[_-]?body)?|customer(?:[_-]?(?:pii|data))?|\bpii\b|authorization|api[_-]?key|license[_-]?key|argv|args|executable(?:[_-]?path)?|binary(?:[_-]?path)?|shell|cwd|command[_-]?path|vendor(?:[_-]?(?:payload|corpus|response|output)))/i,D=/(https?:\/\/\S+|(?:^|\s)(?:\/(?:home|Users|media|mnt|tmp|var|etc|private)\/\S+|[A-Za-z]:\\\S+)|ghp_[A-Za-z0-9_]+|sk-[A-Za-z0-9_-]+|-----BEGIN [A-Z ]*PRIVATE KEY-----|authorization\s*:|password\s*=|token\s*=|api[_-]?key\s*=|license[_-]?key\s*=|raw[_-]?(?:logs?)\s*[:=]|transcript|stack\s*trace|stderr:|stdout:|system prompt|workflow body|step body|PROTECTED_|PRIVATE_INTERNALS|CUSTOMER_PII|\bPII\b|VENDOR_CORPUS|P190[_-]?SYNTHETIC[_-]?(?:HEADLESS|CONTINUITY))/i,pt=new Set(["no_private_prompt_or_history","no_raw_vendor_corpus","no_unrelated_story_context"]);function ge(e){return lt.test(e)||e.includes("@neocortex")||e.includes("*yoloop")||q.test(e)||D.test(e)}function _o(e){return!ge(e)&&ue.test(e)}const mt=new Set(["schemaVersion","contractVersion","kind","commandClass","jobId","operationId","idempotencyKey","targetKind","targetRef","commandRef","epicId","runtime","publicSummary","reasonCode","attempts","metadata","redactionSummary","publicSafe"]),ft=new Set(["runtimeId","modelId","source","reasonCode","publicSafe"]),yt="job-aborted",ht="max-iterations-reached",_t="max-duration-reached",Ct=new Set(["git-lifecycle-integration-backpressure","git-lifecycle-integration-lock-failed","git-lifecycle-integration-lock-release-failed"]);async function It(e,o){const t=De(Me(import.meta.url)),a=Ce(t,"../../commands/invoke.js"),r=Le(a)?a:Ce(t,"../../../dist/commands/invoke.js");return new Promise(s=>{const n=xe(process.execPath,["--input-type=module","-e",`
2
2
  import { pathToFileURL } from 'node:url';
3
3
  process.once('message', async ({ modulePath, options }) => {
4
4
  try {
@@ -7,4 +7,4 @@ import{createHash as Ee,randomBytes as Re}from"node:crypto";import{spawn as ve}f
7
7
  process.send(result, () => process.exit(0));
8
8
  } catch { process.exit(1); }
9
9
  });
10
- `],{cwd:t.projectRoot,stdio:["ignore","pipe","pipe","ipc"],windowsHide:!0});let d,i=0,c=!1;const y=setTimeout(()=>{c=!0,n.kill()},t.timeoutMs),m=f=>{i+=f.length,i>32*1024*1024&&(c=!0,n.kill())};n.stdout?.on("data",m),n.stderr?.on("data",m),n.on("message",f=>{if(d||!I(f)||typeof f.success!="boolean"||Buffer.byteLength(JSON.stringify(f))>32*1024*1024){c=!0,n.kill();return}d=f});const l={success:!1,errorCode:"headless-root-invoke-failed",error:"The isolated root metadata invocation did not complete.",exitCode:1};n.on("error",()=>{c=!0}),n.on("close",f=>{clearTimeout(y),s(f===0&&!c&&d?d:l)}),n.send({modulePath:r,options:e},f=>{f&&(c=!0,n.kill())})})}async function _t(e,t=ht){const o=Date.now(),a={args:e.args,projectRoot:e.projectRoot,format:"json",platformTarget:"runner",serverUrl:e.serverUrl,strictReadOnly:e.strictReadOnly},r=await t(a,{projectRoot:e.projectRoot,timeoutMs:e.timeoutMs});return{success:r.success,instructions:r.instructions,metadata:r.metadata,error:r.error,errorCode:r.errorCode,exitCode:r.exitCode,durationMs:Date.now()-o,publicSafe:!0}}async function mo(e){const t=e.adapterRegistry??je(),o=U(e.limit??Be,1,10),a=U(e.leaseMs??$e,1e3,3600*1e3),r=U(e.staleLeaseAfterMs??Fe,0,1440*60*1e3),s=U(e.maxAttempts??Ue,1,10),n=U(e.localConcurrencyCap??_e,1,at),d=[],i=[],c=e.now(),y=Ct({store:e.store,metadata:e.metadata,nowIso:c,maxAttempts:s,queueCap:e.queueCap});d.push(...y.reasonCodes);const m=e.store.recoverStaleHeadlessExecutionAttempts({nowIso:c,staleAfterMs:r,limit:o*2});m.recoveredAttemptIds.length>0&&(d.push(p.EXECUTION_BACKOFF),m.failedAttemptIds.length>0&&d.push(p.EXECUTION_TIMEOUT));const l=e.store.listDueHeadlessExecutionAttempts({nowIso:e.now(),limit:Math.max(o*5,10)}).filter(f=>f.directive_kind==="run_yoloop").slice(0,o);for(const f of l){const A=await It({store:e.store,projectRoot:e.projectRoot,runnerId:e.runnerId,attempt:f,registry:t,now:e.now,leaseMs:a,timeoutMs:U(e.timeoutMs??Ye,1e3,18e5),backoffMs:U(e.backoffMs??Ke,1e3,36e5),maxAttempts:s,maxIterations:U(e.maxIterations??ot,1,100),maxDurationMs:U(e.maxDurationMs??rt,1e3,72e5),localConcurrencyCap:n,queueCap:e.queueCap,adapterOptions:e.adapterOptions,runtimeDefaults:e.runtimeDefaults,runtimeFallback:e.runtimeFallback,yoloopInvoker:e.yoloopInvoker??_t,serverUrl:e.serverUrl,idFactory:e.idFactory??Vt,continuousWorkspaceManager:e.continuousWorkspaceManager??Ge(),terminalGitAdapter:e.terminalGitAdapter??Je(e.projectRoot)});i.push(A),d.push(A.reasonCode,...A.workerPoolSummary.reasonCodes)}return{ok:i.every(f=>f.outcome!=="failed")&&y.rejectedCount===0,enqueuedAttemptCount:y.enqueuedCount,dueAttemptCount:l.length,processedAttemptCount:i.filter(f=>f.outcome!=="ignored").length,recoveredAttemptIds:m.recoveredAttemptIds,receipts:i,reasonCodes:B(d.length>0?d:[p.OK]),publicSafe:!0}}function Ct(e){let t=0,o=0;const a=[];for(const r of Ht(e.metadata)){if(!I(r)||r.kind!=="run_yoloop")continue;const s=kt(r);if(!s.ok){o+=1,a.push(s.reasonCode);continue}const n=s.directive;if(!e.store.jobExists(n.jobId)){o+=1,a.push(he.BYPASS_BLOCKED);continue}const d=zt(n);if(e.store.hasCompletedHeadlessExecutionDirectiveHash(d)){a.push(p.EXECUTION_COMPLETED);continue}const i=De({autonomousKind:"run_yoloop",source:"headless-run-yoloop",targetKind:"epic",targetRef:n.targetRef,epicId:n.epicId??re(n.targetRef),jobId:n.jobId,operationSeed:n.operationId,commandHash:w(n.commandRef)}),c=Ne(e.store,i,e.nowIso,{requireExistingJob:!0});if(!c.ok){o+=1,a.push(c.reasonCode);continue}const y=V("attempt",n.idempotencyKey),m=V("exec",n.operationId),l=e.store.enqueueHeadlessExecutionAttempt({attemptId:y,executionId:m,jobId:n.jobId,directiveHash:d,directiveKind:"run_yoloop",commandClass:n.commandClass,targetKind:"epic",targetRef:n.targetRef,epicId:n.epicId??re(n.targetRef),runtimeId:n.runtime?.runtimeId,modelId:n.runtime?.modelId,runtimeSource:Yt(n.runtime?.source),reasonCode:n.reasonCode,publicSummary:n.publicSummary,enqueuedAt:e.nowIso,notBeforeAt:e.nowIso,maxAttempts:e.maxAttempts,queueCap:e.queueCap,operationId:`${n.operationId}:enqueue`,idempotencyKey:n.idempotencyKey,counts:{directives:1},hashes:{directive:d},redactionSummary:n.redactionSummary,relativePaths:[n.targetRef],metadata:Le(i,{schemaVersion:1,contractVersion:"continuity-v1",jobId:n.jobId,operationId:n.operationId,reasonCode:n.reasonCode??p.OK,targetRef:n.targetRef,directiveHash:d})});if(!l.accepted){o+=1,a.push(l.reasonCode??"queue-cap-reached");continue}l.inserted&&(t+=1),a.push(p.OK)}return{enqueuedCount:t,rejectedCount:o,reasonCodes:B(a)}}async function It(e){const t=e.now(),o=e.idFactory("lease",e.attempt.attempt_id),a=Oe(t,e.leaseMs);if(!e.store.claimHeadlessExecutionAttempt({attemptId:e.attempt.attempt_id,leaseId:o,runnerId:e.runnerId,claimedAt:t,leaseExpiresAt:a,reasonCode:p.OK}).inserted)return Mt(e.attempt,{status:e.attempt.status,receiptStatus:"ignored",reasonCode:"lease-conflict",timestamp:t});if(e.store.hasCompletedHeadlessExecutionDirectiveHash(e.attempt.directive_hash,e.attempt.attempt_id))return ue(e.store,e.attempt,{leaseId:o,runnerId:e.runnerId,status:"skipped",receiptStatus:"ignored",reasonCode:p.EXECUTION_COMPLETED,publicSummary:"Skipped duplicate run_yoloop directive because the directive hash is already completed.",completedAt:e.now(),counts:me(),hashes:{directive:e.attempt.directive_hash},redactionSummary:[],relativePaths:[e.attempt.target_ref],childStoryIds:[],stateTransitions:["start","complete"]});const n=gt(e);if(!n.ok)return ue(e.store,e.attempt,{leaseId:o,runnerId:e.runnerId,status:n.status,receiptStatus:n.receiptStatus,reasonCode:n.reasonCode,publicSummary:n.publicSummary,completedAt:e.now(),counts:me(),hashes:{directive:e.attempt.directive_hash},redactionSummary:n.redactionSummary,relativePaths:Bt(e.attempt),childStoryIds:[],stateTransitions:["start"]});const d=await St({...e,prepared:n.input}),i=Nt(e.attempt,d,e.maxAttempts,e.backoffMs,e.now()),c=i.retry?"backoff":d.status,y=i.retry?"deferred":d.receiptStatus,m=i.retry?yt.has(d.reasonCode)?d.reasonCode:p.EXECUTION_BACKOFF:d.reasonCode,l=i.retry?"Headless run_yoloop execution scheduled bounded retry after transient metadata/runtime outcome.":d.publicSummary;return ue(e.store,e.attempt,{leaseId:o,runnerId:e.runnerId,status:c,receiptStatus:y,reasonCode:m,publicSummary:l,completedAt:e.now(),durationMs:d.durationMs,notBeforeAt:i.notBeforeAt,retryCount:i.retryCount,counts:d.counts,workerPoolSummary:d.workerPoolSummary,hashes:{...d.hashes,directive:e.attempt.directive_hash},redactionSummary:d.redactionSummary,relativePaths:d.relativePaths,childStoryIds:d.childStoryIds,runtimeId:n.input.runtimeId,modelId:n.input.modelId,runtimeSource:n.input.runtimeSource,stateTransitions:d.stateTransitions})}async function St(e){const t=Date.now(),o=["start"],a=new Set,r=[],s=[],n={root:w(e.prepared.rootPrompt)},d=[_("rootPrompt","prompt_body",n.root)];let i=0,c=0,y=0,m=0,l=0,f=0,A;const u=ge(e.localConcurrencyCap),h=new Map;let D=!1;const T=new Map,H=new Map,ae=v=>{const b=v.child;n[`child-${b.storyId.replace(/[^A-Za-z0-9_.:-]/g,"-")}`]=v.commandHash,d.push(v.promptRedaction);const S=v.receipt;if(v.terminalFailure){if(v.deferredFailure){T.set(b.storyId,v.terminalFailure),u.backpressurePauseCount+=1;return}T.delete(b.storyId),H.set(b.storyId,v.terminalFailure),a.has(b.storyId)||(a.add(b.storyId),r.push(b.storyId),s.push(b.targetRef),y+=1);return}if(!S||S.outcome==="deferred"){T.set(b.storyId,v.reasonCodes.includes("queue-cap-reached")?p.WORKER_POOL_BACKPRESSURE_PAUSED:S?.reasonCode||p.EXECUTION_BACKOFF),v.reasonCodes.includes("queue-cap-reached")&&(u.backpressurePauseCount+=1);return}T.delete(b.storyId),!a.has(b.storyId)&&(a.add(b.storyId),r.push(b.storyId),s.push(b.targetRef),S.outcome==="failed"?(y+=1,H.set(b.storyId,S.reasonCode||p.EXECUTION_FAILED)):S.outcome==="ignored"?m+=1:c+=1)},J=async()=>{const v=await Promise.race([...h.entries()].map(([b,S])=>S.promise.then(K=>({storyId:b,result:K}))));h.delete(v.storyId),u.completedChildCount+=1,u.pendingChildCount=h.size,ae(v.result)};for(;;){if(i>=e.maxIterations)return o.push("backoff"),R({status:"failed",receiptStatus:"failed",reasonCode:mt,publicSummary:"Headless yoloop reached the bounded iteration limit before completion metadata.",retryable:!1,startedAt:t,counts:E(i,r.length,c,y,m,l,f),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:o});if(Date.now()-t>e.maxDurationMs)return o.push("backoff"),R({status:"failed",receiptStatus:"failed",reasonCode:ft,publicSummary:"Headless yoloop reached the bounded duration limit before completion metadata.",retryable:!1,startedAt:t,counts:E(i,r.length,c,y,m,l,f),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:o});if(e.terminalGitAdapter.prepareLifecycleEvidence){o.push("lifecycle_evidence");const g=await e.terminalGitAdapter.prepareLifecycleEvidence({epicId:e.prepared.epicId,nowIso:e.now()});if(!g.ok)return o.push("backoff"),R({status:g.retryEligible?"backoff":"failed",receiptStatus:g.retryEligible?"deferred":"failed",reasonCode:g.reasonCode,publicSummary:"Headless yoloop stopped because physical Git lifecycle evidence could not be produced safely.",retryable:g.retryEligible,startedAt:t,counts:E(i,r.length,c,y,m,l,f),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:o});A=g.p205Authority}o.push("metadata_parse");const v=await e.yoloopInvoker({projectRoot:e.projectRoot,args:e.prepared.rootPrompt,attemptId:e.attempt.attempt_id,executionId:e.attempt.execution_id,jobId:e.attempt.job_id,runnerId:e.runnerId,iteration:i,runtimeId:e.prepared.runtimeId,...e.prepared.modelId?{modelId:e.prepared.modelId}:{},timeoutMs:e.timeoutMs,serverUrl:e.serverUrl});if(v.durationMs!==void 0&&(n[`iter-${i}`]=w(String(v.durationMs))),!v.success)return o.push("backoff"),R({status:"backoff",receiptStatus:"deferred",reasonCode:p.EXECUTION_FAILED,publicSummary:"Headless yoloop root metadata invocation failed with bounded public evidence.",retryable:!0,startedAt:t,counts:E(i,r.length,c,y,m,l,f),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:o});const b=v.metadata,S=Lt(b);if(!S.ok)return o.push("backoff"),R({status:"failed",receiptStatus:"failed",reasonCode:S.reasonCode,publicSummary:S.publicSummary,retryable:!1,startedAt:t,counts:E(i,r.length,c,y,m,l,f),workerPoolSummary:k(u),hashes:n,redactions:[...d,...S.redactionSummary],relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:o});if((S.aborted||S.complete||S.replay||S.outcome&&S.outcome!=="selected"&&S.outcome!=="queue_exhausted")&&D&&h.size>0){await J(),i+=1,o.push("reinvoke");continue}if(S.aborted)return f+=1,o.push("aborted"),R({status:"failed",receiptStatus:"failed",reasonCode:pt,publicSummary:"Headless yoloop stopped because public metadata reported an aborted loop.",retryable:!1,startedAt:t,counts:E(i+1,r.length,c,y,m,l,f),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:o});if(S.outcome&&S.outcome!=="selected"&&S.outcome!=="queue_exhausted")return o.push("backoff"),R({status:"failed",receiptStatus:"failed",reasonCode:`yoloop-${S.outcome}`,publicSummary:"Headless yoloop stopped on a non-executable graph-first continuation outcome.",retryable:!1,startedAt:t,counts:E(i+1,r.length,c,y,m,l,f),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:o});if(S.replay)return o.push("backoff"),R({status:"backoff",receiptStatus:"deferred",reasonCode:"yoloop-replay-pending",publicSummary:"Headless yoloop observed pending replay authority and did not delegate a second child.",retryable:!0,startedAt:t,counts:E(i+1,r.length,c,y,m,l,f),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:o});if(S.complete&&D&&T.size>0&&H.size===0)return o.push("backoff"),R({status:"backoff",receiptStatus:"deferred",reasonCode:[...T.values()].sort()[0],publicSummary:"Headless yoloop rejected terminal completion while previously runnable work remained undispatched.",retryable:!0,startedAt:t,counts:E(i+1,r.length,c,y,m,l,f),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:o});if(S.complete&&D&&H.size>0)return o.push("backoff"),R({status:"failed",receiptStatus:"failed",reasonCode:[...H.values()].sort()[0],publicSummary:"Headless yoloop rejected terminal completion because runnable work failed before an accepted dispatch receipt.",retryable:!1,startedAt:t,counts:E(i+1,r.length,c,y,m,l,f),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:o});const K=xt(b);if(K){o.push("terminal_git");const g=new Date,x=await Qe(e.projectRoot,{kind:"continuous",storyId:K.epicId,sessionId:`${e.runnerId}:${e.attempt.attempt_id}`,idempotencyKey:K.idempotencyKey,persistent:!1,expiresAt:new Date(g.getTime()+Math.max(e.timeoutMs,e.maxDurationMs)+6e4).toISOString()});if(!x.ok)return o.push("backoff"),R({status:"backoff",receiptStatus:"deferred",reasonCode:x.reasonCode,publicSummary:"Headless yoloop deferred terminal Git while another physical writer retained authority.",retryable:!0,startedAt:t,counts:E(i+1,r.length,c,y,m,l,f),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:o});let z,j=!1;try{z=await Ze(K,e.terminalGitAdapter,e.now,A)}finally{j=await et(x.path,x.owner).catch(()=>!1)}if(!j)return o.push("backoff"),R({status:"backoff",receiptStatus:"deferred",reasonCode:"git-lifecycle-integration-lock-release-failed",publicSummary:"Headless yoloop stopped because terminal Git writer ownership could not be released safely.",retryable:!0,startedAt:t,counts:E(i+1,r.length,c,y,m,l,f),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:o});if(n[`terminal-git-${i}`]=w(`${z.receipt.idempotencyKey}:${z.receipt.physicalStatus}`),!z.ok){const M=z.receipt.retryEligible;return o.push("backoff"),R({status:M?"backoff":"failed",receiptStatus:M?"deferred":"failed",reasonCode:z.reasonCodes[0]??"epic-terminal-git-failed",publicSummary:"Headless yoloop stopped at the epic terminal Git boundary with public-safe retry evidence.",retryable:M,startedAt:t,counts:E(i+1,r.length,c,y,m,l,f),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:o})}if(S.complete)return l+=1,o.push("complete"),R({status:"completed",receiptStatus:"applied",reasonCode:p.EXECUTION_COMPLETED,publicSummary:"Headless yoloop completed only after fresh root-owned physical Git verification.",retryable:!1,startedAt:t,counts:E(i+1,r.length,c,y,m,l,f),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:o});i+=1,o.push("reinvoke");continue}if(S.complete)return l+=1,o.push("complete"),R({status:"completed",receiptStatus:"applied",reasonCode:p.EXECUTION_COMPLETED,publicSummary:"Headless yoloop completed after public metadata reported yoloopComplete.",retryable:!1,startedAt:t,counts:E(i+1,r.length,c,y,m,l,f),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:o});const Q=wt(b);if(Q){o.push("git_reconciliation");const g=await Xe(Q,e.terminalGitAdapter,e.now);if(n[`git-reconciliation-${i}`]=w(`${Q.idempotencyKey}:${g.reasonCodes.join(",")}`),!g.ok)return o.push("backoff"),R({status:"backoff",receiptStatus:"deferred",reasonCode:g.reasonCodes[0]??"git-reconciliation-failed",publicSummary:"Headless yoloop paused at a fail-closed Git reconciliation boundary.",retryable:!0,startedAt:t,counts:E(i+1,r.length,c,y,m,l,f),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:o})}const C=Ot(b,e.prepared.epicId);if(!C.ok)return o.push("backoff"),R({status:"failed",receiptStatus:"failed",reasonCode:C.reasonCode,publicSummary:C.publicSummary,retryable:!1,startedAt:t,counts:E(i+1,r.length,c,y,m,l,f),workerPoolSummary:k(u),hashes:n,redactions:[...d,...C.redactionSummary],relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:o});const F=C.continuous?void 0:C.prompts.find(g=>a.has(g.storyId));if(F)return o.push("backoff"),R({status:"failed",receiptStatus:"failed",reasonCode:p.YOLOOP_ISOLATION_VIOLATION,publicSummary:"Headless yoloop rejected cyclic child story delegation evidence.",retryable:!1,startedAt:t,counts:E(i+1,r.length,c,y,m,l,f),workerPoolSummary:k(u),hashes:n,redactions:[...d,_("storyId","prompt_body",w(F.storyId))],relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:o});if(u.mode=C.mode==="continuous_dag"?"continuous_dag":C.parallelAuthorized?"parallel_wave":"serial",u.serverMaxConcurrency=C.serverMaxConcurrency,C.continuous){D=!0;const g=C.prompts.filter(x=>!a.has(x.storyId)&&!h.has(x.storyId));if(u.pendingChildCount=g.length+h.size,g.length>0){const x=Se({store:e.store,nowIso:e.now(),localCap:e.localConcurrencyCap,serverMaxConcurrency:C.serverMaxConcurrency,parallelAuthorized:!0,continuous:!0,eligibleCount:g.length});if(u.queueCap=x.queueCap,u.availableLeases=x.availableLeases,u.effectiveConcurrency=x.effectiveConcurrency,u.reasonCodes.push(x.reasonCode),x.effectiveConcurrency===0&&h.size===0)return u.backpressurePauseCount+=1,o.push("backoff"),R({status:"backoff",receiptStatus:"deferred",reasonCode:p.WORKER_POOL_BACKPRESSURE_PAUSED,publicSummary:"Headless yoloop retained its eligible frontier while physical worker capacity was unavailable.",retryable:!0,startedAt:t,counts:E(i+1,r.length,c,y,m,l,f),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:o});const z=g.slice(0,x.effectiveConcurrency);o.push("child_story_delegation");for(const j of z)h.set(j.storyId,{child:j,promise:Ie({...e,child:j,iteration:i})});u.startedChildCount+=z.length,u.peakConcurrency=Math.max(u.peakConcurrency,h.size),u.pendingChildCount=g.length-z.length+h.size}if(h.size>0)await J();else{if(T.size>0)return o.push("backoff"),R({status:"backoff",receiptStatus:"deferred",reasonCode:[...T.values()].sort()[0],publicSummary:"Headless yoloop retained deferred continuous work for a bounded retry.",retryable:!0,startedAt:t,counts:E(i+1,r.length,c,y,m,l,f),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:o});if(H.size>0)return o.push("backoff"),R({status:"failed",receiptStatus:"failed",reasonCode:[...H.values()].sort()[0],publicSummary:"Headless yoloop completed independent work and stopped on the remaining failed dependency closure.",retryable:!1,startedAt:t,counts:E(i+1,r.length,c,y,m,l,f),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:o})}i+=1,o.push("reinvoke");continue}u.pendingChildCount=C.prompts.length;const Y=[...C.prompts];for(;Y.length>0;){const g=Se({store:e.store,nowIso:e.now(),localCap:e.localConcurrencyCap,serverMaxConcurrency:C.serverMaxConcurrency,parallelAuthorized:C.parallelAuthorized,continuous:!1,eligibleCount:Y.length});if(u.queueCap=g.queueCap,u.availableLeases=g.availableLeases,u.effectiveConcurrency=g.effectiveConcurrency,u.reasonCodes.push(g.reasonCode),g.effectiveConcurrency===0)return u.backpressurePauseCount+=1,u.pendingChildCount=Y.length,o.push("backoff"),R({status:"backoff",receiptStatus:"deferred",reasonCode:p.WORKER_POOL_BACKPRESSURE_PAUSED,publicSummary:"Headless yoloop paused child workers because bounded queue or lease capacity was unavailable.",retryable:!0,startedAt:t,counts:E(i+1,r.length,c,y,m,l,f),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:o});const x=Y.splice(0,g.effectiveConcurrency);u.startedChildCount+=x.length,u.peakConcurrency=Math.max(u.peakConcurrency,x.length),u.pendingChildCount=Y.length,o.push("child_story_delegation");const z=await Promise.all(x.map(M=>Ie({...e,child:M,iteration:i})));u.completedChildCount+=z.length;let j;for(const M of z){const ne=M.child;n[`child-${ne.storyId.replace(/[^A-Za-z0-9_.:-]/g,"-")}`]=M.commandHash,d.push(M.promptRedaction),r.push(ne.storyId),s.push(ne.targetRef),a.add(ne.storyId);const ee=M.receipt;if(!ee){M.reasonCodes.includes("queue-cap-reached")?(u.backpressurePauseCount+=1,u.pendingChildCount+=1,u.reasonCodes.push(p.WORKER_POOL_BACKPRESSURE_PAUSED),j??={kind:"deferred",reasonCode:p.WORKER_POOL_BACKPRESSURE_PAUSED}):(y+=1,j??={kind:"missing",reasonCode:p.EXECUTION_FAILED});continue}if(ee.outcome==="deferred"){j??={kind:"deferred",reasonCode:p.EXECUTION_BACKOFF};continue}if(ee.outcome==="failed"){y+=1,j??={kind:"failed",reasonCode:ee.reasonCode||p.EXECUTION_FAILED};continue}ee.outcome==="ignored"?m+=1:c+=1}if(j){const M=j.kind==="deferred";return R({status:M?"backoff":"failed",receiptStatus:M?"deferred":"failed",reasonCode:j.reasonCode,publicSummary:j.kind==="missing"?"Headless yoloop child story delegation did not produce a public receipt.":M?"Headless yoloop child story delegated bounded backoff to the root attempt.":"Headless yoloop child story execution failed with public receipt evidence.",retryable:M,startedAt:t,counts:E(i+1,r.length,c,y,m,l,f),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:o})}}i+=1,o.push("reinvoke")}}async function Ie(e){const t=e.child.dispatchId?await e.continuousWorkspaceManager.prepare({projectRoot:e.projectRoot,epicId:e.prepared.epicId,storyId:e.child.storyId,targetRef:e.child.targetRef,dispatchId:e.child.dispatchId,executionBranch:e.child.executionBranch??"",graphRevision:e.child.graphRevision??"",authorizedWriteSet:e.child.writeSet??[]}):void 0;if(t&&!t.ok)return{child:e.child,reasonCodes:[t.reasonCode],commandHash:w(e.child.commandRef),promptRedaction:_(`child.${e.child.storyId}`,"prompt_body",w(e.child.commandRef)),terminalFailure:t.reasonCode,deferredFailure:/backpressure|lease-active/.test(t.reasonCode)};const o=e.projectRoot,a=t?.ok?We(t.value):e.adapterOptions?.commandRunner,r=Dt({rootAttempt:e.attempt,child:e.child,iteration:e.iteration,runtimeId:e.prepared.runtimeId,modelId:e.prepared.modelId,runtimeSource:e.prepared.runtimeSource}),s=V("attempt",r.idempotencyKey);let n=!!t;try{const d=await Ve({store:e.store,projectRoot:o,runnerId:e.runnerId,now:e.now,metadata:{continuityExecutionDirectives:[r]},adapterRegistry:e.registry,adapterOptions:{...e.adapterOptions,cwd:o,env:{...e.adapterOptions?.env,...t?.ok?{NEOCORTEX_BRANCHLESS_PROJECT_ROOT:t.value.workspacePath,NEOCORTEX_BRANCHLESS_ROOT_AUTHORITY:JSON.stringify(e.child.rootAuthority)}:{}},...a?{commandRunner:a,versionRunner:a}:{}},runtimeDefaults:e.runtimeDefaults,runtimeFallback:e.runtimeFallback,timeoutMs:e.timeoutMs,maxAttempts:1,limit:1,queueCap:e.queueCap,attemptIds:[s],idFactory:e.idFactory}),i=d.receipts.find(c=>c.attemptId===s)??d.receipts[0];if(t?.ok&&i&&i.outcome!=="failed"&&i.outcome!=="deferred"){const c=await e.continuousWorkspaceManager.integrate(t.value,{receiptRefs:[`continuity:${i.attemptId}`],nowIso:i.timestamp});if(!c.ok)return{child:e.child,receipt:i,reasonCodes:[...d.reasonCodes,c.reasonCode],commandHash:w(e.child.commandRef),promptRedaction:_(`child.${e.child.storyId}`,"prompt_body",w(e.child.commandRef)),terminalFailure:c.reasonCode,deferredFailure:/backpressure|graph-revision-stale/.test(c.reasonCode)};n=!1}return{child:e.child,receipt:i,reasonCodes:d.reasonCodes,commandHash:w(e.child.commandRef),promptRedaction:_(`child.${e.child.storyId}`,"prompt_body",w(e.child.commandRef))}}finally{t?.ok&&await e.continuousWorkspaceManager.release(t.value,n)}}function Se(e){const t=e.store.collectSnapshotRows({nowIso:e.nowIso,jobLimit:1,staleLeaseLimit:1,receiptLimit:1,eventLimit:1,snapshotLimit:1}),o=Math.max(1,Math.floor(t.queue.capacity)),a=Math.max(0,Math.floor(t.queue.running)-1),r=e.continuous?Math.max(0,Math.floor(t.queue.available)):Math.max(0,Math.min(Math.max(0,e.localCap-a),Math.floor(t.queue.available))),s=e.parallelAuthorized?Math.max(1,Math.floor(e.serverMaxConcurrency)):1,n=Math.max(0,Math.min(e.continuous?e.eligibleCount:s,...e.continuous?[]:[e.localCap],o,r));return{queueCap:o,availableLeases:r,effectiveConcurrency:n,reasonCode:n===0?p.WORKER_POOL_BACKPRESSURE_PAUSED:(e.parallelAuthorized||e.continuous)&&n>1?p.WORKER_POOL_PARALLEL_ACTIVE:p.WORKER_POOL_SERIAL_FALLBACK}}function ge(e){return{mode:"serial",serverMaxConcurrency:1,localCap:e,queueCap:1,availableLeases:1,effectiveConcurrency:1,peakConcurrency:0,pendingChildCount:0,startedChildCount:0,completedChildCount:0,backpressurePauseCount:0,reasonCodes:[]}}function k(e){return{mode:e.mode,serverMaxConcurrency:$(e.serverMaxConcurrency),localCap:$(e.localCap),queueCap:$(e.queueCap),availableLeases:$(e.availableLeases),effectiveConcurrency:$(e.effectiveConcurrency),peakConcurrency:$(e.peakConcurrency),pendingChildCount:$(e.pendingChildCount),startedChildCount:$(e.startedChildCount),completedChildCount:$(e.completedChildCount),backpressurePauseCount:$(e.backpressurePauseCount),reasonCodes:B(e.reasonCodes.length>0?e.reasonCodes:[p.WORKER_POOL_SERIAL_FALLBACK]).slice(0,10),publicSafe:!0}}function le(e=_e){return k(ge(e))}function $(e){return Number.isFinite(e)?Math.max(0,Math.min(1e4,Math.floor(e))):0}function gt(e){const t=Me(e.attempt.metadata_json,{autonomousKind:"run_yoloop",jobId:e.attempt.job_id,targetKind:"epic",targetRef:e.attempt.target_ref});if(!t.ok)return{ok:!1,status:"failed",receiptStatus:"failed",reasonCode:t.reasonCode,publicSummary:t.publicSummary,redactionSummary:t.redactionSummary};const o=At(e.attempt);if(!o.ok)return o;const a=bt(e);if(!a.ok)return{ok:!1,status:"failed",receiptStatus:"failed",reasonCode:a.reasonCode,publicSummary:a.publicSummary,redactionSummary:a.redactionSummary};const r=e.attempt.epic_id??re(e.attempt.target_ref);return{ok:!0,input:{rootPrompt:`*yoloop @${e.attempt.target_ref}`,targetRef:e.attempt.target_ref,epicId:r,runtimeId:a.runtimeId,...a.modelId?{modelId:a.modelId}:{},runtimeSource:a.runtimeSource,publicSafe:!0}}}function At(e){const t=[];e.directive_kind!=="run_yoloop"&&t.push(_("directiveKind","unsafe_key","value-denied")),e.target_kind!=="epic"&&t.push(_("targetKind","prompt_body","value-denied")),(!de.test(e.target_ref)||q.test(e.target_ref)||L.test(e.target_ref))&&t.push(_("targetRef","prompt_body","value-denied"));const o=re(e.target_ref);return e.epic_id&&e.epic_id!==o&&t.push(_("epicId","prompt_body","value-denied")),t.length>0?{ok:!1,status:"failed",receiptStatus:"failed",reasonCode:p.PROMPT_REJECTED,publicSummary:"Headless run_yoloop attempt did not match the canonical public epic prompt shape.",redactionSummary:t}:{ok:!0,input:{rootPrompt:`*yoloop @${e.target_ref}`,targetRef:e.target_ref,epicId:o,runtimeId:"fake",publicSafe:!0}}}function bt(e){const t=e.runtimeDefaults!==void 0?e.runtimeDefaults:He({projectRoot:e.projectRoot});if(I(t)&&t.ok===!1)return{ok:!1,reasonCode:p.RUNTIME_UNTRUSTED,publicSummary:typeof t.publicSummary=="string"?t.publicSummary:"Headless runtime defaults failed public-safety validation.",redactionSummary:Array.isArray(t.redactionSummary)?t.redactionSummary:[]};const o=Ft(e.attempt.runtime_source)??"explicit",a=e.attempt.runtime_id||e.attempt.model_id?{...e.attempt.runtime_id?{runtimeId:e.attempt.runtime_id}:{},...e.attempt.model_id?{modelId:e.attempt.model_id}:{},source:o,publicSafe:!0}:void 0,r={registry:e.registry,defaults:t,fallback:e.runtimeFallback};a&&(o==="origin"?r.origin=a:o==="default"?r.projectDefault=a:o==="fallback"?r.fallback=a:r.explicit=a);const s=ze(r);return s.ok?{ok:!0,runtimeId:s.runtimeId,...s.modelId?{modelId:s.modelId}:{},runtimeSource:s.runtimeSource}:{ok:!1,reasonCode:s.reasonCode,publicSummary:s.publicSummary,redactionSummary:s.redactionSummary}}function kt(e){const t=[];for(const h of Object.keys(e))(!lt.has(h)||te.test(h))&&t.push(_(h,Z(h),"key-denied"));e.publicSafe!==!0&&t.push(_("publicSafe","unsafe_key","value-denied"));const o=N(e,"kind"),a=N(e,"commandClass"),r=N(e,"jobId"),s=N(e,"operationId"),n=N(e,"idempotencyKey"),d=N(e,"targetKind"),i=N(e,"targetRef"),c=N(e,"commandRef"),y=N(e,"publicSummary"),m=N(e,"epicId");o!=="run_yoloop"&&t.push(_("kind","unsafe_key","value-denied")),a!=="goal-tick"&&a!=="loop-tick"&&t.push(_("commandClass","unsafe_key","value-denied")),fe(r)||t.push(_("jobId","unsafe_key","value-denied")),fe(s)||t.push(_("operationId","unsafe_key","value-denied")),fe(n)||t.push(_("idempotencyKey","unsafe_key","value-denied")),(d!=="epic"||!i||!de.test(i)||L.test(i))&&t.push(_("targetRef","prompt_body","value-denied"));const l=i?`*yoloop @${i}`:void 0;(!c||c!==l||c.includes("@neocortex")||q.test(c)||L.test(c))&&t.push(_("commandRef","prompt_body","value-denied")),m&&i&&m!==re(i)&&t.push(_("epicId","prompt_body","value-denied")),(!y||y.length>240||L.test(y))&&t.push(_("publicSummary","unbounded_text","value-denied")),e.reasonCode!==void 0&&(typeof e.reasonCode!="string"||L.test(e.reasonCode))&&t.push(_("reasonCode","unsafe_key","value-denied"));const f=jt(e.runtime,t);e.attempts!==void 0&&se(e.attempts,"attempts",t),e.metadata!==void 0&&se(e.metadata,"metadata",t);const A=I(e.metadata)?e.metadata:void 0,u=Kt(e.redactionSummary,t);return t.length>0||o!=="run_yoloop"||!a||!r||!s||!n||!i||!c||!y?{ok:!1,reasonCode:t.some(D=>D.reason==="prompt_body")?p.PROMPT_REJECTED:p.DIRECTIVE_REJECTED,redactionSummary:t}:{ok:!0,directive:{kind:"run_yoloop",commandClass:a,jobId:r,operationId:s,idempotencyKey:n,targetKind:"epic",targetRef:i,commandRef:c,...m?{epicId:m}:{},...f?{runtime:f}:{},publicSummary:y,...typeof e.reasonCode=="string"?{reasonCode:e.reasonCode}:{},...A?{metadata:A}:{},...u.length>0?{redactionSummary:u}:{},publicSafe:!0}}}function Ot(e,t){if(!e)return O(p.YOLOOP_METADATA_INVALID,"Headless yoloop metadata was missing.",[]);const o=Et(e);if(!o.ok)return o;const a=[],r=I(e.yoloopExecutionPlan)?e.yoloopExecutionPlan:void 0,s=r?P(r.storyIds).filter(W):[],n=r?.version===3&&I(r.scheduler)&&Array.isArray(r.scheduler.nodes)?new Map(r.scheduler.nodes.filter(I).map(l=>[String(l.storyId??""),l])):new Map,d=r?.version===3&&I(r.scheduler)&&typeof r.scheduler.graphRevision=="string"?r.scheduler.graphRevision:void 0,i=r?.version===3&&typeof r.executionBranch=="string"?r.executionBranch:void 0;let c;if(r){const l=vt(r);if(!l.ok)return l;c=l;for(const A of Tt(r)){const u=X(A,t,"execution-plan");if(!u.ok)return u;a.push(Ae(u.prompt,n.get(u.prompt.storyId),d,i))}if(a.length===0)for(const A of s){const u=X(`*yolo @docs/stories/${A}.story.md`,t,"execution-plan");if(!u.ok)return u;a.push(Ae(u.prompt,n.get(u.prompt.storyId),d,i))}const f=Rt(e.skillDirectives,a);if(!f.ok)return f}const y=typeof e.nextStoryId=="string"&&W(e.nextStoryId)?e.nextStoryId:void 0;for(const l of r?[]:Array.isArray(e.skillDirectives)?e.skillDirectives:[]){if(!I(l)||l.kind!=="task")continue;const f=P(l.promptTemplates);if(f.length>0){for(const D of f){const T=X(D,t,"task-directive");if(!T.ok)return T;a.push(T.prompt)}continue}const A=typeof l.promptTemplate=="string"?l.promptTemplate:void 0;if(!A)continue;const u=P(l.storyIds).filter(W),h=u.length>0?u:y?[y]:[];if(h.length===0&&ce.test(A)){const D=X(A,t,"task-directive");if(!D.ok)return D;a.push(D.prompt);continue}for(const D of h){const T=A.includes("{storyId}")?A.replaceAll("{storyId}",D):A,H=X(T,t,"task-directive");if(!H.ok)return H;a.push(H.prompt)}}if(a.length===0&&y){const l=X(`*yolo @docs/stories/${y}.story.md`,t,"next-story");if(!l.ok)return l;a.push(l.prompt)}const m=qt(a,l=>l.commandRef);if(c?.continuous){if(m.length!==s.length||m.some(l=>l.preparationOnly!==!0||l.source!=="execution-plan"))return O(p.YOLOOP_ISOLATION_VIOLATION,"Headless continuous yoloop rejected an ambiguous or non-preparation child prompt.",[_("promptTemplates","prompt_body","operation-denied")])}else if(m.some(l=>l.preparationOnly===!0))return O(p.YOLOOP_ISOLATION_VIOLATION,"Headless yoloop rejected branchless preparation outside a validated continuous plan.",[_("promptTemplates","prompt_body","operation-denied")]);if(s.length>0){const l=new Set(s);for(const f of m)if(!l.has(f.storyId))return O(p.YOLOOP_ISOLATION_VIOLATION,"Headless yoloop rejected a child prompt outside the server-authorized execution plan.",[_("storyId","prompt_body",w(f.storyId))])}return c?.parallelAuthorized&&!G(m.map(l=>l.storyId),s)?O(p.YOLOOP_METADATA_INVALID,"Headless yoloop rejected a parallel plan whose executable prompts did not match the selected wave.",[]):m.length===0&&!c?.continuous?O(p.YOLOOP_METADATA_INVALID,"Headless yoloop metadata did not include an authorized per-story child prompt.",[]):{ok:!0,prompts:m,mode:c?.mode??"legacy",serverMaxConcurrency:c?.serverMaxConcurrency??1,parallelAuthorized:c?.parallelAuthorized??!1,continuous:c?.continuous??!1,reasonCodes:[p.OK,c?.parallelAuthorized?p.WORKER_POOL_PARALLEL_ACTIVE:p.WORKER_POOL_SERIAL_FALLBACK]}}function Ae(e,t,o,a){if(!t||!o||!a)return e;const r=Array.isArray(t.writeSet)?P(t.writeSet):[],s=be(t.childExecutionAuthority,{storyId:e.storyId,invocationPrompt:e.commandRef,authorizedWriteSet:r});return{...e,...typeof t.dispatchId=="string"?{dispatchId:t.dispatchId}:{},...typeof t.idempotencyKey=="string"?{idempotencyKey:t.idempotencyKey}:{},graphRevision:o,executionBranch:a,...r.length>0?{writeSet:r}:{},...s?{rootAuthority:s}:{}}}function Et(e){const t=[];return e.nextStoryId!==void 0&&oe(e.nextStoryId,"nextStoryId",t),e.yoloopExecutionPlan!==void 0&&oe(e.yoloopExecutionPlan,"yoloopExecutionPlan",t),Array.isArray(e.skillDirectives)&&e.skillDirectives.forEach((o,a)=>{I(o)&&o.kind==="task"&&oe(o,`skillDirectives.${a}`,t)}),t.length>0?O(p.YOLOOP_METADATA_INVALID,"Headless yoloop rejected unsafe public metadata before child delegation.",t):{ok:!0}}function Rt(e,t){if(!Array.isArray(e))return{ok:!0};const o=new Set(t.map(a=>a.commandRef));for(const[a,r]of e.entries()){if(!I(r)||r.kind!=="task")continue;const s=typeof r.promptTemplate=="string"?r.promptTemplate:void 0,n=P(r.promptTemplates);if(s==="[REDACTED]"&&r.subagentType==="neocortex"&&typeof r.reasonCode=="string"&&r.reasonCode.startsWith("directive-prompt-")&&n.length===0)continue;const i=[...s?[s]:[],...n];if(r.subagentType!=="neocortex"||i.length===0||i.some(c=>!o.has(c)))return O(p.YOLOOP_ISOLATION_VIOLATION,"Headless yoloop rejected a task directive that conflicted with the server-authorized execution plan.",[_(`skillDirectives.${a}`,"prompt_body","operation-denied")])}return{ok:!0}}function oe(e,t,o){if(typeof e=="string"){if(/\.allowedDebt\.constraints\.\d+$/.test(t)&&ct.has(e))return;(L.test(e)||/\0/.test(e))&&o.push(_(t,Z(t),"value-denied"));return}if(!(e==null||typeof e=="number"||typeof e=="boolean")){if(Array.isArray(e)){e.forEach((a,r)=>oe(a,`${t}.${r}`,o));return}if(I(e)){for(const[a,r]of Object.entries(e)){const s=`${t}.${a}`;!(a==="promptTemplate"||a==="promptTemplates"||a==="invocationPrompt"||a==="childPromptKind"||a==="allowMetaTaskPromptInChild"||a==="authorization")&&te.test(a)&&o.push(_(s,Z(a),"key-denied")),oe(r,s,o)}return}o.push(_(t,"unsafe_key","value-denied"))}}function vt(e){const t=typeof e.mode=="string"?e.mode:"",o=I(e.isolationPolicy)?e.isolationPolicy:void 0,a=P(e.storyIds);if(e.authorization!=="server_authorized")return O(p.YOLOOP_METADATA_INVALID,"Headless yoloop execution plan was not server-authorized.",[]);if(e.executor!=="root_agent"&&e.executor!=="root_agent_with_child_tasks")return O(p.YOLOOP_METADATA_INVALID,"Headless yoloop execution plan executor was not root-owned.",[]);if(t!=="serial"&&t!=="parallel_wave"&&t!=="continuous_dag"&&t!=="manual")return O(p.YOLOOP_METADATA_INVALID,"Headless yoloop execution plan mode was invalid.",[]);const r=e.version===3&&t==="continuous_dag";if(!Array.isArray(e.storyIds)||!r&&a.length===0||a.length!==e.storyIds.length||a.some(h=>!W(h))||new Set(a).size!==a.length)return O(p.YOLOOP_METADATA_INVALID,"Headless yoloop execution plan story selection was invalid or ambiguous.",[]);if(!o||o.rootOwnsLoop!==!0||o.childPromptKind==="per_story_branchless_preparation_only"&&!r||Object.prototype.hasOwnProperty.call(o,"childExecutionBoundary")&&!r||o.childPromptKind!=="per_story_yolo_only"&&o.childPromptKind!=="per_story_branchless_preparation_only"&&!(o.childPromptKind==="none"&&(t==="serial"&&o.childTaskDelegation==="not_required"||t==="parallel_wave"&&e.executor==="root_agent"&&o.childTaskDelegation==="forbidden"))||o.allowOuterYoloopInChild!==!1||o.allowMetaTaskPromptInChild!==!1)return O(p.YOLOOP_ISOLATION_VIOLATION,"Headless yoloop rejected an execution plan that did not preserve root-owned child isolation.",[_("isolationPolicy","prompt_body","value-denied")]);const s=Array.isArray(e.skippedStories)?e.skippedStories:[];for(const h of s){if(!I(h)||typeof h.storyId!="string"||!W(h.storyId)||typeof h.reason!="string")return O(p.YOLOOP_METADATA_INVALID,"Headless yoloop skipped-story evidence was malformed.",[]);if(a.includes(h.storyId))return O(p.YOLOOP_METADATA_INVALID,"Headless yoloop selected a story that server evidence marked skipped.",[])}if(r){const h=I(e.scheduler)?e.scheduler:void 0,D=Array.isArray(h?.nodes)?h.nodes.filter(I):[],T=P(h?.readyStoryIds),H=P(h?.runningStoryIds),ae=P(e.promptTemplates),J=I(e.dependencyBasis)?e.dependencyBasis:void 0,v=I(e.readinessBasis)?e.readinessBasis:void 0,b=typeof h?.graphRevision=="string"?h.graphRevision:"",S=typeof e.executionBranch=="string"?e.executionBranch:"",K=D.map(C=>typeof C.storyId=="string"?C.storyId:""),Q=D.find(C=>{const F=typeof C.storyId=="string"?C.storyId:"",Y=typeof C.promptTemplate=="string"?C.promptTemplate:"",g=Array.isArray(C.writeSet)?P(C.writeSet):[];return!W(F)||Y!==`*yolo @docs/stories/${F}.story.md branchless-preparation`||typeof C.dispatchId!="string"||!/^[a-f0-9]{64}$/.test(C.dispatchId)||typeof C.idempotencyKey!="string"||!/^[a-f0-9]{64}$/.test(C.idempotencyKey)||C.dependencyBasis!=="verified"||!Array.isArray(C.dependencies)||P(C.dependencies).length!==C.dependencies.length||!Array.isArray(C.writeSet)||g.length===0||g.length!==C.writeSet.length||!be(C.childExecutionAuthority,{storyId:F,invocationPrompt:Y,authorizedWriteSet:g})});return e.executor!=="root_agent_with_child_tasks"||e.legacyConcurrencyIgnored!==!0||Object.prototype.hasOwnProperty.call(e,"maxConcurrency")||Object.prototype.hasOwnProperty.call(e,"maxParallel")||o?.rootOwnedScheduling!=="continuous_dag_allowed"||o?.childPromptKind!=="per_story_branchless_preparation_only"||o?.childExecutionBoundary!=="filesystem_only"||o?.childTaskDelegation!=="allowed"||o?.maxDepth!==1||o?.childWorkspace!=="branchless_sandbox"||o?.epicCheckout!=="current_checkout"||o?.workspaceLifecycle!=="user_managed"||o?.integrationOwner!=="root_agent"||!h||h.schemaVersion!==1||h.strategy!=="continuous-event-driven-dag"||h.logicalConcurrency!=="ready-set"||h.capacityPolicy!=="backpressure-only"||h.rootOwnsLoop!==!0||h.maxDepth!==1||!/^[a-f0-9]{64}$/.test(b)||!$t(S)||new Set(K).size!==K.length||K.some(C=>!W(C))||T.some(C=>!K.includes(C))||H.some(C=>!K.includes(C)||T.includes(C))||!G(a,T)||ae.length!==a.length||ae.some((C,F)=>C!==`*yolo @docs/stories/${a[F]}.story.md branchless-preparation`)||!J||J.source!=="state_snapshot"||!v||v.source!=="ready_wave"||!G(P(v.selectedStoryIds),a)||Q?O(p.YOLOOP_METADATA_INVALID,"Headless yoloop rejected an invalid continuous DAG execution plan.",[]):{ok:!0,mode:"continuous_dag",serverMaxConcurrency:a.length,parallelAuthorized:!0,continuous:!0}}if(e.version===2){const h=qe(e);return h.ok?{ok:!0,mode:"parallel_wave",serverMaxConcurrency:h.childExecutionConcurrency,parallelAuthorized:!1,continuous:!1}:O(p.YOLOOP_METADATA_INVALID,"Headless yoloop rejected an unsafe phased execution plan.",[])}if(t!=="parallel_wave")return{ok:!0,mode:t,serverMaxConcurrency:1,parallelAuthorized:!1,continuous:!1};const n=e.maxConcurrency,d=e.maxParallel,i=I(e.dependencyBasis)?e.dependencyBasis:void 0,c=I(e.readinessBasis)?e.readinessBasis:void 0,y=Array.isArray(e.parallelWaves)?e.parallelWaves:[],m=y.length===1&&I(y[0])?y[0]:void 0;if(o.rootOwnedScheduling!=="parallel_wave_allowed"||!Number.isInteger(n)||typeof n!="number"||n<2||n>a.length||!Number.isInteger(d)||d!==n||!i||i.source!=="state_snapshot"||!G(P(i.storyIds),a)||!c||c.source!=="ready_wave"||!G(P(c.selectedStoryIds),a)||!m||!G(P(m.storyIds),a)||m.maxConcurrency!==n)return O(p.YOLOOP_METADATA_INVALID,"Headless yoloop parallel plan lacked consistent bounded authorization and readiness evidence.",[]);const l=P(m.promptTemplates);if(l.length!==a.length||new Set(l).size!==l.length)return O(p.YOLOOP_METADATA_INVALID,"Headless yoloop parallel wave prompts were incomplete or ambiguous.",[]);const A=(Array.isArray(m.proofSummaries)?m.proofSummaries:Array.isArray(e.proofSummaries)?e.proofSummaries:[]).find(h=>I(h)&&G(P(h.storyIds),a));return!I(A)||A.dependencyClosure!=="resolved"||A.contractOwnership!=="non_overlapping"||A.validationSurfaces!=="compatible"?O(p.YOLOOP_METADATA_INVALID,"Headless yoloop parallel plan lacked resolved independence proof.",[]):s.find(h=>I(h)&&typeof h.reason=="string"&&/(cycle|unresolved|ambiguous)/i.test(h.reason))?O(p.YOLOOP_METADATA_INVALID,"Headless yoloop parallel plan contained unresolved dependency evidence.",[]):{ok:!0,mode:"parallel_wave",serverMaxConcurrency:n,parallelAuthorized:!0,continuous:!1}}function be(e,t){if(!I(e)||!I(e.artifact))return;const o=e.artifact,a=Array.isArray(e.authorizedWriteSet)?P(e.authorizedWriteSet):[];if(Object.keys(e).sort().join("\0")!==["artifact","authorizedWriteSet","effectScope","invocationPrompt","kind","lifecycleAuthority","publicSafe","schemaVersion","storyId"].sort().join("\0")||Object.keys(o).sort().join("\0")!==["content","contentBinding","kind","path","schemaVersion"].sort().join("\0")||e.schemaVersion!==1||e.kind!=="branchless_story_preparation"||e.storyId!==t.storyId||e.invocationPrompt!==t.invocationPrompt||!Array.isArray(e.authorizedWriteSet)||a.length!==e.authorizedWriteSet.length||a.some(s=>tt(s)!==s)||!Pt(a,t.authorizedWriteSet)||e.effectScope!=="filesystem_only"||e.lifecycleAuthority!=="root_only"||e.publicSafe!==!0||o.schemaVersion!==1||o.kind!=="branchless_root_bound_artifact"||typeof o.path!="string"||!a.includes(o.path)||typeof o.content!="string"||o.content.length===0||o.content.length>4096||typeof o.contentBinding!="string"||!/^[a-f0-9]{64}$/.test(o.contentBinding))return;const r=Ee("sha256").update(["branchless-root-bound-artifact-v1",t.storyId,t.invocationPrompt,...a,"filesystem_only","root_only",o.path,o.content].join("\0")).digest("hex");if(o.contentBinding===r)return e}function Pt(e,t){return e.length===t.length&&e.every((o,a)=>o===t[a])}function Tt(e){const t=[];t.push(...P(e.promptTemplates));for(const o of Array.isArray(e.serialSteps)?e.serialSteps:[])I(o)&&typeof o.promptTemplate=="string"&&t.push(o.promptTemplate);for(const o of Array.isArray(e.parallelWaves)?e.parallelWaves:[])I(o)&&t.push(...P(o.promptTemplates));return t}function X(e,t,o){if(Ce(e))return O(p.YOLOOP_ISOLATION_VIOLATION,"Headless yoloop rejected an unsafe child prompt shape.",[_("promptTemplate","prompt_body",w(e))]);if(!ce.test(e))return O(p.YOLOOP_METADATA_INVALID,"Headless yoloop child prompt did not match the canonical per-story yolo shape.",[_("promptTemplate","prompt_body",w(e))]);const a=st.test(e),r=e.replace(/^\*yolo @/,"").replace(/ branchless-preparation$/,""),s=Ut(r);return!nt.test(r)||!W(s)||!s.startsWith(`${t}.`)?O(p.YOLOOP_ISOLATION_VIOLATION,"Headless yoloop rejected a child prompt outside the targeted public epic.",[_("storyId","prompt_body",w(s))]):{ok:!0,prompt:{storyId:s,targetRef:r,commandRef:e,source:o,...a?{preparationOnly:!0}:{}}}}function xt(e){const t=e?.epicTerminalGitDirective;if(!(!I(t)||t.schemaVersion!==1||t.kind!=="epic_terminal_git"||typeof t.epicId!="string"||typeof t.executionBranch!="string"||typeof t.originBranch!="string"||typeof t.expectedExecutionHeadSha!="string"||!Array.isArray(t.storyCheckpointIds)||!I(t.localGates)||t.localGates.passed!==!0||!Array.isArray(t.localGates.receiptRefs)||!I(t.reconcile)||typeof t.idempotencyKey!="string"||t.publicSafe!==!0))return t}function wt(e){const t=e?.epicGitReconciliationDirective;if(!(!I(t)||t.schemaVersion!==1||t.kind!=="epic_git_reconciliation"||typeof t.epicId!="string"||typeof t.executionBranch!="string"||typeof t.originBranch!="string"||!["start","resume","audit"].includes(String(t.lifecycleBoundary))||typeof t.dryRun!="boolean"||typeof t.idempotencyKey!="string"||t.publicSafe!==!0))return t}function Lt(e){if(!e||!I(e))return{ok:!1,reasonCode:p.YOLOOP_METADATA_INVALID,publicSummary:"Headless yoloop root invocation did not return public metadata.",redactionSummary:[]};const t=I(e.yoloopContinuationDecision)?e.yoloopContinuationDecision:void 0,o=typeof t?.outcome=="string"?t.outcome:void 0,a=o==="queue_exhausted"||e.yoloopComplete===!0,r=e.yoloopAborted===!0,s=o==="selected"&&t?.replay===!0;return o&&!["selected","queue_exhausted","blocked","cycle","invalid","no_progress"].includes(o)?{ok:!1,reasonCode:p.YOLOOP_METADATA_INVALID,publicSummary:"Headless yoloop rejected an unknown continuation outcome.",redactionSummary:[]}:o==="queue_exhausted"&&t?.terminalSuccess!==!0?{ok:!1,reasonCode:p.YOLOOP_METADATA_INVALID,publicSummary:"Headless yoloop rejected inconsistent queue exhaustion metadata.",redactionSummary:[]}:a&&r?{ok:!1,reasonCode:p.YOLOOP_METADATA_INVALID,publicSummary:"Headless yoloop metadata reported mutually exclusive terminal states.",redactionSummary:[_("yoloopTerminal","unsafe_key","value-denied")]}:{ok:!0,complete:a,aborted:r,outcome:o,replay:s}}function Dt(e){const t=`${e.rootAttempt.execution_id}:${e.child.graphRevision??"legacy"}:${e.child.storyId}`,o=e.child.dispatchId??V("child-op",`${t}:${e.iteration}`),a=e.child.idempotencyKey??V("child-idem",`${t}:${e.iteration}`);return{schemaVersion:1,contractVersion:"continuity-v1",kind:"run_yolo",commandClass:e.rootAttempt.command_class==="goal-tick"?"goal-tick":"loop-tick",jobId:e.rootAttempt.job_id,operationId:o,idempotencyKey:a,targetKind:"story",targetRef:e.child.targetRef,commandRef:e.child.commandRef,...e.child.preparationOnly?{executionMode:"branchless_child_preparation"}:{},storyId:e.child.storyId,runtime:{runtimeId:e.runtimeId,...e.modelId?{modelId:e.modelId}:{},source:e.runtimeSource??"explicit",reasonCode:e.runtimeSource==="fallback"?p.RUNTIME_FALLBACK:p.RUNTIME_EXPLICIT,publicSafe:!0},publicSummary:`Root-owned yoloop delegated public story ${e.child.storyId}.`,reasonCode:p.OK,metadata:{governanceSource:"delegated-subagent",parentAttemptId:e.rootAttempt.attempt_id,parentExecutionId:e.rootAttempt.execution_id,iteration:e.iteration,...e.child.dispatchId?{dispatchId:e.child.dispatchId}:{},...e.child.graphRevision?{graphRevision:e.child.graphRevision}:{},...e.child.writeSet?{writeSet:e.child.writeSet}:{},...e.child.executionBranch?{executionBranch:e.child.executionBranch}:{},...e.child.graphRevision?{childWorkspace:"branchless_sandbox",epicCheckout:"current_checkout",workspaceLifecycle:"user_managed",integrationOwner:"root_agent",maxDepth:1}:{},publicSafe:!0},attempts:[],redactionSummary:[_("prompt","prompt_body",w(e.child.commandRef))],publicSafe:!0}}function ue(e,t,o){const a=ke(o.hashes),r=o.workerPoolSummary??le(),s=ke({iterations:o.counts.iterations,childCount:o.counts.childCount,succeededChildCount:o.counts.succeededChildCount,failedChildCount:o.counts.failedChildCount,skippedChildCount:o.counts.skippedChildCount,metadataCompleteCount:o.counts.metadataCompleteCount,metadataAbortedCount:o.counts.metadataAbortedCount,serverMaxConcurrency:r.serverMaxConcurrency,localCap:r.localCap,queueCap:r.queueCap,availableLeases:r.availableLeases,effectiveConcurrency:r.effectiveConcurrency,peakConcurrency:r.peakConcurrency,pendingChildCount:r.pendingChildCount,startedChildCount:r.startedChildCount,completedChildCount:r.completedChildCount,backpressurePauseCount:r.backpressurePauseCount}),n={schemaVersion:1,contractVersion:"continuity-v1",attemptId:t.attempt_id,executionId:t.execution_id,jobId:t.job_id,directiveHash:t.directive_hash,status:o.status,reasonCode:o.reasonCode,storyIds:o.childStoryIds.slice(0,50),counts:s,hashes:a,...o.reasonCode===he.BYPASS_BLOCKED?{governanceEvidence:we}:{},reasonCodes:B([o.reasonCode,...r.reasonCodes,...o.stateTransitions]),publicSummary:ie(o.publicSummary)};return e.completeHeadlessExecutionAttempt({attemptId:t.attempt_id,executionId:t.execution_id,jobId:t.job_id,leaseId:o.leaseId,runnerId:o.runnerId,status:o.status,completedAt:o.completedAt,durationMs:o.durationMs,reasonCode:o.reasonCode,publicSummary:ie(o.publicSummary),notBeforeAt:o.notBeforeAt,retryCount:o.retryCount,counts:s,hashes:a,redactionSummary:o.redactionSummary,relativePaths:B([t.target_ref,...o.relativePaths]),metadata:n}),e.recordHeadlessExecutionReceipt({receiptId:`receipt-${V("headless-yoloop",`${t.attempt_id}-${o.status}`)}`,attemptId:t.attempt_id,executionId:t.execution_id,jobId:t.job_id,status:o.receiptStatus,reasonCode:o.reasonCode,createdAt:o.completedAt,operationId:`${t.execution_id}:${o.status}:receipt`,idempotencyKey:`${t.directive_hash}:${o.status}:receipt`,counts:s,hashes:a,redactionSummary:o.redactionSummary,relativePaths:B([t.target_ref,...o.relativePaths]),metadata:n}),e.recordHeadlessExecutionSummary({eventId:`event-${V("headless-yoloop-summary",`${t.attempt_id}-${o.status}`)}`,attemptId:t.attempt_id,executionId:t.execution_id,jobId:t.job_id,status:o.status,runtimeId:o.runtimeId,modelId:o.modelId,publicSummary:ie(o.publicSummary),reasonCode:o.reasonCode,createdAt:o.completedAt,durationMs:o.durationMs,counts:s,hashes:a,redactionSummary:o.redactionSummary,relativePaths:B([t.target_ref,...o.relativePaths]),metadata:n}),{attemptId:t.attempt_id,executionId:t.execution_id,jobId:t.job_id,status:o.status,outcome:o.receiptStatus,reasonCode:o.reasonCode,timestamp:o.completedAt,childStoryIds:o.childStoryIds,aggregateCounts:o.counts,workerPoolSummary:r,redactionSummary:o.redactionSummary,publicSafe:!0}}function Mt(e,t){return{attemptId:e.attempt_id,executionId:e.execution_id,jobId:e.job_id,status:t.status,outcome:t.receiptStatus,reasonCode:t.reasonCode,timestamp:t.timestamp,childStoryIds:[],aggregateCounts:me(),workerPoolSummary:le(),redactionSummary:[],publicSafe:!0}}function Nt(e,t,o,a,r){if(!t.retryable)return{retry:!1};const s=e.retry_count+1;if(s>=Math.max(1,e.max_attempts||o))return{retry:!1,retryCount:s};const n=Math.min(8,2**Math.max(0,e.retry_count));return{retry:!0,retryCount:s,notBeforeAt:Oe(r,a*n)}}function R(e){return{status:e.status,receiptStatus:e.receiptStatus,reasonCode:e.reasonCode,publicSummary:e.publicSummary,retryable:e.retryable,durationMs:Math.max(0,Date.now()-e.startedAt),counts:e.counts,workerPoolSummary:e.workerPoolSummary??le(),hashes:e.hashes,redactionSummary:e.redactions.slice(0,50),relativePaths:B(e.relativePaths).slice(0,50),childStoryIds:B(e.childStoryIds).slice(0,50),stateTransitions:B(e.stateTransitions)}}function jt(e,t){if(e===void 0)return;if(!I(e)){t.push(_("runtime","unsafe_key","value-denied"));return}for(const s of Object.keys(e))(!ut.has(s)||te.test(s))&&t.push(_(`runtime.${s}`,Z(s),"key-denied"));e.publicSafe!==!0&&t.push(_("runtime.publicSafe","unsafe_key","value-denied"));const o=N(e,"runtimeId"),a=N(e,"modelId"),r=N(e,"source");if(o&&(!/^[A-Za-z0-9][A-Za-z0-9._:-]{0,79}$/.test(o)||L.test(o)||q.test(o))&&t.push(_("runtime.runtimeId","unsafe_key","value-denied")),a&&(!/^[A-Za-z0-9][A-Za-z0-9._:+/-]{0,119}$/.test(a)||L.test(a)||q.test(a))&&t.push(_("runtime.modelId","unsafe_key","value-denied")),r!==void 0&&r!=="explicit"&&r!=="origin"&&r!=="default"&&r!=="fallback"&&r!=="unspecified"&&t.push(_("runtime.source","unsafe_key","value-denied")),e.reasonCode!==void 0&&(typeof e.reasonCode!="string"||L.test(e.reasonCode))&&t.push(_("runtime.reasonCode","unsafe_key","value-denied")),e.publicSafe===!0)return{...o?{runtimeId:o}:{},...a?{modelId:a}:{},...r==="explicit"||r==="origin"||r==="default"||r==="fallback"||r==="unspecified"?{source:r}:{},...typeof e.reasonCode=="string"?{reasonCode:e.reasonCode}:{},publicSafe:!0}}function Ht(e){const t=Array.isArray(e)?e:e?[e]:[],o=[];for(const a of t){const r=a.continuityExecutionDirectives;Array.isArray(r)&&o.push(...r)}return o}function zt(e){return w(pe({kind:e.kind,commandClass:e.commandClass,jobId:e.jobId,targetRef:e.targetRef,commandRef:e.commandRef,epicId:e.epicId,runtime:e.runtime}))}function pe(e){return Array.isArray(e)?`[${e.map(pe).join(",")}]`:I(e)?`{${Object.keys(e).sort().map(t=>`${JSON.stringify(t)}:${pe(e[t])}`).join(",")}}`:JSON.stringify(e)}function se(e,t,o){if(typeof e=="string"){(L.test(e)||q.test(e))&&o.push(_(t,Z(t),"value-denied"));return}if(!(e==null||typeof e=="number"||typeof e=="boolean")){if(Array.isArray(e)){e.forEach((a,r)=>se(a,`${t}.${r}`,o));return}if(I(e)){for(const[a,r]of Object.entries(e)){const s=`${t}.${a}`;te.test(a)&&o.push(_(s,Z(a),"key-denied")),se(r,s,o)}return}o.push(_(t,"unsafe_key","value-denied"))}}function Kt(e,t){if(e===void 0)return[];if(!Array.isArray(e))return t.push(_("redactionSummary","unsafe_key","value-denied")),[];const o=[];for(const[a,r]of e.entries()){if(!I(r)||r.publicSafe!==!0){t.push(_(`redactionSummary.${a}`,"unsafe_key","value-denied"));continue}const s=N(r,"field"),n=N(r,"reason"),d=N(r,"evidence");if(!s||!n||!d||L.test(s)||L.test(n)||L.test(d)){t.push(_(`redactionSummary.${a}`,"unsafe_key","value-denied"));continue}o.push({field:s,reason:n,evidence:d,publicSafe:!0})}return o}function O(e,t,o){return{ok:!1,reasonCode:e,publicSummary:t,redactionSummary:o}}function P(e){return Array.isArray(e)?e.filter(t=>typeof t=="string"):[]}function $t(e){return e.length>0&&e.length<=240&&!e.startsWith("-")&&!e.includes("..")&&!e.includes("\\")&&/^[A-Za-z0-9._/-]+$/.test(e)}function G(e,t){return e.length===t.length&&new Set(e).size===e.length&&e.every(o=>t.includes(o))}function Bt(e){return de.test(e.target_ref)?[e.target_ref]:[]}function ke(e){if(!e)return;const t={};for(const[o,a]of Object.entries(e))!/^[A-Za-z0-9_.:-]{1,80}$/.test(o)||te.test(o)||L.test(o)||typeof a=="string"&&L.test(a)||(t[o]=a);return Object.keys(t).length>0?t:void 0}function me(){return E(0,0,0,0,0,0,0)}function E(e,t,o,a,r,s,n){return{iterations:e,childCount:t,succeededChildCount:o,failedChildCount:a,skippedChildCount:r,metadataCompleteCount:s,metadataAbortedCount:n}}function Ut(e){return e.replace(/^docs\/stories\//,"").replace(/\.story\.md$/,"")}function re(e){return e.replace(/^docs\/epics\/epic-/,"").replace(/\.md$/,"")}function W(e){return/^[A-Za-z0-9][A-Za-z0-9_-]*\.\d+[A-Za-z0-9_-]*$/.test(e)&&!L.test(e)&&!q.test(e)}function Ft(e){if(e==="explicit"||e==="origin"||e==="default"||e==="fallback")return e}function Yt(e){if(e==="explicit"||e==="origin"||e==="default"||e==="fallback"||e==="unspecified")return e}function Z(e){return/prompt|commandRef/i.test(e)?"prompt_body":/std(?:out|err)|raw|log|transcript|stack/i.test(e)?"raw_log":/url/i.test(e)?"private_url":/path|cwd|argv|args|shell|command|binary|executable/i.test(e)?"executable_path":/secret|token|password|authorization|api[_-]?key|license/i.test(e)?"secret_or_pii":"unsafe_key"}function N(e,t){return typeof e[t]=="string"?e[t]:void 0}function fe(e){return!!(e&&dt.test(e)&&!L.test(e)&&!q.test(e))}function I(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Vt(e,t){return V(e,`${t}-${Date.now()}-${Re(4).toString("hex")}`)}function Oe(e,t){const o=Date.parse(e);return new Date((Number.isFinite(o)?o:Date.now())+t).toISOString()}function U(e,t,o){return Number.isFinite(e)?Math.max(t,Math.min(o,Math.floor(e))):t}function B(e){return Array.from(new Set(e))}function qt(e,t){const o=new Set,a=[];for(const r of e){const s=t(r);o.has(s)||(o.add(s),a.push(r))}return a}export{_e as DEFAULT_HEADLESS_YOLOOP_LOCAL_CONCURRENCY_CAP,rt as DEFAULT_HEADLESS_YOLOOP_MAX_DURATION_MS,ot as DEFAULT_HEADLESS_YOLOOP_MAX_ITERATIONS,at as MAX_HEADLESS_YOLOOP_LOCAL_CONCURRENCY_CAP,uo as RUN_YOLOOP_DRIVER_STATES,_t as defaultYoloopRootInvoker,po as isCanonicalDelegatedStoryPrompt,mo as runYoloopExecutionPhase};
10
+ `],{cwd:o.projectRoot,stdio:["ignore","pipe","pipe","ipc"],windowsHide:!0});let d,i=0,c=!1;const y=setTimeout(()=>{c=!0,n.kill()},o.timeoutMs),f=m=>{i+=m.length,i>32*1024*1024&&(c=!0,n.kill())};n.stdout?.on("data",f),n.stderr?.on("data",f),n.on("message",m=>{if(d||!C(m)||typeof m.success!="boolean"||Buffer.byteLength(JSON.stringify(m))>32*1024*1024){c=!0,n.kill();return}d=m});const l={success:!1,errorCode:"headless-root-invoke-failed",error:"The isolated root metadata invocation did not complete.",exitCode:1};n.on("error",()=>{c=!0}),n.on("close",m=>{clearTimeout(y),s(m===0&&!c&&d?d:l)}),n.send({modulePath:r,options:e},m=>{m&&(c=!0,n.kill())})})}async function St(e,o=It){const t=Date.now(),a={args:e.args,projectRoot:e.projectRoot,format:"json",platformTarget:"runner",serverUrl:e.serverUrl,strictReadOnly:e.strictReadOnly},r=await o(a,{projectRoot:e.projectRoot,timeoutMs:e.timeoutMs});return{success:r.success,instructions:r.instructions,metadata:r.metadata,error:r.error,errorCode:r.errorCode,exitCode:r.exitCode,durationMs:Date.now()-t,publicSafe:!0}}async function Co(e){const o=e.adapterRegistry??Ke(),t=$(e.limit??Ve,1,10),a=$(e.leaseMs??Ye,1e3,3600*1e3),r=$(e.staleLeaseAfterMs??We,0,1440*60*1e3),s=$(e.maxAttempts??qe,1,10),n=$(e.localConcurrencyCap??be(),1,Se),d=[],i=[],c=e.now(),y=bt({store:e.store,metadata:e.metadata,nowIso:c,maxAttempts:s,queueCap:e.queueCap});d.push(...y.reasonCodes);const f=e.store.recoverStaleHeadlessExecutionAttempts({nowIso:c,staleAfterMs:r,limit:t*2});f.recoveredAttemptIds.length>0&&(d.push(p.EXECUTION_BACKOFF),f.failedAttemptIds.length>0&&d.push(p.EXECUTION_TIMEOUT));const l=e.store.listDueHeadlessExecutionAttempts({nowIso:e.now(),limit:Math.max(t*5,10)}).filter(m=>m.directive_kind==="run_yoloop").slice(0,t);for(const m of l){const g=await gt({store:e.store,projectRoot:e.projectRoot,runnerId:e.runnerId,attempt:m,registry:o,now:e.now,leaseMs:a,timeoutMs:$(e.timeoutMs??Ge,1e3,18e5),backoffMs:$(e.backoffMs??Fe,1e3,36e5),maxAttempts:s,maxIterations:$(e.maxIterations??st,1,100),maxDurationMs:$(e.maxDurationMs??it,1e3,72e5),localConcurrencyCap:n,queueCap:e.queueCap,adapterOptions:e.adapterOptions,runtimeDefaults:e.runtimeDefaults,runtimeFallback:e.runtimeFallback,yoloopInvoker:e.yoloopInvoker??St,serverUrl:e.serverUrl,idFactory:e.idFactory??Xt,continuousWorkspaceManager:e.continuousWorkspaceManager??Qe(),terminalGitAdapter:e.terminalGitAdapter??ot(e.projectRoot)});i.push(g),d.push(g.reasonCode,...g.workerPoolSummary.reasonCodes)}return{ok:i.every(m=>m.outcome!=="failed")&&y.rejectedCount===0,enqueuedAttemptCount:y.enqueuedCount,dueAttemptCount:l.length,processedAttemptCount:i.filter(m=>m.outcome!=="ignored").length,recoveredAttemptIds:f.recoveredAttemptIds,receipts:i,reasonCodes:F(d.length>0?d:[p.OK]),publicSafe:!0}}function bt(e){let o=0,t=0;const a=[];for(const r of Ut(e.metadata)){if(!C(r)||r.kind!=="run_yoloop")continue;const s=Rt(r);if(!s.ok){t+=1,a.push(s.reasonCode);continue}const n=s.directive;if(!e.store.jobExists(n.jobId)){t+=1,a.push(Ie.BYPASS_BLOCKED);continue}const d=$t(n);if(e.store.hasCompletedHeadlessExecutionDirectiveHash(d)){a.push(p.EXECUTION_COMPLETED);continue}const i=je({autonomousKind:"run_yoloop",source:"headless-run-yoloop",targetKind:"epic",targetRef:n.targetRef,epicId:n.epicId??ae(n.targetRef),jobId:n.jobId,operationSeed:n.operationId,commandHash:L(n.commandRef)}),c=Be(e.store,i,e.nowIso,{requireExistingJob:!0});if(!c.ok){t+=1,a.push(c.reasonCode);continue}const y=V("attempt",n.idempotencyKey),f=V("exec",n.operationId),l=e.store.enqueueHeadlessExecutionAttempt({attemptId:y,executionId:f,jobId:n.jobId,directiveHash:d,directiveKind:"run_yoloop",commandClass:n.commandClass,targetKind:"epic",targetRef:n.targetRef,epicId:n.epicId??ae(n.targetRef),runtimeId:n.runtime?.runtimeId,modelId:n.runtime?.modelId,runtimeSource:Gt(n.runtime?.source),reasonCode:n.reasonCode,publicSummary:n.publicSummary,enqueuedAt:e.nowIso,notBeforeAt:e.nowIso,maxAttempts:e.maxAttempts,queueCap:e.queueCap,operationId:`${n.operationId}:enqueue`,idempotencyKey:n.idempotencyKey,counts:{directives:1},hashes:{directive:d},redactionSummary:n.redactionSummary,relativePaths:[n.targetRef],metadata:He(i,{schemaVersion:1,contractVersion:"continuity-v1",jobId:n.jobId,operationId:n.operationId,reasonCode:n.reasonCode??p.OK,targetRef:n.targetRef,directiveHash:d})});if(!l.accepted){t+=1,a.push(l.reasonCode??"queue-cap-reached");continue}l.inserted&&(o+=1),a.push(p.OK)}return{enqueuedCount:o,rejectedCount:t,reasonCodes:F(a)}}async function gt(e){const o=e.now(),t=e.idFactory("lease",e.attempt.attempt_id),a=Pe(o,e.leaseMs);if(!e.store.claimHeadlessExecutionAttempt({attemptId:e.attempt.attempt_id,leaseId:t,runnerId:e.runnerId,claimedAt:o,leaseExpiresAt:a,reasonCode:p.OK}).inserted)return zt(e.attempt,{status:e.attempt.status,receiptStatus:"ignored",reasonCode:"lease-conflict",timestamp:o});if(e.store.hasCompletedHeadlessExecutionDirectiveHash(e.attempt.directive_hash,e.attempt.attempt_id))return me(e.store,e.attempt,{leaseId:t,runnerId:e.runnerId,status:"skipped",receiptStatus:"ignored",reasonCode:p.EXECUTION_COMPLETED,publicSummary:"Skipped duplicate run_yoloop directive because the directive hash is already completed.",completedAt:e.now(),counts:ye(),hashes:{directive:e.attempt.directive_hash},redactionSummary:[],relativePaths:[e.attempt.target_ref],childStoryIds:[],stateTransitions:["start","complete"]});const n=kt(e);if(!n.ok)return me(e.store,e.attempt,{leaseId:t,runnerId:e.runnerId,status:n.status,receiptStatus:n.receiptStatus,reasonCode:n.reasonCode,publicSummary:n.publicSummary,completedAt:e.now(),counts:ye(),hashes:{directive:e.attempt.directive_hash},redactionSummary:n.redactionSummary,relativePaths:Vt(e.attempt),childStoryIds:[],stateTransitions:["start"]});const d=await At({...e,prepared:n.input}),i=Bt(e.attempt,d,e.maxAttempts,e.backoffMs,e.now()),c=i.retry?"backoff":d.status,y=i.retry?"deferred":d.receiptStatus,f=i.retry?Ct.has(d.reasonCode)?d.reasonCode:p.EXECUTION_BACKOFF:d.reasonCode,l=i.retry?"Headless run_yoloop execution scheduled bounded retry after transient metadata/runtime outcome.":d.publicSummary;return me(e.store,e.attempt,{leaseId:t,runnerId:e.runnerId,status:c,receiptStatus:y,reasonCode:f,publicSummary:l,completedAt:e.now(),durationMs:d.durationMs,notBeforeAt:i.notBeforeAt,retryCount:i.retryCount,counts:d.counts,workerPoolSummary:d.workerPoolSummary,hashes:{...d.hashes,directive:e.attempt.directive_hash},redactionSummary:d.redactionSummary,relativePaths:d.relativePaths,childStoryIds:d.childStoryIds,runtimeId:n.input.runtimeId,modelId:n.input.modelId,runtimeSource:n.input.runtimeSource,stateTransitions:d.stateTransitions})}async function At(e){const o=Date.now(),t=["start"],a=new Set,r=[],s=[],n={root:L(e.prepared.rootPrompt)},d=[_("rootPrompt","prompt_body",n.root)];let i=0,c=0,y=0,f=0,l=0,m=0,g;const u=Oe(e.localConcurrencyCap),h=new Map;let M=!1;const w=new Map,z=new Map,ne=v=>{const A=v.child;n[`child-${A.storyId.replace(/[^A-Za-z0-9_.:-]/g,"-")}`]=v.commandHash,d.push(v.promptRedaction);const S=v.receipt;if(v.terminalFailure){if(v.deferredFailure){w.set(A.storyId,v.terminalFailure),u.backpressurePauseCount+=1;return}w.delete(A.storyId),z.set(A.storyId,v.terminalFailure),a.has(A.storyId)||(a.add(A.storyId),r.push(A.storyId),s.push(A.targetRef),y+=1);return}if(!S||S.outcome==="deferred"){w.set(A.storyId,v.reasonCodes.includes("queue-cap-reached")?p.WORKER_POOL_BACKPRESSURE_PAUSED:S?.reasonCode||p.EXECUTION_BACKOFF),v.reasonCodes.includes("queue-cap-reached")&&(u.backpressurePauseCount+=1);return}w.delete(A.storyId),!a.has(A.storyId)&&(a.add(A.storyId),r.push(A.storyId),s.push(A.targetRef),S.outcome==="failed"?(y+=1,z.set(A.storyId,S.reasonCode||p.EXECUTION_FAILED)):S.outcome==="ignored"?f+=1:c+=1)},X=async()=>{const v=await Promise.race([...h.entries()].map(([A,S])=>S.promise.then(K=>({storyId:A,result:K}))));h.delete(v.storyId),u.completedChildCount+=1,u.pendingChildCount=h.size,ne(v.result)};for(;;){if(i>=e.maxIterations)return t.push("backoff"),E({status:"failed",receiptStatus:"failed",reasonCode:ht,publicSummary:"Headless yoloop reached the bounded iteration limit before completion metadata.",retryable:!1,startedAt:o,counts:O(i,r.length,c,y,f,l,m),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:t});if(Date.now()-o>e.maxDurationMs)return t.push("backoff"),E({status:"failed",receiptStatus:"failed",reasonCode:_t,publicSummary:"Headless yoloop reached the bounded duration limit before completion metadata.",retryable:!1,startedAt:o,counts:O(i,r.length,c,y,f,l,m),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:t});if(e.terminalGitAdapter.prepareLifecycleEvidence){t.push("lifecycle_evidence");const b=await e.terminalGitAdapter.prepareLifecycleEvidence({epicId:e.prepared.epicId,nowIso:e.now()});if(!b.ok)return t.push("backoff"),E({status:b.retryEligible?"backoff":"failed",receiptStatus:b.retryEligible?"deferred":"failed",reasonCode:b.reasonCode,publicSummary:"Headless yoloop stopped because physical Git lifecycle evidence could not be produced safely.",retryable:b.retryEligible,startedAt:o,counts:O(i,r.length,c,y,f,l,m),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:t});g=b.p205Authority}t.push("metadata_parse");const v=await e.yoloopInvoker({projectRoot:e.projectRoot,args:e.prepared.rootPrompt,attemptId:e.attempt.attempt_id,executionId:e.attempt.execution_id,jobId:e.attempt.job_id,runnerId:e.runnerId,iteration:i,runtimeId:e.prepared.runtimeId,...e.prepared.modelId?{modelId:e.prepared.modelId}:{},timeoutMs:e.timeoutMs,serverUrl:e.serverUrl});if(v.durationMs!==void 0&&(n[`iter-${i}`]=L(String(v.durationMs))),!v.success)return t.push("backoff"),E({status:"backoff",receiptStatus:"deferred",reasonCode:p.EXECUTION_FAILED,publicSummary:"Headless yoloop root metadata invocation failed with bounded public evidence.",retryable:!0,startedAt:o,counts:O(i,r.length,c,y,f,l,m),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:t});const A=v.metadata,S=Nt(A);if(!S.ok)return t.push("backoff"),E({status:"failed",receiptStatus:"failed",reasonCode:S.reasonCode,publicSummary:S.publicSummary,retryable:!1,startedAt:o,counts:O(i,r.length,c,y,f,l,m),workerPoolSummary:k(u),hashes:n,redactions:[...d,...S.redactionSummary],relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:t});const K=Ht(A);if(S.aborted&&K){for(;h.size>0;)await X();return m+=1,t.push("backoff"),E({status:"backoff",receiptStatus:"deferred",reasonCode:"yoloop-per-run-cap-resumable",publicSummary:"Headless yoloop reached a finite run boundary and scheduled the same queue after cool-down.",retryable:!0,retryNotBeforeAt:K.coolDownUntil,startedAt:o,counts:O(i+1,r.length,c,y,f,l,m),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:t})}if((S.aborted||S.complete||S.replay||S.outcome&&S.outcome!=="selected"&&S.outcome!=="queue_exhausted")&&M&&h.size>0){await X(),i+=1,t.push("reinvoke");continue}if(S.aborted)return m+=1,t.push("aborted"),E({status:"failed",receiptStatus:"failed",reasonCode:yt,publicSummary:"Headless yoloop stopped because public metadata reported an aborted loop.",retryable:!1,startedAt:o,counts:O(i+1,r.length,c,y,f,l,m),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:t});if(S.outcome&&S.outcome!=="selected"&&S.outcome!=="queue_exhausted")return t.push("backoff"),E({status:"failed",receiptStatus:"failed",reasonCode:`yoloop-${S.outcome}`,publicSummary:"Headless yoloop stopped on a non-executable graph-first continuation outcome.",retryable:!1,startedAt:o,counts:O(i+1,r.length,c,y,f,l,m),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:t});if(S.replay)return t.push("backoff"),E({status:"backoff",receiptStatus:"deferred",reasonCode:"yoloop-replay-pending",publicSummary:"Headless yoloop observed pending replay authority and did not delegate a second child.",retryable:!0,startedAt:o,counts:O(i+1,r.length,c,y,f,l,m),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:t});if(S.complete&&M&&w.size>0&&z.size===0)return t.push("backoff"),E({status:"backoff",receiptStatus:"deferred",reasonCode:[...w.values()].sort()[0],publicSummary:"Headless yoloop rejected terminal completion while previously runnable work remained undispatched.",retryable:!0,startedAt:o,counts:O(i+1,r.length,c,y,f,l,m),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:t});if(S.complete&&M&&z.size>0)return t.push("backoff"),E({status:"failed",receiptStatus:"failed",reasonCode:[...z.values()].sort()[0],publicSummary:"Headless yoloop rejected terminal completion because runnable work failed before an accepted dispatch receipt.",retryable:!1,startedAt:o,counts:O(i+1,r.length,c,y,f,l,m),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:t});const Z=Dt(A);if(Z){t.push("terminal_git");const b=new Date,x=await rt(e.projectRoot,{kind:"continuous",storyId:Z.epicId,sessionId:`${e.runnerId}:${e.attempt.attempt_id}`,idempotencyKey:Z.idempotencyKey,persistent:!1,expiresAt:new Date(b.getTime()+Math.max(e.timeoutMs,e.maxDurationMs)+6e4).toISOString()});if(!x.ok)return t.push("backoff"),E({status:"backoff",receiptStatus:"deferred",reasonCode:x.reasonCode,publicSummary:"Headless yoloop deferred terminal Git while another physical writer retained authority.",retryable:!0,startedAt:o,counts:O(i+1,r.length,c,y,f,l,m),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:t});let B,j=!1;try{B=await tt(Z,e.terminalGitAdapter,e.now,g)}finally{j=await at(x.path,x.owner).catch(()=>!1)}if(!j)return t.push("backoff"),E({status:"backoff",receiptStatus:"deferred",reasonCode:"git-lifecycle-integration-lock-release-failed",publicSummary:"Headless yoloop stopped because terminal Git writer ownership could not be released safely.",retryable:!0,startedAt:o,counts:O(i+1,r.length,c,y,f,l,m),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:t});if(n[`terminal-git-${i}`]=L(`${B.receipt.idempotencyKey}:${B.receipt.physicalStatus}`),!B.ok){const N=B.receipt.retryEligible;return t.push("backoff"),E({status:N?"backoff":"failed",receiptStatus:N?"deferred":"failed",reasonCode:B.reasonCodes[0]??"epic-terminal-git-failed",publicSummary:"Headless yoloop stopped at the epic terminal Git boundary with public-safe retry evidence.",retryable:N,startedAt:o,counts:O(i+1,r.length,c,y,f,l,m),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:t})}if(S.complete)return l+=1,t.push("complete"),E({status:"completed",receiptStatus:"applied",reasonCode:p.EXECUTION_COMPLETED,publicSummary:"Headless yoloop completed only after fresh root-owned physical Git verification.",retryable:!1,startedAt:o,counts:O(i+1,r.length,c,y,f,l,m),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:t});i+=1,t.push("reinvoke");continue}if(S.complete)return l+=1,t.push("complete"),E({status:"completed",receiptStatus:"applied",reasonCode:p.EXECUTION_COMPLETED,publicSummary:"Headless yoloop completed after public metadata reported yoloopComplete.",retryable:!1,startedAt:o,counts:O(i+1,r.length,c,y,f,l,m),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:t});const I=Mt(A);if(I){t.push("git_reconciliation");const b=await et(I,e.terminalGitAdapter,e.now);if(n[`git-reconciliation-${i}`]=L(`${I.idempotencyKey}:${b.reasonCodes.join(",")}`),!b.ok)return t.push("backoff"),E({status:"backoff",receiptStatus:"deferred",reasonCode:b.reasonCodes[0]??"git-reconciliation-failed",publicSummary:"Headless yoloop paused at a fail-closed Git reconciliation boundary.",retryable:!0,startedAt:o,counts:O(i+1,r.length,c,y,f,l,m),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:t})}const P=vt(A,e.prepared.epicId);if(!P.ok)return t.push("backoff"),E({status:"failed",receiptStatus:"failed",reasonCode:P.reasonCode,publicSummary:P.publicSummary,retryable:!1,startedAt:o,counts:O(i+1,r.length,c,y,f,l,m),workerPoolSummary:k(u),hashes:n,redactions:[...d,...P.redactionSummary],relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:t});const ee=P.continuous?void 0:P.prompts.find(b=>a.has(b.storyId));if(ee)return t.push("backoff"),E({status:"failed",receiptStatus:"failed",reasonCode:p.YOLOOP_ISOLATION_VIOLATION,publicSummary:"Headless yoloop rejected cyclic child story delegation evidence.",retryable:!1,startedAt:o,counts:O(i+1,r.length,c,y,f,l,m),workerPoolSummary:k(u),hashes:n,redactions:[...d,_("storyId","prompt_body",L(ee.storyId))],relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:t});if(u.mode=P.mode==="continuous_dag"?"continuous_dag":P.parallelAuthorized?"parallel_wave":"serial",u.serverMaxConcurrency=P.serverMaxConcurrency,P.continuous){M=!0;const b=P.prompts.filter(x=>!a.has(x.storyId)&&!h.has(x.storyId));if(u.pendingChildCount=b.length+h.size,b.length>0){const x=ke({store:e.store,nowIso:e.now(),localCap:e.localConcurrencyCap,serverMaxConcurrency:P.serverMaxConcurrency,parallelAuthorized:!0,continuous:!0,eligibleCount:b.length});if(u.queueCap=x.queueCap,u.availableLeases=x.availableLeases,u.effectiveConcurrency=x.effectiveConcurrency,u.reasonCodes.push(x.reasonCode),x.effectiveConcurrency===0&&h.size===0)return u.backpressurePauseCount+=1,t.push("backoff"),E({status:"backoff",receiptStatus:"deferred",reasonCode:p.WORKER_POOL_BACKPRESSURE_PAUSED,publicSummary:"Headless yoloop retained its eligible frontier while physical worker capacity was unavailable.",retryable:!0,startedAt:o,counts:O(i+1,r.length,c,y,f,l,m),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:t});const B=b.slice(0,x.effectiveConcurrency);t.push("child_story_delegation");for(const j of B)h.set(j.storyId,{child:j,promise:Ae({...e,child:j,iteration:i})});u.startedChildCount+=B.length,u.peakConcurrency=Math.max(u.peakConcurrency,h.size),u.pendingChildCount=b.length-B.length+h.size}if(h.size>0)await X();else{if(w.size>0)return t.push("backoff"),E({status:"backoff",receiptStatus:"deferred",reasonCode:[...w.values()].sort()[0],publicSummary:"Headless yoloop retained deferred continuous work for a bounded retry.",retryable:!0,startedAt:o,counts:O(i+1,r.length,c,y,f,l,m),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:t});if(z.size>0)return t.push("backoff"),E({status:"failed",receiptStatus:"failed",reasonCode:[...z.values()].sort()[0],publicSummary:"Headless yoloop completed independent work and stopped on the remaining failed dependency closure.",retryable:!1,startedAt:o,counts:O(i+1,r.length,c,y,f,l,m),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:t})}i+=1,t.push("reinvoke");continue}u.pendingChildCount=P.prompts.length;const Y=[...P.prompts];for(;Y.length>0;){const b=ke({store:e.store,nowIso:e.now(),localCap:e.localConcurrencyCap,serverMaxConcurrency:P.serverMaxConcurrency,parallelAuthorized:P.parallelAuthorized,continuous:!1,eligibleCount:Y.length});if(u.queueCap=b.queueCap,u.availableLeases=b.availableLeases,u.effectiveConcurrency=b.effectiveConcurrency,u.reasonCodes.push(b.reasonCode),b.effectiveConcurrency===0)return u.backpressurePauseCount+=1,u.pendingChildCount=Y.length,t.push("backoff"),E({status:"backoff",receiptStatus:"deferred",reasonCode:p.WORKER_POOL_BACKPRESSURE_PAUSED,publicSummary:"Headless yoloop paused child workers because bounded queue or lease capacity was unavailable.",retryable:!0,startedAt:o,counts:O(i+1,r.length,c,y,f,l,m),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:t});const x=Y.splice(0,b.effectiveConcurrency);u.startedChildCount+=x.length,u.peakConcurrency=Math.max(u.peakConcurrency,x.length),u.pendingChildCount=Y.length,t.push("child_story_delegation");const B=await Promise.all(x.map(N=>Ae({...e,child:N,iteration:i})));u.completedChildCount+=B.length;let j;for(const N of B){const se=N.child;n[`child-${se.storyId.replace(/[^A-Za-z0-9_.:-]/g,"-")}`]=N.commandHash,d.push(N.promptRedaction),r.push(se.storyId),s.push(se.targetRef),a.add(se.storyId);const te=N.receipt;if(!te){N.reasonCodes.includes("queue-cap-reached")?(u.backpressurePauseCount+=1,u.pendingChildCount+=1,u.reasonCodes.push(p.WORKER_POOL_BACKPRESSURE_PAUSED),j??={kind:"deferred",reasonCode:p.WORKER_POOL_BACKPRESSURE_PAUSED}):(y+=1,j??={kind:"missing",reasonCode:p.EXECUTION_FAILED});continue}if(te.outcome==="deferred"){j??={kind:"deferred",reasonCode:p.EXECUTION_BACKOFF};continue}if(te.outcome==="failed"){y+=1,j??={kind:"failed",reasonCode:te.reasonCode||p.EXECUTION_FAILED};continue}te.outcome==="ignored"?f+=1:c+=1}if(j){const N=j.kind==="deferred";return E({status:N?"backoff":"failed",receiptStatus:N?"deferred":"failed",reasonCode:j.reasonCode,publicSummary:j.kind==="missing"?"Headless yoloop child story delegation did not produce a public receipt.":N?"Headless yoloop child story delegated bounded backoff to the root attempt.":"Headless yoloop child story execution failed with public receipt evidence.",retryable:N,startedAt:o,counts:O(i+1,r.length,c,y,f,l,m),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:t})}}i+=1,t.push("reinvoke")}}async function Ae(e){const o=e.child.dispatchId?await e.continuousWorkspaceManager.prepare({projectRoot:e.projectRoot,epicId:e.prepared.epicId,storyId:e.child.storyId,targetRef:e.child.targetRef,dispatchId:e.child.dispatchId,executionBranch:e.child.executionBranch??"",graphRevision:e.child.graphRevision??"",authorizedWriteSet:e.child.writeSet??[]}):void 0;if(o&&!o.ok)return{child:e.child,reasonCodes:[o.reasonCode],commandHash:L(e.child.commandRef),promptRedaction:_(`child.${e.child.storyId}`,"prompt_body",L(e.child.commandRef)),terminalFailure:o.reasonCode,deferredFailure:/backpressure|lease-active/.test(o.reasonCode)};const t=e.projectRoot,a=o?.ok?Je(o.value):e.adapterOptions?.commandRunner,r=jt({rootAttempt:e.attempt,child:e.child,iteration:e.iteration,runtimeId:e.prepared.runtimeId,modelId:e.prepared.modelId,runtimeSource:e.prepared.runtimeSource}),s=V("attempt",r.idempotencyKey);let n=!!o;try{const d=await Xe({store:e.store,projectRoot:t,runnerId:e.runnerId,now:e.now,metadata:{continuityExecutionDirectives:[r]},adapterRegistry:e.registry,adapterOptions:{...e.adapterOptions,cwd:t,env:{...e.adapterOptions?.env,...o?.ok?{NEOCORTEX_BRANCHLESS_PROJECT_ROOT:o.value.workspacePath,NEOCORTEX_BRANCHLESS_ROOT_AUTHORITY:JSON.stringify(e.child.rootAuthority)}:{}},...a?{commandRunner:a,versionRunner:a}:{}},runtimeDefaults:e.runtimeDefaults,runtimeFallback:e.runtimeFallback,timeoutMs:e.timeoutMs,maxAttempts:1,limit:1,queueCap:e.queueCap,attemptIds:[s],idFactory:e.idFactory}),i=d.receipts.find(c=>c.attemptId===s)??d.receipts[0];if(o?.ok&&i&&i.outcome!=="failed"&&i.outcome!=="deferred"){const c=await e.continuousWorkspaceManager.integrate(o.value,{receiptRefs:[`continuity:${i.attemptId}`],nowIso:i.timestamp});if(!c.ok)return{child:e.child,receipt:i,reasonCodes:[...d.reasonCodes,c.reasonCode],commandHash:L(e.child.commandRef),promptRedaction:_(`child.${e.child.storyId}`,"prompt_body",L(e.child.commandRef)),terminalFailure:c.reasonCode,deferredFailure:/backpressure|graph-revision-stale/.test(c.reasonCode)};n=!1}return{child:e.child,receipt:i,reasonCodes:d.reasonCodes,commandHash:L(e.child.commandRef),promptRedaction:_(`child.${e.child.storyId}`,"prompt_body",L(e.child.commandRef))}}finally{o?.ok&&await e.continuousWorkspaceManager.release(o.value,n)}}function ke(e){const o=e.store.collectSnapshotRows({nowIso:e.nowIso,jobLimit:1,staleLeaseLimit:1,receiptLimit:1,eventLimit:1,snapshotLimit:1}),t=Math.max(1,Math.floor(o.queue.capacity)),a=Math.max(0,Math.floor(o.queue.running)-1),r=e.continuous?Math.max(0,Math.floor(o.queue.available)):Math.max(0,Math.min(Math.max(0,e.localCap-a),Math.floor(o.queue.available))),s=e.parallelAuthorized?Math.max(1,Math.floor(e.serverMaxConcurrency)):1,n=Math.max(0,Math.min(e.eligibleCount,s,e.localCap,t,r));return{queueCap:t,availableLeases:r,effectiveConcurrency:n,reasonCode:n===0?p.WORKER_POOL_BACKPRESSURE_PAUSED:(e.parallelAuthorized||e.continuous)&&n>1?p.WORKER_POOL_PARALLEL_ACTIVE:p.WORKER_POOL_SERIAL_FALLBACK}}function Oe(e){return{mode:"serial",serverMaxConcurrency:1,localCap:e,queueCap:1,availableLeases:1,effectiveConcurrency:1,peakConcurrency:0,pendingChildCount:0,startedChildCount:0,completedChildCount:0,backpressurePauseCount:0,reasonCodes:[]}}function k(e){return{mode:e.mode,serverMaxConcurrency:U(e.serverMaxConcurrency),localCap:U(e.localCap),queueCap:U(e.queueCap),availableLeases:U(e.availableLeases),effectiveConcurrency:U(e.effectiveConcurrency),peakConcurrency:U(e.peakConcurrency),pendingChildCount:U(e.pendingChildCount),startedChildCount:U(e.startedChildCount),completedChildCount:U(e.completedChildCount),backpressurePauseCount:U(e.backpressurePauseCount),reasonCodes:F(e.reasonCodes.length>0?e.reasonCodes:[p.WORKER_POOL_SERIAL_FALLBACK]).slice(0,10),publicSafe:!0}}function pe(e=be()){return k(Oe(e))}function U(e){return Number.isFinite(e)?Math.max(0,Math.min(1e4,Math.floor(e))):0}function kt(e){const o=ze(e.attempt.metadata_json,{autonomousKind:"run_yoloop",jobId:e.attempt.job_id,targetKind:"epic",targetRef:e.attempt.target_ref});if(!o.ok)return{ok:!1,status:"failed",receiptStatus:"failed",reasonCode:o.reasonCode,publicSummary:o.publicSummary,redactionSummary:o.redactionSummary};const t=Ot(e.attempt);if(!t.ok)return t;const a=Et(e);if(!a.ok)return{ok:!1,status:"failed",receiptStatus:"failed",reasonCode:a.reasonCode,publicSummary:a.publicSummary,redactionSummary:a.redactionSummary};const r=e.attempt.epic_id??ae(e.attempt.target_ref);return{ok:!0,input:{rootPrompt:`*yoloop @${e.attempt.target_ref}`,targetRef:e.attempt.target_ref,epicId:r,runtimeId:a.runtimeId,...a.modelId?{modelId:a.modelId}:{},runtimeSource:a.runtimeSource,publicSafe:!0}}}function Ot(e){const o=[];e.directive_kind!=="run_yoloop"&&o.push(_("directiveKind","unsafe_key","value-denied")),e.target_kind!=="epic"&&o.push(_("targetKind","prompt_body","value-denied")),(!le.test(e.target_ref)||q.test(e.target_ref)||D.test(e.target_ref))&&o.push(_("targetRef","prompt_body","value-denied"));const t=ae(e.target_ref);return e.epic_id&&e.epic_id!==t&&o.push(_("epicId","prompt_body","value-denied")),o.length>0?{ok:!1,status:"failed",receiptStatus:"failed",reasonCode:p.PROMPT_REJECTED,publicSummary:"Headless run_yoloop attempt did not match the canonical public epic prompt shape.",redactionSummary:o}:{ok:!0,input:{rootPrompt:`*yoloop @${e.target_ref}`,targetRef:e.target_ref,epicId:t,runtimeId:"fake",publicSafe:!0}}}function Et(e){const o=e.runtimeDefaults!==void 0?e.runtimeDefaults:Ue({projectRoot:e.projectRoot});if(C(o)&&o.ok===!1)return{ok:!1,reasonCode:p.RUNTIME_UNTRUSTED,publicSummary:typeof o.publicSummary=="string"?o.publicSummary:"Headless runtime defaults failed public-safety validation.",redactionSummary:Array.isArray(o.redactionSummary)?o.redactionSummary:[]};const t=Wt(e.attempt.runtime_source)??"explicit",a=e.attempt.runtime_id||e.attempt.model_id?{...e.attempt.runtime_id?{runtimeId:e.attempt.runtime_id}:{},...e.attempt.model_id?{modelId:e.attempt.model_id}:{},source:t,publicSafe:!0}:void 0,r={registry:e.registry,defaults:o,fallback:e.runtimeFallback};a&&(t==="origin"?r.origin=a:t==="default"?r.projectDefault=a:t==="fallback"?r.fallback=a:r.explicit=a);const s=$e(r);return s.ok?{ok:!0,runtimeId:s.runtimeId,...s.modelId?{modelId:s.modelId}:{},runtimeSource:s.runtimeSource}:{ok:!1,reasonCode:s.reasonCode,publicSummary:s.publicSummary,redactionSummary:s.redactionSummary}}function Rt(e){const o=[];for(const h of Object.keys(e))(!mt.has(h)||oe.test(h))&&o.push(_(h,Q(h),"key-denied"));e.publicSafe!==!0&&o.push(_("publicSafe","unsafe_key","value-denied"));const t=H(e,"kind"),a=H(e,"commandClass"),r=H(e,"jobId"),s=H(e,"operationId"),n=H(e,"idempotencyKey"),d=H(e,"targetKind"),i=H(e,"targetRef"),c=H(e,"commandRef"),y=H(e,"publicSummary"),f=H(e,"epicId");t!=="run_yoloop"&&o.push(_("kind","unsafe_key","value-denied")),a!=="goal-tick"&&a!=="loop-tick"&&o.push(_("commandClass","unsafe_key","value-denied")),he(r)||o.push(_("jobId","unsafe_key","value-denied")),he(s)||o.push(_("operationId","unsafe_key","value-denied")),he(n)||o.push(_("idempotencyKey","unsafe_key","value-denied")),(d!=="epic"||!i||!le.test(i)||D.test(i))&&o.push(_("targetRef","prompt_body","value-denied"));const l=i?`*yoloop @${i}`:void 0;(!c||c!==l||c.includes("@neocortex")||q.test(c)||D.test(c))&&o.push(_("commandRef","prompt_body","value-denied")),f&&i&&f!==ae(i)&&o.push(_("epicId","prompt_body","value-denied")),(!y||y.length>240||D.test(y))&&o.push(_("publicSummary","unbounded_text","value-denied")),e.reasonCode!==void 0&&(typeof e.reasonCode!="string"||D.test(e.reasonCode))&&o.push(_("reasonCode","unsafe_key","value-denied"));const m=Kt(e.runtime,o);e.attempts!==void 0&&ie(e.attempts,"attempts",o),e.metadata!==void 0&&ie(e.metadata,"metadata",o);const g=C(e.metadata)?e.metadata:void 0,u=Ft(e.redactionSummary,o);return o.length>0||t!=="run_yoloop"||!a||!r||!s||!n||!i||!c||!y?{ok:!1,reasonCode:o.some(M=>M.reason==="prompt_body")?p.PROMPT_REJECTED:p.DIRECTIVE_REJECTED,redactionSummary:o}:{ok:!0,directive:{kind:"run_yoloop",commandClass:a,jobId:r,operationId:s,idempotencyKey:n,targetKind:"epic",targetRef:i,commandRef:c,...f?{epicId:f}:{},...m?{runtime:m}:{},publicSummary:y,...typeof e.reasonCode=="string"?{reasonCode:e.reasonCode}:{},...g?{metadata:g}:{},...u.length>0?{redactionSummary:u}:{},publicSafe:!0}}}function vt(e,o){if(!e)return R(p.YOLOOP_METADATA_INVALID,"Headless yoloop metadata was missing.",[]);const t=Pt(e);if(!t.ok)return t;const a=[],r=C(e.yoloopExecutionPlan)?e.yoloopExecutionPlan:void 0,s=r?T(r.storyIds).filter(W):[],n=r?.version===3&&C(r.scheduler)&&Array.isArray(r.scheduler.nodes)?new Map(r.scheduler.nodes.filter(C).map(l=>[String(l.storyId??""),l])):new Map,d=r?.version===3&&C(r.scheduler)&&typeof r.scheduler.graphRevision=="string"?r.scheduler.graphRevision:void 0,i=r?.version===3&&typeof r.executionBranch=="string"?r.executionBranch:void 0;let c;if(r){const l=wt(r);if(!l.ok)return l;c=l;for(const g of Lt(r)){const u=J(g,o,"execution-plan");if(!u.ok)return u;a.push(Ee(u.prompt,n.get(u.prompt.storyId),d,i))}if(a.length===0)for(const g of s){const u=J(`*yolo @docs/stories/${g}.story.md`,o,"execution-plan");if(!u.ok)return u;a.push(Ee(u.prompt,n.get(u.prompt.storyId),d,i))}const m=Tt(e.skillDirectives,a);if(!m.ok)return m}const y=typeof e.nextStoryId=="string"&&W(e.nextStoryId)?e.nextStoryId:void 0;for(const l of r?[]:Array.isArray(e.skillDirectives)?e.skillDirectives:[]){if(!C(l)||l.kind!=="task")continue;const m=T(l.promptTemplates);if(m.length>0){for(const M of m){const w=J(M,o,"task-directive");if(!w.ok)return w;a.push(w.prompt)}continue}const g=typeof l.promptTemplate=="string"?l.promptTemplate:void 0;if(!g)continue;const u=T(l.storyIds).filter(W),h=u.length>0?u:y?[y]:[];if(h.length===0&&ue.test(g)){const M=J(g,o,"task-directive");if(!M.ok)return M;a.push(M.prompt);continue}for(const M of h){const w=g.includes("{storyId}")?g.replaceAll("{storyId}",M):g,z=J(w,o,"task-directive");if(!z.ok)return z;a.push(z.prompt)}}if(a.length===0&&y){const l=J(`*yolo @docs/stories/${y}.story.md`,o,"next-story");if(!l.ok)return l;a.push(l.prompt)}const f=Jt(a,l=>l.commandRef);if(c?.continuous){if(f.length!==s.length||f.some(l=>l.preparationOnly!==!0||l.source!=="execution-plan"))return R(p.YOLOOP_ISOLATION_VIOLATION,"Headless continuous yoloop rejected an ambiguous or non-preparation child prompt.",[_("promptTemplates","prompt_body","operation-denied")])}else if(f.some(l=>l.preparationOnly===!0))return R(p.YOLOOP_ISOLATION_VIOLATION,"Headless yoloop rejected branchless preparation outside a validated continuous plan.",[_("promptTemplates","prompt_body","operation-denied")]);if(s.length>0){const l=new Set(s);for(const m of f)if(!l.has(m.storyId))return R(p.YOLOOP_ISOLATION_VIOLATION,"Headless yoloop rejected a child prompt outside the server-authorized execution plan.",[_("storyId","prompt_body",L(m.storyId))])}return c?.parallelAuthorized&&!G(f.map(l=>l.storyId),s)?R(p.YOLOOP_METADATA_INVALID,"Headless yoloop rejected a parallel plan whose executable prompts did not match the selected wave.",[]):f.length===0&&!c?.continuous?R(p.YOLOOP_METADATA_INVALID,"Headless yoloop metadata did not include an authorized per-story child prompt.",[]):{ok:!0,prompts:f,mode:c?.mode??"legacy",serverMaxConcurrency:c?.serverMaxConcurrency??1,parallelAuthorized:c?.parallelAuthorized??!1,continuous:c?.continuous??!1,reasonCodes:[p.OK,c?.parallelAuthorized?p.WORKER_POOL_PARALLEL_ACTIVE:p.WORKER_POOL_SERIAL_FALLBACK]}}function Ee(e,o,t,a){if(!o||!t||!a)return e;const r=Array.isArray(o.writeSet)?T(o.writeSet):[],s=Re(o.childExecutionAuthority,{storyId:e.storyId,invocationPrompt:e.commandRef,authorizedWriteSet:r});return{...e,...typeof o.dispatchId=="string"?{dispatchId:o.dispatchId}:{},...typeof o.idempotencyKey=="string"?{idempotencyKey:o.idempotencyKey}:{},graphRevision:t,executionBranch:a,...r.length>0?{writeSet:r}:{},...s?{rootAuthority:s}:{}}}function Pt(e){const o=[];return e.nextStoryId!==void 0&&re(e.nextStoryId,"nextStoryId",o),e.yoloopExecutionPlan!==void 0&&re(e.yoloopExecutionPlan,"yoloopExecutionPlan",o),Array.isArray(e.skillDirectives)&&e.skillDirectives.forEach((t,a)=>{C(t)&&t.kind==="task"&&re(t,`skillDirectives.${a}`,o)}),o.length>0?R(p.YOLOOP_METADATA_INVALID,"Headless yoloop rejected unsafe public metadata before child delegation.",o):{ok:!0}}function Tt(e,o){if(!Array.isArray(e))return{ok:!0};const t=new Set(o.map(a=>a.commandRef));for(const[a,r]of e.entries()){if(!C(r)||r.kind!=="task")continue;const s=typeof r.promptTemplate=="string"?r.promptTemplate:void 0,n=T(r.promptTemplates);if(s==="[REDACTED]"&&r.subagentType==="neocortex"&&typeof r.reasonCode=="string"&&r.reasonCode.startsWith("directive-prompt-")&&n.length===0)continue;const i=[...s?[s]:[],...n];if(r.subagentType!=="neocortex"||i.length===0||i.some(c=>!t.has(c)))return R(p.YOLOOP_ISOLATION_VIOLATION,"Headless yoloop rejected a task directive that conflicted with the server-authorized execution plan.",[_(`skillDirectives.${a}`,"prompt_body","operation-denied")])}return{ok:!0}}function re(e,o,t){if(typeof e=="string"){if(/\.allowedDebt\.constraints\.\d+$/.test(o)&&pt.has(e))return;(D.test(e)||/\0/.test(e))&&t.push(_(o,Q(o),"value-denied"));return}if(!(e==null||typeof e=="number"||typeof e=="boolean")){if(Array.isArray(e)){e.forEach((a,r)=>re(a,`${o}.${r}`,t));return}if(C(e)){for(const[a,r]of Object.entries(e)){const s=`${o}.${a}`;!(a==="promptTemplate"||a==="promptTemplates"||a==="invocationPrompt"||a==="childPromptKind"||a==="allowMetaTaskPromptInChild"||a==="authorization")&&oe.test(a)&&t.push(_(s,Q(a),"key-denied")),re(r,s,t)}return}t.push(_(o,"unsafe_key","value-denied"))}}function wt(e){const o=typeof e.mode=="string"?e.mode:"",t=C(e.isolationPolicy)?e.isolationPolicy:void 0,a=T(e.storyIds);if(e.authorization!=="server_authorized")return R(p.YOLOOP_METADATA_INVALID,"Headless yoloop execution plan was not server-authorized.",[]);if(e.executor!=="root_agent"&&e.executor!=="root_agent_with_child_tasks")return R(p.YOLOOP_METADATA_INVALID,"Headless yoloop execution plan executor was not root-owned.",[]);if(o!=="serial"&&o!=="parallel_wave"&&o!=="continuous_dag"&&o!=="manual")return R(p.YOLOOP_METADATA_INVALID,"Headless yoloop execution plan mode was invalid.",[]);const r=e.version===3&&o==="continuous_dag";if(!Array.isArray(e.storyIds)||!r&&a.length===0||a.length!==e.storyIds.length||a.some(h=>!W(h))||new Set(a).size!==a.length)return R(p.YOLOOP_METADATA_INVALID,"Headless yoloop execution plan story selection was invalid or ambiguous.",[]);if(!t||t.rootOwnsLoop!==!0||t.childPromptKind==="per_story_branchless_preparation_only"&&!r||Object.prototype.hasOwnProperty.call(t,"childExecutionBoundary")&&!r||t.childPromptKind!=="per_story_yolo_only"&&t.childPromptKind!=="per_story_branchless_preparation_only"&&!(t.childPromptKind==="none"&&(o==="serial"&&t.childTaskDelegation==="not_required"||o==="parallel_wave"&&e.executor==="root_agent"&&t.childTaskDelegation==="forbidden"))||t.allowOuterYoloopInChild!==!1||t.allowMetaTaskPromptInChild!==!1)return R(p.YOLOOP_ISOLATION_VIOLATION,"Headless yoloop rejected an execution plan that did not preserve root-owned child isolation.",[_("isolationPolicy","prompt_body","value-denied")]);const s=Array.isArray(e.skippedStories)?e.skippedStories:[];for(const h of s){if(!C(h)||typeof h.storyId!="string"||!W(h.storyId)||typeof h.reason!="string")return R(p.YOLOOP_METADATA_INVALID,"Headless yoloop skipped-story evidence was malformed.",[]);if(a.includes(h.storyId))return R(p.YOLOOP_METADATA_INVALID,"Headless yoloop selected a story that server evidence marked skipped.",[])}if(r){const h=C(e.scheduler)?e.scheduler:void 0,M=Array.isArray(h?.nodes)?h.nodes.filter(C):[],w=T(h?.readyStoryIds),z=T(h?.runningStoryIds),ne=T(e.promptTemplates),X=C(e.dependencyBasis)?e.dependencyBasis:void 0,v=C(e.readinessBasis)?e.readinessBasis:void 0,A=typeof h?.graphRevision=="string"?h.graphRevision:"",S=typeof e.executionBranch=="string"?e.executionBranch:"",K=M.map(I=>typeof I.storyId=="string"?I.storyId:""),Z=M.find(I=>{const P=typeof I.storyId=="string"?I.storyId:"",ee=typeof I.promptTemplate=="string"?I.promptTemplate:"",Y=Array.isArray(I.writeSet)?T(I.writeSet):[];return!W(P)||ee!==`*yolo @docs/stories/${P}.story.md branchless-preparation`||typeof I.dispatchId!="string"||!/^[a-f0-9]{64}$/.test(I.dispatchId)||typeof I.idempotencyKey!="string"||!/^[a-f0-9]{64}$/.test(I.idempotencyKey)||I.dependencyBasis!=="verified"||!Array.isArray(I.dependencies)||T(I.dependencies).length!==I.dependencies.length||!Array.isArray(I.writeSet)||Y.length===0||Y.length!==I.writeSet.length||!Re(I.childExecutionAuthority,{storyId:P,invocationPrompt:ee,authorizedWriteSet:Y})});return e.executor!=="root_agent_with_child_tasks"||e.legacyConcurrencyIgnored!==!0||Object.prototype.hasOwnProperty.call(e,"maxConcurrency")||Object.prototype.hasOwnProperty.call(e,"maxParallel")||t?.rootOwnedScheduling!=="continuous_dag_allowed"||t?.childPromptKind!=="per_story_branchless_preparation_only"||t?.childExecutionBoundary!=="filesystem_only"||t?.childTaskDelegation!=="allowed"||t?.maxDepth!==1||t?.childWorkspace!=="branchless_sandbox"||t?.epicCheckout!=="current_checkout"||t?.workspaceLifecycle!=="user_managed"||t?.integrationOwner!=="root_agent"||!h||h.schemaVersion!==1||h.strategy!=="continuous-event-driven-dag"||h.logicalConcurrency!=="ready-set"||h.capacityPolicy!=="backpressure-only"||h.rootOwnsLoop!==!0||h.maxDepth!==1||!/^[a-f0-9]{64}$/.test(A)||!Yt(S)||new Set(K).size!==K.length||K.some(I=>!W(I))||w.some(I=>!K.includes(I))||z.some(I=>!K.includes(I)||w.includes(I))||!G(a,w)||ne.length!==a.length||ne.some((I,P)=>I!==`*yolo @docs/stories/${a[P]}.story.md branchless-preparation`)||!X||X.source!=="state_snapshot"||!v||v.source!=="ready_wave"||!G(T(v.selectedStoryIds),a)||Z?R(p.YOLOOP_METADATA_INVALID,"Headless yoloop rejected an invalid continuous DAG execution plan.",[]):{ok:!0,mode:"continuous_dag",serverMaxConcurrency:a.length,parallelAuthorized:!0,continuous:!0}}if(e.version===2){const h=Ze(e);return h.ok?{ok:!0,mode:"parallel_wave",serverMaxConcurrency:h.childExecutionConcurrency,parallelAuthorized:!1,continuous:!1}:R(p.YOLOOP_METADATA_INVALID,"Headless yoloop rejected an unsafe phased execution plan.",[])}if(o!=="parallel_wave")return{ok:!0,mode:o,serverMaxConcurrency:1,parallelAuthorized:!1,continuous:!1};const n=e.maxConcurrency,d=e.maxParallel,i=C(e.dependencyBasis)?e.dependencyBasis:void 0,c=C(e.readinessBasis)?e.readinessBasis:void 0,y=Array.isArray(e.parallelWaves)?e.parallelWaves:[],f=y.length===1&&C(y[0])?y[0]:void 0;if(t.rootOwnedScheduling!=="parallel_wave_allowed"||!Number.isInteger(n)||typeof n!="number"||n<2||n>a.length||!Number.isInteger(d)||d!==n||!i||i.source!=="state_snapshot"||!G(T(i.storyIds),a)||!c||c.source!=="ready_wave"||!G(T(c.selectedStoryIds),a)||!f||!G(T(f.storyIds),a)||f.maxConcurrency!==n)return R(p.YOLOOP_METADATA_INVALID,"Headless yoloop parallel plan lacked consistent bounded authorization and readiness evidence.",[]);const l=T(f.promptTemplates);if(l.length!==a.length||new Set(l).size!==l.length)return R(p.YOLOOP_METADATA_INVALID,"Headless yoloop parallel wave prompts were incomplete or ambiguous.",[]);const g=(Array.isArray(f.proofSummaries)?f.proofSummaries:Array.isArray(e.proofSummaries)?e.proofSummaries:[]).find(h=>C(h)&&G(T(h.storyIds),a));return!C(g)||g.dependencyClosure!=="resolved"||g.contractOwnership!=="non_overlapping"||g.validationSurfaces!=="compatible"?R(p.YOLOOP_METADATA_INVALID,"Headless yoloop parallel plan lacked resolved independence proof.",[]):s.find(h=>C(h)&&typeof h.reason=="string"&&/(cycle|unresolved|ambiguous)/i.test(h.reason))?R(p.YOLOOP_METADATA_INVALID,"Headless yoloop parallel plan contained unresolved dependency evidence.",[]):{ok:!0,mode:"parallel_wave",serverMaxConcurrency:n,parallelAuthorized:!0,continuous:!1}}function Re(e,o){if(!C(e)||!C(e.artifact))return;const t=e.artifact,a=Array.isArray(e.authorizedWriteSet)?T(e.authorizedWriteSet):[];if(Object.keys(e).sort().join("\0")!==["artifact","authorizedWriteSet","effectScope","invocationPrompt","kind","lifecycleAuthority","publicSafe","schemaVersion","storyId"].sort().join("\0")||Object.keys(t).sort().join("\0")!==["content","contentBinding","kind","path","schemaVersion"].sort().join("\0")||e.schemaVersion!==1||e.kind!=="branchless_story_preparation"||e.storyId!==o.storyId||e.invocationPrompt!==o.invocationPrompt||!Array.isArray(e.authorizedWriteSet)||a.length!==e.authorizedWriteSet.length||a.some(s=>nt(s)!==s)||!xt(a,o.authorizedWriteSet)||e.effectScope!=="filesystem_only"||e.lifecycleAuthority!=="root_only"||e.publicSafe!==!0||t.schemaVersion!==1||t.kind!=="branchless_root_bound_artifact"||typeof t.path!="string"||!a.includes(t.path)||typeof t.content!="string"||t.content.length===0||t.content.length>4096||typeof t.contentBinding!="string"||!/^[a-f0-9]{64}$/.test(t.contentBinding))return;const r=Te("sha256").update(["branchless-root-bound-artifact-v1",o.storyId,o.invocationPrompt,...a,"filesystem_only","root_only",t.path,t.content].join("\0")).digest("hex");if(t.contentBinding===r)return e}function xt(e,o){return e.length===o.length&&e.every((t,a)=>t===o[a])}function Lt(e){const o=[];o.push(...T(e.promptTemplates));for(const t of Array.isArray(e.serialSteps)?e.serialSteps:[])C(t)&&typeof t.promptTemplate=="string"&&o.push(t.promptTemplate);for(const t of Array.isArray(e.parallelWaves)?e.parallelWaves:[])C(t)&&o.push(...T(t.promptTemplates));return o}function J(e,o,t){if(ge(e))return R(p.YOLOOP_ISOLATION_VIOLATION,"Headless yoloop rejected an unsafe child prompt shape.",[_("promptTemplate","prompt_body",L(e))]);if(!ue.test(e))return R(p.YOLOOP_METADATA_INVALID,"Headless yoloop child prompt did not match the canonical per-story yolo shape.",[_("promptTemplate","prompt_body",L(e))]);const a=ct.test(e),r=e.replace(/^\*yolo @/,"").replace(/ branchless-preparation$/,""),s=qt(r);return!dt.test(r)||!W(s)||!s.startsWith(`${o}.`)?R(p.YOLOOP_ISOLATION_VIOLATION,"Headless yoloop rejected a child prompt outside the targeted public epic.",[_("storyId","prompt_body",L(s))]):{ok:!0,prompt:{storyId:s,targetRef:r,commandRef:e,source:t,...a?{preparationOnly:!0}:{}}}}function Dt(e){const o=e?.epicTerminalGitDirective;if(!(!C(o)||o.schemaVersion!==1||o.kind!=="epic_terminal_git"||typeof o.epicId!="string"||typeof o.executionBranch!="string"||typeof o.originBranch!="string"||typeof o.expectedExecutionHeadSha!="string"||!Array.isArray(o.storyCheckpointIds)||!C(o.localGates)||o.localGates.passed!==!0||!Array.isArray(o.localGates.receiptRefs)||!C(o.reconcile)||typeof o.idempotencyKey!="string"||o.publicSafe!==!0))return o}function Mt(e){const o=e?.epicGitReconciliationDirective;if(!(!C(o)||o.schemaVersion!==1||o.kind!=="epic_git_reconciliation"||typeof o.epicId!="string"||typeof o.executionBranch!="string"||typeof o.originBranch!="string"||!["start","resume","audit"].includes(String(o.lifecycleBoundary))||typeof o.dryRun!="boolean"||typeof o.idempotencyKey!="string"||o.publicSafe!==!0))return o}function Nt(e){if(!e||!C(e))return{ok:!1,reasonCode:p.YOLOOP_METADATA_INVALID,publicSummary:"Headless yoloop root invocation did not return public metadata.",redactionSummary:[]};const o=C(e.yoloopContinuationDecision)?e.yoloopContinuationDecision:void 0,t=typeof o?.outcome=="string"?o.outcome:void 0,a=t==="queue_exhausted"||e.yoloopComplete===!0,r=e.yoloopAborted===!0,s=t==="selected"&&o?.replay===!0;return t&&!["selected","queue_exhausted","blocked","cycle","invalid","no_progress"].includes(t)?{ok:!1,reasonCode:p.YOLOOP_METADATA_INVALID,publicSummary:"Headless yoloop rejected an unknown continuation outcome.",redactionSummary:[]}:t==="queue_exhausted"&&o?.terminalSuccess!==!0?{ok:!1,reasonCode:p.YOLOOP_METADATA_INVALID,publicSummary:"Headless yoloop rejected inconsistent queue exhaustion metadata.",redactionSummary:[]}:a&&r?{ok:!1,reasonCode:p.YOLOOP_METADATA_INVALID,publicSummary:"Headless yoloop metadata reported mutually exclusive terminal states.",redactionSummary:[_("yoloopTerminal","unsafe_key","value-denied")]}:{ok:!0,complete:a,aborted:r,outcome:t,replay:s}}function Ht(e){if(!e)return;const o=e.abortReason;if(o!=="YOLOOP_PER_RUN_CAP_REACHED"&&o!=="YOLOOP_SESSION_TIMEOUT")return;const t=e.yoloopResumableBoundary,a=/^[A-Za-z0-9._:-]{1,128}$/;if(!(!C(t)||t.schemaVersion!=="YoloopResumableBoundary/1.0"||t.resumable!==!0||t.reason!==o||t.publicSafe!==!0||typeof t.coolDownUntil!="string"||!Number.isFinite(Date.parse(t.coolDownUntil))||!Number.isSafeInteger(t.retryAfterMs)||t.retryAfterMs<0||typeof t.operationId!="string"||!a.test(t.operationId)||!C(t.receipt)||t.receipt.schemaVersion!=="YoloopSessionRolloverReceipt/1.0"||typeof t.receipt.runId!="string"||!a.test(t.receipt.runId)||t.receipt.operationId!==t.operationId||typeof t.receipt.idempotencyKey!="string"||!a.test(t.receipt.idempotencyKey)||typeof t.receipt.payloadHash!="string"||!/^[a-f0-9]{64}$/.test(t.receipt.payloadHash)||t.receipt.coolDownUntil!==t.coolDownUntil||!Number.isSafeInteger(t.receipt.revision)||t.receipt.revision<0||t.receipt.snapshotHash!==null&&(typeof t.receipt.snapshotHash!="string"||!/^[a-f0-9]{64}$/.test(t.receipt.snapshotHash))||t.receipt.status!=="exhausted"||t.receipt.publicSafe!==!0))return{coolDownUntil:t.coolDownUntil}}function jt(e){const o=`${e.rootAttempt.execution_id}:${e.child.graphRevision??"legacy"}:${e.child.storyId}`,t=e.child.dispatchId??V("child-op",`${o}:${e.iteration}`),a=e.child.idempotencyKey??V("child-idem",`${o}:${e.iteration}`);return{schemaVersion:1,contractVersion:"continuity-v1",kind:"run_yolo",commandClass:e.rootAttempt.command_class==="goal-tick"?"goal-tick":"loop-tick",jobId:e.rootAttempt.job_id,operationId:t,idempotencyKey:a,targetKind:"story",targetRef:e.child.targetRef,commandRef:e.child.commandRef,...e.child.preparationOnly?{executionMode:"branchless_child_preparation"}:{},storyId:e.child.storyId,runtime:{runtimeId:e.runtimeId,...e.modelId?{modelId:e.modelId}:{},source:e.runtimeSource??"explicit",reasonCode:e.runtimeSource==="fallback"?p.RUNTIME_FALLBACK:p.RUNTIME_EXPLICIT,publicSafe:!0},publicSummary:`Root-owned yoloop delegated public story ${e.child.storyId}.`,reasonCode:p.OK,metadata:{governanceSource:"delegated-subagent",parentAttemptId:e.rootAttempt.attempt_id,parentExecutionId:e.rootAttempt.execution_id,iteration:e.iteration,...e.child.dispatchId?{dispatchId:e.child.dispatchId}:{},...e.child.graphRevision?{graphRevision:e.child.graphRevision}:{},...e.child.writeSet?{writeSet:e.child.writeSet}:{},...e.child.executionBranch?{executionBranch:e.child.executionBranch}:{},...e.child.graphRevision?{childWorkspace:"branchless_sandbox",epicCheckout:"current_checkout",workspaceLifecycle:"user_managed",integrationOwner:"root_agent",maxDepth:1}:{},publicSafe:!0},attempts:[],redactionSummary:[_("prompt","prompt_body",L(e.child.commandRef))],publicSafe:!0}}function me(e,o,t){const a=ve(t.hashes),r=t.workerPoolSummary??pe(),s=ve({iterations:t.counts.iterations,childCount:t.counts.childCount,succeededChildCount:t.counts.succeededChildCount,failedChildCount:t.counts.failedChildCount,skippedChildCount:t.counts.skippedChildCount,metadataCompleteCount:t.counts.metadataCompleteCount,metadataAbortedCount:t.counts.metadataAbortedCount,serverMaxConcurrency:r.serverMaxConcurrency,localCap:r.localCap,queueCap:r.queueCap,availableLeases:r.availableLeases,effectiveConcurrency:r.effectiveConcurrency,peakConcurrency:r.peakConcurrency,pendingChildCount:r.pendingChildCount,startedChildCount:r.startedChildCount,completedChildCount:r.completedChildCount,backpressurePauseCount:r.backpressurePauseCount}),n={schemaVersion:1,contractVersion:"continuity-v1",attemptId:o.attempt_id,executionId:o.execution_id,jobId:o.job_id,directiveHash:o.directive_hash,status:t.status,reasonCode:t.reasonCode,storyIds:t.childStoryIds.slice(0,50),counts:s,hashes:a,...t.reasonCode===Ie.BYPASS_BLOCKED?{governanceEvidence:Ne}:{},reasonCodes:F([t.reasonCode,...r.reasonCodes,...t.stateTransitions]),publicSummary:de(t.publicSummary)};return e.completeHeadlessExecutionAttempt({attemptId:o.attempt_id,executionId:o.execution_id,jobId:o.job_id,leaseId:t.leaseId,runnerId:t.runnerId,status:t.status,completedAt:t.completedAt,durationMs:t.durationMs,reasonCode:t.reasonCode,publicSummary:de(t.publicSummary),notBeforeAt:t.notBeforeAt,retryCount:t.retryCount,counts:s,hashes:a,redactionSummary:t.redactionSummary,relativePaths:F([o.target_ref,...t.relativePaths]),metadata:n}),e.recordHeadlessExecutionReceipt({receiptId:`receipt-${V("headless-yoloop",`${o.attempt_id}-${t.status}`)}`,attemptId:o.attempt_id,executionId:o.execution_id,jobId:o.job_id,status:t.receiptStatus,reasonCode:t.reasonCode,createdAt:t.completedAt,operationId:`${o.execution_id}:${t.status}:receipt`,idempotencyKey:`${o.directive_hash}:${t.status}:receipt`,counts:s,hashes:a,redactionSummary:t.redactionSummary,relativePaths:F([o.target_ref,...t.relativePaths]),metadata:n}),e.recordHeadlessExecutionSummary({eventId:`event-${V("headless-yoloop-summary",`${o.attempt_id}-${t.status}`)}`,attemptId:o.attempt_id,executionId:o.execution_id,jobId:o.job_id,status:t.status,runtimeId:t.runtimeId,modelId:t.modelId,publicSummary:de(t.publicSummary),reasonCode:t.reasonCode,createdAt:t.completedAt,durationMs:t.durationMs,counts:s,hashes:a,redactionSummary:t.redactionSummary,relativePaths:F([o.target_ref,...t.relativePaths]),metadata:n}),{attemptId:o.attempt_id,executionId:o.execution_id,jobId:o.job_id,status:t.status,outcome:t.receiptStatus,reasonCode:t.reasonCode,timestamp:t.completedAt,childStoryIds:t.childStoryIds,aggregateCounts:t.counts,workerPoolSummary:r,redactionSummary:t.redactionSummary,publicSafe:!0}}function zt(e,o){return{attemptId:e.attempt_id,executionId:e.execution_id,jobId:e.job_id,status:o.status,outcome:o.receiptStatus,reasonCode:o.reasonCode,timestamp:o.timestamp,childStoryIds:[],aggregateCounts:ye(),workerPoolSummary:pe(),redactionSummary:[],publicSafe:!0}}function Bt(e,o,t,a,r){if(!o.retryable)return{retry:!1};const s=e.retry_count+1;if(s>=Math.max(1,e.max_attempts||t))return{retry:!1,retryCount:s};const n=Math.min(8,2**Math.max(0,e.retry_count));return{retry:!0,retryCount:s,notBeforeAt:Zt(Pe(r,a*n),o.retryNotBeforeAt)}}function E(e){return{status:e.status,receiptStatus:e.receiptStatus,reasonCode:e.reasonCode,publicSummary:e.publicSummary,retryable:e.retryable,...e.retryNotBeforeAt?{retryNotBeforeAt:e.retryNotBeforeAt}:{},durationMs:Math.max(0,Date.now()-e.startedAt),counts:e.counts,workerPoolSummary:e.workerPoolSummary??pe(),hashes:e.hashes,redactionSummary:e.redactions.slice(0,50),relativePaths:F(e.relativePaths).slice(0,50),childStoryIds:F(e.childStoryIds).slice(0,50),stateTransitions:F(e.stateTransitions)}}function Kt(e,o){if(e===void 0)return;if(!C(e)){o.push(_("runtime","unsafe_key","value-denied"));return}for(const s of Object.keys(e))(!ft.has(s)||oe.test(s))&&o.push(_(`runtime.${s}`,Q(s),"key-denied"));e.publicSafe!==!0&&o.push(_("runtime.publicSafe","unsafe_key","value-denied"));const t=H(e,"runtimeId"),a=H(e,"modelId"),r=H(e,"source");if(t&&(!/^[A-Za-z0-9][A-Za-z0-9._:-]{0,79}$/.test(t)||D.test(t)||q.test(t))&&o.push(_("runtime.runtimeId","unsafe_key","value-denied")),a&&(!/^[A-Za-z0-9][A-Za-z0-9._:+/-]{0,119}$/.test(a)||D.test(a)||q.test(a))&&o.push(_("runtime.modelId","unsafe_key","value-denied")),r!==void 0&&r!=="explicit"&&r!=="origin"&&r!=="default"&&r!=="fallback"&&r!=="unspecified"&&o.push(_("runtime.source","unsafe_key","value-denied")),e.reasonCode!==void 0&&(typeof e.reasonCode!="string"||D.test(e.reasonCode))&&o.push(_("runtime.reasonCode","unsafe_key","value-denied")),e.publicSafe===!0)return{...t?{runtimeId:t}:{},...a?{modelId:a}:{},...r==="explicit"||r==="origin"||r==="default"||r==="fallback"||r==="unspecified"?{source:r}:{},...typeof e.reasonCode=="string"?{reasonCode:e.reasonCode}:{},publicSafe:!0}}function Ut(e){const o=Array.isArray(e)?e:e?[e]:[],t=[];for(const a of o){const r=a.continuityExecutionDirectives;Array.isArray(r)&&t.push(...r)}return t}function $t(e){return L(fe({kind:e.kind,commandClass:e.commandClass,jobId:e.jobId,targetRef:e.targetRef,commandRef:e.commandRef,epicId:e.epicId,runtime:e.runtime}))}function fe(e){return Array.isArray(e)?`[${e.map(fe).join(",")}]`:C(e)?`{${Object.keys(e).sort().map(o=>`${JSON.stringify(o)}:${fe(e[o])}`).join(",")}}`:JSON.stringify(e)}function ie(e,o,t){if(typeof e=="string"){(D.test(e)||q.test(e))&&t.push(_(o,Q(o),"value-denied"));return}if(!(e==null||typeof e=="number"||typeof e=="boolean")){if(Array.isArray(e)){e.forEach((a,r)=>ie(a,`${o}.${r}`,t));return}if(C(e)){for(const[a,r]of Object.entries(e)){const s=`${o}.${a}`;oe.test(a)&&t.push(_(s,Q(a),"key-denied")),ie(r,s,t)}return}t.push(_(o,"unsafe_key","value-denied"))}}function Ft(e,o){if(e===void 0)return[];if(!Array.isArray(e))return o.push(_("redactionSummary","unsafe_key","value-denied")),[];const t=[];for(const[a,r]of e.entries()){if(!C(r)||r.publicSafe!==!0){o.push(_(`redactionSummary.${a}`,"unsafe_key","value-denied"));continue}const s=H(r,"field"),n=H(r,"reason"),d=H(r,"evidence");if(!s||!n||!d||D.test(s)||D.test(n)||D.test(d)){o.push(_(`redactionSummary.${a}`,"unsafe_key","value-denied"));continue}t.push({field:s,reason:n,evidence:d,publicSafe:!0})}return t}function R(e,o,t){return{ok:!1,reasonCode:e,publicSummary:o,redactionSummary:t}}function T(e){return Array.isArray(e)?e.filter(o=>typeof o=="string"):[]}function Yt(e){return e.length>0&&e.length<=240&&!e.startsWith("-")&&!e.includes("..")&&!e.includes("\\")&&/^[A-Za-z0-9._/-]+$/.test(e)}function G(e,o){return e.length===o.length&&new Set(e).size===e.length&&e.every(t=>o.includes(t))}function Vt(e){return le.test(e.target_ref)?[e.target_ref]:[]}function ve(e){if(!e)return;const o={};for(const[t,a]of Object.entries(e))!/^[A-Za-z0-9_.:-]{1,80}$/.test(t)||oe.test(t)||D.test(t)||typeof a=="string"&&D.test(a)||(o[t]=a);return Object.keys(o).length>0?o:void 0}function ye(){return O(0,0,0,0,0,0,0)}function O(e,o,t,a,r,s,n){return{iterations:e,childCount:o,succeededChildCount:t,failedChildCount:a,skippedChildCount:r,metadataCompleteCount:s,metadataAbortedCount:n}}function qt(e){return e.replace(/^docs\/stories\//,"").replace(/\.story\.md$/,"")}function ae(e){return e.replace(/^docs\/epics\/epic-/,"").replace(/\.md$/,"")}function W(e){return/^[A-Za-z0-9][A-Za-z0-9_-]*\.\d+[A-Za-z0-9_-]*$/.test(e)&&!D.test(e)&&!q.test(e)}function Wt(e){if(e==="explicit"||e==="origin"||e==="default"||e==="fallback")return e}function Gt(e){if(e==="explicit"||e==="origin"||e==="default"||e==="fallback"||e==="unspecified")return e}function Q(e){return/prompt|commandRef/i.test(e)?"prompt_body":/std(?:out|err)|raw|log|transcript|stack/i.test(e)?"raw_log":/url/i.test(e)?"private_url":/path|cwd|argv|args|shell|command|binary|executable/i.test(e)?"executable_path":/secret|token|password|authorization|api[_-]?key|license/i.test(e)?"secret_or_pii":"unsafe_key"}function H(e,o){return typeof e[o]=="string"?e[o]:void 0}function he(e){return!!(e&&ut.test(e)&&!D.test(e)&&!q.test(e))}function C(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Xt(e,o){return V(e,`${o}-${Date.now()}-${we(4).toString("hex")}`)}function Pe(e,o){const t=Date.parse(e);return new Date((Number.isFinite(t)?t:Date.now())+o).toISOString()}function Zt(e,o){const t=Date.parse(e),a=o?Date.parse(o):Number.NaN;return Number.isFinite(a)?Number.isFinite(t)?a>t?o:e:o:e}function $(e,o,t){return Number.isFinite(e)?Math.max(o,Math.min(t,Math.floor(e))):o}function F(e){return Array.from(new Set(e))}function Jt(e,o){const t=new Set,a=[];for(const r of e){const s=o(r);t.has(s)||(t.add(s),a.push(r))}return a}export{ce as DEFAULT_HEADLESS_YOLOOP_LOCAL_CONCURRENCY_CAP,it as DEFAULT_HEADLESS_YOLOOP_MAX_DURATION_MS,st as DEFAULT_HEADLESS_YOLOOP_MAX_ITERATIONS,Se as MAX_HEADLESS_YOLOOP_LOCAL_CONCURRENCY_CAP,ho as RUN_YOLOOP_DRIVER_STATES,St as defaultYoloopRootInvoker,_o as isCanonicalDelegatedStoryPrompt,be as resolveDefaultHeadlessYoloopLocalConcurrencyCap,Co as runYoloopExecutionPhase};
@@ -7,4 +7,4 @@
7
7
  export { YoloopClientStateStore, createDefaultCounters, createDefaultState, type ClientYoloopLogger, } from './yoloop-client-state-store.js';
8
8
  export { isYoloopTrigger, readYoloopForRequest, persistYoloopFromResponse, maybeRunDiscoveryHook, } from './invoke-hooks.js';
9
9
  export type { DiscoveryHookContext, DiscoveryHookResult, DiscoveryHookLogger, } from './discovery-hook.js';
10
- export type { YoloopPersistedCounters, YoloopPersistedLock, YoloopPersistedSession, YoloopPersistedState, YoloopSessionMode, YoloopStateOperation, YoloopStateUpdate, } from './shared-yoloop-types.js';
10
+ export type { YoloopPersistedCounters, YoloopPersistedLock, YoloopPersistedSession, YoloopPersistedState, YoloopPersistenceCapability, YoloopSessionRolloverReceiptV1, YoloopResumableBoundaryV1, YoloopSessionMode, YoloopStateOperation, YoloopStateUpdate, } from './shared-yoloop-types.js';
@@ -1,9 +1,11 @@
1
- import{statSync as N}from"node:fs";import{join as B}from"node:path";import{YoloopClientStateStore as F}from"./yoloop-client-state-store.js";import{isYoloopInvocation as H}from"./target-normalization.js";import{applyStateMigration as D,StateMigrationApplyError as G}from"../migrations/state-json.js";function L(e){return H(e)}const Z=/^\s*\*?(yoloop|auto-yolo|epic-runner|story-runner|loop-yolo|auto-epic)\b/i;function oe(e){if(typeof e.args!="string"||e.args.length===0)return;const i=e.args.match(Z);if(!i)return;const o=i[0];if(e.args.slice(o.length).trim()!=="")return;let s=!1;try{const t=B(e.projectRoot,"docs","epics");s=N(t).isDirectory()}catch(t){const l=t instanceof Error?t.message:String(t);e.logger?.warn?.(`[Neocortex] Zero-config *yoloop hook (P121.05): could not stat docs/epics/: ${l}. Proceeding with raw args.`);return}s&&(e.args=`${o} @docs/epics/`,e.logger?.info?.("[Neocortex] Zero-config *yoloop (P121.05): auto-resolved empty args to @docs/epics/"))}async function ie(e,i,o){if(L(e))try{return await new F(i).readAll(o)}catch(r){process.stderr.write(`[yoloop] Failed to read local state: ${r.message}. Continuing without state.
2
- `);return}}async function re(e,i,o){if(!e)return;const r=e.yoloopStateUpdate;if(!(!r||!Array.isArray(r.operations)||r.operations.length===0))try{await new F(i).applyUpdate(r,o)}catch(s){const t=s.message??String(s);process.stderr.write(`[yoloop] Failed to persist state: ${t}. Your next *yoloop may repeat or skip an operation. Run *yoloop again to retry.
3
- `)}}function n(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function v(e,i){return Array.isArray(e)&&e.length<=i&&e.every(o=>typeof o=="string"&&o.length>0&&o.length<=160&&/^[A-Za-z0-9_.:+-]+$/.test(o))}function T(e){return n(e.scope)?e.scope.kind==="projected"||typeof e.scope.omittedStoryCount=="number"&&e.scope.omittedStoryCount>0||typeof e.scope.omittedEpicCount=="number"&&e.scope.omittedEpicCount>0:!1}function K(e){const i={...e};return delete i.scope,delete i.stateSummary,delete i.graphRetrieval,delete i.runnerBootstrap,delete i.projectEvidence,delete i.continuity,delete i.implementCheckpoint,i}function U(e){return typeof e=="string"&&["done","completed","merged"].includes(e.trim().toLowerCase())}function q(e){return/^[A-Za-z0-9][A-Za-z0-9._/-]{0,119}$/.test(e)&&!e.includes("..")&&!e.includes("//")&&!e.includes("@{")&&!e.endsWith("/")&&!e.endsWith(".")&&!e.endsWith(".lock")}async function W(e,i){const o=e.syntheticStory;if(!n(o))return{applied:!1,blocking:!0,reasonCode:"inline-yolo-mutation-missing"};const r=o.schemaVersion,s=o.epicId,t=o.storyId,l=o.storyPath,f=o.deterministicKey,S=o.storyContent,C=o.storyContentSha256,c=o.lifecycle;if(r!==2||typeof s!="string"||!/^P9\d{18}$/.test(s)||typeof t!="string"||t!==`${s}.01.000001`||typeof l!="string"||l!==`docs/stories/${t}.story.md`||typeof f!="string"||!/^[a-f0-9]{16}$/.test(f)||typeof C!="string"||!/^[a-f0-9]{64}$/.test(C)||typeof S!="string"||S.length===0||S.length>131072||!n(c)||c.branchMode!=="epic"||c.executionBranch!==`epic/${s}`||typeof c.originBranch!="string"||!q(c.originBranch)||typeof c.graphRevision!="string"||!/^[a-f0-9]{64}$/.test(c.graphRevision)||c.isolatedSyntheticEpic!==!0||o.publicSafe!==!0||o.sanitized!==!0)return{applied:!1,blocking:!0,reasonCode:"inline-yolo-mutation-invalid"};const g=await import("node:fs/promises"),y=await import("node:path"),R=await import("node:crypto");if(R.createHash("sha256").update(S).digest("hex")!==C)return{applied:!1,blocking:!0,reasonCode:"inline-yolo-story-content-integrity-invalid"};const $=y.join(i,".neocortex"),_=y.join($,"state.json"),k=y.join(i,...l.split("/"));let x;try{x=await g.readFile(_,"utf8")}catch{return{applied:!1,blocking:!0,reasonCode:"inline-yolo-state-missing"}}let p;try{p=JSON.parse(x)}catch{return{applied:!1,blocking:!0,reasonCode:"inline-yolo-state-corrupt"}}if(!n(p)||!n(p.stories)||!n(p.epics)||T(p))return{applied:!1,blocking:!0,reasonCode:"inline-yolo-state-not-full"};if(!n(p.config)||p.config.default_branch!==c.originBranch)return{applied:!1,blocking:!0,reasonCode:"inline-yolo-origin-branch-conflict"};const a=p.stories[t];if(a!==void 0&&(!n(a)||a.epic_id!==s||a.story_file!==l||!n(a.inlineYolo)||a.inlineYolo.deterministicKey!==f))return{applied:!1,blocking:!0,reasonCode:"inline-yolo-story-conflict"};const u=p.epics[s];if(u!==void 0&&(!n(u)||u.id!==s||u.source!=="inline-yolo-materialization"||u.branch_mode!=="epic"||u.execution_branch!==c.executionBranch||u.origin_branch!==c.originBranch||u.graph_revision!==c.graphRevision||!n(u.inlineYoloLifecycle)||u.inlineYoloLifecycle.deterministicKey!==f||u.inlineYoloLifecycle.isolatedSyntheticEpic!==!0||!Array.isArray(u.stories)))return{applied:!1,blocking:!0,reasonCode:"inline-yolo-epic-conflict"};const w=n(u)?u:{},m=Array.isArray(w.stories)?w.stories:[];if(m.some(d=>typeof d!="string")||new Set(m).size!==m.length)return{applied:!1,blocking:!0,reasonCode:"inline-yolo-epic-story-list-invalid"};for(const d of m){const b=p.stories[d];if(!n(b)||b.id!==d||b.epic_id!==s)return{applied:!1,blocking:!0,reasonCode:"inline-yolo-epic-ownership-conflict"}}try{const d=await g.readFile(k,"utf8"),b=d.includes(`id: ${t}`)&&d.includes(`synthetic_key: ${f}`);if(d!==S&&!b)return{applied:!1,blocking:!0,reasonCode:"inline-yolo-story-file-conflict"}}catch(d){if(d.code!=="ENOENT")return{applied:!1,blocking:!0,reasonCode:"inline-yolo-story-file-unreadable"}}const h=m.includes(t)?[...m]:[...m,t],A={...p.stories,[t]:{...n(a)?a:{},id:t,epic_id:s,title:"Synthetic inline USER STORY for yolo",status:n(a)&&typeof a.status=="string"?a.status:"backlog",steps_completed:n(a)&&Array.isArray(a.steps_completed)?a.steps_completed:[],last_step:n(a)?a.last_step??null:null,branch_name:n(a)?a.branch_name??null:null,story_file:l,source:"inline-yolo-materialization",inlineYolo:{...n(a)&&n(a.inlineYolo)?a.inlineYolo:{},schemaVersion:2,deterministicKey:f,publicSafe:!0,sanitized:!0,materializedBeforeExecution:!0,ephemeralExecutionForbidden:!0}}},z=h.filter(d=>n(A[d])&&U(A[d].status)).length,I=n(p.inlineYolo)?p.inlineYolo:{},M=n(I.materializations)?I.materializations:{},V=K({...p,stories:A,epics:{...p.epics,[s]:{...w,id:s,title:typeof w.title=="string"?w.title:"Isolated synthetic inline yolo lifecycle",status:z===h.length&&h.length>0?"done":"in-progress",source:"inline-yolo-materialization",branch_mode:"epic",execution_branch:c.executionBranch,origin_branch:c.originBranch,graph_revision:c.graphRevision,stories:h,total_stories:h.length,completed_stories:z,...z===h.length&&h.length>0?{}:{completed_at:null},inlineYoloLifecycle:{schemaVersion:2,deterministicKey:f,isolatedSyntheticEpic:!0}}},inlineYolo:{...I,schemaVersion:2,materializations:{...M,[t]:{schemaVersion:2,epicId:s,storyId:t,storyPath:l,deterministicKey:f,storyContentSha256:C,lifecycle:c,publicSafe:!0,sanitized:!0,materializedBeforeExecution:!0,ephemeralExecutionForbidden:!0,pipelineTrigger:`*yolo @${l}`,reasonCodes:Array.isArray(o.reasonCodes)?o.reasonCodes:[]}}},last_updated:new Date().toISOString()}),Y=`${Date.now()}-${R.randomBytes(6).toString("hex")}`,E=y.join($,`state.json.tmp.${Y}`),P=`${k}.tmp.${Y}`,j=y.join($,`state.json.backup-${new Date().toISOString().replace(/[:.]/g,"-")}`);let O=!1;try{await g.mkdir($,{recursive:!0}),await g.mkdir(y.dirname(k),{recursive:!0});try{await g.access(k)}catch{await g.writeFile(P,S,{encoding:"utf8",flag:"wx"}),await g.rename(P,k),O=!0}return await g.copyFile(_,j),await g.writeFile(E,JSON.stringify(V,null,2),{encoding:"utf8",flag:"wx"}),await g.rename(E,_),process.stderr.write(`[Neocortex] inline yolo story materialized with bounded full-state merge; story=${t}; backup=${y.basename(j)}.
4
- `),{applied:!0,blocking:!1,reasonCode:"inline-yolo-materialized"}}catch(d){await Promise.allSettled([g.unlink(E),g.unlink(P)]),O&&await g.unlink(k).catch(()=>{});const b=d.message??String(d);return process.stderr.write(`[Neocortex] inline yolo materialization failed: ${b}.
5
- `),{applied:!1,blocking:!0,reasonCode:"inline-yolo-persistence-failed"}}}async function ne(e,i){if(!e||e.stateMutated!==!0)return{applied:!1,blocking:!1,reasonCode:"state-writeback-not-requested"};if(e.stateMutationStrategy==="merge-inline-yolo-v2"||e.stateMutationReason==="inline-yolo-materialized-synthetic-story")return W(e,i);if(e.stateMutationStrategy==="state-migration-v1"||e.stateMigrationPlan!==void 0){const r=e.stateMigrationPlan,s=new Set(["schemaVersion","operationId","sourceSchemaVersion","targetSchemaVersion","sourceCanonicalHash","targetCanonicalHash","steps","migratedEpicIds","migratedStoryIds","preservedUnknownFieldCount","reasonCodes"]);if(!n(r)||Object.keys(r).some(t=>!s.has(t))||r.schemaVersion!=="StateMigrationPlan/1.0"||typeof r.operationId!="string"||!/^smig_[a-f0-9]{32}$/.test(r.operationId)||typeof r.sourceCanonicalHash!="string"||!/^[a-f0-9]{64}$/.test(r.sourceCanonicalHash)||typeof r.targetCanonicalHash!="string"||!/^[a-f0-9]{64}$/.test(r.targetCanonicalHash)||![0,1,"absent"].includes(r.sourceSchemaVersion)||r.targetSchemaVersion!==1||!Array.isArray(r.steps)||r.steps.length>8192||r.steps.some(t=>!n(t)||Object.keys(t).some(l=>!["kind","source","target"].includes(l))||!["initialize-collection","merge-epic","merge-story","preserve-legacy","remove-legacy","set-schema-version"].includes(String(t.kind))||typeof t.target!="string"||t.target.length>512||!/^[A-Za-z0-9_.:[\]-]+$/.test(t.target)||t.source!==void 0&&(typeof t.source!="string"||t.source.length>512||!/^[A-Za-z0-9_.:[\]-]+$/.test(t.source)))||!v(r.migratedEpicIds,4096)||!v(r.migratedStoryIds,4096)||!v(r.reasonCodes,32)||!Number.isSafeInteger(r.preservedUnknownFieldCount)||r.preservedUnknownFieldCount<0)return{applied:!1,blocking:!0,reasonCode:"state-migration-plan-missing-or-invalid"};try{const t=D(i,r),l=`.neocortex/state.json.migration-backup-${t.operationId}`;return process.stderr.write(`[P220-EV-STATE-MIGRATION] outcome=${t.outcome}; operation=${t.operationId}; backup=${t.backupHash?l:"none"}.
6
- `),{applied:t.outcome==="applied",blocking:!1,reasonCode:t.outcome==="applied"?"state-migration-applied":"state-migration-replay-verified"}}catch(t){const l=t instanceof G?t.reasonCode:"state-migration-apply-failed";return process.stderr.write(`[P220-EV-STATE-MIGRATION] blocked=${l}.
7
- `),{applied:!1,blocking:!0,reasonCode:l}}}const o=e.migratedState;return!o||typeof o!="object"||Array.isArray(o)?{applied:!1,blocking:!0,reasonCode:"state-writeback-payload-missing"}:T(o)?(process.stderr.write(`[Neocortex] Refused projected/partial state replacement; canonical state was not modified.
1
+ import{statSync as Z}from"node:fs";import{join as K}from"node:path";import{YoloopClientStateStore as D}from"./yoloop-client-state-store.js";import{isYoloopInvocation as W}from"./target-normalization.js";import{applyStateMigration as q,StateMigrationApplyError as J}from"../migrations/state-json.js";function X(e){return W(e)}const Q=/^\s*\*?(yoloop|auto-yolo|epic-runner|story-runner|loop-yolo|auto-epic)\b/i;function le(e){if(typeof e.args!="string"||e.args.length===0)return;const i=e.args.match(Q);if(!i)return;const o=i[0];if(e.args.slice(o.length).trim()!=="")return;let s=!1;try{const t=K(e.projectRoot,"docs","epics");s=Z(t).isDirectory()}catch(t){const d=t instanceof Error?t.message:String(t);e.logger?.warn?.(`[Neocortex] Zero-config *yoloop hook (P121.05): could not stat docs/epics/: ${d}. Proceeding with raw args.`);return}s&&(e.args=`${o} @docs/epics/`,e.logger?.info?.("[Neocortex] Zero-config *yoloop (P121.05): auto-resolved empty args to @docs/epics/"))}async function de(e,i,o){if(X(e))try{return await new D(i).readAll(o)}catch(r){process.stderr.write(`[yoloop] Failed to read local state: ${r.message}. Continuing without state.
2
+ `);return}}async function pe(e,i,o){if(!e)return;const r=e.yoloopStateUpdate;if(!(!r||!Array.isArray(r.operations)||r.operations.length===0))try{await new D(i).applyUpdate(r,o)}catch(s){const t=s.message??String(s);process.stderr.write(`[yoloop] Failed to persist state: ${t}. Your next *yoloop may repeat or skip an operation. Run *yoloop again to retry.
3
+ `)}}function n(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function T(e,i){return Array.isArray(e)&&e.length<=i&&e.every(o=>typeof o=="string"&&o.length>0&&o.length<=160&&/^[A-Za-z0-9_.:+-]+$/.test(o))}function L(e){return n(e.scope)?e.scope.kind==="projected"||typeof e.scope.omittedStoryCount=="number"&&e.scope.omittedStoryCount>0||typeof e.scope.omittedEpicCount=="number"&&e.scope.omittedEpicCount>0:!1}function ee(e){const i={...e};return delete i.scope,delete i.stateSummary,delete i.graphRetrieval,delete i.runnerBootstrap,delete i.projectEvidence,delete i.continuity,delete i.implementCheckpoint,i}function te(e){return typeof e=="string"&&["done","completed","merged"].includes(e.trim().toLowerCase())}function oe(e){return/^[A-Za-z0-9][A-Za-z0-9._/-]{0,119}$/.test(e)&&!e.includes("..")&&!e.includes("//")&&!e.includes("@{")&&!e.endsWith("/")&&!e.endsWith(".")&&!e.endsWith(".lock")}async function ie(e,i){const o=e.syntheticStory;if(!n(o))return{applied:!1,blocking:!0,reasonCode:"inline-yolo-mutation-missing"};const r=o.schemaVersion,s=o.epicId,t=o.storyId,d=o.storyPath,m=o.deterministicKey,b=o.storyContent,_=o.storyContentSha256,p=o.lifecycle;if(r!==2||typeof s!="string"||!/^P9\d{18}$/.test(s)||typeof t!="string"||t!==`${s}.01.000001`||typeof d!="string"||d!==`docs/stories/${t}.story.md`||typeof m!="string"||!/^[a-f0-9]{16}$/.test(m)||typeof _!="string"||!/^[a-f0-9]{64}$/.test(_)||typeof b!="string"||b.length===0||b.length>131072||!n(p)||p.branchMode!=="epic"||p.executionBranch!==`epic/${s}`||typeof p.originBranch!="string"||!oe(p.originBranch)||typeof p.graphRevision!="string"||!/^[a-f0-9]{64}$/.test(p.graphRevision)||p.isolatedSyntheticEpic!==!0||o.publicSafe!==!0||o.sanitized!==!0)return{applied:!1,blocking:!0,reasonCode:"inline-yolo-mutation-invalid"};const l=await import("node:fs/promises"),h=await import("node:path"),A=await import("node:crypto");if(A.createHash("sha256").update(b).digest("hex")!==_)return{applied:!1,blocking:!0,reasonCode:"inline-yolo-story-content-integrity-invalid"};const C=h.join(i,".neocortex"),I=h.join(C,"state.json"),w=h.join(i,...d.split("/"));let P;try{P=await l.readFile(I,"utf8")}catch{return{applied:!1,blocking:!0,reasonCode:"inline-yolo-state-missing"}}const R=A.createHash("sha256").update(P).digest("hex");let u;try{u=JSON.parse(P)}catch{return{applied:!1,blocking:!0,reasonCode:"inline-yolo-state-corrupt"}}if(!n(u)||!n(u.stories)||!n(u.epics)||L(u))return{applied:!1,blocking:!0,reasonCode:"inline-yolo-state-not-full"};if(!n(u.config)||u.config.default_branch!==p.originBranch)return{applied:!1,blocking:!0,reasonCode:"inline-yolo-origin-branch-conflict"};const c=u.stories[t];if(c!==void 0&&(!n(c)||c.epic_id!==s||c.story_file!==d||!n(c.inlineYolo)||c.inlineYolo.deterministicKey!==m))return{applied:!1,blocking:!0,reasonCode:"inline-yolo-story-conflict"};const y=u.epics[s];if(y!==void 0&&(!n(y)||y.id!==s||y.source!=="inline-yolo-materialization"||y.branch_mode!=="epic"||y.execution_branch!==p.executionBranch||y.origin_branch!==p.originBranch||y.graph_revision!==p.graphRevision||!n(y.inlineYoloLifecycle)||y.inlineYoloLifecycle.deterministicKey!==m||y.inlineYoloLifecycle.isolatedSyntheticEpic!==!0||!Array.isArray(y.stories)))return{applied:!1,blocking:!0,reasonCode:"inline-yolo-epic-conflict"};const $=n(y)?y:{},S=Array.isArray($.stories)?$.stories:[];if(S.some(a=>typeof a!="string")||new Set(S).size!==S.length)return{applied:!1,blocking:!0,reasonCode:"inline-yolo-epic-story-list-invalid"};for(const a of S){const f=u.stories[a];if(!n(f)||f.id!==a||f.epic_id!==s)return{applied:!1,blocking:!0,reasonCode:"inline-yolo-epic-ownership-conflict"}}try{const a=await l.readFile(w,"utf8"),f=a.includes(`id: ${t}`)&&a.includes(`synthetic_key: ${m}`);if(a!==b&&!f)return{applied:!1,blocking:!0,reasonCode:"inline-yolo-story-file-conflict"}}catch(a){if(a.code!=="ENOENT")return{applied:!1,blocking:!0,reasonCode:"inline-yolo-story-file-unreadable"}}const k=S.includes(t)?[...S]:[...S,t],v={...u.stories,[t]:{...n(c)?c:{},id:t,epic_id:s,title:"Synthetic inline USER STORY for yolo",status:n(c)&&typeof c.status=="string"?c.status:"backlog",steps_completed:n(c)&&Array.isArray(c.steps_completed)?c.steps_completed:[],last_step:n(c)?c.last_step??null:null,branch_name:n(c)?c.branch_name??null:null,story_file:d,source:"inline-yolo-materialization",inlineYolo:{...n(c)&&n(c.inlineYolo)?c.inlineYolo:{},schemaVersion:2,deterministicKey:m,publicSafe:!0,sanitized:!0,materializedBeforeExecution:!0,ephemeralExecutionForbidden:!0}}},x=k.filter(a=>n(v[a])&&te(v[a].status)).length,j=n(u.inlineYolo)?u.inlineYolo:{},G=n(j.materializations)?j.materializations:{},U=ee({...u,stories:v,epics:{...u.epics,[s]:{...$,id:s,title:typeof $.title=="string"?$.title:"Isolated synthetic inline yolo lifecycle",status:x===k.length&&k.length>0?"done":"in-progress",source:"inline-yolo-materialization",branch_mode:"epic",execution_branch:p.executionBranch,origin_branch:p.originBranch,graph_revision:p.graphRevision,stories:k,total_stories:k.length,completed_stories:x,...x===k.length&&k.length>0?{}:{completed_at:null},inlineYoloLifecycle:{schemaVersion:2,deterministicKey:m,isolatedSyntheticEpic:!0}}},inlineYolo:{...j,schemaVersion:2,materializations:{...G,[t]:{schemaVersion:2,epicId:s,storyId:t,storyPath:d,deterministicKey:m,storyContentSha256:_,sourceStateSha256:R,lifecycle:p,publicSafe:!0,sanitized:!0,materializedBeforeExecution:!0,ephemeralExecutionForbidden:!0,pipelineTrigger:`*yolo @${d}`,reasonCodes:Array.isArray(o.reasonCodes)?o.reasonCodes:[]}}},last_updated:new Date().toISOString()}),M=`${Date.now()}-${A.randomBytes(6).toString("hex")}`,Y=h.join(C,`state.json.tmp.${M}`),O=`${w}.tmp.${M}`,F=h.join(C,`state.json.backup-${new Date().toISOString().replace(/[:.]/g,"-")}`),H=h.join(C,"state.json.inline-yolo.lock");let N=!1,E;const V=async a=>{let f;try{f=await l.open(a,"r"),await f.sync()}catch(g){const z=g.code;if(!["EINVAL","ENOTSUP","EPERM","EISDIR"].includes(z??""))throw g}finally{await f?.close().catch(()=>{})}},B=async(a,f)=>{const g=await l.open(a,"wx",384);try{await g.writeFile(f,"utf8"),await g.sync()}finally{await g.close()}};try{await l.mkdir(C,{recursive:!0}),await l.mkdir(h.dirname(w),{recursive:!0});try{E=await l.open(H,"wx",384),await E.writeFile(`${process.pid}
4
+ ${R}
5
+ `,"utf8"),await E.sync()}catch(z){if(z.code==="EEXIST")return{applied:!1,blocking:!0,reasonCode:"inline-yolo-writeback-locked"};throw z}const a=await l.readFile(I,"utf8");if(A.createHash("sha256").update(a).digest("hex")!==R)return{applied:!1,blocking:!0,reasonCode:"inline-yolo-state-cas-conflict"};try{await l.access(w)}catch{await B(O,b),await l.rename(O,w),await V(h.dirname(w)),N=!0}await l.copyFile(I,F);const g=await l.open(F,"r");try{await g.sync()}finally{await g.close()}return await B(Y,JSON.stringify(U,null,2)),await l.rename(Y,I),await V(C),process.stderr.write(`[Neocortex] inline yolo story materialized with bounded full-state merge; story=${t}; backup=${h.basename(F)}.
6
+ `),{applied:!0,blocking:!1,reasonCode:"inline-yolo-materialized"}}catch(a){await Promise.allSettled([l.unlink(Y),l.unlink(O)]),N&&await l.readFile(w,"utf8").catch(()=>{})===b&&await l.unlink(w).catch(()=>{});const f=a.message??String(a);return process.stderr.write(`[Neocortex] inline yolo materialization failed: ${f}.
7
+ `),{applied:!1,blocking:!0,reasonCode:"inline-yolo-persistence-failed"}}finally{await E?.close().catch(()=>{}),E&&await l.unlink(H).catch(()=>{})}}async function ue(e,i){if(!e||e.stateMutated!==!0)return{applied:!1,blocking:!1,reasonCode:"state-writeback-not-requested"};if(e.stateMutationStrategy==="merge-inline-yolo-v2"||e.stateMutationReason==="inline-yolo-materialized-synthetic-story")return ie(e,i);if(e.stateMutationStrategy==="state-migration-v1"||e.stateMigrationPlan!==void 0){const r=e.stateMigrationPlan,s=new Set(["schemaVersion","operationId","sourceSchemaVersion","targetSchemaVersion","sourceCanonicalHash","targetCanonicalHash","steps","migratedEpicIds","migratedStoryIds","preservedUnknownFieldCount","reasonCodes"]);if(!n(r)||Object.keys(r).some(t=>!s.has(t))||r.schemaVersion!=="StateMigrationPlan/1.0"||typeof r.operationId!="string"||!/^smig_[a-f0-9]{32}$/.test(r.operationId)||typeof r.sourceCanonicalHash!="string"||!/^[a-f0-9]{64}$/.test(r.sourceCanonicalHash)||typeof r.targetCanonicalHash!="string"||!/^[a-f0-9]{64}$/.test(r.targetCanonicalHash)||![0,1,"absent"].includes(r.sourceSchemaVersion)||r.targetSchemaVersion!==1||!Array.isArray(r.steps)||r.steps.length>8192||r.steps.some(t=>!n(t)||Object.keys(t).some(d=>!["kind","source","target"].includes(d))||!["initialize-collection","merge-epic","merge-story","preserve-legacy","remove-legacy","set-schema-version"].includes(String(t.kind))||typeof t.target!="string"||t.target.length>512||!/^[A-Za-z0-9_.:[\]-]+$/.test(t.target)||t.source!==void 0&&(typeof t.source!="string"||t.source.length>512||!/^[A-Za-z0-9_.:[\]-]+$/.test(t.source)))||!T(r.migratedEpicIds,4096)||!T(r.migratedStoryIds,4096)||!T(r.reasonCodes,32)||!Number.isSafeInteger(r.preservedUnknownFieldCount)||r.preservedUnknownFieldCount<0)return{applied:!1,blocking:!0,reasonCode:"state-migration-plan-missing-or-invalid"};try{const t=q(i,r),d=`.neocortex/state.json.migration-backup-${t.operationId}`;return process.stderr.write(`[P220-EV-STATE-MIGRATION] outcome=${t.outcome}; operation=${t.operationId}; backup=${t.backupHash?d:"none"}.
8
+ `),{applied:t.outcome==="applied",blocking:!1,reasonCode:t.outcome==="applied"?"state-migration-applied":"state-migration-replay-verified"}}catch(t){const d=t instanceof J?t.reasonCode:"state-migration-apply-failed";return process.stderr.write(`[P220-EV-STATE-MIGRATION] blocked=${d}.
9
+ `),{applied:!1,blocking:!0,reasonCode:d}}}const o=e.migratedState;return!o||typeof o!="object"||Array.isArray(o)?{applied:!1,blocking:!0,reasonCode:"state-writeback-payload-missing"}:L(o)?(process.stderr.write(`[Neocortex] Refused projected/partial state replacement; canonical state was not modified.
8
10
  `),{applied:!1,blocking:!0,reasonCode:"state-writeback-partial-rejected"}):(process.stderr.write(`[P220-EV-STATE-MIGRATION] blocked=state-migration-plan-missing-or-invalid; canonical state was not modified.
9
- `),{applied:!1,blocking:!0,reasonCode:"state-migration-plan-missing-or-invalid"})}async function se(e){if(!e.featureFlag)return{applied:!1,added:Object.freeze([]),skipped:Object.freeze([]),storiesAdded:0,reason:"flag off"};try{return await(await import("./discovery-hook.js")).runDiscoveryHook(e)}catch(i){const o=i instanceof Error?i.message:String(i);return e.logger?.warn?.(`[neocortex] discovery hook (lazy load) failed: ${o}. Proceeding without enrichment.`),{applied:!1,added:Object.freeze([]),skipped:Object.freeze([]),storiesAdded:0,reason:`lazy load error: ${o}`}}}async function ae(e){if(!e.featureFlag)return{applied:!1,reason:"flag_off"};try{return await(await import("../graph-retrieval/pre-command-hook.js")).runGraphRetrievalHook(e)}catch(i){const o=i instanceof Error?i.message:String(i);return e.logger?.warn?.(`[neocortex] graph retrieval hook (lazy load) failed: ${o}. Proceeding without enrichment.`),{applied:!1,reason:"hook_error",warning:o}}}export{L as isYoloopTrigger,oe as maybeAutoResolveYoloopArgs,se as maybeRunDiscoveryHook,ae as maybeRunGraphRetrievalHook,ne as persistMigratedStateFromResponse,re as persistYoloopFromResponse,ie as readYoloopForRequest};
11
+ `),{applied:!1,blocking:!0,reasonCode:"state-migration-plan-missing-or-invalid"})}async function ye(e){if(!e.featureFlag)return{applied:!1,added:Object.freeze([]),skipped:Object.freeze([]),storiesAdded:0,reason:"flag off"};try{return await(await import("./discovery-hook.js")).runDiscoveryHook(e)}catch(i){const o=i instanceof Error?i.message:String(i);return e.logger?.warn?.(`[neocortex] discovery hook (lazy load) failed: ${o}. Proceeding without enrichment.`),{applied:!1,added:Object.freeze([]),skipped:Object.freeze([]),storiesAdded:0,reason:`lazy load error: ${o}`}}}async function fe(e){if(!e.featureFlag)return{applied:!1,reason:"flag_off"};try{return await(await import("../graph-retrieval/pre-command-hook.js")).runGraphRetrievalHook(e)}catch(i){const o=i instanceof Error?i.message:String(i);return e.logger?.warn?.(`[neocortex] graph retrieval hook (lazy load) failed: ${o}. Proceeding without enrichment.`),{applied:!1,reason:"hook_error",warning:o}}}export{X as isYoloopTrigger,le as maybeAutoResolveYoloopArgs,ye as maybeRunDiscoveryHook,fe as maybeRunGraphRetrievalHook,ue as persistMigratedStateFromResponse,pe as persistYoloopFromResponse,de as readYoloopForRequest};