@ornexus/neocortex 4.60.27 → 4.60.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/sbom.cdx.json +23 -23
- package/install.ps1 +1 -1
- package/install.sh +1 -1
- package/package.json +2 -2
- package/packages/client/dist/cli.js +0 -0
- package/packages/client/dist/commands/invoke.js +47 -46
- package/packages/client/dist/git/git-lifecycle-store.d.ts +13 -0
- package/packages/client/dist/git/git-lifecycle-store.js +4 -4
- package/packages/client/dist/runner-cli.js +0 -0
- package/packages/client/dist/state/project-state-snapshot.js +1 -1
- package/targets-stubs/antigravity/gemini.md +1 -1
- package/targets-stubs/antigravity/skill/SKILL.md +1 -1
- package/targets-stubs/claude-code/neocortex-root.agent.yaml +1 -1
- package/targets-stubs/claude-code/neocortex-root.md +2 -2
- package/targets-stubs/claude-code/neocortex.agent.yaml +1 -1
- package/targets-stubs/claude-code/neocortex.md +2 -2
- package/targets-stubs/codex/AGENTS.md +1 -1
- package/targets-stubs/cursor/agent.md +2 -2
- package/targets-stubs/gemini-cli/agent.md +2 -2
- package/targets-stubs/opencode/neocortex-root.md +1 -1
- package/targets-stubs/vscode/neocortex.agent.md +2 -2
|
@@ -39,6 +39,12 @@ export interface GitLifecycleReadOptions {
|
|
|
39
39
|
/** Epic-aware calls require the initialized sidecar; projectless calls opt out explicitly. */
|
|
40
40
|
readonly required?: boolean;
|
|
41
41
|
}
|
|
42
|
+
export interface GitLifecycleGraphAuthorityPersistenceResult {
|
|
43
|
+
readonly applied: boolean;
|
|
44
|
+
readonly reused: boolean;
|
|
45
|
+
readonly revision: number;
|
|
46
|
+
readonly graphRevision: string;
|
|
47
|
+
}
|
|
42
48
|
export interface GitLifecycleCheckpointVerification {
|
|
43
49
|
readonly schemaVersion: 1;
|
|
44
50
|
readonly kind: 'story_checkpoint_physical_verification';
|
|
@@ -93,6 +99,13 @@ export declare function readGitLifecycleRuntimeSync(projectRoot: string, options
|
|
|
93
99
|
* permission-unsafe paths continue to fail closed.
|
|
94
100
|
*/
|
|
95
101
|
export declare function ensureGitLifecycleRuntimeInitialized(projectRoot: string): Promise<void>;
|
|
102
|
+
/**
|
|
103
|
+
* Close the server-plan -> client -> P207 sidecar handoff. The authority is
|
|
104
|
+
* accepted only for the exact tracked epic/story/branch projection that the
|
|
105
|
+
* server selected. Tracked-state drift and sidecar revision races fail closed;
|
|
106
|
+
* no tracked, staged or working-tree bytes are modified.
|
|
107
|
+
*/
|
|
108
|
+
export declare function persistGitLifecycleGraphAuthority(projectRoot: string, authority: unknown, nowIso?: string): Promise<GitLifecycleGraphAuthorityPersistenceResult>;
|
|
96
109
|
export declare function mutateGitLifecycleRuntime<T>(projectRoot: string, mutate: (document: GitLifecycleRuntimeDocument) => T, options?: GitLifecycleMutationOptions): Promise<GitLifecycleMutationResult<T>>;
|
|
97
110
|
/** Merge the runtime overlay over tracked state without mutating either input. */
|
|
98
111
|
export declare function applyGitLifecycleRuntimeOverlay(tracked: Record<string, unknown>, runtime: GitLifecycleRuntimeDocument): Record<string, unknown>;
|
|
@@ -1,4 +1,4 @@
|
|
|
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
|
|
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&ℜ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
|
+
import{execFile as rt,execFileSync as X}from"node:child_process";import{createHash as y,randomBytes as ye}from"node:crypto";import{lstat as be,open as nt,readFile as H,realpath as Y,stat as at}from"node:fs/promises";import{existsSync as L,lstatSync as Oe,readFileSync as Pe,realpathSync as we}from"node:fs";import{basename as _,dirname as T,isAbsolute as ee,join as p,relative as ct,resolve as h}from"node:path";import{promisify as ot}from"node:util";import{publicWriteSet as st}from"../../../shared/dist/yoloop/public-story-write-set.js";import{anchoredAtomicWriteFile as dt,anchoredCreateOwnedDirectory as Ne,anchoredEnsureDirectory as $e,anchoredExecuteGit as ft,anchoredExecuteNode as Ve,anchoredRemoveDirectory as ut,anchoredRenameDirectory as Z}from"./secure-filesystem-boundary.js";import{GIT_LIFECYCLE_COMMIT_PUSH_STEP_ID as gt,GIT_LIFECYCLE_REVIEW_PR_STEP_ID as lt}from"./git-lifecycle-step-ids.js";const $=ot(rt),ce="neocortex-yoloop",oe="runtime.json",V="node scripts/test-root.mjs --gate complete",Be=Object.freeze({"P174.03.029264":"339141be7339a0edf55710cbccb6e6558f514792"}),ht=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",mt="runtime.lock",Le=new WeakMap;async function gi(t,e){if(!S(e.headSha)||!l(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 P=>i?(await ft(i.parent,i.name,i.identity,P)).toString("utf8"):String((await $("git",[...P],{cwd:t,encoding:"utf8",maxBuffer:8*1024*1024})).stdout),n=async()=>i?JSON.parse((await Ve(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 H(p(t,"config","release-gates.v2.json"),"utf8"),runner:await H(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),b=Array.isArray(d.requiredCompleteClasses)?d.requiredCompleteClasses.filter(P=>typeof P=="string"&&/^[a-z0-9-]+$/.test(P)):[];if(d.contract!=="P205-CI-02"||b.length===0)throw new Error("p205-transient-manifest-invalid");const g=i?(await Ve(i.parent,i.name,i.identity,["scripts/test-root.mjs","--gate","complete"])).toString("utf8"):String((await $(process.execPath,["scripts/test-root.mjs","--gate","complete"],{cwd:t,encoding:"utf8",maxBuffer:64*1024*1024})).stdout),{manifest:m,runner:v}=await n();if(m!==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 O=y("sha256").update(o).digest("hex"),k=y("sha256").update(g).digest("hex"),z=ie(e.nowIso??new Date().toISOString()),R=y("sha256").update(["p205-transient-execution-v1",V,e.headSha,e.graphRevision,O,b.join(","),k,z].join("\0")).digest("hex"),ae=Object.freeze({schemaVersion:1,kind:"p205_transient_execution_authority",contract:"P205-CI-02",command:V,executionHeadSha:e.headSha,graphRevision:e.graphRevision,manifestDigest:O,gateIds:Object.freeze(b),resultDigest:k,executedAt:z,executionEvidenceDigest:R}),ge=Object.freeze(Object.create(null));return Le.set(ge,ae),ge}async function ve(t,e={}){const i=await kt(t);return We(i,e)}function pt(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");Vt(o);const s=p(o,ce),u=p(s,oe);if(L(s)&&(Ye(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 Ye(i,"file"),_e(JSON.parse(Pe(i,"utf8")))}async function li(t){try{await ve(t,{required:!0});return}catch(e){if(!(e instanceof Error)||e.message!=="git-lifecycle-runtime-missing")throw e}try{await qe(t,()=>{},{expectedRevision:0})}catch(e){if(!(e instanceof Error)||e.message!=="git-lifecycle-runtime-revision-conflict")throw e;await ve(t,{required:!0})}}async function hi(t,e,i=new Date().toISOString()){if(!Ut(e))throw new Error("git-lifecycle-graph-authority-invalid");const r=p(h(t),".neocortex","state.json"),n=await H(r,"utf8"),a=f(JSON.parse(n));if(!a)throw new Error("git-lifecycle-tracked-state-invalid");const o=await ve(t,{required:!0}),s=bt(a,o),u=f(f(s.epics)?.[e.epicId]),c=f(f(s.stories)?.[e.storyId]);if(!u||u.branch_mode!=="epic")throw new Error("git-lifecycle-graph-authority-epic-invalid");if(!c||String(c.epic_id??e.storyId.split(".")[0])!==e.epicId)throw new Error("git-lifecycle-graph-authority-story-invalid");if(u.execution_branch!==e.executionBranch)throw new Error("git-lifecycle-graph-authority-branch-mismatch");const d=typeof u.graph_revision=="string"?u.graph_revision:void 0,b=typeof f(o.epics[e.epicId])?.graph_revision=="string"?String(f(o.epics[e.epicId]).graph_revision):void 0;if(d!==void 0&&!l(d))throw new Error("git-lifecycle-graph-revision-invalid");if(d===e.graphRevision&&b===e.graphRevision)return{applied:!1,reused:!0,revision:o.revision,graphRevision:e.graphRevision};const g=Date.parse(i);if(!Number.isFinite(g))throw new Error("git-lifecycle-graph-authority-time-invalid");const m=f(u.branch_lease);if(m&&Number.isFinite(Date.parse(String(m.expiresAt)))&&Date.parse(String(m.expiresAt))>g)throw new Error("git-lifecycle-graph-authority-writer-active");return{applied:!0,reused:!1,revision:(await qe(t,C=>{const O=wt(C,e.epicId),k=O.execution_branch;if(k!==void 0&&k!==e.executionBranch)throw new Error("git-lifecycle-graph-authority-branch-raced");const z=O.graph_revision;if(z!==void 0&&z!==d)throw new Error("git-lifecycle-graph-authority-epoch-raced");const R=f(O.branch_lease);if(R&&Number.isFinite(Date.parse(String(R.expiresAt)))&&Date.parse(String(R.expiresAt))>g)throw new Error("git-lifecycle-graph-authority-writer-active");O.graph_revision=e.graphRevision},{expectedRevision:o.revision,preCommit:async()=>{if(await H(r,"utf8")!==n)throw new Error("git-lifecycle-graph-authority-tracked-state-raced")}})).document.revision,graphRevision:e.graphRevision}}async function qe(t,e,i={}){const r=await xe(t),n=await Ke(r),a=p(n,mt),o=await ei(a);try{const s=p(n,oe),u=p(r,Se),c=await We(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),b=e(d),g=_e({...d,schemaVersion:1,revision:c.revision+1});return await i.preCommit?.(g),await j(n,"directory"),await Nt(s),await dt(n,oe,`${JSON.stringify(g,null,2)}
|
|
2
|
+
`),await j(s,"file"),await yt(n),{document:g,value:b}}finally{await ti(a,o).catch(()=>{})}}async function yt(t){let e;try{e=await nt(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 bt(t,e){const i=structuredClone(t),r=je(i,"epics"),n=je(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 je(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 wt(t,e){return t.epics[e]??(t.epics[e]={})}function mi(t,e){return t.stories[e]??(t.stories[e]={})}function ze(t,e,i,r){const n=f(t);return!!(n&&n.epicId===i&&n.branch===r&&n.qaVerdict==="passed"&&n.reviewVerdict==="approved"&&Je(n,e))}async function pi(t,e,i,r,n,a,o=[]){return St(t,e,i,r,n,a,o).verdict==="verified"}function St(t,e,i,r,n,a,o=[],s=new Date().toISOString()){const u=()=>At({storyId:i,epicId:r,executionBranch:n,value:e,verifiedAt:s,verdict:"rejected",reasonCode:"checkpoint-git-physical-invalid"});try{if(!ze(e,i,r,n))return u();const c=f(e),d=f(c.qaReceipt),b=f(c.reviewReceipt),g=String(c.headSha),m=String(c.baseSha),v=q(t,["rev-parse",`refs/heads/${n}`]).trim();X("git",["merge-base","--is-ancestor",g,v],{cwd:t,stdio:"ignore"});const C=q(t,["show","--no-patch","--format=%H%n%P%n%B",g]),O=q(t,["rev-parse",`${g}^`]).trim(),k=q(t,["rev-list","--count",`${m}..${g}`]).trim();if(O!==m||k!=="1")return u();const z=new Set(C.split(`
|
|
3
|
+
`).map(G=>G.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(G=>z.has(G));if(ae){const Ce=[...z].find(it=>it.startsWith("Neocortex-Prepared-Base: "))?.slice(25)??"";if(!/^[a-f0-9]{40,64}$/i.test(Ce))return u();X("git",["merge-base","--is-ancestor",Ce,g],{cwd:t,stdio:"ignore"})}const P=q(t,["diff-tree","--no-commit-id","--name-only","-r","-z",g]).split("\0").filter(Boolean);if(P.length===0||P.some(G=>!de(G)))return u();const le=y("sha256").update(C).digest("hex"),he=y("sha256").update([...P].sort().join("\0")).digest("hex"),N=Ge({checkpoint:c,storyId:i,epicId:r,executionBranch:n,baseSha:m,headSha:g,commitBodyDigest:le,changedPathsDigest:he,changedPaths:P,authorizedWriteSet:o.length>0?o:xt(t,i)});if(!N||d.receiptRef!==`story-qa:${String(d.sourceEvidenceDigest)}`)return u();const Re=It({storyId:i,baseSha:m,headSha:g,bundleDigest:String(c.bundleDigest),graphRevision:String(c.graphRevision),commitBody:C,changedPaths:P}),Ae=d.evidenceVersion==="p205-execution-v2"&&d.contract==="P205-CI-02"&&d.command===V&&l(d.manifestDigest)&&B(d.gateIds,32,!0)&&l(d.resultDigest)&&d.sourceEvidenceDigest===Rt({gitEvidenceDigest:Re,headSha:g,graphRevision:String(c.graphRevision),manifestDigest:String(d.manifestDigest),gateIds:d.gateIds,resultDigest:String(d.resultDigest)}),Xe=d.evidenceVersion==="git-immutable-v1"&&d.sourceEvidenceDigest===Re,et=d.evidenceVersion===void 0&&N.mode==="legacy-migration"&&N.binding?.qaDigest===d.sourceEvidenceDigest,me=vt(a,v,String(c.graphRevision))&&(Ae||N.mode==="legacy-migration"&&(Xe||et)),pe=a===void 0&&Ae;if(!me&&!pe)return u();const ke=y("sha256").update(["root-commit-range-review-v1",i,m,g,String(c.bundleDigest),String(c.graphRevision),String(d.receiptRef),y("sha256").update(C).digest("hex"),[...P].sort().join(",")].join("\0")).digest("hex");if(b.sourceEvidenceDigest!==ke||b.receiptRef!==`story-review:${ke}`||N.mode==="legacy-migration"&&N.binding?.reviewDigest!==void 0&&N.binding.reviewDigest!==b.sourceEvidenceDigest||!ae&&(Be[i]!==g||!Array.isArray(c.receiptRefs)||!c.receiptRefs.some(G=>typeof G=="string"&&G.startsWith("legacy-direct-yolo:"))))return u();const tt=y("sha256").update(["checkpoint-p205-transient-v1",i,r,n,m,g,String(c.bundleDigest),le,he,N.mode,N.effectiveClaimRevision,String(d.sourceEvidenceDigest),String(b.sourceEvidenceDigest),te(a)?.executionEvidenceDigest??(pe?"maintenance-git-verification":"legacy-bounded-authority")].join("\0")).digest("hex"),Q=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:m,headSha:g,aggregateHeadSha:Q?.executionHeadSha??g,commitBodyDigest:le,changedPathsDigest:he,claimVerification:N.mode,effectiveClaimRevision:N.effectiveClaimRevision,sourceEvidenceDigest:tt,command:V,manifestDigest:Q?.manifestDigest??"0".repeat(64),gateIds:Q?.gateIds??Object.freeze(["legacy-bounded"]),resultDigest:Q?.resultDigest??"0".repeat(64),graphRevision:String(c.graphRevision),executionEvidenceDigest:Q?.executionEvidenceDigest??"0".repeat(64),verifiedAt:Q?.executedAt??ie(s),verdict:"verified",reasonCodes:Object.freeze([me?"checkpoint-p205-transient-verified":pe?"checkpoint-git-maintenance-verified":"checkpoint-legacy-bounded-verified",...N.mode==="legacy-migration"?["checkpoint-legacy-migration-verified"]:[]]),publicSafe:!0})}catch{return u()}}function vt(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===V&&r.graphRevision===i&&l(r.resultDigest)&&l(r.executionEvidenceDigest)&&r.executionHeadSha===e&&S(e))}function te(t){return t&&typeof t=="object"?Le.get(t):void 0}function yi(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 bi(t,e,i){const r=te(t);return!!(r&&r.executionHeadSha===e&&r.graphRevision===i&&r.command===V)}function Ge(t){const e=ht[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=Dt(t.authorizedWriteSet),a=n.length>0&&n.length===t.authorizedWriteSet.length&&t.changedPaths.every(o=>n.some(s=>Et(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||!l(i))&&!(!a||!He(i,n)))return Object.freeze({mode:"canonical",effectiveClaimRevision:i})}function Dt(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 xt(t,e){try{const i=JSON.parse(Pe(p(t,".neocortex","state.json"),"utf8")),r=f(i.stories),n=f(r?.[e]),a=pt(t),o=f(a.stories[e]?.checkpoint)??f(n?.checkpoint);return _t(e,n,o)}catch{return[]}}function _t(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 st({...e,id:t,files_to_modify:r})}catch{return[]}}function He(t,e){return t===y("sha256").update(e.join("\0")).digest("hex")||t===y("sha256").update(JSON.stringify(e)).digest("hex")}function Et(t,e){return t===e||t.endsWith("/")&&e.startsWith(t)}function wi(t,e,i,r,n,a){try{if(!ze(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),b=q(t,["rev-parse",`refs/heads/${n}`]).trim();if(X("git",["merge-base","--is-ancestor",c,b],{cwd:t,stdio:"ignore"}),q(t,["rev-parse",`${c}^`]).trim()!==d||q(t,["rev-list","--count",`${d}..${c}`]).trim()!=="1")return!1;const g=q(t,["show","--no-patch","--format=%H%n%P%n%B",c]),m=q(t,["diff-tree","--no-commit-id","--name-only","-r","-z",c]).split("\0").filter(Boolean);if(m.length===0||m.some(C=>!de(C)))return!1;const v=Ge({checkpoint:o,storyId:i,epicId:r,executionBranch:n,baseSha:d,headSha:c,changedPaths:m,authorizedWriteSet:a,commitBodyDigest:y("sha256").update(g).digest("hex"),changedPathsDigest:y("sha256").update([...m].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 It(t){return y("sha256").update(["local-yolo-tdd-git-immutable-v1",t.storyId,t.baseSha,t.headSha,t.bundleDigest,t.graphRevision,y("sha256").update(t.commitBody).digest("hex"),y("sha256").update([...t.changedPaths].sort().join("\0")).digest("hex")].join("\0")).digest("hex")}function Rt(t){return y("sha256").update(["local-yolo-tdd-p205-execution-v2",V,t.gitEvidenceDigest,t.headSha,t.graphRevision,t.manifestDigest,t.gateIds.join(","),t.resultDigest].join("\0")).digest("hex")}function At(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:S(e?.baseSha)?String(e?.baseSha):"0".repeat(40),headSha:S(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:V,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 q(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 Si(t,e){if(Be[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 $("git",["rev-parse",`refs/heads/${e.executionBranch}`],{cwd:t,encoding:"utf8",maxBuffer:1048576})).stdout.trim();if(await $("git",["merge-base","--is-ancestor",e.headSha,r],{cwd:t}),(await $("git",["rev-parse",`${e.headSha}^`],{cwd:t,encoding:"utf8",maxBuffer:1024*1024})).stdout.trim()!==e.baseSha)return;const a=String((await $("git",["diff","--binary","--full-index",`${e.baseSha}..${e.headSha}`],{cwd:t,encoding:"utf8",maxBuffer:32*1024*1024})).stdout);if(y("sha256").update(a).digest("hex")!==e.bundleDigest)return;const o=String((await $("git",["show","--no-patch","--format=%H%n%P%n%B",e.headSha],{cwd:t,encoding:"utf8",maxBuffer:4*1024*1024})).stdout);if(!String((await $("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 $("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(R=>c.includes(R))||c.some(R=>!de(R)))return;const d=await Promise.all(i.map(async R=>String((await $("git",["show",`${e.headSha}:${R}`],{cwd:t,encoding:"utf8",maxBuffer:16*1024*1024})).stdout))),b=JSON.parse(d[0]),g=f(b.stories),m=f(b.epics),v=f(g?.[e.storyId]),C=f(m?.[e.epicId]),O=Array.isArray(v?.steps_completed)?v.steps_completed:[],k=JSON.parse(d[1]);return v?.status!=="done"||!O.includes(gt)||!O.includes(lt)||C?.branch_mode!=="epic"||C.execution_branch!==e.executionBranch||k.storyId!==e.storyId||k.status!=="qa-passed"||k.safeToContinueYoloop!==!0||!Array.isArray(k.blockingChecks)||k.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:${y("sha256").update(["legacy-direct-yolo-recovery-v1",e.storyId,e.epicId,e.executionBranch,e.baseSha,e.headSha,e.bundleDigest,e.graphRevision,y("sha256").update(o).digest("hex"),y("sha256").update([...c].sort().join("\0")).digest("hex"),...d.map(R=>y("sha256").update(R).digest("hex"))].join("\0")).digest("hex")}`}catch{return}}async function kt(t){const e=await xe(t),i=p(e,ce),r=p(i,oe);if(L(i)&&(await j(i,"directory"),await Y(i)!==i))throw new Error("git-lifecycle-runtime-directory-symlink");return L(r)?r:p(e,Se)}async function Te(t){return Ke(await xe(t))}async function Ct(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 F(i);const r=h(i,e);return U(i,r),L(r)||await $e(i,e),await F(r,i),await F(i),r}async function w(t,e){const i=h(e),r=h(t);U(i,r),await F(i),await F(r,i)}async function vi(t,e){await M(t,e)}async function J(t,e,i){const r=h(e),n=h(t);U(r,n);try{await w(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 U(r,a),await Z(r,_(n),_(a)),await w(a,r),i&&!await i(a)?(await re(a,n,r).catch(()=>{}),!1):(await ut(r,_(a)),!0)}async function re(t,e,i){await w(t,i);try{await be(e);return}catch(r){if(!I(r,"ENOENT"))throw r}await Z(i,_(t),_(e)),await w(e,i)}async function A(t){try{await w(t,T(t));const e=p(t,"owner.json");await M(e,t);const i=await H(e);return await M(e,t),y("sha256").update(i).digest("hex")}catch{return}}async function Di(t,e){const i=await Te(t),r=await Ct(i,"leases"),n=p(r,"integration"),a=`${n}.recovery`;if(L(a)){await w(a,r);const c=await Fe(a),d=await A(a);if(c===void 0||ue(c))return{ok:!1,reasonCode:"git-lifecycle-integration-backpressure"};if(!d||!await J(a,r,async b=>await A(b)===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 F(r,i);try{return await Ne(r,_(n),`${JSON.stringify(s)}
|
|
4
|
+
`),await w(n,r),await M(p(n,"owner.json"),n),!0}catch(c){throw I(c,"EEXIST")||await J(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 Fe(n);if(c&&Me(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 Ze(n))return{ok:!1,reasonCode:"git-lifecycle-integration-backpressure"};const g=await A(n);if(!g)return{ok:!1,reasonCode:"git-lifecycle-integration-lock-failed"};const m=`${n}.stale.${process.pid}.${Date.now()}`;await Z(r,_(n),_(m));try{if(await w(m,r),await A(m)!==g)return await re(m,n,r).catch(()=>{}),{ok:!1,reasonCode:"git-lifecycle-integration-backpressure"};await u()}finally{await J(m,r,async v=>await A(v)===g).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 xi(t,e){const i=await ne(t);return!!(i&&De(i,e)&&Date.parse(i.expiresAt)>Date.now())}async function Ot(t,e){try{const i=T(t);await w(t,i);const r=await ne(t);if(!r||!De(r,e))return!1;const n=await A(t);if(!n)return!1;const a=`${t}.release.${process.pid}.${Date.now()}`;await Z(i,_(t),_(a)),await w(a,i);const o=await ne(a);return!o||!De(o,e)||await A(a)!==n?(await re(a,t,i).catch(()=>{}),!1):J(a,i,async s=>await A(s)===n)}catch(i){if(I(i,"ENOENT"))return!1;throw i}}function Pt(t){return y("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 _i(t,e){if(!K(e.storyId)||!E(e.idempotencyKey)||!l(e.ownerDigest))return"foreign";const i=await Te(t),r=p(i,"leases"),n=p(r,"integration");if(!L(n))return"absent";try{await w(r,i),await w(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||Pt(a)!==e.ownerDigest?"foreign":await Ot(n,a)?"released":"foreign"}catch{return"foreign"}}async function ne(t){try{await w(t,T(t));const e=p(t,"owner.json");await M(e,t);const i=JSON.parse(await H(e,"utf8"));return i.schemaVersion!==1||i.kind!=="direct"&&i.kind!=="continuous"||!K(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 Fe(t){try{await w(t,T(t));const e=p(t,"owner.json");await M(e,t);const i=JSON.parse(await H(e,"utf8"));return Number.isSafeInteger(i.pid)&&Number(i.pid)>0?Number(i.pid):void 0}catch{return}}function Me(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 De(t,e){return Me(t,e)&&t.schemaVersion===e.schemaVersion&&t.pid===e.pid&&t.createdAt===e.createdAt&&t.ownerNonce===e.ownerNonce}async function xe(t){const e=await Y(t),r=(await $("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 Y(n);if(a!==n)throw new Error("git-lifecycle-common-dir-symlink");await $t(a);const s=(await $("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 Ke(t){const e=p(t,ce);if(L(e)||await $e(t,ce),await j(e,"directory"),await Y(e)!==e)throw new Error("git-lifecycle-runtime-directory-symlink");return e}async function We(t,e={}){try{return await j(t,"file"),_e(JSON.parse(await H(t,"utf8")))}catch(i){if(I(i,"ENOENT")){if(e.required)throw new Error("git-lifecycle-runtime-missing");return Ee()}throw i}}async function Nt(t){try{await j(t,"file")}catch(e){if(I(e,"ENOENT"))return;throw e}}async function j(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 U(t,e){const i=h(t),r=h(e),n=ct(i,r);if(!n||n.startsWith("..")||ee(n)||T(r)!==i)throw new Error("git-lifecycle-private-path-escape")}async function F(t,e){const i=h(t);if(e&&U(h(e),i),await j(i,"directory"),h(await Y(i))!==i)throw new Error("git-lifecycle-directory-substituted");if(e){const r=h(e);if(await j(r,"directory"),h(await Y(r))!==r)throw new Error("git-lifecycle-directory-parent-substituted")}}async function M(t,e){const i=h(t);if(U(h(e),i),await F(h(e)),await j(i,"file"),h(await Y(i))!==i)throw new Error("git-lifecycle-file-substituted")}function Ye(t,e){const i=Oe(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 $t(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 Vt(t){const e=Oe(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 _e(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(!K(n)||!qt(a))throw new Error("git-lifecycle-runtime-epic-invalid");for(const[n,a]of Object.entries(r))if(!K(n)||!n.includes(".")||!jt(a,n))throw new Error("git-lifecycle-runtime-story-invalid");return e}const Bt=["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"],Lt=["checkpoint","status","last_step","steps_completed"];function qt(t){return D(t,Bt,"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||zt(t.branch_lease))&&(t.origin_binding===void 0||t.origin_binding===null||Tt(t.origin_binding))&&(t.graph_revision===void 0||l(t.graph_revision))&&(t.aggregate_qa_receipt===void 0||t.aggregate_qa_receipt===null||Ft(t.aggregate_qa_receipt))&&(t.terminal_git_receipt===void 0||t.terminal_git_receipt===null||Mt(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||Qt(t.git_reconciliation_receipts))&&(t.git_reconciliation_debt===void 0||Zt(t.git_reconciliation_debt))}function jt(t,e){return D(t,Lt,"git-lifecycle-runtime-story-unknown-field"),(t.checkpoint===void 0||t.checkpoint===null||Je(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||B(t.steps_completed,128))}function zt(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&&K(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||Gt(e.handoffGrant,e))&&(e.handoffConsumption===void 0||Ht(e.handoffConsumption,e))):!1}function Gt(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&&l(i.tokenDigest)&&l(i.bundleDigest)&&l(i.claimRevision)&&x(i.expiresAt)&&Date.parse(String(i.expiresAt))<=Date.parse(String(e.expiresAt))):!1}function Ht(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)&&l(i.tokenDigest)&&l(i.bundleDigest)&&l(i.claimRevision)&&i.consumedBySessionId===e.sessionId&&x(i.consumedAt)):!1}function Tt(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&&S(e.originHeadSha)&&e.capturedFromCurrentCheckout===!0&&x(e.capturedAt)):!1}function Ft(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===V&&l(e.manifestDigest)&&l(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"&&S(e.executionHeadSha)&&l(e.graphRevision)&&x(e.checkedAt)&&fe(e.receiptRef)&&B(e.gateIds,128,!0)}function Mt(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&&K(e.epicId)&&W(e.executionBranch)&&W(e.originBranch)&&S(e.baseSha)&&S(e.executionHeadSha)&&(e.mergeSha===void 0||S(e.mergeSha))&&(e.pushedSha===void 0||S(e.pushedSha))&&(e.strategy==="direct"||e.strategy==="single_pr")&&(e.candidateQa===void 0||Wt(e.candidateQa,e))&&(e.providerGuard===void 0||Kt(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))&&B(e.localGateReceiptRefs,128,!0)&&E(e.idempotencyKey)&&x(e.attemptStartedAt)&&(e.completedAt===void 0||x(e.completedAt))&&typeof e.retryEligible=="boolean"&&B(e.reasonCodes,128)&&e.publicSafe===!0):!1}function Kt(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&&S(i.prHeadSha)&&i.prHeadSha===e.mergeSha&&S(i.originHeadSha)&&i.originHeadSha===e.baseSha&&x(i.checkedAt)&&i.publicSafe===!0}function Wt(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===V&&S(i.originHeadSha)&&i.originHeadSha===e.baseSha&&S(i.executionHeadSha)&&i.executionHeadSha===e.executionHeadSha&&S(i.mergeSha)&&i.mergeSha===e.mergeSha&&S(i.treeSha)&&l(i.graphRevision)&&l(i.manifestDigest)&&l(i.resultDigest)&&B(i.gateIds,128,!0)&&x(i.checkedAt)&&fe(i.receiptRef)):!1}function Je(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)&&S(i.baseSha)&&S(i.headSha)&&i.baseSha!==i.headSha&&Xt(i.commits)&&i.commits.length===1&&i.commits[0]===i.headSha&&E(i.idempotencyKey)&&(i.dispatchId===void 0||l(i.dispatchId))&&(i.bundleId===void 0||l(i.bundleId))&&l(i.bundleDigest)&&l(i.graphRevision)&&(i.claimRevision===void 0||l(i.claimRevision))&&B(i.receiptRefs,256,!0)&&(i.qaVerdict==="passed"||i.qaVerdict==="blocked")&&["approved","changes-requested","pending"].includes(String(i.reviewVerdict))&&Yt(i.qaReceipt,i)&&(i.reviewVerdict==="pending"?i.reviewReceipt===void 0:Jt(i.reviewReceipt,i))&&x(i.recordedAt)}function Yt(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===V&&l(i.manifestDigest)&&B(i.gateIds,32,!0)&&l(i.resultDigest))&&Qe(i,e)&&l(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 Jt(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"&&Qe(i,e)&&l(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 Qe(t,e){return["storyId","epicId","baseSha","headSha","bundleDigest","graphRevision"].every(i=>t[i]===e[i])}function Qt(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)&&B(i.reasonCodes,128)&&x(i.recordedAt)&&i.publicSafe===!0):!1})}function Zt(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"&&B(i.reasonCodes,128)&&B(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 K(t){return typeof t=="string"&&/^P[1-9][0-9]*(?:\.[0-9]+)*$/.test(t)}function Ut(t){const e=f(t);return e?Object.keys(e).length===9&&e.schemaVersion===1&&e.kind==="git_lifecycle_graph_authority"&&e.producer==="server-continuous-yoloop-v1"&&(e.source==="yolo"||e.source==="yoloop")&&K(e.epicId)&&K(e.storyId)&&String(e.storyId).startsWith(`${String(e.epicId)}.`)&&W(e.executionBranch)&&typeof e.graphRevision=="string"&&/^[a-f0-9]{64}$/.test(e.graphRevision)&&e.publicSafe===!0:!1}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 S(t){return typeof t=="string"&&/^[a-f0-9]{40,64}$/i.test(t)}function l(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 B(t,e,i=!1){return Array.isArray(t)&&t.length<=e&&(!i||t.length>0)&&t.every(E)}function Xt(t){return Array.isArray(t)&&t.length>0&&t.length<=256&&t.every(S)}function Ee(){return{schemaVersion:1,revision:0,epics:{},stories:{}}}async function ei(t){const e=T(t),i={pid:process.pid,nonce:ye(16).toString("hex")},r=async()=>{await F(e),await Ne(e,_(t),JSON.stringify(i));try{await w(t,e),await M(p(t,"owner.json"),t)}catch(n){throw await J(t,e).catch(()=>{}),n}};try{await r()}catch(n){if(!I(n,"EEXIST"))throw n;await j(t,"directory");const a=await Ie(t);if(a!==void 0&&ue(a.pid))throw new Error("git-lifecycle-runtime-lock-active");if(a===void 0&&await Ze(t))throw new Error("git-lifecycle-runtime-lock-active");const o=await A(t);if(!o)throw new Error("git-lifecycle-runtime-lock-owner-invalid");const s=`${t}.stale.${process.pid}.${Date.now()}`;await Z(e,_(t),_(s));try{if(await w(s,e),await A(s)!==o)throw await re(s,t,e).catch(()=>{}),new Error("git-lifecycle-runtime-lock-owner-replaced");await r()}finally{await J(s,e,async u=>await A(u)===o).catch(()=>{})}}return i}async function ti(t,e){const i=T(t);try{await w(t,i);const r=await Ie(t);if(!r||!Ue(r,e))return!1;const n=await A(t);if(!n)return!1;const a=`${t}.release.${process.pid}.${Date.now()}`;await Z(i,_(t),_(a)),await w(a,i);const o=await Ie(a);return!o||!Ue(o,e)||await A(a)!==n?(await re(a,t,i).catch(()=>{}),!1):J(a,i,async s=>await A(s)===n)}catch(r){if(I(r,"ENOENT"))return!1;throw r}}async function Ze(t){try{return Date.now()-(await at(t)).mtimeMs<3e4}catch{return!0}}async function Ie(t){try{await w(t,T(t));const e=p(t,"owner.json");await M(e,t);const i=JSON.parse(await H(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 Ue(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,Be as LEGACY_DIRECT_YOLO_RECOVERY_COMMITS,ht as LEGACY_P174_CHECKPOINT_MIGRATIONS,V as P205_COMPLETE_COMMAND,Di as acquireGitLifecyclePhysicalIntegrationLock,bt as applyGitLifecycleRuntimeOverlay,w as assertGitLifecyclePrivateDirectory,vi as assertGitLifecyclePrivateFile,Pt as computeGitLifecyclePhysicalIntegrationLockOwnerDigest,It as computeImmutableStoryQaEvidenceDigest,Si as computeLegacyDirectYoloRecoveryReceiptRef,Rt as computeP205StoryQaEvidenceDigest,Ct as ensureGitLifecyclePrivateChildDirectory,li as ensureGitLifecycleRuntimeInitialized,wt as ensureRuntimeEpic,mi as ensureRuntimeStory,gi as executeP205TransientAuthority,Te as gitLifecycleRuntimeDirectory,_t as gitLifecycleStoryWriteSet,ze as isAcceptedGitLifecycleStoryCheckpoint,qe as mutateGitLifecycleRuntime,bi as p205TransientAuthorityMatchesAggregate,hi as persistGitLifecycleGraphAuthority,se as posixSecurityAvailable,yi as projectP205TransientExecutionEvidence,ve as readGitLifecycleRuntime,pt as readGitLifecycleRuntimeSync,Ot as releaseGitLifecyclePhysicalIntegrationLock,_i as releaseGitLifecyclePhysicalIntegrationLockForCheckpoint,J as removeGitLifecyclePrivateDirectory,pi as verifyAcceptedGitLifecycleStoryCheckpoint,St as verifyAcceptedGitLifecycleStoryCheckpointSync,xi as verifyGitLifecyclePhysicalIntegrationLock,wi as verifyLegacyCheckpointMigrationCandidateSync};
|
|
File without changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{analyzeDependencyDag as S,StructuralDagError as f}from"./structural-dag-projection.js";import{classifyInvocationShapeV2 as E}from"./invocation-shape.js";const P=12,$=16,I=["active","archived","rolled-back","synthetic","orphan"],n=(i,e,t={})=>({commandId:i,stateProjectionPolicy:e,...t}),A=Object.freeze({status:n("status","full"),"arch-plan":n("arch-plan","full"),"arch-prd":n("arch-prd","full"),"arch-architecture":n("arch-architecture","epic-targeted"),"arch-api-contracts":n("arch-api-contracts","epic-targeted"),"arch-api-integrations":n("arch-api-integrations","epic-targeted"),"arch-database":n("arch-database","epic-targeted"),"arch-security":n("arch-security","epic-targeted"),"arch-design-system":n("arch-design-system","epic-targeted"),"arch-ux-design":n("arch-ux-design","epic-targeted"),"arch-performance":n("arch-performance","epic-targeted"),"arch-testing":n("arch-testing","epic-targeted"),"arch-infrastructure":n("arch-infrastructure","epic-targeted"),"arch-review":n("arch-review","epic-targeted"),"arch-fitness-functions":n("arch-fitness-functions","epic-targeted"),"create-epic":n("create-epic","epic-summary"),"idea-diagnose":n("idea-diagnose","full"),"idea-research":n("idea-research","epic-targeted"),"generate-epic":n("generate-epic","epic-targeted"),exec:n("exec","story-targeted",{structuralRequired:!0}),yolo:n("yolo","story-targeted",{structuralRequired:!0}),"yolo-inline":n("yolo-inline","story-targeted",{structuralRequired:!0}),epic:n("epic","epic-targeted",{structuralRequired:!0}),"setup-branch":n("setup-branch","story-targeted",{structuralRequired:!0}),diagnose:n("diagnose","adaptive-targeted"),"diagnose-inline":n("diagnose-inline","full"),research:n("research","adaptive-targeted"),"research-inline":n("research-inline","full"),"write-spec":n("write-spec","story-targeted",{structuralRequired:!0}),"create-tasks":n("create-tasks","story-targeted",{structuralRequired:!0}),implement:n("implement","story-targeted",{structuralRequired:!0}),commit:n("commit","story-targeted",{structuralRequired:!0}),"commit-push":n("commit","story-targeted",{structuralRequired:!0}),sync:n("sync","story-targeted",{structuralRequired:!0}),"sync-main":n("sync","story-targeted",{structuralRequired:!0}),"create-pr":n("create-pr","story-targeted",{structuralRequired:!0}),review:n("review","story-targeted"),"review-pr":n("review","story-targeted"),merge:n("merge","story-targeted",{structuralRequired:!0}),"merge-pr":n("merge","story-targeted",{structuralRequired:!0}),"fix-blocked":n("fix-blocked","story-targeted"),"finalize-epic":n("finalize-epic","epic-targeted"),"resolve-conflicts":n("resolve-conflicts","story-targeted"),"update-memory":n("update-memory","full"),"update-project-memory":n("update-memory","story-targeted",{structuralRequired:!0}),refactor:n("refactor","adaptive-targeted"),"refactor-suggest":n("refactor","story-targeted",{structuralRequired:!0}),cleanup:n("cleanup","full"),audit:n("audit","full"),"tech-debt":n("tech-debt","full"),menu:n("menu","full"),plans:n("plans","full"),billing:n("billing","full"),subscribe:n("subscribe","full"),"qa-scan":n("qa-scan","full"),yoloop:n("yoloop","yoloop-targeted",{structuralRequired:!0}),"migrate-state":n("migrate-state","full"),"migrate-project-id":n("migrate-project-id","full"),"policy-audit":n("policy-audit","full"),"mutation-test":n("mutation-test","full"),"sync-openapi":n("sync-openapi","full"),"generate-pacts":n("generate-pacts","full"),"verify-pacts":n("verify-pacts","full"),"property-test":n("property-test","full"),"property-tests":n("property-test","story-targeted",{structuralRequired:!0}),"chaos-plan":n("chaos-plan","full"),"ui-ux-review":n("ui-ux-review","adaptive-targeted"),"solyd-system":n("solyd-system","adaptive-targeted"),goal:n("goal","continuity-scoped"),loop:n("loop","continuity-scoped"),jobs:n("jobs","continuity-scoped"),runner:n("runner","continuity-scoped"),"goal-tick":n("goal-tick","continuity-scoped"),"loop-tick":n("loop-tick","continuity-scoped"),"validate-tests":n("validate-tests","story-targeted",{structuralRequired:!0}),"qa-gate":n("qa-gate","story-targeted",{structuralRequired:!0})}),Y=Object.freeze({st:"status",arquitetura:"arch-plan",architecture:"arch-plan",arch:"arch-plan",prd:"arch-prd","product-requirements":"arch-prd","arch-doc":"arch-architecture","tech-architecture":"arch-architecture","api-contracts":"arch-api-contracts","api-contract":"arch-api-contracts","api-integrations":"arch-api-integrations","api-int":"arch-api-integrations","database-schema":"arch-database","db-schema":"arch-database",db:"arch-database","cyber-security":"arch-security",security:"arch-security",sec:"arch-security","design-system":"arch-design-system",ds:"arch-design-system","atomic-design":"arch-design-system","ux-design":"arch-ux-design",ux:"arch-ux-design",wireframes:"arch-ux-design",wireframe:"arch-ux-design","user-flows":"arch-ux-design",performance:"arch-performance",perf:"arch-performance","capacity-planning":"arch-performance",capacity:"arch-performance","arch-perf":"arch-performance","performance-strategy":"arch-performance","testing-strategy":"arch-testing","test-plan":"arch-testing","test-strategy":"arch-testing","arch-test":"arch-testing",infrastructure:"arch-infrastructure",infra:"arch-infrastructure","deploy-plan":"arch-infrastructure",deployment:"arch-infrastructure","arch-infra":"arch-infrastructure","arch-deploy":"arch-infrastructure","review-consolidation":"arch-review",consolidation:"arch-review","architecture-review":"arch-review","arch-consolidation":"arch-review",fitness:"arch-fitness-functions","fitness-functions":"arch-fitness-functions",archfit:"arch-fitness-functions","arch-fit":"arch-fitness-functions","fit-funcs":"arch-fitness-functions","criar-epic":"create-epic",planejamento:"create-epic","idea-diag":"idea-diagnose","idea-pesq":"idea-research","gerar-epic":"generate-epic",executar:"exec",pipeline:"exec","parallel-epic":"epic",setup:"setup-branch",branch:"setup-branch",diag:"diagnose",diagnostico:"diagnose",c02:"diagnose",pesquisar:"research",pesq:"research","research-fix":"research",c03:"research",spec:"write-spec",especificacao:"write-spec",c04:"write-spec",tasks:"create-tasks",tarefas:"create-tasks",c05:"create-tasks",impl:"implement",implementar:"implement",c06:"implement",push:"commit",commit_push:"commit",cp:"commit",c07:"commit",sincronizar:"sync",c08:"sync",pr:"create-pr",c09:"create-pr",revisar:"review",c11:"review",mesclar:"merge",c12:"merge",fix:"fix-blocked",corrigir:"fix-blocked",finalizar:"finalize-epic",conflitos:"resolve-conflicts",memoria:"update-memory",refactoring:"refactor",refact:"refactor",refac:"refactor",rf:"refactor","cleanup-code":"refactor","code-cleanup":"refactor","code-quality":"refactor","improve-code":"refactor",modernize:"refactor",modernization:"refactor",legacy:"refactor","legacy-code":"refactor","debt-pay":"refactor","pay-debt":"refactor","debt-reduction":"refactor","smell-fix":"refactor","fix-smells":"refactor","code-smells":"refactor",strangler:"refactor","strangler-fig":"refactor",limpar:"cleanup",limpeza:"cleanup",auditar:"audit",auditoria:"audit",debt:"tech-debt",debts:"tech-debt","debt-list":"tech-debt","tech-debts":"tech-debt",td:"tech-debt",help:"menu",ajuda:"menu","?":"menu",commands:"menu",cmds:"menu",planos:"plans",pricing:"plans",bill:"billing",subscription:"billing",sub:"billing",upgrade:"subscribe",checkout:"subscribe",qa:"qa-scan","qa-test":"qa-scan","visual-qa":"qa-scan","e2e-scan":"qa-scan",troubleshoot:"qa-scan","debug-ui":"qa-scan",scan:"qa-scan",a11y:"qa-scan",accessibility:"qa-scan",wcag:"qa-scan","auto-yolo":"yoloop","epic-runner":"yoloop","story-runner":"yoloop","loop-yolo":"yoloop","auto-epic":"yoloop",migrate:"migrate-state","state-migrate":"migrate-state","schema-migrate":"migrate-state",policy:"policy-audit","audit-policy":"policy-audit","policy-history":"policy-audit",policies:"policy-audit",mutation:"mutation-test",stryker:"mutation-test","kill-mutants":"mutation-test","openapi-sync":"sync-openapi","api-sync":"sync-openapi","spec-sync":"sync-openapi","regen-openapi":"sync-openapi",pacts:"generate-pacts","gen-pacts":"generate-pacts","regen-pacts":"generate-pacts","create-pacts":"generate-pacts","verify-pact":"verify-pacts","pact-verify":"verify-pacts","check-pacts":"verify-pacts","pact-check":"verify-pacts",property:"property-test",pbt:"property-test",proptest:"property-test","invariant-test":"property-test",chaos:"chaos-plan",gameday:"chaos-plan","resilience-test":"chaos-plan","ux-review":"ui-ux-review","design-review":"ui-ux-review","visual-review":"ui-ux-review","product-polish":"ui-ux-review","security-system":"solyd-system","authorized-security":"solyd-system","sec-system":"solyd-system",goals:"goal","durable-goal":"goal","continuity-goal":"goal",loops:"loop","durable-loop":"loop","continuity-loop":"loop",job:"jobs","continuity-jobs":"jobs","neocortex-runner":"runner","continuity-runner":"runner"}),K=Object.freeze({1:"status",3:"arch-plan",4:"arch-prd",5:"arch-architecture",6:"arch-api-contracts",7:"arch-api-integrations",8:"arch-database",9:"arch-security",10:"arch-design-system",11:"arch-ux-design",12:"arch-performance",13:"arch-testing",14:"arch-infrastructure",15:"arch-review",16:"arch-fitness-functions",17:"create-epic",18:"idea-diagnose",19:"idea-research",20:"generate-epic",21:"exec",22:"yolo",23:"epic",24:"setup-branch",25:"diagnose",26:"research",27:"write-spec",28:"create-tasks",29:"implement",30:"commit",31:"sync",32:"create-pr",33:"review",34:"merge",35:"fix-blocked",36:"finalize-epic",37:"resolve-conflicts",38:"update-memory",39:"refactor",40:"cleanup",41:"audit",42:"tech-debt",43:"menu",44:"plans",45:"billing",46:"subscribe",47:"qa-scan",48:"yoloop",49:"migrate-state",50:"policy-audit",51:"mutation-test",52:"sync-openapi",53:"generate-pacts",54:"verify-pacts",55:"property-test",56:"chaos-plan",57:"ui-ux-review",58:"solyd-system",59:"goal",60:"loop",61:"jobs",62:"runner"});function a(i,e=120){if(typeof i!="string")return;const t=i.trim();if(t)return t.replace(/[^a-z0-9_.:-]+/gi,"_").slice(0,e)}function C(i){return i!==null&&typeof i=="object"&&!Array.isArray(i)}function m(...i){const e=new Set,t=[];for(const r of i)for(const o of r??[]){const c=a(o,80);if(!(!c||e.has(c))&&(e.add(c),t.push(c),t.length>=$))return t}return t}function V(i){return i.trim().replace(/^@?\*/,"").replace(/^@/,"").toLowerCase()}function Z(i){return i.trim().split(/\s+/,1)[0]??""}function q(i){const e=Z(i);if(!e)return A.menu;const t=V(e),r=K[t]??Y[t]??t;return A[r]??null}function B(i,e,t,r="full-compatible",o=["full-state"]){return{kind:"full",commandId:t?.commandId??null,stateProjectionPolicy:t?.stateProjectionPolicy??null,projectionMode:r,trigger:i,targetEpicId:null,targetStoryId:null,includedStoryCount:Object.keys(e.stories).length,includedEpicCount:Object.keys(e.epics).length,omittedStoryCount:0,omittedEpicCount:0,reason:"full-state",reasonCodes:m(o)}}function Ee(i,e,t,r="full-compatible",o=["full-state"]){const c=B(i,e,t,r,o);return h({...e,scope:c},e,c)}function J(i){const[e]=i.trim().split(/\s+/,1);return e?/^[A-Z]?\d+(?:\.\d+)+$/i.test(e.replace(/^@/,""))||/(?:^|\/)[A-Z]?\d+(?:\.\d+)+\.story\.md$/i.test(e.replace(/^@/,"")):!1}function x(i){const e=i.match(/(?:^|[/@\s])([A-Z]?\d+(?:\.\d+)+)\.story\.md\b/i);return e?.[1]?e[1]:i.match(/(?:^|\s|@)([A-Z]?\d+(?:\.\d+)+)(?=$|\s)/i)?.[1]??null}function W(i){const e=i.trim(),t=e.search(/\s/);return t===-1?"":e.slice(t).trim()}function O(i){return W(i).split(/\s+/).map(e=>e.replace(/^@/,"").replace(/^['"]|['"]$/g,"")).filter(e=>e.length>0&&!e.startsWith("-"))}function Oe(i){return O(i)[0]??null}function N(i,e){const r=i.replace(/^@/,"").replace(/^epic-/i,"").replace(/\.md$/i,""),o=[r,r.toUpperCase(),/^p\d+$/i.test(r)?`P${r.replace(/^p/i,"")}`:null,/^\d+$/.test(r)?`P${r}`:null].filter(c=>typeof c=="string"&&c.length>0);for(const c of o)if(e.epics[c])return c;return null}function H(i,e){const t=i.match(/(?:^|[/@\s])epic-(P?\d+)\.md\b/i);return t?.[1]?N(t[1],e):null}function k(i,e){const t=H(i,e);if(t)return t;for(const r of O(i)){if(/^[A-Z]?\d+(?:\.\d+)+$/i.test(r))continue;const o=N(r,e);if(o)return o}return null}function Q(i,e){const t=k(i,e);if(t)return t;const r=e.yoloop,o=r?.state?.currentSession?.currentEpicId;if(typeof o=="string"&&e.epics[o])return o;const c=r?.lock?.currentEpicId??r?.lock?.epicId;return typeof c=="string"&&e.epics[c]?c:null}function X(i){const e=i.match(/(?:^|[/@\s])epic-(P?\d+)\.md\b/i)?.[1];if(e)return/^P/i.test(e)?e.toUpperCase():`P${e}`;for(const t of O(i)){if(/^P\d+$/i.test(t))return t.toUpperCase();if(/^\d+$/.test(t))return`P${t}`}return null}function b(i,e){if(typeof i.epic_id=="string"&&i.epic_id.length>0)return i.epic_id;const t=e.split(".").slice(0,-1).join(".");return t.length>0?t:null}function U(i){return typeof i=="string"&&["done","completed","merged","cancelled","canceled","abandoned"].includes(i.toLowerCase())}function v(i,e,t){if(t.has(i))return;const r=e.stories[i];if(!r)return;t.add(i);const o=r.depends_on;if(Array.isArray(o))for(const c of o)typeof c=="string"&&v(c,e,t)}function ee(i,e){const t=S(e.stories,[i]),r={};for(const o of t.orderedIds){const c=e.stories[o];c&&(r[o]=c)}return r}function M(i,e,t=[]){const r={};for(const o of t)e.epics[o]&&(r[o]=e.epics[o]);for(const[o,c]of Object.entries(i)){const s=b(c,o);s&&e.epics[s]&&(r[s]=e.epics[s])}return r}function te(i,e,t){if(t.has(i))return;const r=e.epics[i];if(!r)return;t.add(i);const o=r.depends_on;if(Array.isArray(o))for(const c of o)typeof c=="string"&&c.length>0&&te(c,e,t)}function re(i,e,t){const r=S(t.epics,[i]),o=new Set(r.orderedIds);for(const[s,d]of Object.entries(e)){const l=b(d,s);l&&t.epics[l]&&o.add(l)}const c={};for(const s of[...o].sort((d,l)=>d.localeCompare(l,"en"))){const d=t.epics[s];d&&(c[s]=s===i?d:L(s,d))}return c}function ie(i,e,t){const r=e.stories;if(!Array.isArray(r)||r.some(s=>typeof s!="string"||s.length===0))throw new f("STRUCTURAL_DEPENDENCY_MISSING",{nodes:0,edges:0,malformedStoryMemberships:1});const o=S(t.stories,r),c={};for(const s of o.orderedIds){const d=t.stories[s];d&&(c[s]=b(d,s)===i?d:D(s,d))}return c}function D(i,e){const t=Array.isArray(e.depends_on)?[...new Set(e.depends_on.filter(r=>typeof r=="string"&&r.length>0))].sort((r,o)=>r.localeCompare(o,"en")):[];return{id:a(e.id)??i,...a(e.epic_id)?{epic_id:a(e.epic_id)}:{},...a(e.status,40)?{status:a(e.status,40)}:{},depends_on:t}}function L(i,e){const t=Array.isArray(e.stories)?[...new Set(e.stories.filter(o=>typeof o=="string"&&o.length>0))].sort((o,c)=>o.localeCompare(c,"en")):[],r=Array.isArray(e.depends_on)?[...new Set(e.depends_on.filter(o=>typeof o=="string"&&o.length>0))].sort((o,c)=>o.localeCompare(c,"en")):[];return{id:a(e.id)??i,...a(e.status,40)?{status:a(e.status,40)}:{},...a(e.lifecycle_classification,40)?{lifecycle_classification:a(e.lifecycle_classification,40)}:{},stories:t,depends_on:r}}function oe(i,e,t){const r=S(e.stories),o=S(e.epics),c=Object.fromEntries(r.orderedIds.map(l=>[l,D(l,e.stories[l])])),s=Object.fromEntries(o.orderedIds.map(l=>[l,L(l,e.epics[l])])),d={kind:"projected",commandId:t.commandId,stateProjectionPolicy:t.stateProjectionPolicy,projectionMode:"yoloop-discovery",trigger:i,targetEpicId:null,targetStoryId:null,includedStoryCount:r.orderedIds.length,includedEpicCount:o.orderedIds.length,omittedStoryCount:0,omittedEpicCount:0,reason:"targeted-invocation",reasonCodes:m(["structural-required","yoloop-discovery",`structural-edges-${r.edgeCount+o.edgeCount}`,"content-fields-omitted"])};return h({...e,stories:c,epics:s,scope:d},e,d)}function ce(i,e){const t=new Set,r=i.stories;if(Array.isArray(r))for(const c of r)typeof c=="string"&&v(c,e,t);const o={};for(const c of t){const s=e.stories[c];s&&(o[c]=s)}return o}function ne(i){const e={};for(const[t,r]of Object.entries(i.epics))e[t]={id:a(r.id)??t,...a(r.status)?{status:a(r.status)}:{},...I.includes(r.lifecycle_classification)?{lifecycle_classification:r.lifecycle_classification}:{},...typeof r.total_stories=="number"&&Number.isFinite(r.total_stories)?{total_stories:r.total_stories}:{},...typeof r.completed_stories=="number"&&Number.isFinite(r.completed_stories)?{completed_stories:r.completed_stories}:{}};return e}function F(i){const e={};for(const t of Object.values(i)){const r=a(t.status,40)??"unknown";e[r]=(e[r]??0)+1}return e}function se(i){const e=Object.fromEntries(I.map(t=>[t,0]));for(const t of Object.values(i)){const r=I.includes(t.lifecycle_classification)?t.lifecycle_classification:"active";e[r]=(e[r]??0)+1}return e}function T(i,e){if(!e)return!0;const t=i.epics[e];return t?!I.includes(t.lifecycle_classification)||t.lifecycle_classification==="active":!0}function z(i){for(const e of["last_updated","updated_at","completed_at","created_at","discovered_at"]){const t=i[e];if(typeof t!="string")continue;const r=Date.parse(t);if(Number.isFinite(r))return r}return 0}function ae(i){return Object.entries(i.stories).map(([e,t])=>({id:e,story:t,timestamp:z(t)})).sort((e,t)=>t.timestamp-e.timestamp||e.id.localeCompare(t.id)).slice(0,P).map(({id:e,story:t})=>({id:e,...a(t.epic_id)?{epicId:a(t.epic_id)}:{},...a(t.status,40)?{status:a(t.status,40)}:{},...a(t.last_step??t.lastStep)?{lastStep:a(t.last_step??t.lastStep)}:{},...a(t.last_updated??t.updated_at??t.completed_at??t.created_at)?{lastUpdated:a(t.last_updated??t.updated_at??t.completed_at??t.created_at)}:{}}))}function de(i){const e=i.current_session;if(!e)return;const t={activeEpicId:a(e.active_epic_id)??null,activeStoryId:a(e.active_story_id)??null,activeStepId:a(e.active_step_id)??null,sessionId:a(e.session_id)??null,startedAt:a(e.started_at)??null};return Object.values(t).some(r=>r!=null)?t:void 0}function le(i){const e=i.yoloop;if(!C(e))return;const t=C(e.state)?e.state:void 0,r=C(t?.currentSession)?t.currentSession:void 0,o=C(e.lock)?e.lock:void 0,c={...typeof e.active=="boolean"?{active:e.active}:{},currentEpicId:a(r?.currentEpicId??e.currentEpicId)??null,currentStoryId:a(r?.currentStoryId??e.currentStoryId)??null,sessionId:a(r?.sessionId??e.sessionId)??null,lockEpicId:a(o?.currentEpicId??o?.epicId)??null};return Object.keys(c).length>0?c:void 0}function ue(i){const e=i.continuity;if(!C(e))return;const t=Array.isArray(e.reasonCodes)?e.reasonCodes.filter(r=>typeof r=="string"):void 0;return{present:!0,activeJobId:a(e.activeJobId??e.jobId)??null,activeGoalId:a(e.activeGoalId??e.goalId)??null,activeLoopId:a(e.activeLoopId??e.loopId)??null,...t&&t.length>0?{reasonCodes:m(t)}:{}}}function pe(i,e,t){const r=a(e?.activeStoryId),o=a(e?.activeEpicId),c=a(e?.activeStepId),s=r&&i.stories[r]?b(i.stories[r],r):null;if((r||o||c)&&T(i,o??s))return{epicId:o??null,storyId:r??null,stepId:c??null};const d=a(t?.currentStoryId),l=a(t?.currentEpicId??t?.lockEpicId);if((d||l)&&T(i,l))return{epicId:l??null,storyId:d??null,stepId:null};const u=Object.entries(i.stories).map(([p,y])=>({id:p,story:y,timestamp:z(y)})).filter(({id:p,story:y})=>!U(y.status)&&T(i,b(y,p))).sort((p,y)=>y.timestamp-p.timestamp||p.id.localeCompare(y.id))[0];return u?{epicId:b(u.story,u.id),storyId:u.id,stepId:a(u.story.last_step??u.story.lastStep)??null}:{epicId:null,storyId:null,stepId:null}}function ye(i,e){const t=F(i.stories),r=F(i.epics),o=se(i.epics),c=Object.values(i.epics).filter(j=>(I.includes(j.lifecycle_classification)?j.lifecycle_classification:"active")==="active"&&!U(j.status)).length,s=de(i),d=le(i),l=ue(i),u=pe(i,s,d),p=ae(i),y=m(e.reasonCodes,["state-summary-attached","state-summary-bounded",`projection-${e.projectionMode??e.kind}`,e.stateProjectionPolicy?`policy-${e.stateProjectionPolicy}`:"policy-unknown",p.length>=P?"recent-stories-capped":"recent-stories-bounded",u.storyId||u.epicId?"active-ref-derived":"active-ref-empty",d?"yoloop-session-present":"yoloop-session-absent",l?"continuity-session-present":"continuity-session-absent"]);return{schemaVersion:1,totals:{stories:Object.keys(i.stories).length,epics:Object.keys(i.epics).length,storyStatus:t,epicStatus:r,epicLifecycle:o,activeEpics:c,blockedStories:t.blocked??0},active:u,blockedCount:t.blocked??0,recentStories:p,...s?{currentSession:s}:{},...d?{currentYoloopSession:d}:{},...l?{currentContinuitySession:l}:{},projection:{commandId:e.commandId??null,stateProjectionPolicy:e.stateProjectionPolicy??null,projectionMode:e.projectionMode,scopeKind:e.kind,includedStoryCount:e.includedStoryCount,includedEpicCount:e.includedEpicCount??Object.keys(i.epics).length,omittedStoryCount:e.omittedStoryCount,omittedEpicCount:e.omittedEpicCount,reason:e.reason},reasonCodes:y,publicSafe:!0}}function h(i,e,t){return{...i,stateSummary:ye(e,t)}}function fe(i,e,t){const r={};for(const c of Object.keys(e.epics))r[c]={id:c};const o={kind:"projected",commandId:t.commandId,stateProjectionPolicy:t.stateProjectionPolicy,projectionMode:"summary-only",trigger:i,targetEpicId:null,targetStoryId:null,includedStoryCount:0,includedEpicCount:Object.keys(r).length,omittedStoryCount:Object.keys(e.stories).length,omittedEpicCount:0,reason:"epic-summary",reasonCodes:["epic-summary","stories-omitted","epic-stubs-only"]};return h({...e,stories:{},epics:r,scope:o},e,o)}function g(i,e,t,r=["summary-only","stories-omitted"],o="summary-only"){const c=ne(e),s={kind:"projected",commandId:t.commandId,stateProjectionPolicy:t.stateProjectionPolicy,projectionMode:o,trigger:i,targetEpicId:null,targetStoryId:null,includedStoryCount:0,includedEpicCount:Object.keys(c).length,omittedStoryCount:Object.keys(e.stories).length,omittedEpicCount:Math.max(0,Object.keys(e.epics).length-Object.keys(c).length),reason:"summary-only",reasonCodes:m(r)};return h({...e,stories:{},epics:c,scope:s},e,s)}function w(i,e,t,r,o,c){const s=e.stories[r];if(!s)throw new f("STRUCTURAL_TARGET_NOT_FOUND",{stories:Object.keys(e.stories).length,epics:Object.keys(e.epics).length,targetKind:"story"});const d=b(s,r);if(!d)throw new f("STRUCTURAL_TARGET_NOT_FOUND",{stories:Object.keys(e.stories).length,epics:Object.keys(e.epics).length,targetKind:"epic"});if(!e.epics[d])throw new f("STRUCTURAL_TARGET_NOT_FOUND",{stories:Object.keys(e.stories).length,epics:Object.keys(e.epics).length,targetKind:"epic"});const u=ee(r,e),p=M(u,e);if(!u[r]||!p[d])throw new f("STRUCTURAL_TARGET_NOT_FOUND",{stories:Object.keys(u).length,epics:Object.keys(p).length,targetKind:"story"});const y={kind:"projected",commandId:t.commandId,stateProjectionPolicy:t.stateProjectionPolicy,projectionMode:o,trigger:i,targetEpicId:d,targetStoryId:r,includedStoryCount:Object.keys(u).length,includedEpicCount:Object.keys(p).length,omittedStoryCount:Math.max(0,Object.keys(e.stories).length-Object.keys(u).length),omittedEpicCount:Math.max(0,Object.keys(e.epics).length-Object.keys(p).length),reason:"targeted-invocation",reasonCodes:m(c)};return h({...e,stories:u,epics:p,scope:y},e,y)}function G(i,e,t,r,o,c){const s=e.epics[r];if(!s)throw new f("STRUCTURAL_TARGET_NOT_FOUND",{stories:Object.keys(e.stories).length,epics:Object.keys(e.epics).length,targetKind:"epic"});const d=ce(s,e),l=M(d,e,[r]);if(!l[r])throw new f("STRUCTURAL_TARGET_NOT_FOUND",{stories:Object.keys(d).length,epics:Object.keys(l).length,targetKind:"epic"});const u={kind:"projected",commandId:t.commandId,stateProjectionPolicy:t.stateProjectionPolicy,projectionMode:o,trigger:i,targetEpicId:r,targetStoryId:null,includedStoryCount:Object.keys(d).length,includedEpicCount:Object.keys(l).length,omittedStoryCount:Math.max(0,Object.keys(e.stories).length-Object.keys(d).length),omittedEpicCount:Math.max(0,Object.keys(e.epics).length-Object.keys(l).length),reason:"targeted-invocation",reasonCodes:m(c)};return h({...e,stories:d,epics:l,scope:u},e,u)}function me(i,e,t){const r=X(i),o=k(i,e);if(r&&!o)throw new f("STRUCTURAL_TARGET_NOT_FOUND",{stories:Object.keys(e.stories).length,epics:Object.keys(e.epics).length,targetKind:"epic"});const c=Q(i,e),s=E({commandId:t.commandId,explicitYoloopEpicId:o,sessionYoloopEpicId:o?null:c});if(s==="yoloop-discovery")return oe(i,e,t);if(!c||s!=="yoloop-target"&&s!=="yoloop-session")throw new f("STRUCTURAL_TARGET_NOT_FOUND",{stories:Object.keys(e.stories).length,epics:Object.keys(e.epics).length,targetKind:"epic"});const d=e.epics[c];if(!d)throw new f("STRUCTURAL_TARGET_NOT_FOUND",{stories:Object.keys(e.stories).length,epics:Object.keys(e.epics).length,targetKind:"epic"});const l=ie(c,d,e),u=re(c,l,e);if(!u[c])throw new f("STRUCTURAL_TARGET_NOT_FOUND",{stories:Object.keys(l).length,epics:Object.keys(u).length,targetKind:"epic"});const p=s,y={kind:"projected",commandId:t.commandId,stateProjectionPolicy:t.stateProjectionPolicy,projectionMode:p,trigger:i,targetEpicId:c,targetStoryId:null,includedStoryCount:Object.keys(l).length,includedEpicCount:Object.keys(u).length,omittedStoryCount:Math.max(0,Object.keys(e.stories).length-Object.keys(l).length),omittedEpicCount:Math.max(0,Object.keys(e.epics).length-Object.keys(u).length),reason:"targeted-invocation",reasonCodes:["structural-required",p,"yoloop-targeted"]};return h({...e,stories:l,epics:u,scope:y},e,y)}function ge(i,e){const t={};for(const[r,o]of Object.entries(i.epics)){const c=Array.isArray(o.stories)?o.stories.filter(s=>typeof s=="string"&&e.has(s)):[];t[r]={id:a(o.id)??r,...a(o.status,40)?{status:a(o.status,40)}:{},...typeof o.total_stories=="number"&&Number.isFinite(o.total_stories)?{total_stories:o.total_stories}:{},...typeof o.completed_stories=="number"&&Number.isFinite(o.completed_stories)?{completed_stories:o.completed_stories}:{},...c.length>0?{stories:c}:{},...c.length>0&&Array.isArray(o.depends_on)?{depends_on:o.depends_on.filter(s=>typeof s=="string"&&s.length>0)}:{},...c.length>0&&(o.branch_mode==="epic"||o.branch_mode==="story")?{branch_mode:o.branch_mode}:{},...c.length>0&&typeof o.execution_branch=="string"?{execution_branch:o.execution_branch}:{},...c.length>0&&typeof o.origin_branch=="string"?{origin_branch:o.origin_branch}:{},...c.length>0&&(o.branch_lease===null||typeof o.branch_lease=="object")?{branch_lease:o.branch_lease}:{},...c.length>0&&(o.origin_binding===null||typeof o.origin_binding=="object")?{origin_binding:o.origin_binding}:{},...c.length>0&&(o.aggregate_qa_receipt===null||typeof o.aggregate_qa_receipt=="object")?{aggregate_qa_receipt:o.aggregate_qa_receipt}:{}}}return t}function be(i){return i.stateSummary?.totals.stories??(i.scope?.includedStoryCount??Object.keys(i.stories).length)+(i.scope?.omittedStoryCount??0)}function he(i){return i.stateSummary?.totals.epics??(i.scope?.includedEpicCount??Object.keys(i.epics).length)+(i.scope?.omittedEpicCount??0)}function je(i,e){if(i.stateSummary)return{...i.stateSummary,projection:{...i.stateSummary.projection,scopeKind:"projected",projectionMode:e.projectionMode,includedStoryCount:e.includedStoryCount,includedEpicCount:e.includedEpicCount??i.stateSummary.projection.includedEpicCount,omittedStoryCount:e.omittedStoryCount,omittedEpicCount:e.omittedEpicCount,reason:"body-size"},reasonCodes:m(i.stateSummary.reasonCodes,["payload-size-guardrail","state-summary-preserved","nonessential-state-degraded"])}}function ve(i){const e=i.scope,t=new Set,r=e?.projectionMode==="structural-required"||e?.projectionMode==="yolo-story"||e?.projectionMode==="yoloop-target"||e?.projectionMode==="yoloop-session"||e?.projectionMode==="yoloop-discovery";if(r)for(const _ of Object.keys(i.stories))t.add(_);else e?.targetStoryId&&v(e.targetStoryId,i,t);const o={};for(const _ of t){const R=i.stories[_];R&&(o[_]=R)}const c=ge(i,t),s=Object.keys(o).length,d=Object.keys(c).length,l=Math.max(0,be(i)-s),u=Math.max(0,he(i)-d),p=r?e?.projectionMode??"structural-required":e?.projectionMode==="yolo-story"?"yolo-story":"summary-only",y={kind:"projected",commandId:e?.commandId??null,stateProjectionPolicy:e?.stateProjectionPolicy??null,projectionMode:p,...e?.trigger?{trigger:e.trigger}:{},targetEpicId:e?.targetEpicId??null,targetStoryId:e?.targetStoryId??null,includedStoryCount:s,includedEpicCount:d,omittedStoryCount:l,omittedEpicCount:u,reason:"body-size",reasonCodes:m(e?.reasonCodes,["payload-size-guardrail",t.size>0?"structural-targets-preserved":"stories-omitted","epics-stubbed","state-summary-preserved"])},j=je(i,y);return{...i,stories:o,epics:c,scope:y,...j?{stateSummary:j}:{}}}function _e(i,e){const t=i.trim(),r=q(t);try{if(!r){if(J(t)){const c=n("story-reference","story-targeted"),s=x(t);if(s)return w(t,e,c,s,"targeted-story",["story-reference-targeted"])}return g(t,e,n("unknown","adaptive-targeted"),["unknown-command-summary-only"])}if(r.stateProjectionPolicy==="epic-summary")return fe(t,e,r);if(r.stateProjectionPolicy==="yoloop-targeted")return me(t,e,r);const o=x(t);if(r.stateProjectionPolicy==="story-targeted"){if(o){const s=E({commandId:r.commandId,targetStoryId:o})==="yolo-story";return w(t,e,r,o,s?"yolo-story":r.structuralRequired?"structural-required":"targeted-story",[s?"yolo-story":r.structuralRequired?"structural-required":"targeted-story"])}if(r.commandId==="yolo"||r.commandId==="yolo-inline"){const c=E({commandId:r.commandId});return g(t,e,r,["yolo-inline","stories-omitted","historical-content-omitted"],c??"yolo-inline")}return r.structuralRequired?(()=>{throw new f("STRUCTURAL_TARGET_NOT_FOUND",{stories:Object.keys(e.stories).length,epics:Object.keys(e.epics).length,targetKind:"story"})})():g(t,e,r,["story-target-missing-summary-only"])}if(r.stateProjectionPolicy==="adaptive-targeted"){if(o&&e.stories[o])return w(t,e,r,o,"targeted-story",["adaptive-story-targeted"]);const c=k(t,e);return c?G(t,e,r,c,"targeted-epic",["adaptive-epic-targeted"]):g(t,e,r,["adaptive-summary-only","target-unresolved-summary-only"])}if(r.stateProjectionPolicy==="epic-targeted"){const c=k(t,e);return c?G(t,e,r,c,r.structuralRequired?"structural-required":"targeted-epic",[r.structuralRequired?"structural-required":"targeted-epic"]):r.structuralRequired?(()=>{throw new f("STRUCTURAL_TARGET_NOT_FOUND",{stories:Object.keys(e.stories).length,epics:Object.keys(e.epics).length,targetKind:"epic"})})():g(t,e,r,["epic-target-missing-summary-only"])}return r.stateProjectionPolicy==="continuity-scoped"?g(t,e,r,["continuity-scoped-summary-only"]):g(t,e,r,["policy-full-summary-only"])}catch(o){if(o instanceof f)throw o;if(r?.structuralRequired)throw new f("STRUCTURAL_DEPENDENCY_MISSING",{stories:Object.keys(e.stories).length,epics:Object.keys(e.epics).length,projectionErrors:1});return g(t,e,r??n("unknown","adaptive-targeted"),["projection-error-summary-only"])}}const Se=new Set(["yolo-story","yolo-inline","yoloop-target","yoloop-session","yoloop-discovery"]);function Ie(i){let e=0;for(const t of[i.stories,i.epics])for(const r of Object.values(t))Array.isArray(r.depends_on)&&(e+=r.depends_on.filter(o=>typeof o=="string").length);return e}function Te(i,e){const t=q(i.trim());if(!t||!["yolo","yolo-inline","yoloop"].includes(t.commandId))return null;try{const r=_e(i,e),o=r.scope?.projectionMode;if(!o||!Se.has(o))throw new f("STRUCTURAL_DEPENDENCY_MISSING",{stories:Object.keys(r.stories).length,epics:Object.keys(r.epics).length,projectionShapeErrors:1});return Object.freeze({ok:!0,version:2,shape:o,snapshot:r,included:{epics:r.scope?.includedEpicCount??Object.keys(r.epics).length,stories:r.scope?.includedStoryCount??Object.keys(r.stories).length,edges:Ie(r)},omitted:{epics:r.scope?.omittedEpicCount??0,stories:r.scope?.omittedStoryCount??0},cycleCount:0})}catch(r){if(!(r instanceof f))throw r;return Object.freeze({ok:!1,code:r.code,publicDetails:r.publicDetails})}}export{ve as degradeStateSnapshotForPayloadLimit,_e as projectStateSnapshotForInvoke,Te as projectStateSnapshotResultV2ForInvoke};
|
|
1
|
+
import{analyzeDependencyDag as S,StructuralDagError as f}from"./structural-dag-projection.js";import{classifyInvocationShapeV2 as E}from"./invocation-shape.js";const P=12,K=16,I=["active","archived","rolled-back","synthetic","orphan"],n=(i,e,t={})=>({commandId:i,stateProjectionPolicy:e,...t}),A=Object.freeze({status:n("status","full"),"arch-plan":n("arch-plan","full"),"arch-prd":n("arch-prd","full"),"arch-architecture":n("arch-architecture","epic-targeted"),"arch-api-contracts":n("arch-api-contracts","epic-targeted"),"arch-api-integrations":n("arch-api-integrations","epic-targeted"),"arch-database":n("arch-database","epic-targeted"),"arch-security":n("arch-security","epic-targeted"),"arch-design-system":n("arch-design-system","epic-targeted"),"arch-ux-design":n("arch-ux-design","epic-targeted"),"arch-performance":n("arch-performance","epic-targeted"),"arch-testing":n("arch-testing","epic-targeted"),"arch-infrastructure":n("arch-infrastructure","epic-targeted"),"arch-review":n("arch-review","epic-targeted"),"arch-fitness-functions":n("arch-fitness-functions","epic-targeted"),"create-epic":n("create-epic","epic-summary"),"idea-diagnose":n("idea-diagnose","full"),"idea-research":n("idea-research","epic-targeted"),"generate-epic":n("generate-epic","epic-targeted"),exec:n("exec","story-targeted",{structuralRequired:!0}),yolo:n("yolo","story-targeted",{structuralRequired:!0}),"yolo-inline":n("yolo-inline","story-targeted",{structuralRequired:!0}),epic:n("epic","epic-targeted",{structuralRequired:!0}),"setup-branch":n("setup-branch","story-targeted",{structuralRequired:!0}),diagnose:n("diagnose","adaptive-targeted"),"diagnose-inline":n("diagnose-inline","full"),research:n("research","adaptive-targeted"),"research-inline":n("research-inline","full"),"write-spec":n("write-spec","story-targeted",{structuralRequired:!0}),"create-tasks":n("create-tasks","story-targeted",{structuralRequired:!0}),implement:n("implement","story-targeted",{structuralRequired:!0}),commit:n("commit","story-targeted",{structuralRequired:!0}),"commit-push":n("commit","story-targeted",{structuralRequired:!0}),sync:n("sync","story-targeted",{structuralRequired:!0}),"sync-main":n("sync","story-targeted",{structuralRequired:!0}),"create-pr":n("create-pr","story-targeted",{structuralRequired:!0}),review:n("review","story-targeted"),"review-pr":n("review","story-targeted"),merge:n("merge","story-targeted",{structuralRequired:!0}),"merge-pr":n("merge","story-targeted",{structuralRequired:!0}),"fix-blocked":n("fix-blocked","story-targeted"),"finalize-epic":n("finalize-epic","epic-targeted"),"resolve-conflicts":n("resolve-conflicts","story-targeted"),"update-memory":n("update-memory","full"),"update-project-memory":n("update-memory","story-targeted",{structuralRequired:!0}),refactor:n("refactor","adaptive-targeted"),"refactor-suggest":n("refactor","story-targeted",{structuralRequired:!0}),cleanup:n("cleanup","full"),audit:n("audit","full"),"tech-debt":n("tech-debt","full"),menu:n("menu","full"),plans:n("plans","full"),billing:n("billing","full"),subscribe:n("subscribe","full"),"qa-scan":n("qa-scan","full"),yoloop:n("yoloop","yoloop-targeted",{structuralRequired:!0}),"migrate-state":n("migrate-state","full"),"migrate-project-id":n("migrate-project-id","full"),"policy-audit":n("policy-audit","full"),"mutation-test":n("mutation-test","full"),"sync-openapi":n("sync-openapi","full"),"generate-pacts":n("generate-pacts","full"),"verify-pacts":n("verify-pacts","full"),"property-test":n("property-test","full"),"property-tests":n("property-test","story-targeted",{structuralRequired:!0}),"chaos-plan":n("chaos-plan","full"),"ui-ux-review":n("ui-ux-review","adaptive-targeted"),"solyd-system":n("solyd-system","adaptive-targeted"),goal:n("goal","continuity-scoped"),loop:n("loop","continuity-scoped"),jobs:n("jobs","continuity-scoped"),runner:n("runner","continuity-scoped"),"goal-tick":n("goal-tick","continuity-scoped"),"loop-tick":n("loop-tick","continuity-scoped"),"validate-tests":n("validate-tests","story-targeted",{structuralRequired:!0}),"qa-gate":n("qa-gate","story-targeted",{structuralRequired:!0})}),V=Object.freeze({st:"status",arquitetura:"arch-plan",architecture:"arch-plan",arch:"arch-plan",prd:"arch-prd","product-requirements":"arch-prd","arch-doc":"arch-architecture","tech-architecture":"arch-architecture","api-contracts":"arch-api-contracts","api-contract":"arch-api-contracts","api-integrations":"arch-api-integrations","api-int":"arch-api-integrations","database-schema":"arch-database","db-schema":"arch-database",db:"arch-database","cyber-security":"arch-security",security:"arch-security",sec:"arch-security","design-system":"arch-design-system",ds:"arch-design-system","atomic-design":"arch-design-system","ux-design":"arch-ux-design",ux:"arch-ux-design",wireframes:"arch-ux-design",wireframe:"arch-ux-design","user-flows":"arch-ux-design",performance:"arch-performance",perf:"arch-performance","capacity-planning":"arch-performance",capacity:"arch-performance","arch-perf":"arch-performance","performance-strategy":"arch-performance","testing-strategy":"arch-testing","test-plan":"arch-testing","test-strategy":"arch-testing","arch-test":"arch-testing",infrastructure:"arch-infrastructure",infra:"arch-infrastructure","deploy-plan":"arch-infrastructure",deployment:"arch-infrastructure","arch-infra":"arch-infrastructure","arch-deploy":"arch-infrastructure","review-consolidation":"arch-review",consolidation:"arch-review","architecture-review":"arch-review","arch-consolidation":"arch-review",fitness:"arch-fitness-functions","fitness-functions":"arch-fitness-functions",archfit:"arch-fitness-functions","arch-fit":"arch-fitness-functions","fit-funcs":"arch-fitness-functions","criar-epic":"create-epic",planejamento:"create-epic","idea-diag":"idea-diagnose","idea-pesq":"idea-research","gerar-epic":"generate-epic",executar:"exec",pipeline:"exec","parallel-epic":"epic",setup:"setup-branch",branch:"setup-branch",diag:"diagnose",diagnostico:"diagnose",c02:"diagnose",pesquisar:"research",pesq:"research","research-fix":"research",c03:"research",spec:"write-spec",especificacao:"write-spec",c04:"write-spec",tasks:"create-tasks",tarefas:"create-tasks",c05:"create-tasks",impl:"implement",implementar:"implement",c06:"implement",push:"commit",commit_push:"commit",cp:"commit",c07:"commit",sincronizar:"sync",c08:"sync",pr:"create-pr",c09:"create-pr",revisar:"review",c11:"review",mesclar:"merge",c12:"merge",fix:"fix-blocked",corrigir:"fix-blocked",finalizar:"finalize-epic",conflitos:"resolve-conflicts",memoria:"update-memory",refactoring:"refactor",refact:"refactor",refac:"refactor",rf:"refactor","cleanup-code":"refactor","code-cleanup":"refactor","code-quality":"refactor","improve-code":"refactor",modernize:"refactor",modernization:"refactor",legacy:"refactor","legacy-code":"refactor","debt-pay":"refactor","pay-debt":"refactor","debt-reduction":"refactor","smell-fix":"refactor","fix-smells":"refactor","code-smells":"refactor",strangler:"refactor","strangler-fig":"refactor",limpar:"cleanup",limpeza:"cleanup",auditar:"audit",auditoria:"audit",debt:"tech-debt",debts:"tech-debt","debt-list":"tech-debt","tech-debts":"tech-debt",td:"tech-debt",help:"menu",ajuda:"menu","?":"menu",commands:"menu",cmds:"menu",planos:"plans",pricing:"plans",bill:"billing",subscription:"billing",sub:"billing",upgrade:"subscribe",checkout:"subscribe",qa:"qa-scan","qa-test":"qa-scan","visual-qa":"qa-scan","e2e-scan":"qa-scan",troubleshoot:"qa-scan","debug-ui":"qa-scan",scan:"qa-scan",a11y:"qa-scan",accessibility:"qa-scan",wcag:"qa-scan","auto-yolo":"yoloop","epic-runner":"yoloop","story-runner":"yoloop","loop-yolo":"yoloop","auto-epic":"yoloop",migrate:"migrate-state","state-migrate":"migrate-state","schema-migrate":"migrate-state",policy:"policy-audit","audit-policy":"policy-audit","policy-history":"policy-audit",policies:"policy-audit",mutation:"mutation-test",stryker:"mutation-test","kill-mutants":"mutation-test","openapi-sync":"sync-openapi","api-sync":"sync-openapi","spec-sync":"sync-openapi","regen-openapi":"sync-openapi",pacts:"generate-pacts","gen-pacts":"generate-pacts","regen-pacts":"generate-pacts","create-pacts":"generate-pacts","verify-pact":"verify-pacts","pact-verify":"verify-pacts","check-pacts":"verify-pacts","pact-check":"verify-pacts",property:"property-test",pbt:"property-test",proptest:"property-test","invariant-test":"property-test",chaos:"chaos-plan",gameday:"chaos-plan","resilience-test":"chaos-plan","ux-review":"ui-ux-review","design-review":"ui-ux-review","visual-review":"ui-ux-review","product-polish":"ui-ux-review","security-system":"solyd-system","authorized-security":"solyd-system","sec-system":"solyd-system",goals:"goal","durable-goal":"goal","continuity-goal":"goal",loops:"loop","durable-loop":"loop","continuity-loop":"loop",job:"jobs","continuity-jobs":"jobs","neocortex-runner":"runner","continuity-runner":"runner"}),Z=Object.freeze({1:"status",3:"arch-plan",4:"arch-prd",5:"arch-architecture",6:"arch-api-contracts",7:"arch-api-integrations",8:"arch-database",9:"arch-security",10:"arch-design-system",11:"arch-ux-design",12:"arch-performance",13:"arch-testing",14:"arch-infrastructure",15:"arch-review",16:"arch-fitness-functions",17:"create-epic",18:"idea-diagnose",19:"idea-research",20:"generate-epic",21:"exec",22:"yolo",23:"epic",24:"setup-branch",25:"diagnose",26:"research",27:"write-spec",28:"create-tasks",29:"implement",30:"commit",31:"sync",32:"create-pr",33:"review",34:"merge",35:"fix-blocked",36:"finalize-epic",37:"resolve-conflicts",38:"update-memory",39:"refactor",40:"cleanup",41:"audit",42:"tech-debt",43:"menu",44:"plans",45:"billing",46:"subscribe",47:"qa-scan",48:"yoloop",49:"migrate-state",50:"policy-audit",51:"mutation-test",52:"sync-openapi",53:"generate-pacts",54:"verify-pacts",55:"property-test",56:"chaos-plan",57:"ui-ux-review",58:"solyd-system",59:"goal",60:"loop",61:"jobs",62:"runner"});function a(i,e=120){if(typeof i!="string")return;const t=i.trim();if(t)return t.replace(/[^a-z0-9_.:-]+/gi,"_").slice(0,e)}function C(i){return i!==null&&typeof i=="object"&&!Array.isArray(i)}function g(...i){const e=new Set,t=[];for(const r of i)for(const o of r??[]){const c=a(o,80);if(!(!c||e.has(c))&&(e.add(c),t.push(c),t.length>=K))return t}return t}function B(i){return i.trim().replace(/^@?\*/,"").replace(/^@/,"").toLowerCase()}function J(i){return i.trim().split(/\s+/,1)[0]??""}function q(i){const e=J(i);if(!e)return A.menu;const t=B(e),r=Z[t]??V[t]??t;return A[r]??null}function W(i,e,t,r="full-compatible",o=["full-state"]){return{kind:"full",commandId:t?.commandId??null,stateProjectionPolicy:t?.stateProjectionPolicy??null,projectionMode:r,trigger:i,targetEpicId:null,targetStoryId:null,includedStoryCount:Object.keys(e.stories).length,includedEpicCount:Object.keys(e.epics).length,omittedStoryCount:0,omittedEpicCount:0,reason:"full-state",reasonCodes:g(o)}}function Ee(i,e,t,r="full-compatible",o=["full-state"]){const c=W(i,e,t,r,o);return j({...e,scope:c},e,c)}function H(i){const[e]=i.trim().split(/\s+/,1);return e?/^[A-Z]?\d+(?:\.\d+)+$/i.test(e.replace(/^@/,""))||/(?:^|\/)[A-Z]?\d+(?:\.\d+)+\.story\.md$/i.test(e.replace(/^@/,"")):!1}function x(i){const e=i.match(/(?:^|[/@\s])([A-Z]?\d+(?:\.\d+)+)\.story\.md\b/i);return e?.[1]?e[1]:i.match(/(?:^|\s|@)([A-Z]?\d+(?:\.\d+)+)(?=$|\s)/i)?.[1]??null}function Q(i){const e=i.trim(),t=e.search(/\s/);return t===-1?"":e.slice(t).trim()}function O(i){return Q(i).split(/\s+/).map(e=>e.replace(/^@/,"").replace(/^['"]|['"]$/g,"")).filter(e=>e.length>0&&!e.startsWith("-"))}function Oe(i){return O(i)[0]??null}function N(i,e){const r=i.replace(/^@/,"").replace(/^epic-/i,"").replace(/\.md$/i,""),o=[r,r.toUpperCase(),/^p\d+$/i.test(r)?`P${r.replace(/^p/i,"")}`:null,/^\d+$/.test(r)?`P${r}`:null].filter(c=>typeof c=="string"&&c.length>0);for(const c of o)if(e.epics[c])return c;return null}function X(i,e){const t=i.match(/(?:^|[/@\s])epic-(P?\d+)\.md\b/i);return t?.[1]?N(t[1],e):null}function k(i,e){const t=X(i,e);if(t)return t;for(const r of O(i)){if(/^[A-Z]?\d+(?:\.\d+)+$/i.test(r))continue;const o=N(r,e);if(o)return o}return null}function ee(i,e){const t=k(i,e);if(t)return t;const r=e.yoloop,o=r?.state?.currentSession?.currentEpicId;if(typeof o=="string"&&e.epics[o])return o;const c=r?.lock?.currentEpicId??r?.lock?.epicId;return typeof c=="string"&&e.epics[c]?c:null}function te(i){const e=i.match(/(?:^|[/@\s])epic-(P?\d+)\.md\b/i)?.[1];if(e)return/^P/i.test(e)?e.toUpperCase():`P${e}`;for(const t of O(i)){if(/^P\d+$/i.test(t))return t.toUpperCase();if(/^\d+$/.test(t))return`P${t}`}return null}function h(i,e){if(typeof i.epic_id=="string"&&i.epic_id.length>0)return i.epic_id;const t=e.split(".").slice(0,-1).join(".");return t.length>0?t:null}function U(i){return typeof i=="string"&&["done","completed","merged","cancelled","canceled","abandoned"].includes(i.toLowerCase())}function v(i,e,t){if(t.has(i))return;const r=e.stories[i];if(!r)return;t.add(i);const o=r.depends_on;if(Array.isArray(o))for(const c of o)typeof c=="string"&&v(c,e,t)}function re(i,e){const t=S(e.stories,[i]),r={};for(const o of t.orderedIds){const c=e.stories[o];c&&(r[o]=c)}return r}function M(i,e,t=[]){const r={};for(const o of t)e.epics[o]&&(r[o]=e.epics[o]);for(const[o,c]of Object.entries(i)){const s=h(c,o);s&&e.epics[s]&&(r[s]=e.epics[s])}return r}function ie(i,e,t){if(t.has(i))return;const r=e.epics[i];if(!r)return;t.add(i);const o=r.depends_on;if(Array.isArray(o))for(const c of o)typeof c=="string"&&c.length>0&&ie(c,e,t)}function D(i,e,t){const r=S(t.epics,[i]),o=new Set(r.orderedIds);for(const[s,d]of Object.entries(e)){const l=h(d,s);l&&t.epics[l]&&o.add(l)}const c={};for(const s of[...o].sort((d,l)=>d.localeCompare(l,"en"))){const d=t.epics[s];d&&(c[s]=s===i?d:z(s,d))}return c}function L(i,e,t){const r=e.stories;if(!Array.isArray(r)||r.some(s=>typeof s!="string"||s.length===0))throw new f("STRUCTURAL_DEPENDENCY_MISSING",{nodes:0,edges:0,malformedStoryMemberships:1});const o=S(t.stories,r),c={};for(const s of o.orderedIds){const d=t.stories[s];d&&(c[s]=h(d,s)===i?d:F(s,d))}return c}function F(i,e){const t=Array.isArray(e.depends_on)?[...new Set(e.depends_on.filter(r=>typeof r=="string"&&r.length>0))].sort((r,o)=>r.localeCompare(o,"en")):[];return{id:a(e.id)??i,...a(e.epic_id)?{epic_id:a(e.epic_id)}:{},...a(e.status,40)?{status:a(e.status,40)}:{},depends_on:t}}function z(i,e){const t=Array.isArray(e.stories)?[...new Set(e.stories.filter(o=>typeof o=="string"&&o.length>0))].sort((o,c)=>o.localeCompare(c,"en")):[],r=Array.isArray(e.depends_on)?[...new Set(e.depends_on.filter(o=>typeof o=="string"&&o.length>0))].sort((o,c)=>o.localeCompare(c,"en")):[];return{id:a(e.id)??i,...a(e.status,40)?{status:a(e.status,40)}:{},...a(e.lifecycle_classification,40)?{lifecycle_classification:a(e.lifecycle_classification,40)}:{},stories:t,depends_on:r}}function oe(i,e,t){const r=S(e.stories),o=S(e.epics),c=Object.fromEntries(r.orderedIds.map(l=>[l,F(l,e.stories[l])])),s=Object.fromEntries(o.orderedIds.map(l=>[l,z(l,e.epics[l])])),d={kind:"projected",commandId:t.commandId,stateProjectionPolicy:t.stateProjectionPolicy,projectionMode:"yoloop-discovery",trigger:i,targetEpicId:null,targetStoryId:null,includedStoryCount:r.orderedIds.length,includedEpicCount:o.orderedIds.length,omittedStoryCount:0,omittedEpicCount:0,reason:"targeted-invocation",reasonCodes:g(["structural-required","yoloop-discovery",`structural-edges-${r.edgeCount+o.edgeCount}`,"content-fields-omitted"])};return j({...e,stories:c,epics:s,scope:d},e,d)}function ce(i,e){const t=new Set,r=i.stories;if(Array.isArray(r))for(const c of r)typeof c=="string"&&v(c,e,t);const o={};for(const c of t){const s=e.stories[c];s&&(o[c]=s)}return o}function ne(i){const e={};for(const[t,r]of Object.entries(i.epics))e[t]={id:a(r.id)??t,...a(r.status)?{status:a(r.status)}:{},...I.includes(r.lifecycle_classification)?{lifecycle_classification:r.lifecycle_classification}:{},...typeof r.total_stories=="number"&&Number.isFinite(r.total_stories)?{total_stories:r.total_stories}:{},...typeof r.completed_stories=="number"&&Number.isFinite(r.completed_stories)?{completed_stories:r.completed_stories}:{}};return e}function G(i){const e={};for(const t of Object.values(i)){const r=a(t.status,40)??"unknown";e[r]=(e[r]??0)+1}return e}function se(i){const e=Object.fromEntries(I.map(t=>[t,0]));for(const t of Object.values(i)){const r=I.includes(t.lifecycle_classification)?t.lifecycle_classification:"active";e[r]=(e[r]??0)+1}return e}function T(i,e){if(!e)return!0;const t=i.epics[e];return t?!I.includes(t.lifecycle_classification)||t.lifecycle_classification==="active":!0}function $(i){for(const e of["last_updated","updated_at","completed_at","created_at","discovered_at"]){const t=i[e];if(typeof t!="string")continue;const r=Date.parse(t);if(Number.isFinite(r))return r}return 0}function ae(i){return Object.entries(i.stories).map(([e,t])=>({id:e,story:t,timestamp:$(t)})).sort((e,t)=>t.timestamp-e.timestamp||e.id.localeCompare(t.id)).slice(0,P).map(({id:e,story:t})=>({id:e,...a(t.epic_id)?{epicId:a(t.epic_id)}:{},...a(t.status,40)?{status:a(t.status,40)}:{},...a(t.last_step??t.lastStep)?{lastStep:a(t.last_step??t.lastStep)}:{},...a(t.last_updated??t.updated_at??t.completed_at??t.created_at)?{lastUpdated:a(t.last_updated??t.updated_at??t.completed_at??t.created_at)}:{}}))}function de(i){const e=i.current_session;if(!e)return;const t={activeEpicId:a(e.active_epic_id)??null,activeStoryId:a(e.active_story_id)??null,activeStepId:a(e.active_step_id)??null,sessionId:a(e.session_id)??null,startedAt:a(e.started_at)??null};return Object.values(t).some(r=>r!=null)?t:void 0}function le(i){const e=i.yoloop;if(!C(e))return;const t=C(e.state)?e.state:void 0,r=C(t?.currentSession)?t.currentSession:void 0,o=C(e.lock)?e.lock:void 0,c={...typeof e.active=="boolean"?{active:e.active}:{},currentEpicId:a(r?.currentEpicId??e.currentEpicId)??null,currentStoryId:a(r?.currentStoryId??e.currentStoryId)??null,sessionId:a(r?.sessionId??e.sessionId)??null,lockEpicId:a(o?.currentEpicId??o?.epicId)??null};return Object.keys(c).length>0?c:void 0}function ue(i){const e=i.continuity;if(!C(e))return;const t=Array.isArray(e.reasonCodes)?e.reasonCodes.filter(r=>typeof r=="string"):void 0;return{present:!0,activeJobId:a(e.activeJobId??e.jobId)??null,activeGoalId:a(e.activeGoalId??e.goalId)??null,activeLoopId:a(e.activeLoopId??e.loopId)??null,...t&&t.length>0?{reasonCodes:g(t)}:{}}}function pe(i,e,t){const r=a(e?.activeStoryId),o=a(e?.activeEpicId),c=a(e?.activeStepId),s=r&&i.stories[r]?h(i.stories[r],r):null;if((r||o||c)&&T(i,o??s))return{epicId:o??null,storyId:r??null,stepId:c??null};const d=a(t?.currentStoryId),l=a(t?.currentEpicId??t?.lockEpicId);if((d||l)&&T(i,l))return{epicId:l??null,storyId:d??null,stepId:null};const u=Object.entries(i.stories).map(([p,y])=>({id:p,story:y,timestamp:$(y)})).filter(({id:p,story:y})=>!U(y.status)&&T(i,h(y,p))).sort((p,y)=>y.timestamp-p.timestamp||p.id.localeCompare(y.id))[0];return u?{epicId:h(u.story,u.id),storyId:u.id,stepId:a(u.story.last_step??u.story.lastStep)??null}:{epicId:null,storyId:null,stepId:null}}function ye(i,e){const t=G(i.stories),r=G(i.epics),o=se(i.epics),c=Object.values(i.epics).filter(m=>(I.includes(m.lifecycle_classification)?m.lifecycle_classification:"active")==="active"&&!U(m.status)).length,s=de(i),d=le(i),l=ue(i),u=pe(i,s,d),p=ae(i),y=g(e.reasonCodes,["state-summary-attached","state-summary-bounded",`projection-${e.projectionMode??e.kind}`,e.stateProjectionPolicy?`policy-${e.stateProjectionPolicy}`:"policy-unknown",p.length>=P?"recent-stories-capped":"recent-stories-bounded",u.storyId||u.epicId?"active-ref-derived":"active-ref-empty",d?"yoloop-session-present":"yoloop-session-absent",l?"continuity-session-present":"continuity-session-absent"]);return{schemaVersion:1,totals:{stories:Object.keys(i.stories).length,epics:Object.keys(i.epics).length,storyStatus:t,epicStatus:r,epicLifecycle:o,activeEpics:c,blockedStories:t.blocked??0},active:u,blockedCount:t.blocked??0,recentStories:p,...s?{currentSession:s}:{},...d?{currentYoloopSession:d}:{},...l?{currentContinuitySession:l}:{},projection:{commandId:e.commandId??null,stateProjectionPolicy:e.stateProjectionPolicy??null,projectionMode:e.projectionMode,scopeKind:e.kind,includedStoryCount:e.includedStoryCount,includedEpicCount:e.includedEpicCount??Object.keys(i.epics).length,omittedStoryCount:e.omittedStoryCount,omittedEpicCount:e.omittedEpicCount,reason:e.reason},reasonCodes:y,publicSafe:!0}}function j(i,e,t){return{...i,stateSummary:ye(e,t)}}function fe(i,e,t){const r={};for(const c of Object.keys(e.epics))r[c]={id:c};const o={kind:"projected",commandId:t.commandId,stateProjectionPolicy:t.stateProjectionPolicy,projectionMode:"summary-only",trigger:i,targetEpicId:null,targetStoryId:null,includedStoryCount:0,includedEpicCount:Object.keys(r).length,omittedStoryCount:Object.keys(e.stories).length,omittedEpicCount:0,reason:"epic-summary",reasonCodes:["epic-summary","stories-omitted","epic-stubs-only"]};return j({...e,stories:{},epics:r,scope:o},e,o)}function b(i,e,t,r=["summary-only","stories-omitted"],o="summary-only"){const c=ne(e),s={kind:"projected",commandId:t.commandId,stateProjectionPolicy:t.stateProjectionPolicy,projectionMode:o,trigger:i,targetEpicId:null,targetStoryId:null,includedStoryCount:0,includedEpicCount:Object.keys(c).length,omittedStoryCount:Object.keys(e.stories).length,omittedEpicCount:Math.max(0,Object.keys(e.epics).length-Object.keys(c).length),reason:"summary-only",reasonCodes:g(r)};return j({...e,stories:{},epics:c,scope:s},e,s)}function w(i,e,t,r,o,c){const s=e.stories[r];if(!s)throw new f("STRUCTURAL_TARGET_NOT_FOUND",{stories:Object.keys(e.stories).length,epics:Object.keys(e.epics).length,targetKind:"story"});const d=h(s,r);if(!d)throw new f("STRUCTURAL_TARGET_NOT_FOUND",{stories:Object.keys(e.stories).length,epics:Object.keys(e.epics).length,targetKind:"epic"});const l=e.epics[d];if(!l)throw new f("STRUCTURAL_TARGET_NOT_FOUND",{stories:Object.keys(e.stories).length,epics:Object.keys(e.epics).length,targetKind:"epic"});const u=o==="yolo-story",p=u?L(d,l,e):re(r,e),y=u?D(d,p,e):M(p,e);if(!p[r]||!y[d])throw new f("STRUCTURAL_TARGET_NOT_FOUND",{stories:Object.keys(p).length,epics:Object.keys(y).length,targetKind:"story"});const m={kind:"projected",commandId:t.commandId,stateProjectionPolicy:t.stateProjectionPolicy,projectionMode:o,trigger:i,targetEpicId:d,targetStoryId:r,includedStoryCount:Object.keys(p).length,includedEpicCount:Object.keys(y).length,omittedStoryCount:Math.max(0,Object.keys(e.stories).length-Object.keys(p).length),omittedEpicCount:Math.max(0,Object.keys(e.epics).length-Object.keys(y).length),reason:"targeted-invocation",reasonCodes:g(c,u?["epic-graph-authority-complete"]:[])};return j({...e,stories:p,epics:y,scope:m},e,m)}function Y(i,e,t,r,o,c){const s=e.epics[r];if(!s)throw new f("STRUCTURAL_TARGET_NOT_FOUND",{stories:Object.keys(e.stories).length,epics:Object.keys(e.epics).length,targetKind:"epic"});const d=ce(s,e),l=M(d,e,[r]);if(!l[r])throw new f("STRUCTURAL_TARGET_NOT_FOUND",{stories:Object.keys(d).length,epics:Object.keys(l).length,targetKind:"epic"});const u={kind:"projected",commandId:t.commandId,stateProjectionPolicy:t.stateProjectionPolicy,projectionMode:o,trigger:i,targetEpicId:r,targetStoryId:null,includedStoryCount:Object.keys(d).length,includedEpicCount:Object.keys(l).length,omittedStoryCount:Math.max(0,Object.keys(e.stories).length-Object.keys(d).length),omittedEpicCount:Math.max(0,Object.keys(e.epics).length-Object.keys(l).length),reason:"targeted-invocation",reasonCodes:g(c)};return j({...e,stories:d,epics:l,scope:u},e,u)}function me(i,e,t){const r=te(i),o=k(i,e);if(r&&!o)throw new f("STRUCTURAL_TARGET_NOT_FOUND",{stories:Object.keys(e.stories).length,epics:Object.keys(e.epics).length,targetKind:"epic"});const c=ee(i,e),s=E({commandId:t.commandId,explicitYoloopEpicId:o,sessionYoloopEpicId:o?null:c});if(s==="yoloop-discovery")return oe(i,e,t);if(!c||s!=="yoloop-target"&&s!=="yoloop-session")throw new f("STRUCTURAL_TARGET_NOT_FOUND",{stories:Object.keys(e.stories).length,epics:Object.keys(e.epics).length,targetKind:"epic"});const d=e.epics[c];if(!d)throw new f("STRUCTURAL_TARGET_NOT_FOUND",{stories:Object.keys(e.stories).length,epics:Object.keys(e.epics).length,targetKind:"epic"});const l=L(c,d,e),u=D(c,l,e);if(!u[c])throw new f("STRUCTURAL_TARGET_NOT_FOUND",{stories:Object.keys(l).length,epics:Object.keys(u).length,targetKind:"epic"});const p=s,y={kind:"projected",commandId:t.commandId,stateProjectionPolicy:t.stateProjectionPolicy,projectionMode:p,trigger:i,targetEpicId:c,targetStoryId:null,includedStoryCount:Object.keys(l).length,includedEpicCount:Object.keys(u).length,omittedStoryCount:Math.max(0,Object.keys(e.stories).length-Object.keys(l).length),omittedEpicCount:Math.max(0,Object.keys(e.epics).length-Object.keys(u).length),reason:"targeted-invocation",reasonCodes:["structural-required",p,"yoloop-targeted"]};return j({...e,stories:l,epics:u,scope:y},e,y)}function ge(i,e){const t={};for(const[r,o]of Object.entries(i.epics)){const c=Array.isArray(o.stories)?o.stories.filter(s=>typeof s=="string"&&e.has(s)):[];t[r]={id:a(o.id)??r,...a(o.status,40)?{status:a(o.status,40)}:{},...typeof o.total_stories=="number"&&Number.isFinite(o.total_stories)?{total_stories:o.total_stories}:{},...typeof o.completed_stories=="number"&&Number.isFinite(o.completed_stories)?{completed_stories:o.completed_stories}:{},...c.length>0?{stories:c}:{},...c.length>0&&Array.isArray(o.depends_on)?{depends_on:o.depends_on.filter(s=>typeof s=="string"&&s.length>0)}:{},...c.length>0&&(o.branch_mode==="epic"||o.branch_mode==="story")?{branch_mode:o.branch_mode}:{},...c.length>0&&typeof o.execution_branch=="string"?{execution_branch:o.execution_branch}:{},...c.length>0&&typeof o.origin_branch=="string"?{origin_branch:o.origin_branch}:{},...c.length>0&&(o.branch_lease===null||typeof o.branch_lease=="object")?{branch_lease:o.branch_lease}:{},...c.length>0&&(o.origin_binding===null||typeof o.origin_binding=="object")?{origin_binding:o.origin_binding}:{},...c.length>0&&(o.aggregate_qa_receipt===null||typeof o.aggregate_qa_receipt=="object")?{aggregate_qa_receipt:o.aggregate_qa_receipt}:{}}}return t}function be(i){return i.stateSummary?.totals.stories??(i.scope?.includedStoryCount??Object.keys(i.stories).length)+(i.scope?.omittedStoryCount??0)}function he(i){return i.stateSummary?.totals.epics??(i.scope?.includedEpicCount??Object.keys(i.epics).length)+(i.scope?.omittedEpicCount??0)}function je(i,e){if(i.stateSummary)return{...i.stateSummary,projection:{...i.stateSummary.projection,scopeKind:"projected",projectionMode:e.projectionMode,includedStoryCount:e.includedStoryCount,includedEpicCount:e.includedEpicCount??i.stateSummary.projection.includedEpicCount,omittedStoryCount:e.omittedStoryCount,omittedEpicCount:e.omittedEpicCount,reason:"body-size"},reasonCodes:g(i.stateSummary.reasonCodes,["payload-size-guardrail","state-summary-preserved","nonessential-state-degraded"])}}function ve(i){const e=i.scope,t=new Set,r=e?.projectionMode==="structural-required"||e?.projectionMode==="yolo-story"||e?.projectionMode==="yoloop-target"||e?.projectionMode==="yoloop-session"||e?.projectionMode==="yoloop-discovery";if(r)for(const _ of Object.keys(i.stories))t.add(_);else e?.targetStoryId&&v(e.targetStoryId,i,t);const o={};for(const _ of t){const R=i.stories[_];R&&(o[_]=R)}const c=ge(i,t),s=Object.keys(o).length,d=Object.keys(c).length,l=Math.max(0,be(i)-s),u=Math.max(0,he(i)-d),p=r?e?.projectionMode??"structural-required":e?.projectionMode==="yolo-story"?"yolo-story":"summary-only",y={kind:"projected",commandId:e?.commandId??null,stateProjectionPolicy:e?.stateProjectionPolicy??null,projectionMode:p,...e?.trigger?{trigger:e.trigger}:{},targetEpicId:e?.targetEpicId??null,targetStoryId:e?.targetStoryId??null,includedStoryCount:s,includedEpicCount:d,omittedStoryCount:l,omittedEpicCount:u,reason:"body-size",reasonCodes:g(e?.reasonCodes,["payload-size-guardrail",t.size>0?"structural-targets-preserved":"stories-omitted","epics-stubbed","state-summary-preserved"])},m=je(i,y);return{...i,stories:o,epics:c,scope:y,...m?{stateSummary:m}:{}}}function _e(i,e){const t=i.trim(),r=q(t);try{if(!r){if(H(t)){const c=n("story-reference","story-targeted"),s=x(t);if(s)return w(t,e,c,s,"targeted-story",["story-reference-targeted"])}return b(t,e,n("unknown","adaptive-targeted"),["unknown-command-summary-only"])}if(r.stateProjectionPolicy==="epic-summary")return fe(t,e,r);if(r.stateProjectionPolicy==="yoloop-targeted")return me(t,e,r);const o=x(t);if(r.stateProjectionPolicy==="story-targeted"){if(o){const s=E({commandId:r.commandId,targetStoryId:o})==="yolo-story";return w(t,e,r,o,s?"yolo-story":r.structuralRequired?"structural-required":"targeted-story",[s?"yolo-story":r.structuralRequired?"structural-required":"targeted-story"])}if(r.commandId==="yolo"||r.commandId==="yolo-inline"){const c=E({commandId:r.commandId});return b(t,e,r,["yolo-inline","stories-omitted","historical-content-omitted"],c??"yolo-inline")}return r.structuralRequired?(()=>{throw new f("STRUCTURAL_TARGET_NOT_FOUND",{stories:Object.keys(e.stories).length,epics:Object.keys(e.epics).length,targetKind:"story"})})():b(t,e,r,["story-target-missing-summary-only"])}if(r.stateProjectionPolicy==="adaptive-targeted"){if(o&&e.stories[o])return w(t,e,r,o,"targeted-story",["adaptive-story-targeted"]);const c=k(t,e);return c?Y(t,e,r,c,"targeted-epic",["adaptive-epic-targeted"]):b(t,e,r,["adaptive-summary-only","target-unresolved-summary-only"])}if(r.stateProjectionPolicy==="epic-targeted"){const c=k(t,e);return c?Y(t,e,r,c,r.structuralRequired?"structural-required":"targeted-epic",[r.structuralRequired?"structural-required":"targeted-epic"]):r.structuralRequired?(()=>{throw new f("STRUCTURAL_TARGET_NOT_FOUND",{stories:Object.keys(e.stories).length,epics:Object.keys(e.epics).length,targetKind:"epic"})})():b(t,e,r,["epic-target-missing-summary-only"])}return r.stateProjectionPolicy==="continuity-scoped"?b(t,e,r,["continuity-scoped-summary-only"]):b(t,e,r,["policy-full-summary-only"])}catch(o){if(o instanceof f)throw o;if(r?.structuralRequired)throw new f("STRUCTURAL_DEPENDENCY_MISSING",{stories:Object.keys(e.stories).length,epics:Object.keys(e.epics).length,projectionErrors:1});return b(t,e,r??n("unknown","adaptive-targeted"),["projection-error-summary-only"])}}const Se=new Set(["yolo-story","yolo-inline","yoloop-target","yoloop-session","yoloop-discovery"]);function Ie(i){let e=0;for(const t of[i.stories,i.epics])for(const r of Object.values(t))Array.isArray(r.depends_on)&&(e+=r.depends_on.filter(o=>typeof o=="string").length);return e}function Te(i,e){const t=q(i.trim());if(!t||!["yolo","yolo-inline","yoloop"].includes(t.commandId))return null;try{const r=_e(i,e),o=r.scope?.projectionMode;if(!o||!Se.has(o))throw new f("STRUCTURAL_DEPENDENCY_MISSING",{stories:Object.keys(r.stories).length,epics:Object.keys(r.epics).length,projectionShapeErrors:1});return Object.freeze({ok:!0,version:2,shape:o,snapshot:r,included:{epics:r.scope?.includedEpicCount??Object.keys(r.epics).length,stories:r.scope?.includedStoryCount??Object.keys(r.stories).length,edges:Ie(r)},omitted:{epics:r.scope?.omittedEpicCount??0,stories:r.scope?.omittedStoryCount??0},cycleCount:0})}catch(r){if(!(r instanceof f))throw r;return Object.freeze({ok:!1,code:r.code,publicDetails:r.publicDetails})}}export{ve as degradeStateSnapshotForPayloadLimit,_e as projectStateSnapshotForInvoke,Te as projectStateSnapshotResultV2ForInvoke};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: neocortex-root
|
|
3
|
-
description: "🧠 Neocortex Root Agent v4.60.
|
|
3
|
+
description: "🧠 Neocortex Root Agent v4.60.28 | 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.
|
|
111
|
+
│ ### ######## v4.60.28 │
|
|
112
112
|
│ ######### ##### │
|
|
113
113
|
│ ## ############## Development Orchestrator │
|
|
114
114
|
│ ## ### ###### ## OrNexus Team │
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: neocortex
|
|
3
|
-
description: "🧠 Neocortex v4.60.
|
|
3
|
+
description: "🧠 Neocortex v4.60.28 | 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.
|
|
107
|
+
│ ### ######## v4.60.28 │
|
|
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.
|
|
31
|
+
# Neocortex v4.60.28 | 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.
|
|
3
|
+
description: "🧠 Neocortex v4.60.28 | 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.
|
|
67
|
+
│ ### ######## v4.60.28 │
|
|
68
68
|
│ ######### ##### │
|
|
69
69
|
│ ## ############## Development Orchestrator │
|
|
70
70
|
│ ## ### ###### ## OrNexus Team │
|