@ornexus/neocortex 4.60.25 → 4.60.26

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.
@@ -1 +1 @@
1
- import{CONTINUITY_CLIENT_REASON_CODES as u,ContinuityClientStateStoreError as I,continuitySqliteExists as l,createContinuityHardStopSnapshot as O,openContinuityClientStateStore as c}from"./continuity-client-state-store.js";import{buildAutonomousGovernanceEnvelope as C,parseAutonomousInvokeIntent as y}from"./autonomous-governance.js";import{RUNNER_BOOTSTRAP_POLICY_REASON_CODES as b,classifyRunnerBootstrapPolicy as D,classifyRunnerBootstrapPolicyFromArgs as N,parseRunnerBootstrapCommandIntent as L}from"./runner-bootstrap-policy.js";import{parseRunnerBootstrapCommandIntent as E}from"./runner-bootstrap-policy.js";import{StrictReadOnlyError as S}from"../../../shared/dist/strict-readonly.js";function f(e){return E(e).kind!=="unknown"||y(e)!==null}async function T(e,r,o,i){const t=y(e),s=t!==null||f(e)||l(r);if(s)try{const n=i?await i.executeAsync({phase:"client-preflight",domain:"client-persistence",category:"continuity-store",operation:"create"},async()=>s?{kind:"writable",store:await c({projectRoot:r,now:()=>o??new Date().toISOString()})}:{kind:"skipped"},async()=>{try{return{kind:"readonly",store:await c({projectRoot:r,now:()=>o??new Date().toISOString(),strictReadOnly:!0})}}catch{throw new S("readonly-physical-boundary-unsafe","boundary")}}):{kind:"writable",store:await c({projectRoot:r,now:()=>o??new Date().toISOString()})};if(n.kind==="skipped")return;if(n.kind==="readonly")try{return n.store.collectSnapshot({nowIso:o})}finally{n.store.close()}const a=n.store;try{if(t){const d=o??new Date().toISOString(),p=C(t);return i?i.execute({phase:"client-preflight",domain:"client-persistence",category:"continuity-store",operation:"create"},()=>a.recordAutonomousGovernance(p,d),()=>{}):a.recordAutonomousGovernance(p,d),{...a.collectSnapshot({nowIso:d}),autonomousGovernance:p}}return a.collectSnapshot({nowIso:o})}finally{a.close()}}catch(n){if(n instanceof S)throw n;const a=m(n);return f(e)||l(r)?O(a,o??new Date().toISOString()):void 0}}async function _(e,r){const o=e?.continuityStateUpdate;if(!o)return{ok:!0,appliedOperationIds:[],ignoredOperationIds:[],reasonCodes:[u.OK],publicSafe:!0};let i;try{i=await c({projectRoot:r});const t=i.applyStateUpdate(o);return{ok:!0,appliedOperationIds:t.appliedOperationIds,ignoredOperationIds:t.ignoredOperationIds,reasonCodes:t.reasonCodes,publicSafe:!0}}catch(t){const s=m(t),n=t instanceof Error?t.message:String(t);return{ok:!1,appliedOperationIds:[],ignoredOperationIds:[],reasonCodes:s,error:n,publicSafe:!0}}finally{i?.close()}}function m(e){if(e instanceof I)return e.reasonCodes;const r=e instanceof Error?e.message:String(e);return/sqlite-adapter-unavailable/i.test(r)?[u.SQLITE_ADAPTER_UNAVAILABLE]:/integrity|corrupt|malformed|not a database/i.test(r)?[u.SQLITE_INTEGRITY_FAILED]:[u.SQLITE_MUTATION_FAILED]}export{b as RUNNER_BOOTSTRAP_POLICY_REASON_CODES,D as classifyRunnerBootstrapPolicy,N as classifyRunnerBootstrapPolicyFromArgs,f as isContinuityTrigger,L as parseRunnerBootstrapCommandIntent,_ as persistContinuityFromResponse,T as readContinuityForRequest};
1
+ import{CONTINUITY_CLIENT_REASON_CODES as c,ContinuityClientStateStoreError as O,continuitySqliteExists as S,createContinuityHardStopSnapshot as C,openContinuityClientStateStore as d}from"./continuity-client-state-store.js";import{buildAutonomousGovernanceEnvelope as E,parseAutonomousInvokeIntent as f}from"./autonomous-governance.js";import{RUNNER_BOOTSTRAP_POLICY_REASON_CODES as D,classifyRunnerBootstrapPolicy as N,classifyRunnerBootstrapPolicyFromArgs as L,parseRunnerBootstrapCommandIntent as v}from"./runner-bootstrap-policy.js";import{parseRunnerBootstrapCommandIntent as g}from"./runner-bootstrap-policy.js";import{StrictReadOnlyError as y}from"../../../shared/dist/strict-readonly.js";function m(e){return g(e).kind!=="unknown"||f(e)!==null}async function _(e,t,n,i,r={}){const s=f(e),u=s!==null||m(e)||r.includeExistingStore!==!1&&S(t);if(u)try{const o=i?await i.executeAsync({phase:"client-preflight",domain:"client-persistence",category:"continuity-store",operation:"create"},async()=>u?{kind:"writable",store:await d({projectRoot:t,now:()=>n??new Date().toISOString()})}:{kind:"skipped"},async()=>{try{return{kind:"readonly",store:await d({projectRoot:t,now:()=>n??new Date().toISOString(),strictReadOnly:!0})}}catch{throw new y("readonly-physical-boundary-unsafe","boundary")}}):{kind:"writable",store:await d({projectRoot:t,now:()=>n??new Date().toISOString()})};if(o.kind==="skipped")return;if(o.kind==="readonly")try{return o.store.collectSnapshot({nowIso:n})}finally{o.store.close()}const a=o.store;try{if(s){const l=n??new Date().toISOString(),p=E(s);return i?i.execute({phase:"client-preflight",domain:"client-persistence",category:"continuity-store",operation:"create"},()=>a.recordAutonomousGovernance(p,l),()=>{}):a.recordAutonomousGovernance(p,l),{...a.collectSnapshot({nowIso:l}),autonomousGovernance:p}}return a.collectSnapshot({nowIso:n})}finally{a.close()}}catch(o){if(o instanceof y)throw o;const a=I(o);return m(e)||S(t)?C(a,n??new Date().toISOString()):void 0}}async function h(e,t){const n=e?.continuityStateUpdate;if(!n)return{ok:!0,appliedOperationIds:[],ignoredOperationIds:[],reasonCodes:[c.OK],publicSafe:!0};let i;try{i=await d({projectRoot:t});const r=i.applyStateUpdate(n);return{ok:!0,appliedOperationIds:r.appliedOperationIds,ignoredOperationIds:r.ignoredOperationIds,reasonCodes:r.reasonCodes,publicSafe:!0}}catch(r){const s=I(r),u=r instanceof Error?r.message:String(r);return{ok:!1,appliedOperationIds:[],ignoredOperationIds:[],reasonCodes:s,error:u,publicSafe:!0}}finally{i?.close()}}function I(e){if(e instanceof O)return e.reasonCodes;const t=e instanceof Error?e.message:String(e);return/sqlite-adapter-unavailable/i.test(t)?[c.SQLITE_ADAPTER_UNAVAILABLE]:/integrity|corrupt|malformed|not a database/i.test(t)?[c.SQLITE_INTEGRITY_FAILED]:[c.SQLITE_MUTATION_FAILED]}export{D as RUNNER_BOOTSTRAP_POLICY_REASON_CODES,N as classifyRunnerBootstrapPolicy,L as classifyRunnerBootstrapPolicyFromArgs,m as isContinuityTrigger,v as parseRunnerBootstrapCommandIntent,h as persistContinuityFromResponse,_ as readContinuityForRequest};
@@ -86,6 +86,13 @@ export declare function executeP205TransientAuthority(projectRoot: string, input
86
86
  }): Promise<P205TransientExecutionAuthority>;
87
87
  export declare function readGitLifecycleRuntime(projectRoot: string, options?: GitLifecycleReadOptions): Promise<GitLifecycleRuntimeDocument>;
88
88
  export declare function readGitLifecycleRuntimeSync(projectRoot: string, options?: GitLifecycleReadOptions): GitLifecycleRuntimeDocument;
89
+ /**
90
+ * Materialize the private lifecycle sidecar for repositories that already
91
+ * declare the epic-branch contract in tracked state but predate the sidecar.
92
+ * Missing state is the only recoverable condition: corrupt, substituted or
93
+ * permission-unsafe paths continue to fail closed.
94
+ */
95
+ export declare function ensureGitLifecycleRuntimeInitialized(projectRoot: string): Promise<void>;
89
96
  export declare function mutateGitLifecycleRuntime<T>(projectRoot: string, mutate: (document: GitLifecycleRuntimeDocument) => T, options?: GitLifecycleMutationOptions): Promise<GitLifecycleMutationResult<T>>;
90
97
  /** Merge the runtime overlay over tracked state without mutating either input. */
91
98
  export declare function applyGitLifecycleRuntimeOverlay(tracked: Record<string, unknown>, runtime: GitLifecycleRuntimeDocument): Record<string, unknown>;
