@ornexus/neocortex 4.60.65 → 4.60.67
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/release-source.json +1 -1
- package/dist/sbom.cdx.json +1598 -1640
- package/install.ps1 +1 -1
- package/install.sh +2 -1
- package/package.json +17 -7
- package/packages/client/dist/cli.js +15 -2
- package/packages/client/dist/commands/architecture-root-binding.js +1 -1
- package/packages/client/dist/commands/doctor.d.ts +135 -0
- package/packages/client/dist/commands/doctor.js +2 -0
- package/packages/client/dist/commands/invoke.d.ts +19 -1
- package/packages/client/dist/commands/invoke.js +83 -82
- package/packages/client/dist/commands/story-checkpoint.d.ts +3 -1
- package/packages/client/dist/commands/story-checkpoint.js +1 -1
- package/packages/client/dist/continuity/sqlite-store.js +1 -1
- package/packages/client/dist/git/direct-yolo-c01-retry.d.ts +21 -0
- package/packages/client/dist/git/direct-yolo-c01-retry.js +4 -0
- package/packages/client/dist/git/direct-yolo-checkpoint.d.ts +1 -5
- package/packages/client/dist/git/direct-yolo-checkpoint.js +4 -4
- package/packages/client/dist/git/git-lifecycle-store.d.ts +0 -2
- package/packages/client/dist/git/git-lifecycle-store.js +8 -9
- package/packages/client/dist/private-execution/clean-baseline.d.ts +2 -3
- package/packages/client/dist/private-execution/clean-baseline.js +2 -2
- package/packages/client/dist/private-execution/isolated-admission.d.ts +2 -0
- package/packages/client/dist/private-execution/isolated-admission.js +16 -11
- package/packages/client/dist/runner/headless/run-yoloop.d.ts +4 -1
- package/packages/client/dist/runner/headless/run-yoloop.js +2 -2
- package/packages/client/dist/runner-cli.js +0 -0
- package/packages/client/dist/yolo/invoke-envelope-capability.d.ts +16 -0
- package/packages/client/dist/yolo/invoke-envelope-capability.js +1 -0
- package/packages/client/dist/yolo/spec-envelope-collector.d.ts +7 -0
- package/packages/client/dist/yolo/spec-envelope-collector.js +3 -3
- package/packages/shared/dist/architecture-non-ui-scope.js +22 -0
- package/packages/shared/dist/architecture-public-topology.js +11 -0
- package/packages/shared/dist/compatibility/index.js +476 -0
- package/packages/shared/dist/invocation/index.js +4 -2
- package/packages/shared/dist/private-qa-structural-admission.js +14 -0
- package/packages/shared/dist/private-yolo-predecessor-decision.js +32 -0
- package/packages/shared/dist/project-validation-commands.js +74 -0
- package/packages/shared/dist/yolo/spec-envelope.js +2 -0
- package/packages/shared/dist/yoloop/release-blocked.js +653 -0
- package/targets-stubs/antigravity/gemini.md +1 -1
- package/targets-stubs/antigravity/skill/SKILL.md +3 -2
- package/targets-stubs/claude-code/neocortex-root.agent.yaml +1 -1
- package/targets-stubs/claude-code/neocortex-root.md +5 -5
- package/targets-stubs/claude-code/neocortex.agent.yaml +1 -1
- package/targets-stubs/claude-code/neocortex.md +8 -9
- package/targets-stubs/codex/AGENTS.md +3 -3
- package/targets-stubs/cursor/agent.md +4 -3
- package/targets-stubs/gemini-cli/agent.md +5 -4
- package/targets-stubs/opencode/neocortex-root.md +3 -3
- package/targets-stubs/vscode/neocortex.agent.md +5 -4
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{createHash as
|
|
1
|
+
import{createHash as je,randomBytes as Ke}from"node:crypto";import{spawn as Ue}from"node:child_process";import{existsSync as ze}from"node:fs";import*as Ae from"node:os";import{dirname as $e,join as ke}from"node:path";import{fileURLToPath as Ye}from"node:url";import{AUTONOMOUS_GOVERNANCE_EVIDENCE_TAG as Fe,AUTONOMOUS_GOVERNANCE_REASON_CODES as Oe,autonomousGovernanceMetadata as Ee,buildAutonomousGovernanceEnvelope as Ve,readAutonomousGovernanceEnvelopeFromMetadata as Re,recordAutonomousGovernance as qe}from"../../continuity/autonomous-governance.js";import{createDefaultHeadlessAdapterRegistry as We}from"./adapters.js";import{loadHeadlessRuntimeDefaults as Ge,resolveHeadlessRuntime as Xe}from"./resolver.js";import{DEFAULT_HEADLESS_EXECUTION_BACKOFF_MS as Ze,DEFAULT_HEADLESS_EXECUTION_LEASE_MS as Je,DEFAULT_HEADLESS_EXECUTION_LIMIT as Qe,DEFAULT_HEADLESS_EXECUTION_MAX_ATTEMPTS as et,DEFAULT_HEADLESS_EXECUTION_STALE_LEASE_AFTER_MS as tt,DEFAULT_HEADLESS_EXECUTION_TIMEOUT_MS as rt,headlessExecutionEntityId as q,runYoloExecutionPhase as ot}from"./run-yolo.js";import{HEADLESS_REASON_CODES as p,boundPublicSummary as pe,hashPublicValue as x,redaction as h}from"./types.js";import{validatePhasedYoloopPlan as at}from"./prepared-story-bundle.js";import{createAnchoredContinuousStoryCommandRunner as nt,createBranchlessContinuousStoryWorkspaceManager as st}from"./continuous-story-workspace.js";import{executeEpicGitReconciliation as it,executeEpicTerminalGit as dt}from"./epic-terminal-git-runner.js";import{createCliEpicTerminalGitAdapter as ct}from"./epic-terminal-git-cli-adapter.js";import{acquireGitLifecyclePhysicalIntegrationLock as lt,releaseGitLifecyclePhysicalIntegrationLock as ut}from"../../git/git-lifecycle-store.js";import{normalizeContinuousWriteRef as pt}from"../../../../shared/dist/yoloop/wave-decision-receipt.js";import{parseReleaseBlockedResult as mt}from"../../../../shared/dist/yoloop/release-blocked.js";const ft=20,yt=1800*1e3,me=1,ve=10;function Pe(e={}){let r=e.availableParallelism;if(r===void 0){const t=Ae.availableParallelism;if(typeof t=="function")try{r=t()}catch{r=void 0}}if(!Number.isFinite(r)||(r??0)<1){const t=e.cpuCount??(()=>{try{return Ae.cpus().length}catch{return me}})();r=Number.isFinite(t)&&t>0?t:me}return F(r??me,1,ve)}const Ar=Object.freeze(["start","lifecycle_evidence","metadata_parse","child_story_delegation","reinvoke","git_reconciliation","terminal_git","complete","aborted","release_blocked","backoff"]),fe=/^docs\/epics\/epic-[A-Za-z0-9._-]+\.md$/,ht=/^docs\/stories\/[A-Za-z0-9._-]+\.story\.md$/,ye=/^\*yolo @docs\/stories\/[A-Za-z0-9._-]+\.story\.md(?: branchless-preparation)?$/,_t=/^\*yolo @docs\/stories\/[A-Za-z0-9._-]+\.story\.md branchless-preparation$/,Ct=/^(?:\uFEFF)?---(?:\r?\n)/,It=/^[A-Za-z0-9][A-Za-z0-9._:-]{0,159}$/,W=/(?:[;&|`$<>]|\$\(|\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,bt=new Set(["no_private_prompt_or_history","no_raw_vendor_corpus","no_unrelated_story_context"]);function Te(e){return Ct.test(e)||e.includes("@neocortex")||e.includes("*yoloop")||W.test(e)||D.test(e)}function kr(e){return!Te(e)&&ye.test(e)}const St=new Set(["schemaVersion","contractVersion","kind","commandClass","jobId","operationId","idempotencyKey","targetKind","targetRef","commandRef","epicId","runtime","publicSummary","reasonCode","attempts","metadata","redactionSummary","publicSafe"]),gt=new Set(["runtimeId","modelId","source","reasonCode","publicSafe"]),At="job-aborted",kt="max-iterations-reached",Ot="max-duration-reached",Et=new Set(["git-lifecycle-integration-backpressure","git-lifecycle-integration-lock-failed","git-lifecycle-integration-lock-release-failed"]),we=new Set(["yoloop-per-run-cap-resumable","yoloop-session-timeout-resumable"]);async function Rt(e,r){const t=$e(Ye(import.meta.url)),a=ke(t,"../../commands/invoke.js"),o=ze(a)?a:ke(t,"../../../dist/commands/invoke.js");return new Promise(s=>{const n=Ue(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 De,randomBytes as Me}from"node:crypto";import{spawn as Ne}f
|
|
|
7
7
|
process.send(result, () => process.exit(0));
|
|
8
8
|
} catch { process.exit(1); }
|
|
9
9
|
});
|
|
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 gt(e,o=bt){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 Io(e){const o=e.adapterRegistry??$e(),t=$(e.limit??We,1,10),a=$(e.leaseMs??qe,1e3,3600*1e3),r=$(e.staleLeaseAfterMs??Xe,0,1440*60*1e3),s=$(e.maxAttempts??Ge,1,10),n=$(e.localConcurrencyCap??ke(),1,Ae),d=[],i=[],c=e.now(),y=At({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 kt({store:e.store,projectRoot:e.projectRoot,runnerId:e.runnerId,attempt:m,registry:o,now:e.now,leaseMs:a,timeoutMs:$(e.timeoutMs??Ze,1e3,18e5),backoffMs:$(e.backoffMs??Ve,1e3,36e5),maxAttempts:s,maxIterations:$(e.maxIterations??dt,1,100),maxDurationMs:$(e.maxDurationMs??ct,1e3,72e5),localConcurrencyCap:n,queueCap:e.queueCap,adapterOptions:e.adapterOptions,runtimeDefaults:e.runtimeDefaults,runtimeFallback:e.runtimeFallback,yoloopInvoker:e.yoloopInvoker??gt,serverUrl:e.serverUrl,idFactory:e.idFactory??Jt,continuousWorkspaceManager:e.continuousWorkspaceManager??tt(),terminalGitAdapter:e.terminalGitAdapter??at(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:Y(d.length>0?d:[p.OK]),publicSafe:!0}}function At(e){let o=0,t=0;const a=[];for(const r of Yt(e.metadata)){if(!C(r)||r.kind!=="run_yoloop")continue;const s=Pt(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(Se.BYPASS_BLOCKED);continue}const d=Ft(n);if(e.store.hasCompletedHeadlessExecutionDirectiveHash(d)){a.push(p.EXECUTION_COMPLETED);continue}const i=Ue({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=ze(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:Zt(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:be(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:Y(a)}}async function kt(e){const o=e.now(),t=e.idFactory("lease",e.attempt.attempt_id),a=_e(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 Ut(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=Et(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:Wt(e.attempt),childStoryIds:[],stateTransitions:["start"]});const d=await Ot({...e,prepared:n.input}),i=zt(e.attempt,d,e.maxAttempts,e.backoffMs,e.now()),c=i.retry?"backoff":d.status,y=i.retry?"deferred":d.receiptStatus,f=i.retry?St.has(d.reasonCode)||Ee.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 Ot(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=Pe(e.localConcurrencyCap),h=new Map;let M=!1;const w=new Map,B=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),B.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,B.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(U=>({storyId:A,result:U}))));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:Ct,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:It,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=jt(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 U=Bt(A);if(S.aborted&&U){for(;h.size>0;)await X();return m+=1,t.push("backoff"),E({status:"backoff",receiptStatus:"deferred",reasonCode:U.reason==="YOLOOP_SESSION_TIMEOUT"?"yoloop-session-timeout-resumable":"yoloop-per-run-cap-resumable",publicSummary:"Headless yoloop reached a finite run boundary and scheduled the same queue after cool-down.",retryable:!0,retryNotBeforeAt:U.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:_t,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&&B.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&&B.size>0)return t.push("backoff"),E({status:"failed",receiptStatus:"failed",reasonCode:[...B.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=Nt(A);if(Z){t.push("terminal_git");const b=new Date,x=await nt(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 K,j=!1;try{K=await rt(Z,e.terminalGitAdapter,e.now,g)}finally{j=await st(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(`${K.receipt.idempotencyKey}:${K.receipt.physicalStatus}`),!K.ok){const N=K.receipt.retryEligible;return t.push("backoff"),E({status:N?"backoff":"failed",receiptStatus:N?"deferred":"failed",reasonCode:K.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=Ht(A);if(I){t.push("git_reconciliation");const b=await ot(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=Tt(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=ve({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 K=b.slice(0,x.effectiveConcurrency);t.push("child_story_delegation");for(const j of K)h.set(j.storyId,{child:j,promise:Re({...e,child:j,iteration:i})});u.startedChildCount+=K.length,u.peakConcurrency=Math.max(u.peakConcurrency,h.size),u.pendingChildCount=b.length-K.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(B.size>0)return t.push("backoff"),E({status:"failed",receiptStatus:"failed",reasonCode:[...B.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 F=[...P.prompts];for(;F.length>0;){const b=ve({store:e.store,nowIso:e.now(),localCap:e.localConcurrencyCap,serverMaxConcurrency:P.serverMaxConcurrency,parallelAuthorized:P.parallelAuthorized,continuous:!1,eligibleCount:F.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=F.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=F.splice(0,b.effectiveConcurrency);u.startedChildCount+=x.length,u.peakConcurrency=Math.max(u.peakConcurrency,x.length),u.pendingChildCount=F.length,t.push("child_story_delegation");const K=await Promise.all(x.map(N=>Re({...e,child:N,iteration:i})));u.completedChildCount+=K.length;let j;for(const N of K){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 Re(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?et(o.value):e.adapterOptions?.commandRunner,r=Kt({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 Je({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 ve(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 Pe(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:z(e.serverMaxConcurrency),localCap:z(e.localCap),queueCap:z(e.queueCap),availableLeases:z(e.availableLeases),effectiveConcurrency:z(e.effectiveConcurrency),peakConcurrency:z(e.peakConcurrency),pendingChildCount:z(e.pendingChildCount),startedChildCount:z(e.startedChildCount),completedChildCount:z(e.completedChildCount),backpressurePauseCount:z(e.backpressurePauseCount),reasonCodes:Y(e.reasonCodes.length>0?e.reasonCodes:[p.WORKER_POOL_SERIAL_FALLBACK]).slice(0,10),publicSafe:!0}}function pe(e=ke()){return k(Pe(e))}function z(e){return Number.isFinite(e)?Math.max(0,Math.min(1e4,Math.floor(e))):0}function Et(e){const o=ge(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=Rt(e.attempt);if(!t.ok)return t;const a=vt(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 Rt(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 vt(e){const o=e.runtimeDefaults!==void 0?e.runtimeDefaults:Ye({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=Xt(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=Fe(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 Pt(e){const o=[];for(const h of Object.keys(e))(!yt.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=$t(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=Vt(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 Tt(e,o){if(!e)return R(p.YOLOOP_METADATA_INVALID,"Headless yoloop metadata was missing.",[]);const t=wt(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=Lt(r);if(!l.ok)return l;c=l;for(const g of Mt(r)){const u=J(g,o,"execution-plan");if(!u.ok)return u;a.push(Te(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(Te(u.prompt,n.get(u.prompt.storyId),d,i))}const m=xt(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,B=J(w,o,"task-directive");if(!B.ok)return B;a.push(B.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=Qt(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 Te(e,o,t,a){if(!o||!t||!a)return e;const r=Array.isArray(o.writeSet)?T(o.writeSet):[],s=we(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 wt(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 xt(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)&&ft.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 Lt(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),B=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:"",U=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:"",F=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)||F.length===0||F.length!==I.writeSet.length||!we(I.childExecutionAuthority,{storyId:P,invocationPrompt:ee,authorizedWriteSet:F})});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)||!qt(S)||new Set(U).size!==U.length||U.some(I=>!W(I))||w.some(I=>!U.includes(I))||B.some(I=>!U.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=Qe(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 we(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=>it(s)!==s)||!Dt(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=De("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 Dt(e,o){return e.length===o.length&&e.every((t,a)=>t===o[a])}function Mt(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(Oe(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=ut.test(e),r=e.replace(/^\*yolo @/,"").replace(/ branchless-preparation$/,""),s=Gt(r);return!lt.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 Nt(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 Ht(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 jt(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 Bt(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,reason:o}}function Kt(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=xe(t.hashes),r=t.workerPoolSummary??pe(),s=xe({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===Se.BYPASS_BLOCKED?{governanceEvidence:Ke}:{},reasonCodes:Y([t.reasonCode,...r.reasonCodes,...t.stateTransitions]),publicSummary:de(t.publicSummary)},d=ge(o.metadata_json,{autonomousKind:"run_yoloop",jobId:o.job_id,targetKind:"epic",targetRef:o.target_ref}),i=d.ok?be(d.envelope,n):n;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:Y([o.target_ref,...t.relativePaths]),metadata:i}),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:Y([o.target_ref,...t.relativePaths]),metadata:i}),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:Y([o.target_ref,...t.relativePaths]),metadata:i}),{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 Ut(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 zt(e,o,t,a,r){if(!o.retryable)return{retry:!1};if(Ee.has(o.reasonCode))return{retry:!0,retryCount:e.retry_count,notBeforeAt:Le(_e(r,a),o.retryNotBeforeAt)};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:Le(_e(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:Y(e.relativePaths).slice(0,50),childStoryIds:Y(e.childStoryIds).slice(0,50),stateTransitions:Y(e.stateTransitions)}}function $t(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))(!ht.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 Yt(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 Ft(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 Vt(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 qt(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 Wt(e){return le.test(e.target_ref)?[e.target_ref]:[]}function xe(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 Gt(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 Xt(e){if(e==="explicit"||e==="origin"||e==="default"||e==="fallback")return e}function Zt(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&&mt.test(e)&&!D.test(e)&&!q.test(e))}function C(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Jt(e,o){return V(e,`${o}-${Date.now()}-${Me(4).toString("hex")}`)}function _e(e,o){const t=Date.parse(e);return new Date((Number.isFinite(t)?t:Date.now())+o).toISOString()}function Le(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 Y(e){return Array.from(new Set(e))}function Qt(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,ct as DEFAULT_HEADLESS_YOLOOP_MAX_DURATION_MS,dt as DEFAULT_HEADLESS_YOLOOP_MAX_ITERATIONS,Ae as MAX_HEADLESS_YOLOOP_LOCAL_CONCURRENCY_CAP,_o as RUN_YOLOOP_DRIVER_STATES,gt as defaultYoloopRootInvoker,Co as isCanonicalDelegatedStoryPrompt,ke as resolveDefaultHeadlessYoloopLocalConcurrencyCap,Io as runYoloopExecutionPhase};
|
|
10
|
+
`],{cwd:r.projectRoot,stdio:["ignore","pipe","pipe","ipc"],windowsHide:!0});let c,d=0,l=!1;const y=setTimeout(()=>{l=!0,n.kill()},r.timeoutMs),f=m=>{d+=m.length,d>32*1024*1024&&(l=!0,n.kill())};n.stdout?.on("data",f),n.stderr?.on("data",f),n.on("message",m=>{if(c||!_(m)||typeof m.success!="boolean"||Buffer.byteLength(JSON.stringify(m))>32*1024*1024){l=!0,n.kill();return}c=m});const u={success:!1,errorCode:"headless-root-invoke-failed",error:"The isolated root metadata invocation did not complete.",exitCode:1};n.on("error",()=>{l=!0}),n.on("close",m=>{clearTimeout(y),s(m===0&&!l&&c?c:u)}),n.send({modulePath:o,options:e},m=>{m&&(l=!0,n.kill())})})}async function vt(e,r=Rt){const t=Date.now(),a={args:e.args,projectRoot:e.projectRoot,format:"json",platformTarget:"runner",serverUrl:e.serverUrl,strictReadOnly:e.strictReadOnly},o=await r(a,{projectRoot:e.projectRoot,timeoutMs:e.timeoutMs});return{success:o.success,instructions:o.instructions,metadata:o.metadata,error:o.error,errorCode:o.errorCode,exitCode:o.exitCode,durationMs:Date.now()-t,publicSafe:!0}}async function Or(e){const r=e.adapterRegistry??We(),t=F(e.limit??Qe,1,10),a=F(e.leaseMs??Je,1e3,3600*1e3),o=F(e.staleLeaseAfterMs??tt,0,1440*60*1e3),s=F(e.maxAttempts??et,1,10),n=F(e.localConcurrencyCap??Pe(),1,ve),c=[],d=[],l=e.now(),y=Pt({store:e.store,metadata:e.metadata,nowIso:l,maxAttempts:s,queueCap:e.queueCap});c.push(...y.reasonCodes);const f=e.store.recoverStaleHeadlessExecutionAttempts({nowIso:l,staleAfterMs:o,limit:t*2});f.recoveredAttemptIds.length>0&&(c.push(p.EXECUTION_BACKOFF),f.failedAttemptIds.length>0&&c.push(p.EXECUTION_TIMEOUT));const u=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 u){const k=await Tt({store:e.store,projectRoot:e.projectRoot,runnerId:e.runnerId,attempt:m,registry:r,now:e.now,leaseMs:a,timeoutMs:F(e.timeoutMs??rt,1e3,18e5),backoffMs:F(e.backoffMs??Ze,1e3,36e5),maxAttempts:s,maxIterations:F(e.maxIterations??ft,1,100),maxDurationMs:F(e.maxDurationMs??yt,1e3,72e5),localConcurrencyCap:n,queueCap:e.queueCap,adapterOptions:e.adapterOptions,runtimeDefaults:e.runtimeDefaults,runtimeFallback:e.runtimeFallback,yoloopInvoker:e.yoloopInvoker??vt,serverUrl:e.serverUrl,idFactory:e.idFactory??ar,continuousWorkspaceManager:e.continuousWorkspaceManager??st(),terminalGitAdapter:e.terminalGitAdapter??ct(e.projectRoot)});d.push(k),c.push(k.reasonCode,...k.workerPoolSummary.reasonCodes)}return{ok:d.every(m=>m.outcome!=="failed")&&y.rejectedCount===0,enqueuedAttemptCount:y.enqueuedCount,dueAttemptCount:u.length,processedAttemptCount:d.filter(m=>m.outcome!=="ignored").length,recoveredAttemptIds:f.recoveredAttemptIds,receipts:d,reasonCodes:V(c.length>0?c:[p.OK]),publicSafe:!0}}function Pt(e){let r=0,t=0;const a=[];for(const o of Xt(e.metadata)){if(!_(o)||o.kind!=="run_yoloop")continue;const s=Mt(o);if(!s.ok){t+=1,a.push(s.reasonCode);continue}const n=s.directive;if(!e.store.jobExists(n.jobId)){t+=1,a.push(Oe.BYPASS_BLOCKED);continue}const c=Zt(n);if(e.store.hasCompletedHeadlessExecutionDirectiveHash(c)){a.push(p.EXECUTION_COMPLETED);continue}const d=Ve({autonomousKind:"run_yoloop",source:"headless-run-yoloop",targetKind:"epic",targetRef:n.targetRef,epicId:n.epicId??ne(n.targetRef),jobId:n.jobId,operationSeed:n.operationId,commandHash:x(n.commandRef)}),l=qe(e.store,d,e.nowIso,{requireExistingJob:!0});if(!l.ok){t+=1,a.push(l.reasonCode);continue}const y=q("attempt",n.idempotencyKey),f=q("exec",n.operationId),u=e.store.enqueueHeadlessExecutionAttempt({attemptId:y,executionId:f,jobId:n.jobId,directiveHash:c,directiveKind:"run_yoloop",commandClass:n.commandClass,targetKind:"epic",targetRef:n.targetRef,epicId:n.epicId??ne(n.targetRef),runtimeId:n.runtime?.runtimeId,modelId:n.runtime?.modelId,runtimeSource:or(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:c},redactionSummary:n.redactionSummary,relativePaths:[n.targetRef],metadata:Ee(d,{schemaVersion:1,contractVersion:"continuity-v1",jobId:n.jobId,operationId:n.operationId,reasonCode:n.reasonCode??p.OK,targetRef:n.targetRef,directiveHash:c})});if(!u.accepted){t+=1,a.push(u.reasonCode??"queue-cap-reached");continue}u.inserted&&(r+=1),a.push(p.OK)}return{enqueuedCount:r,rejectedCount:t,reasonCodes:V(a)}}async function Tt(e){const r=e.now(),t=e.idFactory("lease",e.attempt.attempt_id),a=Se(r,e.leaseMs);if(!e.store.claimHeadlessExecutionAttempt({attemptId:e.attempt.attempt_id,leaseId:t,runnerId:e.runnerId,claimedAt:r,leaseExpiresAt:a,reasonCode:p.OK}).inserted)return qt(e.attempt,{status:e.attempt.status,receiptStatus:"ignored",reasonCode:"lease-conflict",timestamp:r});if(e.store.hasCompletedHeadlessExecutionDirectiveHash(e.attempt.directive_hash,e.attempt.attempt_id))return _e(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:Ie(),hashes:{directive:e.attempt.directive_hash},redactionSummary:[],relativePaths:[e.attempt.target_ref],childStoryIds:[],stateTransitions:["start","complete"]});const n=xt(e);if(!n.ok)return _e(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:Ie(),hashes:{directive:e.attempt.directive_hash},redactionSummary:n.redactionSummary,relativePaths:er(e.attempt),childStoryIds:[],stateTransitions:["start"]});const c=await wt({...e,prepared:n.input}),d=Wt(e.attempt,c,e.maxAttempts,e.backoffMs,e.now()),l=d.retry?"backoff":c.status,y=d.retry?"deferred":c.receiptStatus,f=d.retry?Et.has(c.reasonCode)||we.has(c.reasonCode)?c.reasonCode:p.EXECUTION_BACKOFF:c.reasonCode,u=d.retry?"Headless run_yoloop execution scheduled bounded retry after transient metadata/runtime outcome.":c.publicSummary;return _e(e.store,e.attempt,{leaseId:t,runnerId:e.runnerId,status:l,receiptStatus:y,reasonCode:f,publicSummary:u,completedAt:e.now(),durationMs:c.durationMs,notBeforeAt:d.notBeforeAt,retryCount:d.retryCount,counts:c.counts,workerPoolSummary:c.workerPoolSummary,hashes:{...c.hashes,directive:e.attempt.directive_hash},redactionSummary:c.redactionSummary,relativePaths:c.relativePaths,childStoryIds:c.childStoryIds,runtimeId:n.input.runtimeId,modelId:n.input.modelId,runtimeSource:n.input.runtimeSource,stateTransitions:c.stateTransitions,terminalClass:c.terminalClass,releaseBlocked:c.releaseBlocked})}async function wt(e){const r=Date.now(),t=["start"],a=new Set,o=[],s=[],n={root:x(e.prepared.rootPrompt)},c=[h("rootPrompt","prompt_body",n.root)];let d=0,l=0,y=0,f=0,u=0,m=0,k,T=!1;const i=De(e.localConcurrencyCap),E=new Map;let j=!1;const K=new Map,z=new Map,se=P=>{const b=P.child;n[`child-${b.storyId.replace(/[^A-Za-z0-9_.:-]/g,"-")}`]=P.commandHash,c.push(P.promptRedaction);const M=P.receipt;if(P.terminalFailure){if(P.deferredFailure){K.set(b.storyId,P.terminalFailure),i.backpressurePauseCount+=1;return}K.delete(b.storyId),z.set(b.storyId,P.terminalFailure),a.has(b.storyId)||(a.add(b.storyId),o.push(b.storyId),s.push(b.targetRef),y+=1);return}if(!M||M.outcome==="deferred"){K.set(b.storyId,P.reasonCodes.includes("queue-cap-reached")?p.WORKER_POOL_BACKPRESSURE_PAUSED:M?.reasonCode||p.EXECUTION_BACKOFF),P.reasonCodes.includes("queue-cap-reached")&&(i.backpressurePauseCount+=1);return}K.delete(b.storyId),!a.has(b.storyId)&&(a.add(b.storyId),o.push(b.storyId),s.push(b.targetRef),M.outcome==="failed"?(y+=1,z.set(b.storyId,M.reasonCode||p.EXECUTION_FAILED)):M.outcome==="ignored"?f+=1:l+=1)},X=async()=>{const P=await Promise.race([...E.entries()].map(([b,M])=>M.promise.then(S=>({storyId:b,result:S}))));E.delete(P.storyId),i.completedChildCount+=1,i.pendingChildCount=E.size,se(P.result)};for(;;){if(d>=e.maxIterations)return t.push("backoff"),O({status:"failed",receiptStatus:"failed",reasonCode:kt,publicSummary:"Headless yoloop reached the bounded iteration limit before completion metadata.",retryable:!1,startedAt:r,counts:A(d,o.length,l,y,f,u,m),workerPoolSummary:g(i),hashes:n,redactions:c,relativePaths:[e.prepared.targetRef,...s],childStoryIds:o,stateTransitions:t});if(Date.now()-r>e.maxDurationMs)return t.push("backoff"),O({status:"failed",receiptStatus:"failed",reasonCode:Ot,publicSummary:"Headless yoloop reached the bounded duration limit before completion metadata.",retryable:!1,startedAt:r,counts:A(d,o.length,l,y,f,u,m),workerPoolSummary:g(i),hashes:n,redactions:c,relativePaths:[e.prepared.targetRef,...s],childStoryIds:o,stateTransitions:t});t.push("metadata_parse");const P=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:d,runtimeId:e.prepared.runtimeId,...e.prepared.modelId?{modelId:e.prepared.modelId}:{},timeoutMs:e.timeoutMs,serverUrl:e.serverUrl});P.durationMs!==void 0&&(n[`iter-${d}`]=x(String(P.durationMs)));const b=P.metadata,M=P.errorCode==="YOLOOP_RELEASE_BLOCKED"||b?.yoloopReleaseBlocked===!0||b?.terminalClass==="release-blocked"||b?.releaseBlocked!==void 0;if(!P.success&&!M)return t.push("backoff"),O({status:"backoff",receiptStatus:"deferred",reasonCode:p.EXECUTION_FAILED,publicSummary:"Headless yoloop root metadata invocation failed with bounded public evidence.",retryable:!0,startedAt:r,counts:A(d,o.length,l,y,f,u,m),workerPoolSummary:g(i),hashes:n,redactions:c,relativePaths:[e.prepared.targetRef,...s],childStoryIds:o,stateTransitions:t});const S=Yt(b);if(!S.ok)return t.push("backoff"),O({status:"failed",receiptStatus:"failed",reasonCode:S.reasonCode,publicSummary:S.publicSummary,retryable:!1,startedAt:r,counts:A(d,o.length,l,y,f,u,m),workerPoolSummary:g(i),hashes:n,redactions:[...c,...S.redactionSummary],relativePaths:[e.prepared.targetRef,...s],childStoryIds:o,stateTransitions:t});const C=Ft(b);if(S.aborted&&C){for(;E.size>0;)await X();return m+=1,t.push("backoff"),O({status:"backoff",receiptStatus:"deferred",reasonCode:C.reason==="YOLOOP_SESSION_TIMEOUT"?"yoloop-session-timeout-resumable":"yoloop-per-run-cap-resumable",publicSummary:"Headless yoloop reached a finite run boundary and scheduled the same queue after cool-down.",retryable:!0,retryNotBeforeAt:C.coolDownUntil,startedAt:r,counts:A(d+1,o.length,l,y,f,u,m),workerPoolSummary:g(i),hashes:n,redactions:c,relativePaths:[e.prepared.targetRef,...s],childStoryIds:o,stateTransitions:t})}if((S.releaseBlocked||S.aborted||S.complete||S.replay||S.outcome&&S.outcome!=="selected"&&S.outcome!=="queue_exhausted")&&j&&E.size>0){await X(),d+=1,t.push("reinvoke");continue}if(S.releaseBlocked)return t.push("release_blocked"),O({status:"failed",receiptStatus:"failed",reasonCode:"yoloop-release-blocked",publicSummary:"Headless yoloop stopped at a terminal release-blocked boundary without declaring success.",retryable:!1,startedAt:r,counts:A(d+1,o.length,l,y,f,u,m),workerPoolSummary:g(i),hashes:{...n,releaseBlocked:x(S.releaseBlocked.resultId)},redactions:c,relativePaths:[e.prepared.targetRef,...s],childStoryIds:o,stateTransitions:t,terminalClass:"release-blocked",releaseBlocked:S.releaseBlocked});const $=_(b?.epicIntegration)?b.epicIntegration:void 0,ee=Array.isArray($?.reasonCodes)?$.reasonCodes.filter(I=>typeof I=="string"):[];if(S.aborted&&b?.abortReason==="epic-integration-checkpoints-incomplete"&&$?.required===!0&&$.ready===!1&&ee.length>0&&ee.every(I=>I==="epic-aggregate-qa-receipt-required"||I==="epic-origin-binding-required")&&e.terminalGitAdapter.prepareLifecycleEvidence){t.push("lifecycle_evidence");const I=await e.terminalGitAdapter.prepareLifecycleEvidence({epicId:e.prepared.epicId,nowIso:e.now()});if(!I.ok)return t.push("backoff"),O({status:I.retryEligible?"backoff":"failed",receiptStatus:I.retryEligible?"deferred":"failed",reasonCode:I.reasonCode,publicSummary:"Headless yoloop stopped because physical Git lifecycle evidence could not be produced safely.",retryable:I.retryEligible,startedAt:r,counts:A(d+1,o.length,l,y,f,u,m),workerPoolSummary:g(i),hashes:n,redactions:c,relativePaths:[e.prepared.targetRef,...s],childStoryIds:o,stateTransitions:t});k=I.p205Authority,T=!0,d+=1,t.push("reinvoke");continue}if(S.aborted)return m+=1,t.push("aborted"),O({status:"failed",receiptStatus:"failed",reasonCode:At,publicSummary:"Headless yoloop stopped because public metadata reported an aborted loop.",retryable:!1,startedAt:r,counts:A(d+1,o.length,l,y,f,u,m),workerPoolSummary:g(i),hashes:n,redactions:c,relativePaths:[e.prepared.targetRef,...s],childStoryIds:o,stateTransitions:t});if(S.outcome&&S.outcome!=="selected"&&S.outcome!=="queue_exhausted")return t.push("backoff"),O({status:"failed",receiptStatus:"failed",reasonCode:`yoloop-${S.outcome}`,publicSummary:"Headless yoloop stopped on a non-executable graph-first continuation outcome.",retryable:!1,startedAt:r,counts:A(d+1,o.length,l,y,f,u,m),workerPoolSummary:g(i),hashes:n,redactions:c,relativePaths:[e.prepared.targetRef,...s],childStoryIds:o,stateTransitions:t});if(S.replay)return t.push("backoff"),O({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:r,counts:A(d+1,o.length,l,y,f,u,m),workerPoolSummary:g(i),hashes:n,redactions:c,relativePaths:[e.prepared.targetRef,...s],childStoryIds:o,stateTransitions:t});if(S.complete&&j&&K.size>0&&z.size===0)return t.push("backoff"),O({status:"backoff",receiptStatus:"deferred",reasonCode:[...K.values()].sort()[0],publicSummary:"Headless yoloop rejected terminal completion while previously runnable work remained undispatched.",retryable:!0,startedAt:r,counts:A(d+1,o.length,l,y,f,u,m),workerPoolSummary:g(i),hashes:n,redactions:c,relativePaths:[e.prepared.targetRef,...s],childStoryIds:o,stateTransitions:t});if(S.complete&&j&&z.size>0)return t.push("backoff"),O({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:r,counts:A(d+1,o.length,l,y,f,u,m),workerPoolSummary:g(i),hashes:n,redactions:c,relativePaths:[e.prepared.targetRef,...s],childStoryIds:o,stateTransitions:t});const de=zt(b);if(de){if(!T&&e.terminalGitAdapter.prepareLifecycleEvidence){t.push("lifecycle_evidence");const v=await e.terminalGitAdapter.prepareLifecycleEvidence({epicId:e.prepared.epicId,nowIso:e.now()});if(!v.ok)return t.push("backoff"),O({status:v.retryEligible?"backoff":"failed",receiptStatus:v.retryEligible?"deferred":"failed",reasonCode:v.reasonCode,publicSummary:"Headless yoloop stopped because physical Git lifecycle evidence could not be produced safely.",retryable:v.retryEligible,startedAt:r,counts:A(d,o.length,l,y,f,u,m),workerPoolSummary:g(i),hashes:n,redactions:c,relativePaths:[e.prepared.targetRef,...s],childStoryIds:o,stateTransitions:t});k=v.p205Authority,T=!0}t.push("terminal_git");const I=new Date,L=await lt(e.projectRoot,{kind:"continuous",storyId:de.epicId,sessionId:`${e.runnerId}:${e.attempt.attempt_id}`,idempotencyKey:de.idempotencyKey,persistent:!1,expiresAt:new Date(I.getTime()+Math.max(e.timeoutMs,e.maxDurationMs)+6e4).toISOString()});if(!L.ok)return t.push("backoff"),O({status:"backoff",receiptStatus:"deferred",reasonCode:L.reasonCode,publicSummary:"Headless yoloop deferred terminal Git while another physical writer retained authority.",retryable:!0,startedAt:r,counts:A(d+1,o.length,l,y,f,u,m),workerPoolSummary:g(i),hashes:n,redactions:c,relativePaths:[e.prepared.targetRef,...s],childStoryIds:o,stateTransitions:t});let U,H=!1;try{U=await dt(de,e.terminalGitAdapter,e.now,k)}finally{H=await ut(L.path,L.owner).catch(()=>!1)}if(!H)return t.push("backoff"),O({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:r,counts:A(d+1,o.length,l,y,f,u,m),workerPoolSummary:g(i),hashes:n,redactions:c,relativePaths:[e.prepared.targetRef,...s],childStoryIds:o,stateTransitions:t});if(n[`terminal-git-${d}`]=x(`${U.receipt.idempotencyKey}:${U.receipt.physicalStatus}`),!U.ok){const v=U.receipt.retryEligible;return t.push("backoff"),O({status:v?"backoff":"failed",receiptStatus:v?"deferred":"failed",reasonCode:U.reasonCodes[0]??"epic-terminal-git-failed",publicSummary:"Headless yoloop stopped at the epic terminal Git boundary with public-safe retry evidence.",retryable:v,startedAt:r,counts:A(d+1,o.length,l,y,f,u,m),workerPoolSummary:g(i),hashes:n,redactions:c,relativePaths:[e.prepared.targetRef,...s],childStoryIds:o,stateTransitions:t})}if(S.complete)return u+=1,t.push("complete"),O({status:"completed",receiptStatus:"applied",reasonCode:p.EXECUTION_COMPLETED,publicSummary:"Headless yoloop completed only after fresh root-owned physical Git verification.",retryable:!1,startedAt:r,counts:A(d+1,o.length,l,y,f,u,m),workerPoolSummary:g(i),hashes:n,redactions:c,relativePaths:[e.prepared.targetRef,...s],childStoryIds:o,stateTransitions:t});d+=1,t.push("reinvoke");continue}if(S.complete)return u+=1,t.push("complete"),O({status:"completed",receiptStatus:"applied",reasonCode:p.EXECUTION_COMPLETED,publicSummary:"Headless yoloop completed after public metadata reported yoloopComplete.",retryable:!1,startedAt:r,counts:A(d+1,o.length,l,y,f,u,m),workerPoolSummary:g(i),hashes:n,redactions:c,relativePaths:[e.prepared.targetRef,...s],childStoryIds:o,stateTransitions:t});const ue=$t(b);if(ue){t.push("git_reconciliation");const I=await it(ue,e.terminalGitAdapter,e.now);if(n[`git-reconciliation-${d}`]=x(`${ue.idempotencyKey}:${I.reasonCodes.join(",")}`),!I.ok)return t.push("backoff"),O({status:"backoff",receiptStatus:"deferred",reasonCode:I.reasonCodes[0]??"git-reconciliation-failed",publicSummary:"Headless yoloop paused at a fail-closed Git reconciliation boundary.",retryable:!0,startedAt:r,counts:A(d+1,o.length,l,y,f,u,m),workerPoolSummary:g(i),hashes:n,redactions:c,relativePaths:[e.prepared.targetRef,...s],childStoryIds:o,stateTransitions:t})}const N=Nt(b,e.prepared.epicId);if(!N.ok)return t.push("backoff"),O({status:"failed",receiptStatus:"failed",reasonCode:N.reasonCode,publicSummary:N.publicSummary,retryable:!1,startedAt:r,counts:A(d+1,o.length,l,y,f,u,m),workerPoolSummary:g(i),hashes:n,redactions:[...c,...N.redactionSummary],relativePaths:[e.prepared.targetRef,...s],childStoryIds:o,stateTransitions:t});const ge=N.continuous?void 0:N.prompts.find(I=>a.has(I.storyId));if(ge)return t.push("backoff"),O({status:"failed",receiptStatus:"failed",reasonCode:p.YOLOOP_ISOLATION_VIOLATION,publicSummary:"Headless yoloop rejected cyclic child story delegation evidence.",retryable:!1,startedAt:r,counts:A(d+1,o.length,l,y,f,u,m),workerPoolSummary:g(i),hashes:n,redactions:[...c,h("storyId","prompt_body",x(ge.storyId))],relativePaths:[e.prepared.targetRef,...s],childStoryIds:o,stateTransitions:t});if(i.mode=N.mode==="continuous_dag"?"continuous_dag":N.parallelAuthorized?"parallel_wave":"serial",i.serverMaxConcurrency=N.serverMaxConcurrency,N.continuous){j=!0;const I=N.prompts.filter(L=>!a.has(L.storyId)&&!E.has(L.storyId));if(i.pendingChildCount=I.length+E.size,I.length>0){const L=Le({store:e.store,nowIso:e.now(),localCap:e.localConcurrencyCap,serverMaxConcurrency:N.serverMaxConcurrency,parallelAuthorized:!0,continuous:!0,eligibleCount:I.length});if(i.queueCap=L.queueCap,i.availableLeases=L.availableLeases,i.effectiveConcurrency=L.effectiveConcurrency,i.reasonCodes.push(L.reasonCode),L.effectiveConcurrency===0&&E.size===0)return i.backpressurePauseCount+=1,t.push("backoff"),O({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:r,counts:A(d+1,o.length,l,y,f,u,m),workerPoolSummary:g(i),hashes:n,redactions:c,relativePaths:[e.prepared.targetRef,...s],childStoryIds:o,stateTransitions:t});const U=I.slice(0,L.effectiveConcurrency);t.push("child_story_delegation");for(const H of U)E.set(H.storyId,{child:H,promise:xe({...e,child:H,iteration:d})});i.startedChildCount+=U.length,i.peakConcurrency=Math.max(i.peakConcurrency,E.size),i.pendingChildCount=I.length-U.length+E.size}if(E.size>0)await X();else{if(K.size>0)return t.push("backoff"),O({status:"backoff",receiptStatus:"deferred",reasonCode:[...K.values()].sort()[0],publicSummary:"Headless yoloop retained deferred continuous work for a bounded retry.",retryable:!0,startedAt:r,counts:A(d+1,o.length,l,y,f,u,m),workerPoolSummary:g(i),hashes:n,redactions:c,relativePaths:[e.prepared.targetRef,...s],childStoryIds:o,stateTransitions:t});if(z.size>0)return t.push("backoff"),O({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:r,counts:A(d+1,o.length,l,y,f,u,m),workerPoolSummary:g(i),hashes:n,redactions:c,relativePaths:[e.prepared.targetRef,...s],childStoryIds:o,stateTransitions:t})}d+=1,t.push("reinvoke");continue}i.pendingChildCount=N.prompts.length;const te=[...N.prompts];for(;te.length>0;){const I=Le({store:e.store,nowIso:e.now(),localCap:e.localConcurrencyCap,serverMaxConcurrency:N.serverMaxConcurrency,parallelAuthorized:N.parallelAuthorized,continuous:!1,eligibleCount:te.length});if(i.queueCap=I.queueCap,i.availableLeases=I.availableLeases,i.effectiveConcurrency=I.effectiveConcurrency,i.reasonCodes.push(I.reasonCode),I.effectiveConcurrency===0)return i.backpressurePauseCount+=1,i.pendingChildCount=te.length,t.push("backoff"),O({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:r,counts:A(d+1,o.length,l,y,f,u,m),workerPoolSummary:g(i),hashes:n,redactions:c,relativePaths:[e.prepared.targetRef,...s],childStoryIds:o,stateTransitions:t});const L=te.splice(0,I.effectiveConcurrency);i.startedChildCount+=L.length,i.peakConcurrency=Math.max(i.peakConcurrency,L.length),i.pendingChildCount=te.length,t.push("child_story_delegation");const U=await Promise.all(L.map(v=>xe({...e,child:v,iteration:d})));i.completedChildCount+=U.length;let H;for(const v of U){const ce=v.child;n[`child-${ce.storyId.replace(/[^A-Za-z0-9_.:-]/g,"-")}`]=v.commandHash,c.push(v.promptRedaction),o.push(ce.storyId),s.push(ce.targetRef),a.add(ce.storyId);const re=v.receipt;if(!re){v.reasonCodes.includes("queue-cap-reached")?(i.backpressurePauseCount+=1,i.pendingChildCount+=1,i.reasonCodes.push(p.WORKER_POOL_BACKPRESSURE_PAUSED),H??={kind:"deferred",reasonCode:p.WORKER_POOL_BACKPRESSURE_PAUSED}):(y+=1,H??={kind:"missing",reasonCode:p.EXECUTION_FAILED});continue}if(re.outcome==="deferred"){H??={kind:"deferred",reasonCode:p.EXECUTION_BACKOFF};continue}if(re.outcome==="failed"){y+=1,H??={kind:"failed",reasonCode:re.reasonCode||p.EXECUTION_FAILED};continue}re.outcome==="ignored"?f+=1:l+=1}if(H){const v=H.kind==="deferred";return O({status:v?"backoff":"failed",receiptStatus:v?"deferred":"failed",reasonCode:H.reasonCode,publicSummary:H.kind==="missing"?"Headless yoloop child story delegation did not produce a public receipt.":v?"Headless yoloop child story delegated bounded backoff to the root attempt.":"Headless yoloop child story execution failed with public receipt evidence.",retryable:v,startedAt:r,counts:A(d+1,o.length,l,y,f,u,m),workerPoolSummary:g(i),hashes:n,redactions:c,relativePaths:[e.prepared.targetRef,...s],childStoryIds:o,stateTransitions:t})}}d+=1,t.push("reinvoke")}}async function xe(e){const r=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(r&&!r.ok)return{child:e.child,reasonCodes:[r.reasonCode],commandHash:x(e.child.commandRef),promptRedaction:h(`child.${e.child.storyId}`,"prompt_body",x(e.child.commandRef)),terminalFailure:r.reasonCode,deferredFailure:/backpressure|lease-active/.test(r.reasonCode)};const t=e.projectRoot,a=r?.ok?nt(r.value):e.adapterOptions?.commandRunner,o=Vt({rootAttempt:e.attempt,child:e.child,iteration:e.iteration,runtimeId:e.prepared.runtimeId,modelId:e.prepared.modelId,runtimeSource:e.prepared.runtimeSource}),s=q("attempt",o.idempotencyKey);let n=!!r;try{const c=await ot({store:e.store,projectRoot:t,runnerId:e.runnerId,now:e.now,metadata:{continuityExecutionDirectives:[o]},adapterRegistry:e.registry,adapterOptions:{...e.adapterOptions,cwd:t,env:{...e.adapterOptions?.env,...r?.ok?{NEOCORTEX_BRANCHLESS_PROJECT_ROOT:r.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}),d=c.receipts.find(l=>l.attemptId===s)??c.receipts[0];if(r?.ok&&d&&d.outcome!=="failed"&&d.outcome!=="deferred"){const l=await e.continuousWorkspaceManager.integrate(r.value,{receiptRefs:[`continuity:${d.attemptId}`],nowIso:d.timestamp});if(!l.ok)return{child:e.child,receipt:d,reasonCodes:[...c.reasonCodes,l.reasonCode],commandHash:x(e.child.commandRef),promptRedaction:h(`child.${e.child.storyId}`,"prompt_body",x(e.child.commandRef)),terminalFailure:l.reasonCode,deferredFailure:/backpressure|graph-revision-stale/.test(l.reasonCode)};n=!1}return{child:e.child,receipt:d,reasonCodes:c.reasonCodes,commandHash:x(e.child.commandRef),promptRedaction:h(`child.${e.child.storyId}`,"prompt_body",x(e.child.commandRef))}}finally{r?.ok&&await e.continuousWorkspaceManager.release(r.value,n)}}function Le(e){const r=e.store.collectSnapshotRows({nowIso:e.nowIso,jobLimit:1,staleLeaseLimit:1,receiptLimit:1,eventLimit:1,snapshotLimit:1}),t=Math.max(1,Math.floor(r.queue.capacity)),a=Math.max(0,Math.floor(r.queue.running)-1),o=e.continuous?Math.max(0,Math.floor(r.queue.available)):Math.max(0,Math.min(Math.max(0,e.localCap-a),Math.floor(r.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,o));return{queueCap:t,availableLeases:o,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 De(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 g(e){return{mode:e.mode,serverMaxConcurrency:Y(e.serverMaxConcurrency),localCap:Y(e.localCap),queueCap:Y(e.queueCap),availableLeases:Y(e.availableLeases),effectiveConcurrency:Y(e.effectiveConcurrency),peakConcurrency:Y(e.peakConcurrency),pendingChildCount:Y(e.pendingChildCount),startedChildCount:Y(e.startedChildCount),completedChildCount:Y(e.completedChildCount),backpressurePauseCount:Y(e.backpressurePauseCount),reasonCodes:V(e.reasonCodes.length>0?e.reasonCodes:[p.WORKER_POOL_SERIAL_FALLBACK]).slice(0,10),publicSafe:!0}}function he(e=Pe()){return g(De(e))}function Y(e){return Number.isFinite(e)?Math.max(0,Math.min(1e4,Math.floor(e))):0}function xt(e){const r=Re(e.attempt.metadata_json,{autonomousKind:"run_yoloop",jobId:e.attempt.job_id,targetKind:"epic",targetRef:e.attempt.target_ref});if(!r.ok)return{ok:!1,status:"failed",receiptStatus:"failed",reasonCode:r.reasonCode,publicSummary:r.publicSummary,redactionSummary:r.redactionSummary};const t=Lt(e.attempt);if(!t.ok)return t;const a=Dt(e);if(!a.ok)return{ok:!1,status:"failed",receiptStatus:"failed",reasonCode:a.reasonCode,publicSummary:a.publicSummary,redactionSummary:a.redactionSummary};const o=e.attempt.epic_id??ne(e.attempt.target_ref);return{ok:!0,input:{rootPrompt:`*yoloop @${e.attempt.target_ref}`,targetRef:e.attempt.target_ref,epicId:o,runtimeId:a.runtimeId,...a.modelId?{modelId:a.modelId}:{},runtimeSource:a.runtimeSource,publicSafe:!0}}}function Lt(e){const r=[];e.directive_kind!=="run_yoloop"&&r.push(h("directiveKind","unsafe_key","value-denied")),e.target_kind!=="epic"&&r.push(h("targetKind","prompt_body","value-denied")),(!fe.test(e.target_ref)||W.test(e.target_ref)||D.test(e.target_ref))&&r.push(h("targetRef","prompt_body","value-denied"));const t=ne(e.target_ref);return e.epic_id&&e.epic_id!==t&&r.push(h("epicId","prompt_body","value-denied")),r.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:r}:{ok:!0,input:{rootPrompt:`*yoloop @${e.target_ref}`,targetRef:e.target_ref,epicId:t,runtimeId:"fake",publicSafe:!0}}}function Dt(e){const r=e.runtimeDefaults!==void 0?e.runtimeDefaults:Ge({projectRoot:e.projectRoot});if(_(r)&&r.ok===!1)return{ok:!1,reasonCode:p.RUNTIME_UNTRUSTED,publicSummary:typeof r.publicSummary=="string"?r.publicSummary:"Headless runtime defaults failed public-safety validation.",redactionSummary:Array.isArray(r.redactionSummary)?r.redactionSummary:[]};const t=rr(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,o={registry:e.registry,defaults:r,fallback:e.runtimeFallback};a&&(t==="origin"?o.origin=a:t==="default"?o.projectDefault=a:t==="fallback"?o.fallback=a:o.explicit=a);const s=Xe(o);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 Mt(e){const r=[];for(const i of Object.keys(e))(!St.has(i)||oe.test(i))&&r.push(h(i,Q(i),"key-denied"));e.publicSafe!==!0&&r.push(h("publicSafe","unsafe_key","value-denied"));const t=B(e,"kind"),a=B(e,"commandClass"),o=B(e,"jobId"),s=B(e,"operationId"),n=B(e,"idempotencyKey"),c=B(e,"targetKind"),d=B(e,"targetRef"),l=B(e,"commandRef"),y=B(e,"publicSummary"),f=B(e,"epicId");t!=="run_yoloop"&&r.push(h("kind","unsafe_key","value-denied")),a!=="goal-tick"&&a!=="loop-tick"&&r.push(h("commandClass","unsafe_key","value-denied")),be(o)||r.push(h("jobId","unsafe_key","value-denied")),be(s)||r.push(h("operationId","unsafe_key","value-denied")),be(n)||r.push(h("idempotencyKey","unsafe_key","value-denied")),(c!=="epic"||!d||!fe.test(d)||D.test(d))&&r.push(h("targetRef","prompt_body","value-denied"));const u=d?`*yoloop @${d}`:void 0;(!l||l!==u||l.includes("@neocortex")||W.test(l)||D.test(l))&&r.push(h("commandRef","prompt_body","value-denied")),f&&d&&f!==ne(d)&&r.push(h("epicId","prompt_body","value-denied")),(!y||y.length>240||D.test(y))&&r.push(h("publicSummary","unbounded_text","value-denied")),e.reasonCode!==void 0&&(typeof e.reasonCode!="string"||D.test(e.reasonCode))&&r.push(h("reasonCode","unsafe_key","value-denied"));const m=Gt(e.runtime,r);e.attempts!==void 0&&le(e.attempts,"attempts",r),e.metadata!==void 0&&le(e.metadata,"metadata",r);const k=_(e.metadata)?e.metadata:void 0,T=Jt(e.redactionSummary,r);return r.length>0||t!=="run_yoloop"||!a||!o||!s||!n||!d||!l||!y?{ok:!1,reasonCode:r.some(E=>E.reason==="prompt_body")?p.PROMPT_REJECTED:p.DIRECTIVE_REJECTED,redactionSummary:r}:{ok:!0,directive:{kind:"run_yoloop",commandClass:a,jobId:o,operationId:s,idempotencyKey:n,targetKind:"epic",targetRef:d,commandRef:l,...f?{epicId:f}:{},...m?{runtime:m}:{},publicSummary:y,...typeof e.reasonCode=="string"?{reasonCode:e.reasonCode}:{},...k?{metadata:k}:{},...T.length>0?{redactionSummary:T}:{},publicSafe:!0}}}function Nt(e,r){if(!e)return R(p.YOLOOP_METADATA_INVALID,"Headless yoloop metadata was missing.",[]);const t=Bt(e);if(!t.ok)return t;const a=[],o=_(e.yoloopExecutionPlan)?e.yoloopExecutionPlan:void 0,s=o?w(o.storyIds).filter(G):[],n=o?.version===3&&_(o.scheduler)&&Array.isArray(o.scheduler.nodes)?new Map(o.scheduler.nodes.filter(_).map(u=>[String(u.storyId??""),u])):new Map,c=o?.version===3&&_(o.scheduler)&&typeof o.scheduler.graphRevision=="string"?o.scheduler.graphRevision:void 0,d=o?.version===3&&typeof o.executionBranch=="string"?o.executionBranch:void 0;let l;if(o){const u=jt(o);if(!u.ok)return u;l=u;for(const k of Ut(o)){const T=J(k,r,"execution-plan");if(!T.ok)return T;a.push(Me(T.prompt,n.get(T.prompt.storyId),c,d))}if(a.length===0)for(const k of s){const T=J(`*yolo @docs/stories/${k}.story.md`,r,"execution-plan");if(!T.ok)return T;a.push(Me(T.prompt,n.get(T.prompt.storyId),c,d))}const m=Ht(e.skillDirectives,a);if(!m.ok)return m}const y=typeof e.nextStoryId=="string"&&G(e.nextStoryId)?e.nextStoryId:void 0;for(const u of o?[]:Array.isArray(e.skillDirectives)?e.skillDirectives:[]){if(!_(u)||u.kind!=="task")continue;const m=w(u.promptTemplates);if(m.length>0){for(const E of m){const j=J(E,r,"task-directive");if(!j.ok)return j;a.push(j.prompt)}continue}const k=typeof u.promptTemplate=="string"?u.promptTemplate:void 0;if(!k)continue;const T=w(u.storyIds).filter(G),i=T.length>0?T:y?[y]:[];if(i.length===0&&ye.test(k)){const E=J(k,r,"task-directive");if(!E.ok)return E;a.push(E.prompt);continue}for(const E of i){const j=k.includes("{storyId}")?k.replaceAll("{storyId}",E):k,K=J(j,r,"task-directive");if(!K.ok)return K;a.push(K.prompt)}}if(a.length===0&&y){const u=J(`*yolo @docs/stories/${y}.story.md`,r,"next-story");if(!u.ok)return u;a.push(u.prompt)}const f=nr(a,u=>u.commandRef);if(l?.continuous){if(f.length!==s.length||f.some(u=>u.preparationOnly!==!0||u.source!=="execution-plan"))return R(p.YOLOOP_ISOLATION_VIOLATION,"Headless continuous yoloop rejected an ambiguous or non-preparation child prompt.",[h("promptTemplates","prompt_body","operation-denied")])}else if(f.some(u=>u.preparationOnly===!0))return R(p.YOLOOP_ISOLATION_VIOLATION,"Headless yoloop rejected branchless preparation outside a validated continuous plan.",[h("promptTemplates","prompt_body","operation-denied")]);if(s.length>0){const u=new Set(s);for(const m of f)if(!u.has(m.storyId))return R(p.YOLOOP_ISOLATION_VIOLATION,"Headless yoloop rejected a child prompt outside the server-authorized execution plan.",[h("storyId","prompt_body",x(m.storyId))])}return l?.parallelAuthorized&&!Z(f.map(u=>u.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&&!l?.continuous?R(p.YOLOOP_METADATA_INVALID,"Headless yoloop metadata did not include an authorized per-story child prompt.",[]):{ok:!0,prompts:f,mode:l?.mode??"legacy",serverMaxConcurrency:l?.serverMaxConcurrency??1,parallelAuthorized:l?.parallelAuthorized??!1,continuous:l?.continuous??!1,reasonCodes:[p.OK,l?.parallelAuthorized?p.WORKER_POOL_PARALLEL_ACTIVE:p.WORKER_POOL_SERIAL_FALLBACK]}}function Me(e,r,t,a){if(!r||!t||!a)return e;const o=Array.isArray(r.writeSet)?w(r.writeSet):[],s=Ne(r.childExecutionAuthority,{storyId:e.storyId,invocationPrompt:e.commandRef,authorizedWriteSet:o});return{...e,...typeof r.dispatchId=="string"?{dispatchId:r.dispatchId}:{},...typeof r.idempotencyKey=="string"?{idempotencyKey:r.idempotencyKey}:{},graphRevision:t,executionBranch:a,...o.length>0?{writeSet:o}:{},...s?{rootAuthority:s}:{}}}function Bt(e){const r=[];return e.nextStoryId!==void 0&&ae(e.nextStoryId,"nextStoryId",r),e.yoloopExecutionPlan!==void 0&&ae(e.yoloopExecutionPlan,"yoloopExecutionPlan",r),Array.isArray(e.skillDirectives)&&e.skillDirectives.forEach((t,a)=>{_(t)&&t.kind==="task"&&ae(t,`skillDirectives.${a}`,r)}),r.length>0?R(p.YOLOOP_METADATA_INVALID,"Headless yoloop rejected unsafe public metadata before child delegation.",r):{ok:!0}}function Ht(e,r){if(!Array.isArray(e))return{ok:!0};const t=new Set(r.map(a=>a.commandRef));for(const[a,o]of e.entries()){if(!_(o)||o.kind!=="task")continue;const s=typeof o.promptTemplate=="string"?o.promptTemplate:void 0,n=w(o.promptTemplates);if(s==="[REDACTED]"&&o.subagentType==="neocortex"&&typeof o.reasonCode=="string"&&o.reasonCode.startsWith("directive-prompt-")&&n.length===0)continue;const d=[...s?[s]:[],...n];if(o.subagentType!=="neocortex"||d.length===0||d.some(l=>!t.has(l)))return R(p.YOLOOP_ISOLATION_VIOLATION,"Headless yoloop rejected a task directive that conflicted with the server-authorized execution plan.",[h(`skillDirectives.${a}`,"prompt_body","operation-denied")])}return{ok:!0}}function ae(e,r,t){if(typeof e=="string"){if(/\.allowedDebt\.constraints\.\d+$/.test(r)&&bt.has(e))return;(D.test(e)||/\0/.test(e))&&t.push(h(r,Q(r),"value-denied"));return}if(!(e==null||typeof e=="number"||typeof e=="boolean")){if(Array.isArray(e)){e.forEach((a,o)=>ae(a,`${r}.${o}`,t));return}if(_(e)){for(const[a,o]of Object.entries(e)){const s=`${r}.${a}`;!(a==="promptTemplate"||a==="promptTemplates"||a==="invocationPrompt"||a==="childPromptKind"||a==="allowMetaTaskPromptInChild"||a==="authorization")&&oe.test(a)&&t.push(h(s,Q(a),"key-denied")),ae(o,s,t)}return}t.push(h(r,"unsafe_key","value-denied"))}}function jt(e){const r=typeof e.mode=="string"?e.mode:"",t=_(e.isolationPolicy)?e.isolationPolicy:void 0,a=w(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(r!=="serial"&&r!=="parallel_wave"&&r!=="continuous_dag"&&r!=="manual")return R(p.YOLOOP_METADATA_INVALID,"Headless yoloop execution plan mode was invalid.",[]);const o=e.version===3&&r==="continuous_dag";if(!Array.isArray(e.storyIds)||!o&&a.length===0||a.length!==e.storyIds.length||a.some(i=>!G(i))||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"&&!o||Object.prototype.hasOwnProperty.call(t,"childExecutionBoundary")&&!o||t.childPromptKind!=="per_story_yolo_only"&&t.childPromptKind!=="per_story_branchless_preparation_only"&&!(t.childPromptKind==="none"&&(r==="serial"&&t.childTaskDelegation==="not_required"||r==="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.",[h("isolationPolicy","prompt_body","value-denied")]);const s=Array.isArray(e.skippedStories)?e.skippedStories:[];for(const i of s){if(!_(i)||typeof i.storyId!="string"||!G(i.storyId)||typeof i.reason!="string")return R(p.YOLOOP_METADATA_INVALID,"Headless yoloop skipped-story evidence was malformed.",[]);if(a.includes(i.storyId))return R(p.YOLOOP_METADATA_INVALID,"Headless yoloop selected a story that server evidence marked skipped.",[])}if(o){const i=_(e.scheduler)?e.scheduler:void 0,E=Array.isArray(i?.nodes)?i.nodes.filter(_):[],j=w(i?.readyStoryIds),K=w(i?.runningStoryIds),z=w(e.promptTemplates),se=_(e.dependencyBasis)?e.dependencyBasis:void 0,X=_(e.readinessBasis)?e.readinessBasis:void 0,P=typeof i?.graphRevision=="string"?i.graphRevision:"",b=typeof e.executionBranch=="string"?e.executionBranch:"",M=E.map(C=>typeof C.storyId=="string"?C.storyId:""),S=E.find(C=>{const $=typeof C.storyId=="string"?C.storyId:"",ee=typeof C.promptTemplate=="string"?C.promptTemplate:"",ie=Array.isArray(C.writeSet)?w(C.writeSet):[];return!G($)||ee!==`*yolo @docs/stories/${$}.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)||w(C.dependencies).length!==C.dependencies.length||!Array.isArray(C.writeSet)||ie.length===0||ie.length!==C.writeSet.length||!Ne(C.childExecutionAuthority,{storyId:$,invocationPrompt:ee,authorizedWriteSet:ie})});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"||!i||i.schemaVersion!==1||i.strategy!=="continuous-event-driven-dag"||i.logicalConcurrency!=="ready-set"||i.capacityPolicy!=="backpressure-only"||i.rootOwnsLoop!==!0||i.maxDepth!==1||!/^[a-f0-9]{64}$/.test(P)||!Qt(b)||new Set(M).size!==M.length||M.some(C=>!G(C))||j.some(C=>!M.includes(C))||K.some(C=>!M.includes(C)||j.includes(C))||!Z(a,j)||z.length!==a.length||z.some((C,$)=>C!==`*yolo @docs/stories/${a[$]}.story.md branchless-preparation`)||!se||se.source!=="state_snapshot"||!X||X.source!=="ready_wave"||!Z(w(X.selectedStoryIds),a)||S?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 i=at(e);return i.ok?{ok:!0,mode:"parallel_wave",serverMaxConcurrency:i.childExecutionConcurrency,parallelAuthorized:!1,continuous:!1}:R(p.YOLOOP_METADATA_INVALID,"Headless yoloop rejected an unsafe phased execution plan.",[])}if(r!=="parallel_wave")return{ok:!0,mode:r,serverMaxConcurrency:1,parallelAuthorized:!1,continuous:!1};const n=e.maxConcurrency,c=e.maxParallel,d=_(e.dependencyBasis)?e.dependencyBasis:void 0,l=_(e.readinessBasis)?e.readinessBasis:void 0,y=Array.isArray(e.parallelWaves)?e.parallelWaves:[],f=y.length===1&&_(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(c)||c!==n||!d||d.source!=="state_snapshot"||!Z(w(d.storyIds),a)||!l||l.source!=="ready_wave"||!Z(w(l.selectedStoryIds),a)||!f||!Z(w(f.storyIds),a)||f.maxConcurrency!==n)return R(p.YOLOOP_METADATA_INVALID,"Headless yoloop parallel plan lacked consistent bounded authorization and readiness evidence.",[]);const u=w(f.promptTemplates);if(u.length!==a.length||new Set(u).size!==u.length)return R(p.YOLOOP_METADATA_INVALID,"Headless yoloop parallel wave prompts were incomplete or ambiguous.",[]);const k=(Array.isArray(f.proofSummaries)?f.proofSummaries:Array.isArray(e.proofSummaries)?e.proofSummaries:[]).find(i=>_(i)&&Z(w(i.storyIds),a));return!_(k)||k.dependencyClosure!=="resolved"||k.contractOwnership!=="non_overlapping"||k.validationSurfaces!=="compatible"?R(p.YOLOOP_METADATA_INVALID,"Headless yoloop parallel plan lacked resolved independence proof.",[]):s.find(i=>_(i)&&typeof i.reason=="string"&&/(cycle|unresolved|ambiguous)/i.test(i.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 Ne(e,r){if(!_(e)||!_(e.artifact))return;const t=e.artifact,a=Array.isArray(e.authorizedWriteSet)?w(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!==r.storyId||e.invocationPrompt!==r.invocationPrompt||!Array.isArray(e.authorizedWriteSet)||a.length!==e.authorizedWriteSet.length||a.some(s=>pt(s)!==s)||!Kt(a,r.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 o=je("sha256").update(["branchless-root-bound-artifact-v1",r.storyId,r.invocationPrompt,...a,"filesystem_only","root_only",t.path,t.content].join("\0")).digest("hex");if(t.contentBinding===o)return e}function Kt(e,r){return e.length===r.length&&e.every((t,a)=>t===r[a])}function Ut(e){const r=[];r.push(...w(e.promptTemplates));for(const t of Array.isArray(e.serialSteps)?e.serialSteps:[])_(t)&&typeof t.promptTemplate=="string"&&r.push(t.promptTemplate);for(const t of Array.isArray(e.parallelWaves)?e.parallelWaves:[])_(t)&&r.push(...w(t.promptTemplates));return r}function J(e,r,t){if(Te(e))return R(p.YOLOOP_ISOLATION_VIOLATION,"Headless yoloop rejected an unsafe child prompt shape.",[h("promptTemplate","prompt_body",x(e))]);if(!ye.test(e))return R(p.YOLOOP_METADATA_INVALID,"Headless yoloop child prompt did not match the canonical per-story yolo shape.",[h("promptTemplate","prompt_body",x(e))]);const a=_t.test(e),o=e.replace(/^\*yolo @/,"").replace(/ branchless-preparation$/,""),s=tr(o);return!ht.test(o)||!G(s)||!s.startsWith(`${r}.`)?R(p.YOLOOP_ISOLATION_VIOLATION,"Headless yoloop rejected a child prompt outside the targeted public epic.",[h("storyId","prompt_body",x(s))]):{ok:!0,prompt:{storyId:s,targetRef:o,commandRef:e,source:t,...a?{preparationOnly:!0}:{}}}}function zt(e){const r=e?.epicTerminalGitDirective;if(!(!_(r)||r.schemaVersion!==1||r.kind!=="epic_terminal_git"||typeof r.epicId!="string"||typeof r.executionBranch!="string"||typeof r.originBranch!="string"||typeof r.expectedExecutionHeadSha!="string"||!Array.isArray(r.storyCheckpointIds)||!_(r.localGates)||r.localGates.passed!==!0||!Array.isArray(r.localGates.receiptRefs)||!_(r.reconcile)||typeof r.idempotencyKey!="string"||r.publicSafe!==!0))return r}function $t(e){const r=e?.epicGitReconciliationDirective;if(!(!_(r)||r.schemaVersion!==1||r.kind!=="epic_git_reconciliation"||typeof r.epicId!="string"||typeof r.executionBranch!="string"||typeof r.originBranch!="string"||!["start","resume","audit"].includes(String(r.lifecycleBoundary))||typeof r.dryRun!="boolean"||typeof r.idempotencyKey!="string"||r.publicSafe!==!0))return r}function Yt(e){if(!e||!_(e))return{ok:!1,reasonCode:p.YOLOOP_METADATA_INVALID,publicSummary:"Headless yoloop root invocation did not return public metadata.",redactionSummary:[]};const r=_(e.yoloopContinuationDecision)?e.yoloopContinuationDecision:void 0,t=typeof r?.outcome=="string"?r.outcome:void 0,a=t==="queue_exhausted"||e.yoloopComplete===!0,o=e.yoloopAborted===!0,s=mt(e.releaseBlocked),n=t==="selected"&&r?.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"&&r?.terminalSuccess!==!0?{ok:!1,reasonCode:p.YOLOOP_METADATA_INVALID,publicSummary:"Headless yoloop rejected inconsistent queue exhaustion metadata.",redactionSummary:[]}:a&&o?{ok:!1,reasonCode:p.YOLOOP_METADATA_INVALID,publicSummary:"Headless yoloop metadata reported mutually exclusive terminal states.",redactionSummary:[h("yoloopTerminal","unsafe_key","value-denied")]}:(e.yoloopReleaseBlocked===!0||e.terminalClass==="release-blocked"||e.releaseBlocked!==void 0)&&(!s||e.yoloopReleaseBlocked!==!0||e.terminalClass!=="release-blocked"||a||o||t!==void 0)?{ok:!1,reasonCode:p.YOLOOP_METADATA_INVALID,publicSummary:"Headless yoloop rejected inconsistent release-blocked terminal metadata.",redactionSummary:[]}:{ok:!0,complete:a,aborted:o,...s?{releaseBlocked:s}:{},outcome:t,replay:n}}function Ft(e){if(!e)return;const r=e.abortReason;if(r!=="YOLOOP_PER_RUN_CAP_REACHED"&&r!=="YOLOOP_SESSION_TIMEOUT")return;const t=e.yoloopResumableBoundary,a=/^[A-Za-z0-9._:-]{1,128}$/;if(!(!_(t)||t.schemaVersion!=="YoloopResumableBoundary/1.0"||t.resumable!==!0||t.reason!==r||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)||!_(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,reason:r}}function Vt(e){const r=`${e.rootAttempt.execution_id}:${e.child.graphRevision??"legacy"}:${e.child.storyId}`,t=e.child.dispatchId??q("child-op",`${r}:${e.iteration}`),a=e.child.idempotencyKey??q("child-idem",`${r}:${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:[h("prompt","prompt_body",x(e.child.commandRef))],publicSafe:!0}}function _e(e,r,t){const a=Be(t.hashes),o=t.workerPoolSummary??he(),s=Be({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:o.serverMaxConcurrency,localCap:o.localCap,queueCap:o.queueCap,availableLeases:o.availableLeases,effectiveConcurrency:o.effectiveConcurrency,peakConcurrency:o.peakConcurrency,pendingChildCount:o.pendingChildCount,startedChildCount:o.startedChildCount,completedChildCount:o.completedChildCount,backpressurePauseCount:o.backpressurePauseCount}),n={schemaVersion:1,contractVersion:"continuity-v1",attemptId:r.attempt_id,executionId:r.execution_id,jobId:r.job_id,directiveHash:r.directive_hash,status:t.status,reasonCode:t.reasonCode,storyIds:t.childStoryIds.slice(0,50),counts:s,hashes:a,...t.reasonCode===Oe.BYPASS_BLOCKED?{governanceEvidence:Fe}:{},reasonCodes:V([t.reasonCode,...o.reasonCodes,...t.stateTransitions]),publicSummary:pe(t.publicSummary),...t.terminalClass?{terminalClass:t.terminalClass}:{},...t.releaseBlocked?{releaseBlocked:t.releaseBlocked}:{}},c=Re(r.metadata_json,{autonomousKind:"run_yoloop",jobId:r.job_id,targetKind:"epic",targetRef:r.target_ref}),d=c.ok?Ee(c.envelope,n):n;return e.completeHeadlessExecutionAttempt({attemptId:r.attempt_id,executionId:r.execution_id,jobId:r.job_id,leaseId:t.leaseId,runnerId:t.runnerId,status:t.status,completedAt:t.completedAt,durationMs:t.durationMs,reasonCode:t.reasonCode,publicSummary:pe(t.publicSummary),notBeforeAt:t.notBeforeAt,retryCount:t.retryCount,counts:s,hashes:a,redactionSummary:t.redactionSummary,relativePaths:V([r.target_ref,...t.relativePaths]),metadata:d}),e.recordHeadlessExecutionReceipt({receiptId:`receipt-${q("headless-yoloop",`${r.attempt_id}-${t.status}`)}`,attemptId:r.attempt_id,executionId:r.execution_id,jobId:r.job_id,status:t.receiptStatus,reasonCode:t.reasonCode,createdAt:t.completedAt,operationId:`${r.execution_id}:${t.status}:receipt`,idempotencyKey:`${r.directive_hash}:${t.status}:receipt`,counts:s,hashes:a,redactionSummary:t.redactionSummary,relativePaths:V([r.target_ref,...t.relativePaths]),metadata:d}),e.recordHeadlessExecutionSummary({eventId:`event-${q("headless-yoloop-summary",`${r.attempt_id}-${t.status}`)}`,attemptId:r.attempt_id,executionId:r.execution_id,jobId:r.job_id,status:t.status,runtimeId:t.runtimeId,modelId:t.modelId,publicSummary:pe(t.publicSummary),reasonCode:t.reasonCode,createdAt:t.completedAt,durationMs:t.durationMs,counts:s,hashes:a,redactionSummary:t.redactionSummary,relativePaths:V([r.target_ref,...t.relativePaths]),metadata:d}),{attemptId:r.attempt_id,executionId:r.execution_id,jobId:r.job_id,status:t.status,outcome:t.receiptStatus,reasonCode:t.reasonCode,timestamp:t.completedAt,childStoryIds:t.childStoryIds,aggregateCounts:t.counts,workerPoolSummary:o,redactionSummary:t.redactionSummary,...t.terminalClass?{terminalClass:t.terminalClass}:{},...t.releaseBlocked?{releaseBlocked:t.releaseBlocked}:{},publicSafe:!0}}function qt(e,r){return{attemptId:e.attempt_id,executionId:e.execution_id,jobId:e.job_id,status:r.status,outcome:r.receiptStatus,reasonCode:r.reasonCode,timestamp:r.timestamp,childStoryIds:[],aggregateCounts:Ie(),workerPoolSummary:he(),redactionSummary:[],publicSafe:!0}}function Wt(e,r,t,a,o){if(!r.retryable)return{retry:!1};if(we.has(r.reasonCode))return{retry:!0,retryCount:e.retry_count,notBeforeAt:He(Se(o,a),r.retryNotBeforeAt)};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:He(Se(o,a*n),r.retryNotBeforeAt)}}function O(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??he(),hashes:e.hashes,redactionSummary:e.redactions.slice(0,50),relativePaths:V(e.relativePaths).slice(0,50),childStoryIds:V(e.childStoryIds).slice(0,50),stateTransitions:V(e.stateTransitions),...e.terminalClass?{terminalClass:e.terminalClass}:{},...e.releaseBlocked?{releaseBlocked:e.releaseBlocked}:{}}}function Gt(e,r){if(e===void 0)return;if(!_(e)){r.push(h("runtime","unsafe_key","value-denied"));return}for(const s of Object.keys(e))(!gt.has(s)||oe.test(s))&&r.push(h(`runtime.${s}`,Q(s),"key-denied"));e.publicSafe!==!0&&r.push(h("runtime.publicSafe","unsafe_key","value-denied"));const t=B(e,"runtimeId"),a=B(e,"modelId"),o=B(e,"source");if(t&&(!/^[A-Za-z0-9][A-Za-z0-9._:-]{0,79}$/.test(t)||D.test(t)||W.test(t))&&r.push(h("runtime.runtimeId","unsafe_key","value-denied")),a&&(!/^[A-Za-z0-9][A-Za-z0-9._:+/-]{0,119}$/.test(a)||D.test(a)||W.test(a))&&r.push(h("runtime.modelId","unsafe_key","value-denied")),o!==void 0&&o!=="explicit"&&o!=="origin"&&o!=="default"&&o!=="fallback"&&o!=="unspecified"&&r.push(h("runtime.source","unsafe_key","value-denied")),e.reasonCode!==void 0&&(typeof e.reasonCode!="string"||D.test(e.reasonCode))&&r.push(h("runtime.reasonCode","unsafe_key","value-denied")),e.publicSafe===!0)return{...t?{runtimeId:t}:{},...a?{modelId:a}:{},...o==="explicit"||o==="origin"||o==="default"||o==="fallback"||o==="unspecified"?{source:o}:{},...typeof e.reasonCode=="string"?{reasonCode:e.reasonCode}:{},publicSafe:!0}}function Xt(e){const r=Array.isArray(e)?e:e?[e]:[],t=[];for(const a of r){const o=a.continuityExecutionDirectives;Array.isArray(o)&&t.push(...o)}return t}function Zt(e){return x(Ce({kind:e.kind,commandClass:e.commandClass,jobId:e.jobId,targetRef:e.targetRef,commandRef:e.commandRef,epicId:e.epicId,runtime:e.runtime}))}function Ce(e){return Array.isArray(e)?`[${e.map(Ce).join(",")}]`:_(e)?`{${Object.keys(e).sort().map(r=>`${JSON.stringify(r)}:${Ce(e[r])}`).join(",")}}`:JSON.stringify(e)}function le(e,r,t){if(typeof e=="string"){(D.test(e)||W.test(e))&&t.push(h(r,Q(r),"value-denied"));return}if(!(e==null||typeof e=="number"||typeof e=="boolean")){if(Array.isArray(e)){e.forEach((a,o)=>le(a,`${r}.${o}`,t));return}if(_(e)){for(const[a,o]of Object.entries(e)){const s=`${r}.${a}`;oe.test(a)&&t.push(h(s,Q(a),"key-denied")),le(o,s,t)}return}t.push(h(r,"unsafe_key","value-denied"))}}function Jt(e,r){if(e===void 0)return[];if(!Array.isArray(e))return r.push(h("redactionSummary","unsafe_key","value-denied")),[];const t=[];for(const[a,o]of e.entries()){if(!_(o)||o.publicSafe!==!0){r.push(h(`redactionSummary.${a}`,"unsafe_key","value-denied"));continue}const s=B(o,"field"),n=B(o,"reason"),c=B(o,"evidence");if(!s||!n||!c||D.test(s)||D.test(n)||D.test(c)){r.push(h(`redactionSummary.${a}`,"unsafe_key","value-denied"));continue}t.push({field:s,reason:n,evidence:c,publicSafe:!0})}return t}function R(e,r,t){return{ok:!1,reasonCode:e,publicSummary:r,redactionSummary:t}}function w(e){return Array.isArray(e)?e.filter(r=>typeof r=="string"):[]}function Qt(e){return e.length>0&&e.length<=240&&!e.startsWith("-")&&!e.includes("..")&&!e.includes("\\")&&/^[A-Za-z0-9._/-]+$/.test(e)}function Z(e,r){return e.length===r.length&&new Set(e).size===e.length&&e.every(t=>r.includes(t))}function er(e){return fe.test(e.target_ref)?[e.target_ref]:[]}function Be(e){if(!e)return;const r={};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)||(r[t]=a);return Object.keys(r).length>0?r:void 0}function Ie(){return A(0,0,0,0,0,0,0)}function A(e,r,t,a,o,s,n){return{iterations:e,childCount:r,succeededChildCount:t,failedChildCount:a,skippedChildCount:o,metadataCompleteCount:s,metadataAbortedCount:n}}function tr(e){return e.replace(/^docs\/stories\//,"").replace(/\.story\.md$/,"")}function ne(e){return e.replace(/^docs\/epics\/epic-/,"").replace(/\.md$/,"")}function G(e){return/^[A-Za-z0-9][A-Za-z0-9_-]*\.\d+[A-Za-z0-9_-]*$/.test(e)&&!D.test(e)&&!W.test(e)}function rr(e){if(e==="explicit"||e==="origin"||e==="default"||e==="fallback")return e}function or(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 B(e,r){return typeof e[r]=="string"?e[r]:void 0}function be(e){return!!(e&&It.test(e)&&!D.test(e)&&!W.test(e))}function _(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function ar(e,r){return q(e,`${r}-${Date.now()}-${Ke(4).toString("hex")}`)}function Se(e,r){const t=Date.parse(e);return new Date((Number.isFinite(t)?t:Date.now())+r).toISOString()}function He(e,r){const t=Date.parse(e),a=r?Date.parse(r):Number.NaN;return Number.isFinite(a)?Number.isFinite(t)?a>t?r:e:r:e}function F(e,r,t){return Number.isFinite(e)?Math.max(r,Math.min(t,Math.floor(e))):r}function V(e){return Array.from(new Set(e))}function nr(e,r){const t=new Set,a=[];for(const o of e){const s=r(o);t.has(s)||(t.add(s),a.push(o))}return a}export{me as DEFAULT_HEADLESS_YOLOOP_LOCAL_CONCURRENCY_CAP,yt as DEFAULT_HEADLESS_YOLOOP_MAX_DURATION_MS,ft as DEFAULT_HEADLESS_YOLOOP_MAX_ITERATIONS,ve as MAX_HEADLESS_YOLOOP_LOCAL_CONCURRENCY_CAP,Ar as RUN_YOLOOP_DRIVER_STATES,vt as defaultYoloopRootInvoker,kr as isCanonicalDelegatedStoryPrompt,Pe as resolveDefaultHeadlessYoloopLocalConcurrencyCap,Or as runYoloopExecutionPhase};
|
|
File without changes
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { YOLO_INVOKE_ENVELOPE_CAPABILITY } from '../../../shared/dist/yolo/spec-envelope.js';
|
|
2
|
+
export type YoloInvokeEnvelopeCapabilityReason = 'supported' | 'fetch-unavailable' | 'request-failed' | 'http-rejected' | 'response-too-large' | 'response-invalid' | 'capability-missing';
|
|
3
|
+
export interface YoloInvokeEnvelopeCapabilityProbe {
|
|
4
|
+
readonly supported: boolean;
|
|
5
|
+
readonly capability: typeof YOLO_INVOKE_ENVELOPE_CAPABILITY;
|
|
6
|
+
readonly reason: YoloInvokeEnvelopeCapabilityReason;
|
|
7
|
+
readonly serverVersion?: string;
|
|
8
|
+
readonly publicSafe: true;
|
|
9
|
+
}
|
|
10
|
+
type FetchLike = (input: string, init?: RequestInit) => Promise<Pick<Response, 'ok' | 'text'>>;
|
|
11
|
+
/**
|
|
12
|
+
* Non-mutating, fail-closed compatibility probe for targeted YOLO requests.
|
|
13
|
+
* Older strict servers must be rejected before local release-gate execution.
|
|
14
|
+
*/
|
|
15
|
+
export declare function probeYoloInvokeEnvelopeCapability(serverUrl: string, fetcher?: FetchLike | undefined): Promise<YoloInvokeEnvelopeCapabilityProbe>;
|
|
16
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{YOLO_INVOKE_ENVELOPE_CAPABILITY as u}from"../../../shared/dist/yolo/spec-envelope.js";const y=16*1024,b=/^[0-9]{1,6}\.[0-9]{1,6}\.[0-9]{1,6}(?:-[A-Za-z0-9.-]{1,40})?$/;function e(n,a,t){return Object.freeze({supported:n,capability:u,reason:a,...t&&b.test(t)?{serverVersion:t}:{},publicSafe:!0})}async function h(n,a=globalThis.fetch){if(!a)return e(!1,"fetch-unavailable");const t=new AbortController,l=setTimeout(()=>t.abort(),5e3);l.unref?.();try{const c=await a(`${n.replace(/\/+$/,"")}/api/v1/health`,{method:"GET",headers:{accept:"application/json"},signal:t.signal});if(!c.ok)return e(!1,"http-rejected");const f=await c.text();if(Buffer.byteLength(f,"utf8")>y)return e(!1,"response-too-large");let r;try{r=JSON.parse(f)}catch{return e(!1,"response-invalid")}if(!r||typeof r!="object"||Array.isArray(r))return e(!1,"response-invalid");const i=r,s=i.capabilities,o=typeof i.version=="string"?i.version:void 0;return!Array.isArray(s)||s.some(p=>typeof p!="string"||p.length>80)?e(!1,"response-invalid",o):s.includes(u)?e(!0,"supported",o):e(!1,"capability-missing",o)}catch{return e(!1,"request-failed")}finally{clearTimeout(l)}}export{h as probeYoloInvokeEnvelopeCapability};
|
|
@@ -10,4 +10,11 @@ export interface CollectYoloSpecEnvelopeOptions {
|
|
|
10
10
|
/** Public-safe count only; omitted supporting refs never silently imply coverage. */
|
|
11
11
|
readonly onOmittedReferences?: (count: number) => void;
|
|
12
12
|
}
|
|
13
|
+
/** Resolve only an explicit story target. Inline YOLO text intentionally has no match. */
|
|
14
|
+
export declare function extractTargetedYoloStoryId(args: string): string | null;
|
|
13
15
|
export declare function collectYoloSpecEnvelope(options: CollectYoloSpecEnvelopeOptions): YoloSpecEnvelopeV1;
|
|
16
|
+
/**
|
|
17
|
+
* Reissue a precollected physical snapshot with a fresh bounded transport time.
|
|
18
|
+
* The caller still performs the final disk/HEAD collection and digest comparison.
|
|
19
|
+
*/
|
|
20
|
+
export declare function refreshPrecollectedYoloSpecEnvelope(envelope: YoloSpecEnvelopeV1, collectedAt?: string): YoloSpecEnvelopeV1;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import{execFileSync as L}from"node:child_process";import{existsSync as S,readFileSync as
|
|
2
|
-
${Object.entries(o.metadata).map(([
|
|
1
|
+
import{execFileSync as L}from"node:child_process";import{existsSync as S,readFileSync as $,realpathSync as w,statSync as R}from"node:fs";import{join as f,sep as b}from"node:path";import{createYoloSpecEnvelopeV1 as E,YOLO_SPEC_ARTIFACT_LIMIT_BYTES as O,YOLO_SPEC_MAX_ARTIFACTS as g,YOLO_SPEC_TOTAL_LIMIT_BYTES as I}from"../../../shared/dist/yolo/spec-envelope.js";import{inspectFrontmatterContext as v}from"../../../shared/dist/frontmatter-context-contract.js";const C=["core/templates/specs/feature-spec-template.md","core/templates/specs/architecture-spec-template.md","core/templates/specs/contract-spec-template.md","core/templates/specs/story-spec-template.md","core/templates/specs/traceability-matrix-template.md"],P=/(?:^|[\s([`'";])((?:docs\/(?:stories|epics|specs|architecture|examples)\/|core\/templates\/specs\/)[A-Za-z0-9_./-]+\.(?:md|mdx|feature))(?:$|[\s)\]`'",;])/gm,W=/^[A-Za-z][A-Za-z0-9_-]*(?:\.[A-Za-z0-9_-]+)+$/;function Z(e){const r=[...e.matchAll(/(?:^|\s)@?docs\/stories\/([A-Za-z][A-Za-z0-9_-]*(?:\.[A-Za-z0-9_-]+)+)\.story\.md(?=\s|$)/g)].map(c=>c[1]),s=e.trim().split(/\s+/).slice(1).map(c=>c.replace(/^@/,"")).filter(c=>W.test(c)),o=[...new Set([...r,...s])];return o.length===1?o[0]:null}function A(e){return e.startsWith("core/templates/")?"template":e.startsWith("docs/epics/")?"epic":e.startsWith("docs/stories/")&&e.endsWith(".story.md")?"story":e.endsWith(".rtm.md")?"traceability":e.toLowerCase().includes("adr")?"adr":e.toLowerCase().includes("contract")?"contract":e.toLowerCase().includes("nfr")?"nfr":e.endsWith(".feature")?"bdd":e.toLowerCase().includes("traceability")?"traceability":e.startsWith("docs/examples/")?"example":"spec"}function z(e){return[...new Set([...e.matchAll(P)].map(r=>r[1]).filter(r=>!!r))].sort()}function a(e,r){const s=w(e);let o;try{o=w(f(s,r))}catch{throw new Error("yolo-spec-envelope-required")}if(!o.startsWith(`${s}${b}`))throw new Error("yolo-spec-envelope-path-out-of-scope");if(!R(o).isFile())throw new Error("yolo-spec-envelope-unsafe");if(R(o).size>O)throw new Error("yolo-spec-envelope-too-large");return $(o,"utf8")}function m(e,r){const o=v(e,{context:r==="story"?"story-target":"epic-target",explicitlySelected:!0});if(o.status==="malformed"||o.status==="oversized")throw new Error("yolo-spec-envelope-unsafe");if(o.status==="absent")return e;const c=e.match(/^---\r?\n[\s\S]*?\r?\n---\r?\n/);if(!c)throw new Error("yolo-spec-envelope-unsafe");return`---
|
|
2
|
+
${Object.entries(o.metadata).map(([n,l])=>`${n}: ${JSON.stringify(l)}`).join(`
|
|
3
3
|
`)}
|
|
4
4
|
---
|
|
5
|
-
${e.slice(
|
|
5
|
+
${e.slice(c[0].length)}`}function _(e){try{return L("git",["-C",e,"rev-parse","HEAD"],{encoding:"utf8",timeout:2e3,stdio:["ignore","pipe","ignore"]}).trim()}catch{throw new Error("yolo-spec-envelope-stale")}}function H(e){const r=`docs/stories/${e.storyId}.story.md`,s=`docs/epics/epic-${e.epicId}.md`,o=e.headSha??_(e.projectRoot),c=m(a(e.projectRoot,r),"story"),u=m(a(e.projectRoot,s),"epic"),n=[{kind:"story",path:r,content:c},{kind:"epic",path:s,content:u}],l=new Set([`docs/stories/${e.storyId}.spec.md`,`docs/stories/${e.storyId}.tasks.md`,`docs/stories/${e.storyId}.rtm.md`]),h=[...new Set([...z(c),...[...l].filter(t=>S(f(e.projectRoot,t)))])].sort(),T=[...h.filter(t=>l.has(t)),...h.filter(t=>!l.has(t))];let p=n.reduce((t,i)=>t+Buffer.byteLength(i.content,"utf8"),0),y=0;for(const t of T){if(t===r||t===s||!S(f(e.projectRoot,t)))continue;if(t.startsWith("docs/stories/")&&t.endsWith(".story.md")||t.startsWith("docs/epics/"))throw new Error("yolo-spec-envelope-target-mismatch");const i=a(e.projectRoot,t),d=Buffer.byteLength(i,"utf8");if(n.length>=g||p+d>I){if(l.has(t))throw new Error("yolo-spec-envelope-too-large");y+=1;continue}n.push({kind:A(t),path:t,content:i}),p+=d}y&&e.onOmittedReferences?.(y);for(const t of C){if(t===r||t===s||h.includes(t)||!S(f(e.projectRoot,t)))continue;const i=a(e.projectRoot,t),d=Buffer.byteLength(i,"utf8");n.length>=g||p+d>I||(n.push({kind:A(t),path:t,content:i}),p+=d)}const j=E({storyId:e.storyId,epicId:e.epicId,targetPath:r,inputSha256:e.inputSha256,headSha:o,collectedAt:e.collectedAt??new Date().toISOString(),artifacts:n}),x=e.headSha??_(e.projectRoot);if(o!==x||m(a(e.projectRoot,r),"story")!==c||m(a(e.projectRoot,s),"epic")!==u||n.some(t=>t.kind!=="story"&&t.kind!=="epic"&&a(e.projectRoot,t.path)!==t.content))throw new Error("yolo-spec-envelope-stale");return j}function D(e,r=new Date().toISOString()){return E({storyId:e.storyId,epicId:e.epicId,targetPath:e.targetPath,inputSha256:e.inputSha256,headSha:e.sourceRevision.headSha,collectedAt:r,artifacts:e.artifacts.map(({kind:s,path:o,content:c})=>({kind:s,path:o,content:c}))})}export{H as collectYoloSpecEnvelope,Z as extractTargetedYoloStoryId,D as refreshPrecollectedYoloSpecEnvelope};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/** Public syntax only. Authenticity is checked exclusively by the server. */
|
|
2
|
+
const NON_UI_EXCLUDED_STAGE_COMMANDS = Object.freeze([
|
|
3
|
+
'arch-design-system',
|
|
4
|
+
'arch-ux-design',
|
|
5
|
+
]);
|
|
6
|
+
export function parseArchitectureNonUiScopeReceipt(value) {
|
|
7
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
8
|
+
return undefined;
|
|
9
|
+
const v = value;
|
|
10
|
+
if (Object.keys(v).sort().join(',') !== ['schemaVersion', 'kind', 'licenseHash', 'projectHash', 'targetEpicId',
|
|
11
|
+
'graphRevision', 'rootInputSha256', 'accountingId', 'applicability', 'excludedStageCommands', 'macSha256', 'publicSafe'].sort().join(',')
|
|
12
|
+
|| v.schemaVersion !== 1 || v.kind !== 'ArchitectureNonUiScope/1' || v.publicSafe !== true
|
|
13
|
+
|| v.applicability !== 'non-ui' || typeof v.targetEpicId !== 'string' || !/^P[1-9][0-9]{0,11}$/.test(v.targetEpicId)
|
|
14
|
+
|| typeof v.accountingId !== 'string' || !/^arch-accounting-[a-f0-9]{32}$/.test(v.accountingId)
|
|
15
|
+
|| !['licenseHash', 'projectHash', 'graphRevision', 'rootInputSha256', 'macSha256'].every(k => typeof v[k] === 'string' && /^[a-f0-9]{64}$/.test(v[k])))
|
|
16
|
+
return undefined;
|
|
17
|
+
const excluded = NON_UI_EXCLUDED_STAGE_COMMANDS;
|
|
18
|
+
if (!Array.isArray(v.excludedStageCommands) || v.excludedStageCommands.length !== excluded.length
|
|
19
|
+
|| !v.excludedStageCommands.every((s, i) => s === excluded[i]))
|
|
20
|
+
return undefined;
|
|
21
|
+
return Object.freeze({ ...v, excludedStageCommands: Object.freeze([...excluded]) });
|
|
22
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Public command order only; no step IDs, resolutions, prompts or execution grants. */
|
|
2
|
+
export const ARCHITECTURE_PUBLIC_STAGE_COMMANDS = Object.freeze([
|
|
3
|
+
'arch-prd', 'arch-architecture', 'arch-fitness-functions', 'arch-api-contracts',
|
|
4
|
+
'generate-pacts', 'arch-api-integrations', 'arch-database', 'arch-security',
|
|
5
|
+
'arch-design-system', 'arch-ux-design', 'arch-performance', 'arch-testing',
|
|
6
|
+
'arch-infrastructure', 'arch-review', 'update-memory',
|
|
7
|
+
]);
|
|
8
|
+
export const ARCHITECTURE_NON_UI_EXCLUDED_COMMANDS = Object.freeze([
|
|
9
|
+
'arch-design-system', 'arch-ux-design',
|
|
10
|
+
]);
|
|
11
|
+
export const ARCHITECTURE_NON_UI_STAGE_COMMANDS = Object.freeze(ARCHITECTURE_PUBLIC_STAGE_COMMANDS.filter(command => !ARCHITECTURE_NON_UI_EXCLUDED_COMMANDS.some(excluded => excluded === command)));
|