@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.
- package/dist/sbom.cdx.json +23 -23
- package/install.js +16 -1
- package/install.ps1 +57 -401
- package/install.sh +30 -37
- package/package.json +2 -2
- package/packages/client/dist/runner/headless/run-yoloop.d.ts +9 -0
- package/packages/client/dist/runner/headless/run-yoloop.js +2 -2
- package/packages/client/dist/yoloop/index.d.ts +1 -1
- package/packages/client/dist/yoloop/invoke-hooks.js +10 -8
- package/packages/client/dist/yoloop/shared-yoloop-types.d.ts +61 -0
- package/packages/client/dist/yoloop/yoloop-client-state-store.d.ts +23 -0
- package/packages/client/dist/yoloop/yoloop-client-state-store.js +1 -1
- package/packages/shared/dist/invocation/index.js +9 -2
- package/targets-stubs/antigravity/gemini.md +1 -1
- package/targets-stubs/antigravity/install-antigravity.sh +10 -101
- package/targets-stubs/antigravity/skill/SKILL.md +1 -1
- package/targets-stubs/claude-code/neocortex-root.agent.yaml +1 -1
- package/targets-stubs/claude-code/neocortex-root.md +2 -2
- package/targets-stubs/claude-code/neocortex.agent.yaml +1 -1
- package/targets-stubs/claude-code/neocortex.md +2 -2
- package/targets-stubs/codex/AGENTS.md +1 -1
- package/targets-stubs/codex/install-codex.sh +4 -1
- package/targets-stubs/cursor/agent.md +2 -2
- package/targets-stubs/cursor/install-cursor.sh +4 -1
- package/targets-stubs/gemini-cli/agent.md +2 -2
- package/targets-stubs/gemini-cli/install-gemini.sh +4 -1
- package/targets-stubs/grok/install-grok.sh +4 -1
- package/targets-stubs/lib/mcp-merge.js +220 -20
- package/targets-stubs/opencode/neocortex-root.md +1 -1
- package/targets-stubs/vscode/install-vscode.sh +4 -1
- 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.
|
|
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
|
|
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
|
|
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.
|
|
4
|
-
"description": "Neocortex v4.60.
|
|
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
|
|
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
|
|
2
|
-
`);return}}async function
|
|
3
|
-
`)}}function n(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
`),{applied
|
|
7
|
-
`),{applied:!1,blocking:!0,reasonCode:l}}}const
|
|
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
|
|
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};
|