@@ -1,4 +1,4 @@
1
- import{execFile as tt,execFileSync as X}from"node:child_process";import{createHash as m,randomBytes as ye}from"node:crypto";import{lstat as be,open as it,readFile as F,realpath as M,stat as rt}from"node:fs/promises";import{existsSync as B,lstatSync as ke,readFileSync as Oe,realpathSync as we}from"node:fs";import{basename as _,dirname as z,isAbsolute as ee,join as p,relative as nt,resolve as h}from"node:path";import{promisify as at}from"node:util";import{publicWriteSet as ct}from"../../../shared/dist/yoloop/public-story-write-set.js";import{anchoredAtomicWriteFile as ot,anchoredCreateOwnedDirectory as Pe,anchoredEnsureDirectory as Ne,anchoredExecuteGit as st,anchoredExecuteNode as $e,anchoredRemoveDirectory as dt,anchoredRenameDirectory as Q}from"./secure-filesystem-boundary.js";import{GIT_LIFECYCLE_COMMIT_PUSH_STEP_ID as ft,GIT_LIFECYCLE_REVIEW_PR_STEP_ID as ut}from"./git-lifecycle-step-ids.js";const k=at(tt),ce="neocortex-yoloop",oe="runtime.json",O="node scripts/test-root.mjs --gate complete",Ve=Object.freeze({"P174.03.029264":"339141be7339a0edf55710cbccb6e6558f514792"}),gt=Object.freeze({"P174.03.811759":Object.freeze({baseSha:"749c8fc732deaf26c81a8e08cc94b83c8cf0f5ba",headSha:"84162456d9cbe5000ffd0ed3eb3d0e88cfeba499",graphRevision:"60b343b4b810e6d5abc3159275012b9ab9ab517f9d780e7550fa5b49be740445",effectiveClaimRevision:"11f54704f5007f6139159419cfd7781f908b1502e117365c6d84011384579ed2",commitBodyDigest:"b4fc759a49765fd8c0b3d0f5d1c333c2a4bf28d324e83eedabb12f9530df3738",changedPathsDigest:"11f54704f5007f6139159419cfd7781f908b1502e117365c6d84011384579ed2",qaDigest:"f1100775e21f5d0d990f77303a2a06d936908f016983e32a63316d81aee6b9fc",reviewDigest:"50400bbcddb6f02408837cf99077de5d3af8c84822ab23a8b5499c338af7103a"}),"P174.03.685003":Object.freeze({baseSha:"84162456d9cbe5000ffd0ed3eb3d0e88cfeba499",headSha:"272a7fee89e4b9324d35701df1c83b671fa96299",graphRevision:"60b343b4b810e6d5abc3159275012b9ab9ab517f9d780e7550fa5b49be740445",effectiveClaimRevision:"6cc3c9033f1c4711dcbe3c676d1d7f9906614c7d6e95228e843d1c63cefbc641",commitBodyDigest:"e97966e26ce3ba31d5951b9fdac67808c88c1fd8be7ec1e73982f3f1cc7ffd81",changedPathsDigest:"6cc3c9033f1c4711dcbe3c676d1d7f9906614c7d6e95228e843d1c63cefbc641",qaDigest:"7439329a93321f39fb6b0de0a41c22e58373a399f9048e362dff4ffa6f1a7d89",reviewDigest:"1b2d12262e84acf9da7d06149a0effb11274ebdc986affbfd47635b855ec7135"}),"P174.03.029264":Object.freeze({baseSha:"272a7fee89e4b9324d35701df1c83b671fa96299",headSha:"339141be7339a0edf55710cbccb6e6558f514792",graphRevision:"60b343b4b810e6d5abc3159275012b9ab9ab517f9d780e7550fa5b49be740445",effectiveClaimRevision:"1053bb2baf487e38fa28d7e8cfb872c5c4da66802534ee226bbc2c7455a6a5ab",commitBodyDigest:"0f269a00dcd168a6f548ff10dfa667b193c948ac9c7211f5cb11a0561757c371",changedPathsDigest:"1053bb2baf487e38fa28d7e8cfb872c5c4da66802534ee226bbc2c7455a6a5ab",qaDigest:"ef0fd2c6e216557825cd8521ccb2f9960a3af48f18e7a5ada441bee8bfda400b",reviewDigest:"372d0f4a2f32978c8b39f20167637b3917187edb75d49875e93200c4c5a19d0d"}),"P174.03.913359":Object.freeze({baseSha:"339141be7339a0edf55710cbccb6e6558f514792",headSha:"4ccc90b85c49b27f718090bf25bc452f1b84e5e3",graphRevision:"60b343b4b810e6d5abc3159275012b9ab9ab517f9d780e7550fa5b49be740445",effectiveClaimRevision:"12b5cfba2667e8064309807776c1b323561dc8d853f9afe5f676007b8494b2b5",commitBodyDigest:"89a6653197509e75246a758d2706876b337770571a1cac47d9d85ec96c196459",changedPathsDigest:"12b5cfba2667e8064309807776c1b323561dc8d853f9afe5f676007b8494b2b5",qaDigest:"c7d3762ad30e4f9356243df17a1dd7123cbf1b660808d68176f44d1cd5da6449",reviewDigest:"e4ecf577e174fd66f31aa4a0113ab672ced16b12ee531f6831aa533795145ba1"}),"P174.03.724350":Object.freeze({baseSha:"4ccc90b85c49b27f718090bf25bc452f1b84e5e3",headSha:"568e9464fb086304146b9eb4594281f91302aef1",graphRevision:"60b343b4b810e6d5abc3159275012b9ab9ab517f9d780e7550fa5b49be740445",effectiveClaimRevision:"c8b8b6b96edf9cea78925e2f961bd74069d77af03783a5368b8ac8025bf1fefe",commitBodyDigest:"b3032338bfcd6c9dc460e9426220a1966dedeff9968c4064fdd36a315560721b",changedPathsDigest:"c8b8b6b96edf9cea78925e2f961bd74069d77af03783a5368b8ac8025bf1fefe",qaDigest:"91f2f5b00935b1b04bb5d400df500cbc97c412072078b713c6e5ba8fda669bd0",reviewDigest:"9bc92069d3b3a76cc8b02d339d432690258be1376464b69e152ed8fd3d682f05"}),"P174.03.011976":Object.freeze({baseSha:"568e9464fb086304146b9eb4594281f91302aef1",headSha:"195599b1a99a99a8416c4c26c9ab9990847338a4",graphRevision:"60b343b4b810e6d5abc3159275012b9ab9ab517f9d780e7550fa5b49be740445",effectiveClaimRevision:"49b7f2a0a967b2ba4249615c6d08834445a60df95045352838808eb4d6743b21",commitBodyDigest:"b8a28392fac663dd614b695a49c894b7cab116d45722a42850e3b24e2aaf36f4",changedPathsDigest:"49b7f2a0a967b2ba4249615c6d08834445a60df95045352838808eb4d6743b21",qaDigest:"6eb4459a7d80c4a268fc931297e8156ed2a320584f8775f0787d91b42c0929d4",reviewDigest:"98b21de29f7cceeec73da19000c6c144395cce6eb699c6a82dfab505d4ab7b44"}),"P174.03.686659":Object.freeze({baseSha:"195599b1a99a99a8416c4c26c9ab9990847338a4",headSha:"0db3681a5dad4e25ce37d967c636eb9d54915556",graphRevision:"60b343b4b810e6d5abc3159275012b9ab9ab517f9d780e7550fa5b49be740445",effectiveClaimRevision:"5c0fdbf820d677c288981b6f73f7d2d9a04ce7f4713687f12a2e984705244b8e",commitBodyDigest:"143257f4018ad773afc0c7280bd8aab8786851a9c20b65f8110881ff54656839",changedPathsDigest:"5c0fdbf820d677c288981b6f73f7d2d9a04ce7f4713687f12a2e984705244b8e",qaDigest:"6303dbf473e2815a3671aeb2c25528d8daba484b92a5a40d1eea5215e1f6763e",reviewDigest:"1bd6695846ed9340c8677cfa9b573880532187aeee487efaaa70577a0c94e7f2"})}),Se="neocortex-yoloop-runtime.json",lt="runtime.lock",Be=new WeakMap;async function oi(t,e){if(!w(e.headSha)||!g(e.graphRevision))throw new Error("p205-transient-binding-invalid");const i=e.anchoredWorkspace;if(i&&h(t)!==p(h(i.parent),i.name))throw new Error("p205-transient-anchor-binding-invalid");const r=async A=>i?(await st(i.parent,i.name,i.identity,A)).toString("utf8"):String((await k("git",[...A],{cwd:t,encoding:"utf8",maxBuffer:8*1024*1024})).stdout),n=async()=>i?JSON.parse((await $e(i.parent,i.name,i.identity,["-e","const fs=require('node:fs');process.stdout.write(JSON.stringify({manifest:fs.readFileSync('config/release-gates.v2.json','utf8'),runner:fs.readFileSync('scripts/test-root.mjs','utf8')}));"])).toString("utf8")):{manifest:await F(p(t,"config","release-gates.v2.json"),"utf8"),runner:await F(p(t,"scripts","test-root.mjs"),"utf8")};if((await r(["rev-parse","HEAD"])).trim()!==e.headSha)throw new Error("p205-transient-head-mismatch");const{manifest:o,runner:s}=await n(),[u,c]=await Promise.all([r(["show",`${e.headSha}:config/release-gates.v2.json`]),r(["show",`${e.headSha}:scripts/test-root.mjs`])]);if(o!==u||s!==c)throw new Error("p205-transient-producer-dirty");const d=JSON.parse(o),S=Array.isArray(d.requiredCompleteClasses)?d.requiredCompleteClasses.filter(A=>typeof A=="string"&&/^[a-z0-9-]+$/.test(A)):[];if(d.contract!=="P205-CI-02"||S.length===0)throw new Error("p205-transient-manifest-invalid");const l=i?(await $e(i.parent,i.name,i.identity,["scripts/test-root.mjs","--gate","complete"])).toString("utf8"):String((await k(process.execPath,["scripts/test-root.mjs","--gate","complete"],{cwd:t,encoding:"utf8",maxBuffer:64*1024*1024})).stdout),{manifest:y,runner:v}=await n();if(y!==o||v!==s)throw new Error("p205-transient-producer-raced");if((await r(["rev-parse","HEAD"])).trim()!==e.headSha)throw new Error("p205-transient-head-raced");const G=m("sha256").update(o).digest("hex"),$=m("sha256").update(l).digest("hex"),Y=ie(e.nowIso??new Date().toISOString()),V=m("sha256").update(["p205-transient-execution-v1",O,e.headSha,e.graphRevision,G,S.join(","),$,Y].join("\0")).digest("hex"),ae=Object.freeze({schemaVersion:1,kind:"p205_transient_execution_authority",contract:"P205-CI-02",command:O,executionHeadSha:e.headSha,graphRevision:e.graphRevision,manifestDigest:G,gateIds:Object.freeze(S),resultDigest:$,executedAt:Y,executionEvidenceDigest:V}),ge=Object.freeze(Object.create(null));return Be.set(ge,ae),ge}async function si(t,e={}){const i=await Et(t);return Me(i,e)}function ht(t,e={}){let i;try{const r=X("git",["rev-parse","--git-common-dir"],{cwd:t,encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim(),n=we(t),a=ee(r)?h(r):h(n,r),o=we(a);if(o!==a)throw new Error("git-lifecycle-common-dir-symlink");Ot(o);const s=p(o,ce),u=p(s,oe);if(B(s)&&(Ke(s,"directory"),we(s)!==s))throw new Error("git-lifecycle-runtime-directory-symlink");i=B(u)?u:p(o,Se)}catch{if(e.required)throw new Error("git-lifecycle-common-dir-invalid");return _e()}if(!B(i)){if(e.required)throw new Error("git-lifecycle-runtime-missing");return _e()}return Ke(i,"file"),xe(JSON.parse(Oe(i,"utf8")))}async function di(t,e,i={}){const r=await De(t),n=await Fe(r),a=p(n,lt),o=await Jt(a);try{const s=p(n,oe),u=p(r,Se),c=await Me(B(s)?s:u);if(i.expectedRevision!==void 0&&i.expectedRevision!==c.revision)throw new Error("git-lifecycle-runtime-revision-conflict");const d=structuredClone(c),S=e(d),l=xe({...d,schemaVersion:1,revision:c.revision+1});return await i.preCommit?.(l),await q(n,"directory"),await Ct(s),await ot(n,oe,`${JSON.stringify(l,null,2)}
2
- `),await q(s,"file"),await mt(n),{document:l,value:S}}finally{await Qt(a,o).catch(()=>{})}}async function mt(t){let e;try{e=await it(t,"r")}catch(i){if(process.platform==="win32"&&(I(i,"EPERM")||I(i,"EISDIR")||I(i,"EINVAL")))return;throw i}try{await e.sync()}finally{await e.close()}}function fi(t,e){const i=structuredClone(t),r=Le(i,"epics"),n=Le(i,"stories");for(const[a,o]of Object.entries(e.epics))r[a]={...f(r[a])??{},...structuredClone(o)};for(const[a,o]of Object.entries(e.stories))n[a]={...f(n[a])??{},...structuredClone(o)};return i}function Le(t,e){const i=t[e];if(i===void 0){const a={};return t[e]=a,a}const r=f(i);if(r)return r;if(!Array.isArray(i))throw new Error(`git-lifecycle-tracked-${e}-invalid`);const n={};for(const a of i){const o=f(a),s=typeof o?.id=="string"?o.id.trim():"";if(!s||n[s]!==void 0)throw new Error(`git-lifecycle-tracked-${e}-ambiguous`);n[s]=o}return t[e]=n,n}function ui(t,e){return t.epics[e]??(t.epics[e]={})}function gi(t,e){return t.stories[e]??(t.stories[e]={})}function qe(t,e,i,r){const n=f(t);return!!(n&&n.epicId===i&&n.branch===r&&n.qaVerdict==="passed"&&n.reviewVerdict==="approved"&&We(n,e))}async function li(t,e,i,r,n,a,o=[]){return pt(t,e,i,r,n,a,o).verdict==="verified"}function pt(t,e,i,r,n,a,o=[],s=new Date().toISOString()){const u=()=>_t({storyId:i,epicId:r,executionBranch:n,value:e,verifiedAt:s,verdict:"rejected",reasonCode:"checkpoint-git-physical-invalid"});try{if(!qe(e,i,r,n))return u();const c=f(e),d=f(c.qaReceipt),S=f(c.reviewReceipt),l=String(c.headSha),y=String(c.baseSha),v=L(t,["rev-parse",`refs/heads/${n}`]).trim();X("git",["merge-base","--is-ancestor",l,v],{cwd:t,stdio:"ignore"});const N=L(t,["show","--no-patch","--format=%H%n%P%n%B",l]),G=L(t,["rev-parse",`${l}^`]).trim(),$=L(t,["rev-list","--count",`${y}..${l}`]).trim();if(G!==y||$!=="1")return u();const Y=new Set(N.split(`
3
- `).map(j=>j.trim())),ae=[`Neocortex-Story: ${i}`,`Neocortex-Epic: ${r}`,`Neocortex-Execution-Branch: ${n}`,`Neocortex-Bundle-Digest: ${String(c.bundleDigest)}`,`Neocortex-Graph-Revision: ${String(c.graphRevision)}`,...c.dispatchId?[`Neocortex-Dispatch: ${String(c.dispatchId)}`]:[],...c.bundleId?[`Neocortex-Bundle: ${String(c.bundleId)}`]:[],...c.claimRevision?[`Neocortex-Claim-Revision: ${String(c.claimRevision)}`]:[]].every(j=>Y.has(j));if(ae){const Ce=[...Y].find(et=>et.startsWith("Neocortex-Prepared-Base: "))?.slice(25)??"";if(!/^[a-f0-9]{40,64}$/i.test(Ce))return u();X("git",["merge-base","--is-ancestor",Ce,l],{cwd:t,stdio:"ignore"})}const A=L(t,["diff-tree","--no-commit-id","--name-only","-r","-z",l]).split("\0").filter(Boolean);if(A.length===0||A.some(j=>!de(j)))return u();const le=m("sha256").update(N).digest("hex"),he=m("sha256").update([...A].sort().join("\0")).digest("hex"),C=je({checkpoint:c,storyId:i,epicId:r,executionBranch:n,baseSha:y,headSha:l,commitBodyDigest:le,changedPathsDigest:he,changedPaths:A,authorizedWriteSet:o.length>0?o:wt(t,i)});if(!C||d.receiptRef!==`story-qa:${String(d.sourceEvidenceDigest)}`)return u();const Ie=Dt({storyId:i,baseSha:y,headSha:l,bundleDigest:String(c.bundleDigest),graphRevision:String(c.graphRevision),commitBody:N,changedPaths:A}),Re=d.evidenceVersion==="p205-execution-v2"&&d.contract==="P205-CI-02"&&d.command===O&&g(d.manifestDigest)&&P(d.gateIds,32,!0)&&g(d.resultDigest)&&d.sourceEvidenceDigest===xt({gitEvidenceDigest:Ie,headSha:l,graphRevision:String(c.graphRevision),manifestDigest:String(d.manifestDigest),gateIds:d.gateIds,resultDigest:String(d.resultDigest)}),Ze=d.evidenceVersion==="git-immutable-v1"&&d.sourceEvidenceDigest===Ie,Ue=d.evidenceVersion===void 0&&C.mode==="legacy-migration"&&C.binding?.qaDigest===d.sourceEvidenceDigest,me=yt(a,v,String(c.graphRevision))&&(Re||C.mode==="legacy-migration"&&(Ze||Ue)),pe=a===void 0&&Re;if(!me&&!pe)return u();const Ae=m("sha256").update(["root-commit-range-review-v1",i,y,l,String(c.bundleDigest),String(c.graphRevision),String(d.receiptRef),m("sha256").update(N).digest("hex"),[...A].sort().join(",")].join("\0")).digest("hex");if(S.sourceEvidenceDigest!==Ae||S.receiptRef!==`story-review:${Ae}`||C.mode==="legacy-migration"&&C.binding?.reviewDigest!==void 0&&C.binding.reviewDigest!==S.sourceEvidenceDigest||!ae&&(Ve[i]!==l||!Array.isArray(c.receiptRefs)||!c.receiptRefs.some(j=>typeof j=="string"&&j.startsWith("legacy-direct-yolo:"))))return u();const Xe=m("sha256").update(["checkpoint-p205-transient-v1",i,r,n,y,l,String(c.bundleDigest),le,he,C.mode,C.effectiveClaimRevision,String(d.sourceEvidenceDigest),String(S.sourceEvidenceDigest),te(a)?.executionEvidenceDigest??(pe?"maintenance-git-verification":"legacy-bounded-authority")].join("\0")).digest("hex"),J=me?te(a):void 0;return Object.freeze({schemaVersion:1,kind:"story_checkpoint_physical_verification",producer:"client-p205-transient-v1",storyId:i,epicId:r,branch:n,baseSha:y,headSha:l,aggregateHeadSha:J?.executionHeadSha??l,commitBodyDigest:le,changedPathsDigest:he,claimVerification:C.mode,effectiveClaimRevision:C.effectiveClaimRevision,sourceEvidenceDigest:Xe,command:O,manifestDigest:J?.manifestDigest??"0".repeat(64),gateIds:J?.gateIds??Object.freeze(["legacy-bounded"]),resultDigest:J?.resultDigest??"0".repeat(64),graphRevision:String(c.graphRevision),executionEvidenceDigest:J?.executionEvidenceDigest??"0".repeat(64),verifiedAt:J?.executedAt??ie(s),verdict:"verified",reasonCodes:Object.freeze([me?"checkpoint-p205-transient-verified":pe?"checkpoint-git-maintenance-verified":"checkpoint-legacy-bounded-verified",...C.mode==="legacy-migration"?["checkpoint-legacy-migration-verified"]:[]]),publicSafe:!0})}catch{return u()}}function yt(t,e,i){const r=te(t);return!!(r&&r.schemaVersion===1&&r.kind==="p205_transient_execution_authority"&&r.contract==="P205-CI-02"&&r.command===O&&r.graphRevision===i&&g(r.resultDigest)&&g(r.executionEvidenceDigest)&&r.executionHeadSha===e&&w(e))}function te(t){return t&&typeof t=="object"?Be.get(t):void 0}function hi(t){const e=te(t);return e?Object.freeze({executionHeadSha:e.executionHeadSha,graphRevision:e.graphRevision,manifestDigest:e.manifestDigest,gateIds:Object.freeze([...e.gateIds]),resultDigest:e.resultDigest,executedAt:e.executedAt,executionEvidenceDigest:e.executionEvidenceDigest}):void 0}function mi(t,e,i){const r=te(t);return!!(r&&r.executionHeadSha===e&&r.graphRevision===i&&r.command===O)}function je(t){const e=gt[t.storyId],i=typeof t.checkpoint.claimRevision=="string"?t.checkpoint.claimRevision:void 0,r=t.storyId==="P174.03.811759"||t.storyId==="P174.03.685003",n=bt(t.authorizedWriteSet),a=n.length>0&&n.length===t.authorizedWriteSet.length&&t.changedPaths.every(o=>n.some(s=>vt(s,o)));if(e&&t.epicId==="P174"&&t.executionBranch==="epic/P174"&&t.baseSha===e.baseSha&&t.headSha===e.headSha&&t.checkpoint.graphRevision===e.graphRevision&&t.commitBodyDigest===e.commitBodyDigest&&t.changedPathsDigest===e.changedPathsDigest&&(r?i===void 0:i===e.effectiveClaimRevision))return t.authorizedWriteSet.length>0&&(!a||!ze(e.effectiveClaimRevision,n))?void 0:Object.freeze({mode:"legacy-migration",effectiveClaimRevision:e.effectiveClaimRevision,binding:e});if(i!==void 0&&!(!i||!g(i))&&!(!a||!ze(i,n)))return Object.freeze({mode:"canonical",effectiveClaimRevision:i})}function bt(t){const e=t.map(i=>i.replaceAll("\\","/").replace(/^\.\//,"").replace(/\/{2,}/g,"/"));return e.some(i=>!de(i))?Object.freeze([]):Object.freeze([...new Set(e)].sort())}function wt(t,e){try{const i=JSON.parse(Oe(p(t,".neocortex","state.json"),"utf8")),r=f(i.stories),n=f(r?.[e]),a=ht(t),o=f(a.stories[e]?.checkpoint)??f(n?.checkpoint);return St(e,n,o)}catch{return[]}}function St(t,e,i){const r=Array.isArray(e?.files_to_modify)?e.files_to_modify.filter(n=>typeof n=="string"):[];if(!i?.dispatchId||!i.bundleId)return r;try{return ct({...e,id:t,files_to_modify:r})}catch{return[]}}function ze(t,e){return t===m("sha256").update(e.join("\0")).digest("hex")||t===m("sha256").update(JSON.stringify(e)).digest("hex")}function vt(t,e){return t===e||t.endsWith("/")&&e.startsWith(t)}function pi(t,e,i,r,n,a){try{if(!qe(e,i,r,n))return!1;const o=f(e),s=f(o.qaReceipt),u=f(o.reviewReceipt),c=String(o.headSha),d=String(o.baseSha),S=L(t,["rev-parse",`refs/heads/${n}`]).trim();if(X("git",["merge-base","--is-ancestor",c,S],{cwd:t,stdio:"ignore"}),L(t,["rev-parse",`${c}^`]).trim()!==d||L(t,["rev-list","--count",`${d}..${c}`]).trim()!=="1")return!1;const l=L(t,["show","--no-patch","--format=%H%n%P%n%B",c]),y=L(t,["diff-tree","--no-commit-id","--name-only","-r","-z",c]).split("\0").filter(Boolean);if(y.length===0||y.some(N=>!de(N)))return!1;const v=je({checkpoint:o,storyId:i,epicId:r,executionBranch:n,baseSha:d,headSha:c,changedPaths:y,authorizedWriteSet:a,commitBodyDigest:m("sha256").update(l).digest("hex"),changedPathsDigest:m("sha256").update([...y].sort().join("\0")).digest("hex")});return!(v?.mode!=="legacy-migration"||!v.binding||s.sourceEvidenceDigest!==v.binding.qaDigest||s.receiptRef!==`story-qa:${v.binding.qaDigest}`||u.sourceEvidenceDigest!==v.binding.reviewDigest||u.receiptRef!==`story-review:${v.binding.reviewDigest}`||u.qaReceiptRef!==s.receiptRef)}catch{return!1}}function Dt(t){return m("sha256").update(["local-yolo-tdd-git-immutable-v1",t.storyId,t.baseSha,t.headSha,t.bundleDigest,t.graphRevision,m("sha256").update(t.commitBody).digest("hex"),m("sha256").update([...t.changedPaths].sort().join("\0")).digest("hex")].join("\0")).digest("hex")}function xt(t){return m("sha256").update(["local-yolo-tdd-p205-execution-v2",O,t.gitEvidenceDigest,t.headSha,t.graphRevision,t.manifestDigest,t.gateIds.join(","),t.resultDigest].join("\0")).digest("hex")}function _t(t){const e=f(t.value);return Object.freeze({schemaVersion:1,kind:"story_checkpoint_physical_verification",producer:"client-p205-transient-v1",storyId:t.storyId,epicId:t.epicId,branch:t.executionBranch,baseSha:w(e?.baseSha)?String(e?.baseSha):"0".repeat(40),headSha:w(e?.headSha)?String(e?.headSha):"0".repeat(40),aggregateHeadSha:"0".repeat(40),commitBodyDigest:"0".repeat(64),changedPathsDigest:"0".repeat(64),claimVerification:"canonical",effectiveClaimRevision:"0".repeat(64),command:O,manifestDigest:"0".repeat(64),gateIds:Object.freeze([]),resultDigest:"0".repeat(64),graphRevision:"0".repeat(64),executionEvidenceDigest:"0".repeat(64),sourceEvidenceDigest:"0".repeat(64),verifiedAt:ie(t.verifiedAt),verdict:t.verdict,reasonCodes:Object.freeze([t.reasonCode]),publicSafe:!0})}function L(t,e){return X("git",[...e],{cwd:t,encoding:"utf8",maxBuffer:32*1024*1024})}function ie(t){return Number.isFinite(Date.parse(t))?new Date(Date.parse(t)).toISOString():new Date().toISOString()}async function yi(t,e){if(Ve[e.storyId]!==e.headSha)return;const i=[".neocortex/state.json",`.neocortex/stories/${e.storyId}/qa-gate-result.json`,`.neocortex/stories/${e.storyId}/validation-evidence.md`,`.neocortex/stories/${e.storyId}/review.md`,`docs/stories/${e.storyId}.story.md`];try{const r=(await k("git",["rev-parse",`refs/heads/${e.executionBranch}`],{cwd:t,encoding:"utf8",maxBuffer:1048576})).stdout.trim();if(await k("git",["merge-base","--is-ancestor",e.headSha,r],{cwd:t}),(await k("git",["rev-parse",`${e.headSha}^`],{cwd:t,encoding:"utf8",maxBuffer:1024*1024})).stdout.trim()!==e.baseSha)return;const a=String((await k("git",["diff","--binary","--full-index",`${e.baseSha}..${e.headSha}`],{cwd:t,encoding:"utf8",maxBuffer:32*1024*1024})).stdout);if(m("sha256").update(a).digest("hex")!==e.bundleDigest)return;const o=String((await k("git",["show","--no-patch","--format=%H%n%P%n%B",e.headSha],{cwd:t,encoding:"utf8",maxBuffer:4*1024*1024})).stdout);if(!String((await k("git",["show","--no-patch","--format=%s",e.headSha],{cwd:t,encoding:"utf8",maxBuffer:1024*1024})).stdout).trim().includes(e.storyId))return;const c=String((await k("git",["diff-tree","--no-commit-id","--name-only","-r","-z",e.headSha],{cwd:t,encoding:"utf8",maxBuffer:8*1024*1024})).stdout).split("\0").filter(Boolean);if(!i.every(V=>c.includes(V))||c.some(V=>!de(V)))return;const d=await Promise.all(i.map(async V=>String((await k("git",["show",`${e.headSha}:${V}`],{cwd:t,encoding:"utf8",maxBuffer:16*1024*1024})).stdout))),S=JSON.parse(d[0]),l=f(S.stories),y=f(S.epics),v=f(l?.[e.storyId]),N=f(y?.[e.epicId]),G=Array.isArray(v?.steps_completed)?v.steps_completed:[],$=JSON.parse(d[1]);return v?.status!=="done"||!G.includes(ft)||!G.includes(ut)||N?.branch_mode!=="epic"||N.execution_branch!==e.executionBranch||$.storyId!==e.storyId||$.status!=="qa-passed"||$.safeToContinueYoloop!==!0||!Array.isArray($.blockingChecks)||$.blockingChecks.length!==0||!d[2].includes(e.storyId)||!/P205[\s\S]{0,80}(pass|aprov)/i.test(d[2])||!d[3].includes(e.storyId)||!/approved|aprovado/i.test(d[3])||!d[4].includes(e.storyId)?void 0:`legacy-direct-yolo:${m("sha256").update(["legacy-direct-yolo-recovery-v1",e.storyId,e.epicId,e.executionBranch,e.baseSha,e.headSha,e.bundleDigest,e.graphRevision,m("sha256").update(o).digest("hex"),m("sha256").update([...c].sort().join("\0")).digest("hex"),...d.map(V=>m("sha256").update(V).digest("hex"))].join("\0")).digest("hex")}`}catch{return}}async function Et(t){const e=await De(t),i=p(e,ce),r=p(i,oe);if(B(i)&&(await q(i,"directory"),await M(i)!==i))throw new Error("git-lifecycle-runtime-directory-symlink");return B(r)?r:p(e,Se)}async function He(t){return Fe(await De(t))}async function It(t,e){if(!/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/.test(e)||e.includes(".."))throw new Error("git-lifecycle-private-child-invalid");const i=h(t);await H(i);const r=h(i,e);return Z(i,r),B(r)||await Ne(i,e),await H(r,i),await H(i),r}async function b(t,e){const i=h(e),r=h(t);Z(i,r),await H(i),await H(r,i)}async function bi(t,e){await T(t,e)}async function K(t,e,i){const r=h(e),n=h(t);Z(r,n);try{await b(n,r)}catch(o){if(I(o,"ENOENT"))return!1;throw o}const a=h(r,`${n.slice(r.length+1)}.remove.${process.pid}.${Date.now()}.${ye(4).toString("hex")}`);return Z(r,a),await Q(r,_(n),_(a)),await b(a,r),i&&!await i(a)?(await re(a,n,r).catch(()=>{}),!1):(await dt(r,_(a)),!0)}async function re(t,e,i){await b(t,i);try{await be(e);return}catch(r){if(!I(r,"ENOENT"))throw r}await Q(i,_(t),_(e)),await b(e,i)}async function R(t){try{await b(t,z(t));const e=p(t,"owner.json");await T(e,t);const i=await F(e);return await T(e,t),m("sha256").update(i).digest("hex")}catch{return}}async function wi(t,e){const i=await He(t),r=await It(i,"leases"),n=p(r,"integration"),a=`${n}.recovery`;if(B(a)){await b(a,r);const c=await Te(a),d=await R(a);if(c===void 0||ue(c))return{ok:!1,reasonCode:"git-lifecycle-integration-backpressure"};if(!d||!await K(a,r,async S=>await R(S)===d))return{ok:!1,reasonCode:"git-lifecycle-integration-backpressure"}}const o=ie(e.createdAt??new Date().toISOString()),s=Object.freeze({schemaVersion:1,kind:e.kind,storyId:e.storyId,sessionId:e.sessionId,idempotencyKey:e.idempotencyKey,pid:process.pid,createdAt:o,expiresAt:ie(e.expiresAt),persistent:e.persistent,ownerNonce:e.ownerNonce??ye(16).toString("hex")});if(Date.parse(s.expiresAt)<=Date.parse(s.createdAt))return{ok:!1,reasonCode:"git-lifecycle-integration-lock-failed"};const u=async()=>{await H(r,i);try{return await Pe(r,_(n),`${JSON.stringify(s)}
4
- `),await b(n,r),await T(p(n,"owner.json"),n),!0}catch(c){throw I(c,"EEXIST")||await K(n,r).catch(()=>{}),c}};try{return await u(),{ok:!0,owner:s,path:n}}catch(c){if(!I(c,"EEXIST"))return{ok:!1,reasonCode:"git-lifecycle-integration-lock-failed"}}try{const c=await ne(n),d=c?void 0:await Te(n);if(c&&Ge(c,s))return{ok:!0,owner:c,path:n};if(c&&Date.parse(c.expiresAt)>Date.now()&&(c.persistent||ue(c.pid))||d!==void 0&&ue(d)||!c&&d===void 0&&await Je(n))return{ok:!1,reasonCode:"git-lifecycle-integration-backpressure"};const l=await R(n);if(!l)return{ok:!1,reasonCode:"git-lifecycle-integration-lock-failed"};const y=`${n}.stale.${process.pid}.${Date.now()}`;await Q(r,_(n),_(y));try{if(await b(y,r),await R(y)!==l)return await re(y,n,r).catch(()=>{}),{ok:!1,reasonCode:"git-lifecycle-integration-backpressure"};await u()}finally{await K(y,r,async v=>await R(v)===l).catch(()=>{})}return{ok:!0,owner:s,path:n}}catch(c){return{ok:!1,reasonCode:I(c,"EEXIST")||I(c,"ENOENT")?"git-lifecycle-integration-backpressure":"git-lifecycle-integration-lock-failed"}}}async function Si(t,e){const i=await ne(t);return!!(i&&ve(i,e)&&Date.parse(i.expiresAt)>Date.now())}async function Rt(t,e){try{const i=z(t);await b(t,i);const r=await ne(t);if(!r||!ve(r,e))return!1;const n=await R(t);if(!n)return!1;const a=`${t}.release.${process.pid}.${Date.now()}`;await Q(i,_(t),_(a)),await b(a,i);const o=await ne(a);return!o||!ve(o,e)||await R(a)!==n?(await re(a,t,i).catch(()=>{}),!1):K(a,i,async s=>await R(s)===n)}catch(i){if(I(i,"ENOENT"))return!1;throw i}}function At(t){return m("sha256").update(["git-lifecycle-physical-owner-v1",t.kind,t.storyId,t.sessionId,t.idempotencyKey,String(t.pid),t.createdAt,t.expiresAt,t.persistent?"persistent":"ephemeral",t.ownerNonce].join("\0")).digest("hex")}async function vi(t,e){if(!U(e.storyId)||!E(e.idempotencyKey)||!g(e.ownerDigest))return"foreign";const i=await He(t),r=p(i,"leases"),n=p(r,"integration");if(!B(n))return"absent";try{await b(r,i),await b(n,r);const a=await ne(n);return!a||a.kind!=="direct"||a.storyId!==e.storyId||a.sessionId!==e.idempotencyKey||a.idempotencyKey!==e.idempotencyKey||a.persistent!==!0||At(a)!==e.ownerDigest?"foreign":await Rt(n,a)?"released":"foreign"}catch{return"foreign"}}async function ne(t){try{await b(t,z(t));const e=p(t,"owner.json");await T(e,t);const i=JSON.parse(await F(e,"utf8"));return i.schemaVersion!==1||i.kind!=="direct"&&i.kind!=="continuous"||!U(i.storyId)||!E(i.sessionId)||!E(i.idempotencyKey)||!Number.isSafeInteger(i.pid)||Number(i.pid)<=0||!x(i.createdAt)||!x(i.expiresAt)||typeof i.persistent!="boolean"||typeof i.ownerNonce!="string"||!/^[a-f0-9]{32}$/.test(i.ownerNonce)?void 0:i}catch{return}}async function Te(t){try{await b(t,z(t));const e=p(t,"owner.json");await T(e,t);const i=JSON.parse(await F(e,"utf8"));return Number.isSafeInteger(i.pid)&&Number(i.pid)>0?Number(i.pid):void 0}catch{return}}function Ge(t,e){return t.kind===e.kind&&t.storyId===e.storyId&&t.sessionId===e.sessionId&&t.idempotencyKey===e.idempotencyKey&&t.expiresAt===e.expiresAt&&t.persistent===e.persistent}function ve(t,e){return Ge(t,e)&&t.schemaVersion===e.schemaVersion&&t.pid===e.pid&&t.createdAt===e.createdAt&&t.ownerNonce===e.ownerNonce}async function De(t){const e=await M(t),r=(await k("git",["rev-parse","--git-common-dir"],{cwd:e,encoding:"utf8",maxBuffer:1024*1024})).stdout.trim(),n=ee(r)?h(r):h(e,r),a=await M(n);if(a!==n)throw new Error("git-lifecycle-common-dir-symlink");await kt(a);const s=(await k("git",["rev-parse","--git-common-dir"],{cwd:e,encoding:"utf8",maxBuffer:1024*1024})).stdout.trim();if((ee(s)?h(s):h(e,s))!==n)throw new Error("git-lifecycle-common-dir-raced");return a}async function Fe(t){const e=p(t,ce);if(B(e)||await Ne(t,ce),await q(e,"directory"),await M(e)!==e)throw new Error("git-lifecycle-runtime-directory-symlink");return e}async function Me(t,e={}){try{return await q(t,"file"),xe(JSON.parse(await F(t,"utf8")))}catch(i){if(I(i,"ENOENT")){if(e.required)throw new Error("git-lifecycle-runtime-missing");return _e()}throw i}}async function Ct(t){try{await q(t,"file")}catch(e){if(I(e,"ENOENT"))return;throw e}}async function q(t,e){const i=await be(t);if(i.isSymbolicLink())throw new Error(`git-lifecycle-${e}-symlink`);if(e==="file"?!i.isFile():!i.isDirectory())throw new Error(`git-lifecycle-${e}-invalid`);if(se()&&i.uid!==process.getuid())throw new Error(`git-lifecycle-${e}-ownership-mismatch`);if(se()&&(i.mode&63)!==0)throw new Error(`git-lifecycle-${e}-permissions-unsafe`)}function Z(t,e){const i=h(t),r=h(e),n=nt(i,r);if(!n||n.startsWith("..")||ee(n)||z(r)!==i)throw new Error("git-lifecycle-private-path-escape")}async function H(t,e){const i=h(t);if(e&&Z(h(e),i),await q(i,"directory"),h(await M(i))!==i)throw new Error("git-lifecycle-directory-substituted");if(e){const r=h(e);if(await q(r,"directory"),h(await M(r))!==r)throw new Error("git-lifecycle-directory-parent-substituted")}}async function T(t,e){const i=h(t);if(Z(h(e),i),await H(h(e)),await q(i,"file"),h(await M(i))!==i)throw new Error("git-lifecycle-file-substituted")}function Ke(t,e){const i=ke(t);if(i.isSymbolicLink())throw new Error(`git-lifecycle-${e}-symlink`);if(e==="file"?!i.isFile():!i.isDirectory())throw new Error(`git-lifecycle-${e}-invalid`);if(se()&&i.uid!==process.getuid())throw new Error(`git-lifecycle-${e}-ownership-mismatch`);if(se()&&(i.mode&63)!==0)throw new Error(`git-lifecycle-${e}-permissions-unsafe`)}async function kt(t){const e=await be(t);if(e.isSymbolicLink())throw new Error("git-lifecycle-common-dir-symlink");if(!e.isDirectory())throw new Error("git-lifecycle-common-dir-invalid")}function Ot(t){const e=ke(t);if(e.isSymbolicLink())throw new Error("git-lifecycle-common-dir-symlink");if(!e.isDirectory())throw new Error("git-lifecycle-common-dir-invalid")}function se(t=process.platform){return t!=="win32"&&typeof process.getuid=="function"}function xe(t){if(!t||typeof t!="object"||Array.isArray(t))throw new Error("git-lifecycle-runtime-invalid");const e=t;D(e,["schemaVersion","revision","epics","stories"],"git-lifecycle-runtime-unknown-field");const i=f(e.epics),r=f(e.stories);if(e.schemaVersion!==1||!Number.isSafeInteger(e.revision)||Number(e.revision)<0||!i||!r||Object.values(i).some(n=>!f(n))||Object.values(r).some(n=>!f(n)))throw new Error("git-lifecycle-runtime-invalid");for(const[n,a]of Object.entries(i))if(!U(n)||!$t(a))throw new Error("git-lifecycle-runtime-epic-invalid");for(const[n,a]of Object.entries(r))if(!U(n)||!n.includes(".")||!Vt(a,n))throw new Error("git-lifecycle-runtime-story-invalid");return e}const Pt=["branch_mode","execution_branch","origin_branch","branch_lease","origin_binding","graph_revision","aggregate_qa_receipt","terminal_git_receipt","physicalMergeStatus","pr_number","git_reconciliation_receipts","git_reconciliation_debt"],Nt=["checkpoint","status","last_step","steps_completed"];function $t(t){return D(t,Pt,"git-lifecycle-runtime-epic-unknown-field"),(t.branch_mode===void 0||t.branch_mode==="epic")&&(t.execution_branch===void 0||W(t.execution_branch))&&(t.origin_branch===void 0||W(t.origin_branch))&&(t.branch_lease===void 0||t.branch_lease===null||Bt(t.branch_lease))&&(t.origin_binding===void 0||t.origin_binding===null||jt(t.origin_binding))&&(t.graph_revision===void 0||g(t.graph_revision))&&(t.aggregate_qa_receipt===void 0||t.aggregate_qa_receipt===null||zt(t.aggregate_qa_receipt))&&(t.terminal_git_receipt===void 0||t.terminal_git_receipt===null||Ht(t.terminal_git_receipt))&&(t.physicalMergeStatus===void 0||["merged","pushed","denied_external_gate","blocked_local_or_repo","not_attempted"].includes(String(t.physicalMergeStatus)))&&(t.pr_number===void 0||t.pr_number===null||Number.isSafeInteger(t.pr_number)&&Number(t.pr_number)>0)&&(t.git_reconciliation_receipts===void 0||Kt(t.git_reconciliation_receipts))&&(t.git_reconciliation_debt===void 0||Wt(t.git_reconciliation_debt))}function Vt(t,e){return D(t,Nt,"git-lifecycle-runtime-story-unknown-field"),(t.checkpoint===void 0||t.checkpoint===null||We(t.checkpoint,e))&&(t.status===void 0||E(t.status))&&(t.last_step===void 0||t.last_step===null||E(t.last_step))&&(t.steps_completed===void 0||P(t.steps_completed,128))}function Bt(t){const e=f(t);return e?(D(e,["schemaVersion","ownerStoryId","sessionId","idempotencyKey","acquiredAt","expiresAt","handoffGrant","handoffConsumption"],"git-lifecycle-runtime-lease-unknown-field"),e.schemaVersion===1&&U(e.ownerStoryId)&&E(e.sessionId)&&E(e.idempotencyKey)&&x(e.acquiredAt)&&x(e.expiresAt)&&Date.parse(String(e.expiresAt))>Date.parse(String(e.acquiredAt))&&(e.handoffGrant===void 0||Lt(e.handoffGrant,e))&&(e.handoffConsumption===void 0||qt(e.handoffConsumption,e))):!1}function Lt(t,e){const i=f(t);return i?(D(i,["schemaVersion","kind","storyId","fromSessionId","tokenDigest","bundleDigest","claimRevision","expiresAt"],"git-lifecycle-runtime-handoff-grant-unknown-field"),i.schemaVersion===1&&i.kind==="direct-yolo-setup-handoff"&&i.storyId===e.ownerStoryId&&i.fromSessionId===e.sessionId&&g(i.tokenDigest)&&g(i.bundleDigest)&&g(i.claimRevision)&&x(i.expiresAt)&&Date.parse(String(i.expiresAt))<=Date.parse(String(e.expiresAt))):!1}function qt(t,e){const i=f(t);return i?(D(i,["schemaVersion","kind","state","storyId","fromSessionId","tokenDigest","bundleDigest","claimRevision","consumedBySessionId","consumedAt"],"git-lifecycle-runtime-handoff-consumption-unknown-field"),i.schemaVersion===1&&i.kind==="direct-yolo-setup-handoff-consumption"&&i.state==="consumed"&&i.storyId===e.ownerStoryId&&E(i.fromSessionId)&&g(i.tokenDigest)&&g(i.bundleDigest)&&g(i.claimRevision)&&i.consumedBySessionId===e.sessionId&&x(i.consumedAt)):!1}function jt(t){const e=f(t);return e?(D(e,["schemaVersion","originBranch","originHeadSha","executionBranch","capturedFromCurrentCheckout","capturedAt"],"git-lifecycle-runtime-origin-unknown-field"),e.schemaVersion===1&&W(e.originBranch)&&W(e.executionBranch)&&e.originBranch!==e.executionBranch&&w(e.originHeadSha)&&e.capturedFromCurrentCheckout===!0&&x(e.capturedAt)):!1}function zt(t){const e=f(t);if(!e)return!1;D(e,["schemaVersion","evidenceVersion","producer","contract","command","verdict","executionHeadSha","graphRevision","manifestDigest","resultDigest","checkedAt","receiptRef","gateIds"],"git-lifecycle-runtime-aggregate-qa-unknown-field");const i=e.evidenceVersion==="p205-execution-v2"&&e.producer==="local-yolo-tdd"&&e.contract==="P205-CI-02"&&e.command===O&&g(e.manifestDigest)&&g(e.resultDigest),r=e.evidenceVersion===void 0&&e.producer===void 0&&e.contract===void 0&&e.command===void 0&&e.manifestDigest===void 0&&e.resultDigest===void 0;return e.schemaVersion===1&&(i||r)&&e.verdict==="passed"&&w(e.executionHeadSha)&&g(e.graphRevision)&&x(e.checkedAt)&&fe(e.receiptRef)&&P(e.gateIds,128,!0)}function Ht(t){const e=f(t);return e?(D(e,["schemaVersion","epicId","executionBranch","originBranch","baseSha","executionHeadSha","mergeSha","pushedSha","strategy","prNumber","physicalStatus","localGateReceiptRefs","idempotencyKey","attemptStartedAt","completedAt","retryEligible","reasonCodes","publicSafe","candidateQa","providerGuard"],"git-lifecycle-runtime-terminal-receipt-unknown-field"),e.schemaVersion===1&&U(e.epicId)&&W(e.executionBranch)&&W(e.originBranch)&&w(e.baseSha)&&w(e.executionHeadSha)&&(e.mergeSha===void 0||w(e.mergeSha))&&(e.pushedSha===void 0||w(e.pushedSha))&&(e.strategy==="direct"||e.strategy==="single_pr")&&(e.candidateQa===void 0||Gt(e.candidateQa,e))&&(e.providerGuard===void 0||Tt(e.providerGuard,e))&&(e.prNumber===void 0||Number.isSafeInteger(e.prNumber)&&Number(e.prNumber)>0)&&["prepared","merged","pushed","denied_external_gate","blocked_local_or_repo"].includes(String(e.physicalStatus))&&P(e.localGateReceiptRefs,128,!0)&&E(e.idempotencyKey)&&x(e.attemptStartedAt)&&(e.completedAt===void 0||x(e.completedAt))&&typeof e.retryEligible=="boolean"&&P(e.reasonCodes,128)&&e.publicSafe===!0):!1}function Tt(t,e){const i=f(t);if(!i)return!1;D(i,["schemaVersion","provider","mode","source","prHeadSha","originHeadSha","checkedAt","publicSafe"],"git-lifecycle-runtime-provider-guard-unknown-field");const r=i.mode==="recovered_exact_tree"?i.source==="physical_recovery":i.mode==="strict_up_to_date_expected_head"&&["branch_protection","ruleset","branch_protection_and_ruleset"].includes(String(i.source));return i.schemaVersion===1&&i.provider==="github"&&r&&e.strategy==="single_pr"&&e.physicalStatus==="pushed"&&Number.isSafeInteger(e.prNumber)&&Number(e.prNumber)>0&&w(i.prHeadSha)&&i.prHeadSha===e.mergeSha&&w(i.originHeadSha)&&i.originHeadSha===e.baseSha&&x(i.checkedAt)&&i.publicSafe===!0}function Gt(t,e){const i=f(t);return i?(D(i,["schemaVersion","kind","contract","command","originHeadSha","executionHeadSha","mergeSha","treeSha","graphRevision","manifestDigest","resultDigest","gateIds","checkedAt","receiptRef"],"git-lifecycle-runtime-merge-candidate-unknown-field"),i.schemaVersion===1&&i.kind==="epic_merge_candidate_qa"&&i.contract==="P205-CI-02"&&i.command===O&&w(i.originHeadSha)&&i.originHeadSha===e.baseSha&&w(i.executionHeadSha)&&i.executionHeadSha===e.executionHeadSha&&w(i.mergeSha)&&i.mergeSha===e.mergeSha&&w(i.treeSha)&&g(i.graphRevision)&&g(i.manifestDigest)&&g(i.resultDigest)&&P(i.gateIds,128,!0)&&x(i.checkedAt)&&fe(i.receiptRef)):!1}function We(t,e){const i=f(t);if(!i)return!1;D(i,["schemaVersion","storyId","epicId","branch","baseSha","headSha","commits","idempotencyKey","dispatchId","bundleId","bundleDigest","graphRevision","claimRevision","receiptRefs","qaVerdict","reviewVerdict","qaReceipt","reviewReceipt","recordedAt"],"git-lifecycle-runtime-checkpoint-unknown-field");const r=String(e).split(".")[0];return i.schemaVersion===1&&i.storyId===e&&i.epicId===r&&W(i.branch)&&w(i.baseSha)&&w(i.headSha)&&i.baseSha!==i.headSha&&Yt(i.commits)&&i.commits.length===1&&i.commits[0]===i.headSha&&E(i.idempotencyKey)&&(i.dispatchId===void 0||g(i.dispatchId))&&(i.bundleId===void 0||g(i.bundleId))&&g(i.bundleDigest)&&g(i.graphRevision)&&(i.claimRevision===void 0||g(i.claimRevision))&&P(i.receiptRefs,256,!0)&&(i.qaVerdict==="passed"||i.qaVerdict==="blocked")&&["approved","changes-requested","pending"].includes(String(i.reviewVerdict))&&Ft(i.qaReceipt,i)&&(i.reviewVerdict==="pending"?i.reviewReceipt===void 0:Mt(i.reviewReceipt,i))&&x(i.recordedAt)}function Ft(t,e){const i=f(t);return i?(D(i,["schemaVersion","kind","producer","evidenceVersion","storyId","epicId","baseSha","headSha","bundleDigest","graphRevision","contract","command","manifestDigest","gateIds","resultDigest","sourceEvidenceDigest","verdict","checkedAt","receiptRef"],"git-lifecycle-runtime-story-qa-unknown-field"),i.schemaVersion===1&&i.kind==="story_qa_evidence"&&i.producer==="local-yolo-tdd"&&(i.evidenceVersion===void 0||i.evidenceVersion==="git-immutable-v1"||i.evidenceVersion==="p205-execution-v2"&&i.contract==="P205-CI-02"&&i.command===O&&g(i.manifestDigest)&&P(i.gateIds,32,!0)&&g(i.resultDigest))&&Ye(i,e)&&g(i.sourceEvidenceDigest)&&i.verdict===e.qaVerdict&&(i.verdict==="passed"||i.verdict==="blocked")&&x(i.checkedAt)&&fe(i.receiptRef)&&e.receiptRefs.includes(i.receiptRef)):!1}function Mt(t,e){const i=f(t),r=f(e.qaReceipt);return!i||!r?!1:(D(i,["schemaVersion","kind","producer","storyId","epicId","baseSha","headSha","bundleDigest","graphRevision","sourceEvidenceDigest","qaReceiptRef","verdict","reviewedAt","receiptRef"],"git-lifecycle-runtime-story-review-unknown-field"),i.schemaVersion===1&&i.kind==="story_review_evidence"&&i.producer==="root-commit-range-review"&&Ye(i,e)&&g(i.sourceEvidenceDigest)&&i.qaReceiptRef===r.receiptRef&&i.receiptRef!==r.receiptRef&&(i.verdict==="approved"||i.verdict==="changes-requested")&&(i.verdict==="approved"?e.reviewVerdict==="approved":e.reviewVerdict==="changes-requested")&&x(i.reviewedAt)&&Date.parse(String(i.reviewedAt))>=Date.parse(String(r.checkedAt))&&fe(i.receiptRef)&&e.receiptRefs.includes(i.receiptRef))}function Ye(t,e){return["storyId","epicId","baseSha","headSha","bundleDigest","graphRevision"].every(i=>t[i]===e[i])}function Kt(t){return!Array.isArray(t)||t.length>1024?!1:t.every(e=>{const i=f(e);return i?(D(i,["schemaVersion","resourceId","action","outcome","idempotencyKey","reasonCodes","recordedAt","publicSafe"],"git-lifecycle-runtime-reconciliation-receipt-unknown-field"),i.schemaVersion===1&&E(i.resourceId)&&["no_op","delete_local_branch","delete_remote_branch","close_pull_request"].includes(String(i.action))&&["applied","already_absent","dry_run","failed"].includes(String(i.outcome))&&E(i.idempotencyKey)&&P(i.reasonCodes,128)&&x(i.recordedAt)&&i.publicSafe===!0):!1})}function Wt(t){return!Array.isArray(t)||t.length>1024?!1:t.every(e=>{const i=f(e);return i?(D(i,["schemaVersion","resourceId","action","managed","reasonCodes","evidence","publicSafe"],"git-lifecycle-runtime-reconciliation-debt-unknown-field"),i.schemaVersion===1&&E(i.resourceId)&&i.action==="preserve"&&typeof i.managed=="boolean"&&P(i.reasonCodes,128)&&P(i.evidence,16)&&i.publicSafe===!0):!1})}function D(t,e,i){const r=new Set(e);if(Object.keys(t).some(n=>!r.has(n)))throw new Error(i)}function U(t){return typeof t=="string"&&/^P[1-9][0-9]*(?:\.[0-9]+)*$/.test(t)}function W(t){return typeof t=="string"&&/^[A-Za-z0-9][A-Za-z0-9._/-]{0,239}$/.test(t)&&!t.includes("..")&&!t.includes("//")&&!t.includes("@{")&&!t.endsWith("/")&&!t.endsWith(".")&&!t.split("/").some(e=>!e||e.startsWith(".")||e.endsWith(".lock"))}function de(t){return t.length>0&&t.length<=1024&&!ee(t)&&!t.includes("\0")&&!t.replaceAll("\\","/").split("/").includes("..")}function E(t){return typeof t=="string"&&t.length>0&&t.length<=240&&/^[A-Za-z0-9._:/#\-[\]]+$/.test(t)&&!t.includes("..")}function fe(t){return E(t)}function w(t){return typeof t=="string"&&/^[a-f0-9]{40,64}$/i.test(t)}function g(t){return typeof t=="string"&&/^[a-f0-9]{64}$/i.test(t)}function x(t){return typeof t=="string"&&t.length<=64&&Number.isFinite(Date.parse(t))}function P(t,e,i=!1){return Array.isArray(t)&&t.length<=e&&(!i||t.length>0)&&t.every(E)}function Yt(t){return Array.isArray(t)&&t.length>0&&t.length<=256&&t.every(w)}function _e(){return{schemaVersion:1,revision:0,epics:{},stories:{}}}async function Jt(t){const e=z(t),i={pid:process.pid,nonce:ye(16).toString("hex")},r=async()=>{await H(e),await Pe(e,_(t),JSON.stringify(i));try{await b(t,e),await T(p(t,"owner.json"),t)}catch(n){throw await K(t,e).catch(()=>{}),n}};try{await r()}catch(n){if(!I(n,"EEXIST"))throw n;await q(t,"directory");const a=await Ee(t);if(a!==void 0&&ue(a.pid))throw new Error("git-lifecycle-runtime-lock-active");if(a===void 0&&await Je(t))throw new Error("git-lifecycle-runtime-lock-active");const o=await R(t);if(!o)throw new Error("git-lifecycle-runtime-lock-owner-invalid");const s=`${t}.stale.${process.pid}.${Date.now()}`;await Q(e,_(t),_(s));try{if(await b(s,e),await R(s)!==o)throw await re(s,t,e).catch(()=>{}),new Error("git-lifecycle-runtime-lock-owner-replaced");await r()}finally{await K(s,e,async u=>await R(u)===o).catch(()=>{})}}return i}async function Qt(t,e){const i=z(t);try{await b(t,i);const r=await Ee(t);if(!r||!Qe(r,e))return!1;const n=await R(t);if(!n)return!1;const a=`${t}.release.${process.pid}.${Date.now()}`;await Q(i,_(t),_(a)),await b(a,i);const o=await Ee(a);return!o||!Qe(o,e)||await R(a)!==n?(await re(a,t,i).catch(()=>{}),!1):K(a,i,async s=>await R(s)===n)}catch(r){if(I(r,"ENOENT"))return!1;throw r}}async function Je(t){try{return Date.now()-(await rt(t)).mtimeMs<3e4}catch{return!0}}async function Ee(t){try{await b(t,z(t));const e=p(t,"owner.json");await T(e,t);const i=JSON.parse(await F(e,"utf8"));return Number.isSafeInteger(i.pid)&&Number(i.pid)>0&&(i.nonce===void 0||typeof i.nonce=="string"&&/^[a-f0-9]{32}$/.test(i.nonce))?{pid:Number(i.pid),...typeof i.nonce=="string"?{nonce:i.nonce}:{}}:void 0}catch{return}}function Qe(t,e){return t.pid===e.pid&&t.nonce!==void 0&&t.nonce===e.nonce}function ue(t){try{return process.kill(t,0),!0}catch(e){return I(e,"EPERM")}}function f(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:void 0}function I(t,e){return t instanceof Error&&"code"in t&&t.code===e}export{ce as GIT_LIFECYCLE_RUNTIME_DIRECTORY,oe as GIT_LIFECYCLE_RUNTIME_FILE,Ve as LEGACY_DIRECT_YOLO_RECOVERY_COMMITS,gt as LEGACY_P174_CHECKPOINT_MIGRATIONS,O as P205_COMPLETE_COMMAND,wi as acquireGitLifecyclePhysicalIntegrationLock,fi as applyGitLifecycleRuntimeOverlay,b as assertGitLifecyclePrivateDirectory,bi as assertGitLifecyclePrivateFile,At as computeGitLifecyclePhysicalIntegrationLockOwnerDigest,Dt as computeImmutableStoryQaEvidenceDigest,yi as computeLegacyDirectYoloRecoveryReceiptRef,xt as computeP205StoryQaEvidenceDigest,It as ensureGitLifecyclePrivateChildDirectory,ui as ensureRuntimeEpic,gi as ensureRuntimeStory,oi as executeP205TransientAuthority,He as gitLifecycleRuntimeDirectory,St as gitLifecycleStoryWriteSet,qe as isAcceptedGitLifecycleStoryCheckpoint,di as mutateGitLifecycleRuntime,mi as p205TransientAuthorityMatchesAggregate,se as posixSecurityAvailable,hi as projectP205TransientExecutionEvidence,si as readGitLifecycleRuntime,ht as readGitLifecycleRuntimeSync,Rt as releaseGitLifecyclePhysicalIntegrationLock,vi as releaseGitLifecyclePhysicalIntegrationLockForCheckpoint,K as removeGitLifecyclePrivateDirectory,li as verifyAcceptedGitLifecycleStoryCheckpoint,pt as verifyAcceptedGitLifecycleStoryCheckpointSync,Si as verifyGitLifecyclePhysicalIntegrationLock,pi as verifyLegacyCheckpointMigrationCandidateSync};
1
+ import{execFile as it,execFileSync as X}from"node:child_process";import{createHash as m,randomBytes as ye}from"node:crypto";import{lstat as be,open as rt,readFile as F,realpath as M,stat as nt}from"node:fs/promises";import{existsSync as L,lstatSync as ke,readFileSync as Oe,realpathSync as we}from"node:fs";import{basename as E,dirname as z,isAbsolute as ee,join as p,relative as at,resolve as h}from"node:path";import{promisify as ct}from"node:util";import{publicWriteSet as ot}from"../../../shared/dist/yoloop/public-story-write-set.js";import{anchoredAtomicWriteFile as st,anchoredCreateOwnedDirectory as Pe,anchoredEnsureDirectory as Ne,anchoredExecuteGit as dt,anchoredExecuteNode as $e,anchoredRemoveDirectory as ft,anchoredRenameDirectory as Q}from"./secure-filesystem-boundary.js";import{GIT_LIFECYCLE_COMMIT_PUSH_STEP_ID as ut,GIT_LIFECYCLE_REVIEW_PR_STEP_ID as gt}from"./git-lifecycle-step-ids.js";const k=ct(it),ce="neocortex-yoloop",oe="runtime.json",O="node scripts/test-root.mjs --gate complete",Ve=Object.freeze({"P174.03.029264":"339141be7339a0edf55710cbccb6e6558f514792"}),lt=Object.freeze({"P174.03.811759":Object.freeze({baseSha:"749c8fc732deaf26c81a8e08cc94b83c8cf0f5ba",headSha:"84162456d9cbe5000ffd0ed3eb3d0e88cfeba499",graphRevision:"60b343b4b810e6d5abc3159275012b9ab9ab517f9d780e7550fa5b49be740445",effectiveClaimRevision:"11f54704f5007f6139159419cfd7781f908b1502e117365c6d84011384579ed2",commitBodyDigest:"b4fc759a49765fd8c0b3d0f5d1c333c2a4bf28d324e83eedabb12f9530df3738",changedPathsDigest:"11f54704f5007f6139159419cfd7781f908b1502e117365c6d84011384579ed2",qaDigest:"f1100775e21f5d0d990f77303a2a06d936908f016983e32a63316d81aee6b9fc",reviewDigest:"50400bbcddb6f02408837cf99077de5d3af8c84822ab23a8b5499c338af7103a"}),"P174.03.685003":Object.freeze({baseSha:"84162456d9cbe5000ffd0ed3eb3d0e88cfeba499",headSha:"272a7fee89e4b9324d35701df1c83b671fa96299",graphRevision:"60b343b4b810e6d5abc3159275012b9ab9ab517f9d780e7550fa5b49be740445",effectiveClaimRevision:"6cc3c9033f1c4711dcbe3c676d1d7f9906614c7d6e95228e843d1c63cefbc641",commitBodyDigest:"e97966e26ce3ba31d5951b9fdac67808c88c1fd8be7ec1e73982f3f1cc7ffd81",changedPathsDigest:"6cc3c9033f1c4711dcbe3c676d1d7f9906614c7d6e95228e843d1c63cefbc641",qaDigest:"7439329a93321f39fb6b0de0a41c22e58373a399f9048e362dff4ffa6f1a7d89",reviewDigest:"1b2d12262e84acf9da7d06149a0effb11274ebdc986affbfd47635b855ec7135"}),"P174.03.029264":Object.freeze({baseSha:"272a7fee89e4b9324d35701df1c83b671fa96299",headSha:"339141be7339a0edf55710cbccb6e6558f514792",graphRevision:"60b343b4b810e6d5abc3159275012b9ab9ab517f9d780e7550fa5b49be740445",effectiveClaimRevision:"1053bb2baf487e38fa28d7e8cfb872c5c4da66802534ee226bbc2c7455a6a5ab",commitBodyDigest:"0f269a00dcd168a6f548ff10dfa667b193c948ac9c7211f5cb11a0561757c371",changedPathsDigest:"1053bb2baf487e38fa28d7e8cfb872c5c4da66802534ee226bbc2c7455a6a5ab",qaDigest:"ef0fd2c6e216557825cd8521ccb2f9960a3af48f18e7a5ada441bee8bfda400b",reviewDigest:"372d0f4a2f32978c8b39f20167637b3917187edb75d49875e93200c4c5a19d0d"}),"P174.03.913359":Object.freeze({baseSha:"339141be7339a0edf55710cbccb6e6558f514792",headSha:"4ccc90b85c49b27f718090bf25bc452f1b84e5e3",graphRevision:"60b343b4b810e6d5abc3159275012b9ab9ab517f9d780e7550fa5b49be740445",effectiveClaimRevision:"12b5cfba2667e8064309807776c1b323561dc8d853f9afe5f676007b8494b2b5",commitBodyDigest:"89a6653197509e75246a758d2706876b337770571a1cac47d9d85ec96c196459",changedPathsDigest:"12b5cfba2667e8064309807776c1b323561dc8d853f9afe5f676007b8494b2b5",qaDigest:"c7d3762ad30e4f9356243df17a1dd7123cbf1b660808d68176f44d1cd5da6449",reviewDigest:"e4ecf577e174fd66f31aa4a0113ab672ced16b12ee531f6831aa533795145ba1"}),"P174.03.724350":Object.freeze({baseSha:"4ccc90b85c49b27f718090bf25bc452f1b84e5e3",headSha:"568e9464fb086304146b9eb4594281f91302aef1",graphRevision:"60b343b4b810e6d5abc3159275012b9ab9ab517f9d780e7550fa5b49be740445",effectiveClaimRevision:"c8b8b6b96edf9cea78925e2f961bd74069d77af03783a5368b8ac8025bf1fefe",commitBodyDigest:"b3032338bfcd6c9dc460e9426220a1966dedeff9968c4064fdd36a315560721b",changedPathsDigest:"c8b8b6b96edf9cea78925e2f961bd74069d77af03783a5368b8ac8025bf1fefe",qaDigest:"91f2f5b00935b1b04bb5d400df500cbc97c412072078b713c6e5ba8fda669bd0",reviewDigest:"9bc92069d3b3a76cc8b02d339d432690258be1376464b69e152ed8fd3d682f05"}),"P174.03.011976":Object.freeze({baseSha:"568e9464fb086304146b9eb4594281f91302aef1",headSha:"195599b1a99a99a8416c4c26c9ab9990847338a4",graphRevision:"60b343b4b810e6d5abc3159275012b9ab9ab517f9d780e7550fa5b49be740445",effectiveClaimRevision:"49b7f2a0a967b2ba4249615c6d08834445a60df95045352838808eb4d6743b21",commitBodyDigest:"b8a28392fac663dd614b695a49c894b7cab116d45722a42850e3b24e2aaf36f4",changedPathsDigest:"49b7f2a0a967b2ba4249615c6d08834445a60df95045352838808eb4d6743b21",qaDigest:"6eb4459a7d80c4a268fc931297e8156ed2a320584f8775f0787d91b42c0929d4",reviewDigest:"98b21de29f7cceeec73da19000c6c144395cce6eb699c6a82dfab505d4ab7b44"}),"P174.03.686659":Object.freeze({baseSha:"195599b1a99a99a8416c4c26c9ab9990847338a4",headSha:"0db3681a5dad4e25ce37d967c636eb9d54915556",graphRevision:"60b343b4b810e6d5abc3159275012b9ab9ab517f9d780e7550fa5b49be740445",effectiveClaimRevision:"5c0fdbf820d677c288981b6f73f7d2d9a04ce7f4713687f12a2e984705244b8e",commitBodyDigest:"143257f4018ad773afc0c7280bd8aab8786851a9c20b65f8110881ff54656839",changedPathsDigest:"5c0fdbf820d677c288981b6f73f7d2d9a04ce7f4713687f12a2e984705244b8e",qaDigest:"6303dbf473e2815a3671aeb2c25528d8daba484b92a5a40d1eea5215e1f6763e",reviewDigest:"1bd6695846ed9340c8677cfa9b573880532187aeee487efaaa70577a0c94e7f2"})}),Se="neocortex-yoloop-runtime.json",ht="runtime.lock",Le=new WeakMap;async function di(t,e){if(!w(e.headSha)||!g(e.graphRevision))throw new Error("p205-transient-binding-invalid");const i=e.anchoredWorkspace;if(i&&h(t)!==p(h(i.parent),i.name))throw new Error("p205-transient-anchor-binding-invalid");const r=async A=>i?(await dt(i.parent,i.name,i.identity,A)).toString("utf8"):String((await k("git",[...A],{cwd:t,encoding:"utf8",maxBuffer:8*1024*1024})).stdout),n=async()=>i?JSON.parse((await $e(i.parent,i.name,i.identity,["-e","const fs=require('node:fs');process.stdout.write(JSON.stringify({manifest:fs.readFileSync('config/release-gates.v2.json','utf8'),runner:fs.readFileSync('scripts/test-root.mjs','utf8')}));"])).toString("utf8")):{manifest:await F(p(t,"config","release-gates.v2.json"),"utf8"),runner:await F(p(t,"scripts","test-root.mjs"),"utf8")};if((await r(["rev-parse","HEAD"])).trim()!==e.headSha)throw new Error("p205-transient-head-mismatch");const{manifest:o,runner:s}=await n(),[u,c]=await Promise.all([r(["show",`${e.headSha}:config/release-gates.v2.json`]),r(["show",`${e.headSha}:scripts/test-root.mjs`])]);if(o!==u||s!==c)throw new Error("p205-transient-producer-dirty");const d=JSON.parse(o),S=Array.isArray(d.requiredCompleteClasses)?d.requiredCompleteClasses.filter(A=>typeof A=="string"&&/^[a-z0-9-]+$/.test(A)):[];if(d.contract!=="P205-CI-02"||S.length===0)throw new Error("p205-transient-manifest-invalid");const l=i?(await $e(i.parent,i.name,i.identity,["scripts/test-root.mjs","--gate","complete"])).toString("utf8"):String((await k(process.execPath,["scripts/test-root.mjs","--gate","complete"],{cwd:t,encoding:"utf8",maxBuffer:64*1024*1024})).stdout),{manifest:y,runner:v}=await n();if(y!==o||v!==s)throw new Error("p205-transient-producer-raced");if((await r(["rev-parse","HEAD"])).trim()!==e.headSha)throw new Error("p205-transient-head-raced");const G=m("sha256").update(o).digest("hex"),$=m("sha256").update(l).digest("hex"),Y=ie(e.nowIso??new Date().toISOString()),V=m("sha256").update(["p205-transient-execution-v1",O,e.headSha,e.graphRevision,G,S.join(","),$,Y].join("\0")).digest("hex"),ae=Object.freeze({schemaVersion:1,kind:"p205_transient_execution_authority",contract:"P205-CI-02",command:O,executionHeadSha:e.headSha,graphRevision:e.graphRevision,manifestDigest:G,gateIds:Object.freeze(S),resultDigest:$,executedAt:Y,executionEvidenceDigest:V}),ge=Object.freeze(Object.create(null));return Le.set(ge,ae),ge}async function Be(t,e={}){const i=await Rt(t);return Ke(i,e)}function mt(t,e={}){let i;try{const r=X("git",["rev-parse","--git-common-dir"],{cwd:t,encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim(),n=we(t),a=ee(r)?h(r):h(n,r),o=we(a);if(o!==a)throw new Error("git-lifecycle-common-dir-symlink");Nt(o);const s=p(o,ce),u=p(s,oe);if(L(s)&&(We(s,"directory"),we(s)!==s))throw new Error("git-lifecycle-runtime-directory-symlink");i=L(u)?u:p(o,Se)}catch{if(e.required)throw new Error("git-lifecycle-common-dir-invalid");return Ee()}if(!L(i)){if(e.required)throw new Error("git-lifecycle-runtime-missing");return Ee()}return We(i,"file"),xe(JSON.parse(Oe(i,"utf8")))}async function fi(t){try{await Be(t,{required:!0});return}catch(e){if(!(e instanceof Error)||e.message!=="git-lifecycle-runtime-missing")throw e}try{await pt(t,()=>{},{expectedRevision:0})}catch(e){if(!(e instanceof Error)||e.message!=="git-lifecycle-runtime-revision-conflict")throw e;await Be(t,{required:!0})}}async function pt(t,e,i={}){const r=await De(t),n=await Me(r),a=p(n,ht),o=await Zt(a);try{const s=p(n,oe),u=p(r,Se),c=await Ke(L(s)?s:u);if(i.expectedRevision!==void 0&&i.expectedRevision!==c.revision)throw new Error("git-lifecycle-runtime-revision-conflict");const d=structuredClone(c),S=e(d),l=xe({...d,schemaVersion:1,revision:c.revision+1});return await i.preCommit?.(l),await q(n,"directory"),await Ot(s),await st(n,oe,`${JSON.stringify(l,null,2)}
2
+ `),await q(s,"file"),await yt(n),{document:l,value:S}}finally{await Ut(a,o).catch(()=>{})}}async function yt(t){let e;try{e=await rt(t,"r")}catch(i){if(process.platform==="win32"&&(I(i,"EPERM")||I(i,"EISDIR")||I(i,"EINVAL")))return;throw i}try{await e.sync()}finally{await e.close()}}function ui(t,e){const i=structuredClone(t),r=qe(i,"epics"),n=qe(i,"stories");for(const[a,o]of Object.entries(e.epics))r[a]={...f(r[a])??{},...structuredClone(o)};for(const[a,o]of Object.entries(e.stories))n[a]={...f(n[a])??{},...structuredClone(o)};return i}function qe(t,e){const i=t[e];if(i===void 0){const a={};return t[e]=a,a}const r=f(i);if(r)return r;if(!Array.isArray(i))throw new Error(`git-lifecycle-tracked-${e}-invalid`);const n={};for(const a of i){const o=f(a),s=typeof o?.id=="string"?o.id.trim():"";if(!s||n[s]!==void 0)throw new Error(`git-lifecycle-tracked-${e}-ambiguous`);n[s]=o}return t[e]=n,n}function gi(t,e){return t.epics[e]??(t.epics[e]={})}function li(t,e){return t.stories[e]??(t.stories[e]={})}function je(t,e,i,r){const n=f(t);return!!(n&&n.epicId===i&&n.branch===r&&n.qaVerdict==="passed"&&n.reviewVerdict==="approved"&&Ye(n,e))}async function hi(t,e,i,r,n,a,o=[]){return bt(t,e,i,r,n,a,o).verdict==="verified"}function bt(t,e,i,r,n,a,o=[],s=new Date().toISOString()){const u=()=>It({storyId:i,epicId:r,executionBranch:n,value:e,verifiedAt:s,verdict:"rejected",reasonCode:"checkpoint-git-physical-invalid"});try{if(!je(e,i,r,n))return u();const c=f(e),d=f(c.qaReceipt),S=f(c.reviewReceipt),l=String(c.headSha),y=String(c.baseSha),v=B(t,["rev-parse",`refs/heads/${n}`]).trim();X("git",["merge-base","--is-ancestor",l,v],{cwd:t,stdio:"ignore"});const N=B(t,["show","--no-patch","--format=%H%n%P%n%B",l]),G=B(t,["rev-parse",`${l}^`]).trim(),$=B(t,["rev-list","--count",`${y}..${l}`]).trim();if(G!==y||$!=="1")return u();const Y=new Set(N.split(`
3
+ `).map(j=>j.trim())),ae=[`Neocortex-Story: ${i}`,`Neocortex-Epic: ${r}`,`Neocortex-Execution-Branch: ${n}`,`Neocortex-Bundle-Digest: ${String(c.bundleDigest)}`,`Neocortex-Graph-Revision: ${String(c.graphRevision)}`,...c.dispatchId?[`Neocortex-Dispatch: ${String(c.dispatchId)}`]:[],...c.bundleId?[`Neocortex-Bundle: ${String(c.bundleId)}`]:[],...c.claimRevision?[`Neocortex-Claim-Revision: ${String(c.claimRevision)}`]:[]].every(j=>Y.has(j));if(ae){const Ce=[...Y].find(tt=>tt.startsWith("Neocortex-Prepared-Base: "))?.slice(25)??"";if(!/^[a-f0-9]{40,64}$/i.test(Ce))return u();X("git",["merge-base","--is-ancestor",Ce,l],{cwd:t,stdio:"ignore"})}const A=B(t,["diff-tree","--no-commit-id","--name-only","-r","-z",l]).split("\0").filter(Boolean);if(A.length===0||A.some(j=>!de(j)))return u();const le=m("sha256").update(N).digest("hex"),he=m("sha256").update([...A].sort().join("\0")).digest("hex"),C=ze({checkpoint:c,storyId:i,epicId:r,executionBranch:n,baseSha:y,headSha:l,commitBodyDigest:le,changedPathsDigest:he,changedPaths:A,authorizedWriteSet:o.length>0?o:vt(t,i)});if(!C||d.receiptRef!==`story-qa:${String(d.sourceEvidenceDigest)}`)return u();const Ie=Et({storyId:i,baseSha:y,headSha:l,bundleDigest:String(c.bundleDigest),graphRevision:String(c.graphRevision),commitBody:N,changedPaths:A}),Re=d.evidenceVersion==="p205-execution-v2"&&d.contract==="P205-CI-02"&&d.command===O&&g(d.manifestDigest)&&P(d.gateIds,32,!0)&&g(d.resultDigest)&&d.sourceEvidenceDigest===_t({gitEvidenceDigest:Ie,headSha:l,graphRevision:String(c.graphRevision),manifestDigest:String(d.manifestDigest),gateIds:d.gateIds,resultDigest:String(d.resultDigest)}),Ue=d.evidenceVersion==="git-immutable-v1"&&d.sourceEvidenceDigest===Ie,Xe=d.evidenceVersion===void 0&&C.mode==="legacy-migration"&&C.binding?.qaDigest===d.sourceEvidenceDigest,me=wt(a,v,String(c.graphRevision))&&(Re||C.mode==="legacy-migration"&&(Ue||Xe)),pe=a===void 0&&Re;if(!me&&!pe)return u();const Ae=m("sha256").update(["root-commit-range-review-v1",i,y,l,String(c.bundleDigest),String(c.graphRevision),String(d.receiptRef),m("sha256").update(N).digest("hex"),[...A].sort().join(",")].join("\0")).digest("hex");if(S.sourceEvidenceDigest!==Ae||S.receiptRef!==`story-review:${Ae}`||C.mode==="legacy-migration"&&C.binding?.reviewDigest!==void 0&&C.binding.reviewDigest!==S.sourceEvidenceDigest||!ae&&(Ve[i]!==l||!Array.isArray(c.receiptRefs)||!c.receiptRefs.some(j=>typeof j=="string"&&j.startsWith("legacy-direct-yolo:"))))return u();const et=m("sha256").update(["checkpoint-p205-transient-v1",i,r,n,y,l,String(c.bundleDigest),le,he,C.mode,C.effectiveClaimRevision,String(d.sourceEvidenceDigest),String(S.sourceEvidenceDigest),te(a)?.executionEvidenceDigest??(pe?"maintenance-git-verification":"legacy-bounded-authority")].join("\0")).digest("hex"),J=me?te(a):void 0;return Object.freeze({schemaVersion:1,kind:"story_checkpoint_physical_verification",producer:"client-p205-transient-v1",storyId:i,epicId:r,branch:n,baseSha:y,headSha:l,aggregateHeadSha:J?.executionHeadSha??l,commitBodyDigest:le,changedPathsDigest:he,claimVerification:C.mode,effectiveClaimRevision:C.effectiveClaimRevision,sourceEvidenceDigest:et,command:O,manifestDigest:J?.manifestDigest??"0".repeat(64),gateIds:J?.gateIds??Object.freeze(["legacy-bounded"]),resultDigest:J?.resultDigest??"0".repeat(64),graphRevision:String(c.graphRevision),executionEvidenceDigest:J?.executionEvidenceDigest??"0".repeat(64),verifiedAt:J?.executedAt??ie(s),verdict:"verified",reasonCodes:Object.freeze([me?"checkpoint-p205-transient-verified":pe?"checkpoint-git-maintenance-verified":"checkpoint-legacy-bounded-verified",...C.mode==="legacy-migration"?["checkpoint-legacy-migration-verified"]:[]]),publicSafe:!0})}catch{return u()}}function wt(t,e,i){const r=te(t);return!!(r&&r.schemaVersion===1&&r.kind==="p205_transient_execution_authority"&&r.contract==="P205-CI-02"&&r.command===O&&r.graphRevision===i&&g(r.resultDigest)&&g(r.executionEvidenceDigest)&&r.executionHeadSha===e&&w(e))}function te(t){return t&&typeof t=="object"?Le.get(t):void 0}function mi(t){const e=te(t);return e?Object.freeze({executionHeadSha:e.executionHeadSha,graphRevision:e.graphRevision,manifestDigest:e.manifestDigest,gateIds:Object.freeze([...e.gateIds]),resultDigest:e.resultDigest,executedAt:e.executedAt,executionEvidenceDigest:e.executionEvidenceDigest}):void 0}function pi(t,e,i){const r=te(t);return!!(r&&r.executionHeadSha===e&&r.graphRevision===i&&r.command===O)}function ze(t){const e=lt[t.storyId],i=typeof t.checkpoint.claimRevision=="string"?t.checkpoint.claimRevision:void 0,r=t.storyId==="P174.03.811759"||t.storyId==="P174.03.685003",n=St(t.authorizedWriteSet),a=n.length>0&&n.length===t.authorizedWriteSet.length&&t.changedPaths.every(o=>n.some(s=>xt(s,o)));if(e&&t.epicId==="P174"&&t.executionBranch==="epic/P174"&&t.baseSha===e.baseSha&&t.headSha===e.headSha&&t.checkpoint.graphRevision===e.graphRevision&&t.commitBodyDigest===e.commitBodyDigest&&t.changedPathsDigest===e.changedPathsDigest&&(r?i===void 0:i===e.effectiveClaimRevision))return t.authorizedWriteSet.length>0&&(!a||!He(e.effectiveClaimRevision,n))?void 0:Object.freeze({mode:"legacy-migration",effectiveClaimRevision:e.effectiveClaimRevision,binding:e});if(i!==void 0&&!(!i||!g(i))&&!(!a||!He(i,n)))return Object.freeze({mode:"canonical",effectiveClaimRevision:i})}function St(t){const e=t.map(i=>i.replaceAll("\\","/").replace(/^\.\//,"").replace(/\/{2,}/g,"/"));return e.some(i=>!de(i))?Object.freeze([]):Object.freeze([...new Set(e)].sort())}function vt(t,e){try{const i=JSON.parse(Oe(p(t,".neocortex","state.json"),"utf8")),r=f(i.stories),n=f(r?.[e]),a=mt(t),o=f(a.stories[e]?.checkpoint)??f(n?.checkpoint);return Dt(e,n,o)}catch{return[]}}function Dt(t,e,i){const r=Array.isArray(e?.files_to_modify)?e.files_to_modify.filter(n=>typeof n=="string"):[];if(!i?.dispatchId||!i.bundleId)return r;try{return ot({...e,id:t,files_to_modify:r})}catch{return[]}}function He(t,e){return t===m("sha256").update(e.join("\0")).digest("hex")||t===m("sha256").update(JSON.stringify(e)).digest("hex")}function xt(t,e){return t===e||t.endsWith("/")&&e.startsWith(t)}function yi(t,e,i,r,n,a){try{if(!je(e,i,r,n))return!1;const o=f(e),s=f(o.qaReceipt),u=f(o.reviewReceipt),c=String(o.headSha),d=String(o.baseSha),S=B(t,["rev-parse",`refs/heads/${n}`]).trim();if(X("git",["merge-base","--is-ancestor",c,S],{cwd:t,stdio:"ignore"}),B(t,["rev-parse",`${c}^`]).trim()!==d||B(t,["rev-list","--count",`${d}..${c}`]).trim()!=="1")return!1;const l=B(t,["show","--no-patch","--format=%H%n%P%n%B",c]),y=B(t,["diff-tree","--no-commit-id","--name-only","-r","-z",c]).split("\0").filter(Boolean);if(y.length===0||y.some(N=>!de(N)))return!1;const v=ze({checkpoint:o,storyId:i,epicId:r,executionBranch:n,baseSha:d,headSha:c,changedPaths:y,authorizedWriteSet:a,commitBodyDigest:m("sha256").update(l).digest("hex"),changedPathsDigest:m("sha256").update([...y].sort().join("\0")).digest("hex")});return!(v?.mode!=="legacy-migration"||!v.binding||s.sourceEvidenceDigest!==v.binding.qaDigest||s.receiptRef!==`story-qa:${v.binding.qaDigest}`||u.sourceEvidenceDigest!==v.binding.reviewDigest||u.receiptRef!==`story-review:${v.binding.reviewDigest}`||u.qaReceiptRef!==s.receiptRef)}catch{return!1}}function Et(t){return m("sha256").update(["local-yolo-tdd-git-immutable-v1",t.storyId,t.baseSha,t.headSha,t.bundleDigest,t.graphRevision,m("sha256").update(t.commitBody).digest("hex"),m("sha256").update([...t.changedPaths].sort().join("\0")).digest("hex")].join("\0")).digest("hex")}function _t(t){return m("sha256").update(["local-yolo-tdd-p205-execution-v2",O,t.gitEvidenceDigest,t.headSha,t.graphRevision,t.manifestDigest,t.gateIds.join(","),t.resultDigest].join("\0")).digest("hex")}function It(t){const e=f(t.value);return Object.freeze({schemaVersion:1,kind:"story_checkpoint_physical_verification",producer:"client-p205-transient-v1",storyId:t.storyId,epicId:t.epicId,branch:t.executionBranch,baseSha:w(e?.baseSha)?String(e?.baseSha):"0".repeat(40),headSha:w(e?.headSha)?String(e?.headSha):"0".repeat(40),aggregateHeadSha:"0".repeat(40),commitBodyDigest:"0".repeat(64),changedPathsDigest:"0".repeat(64),claimVerification:"canonical",effectiveClaimRevision:"0".repeat(64),command:O,manifestDigest:"0".repeat(64),gateIds:Object.freeze([]),resultDigest:"0".repeat(64),graphRevision:"0".repeat(64),executionEvidenceDigest:"0".repeat(64),sourceEvidenceDigest:"0".repeat(64),verifiedAt:ie(t.verifiedAt),verdict:t.verdict,reasonCodes:Object.freeze([t.reasonCode]),publicSafe:!0})}function B(t,e){return X("git",[...e],{cwd:t,encoding:"utf8",maxBuffer:32*1024*1024})}function ie(t){return Number.isFinite(Date.parse(t))?new Date(Date.parse(t)).toISOString():new Date().toISOString()}async function bi(t,e){if(Ve[e.storyId]!==e.headSha)return;const i=[".neocortex/state.json",`.neocortex/stories/${e.storyId}/qa-gate-result.json`,`.neocortex/stories/${e.storyId}/validation-evidence.md`,`.neocortex/stories/${e.storyId}/review.md`,`docs/stories/${e.storyId}.story.md`];try{const r=(await k("git",["rev-parse",`refs/heads/${e.executionBranch}`],{cwd:t,encoding:"utf8",maxBuffer:1048576})).stdout.trim();if(await k("git",["merge-base","--is-ancestor",e.headSha,r],{cwd:t}),(await k("git",["rev-parse",`${e.headSha}^`],{cwd:t,encoding:"utf8",maxBuffer:1024*1024})).stdout.trim()!==e.baseSha)return;const a=String((await k("git",["diff","--binary","--full-index",`${e.baseSha}..${e.headSha}`],{cwd:t,encoding:"utf8",maxBuffer:32*1024*1024})).stdout);if(m("sha256").update(a).digest("hex")!==e.bundleDigest)return;const o=String((await k("git",["show","--no-patch","--format=%H%n%P%n%B",e.headSha],{cwd:t,encoding:"utf8",maxBuffer:4*1024*1024})).stdout);if(!String((await k("git",["show","--no-patch","--format=%s",e.headSha],{cwd:t,encoding:"utf8",maxBuffer:1024*1024})).stdout).trim().includes(e.storyId))return;const c=String((await k("git",["diff-tree","--no-commit-id","--name-only","-r","-z",e.headSha],{cwd:t,encoding:"utf8",maxBuffer:8*1024*1024})).stdout).split("\0").filter(Boolean);if(!i.every(V=>c.includes(V))||c.some(V=>!de(V)))return;const d=await Promise.all(i.map(async V=>String((await k("git",["show",`${e.headSha}:${V}`],{cwd:t,encoding:"utf8",maxBuffer:16*1024*1024})).stdout))),S=JSON.parse(d[0]),l=f(S.stories),y=f(S.epics),v=f(l?.[e.storyId]),N=f(y?.[e.epicId]),G=Array.isArray(v?.steps_completed)?v.steps_completed:[],$=JSON.parse(d[1]);return v?.status!=="done"||!G.includes(ut)||!G.includes(gt)||N?.branch_mode!=="epic"||N.execution_branch!==e.executionBranch||$.storyId!==e.storyId||$.status!=="qa-passed"||$.safeToContinueYoloop!==!0||!Array.isArray($.blockingChecks)||$.blockingChecks.length!==0||!d[2].includes(e.storyId)||!/P205[\s\S]{0,80}(pass|aprov)/i.test(d[2])||!d[3].includes(e.storyId)||!/approved|aprovado/i.test(d[3])||!d[4].includes(e.storyId)?void 0:`legacy-direct-yolo:${m("sha256").update(["legacy-direct-yolo-recovery-v1",e.storyId,e.epicId,e.executionBranch,e.baseSha,e.headSha,e.bundleDigest,e.graphRevision,m("sha256").update(o).digest("hex"),m("sha256").update([...c].sort().join("\0")).digest("hex"),...d.map(V=>m("sha256").update(V).digest("hex"))].join("\0")).digest("hex")}`}catch{return}}async function Rt(t){const e=await De(t),i=p(e,ce),r=p(i,oe);if(L(i)&&(await q(i,"directory"),await M(i)!==i))throw new Error("git-lifecycle-runtime-directory-symlink");return L(r)?r:p(e,Se)}async function Te(t){return Me(await De(t))}async function At(t,e){if(!/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/.test(e)||e.includes(".."))throw new Error("git-lifecycle-private-child-invalid");const i=h(t);await H(i);const r=h(i,e);return Z(i,r),L(r)||await Ne(i,e),await H(r,i),await H(i),r}async function b(t,e){const i=h(e),r=h(t);Z(i,r),await H(i),await H(r,i)}async function wi(t,e){await T(t,e)}async function K(t,e,i){const r=h(e),n=h(t);Z(r,n);try{await b(n,r)}catch(o){if(I(o,"ENOENT"))return!1;throw o}const a=h(r,`${n.slice(r.length+1)}.remove.${process.pid}.${Date.now()}.${ye(4).toString("hex")}`);return Z(r,a),await Q(r,E(n),E(a)),await b(a,r),i&&!await i(a)?(await re(a,n,r).catch(()=>{}),!1):(await ft(r,E(a)),!0)}async function re(t,e,i){await b(t,i);try{await be(e);return}catch(r){if(!I(r,"ENOENT"))throw r}await Q(i,E(t),E(e)),await b(e,i)}async function R(t){try{await b(t,z(t));const e=p(t,"owner.json");await T(e,t);const i=await F(e);return await T(e,t),m("sha256").update(i).digest("hex")}catch{return}}async function Si(t,e){const i=await Te(t),r=await At(i,"leases"),n=p(r,"integration"),a=`${n}.recovery`;if(L(a)){await b(a,r);const c=await Ge(a),d=await R(a);if(c===void 0||ue(c))return{ok:!1,reasonCode:"git-lifecycle-integration-backpressure"};if(!d||!await K(a,r,async S=>await R(S)===d))return{ok:!1,reasonCode:"git-lifecycle-integration-backpressure"}}const o=ie(e.createdAt??new Date().toISOString()),s=Object.freeze({schemaVersion:1,kind:e.kind,storyId:e.storyId,sessionId:e.sessionId,idempotencyKey:e.idempotencyKey,pid:process.pid,createdAt:o,expiresAt:ie(e.expiresAt),persistent:e.persistent,ownerNonce:e.ownerNonce??ye(16).toString("hex")});if(Date.parse(s.expiresAt)<=Date.parse(s.createdAt))return{ok:!1,reasonCode:"git-lifecycle-integration-lock-failed"};const u=async()=>{await H(r,i);try{return await Pe(r,E(n),`${JSON.stringify(s)}
4
+ `),await b(n,r),await T(p(n,"owner.json"),n),!0}catch(c){throw I(c,"EEXIST")||await K(n,r).catch(()=>{}),c}};try{return await u(),{ok:!0,owner:s,path:n}}catch(c){if(!I(c,"EEXIST"))return{ok:!1,reasonCode:"git-lifecycle-integration-lock-failed"}}try{const c=await ne(n),d=c?void 0:await Ge(n);if(c&&Fe(c,s))return{ok:!0,owner:c,path:n};if(c&&Date.parse(c.expiresAt)>Date.now()&&(c.persistent||ue(c.pid))||d!==void 0&&ue(d)||!c&&d===void 0&&await Qe(n))return{ok:!1,reasonCode:"git-lifecycle-integration-backpressure"};const l=await R(n);if(!l)return{ok:!1,reasonCode:"git-lifecycle-integration-lock-failed"};const y=`${n}.stale.${process.pid}.${Date.now()}`;await Q(r,E(n),E(y));try{if(await b(y,r),await R(y)!==l)return await re(y,n,r).catch(()=>{}),{ok:!1,reasonCode:"git-lifecycle-integration-backpressure"};await u()}finally{await K(y,r,async v=>await R(v)===l).catch(()=>{})}return{ok:!0,owner:s,path:n}}catch(c){return{ok:!1,reasonCode:I(c,"EEXIST")||I(c,"ENOENT")?"git-lifecycle-integration-backpressure":"git-lifecycle-integration-lock-failed"}}}async function vi(t,e){const i=await ne(t);return!!(i&&ve(i,e)&&Date.parse(i.expiresAt)>Date.now())}async function Ct(t,e){try{const i=z(t);await b(t,i);const r=await ne(t);if(!r||!ve(r,e))return!1;const n=await R(t);if(!n)return!1;const a=`${t}.release.${process.pid}.${Date.now()}`;await Q(i,E(t),E(a)),await b(a,i);const o=await ne(a);return!o||!ve(o,e)||await R(a)!==n?(await re(a,t,i).catch(()=>{}),!1):K(a,i,async s=>await R(s)===n)}catch(i){if(I(i,"ENOENT"))return!1;throw i}}function kt(t){return m("sha256").update(["git-lifecycle-physical-owner-v1",t.kind,t.storyId,t.sessionId,t.idempotencyKey,String(t.pid),t.createdAt,t.expiresAt,t.persistent?"persistent":"ephemeral",t.ownerNonce].join("\0")).digest("hex")}async function Di(t,e){if(!U(e.storyId)||!_(e.idempotencyKey)||!g(e.ownerDigest))return"foreign";const i=await Te(t),r=p(i,"leases"),n=p(r,"integration");if(!L(n))return"absent";try{await b(r,i),await b(n,r);const a=await ne(n);return!a||a.kind!=="direct"||a.storyId!==e.storyId||a.sessionId!==e.idempotencyKey||a.idempotencyKey!==e.idempotencyKey||a.persistent!==!0||kt(a)!==e.ownerDigest?"foreign":await Ct(n,a)?"released":"foreign"}catch{return"foreign"}}async function ne(t){try{await b(t,z(t));const e=p(t,"owner.json");await T(e,t);const i=JSON.parse(await F(e,"utf8"));return i.schemaVersion!==1||i.kind!=="direct"&&i.kind!=="continuous"||!U(i.storyId)||!_(i.sessionId)||!_(i.idempotencyKey)||!Number.isSafeInteger(i.pid)||Number(i.pid)<=0||!x(i.createdAt)||!x(i.expiresAt)||typeof i.persistent!="boolean"||typeof i.ownerNonce!="string"||!/^[a-f0-9]{32}$/.test(i.ownerNonce)?void 0:i}catch{return}}async function Ge(t){try{await b(t,z(t));const e=p(t,"owner.json");await T(e,t);const i=JSON.parse(await F(e,"utf8"));return Number.isSafeInteger(i.pid)&&Number(i.pid)>0?Number(i.pid):void 0}catch{return}}function Fe(t,e){return t.kind===e.kind&&t.storyId===e.storyId&&t.sessionId===e.sessionId&&t.idempotencyKey===e.idempotencyKey&&t.expiresAt===e.expiresAt&&t.persistent===e.persistent}function ve(t,e){return Fe(t,e)&&t.schemaVersion===e.schemaVersion&&t.pid===e.pid&&t.createdAt===e.createdAt&&t.ownerNonce===e.ownerNonce}async function De(t){const e=await M(t),r=(await k("git",["rev-parse","--git-common-dir"],{cwd:e,encoding:"utf8",maxBuffer:1024*1024})).stdout.trim(),n=ee(r)?h(r):h(e,r),a=await M(n);if(a!==n)throw new Error("git-lifecycle-common-dir-symlink");await Pt(a);const s=(await k("git",["rev-parse","--git-common-dir"],{cwd:e,encoding:"utf8",maxBuffer:1024*1024})).stdout.trim();if((ee(s)?h(s):h(e,s))!==n)throw new Error("git-lifecycle-common-dir-raced");return a}async function Me(t){const e=p(t,ce);if(L(e)||await Ne(t,ce),await q(e,"directory"),await M(e)!==e)throw new Error("git-lifecycle-runtime-directory-symlink");return e}async function Ke(t,e={}){try{return await q(t,"file"),xe(JSON.parse(await F(t,"utf8")))}catch(i){if(I(i,"ENOENT")){if(e.required)throw new Error("git-lifecycle-runtime-missing");return Ee()}throw i}}async function Ot(t){try{await q(t,"file")}catch(e){if(I(e,"ENOENT"))return;throw e}}async function q(t,e){const i=await be(t);if(i.isSymbolicLink())throw new Error(`git-lifecycle-${e}-symlink`);if(e==="file"?!i.isFile():!i.isDirectory())throw new Error(`git-lifecycle-${e}-invalid`);if(se()&&i.uid!==process.getuid())throw new Error(`git-lifecycle-${e}-ownership-mismatch`);if(se()&&(i.mode&63)!==0)throw new Error(`git-lifecycle-${e}-permissions-unsafe`)}function Z(t,e){const i=h(t),r=h(e),n=at(i,r);if(!n||n.startsWith("..")||ee(n)||z(r)!==i)throw new Error("git-lifecycle-private-path-escape")}async function H(t,e){const i=h(t);if(e&&Z(h(e),i),await q(i,"directory"),h(await M(i))!==i)throw new Error("git-lifecycle-directory-substituted");if(e){const r=h(e);if(await q(r,"directory"),h(await M(r))!==r)throw new Error("git-lifecycle-directory-parent-substituted")}}async function T(t,e){const i=h(t);if(Z(h(e),i),await H(h(e)),await q(i,"file"),h(await M(i))!==i)throw new Error("git-lifecycle-file-substituted")}function We(t,e){const i=ke(t);if(i.isSymbolicLink())throw new Error(`git-lifecycle-${e}-symlink`);if(e==="file"?!i.isFile():!i.isDirectory())throw new Error(`git-lifecycle-${e}-invalid`);if(se()&&i.uid!==process.getuid())throw new Error(`git-lifecycle-${e}-ownership-mismatch`);if(se()&&(i.mode&63)!==0)throw new Error(`git-lifecycle-${e}-permissions-unsafe`)}async function Pt(t){const e=await be(t);if(e.isSymbolicLink())throw new Error("git-lifecycle-common-dir-symlink");if(!e.isDirectory())throw new Error("git-lifecycle-common-dir-invalid")}function Nt(t){const e=ke(t);if(e.isSymbolicLink())throw new Error("git-lifecycle-common-dir-symlink");if(!e.isDirectory())throw new Error("git-lifecycle-common-dir-invalid")}function se(t=process.platform){return t!=="win32"&&typeof process.getuid=="function"}function xe(t){if(!t||typeof t!="object"||Array.isArray(t))throw new Error("git-lifecycle-runtime-invalid");const e=t;D(e,["schemaVersion","revision","epics","stories"],"git-lifecycle-runtime-unknown-field");const i=f(e.epics),r=f(e.stories);if(e.schemaVersion!==1||!Number.isSafeInteger(e.revision)||Number(e.revision)<0||!i||!r||Object.values(i).some(n=>!f(n))||Object.values(r).some(n=>!f(n)))throw new Error("git-lifecycle-runtime-invalid");for(const[n,a]of Object.entries(i))if(!U(n)||!Lt(a))throw new Error("git-lifecycle-runtime-epic-invalid");for(const[n,a]of Object.entries(r))if(!U(n)||!n.includes(".")||!Bt(a,n))throw new Error("git-lifecycle-runtime-story-invalid");return e}const $t=["branch_mode","execution_branch","origin_branch","branch_lease","origin_binding","graph_revision","aggregate_qa_receipt","terminal_git_receipt","physicalMergeStatus","pr_number","git_reconciliation_receipts","git_reconciliation_debt"],Vt=["checkpoint","status","last_step","steps_completed"];function Lt(t){return D(t,$t,"git-lifecycle-runtime-epic-unknown-field"),(t.branch_mode===void 0||t.branch_mode==="epic")&&(t.execution_branch===void 0||W(t.execution_branch))&&(t.origin_branch===void 0||W(t.origin_branch))&&(t.branch_lease===void 0||t.branch_lease===null||qt(t.branch_lease))&&(t.origin_binding===void 0||t.origin_binding===null||Ht(t.origin_binding))&&(t.graph_revision===void 0||g(t.graph_revision))&&(t.aggregate_qa_receipt===void 0||t.aggregate_qa_receipt===null||Tt(t.aggregate_qa_receipt))&&(t.terminal_git_receipt===void 0||t.terminal_git_receipt===null||Gt(t.terminal_git_receipt))&&(t.physicalMergeStatus===void 0||["merged","pushed","denied_external_gate","blocked_local_or_repo","not_attempted"].includes(String(t.physicalMergeStatus)))&&(t.pr_number===void 0||t.pr_number===null||Number.isSafeInteger(t.pr_number)&&Number(t.pr_number)>0)&&(t.git_reconciliation_receipts===void 0||Yt(t.git_reconciliation_receipts))&&(t.git_reconciliation_debt===void 0||Jt(t.git_reconciliation_debt))}function Bt(t,e){return D(t,Vt,"git-lifecycle-runtime-story-unknown-field"),(t.checkpoint===void 0||t.checkpoint===null||Ye(t.checkpoint,e))&&(t.status===void 0||_(t.status))&&(t.last_step===void 0||t.last_step===null||_(t.last_step))&&(t.steps_completed===void 0||P(t.steps_completed,128))}function qt(t){const e=f(t);return e?(D(e,["schemaVersion","ownerStoryId","sessionId","idempotencyKey","acquiredAt","expiresAt","handoffGrant","handoffConsumption"],"git-lifecycle-runtime-lease-unknown-field"),e.schemaVersion===1&&U(e.ownerStoryId)&&_(e.sessionId)&&_(e.idempotencyKey)&&x(e.acquiredAt)&&x(e.expiresAt)&&Date.parse(String(e.expiresAt))>Date.parse(String(e.acquiredAt))&&(e.handoffGrant===void 0||jt(e.handoffGrant,e))&&(e.handoffConsumption===void 0||zt(e.handoffConsumption,e))):!1}function jt(t,e){const i=f(t);return i?(D(i,["schemaVersion","kind","storyId","fromSessionId","tokenDigest","bundleDigest","claimRevision","expiresAt"],"git-lifecycle-runtime-handoff-grant-unknown-field"),i.schemaVersion===1&&i.kind==="direct-yolo-setup-handoff"&&i.storyId===e.ownerStoryId&&i.fromSessionId===e.sessionId&&g(i.tokenDigest)&&g(i.bundleDigest)&&g(i.claimRevision)&&x(i.expiresAt)&&Date.parse(String(i.expiresAt))<=Date.parse(String(e.expiresAt))):!1}function zt(t,e){const i=f(t);return i?(D(i,["schemaVersion","kind","state","storyId","fromSessionId","tokenDigest","bundleDigest","claimRevision","consumedBySessionId","consumedAt"],"git-lifecycle-runtime-handoff-consumption-unknown-field"),i.schemaVersion===1&&i.kind==="direct-yolo-setup-handoff-consumption"&&i.state==="consumed"&&i.storyId===e.ownerStoryId&&_(i.fromSessionId)&&g(i.tokenDigest)&&g(i.bundleDigest)&&g(i.claimRevision)&&i.consumedBySessionId===e.sessionId&&x(i.consumedAt)):!1}function Ht(t){const e=f(t);return e?(D(e,["schemaVersion","originBranch","originHeadSha","executionBranch","capturedFromCurrentCheckout","capturedAt"],"git-lifecycle-runtime-origin-unknown-field"),e.schemaVersion===1&&W(e.originBranch)&&W(e.executionBranch)&&e.originBranch!==e.executionBranch&&w(e.originHeadSha)&&e.capturedFromCurrentCheckout===!0&&x(e.capturedAt)):!1}function Tt(t){const e=f(t);if(!e)return!1;D(e,["schemaVersion","evidenceVersion","producer","contract","command","verdict","executionHeadSha","graphRevision","manifestDigest","resultDigest","checkedAt","receiptRef","gateIds"],"git-lifecycle-runtime-aggregate-qa-unknown-field");const i=e.evidenceVersion==="p205-execution-v2"&&e.producer==="local-yolo-tdd"&&e.contract==="P205-CI-02"&&e.command===O&&g(e.manifestDigest)&&g(e.resultDigest),r=e.evidenceVersion===void 0&&e.producer===void 0&&e.contract===void 0&&e.command===void 0&&e.manifestDigest===void 0&&e.resultDigest===void 0;return e.schemaVersion===1&&(i||r)&&e.verdict==="passed"&&w(e.executionHeadSha)&&g(e.graphRevision)&&x(e.checkedAt)&&fe(e.receiptRef)&&P(e.gateIds,128,!0)}function Gt(t){const e=f(t);return e?(D(e,["schemaVersion","epicId","executionBranch","originBranch","baseSha","executionHeadSha","mergeSha","pushedSha","strategy","prNumber","physicalStatus","localGateReceiptRefs","idempotencyKey","attemptStartedAt","completedAt","retryEligible","reasonCodes","publicSafe","candidateQa","providerGuard"],"git-lifecycle-runtime-terminal-receipt-unknown-field"),e.schemaVersion===1&&U(e.epicId)&&W(e.executionBranch)&&W(e.originBranch)&&w(e.baseSha)&&w(e.executionHeadSha)&&(e.mergeSha===void 0||w(e.mergeSha))&&(e.pushedSha===void 0||w(e.pushedSha))&&(e.strategy==="direct"||e.strategy==="single_pr")&&(e.candidateQa===void 0||Mt(e.candidateQa,e))&&(e.providerGuard===void 0||Ft(e.providerGuard,e))&&(e.prNumber===void 0||Number.isSafeInteger(e.prNumber)&&Number(e.prNumber)>0)&&["prepared","merged","pushed","denied_external_gate","blocked_local_or_repo"].includes(String(e.physicalStatus))&&P(e.localGateReceiptRefs,128,!0)&&_(e.idempotencyKey)&&x(e.attemptStartedAt)&&(e.completedAt===void 0||x(e.completedAt))&&typeof e.retryEligible=="boolean"&&P(e.reasonCodes,128)&&e.publicSafe===!0):!1}function Ft(t,e){const i=f(t);if(!i)return!1;D(i,["schemaVersion","provider","mode","source","prHeadSha","originHeadSha","checkedAt","publicSafe"],"git-lifecycle-runtime-provider-guard-unknown-field");const r=i.mode==="recovered_exact_tree"?i.source==="physical_recovery":i.mode==="strict_up_to_date_expected_head"&&["branch_protection","ruleset","branch_protection_and_ruleset"].includes(String(i.source));return i.schemaVersion===1&&i.provider==="github"&&r&&e.strategy==="single_pr"&&e.physicalStatus==="pushed"&&Number.isSafeInteger(e.prNumber)&&Number(e.prNumber)>0&&w(i.prHeadSha)&&i.prHeadSha===e.mergeSha&&w(i.originHeadSha)&&i.originHeadSha===e.baseSha&&x(i.checkedAt)&&i.publicSafe===!0}function Mt(t,e){const i=f(t);return i?(D(i,["schemaVersion","kind","contract","command","originHeadSha","executionHeadSha","mergeSha","treeSha","graphRevision","manifestDigest","resultDigest","gateIds","checkedAt","receiptRef"],"git-lifecycle-runtime-merge-candidate-unknown-field"),i.schemaVersion===1&&i.kind==="epic_merge_candidate_qa"&&i.contract==="P205-CI-02"&&i.command===O&&w(i.originHeadSha)&&i.originHeadSha===e.baseSha&&w(i.executionHeadSha)&&i.executionHeadSha===e.executionHeadSha&&w(i.mergeSha)&&i.mergeSha===e.mergeSha&&w(i.treeSha)&&g(i.graphRevision)&&g(i.manifestDigest)&&g(i.resultDigest)&&P(i.gateIds,128,!0)&&x(i.checkedAt)&&fe(i.receiptRef)):!1}function Ye(t,e){const i=f(t);if(!i)return!1;D(i,["schemaVersion","storyId","epicId","branch","baseSha","headSha","commits","idempotencyKey","dispatchId","bundleId","bundleDigest","graphRevision","claimRevision","receiptRefs","qaVerdict","reviewVerdict","qaReceipt","reviewReceipt","recordedAt"],"git-lifecycle-runtime-checkpoint-unknown-field");const r=String(e).split(".")[0];return i.schemaVersion===1&&i.storyId===e&&i.epicId===r&&W(i.branch)&&w(i.baseSha)&&w(i.headSha)&&i.baseSha!==i.headSha&&Qt(i.commits)&&i.commits.length===1&&i.commits[0]===i.headSha&&_(i.idempotencyKey)&&(i.dispatchId===void 0||g(i.dispatchId))&&(i.bundleId===void 0||g(i.bundleId))&&g(i.bundleDigest)&&g(i.graphRevision)&&(i.claimRevision===void 0||g(i.claimRevision))&&P(i.receiptRefs,256,!0)&&(i.qaVerdict==="passed"||i.qaVerdict==="blocked")&&["approved","changes-requested","pending"].includes(String(i.reviewVerdict))&&Kt(i.qaReceipt,i)&&(i.reviewVerdict==="pending"?i.reviewReceipt===void 0:Wt(i.reviewReceipt,i))&&x(i.recordedAt)}function Kt(t,e){const i=f(t);return i?(D(i,["schemaVersion","kind","producer","evidenceVersion","storyId","epicId","baseSha","headSha","bundleDigest","graphRevision","contract","command","manifestDigest","gateIds","resultDigest","sourceEvidenceDigest","verdict","checkedAt","receiptRef"],"git-lifecycle-runtime-story-qa-unknown-field"),i.schemaVersion===1&&i.kind==="story_qa_evidence"&&i.producer==="local-yolo-tdd"&&(i.evidenceVersion===void 0||i.evidenceVersion==="git-immutable-v1"||i.evidenceVersion==="p205-execution-v2"&&i.contract==="P205-CI-02"&&i.command===O&&g(i.manifestDigest)&&P(i.gateIds,32,!0)&&g(i.resultDigest))&&Je(i,e)&&g(i.sourceEvidenceDigest)&&i.verdict===e.qaVerdict&&(i.verdict==="passed"||i.verdict==="blocked")&&x(i.checkedAt)&&fe(i.receiptRef)&&e.receiptRefs.includes(i.receiptRef)):!1}function Wt(t,e){const i=f(t),r=f(e.qaReceipt);return!i||!r?!1:(D(i,["schemaVersion","kind","producer","storyId","epicId","baseSha","headSha","bundleDigest","graphRevision","sourceEvidenceDigest","qaReceiptRef","verdict","reviewedAt","receiptRef"],"git-lifecycle-runtime-story-review-unknown-field"),i.schemaVersion===1&&i.kind==="story_review_evidence"&&i.producer==="root-commit-range-review"&&Je(i,e)&&g(i.sourceEvidenceDigest)&&i.qaReceiptRef===r.receiptRef&&i.receiptRef!==r.receiptRef&&(i.verdict==="approved"||i.verdict==="changes-requested")&&(i.verdict==="approved"?e.reviewVerdict==="approved":e.reviewVerdict==="changes-requested")&&x(i.reviewedAt)&&Date.parse(String(i.reviewedAt))>=Date.parse(String(r.checkedAt))&&fe(i.receiptRef)&&e.receiptRefs.includes(i.receiptRef))}function Je(t,e){return["storyId","epicId","baseSha","headSha","bundleDigest","graphRevision"].every(i=>t[i]===e[i])}function Yt(t){return!Array.isArray(t)||t.length>1024?!1:t.every(e=>{const i=f(e);return i?(D(i,["schemaVersion","resourceId","action","outcome","idempotencyKey","reasonCodes","recordedAt","publicSafe"],"git-lifecycle-runtime-reconciliation-receipt-unknown-field"),i.schemaVersion===1&&_(i.resourceId)&&["no_op","delete_local_branch","delete_remote_branch","close_pull_request"].includes(String(i.action))&&["applied","already_absent","dry_run","failed"].includes(String(i.outcome))&&_(i.idempotencyKey)&&P(i.reasonCodes,128)&&x(i.recordedAt)&&i.publicSafe===!0):!1})}function Jt(t){return!Array.isArray(t)||t.length>1024?!1:t.every(e=>{const i=f(e);return i?(D(i,["schemaVersion","resourceId","action","managed","reasonCodes","evidence","publicSafe"],"git-lifecycle-runtime-reconciliation-debt-unknown-field"),i.schemaVersion===1&&_(i.resourceId)&&i.action==="preserve"&&typeof i.managed=="boolean"&&P(i.reasonCodes,128)&&P(i.evidence,16)&&i.publicSafe===!0):!1})}function D(t,e,i){const r=new Set(e);if(Object.keys(t).some(n=>!r.has(n)))throw new Error(i)}function U(t){return typeof t=="string"&&/^P[1-9][0-9]*(?:\.[0-9]+)*$/.test(t)}function W(t){return typeof t=="string"&&/^[A-Za-z0-9][A-Za-z0-9._/-]{0,239}$/.test(t)&&!t.includes("..")&&!t.includes("//")&&!t.includes("@{")&&!t.endsWith("/")&&!t.endsWith(".")&&!t.split("/").some(e=>!e||e.startsWith(".")||e.endsWith(".lock"))}function de(t){return t.length>0&&t.length<=1024&&!ee(t)&&!t.includes("\0")&&!t.replaceAll("\\","/").split("/").includes("..")}function _(t){return typeof t=="string"&&t.length>0&&t.length<=240&&/^[A-Za-z0-9._:/#\-[\]]+$/.test(t)&&!t.includes("..")}function fe(t){return _(t)}function w(t){return typeof t=="string"&&/^[a-f0-9]{40,64}$/i.test(t)}function g(t){return typeof t=="string"&&/^[a-f0-9]{64}$/i.test(t)}function x(t){return typeof t=="string"&&t.length<=64&&Number.isFinite(Date.parse(t))}function P(t,e,i=!1){return Array.isArray(t)&&t.length<=e&&(!i||t.length>0)&&t.every(_)}function Qt(t){return Array.isArray(t)&&t.length>0&&t.length<=256&&t.every(w)}function Ee(){return{schemaVersion:1,revision:0,epics:{},stories:{}}}async function Zt(t){const e=z(t),i={pid:process.pid,nonce:ye(16).toString("hex")},r=async()=>{await H(e),await Pe(e,E(t),JSON.stringify(i));try{await b(t,e),await T(p(t,"owner.json"),t)}catch(n){throw await K(t,e).catch(()=>{}),n}};try{await r()}catch(n){if(!I(n,"EEXIST"))throw n;await q(t,"directory");const a=await _e(t);if(a!==void 0&&ue(a.pid))throw new Error("git-lifecycle-runtime-lock-active");if(a===void 0&&await Qe(t))throw new Error("git-lifecycle-runtime-lock-active");const o=await R(t);if(!o)throw new Error("git-lifecycle-runtime-lock-owner-invalid");const s=`${t}.stale.${process.pid}.${Date.now()}`;await Q(e,E(t),E(s));try{if(await b(s,e),await R(s)!==o)throw await re(s,t,e).catch(()=>{}),new Error("git-lifecycle-runtime-lock-owner-replaced");await r()}finally{await K(s,e,async u=>await R(u)===o).catch(()=>{})}}return i}async function Ut(t,e){const i=z(t);try{await b(t,i);const r=await _e(t);if(!r||!Ze(r,e))return!1;const n=await R(t);if(!n)return!1;const a=`${t}.release.${process.pid}.${Date.now()}`;await Q(i,E(t),E(a)),await b(a,i);const o=await _e(a);return!o||!Ze(o,e)||await R(a)!==n?(await re(a,t,i).catch(()=>{}),!1):K(a,i,async s=>await R(s)===n)}catch(r){if(I(r,"ENOENT"))return!1;throw r}}async function Qe(t){try{return Date.now()-(await nt(t)).mtimeMs<3e4}catch{return!0}}async function _e(t){try{await b(t,z(t));const e=p(t,"owner.json");await T(e,t);const i=JSON.parse(await F(e,"utf8"));return Number.isSafeInteger(i.pid)&&Number(i.pid)>0&&(i.nonce===void 0||typeof i.nonce=="string"&&/^[a-f0-9]{32}$/.test(i.nonce))?{pid:Number(i.pid),...typeof i.nonce=="string"?{nonce:i.nonce}:{}}:void 0}catch{return}}function Ze(t,e){return t.pid===e.pid&&t.nonce!==void 0&&t.nonce===e.nonce}function ue(t){try{return process.kill(t,0),!0}catch(e){return I(e,"EPERM")}}function f(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:void 0}function I(t,e){return t instanceof Error&&"code"in t&&t.code===e}export{ce as GIT_LIFECYCLE_RUNTIME_DIRECTORY,oe as GIT_LIFECYCLE_RUNTIME_FILE,Ve as LEGACY_DIRECT_YOLO_RECOVERY_COMMITS,lt as LEGACY_P174_CHECKPOINT_MIGRATIONS,O as P205_COMPLETE_COMMAND,Si as acquireGitLifecyclePhysicalIntegrationLock,ui as applyGitLifecycleRuntimeOverlay,b as assertGitLifecyclePrivateDirectory,wi as assertGitLifecyclePrivateFile,kt as computeGitLifecyclePhysicalIntegrationLockOwnerDigest,Et as computeImmutableStoryQaEvidenceDigest,bi as computeLegacyDirectYoloRecoveryReceiptRef,_t as computeP205StoryQaEvidenceDigest,At as ensureGitLifecyclePrivateChildDirectory,fi as ensureGitLifecycleRuntimeInitialized,gi as ensureRuntimeEpic,li as ensureRuntimeStory,di as executeP205TransientAuthority,Te as gitLifecycleRuntimeDirectory,Dt as gitLifecycleStoryWriteSet,je as isAcceptedGitLifecycleStoryCheckpoint,pt as mutateGitLifecycleRuntime,pi as p205TransientAuthorityMatchesAggregate,se as posixSecurityAvailable,mi as projectP205TransientExecutionEvidence,Be as readGitLifecycleRuntime,mt as readGitLifecycleRuntimeSync,Ct as releaseGitLifecyclePhysicalIntegrationLock,Di as releaseGitLifecyclePhysicalIntegrationLockForCheckpoint,K as removeGitLifecyclePrivateDirectory,hi as verifyAcceptedGitLifecycleStoryCheckpoint,bt as verifyAcceptedGitLifecycleStoryCheckpointSync,vi as verifyGitLifecyclePhysicalIntegrationLock,yi as verifyLegacyCheckpointMigrationCandidateSync};
@@ -1,4 +1,4 @@
1
- # 🧠 Neocortex v4.60.25 | OrNexus Team
1
+ # 🧠 Neocortex v4.60.26 | OrNexus Team
2
2
 
3
3
  This project uses Neocortex, a Development Orchestrator.
4
4
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: neocortex
3
- description: "🧠 Neocortex v4.60.25 | OrNexus Team"
3
+ description: "🧠 Neocortex v4.60.26 | OrNexus Team"
4
4
  ---
5
5
 
6
6
  <!--
@@ -4,7 +4,7 @@ agent:
4
4
  name: 'Neocortex Root Agent'
5
5
  title: 'Development Orchestrator (Root)'
6
6
  icon: '>'
7
- version: '4.60.25'
7
+ version: '4.60.26'
8
8
  architecture: 'thin-client'
9
9
  module: stand-alone
10
10
  hasSidecar: false
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: neocortex-root
3
- description: "🧠 Neocortex Root Agent v4.60.25 | OrNexus Team"
3
+ description: "🧠 Neocortex Root Agent v4.60.26 | OrNexus Team"
4
4
  model: opus
5
5
  color: blue
6
6
  tools:
@@ -108,7 +108,7 @@ SEMPRE que este agente for invocado, imprima o banner abaixo como PRIMEIRO outpu
108
108
  ┌────────────────────────────────────────────────────────────┐
109
109
  │ │
110
110
  │ ####### N E O C O R T E X │
111
- │ ### ######## v4.60.25
111
+ │ ### ######## v4.60.26
112
112
  │ ######### ##### │
113
113
  │ ## ############## Development Orchestrator │
114
114
  │ ## ### ###### ## OrNexus Team │
@@ -4,7 +4,7 @@ agent:
4
4
  name: 'Neocortex'
5
5
  title: 'Development Orchestrator'
6
6
  icon: '>'
7
- version: '4.60.25'
7
+ version: '4.60.26'
8
8
  architecture: 'thin-client'
9
9
  module: stand-alone
10
10
  hasSidecar: false
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: neocortex
3
- description: "🧠 Neocortex v4.60.25 | OrNexus Team"
3
+ description: "🧠 Neocortex v4.60.26 | OrNexus Team"
4
4
  model: opus
5
5
  color: blue
6
6
  permissionMode: bypassPermissions
@@ -104,7 +104,7 @@ SEMPRE que este agente for invocado, imprima o banner abaixo como PRIMEIRO outpu
104
104
  ┌────────────────────────────────────────────────────────────┐
105
105
  │ │
106
106
  │ ####### N E O C O R T E X │
107
- │ ### ######## v4.60.25
107
+ │ ### ######## v4.60.26
108
108
  │ ######### ##### │
109
109
  │ ## ############## Development Orchestrator │
110
110
  │ ## ### ###### ## OrNexus Team │
@@ -28,7 +28,7 @@ Codex built-in commands or actions.
28
28
 
29
29
  <!-- END: Plugin Conflict Prevention -->
30
30
 
31
- # Neocortex v4.60.25 | OrNexus Team
31
+ # Neocortex v4.60.26 | OrNexus Team
32
32
 
33
33
  You are a Development Orchestrator. All orchestration logic is delivered by the remote Neocortex server.
34
34
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: neocortex
3
- description: "🧠 Neocortex v4.60.25 | OrNexus Team"
3
+ description: "🧠 Neocortex v4.60.26 | OrNexus Team"
4
4
  model: inherit
5
5
  readonly: false
6
6
  is_background: false
@@ -64,7 +64,7 @@ SEMPRE que este agente for invocado, imprima o banner abaixo como PRIMEIRO outpu
64
64
  ┌────────────────────────────────────────────────────────────┐
65
65
  │ │
66
66
  │ ####### N E O C O R T E X │
67
- │ ### ######## v4.60.25
67
+ │ ### ######## v4.60.26
68
68
  │ ######### ##### │
69
69
  │ ## ############## Development Orchestrator │
70
70
  │ ## ### ###### ## OrNexus Team │
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: neocortex-root
3
- description: "🧠 Neocortex v4.60.25 | OrNexus Team"
3
+ description: "🧠 Neocortex v4.60.26 | OrNexus Team"
4
4
  kind: local
5
5
  tools:
6
6
  # File operations (Gemini CLI built-ins)
@@ -62,7 +62,7 @@ SEMPRE que este agente for invocado, imprima o banner abaixo como PRIMEIRO outpu
62
62
  ┌────────────────────────────────────────────────────────────┐
63
63
  │ │
64
64
  │ ####### N E O C O R T E X │
65
- │ ### ######## v4.60.25
65
+ │ ### ######## v4.60.26
66
66
  │ ######### ##### │
67
67
  │ ## ############## Development Orchestrator │
68
68
  │ ## ### ###### ## OrNexus Team │
@@ -58,7 +58,7 @@ explicit server opt-in rather than a local assumption.
58
58
  ┌────────────────────────────────────────────────────────────┐
59
59
  │ │
60
60
  │ ####### N E O C O R T E X │
61
- │ ### ######## v4.60.25
61
+ │ ### ######## v4.60.26
62
62
  │ ######### ##### │
63
63
  │ ## ############## Development Orchestrator │
64
64
  │ ## ### ###### ## OrNexus Team │
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: "neocortex"
3
- description: "Neocortex v4.60.25 | OrNexus Team"
3
+ description: "Neocortex v4.60.26 | OrNexus Team"
4
4
  tools:
5
5
  # Read / Edit (built-in tool sets)
6
6
  - read
@@ -68,7 +68,7 @@ SEMPRE que este agente for invocado, imprima o banner abaixo como PRIMEIRO outpu
68
68
  ┌────────────────────────────────────────────────────────────┐
69
69
  │ │
70
70
  │ ####### N E O C O R T E X │
71
- │ ### ######## v4.60.25
71
+ │ ### ######## v4.60.26
72
72
  │ ######### ##### │
73
73
  │ ## ############## Development Orchestrator │
74
74
  │ ## ### ###### ## OrNexus Team │