@ornexus/neocortex 4.60.30 → 4.60.31
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/git/git-lifecycle-store.js +4 -4
- package/packages/shared/dist/invocation/index.js +6 -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
package/dist/sbom.cdx.json
CHANGED
|
@@ -984,7 +984,7 @@
|
|
|
984
984
|
"version": "1.26.0"
|
|
985
985
|
},
|
|
986
986
|
{
|
|
987
|
-
"bom-ref": "@neocortex/client@4.60.
|
|
987
|
+
"bom-ref": "@neocortex/client@4.60.31",
|
|
988
988
|
"group": "@neocortex",
|
|
989
989
|
"name": "client",
|
|
990
990
|
"properties": [
|
|
@@ -993,9 +993,9 @@
|
|
|
993
993
|
"value": "node_modules/@neocortex/client"
|
|
994
994
|
}
|
|
995
995
|
],
|
|
996
|
-
"purl": "pkg:npm/%40neocortex/client@4.60.
|
|
996
|
+
"purl": "pkg:npm/%40neocortex/client@4.60.31",
|
|
997
997
|
"type": "library",
|
|
998
|
-
"version": "4.60.
|
|
998
|
+
"version": "4.60.31"
|
|
999
999
|
},
|
|
1000
1000
|
{
|
|
1001
1001
|
"bom-ref": "@neocortex/core@0.1.0",
|
|
@@ -1012,7 +1012,7 @@
|
|
|
1012
1012
|
"version": "0.1.0"
|
|
1013
1013
|
},
|
|
1014
1014
|
{
|
|
1015
|
-
"bom-ref": "@neocortex/server@4.60.
|
|
1015
|
+
"bom-ref": "@neocortex/server@4.60.31",
|
|
1016
1016
|
"group": "@neocortex",
|
|
1017
1017
|
"name": "server",
|
|
1018
1018
|
"properties": [
|
|
@@ -1021,12 +1021,12 @@
|
|
|
1021
1021
|
"value": "node_modules/@neocortex/server"
|
|
1022
1022
|
}
|
|
1023
1023
|
],
|
|
1024
|
-
"purl": "pkg:npm/%40neocortex/server@4.60.
|
|
1024
|
+
"purl": "pkg:npm/%40neocortex/server@4.60.31",
|
|
1025
1025
|
"type": "library",
|
|
1026
|
-
"version": "4.60.
|
|
1026
|
+
"version": "4.60.31"
|
|
1027
1027
|
},
|
|
1028
1028
|
{
|
|
1029
|
-
"bom-ref": "@neocortex/shared@4.60.
|
|
1029
|
+
"bom-ref": "@neocortex/shared@4.60.31",
|
|
1030
1030
|
"group": "@neocortex",
|
|
1031
1031
|
"name": "shared",
|
|
1032
1032
|
"properties": [
|
|
@@ -1035,9 +1035,9 @@
|
|
|
1035
1035
|
"value": "node_modules/@neocortex/shared"
|
|
1036
1036
|
}
|
|
1037
1037
|
],
|
|
1038
|
-
"purl": "pkg:npm/%40neocortex/shared@4.60.
|
|
1038
|
+
"purl": "pkg:npm/%40neocortex/shared@4.60.31",
|
|
1039
1039
|
"type": "library",
|
|
1040
|
-
"version": "4.60.
|
|
1040
|
+
"version": "4.60.31"
|
|
1041
1041
|
},
|
|
1042
1042
|
{
|
|
1043
1043
|
"bom-ref": "@opentelemetry/api-logs@0.214.0",
|
|
@@ -9405,17 +9405,17 @@
|
|
|
9405
9405
|
"dependsOn": [
|
|
9406
9406
|
"@clack/prompts@1.0.1",
|
|
9407
9407
|
"@modelcontextprotocol/sdk@1.26.0",
|
|
9408
|
-
"@neocortex/client@4.60.
|
|
9408
|
+
"@neocortex/client@4.60.31",
|
|
9409
9409
|
"@neocortex/core@0.1.0",
|
|
9410
|
-
"@neocortex/server@4.60.
|
|
9411
|
-
"@neocortex/shared@4.60.
|
|
9410
|
+
"@neocortex/server@4.60.31",
|
|
9411
|
+
"@neocortex/shared@4.60.31",
|
|
9412
9412
|
"better-sqlite3@12.11.1",
|
|
9413
9413
|
"execa@9.6.1",
|
|
9414
9414
|
"node-cache@5.1.2",
|
|
9415
9415
|
"picocolors@1.1.1",
|
|
9416
9416
|
"zod@4.4.3"
|
|
9417
9417
|
],
|
|
9418
|
-
"ref": "@ornexus/neocortex@4.60.
|
|
9418
|
+
"ref": "@ornexus/neocortex@4.60.31"
|
|
9419
9419
|
},
|
|
9420
9420
|
{
|
|
9421
9421
|
"dependsOn": [
|
|
@@ -9456,7 +9456,7 @@
|
|
|
9456
9456
|
"@fastify/jwt@10.2.2",
|
|
9457
9457
|
"@fastify/rate-limit@10.3.0",
|
|
9458
9458
|
"@fastify/static@10.1.3",
|
|
9459
|
-
"@neocortex/shared@4.60.
|
|
9459
|
+
"@neocortex/shared@4.60.31",
|
|
9460
9460
|
"@sentry/node@10.62.0",
|
|
9461
9461
|
"bcryptjs@3.0.3",
|
|
9462
9462
|
"drizzle-orm@0.45.2",
|
|
@@ -9469,7 +9469,7 @@
|
|
|
9469
9469
|
"stripe@20.4.1",
|
|
9470
9470
|
"yaml@2.9.0"
|
|
9471
9471
|
],
|
|
9472
|
-
"ref": "@neocortex/server@4.60.
|
|
9472
|
+
"ref": "@neocortex/server@4.60.31"
|
|
9473
9473
|
},
|
|
9474
9474
|
{
|
|
9475
9475
|
"dependsOn": [
|
|
@@ -9590,16 +9590,16 @@
|
|
|
9590
9590
|
},
|
|
9591
9591
|
{
|
|
9592
9592
|
"dependsOn": [
|
|
9593
|
-
"@neocortex/shared@4.60.
|
|
9593
|
+
"@neocortex/shared@4.60.31",
|
|
9594
9594
|
"better-sqlite3@12.11.1",
|
|
9595
9595
|
"jose@6.2.2",
|
|
9596
9596
|
"keytar@7.9.0"
|
|
9597
9597
|
],
|
|
9598
|
-
"ref": "@neocortex/client@4.60.
|
|
9598
|
+
"ref": "@neocortex/client@4.60.31"
|
|
9599
9599
|
},
|
|
9600
9600
|
{
|
|
9601
9601
|
"dependsOn": [
|
|
9602
|
-
"@neocortex/shared@4.60.
|
|
9602
|
+
"@neocortex/shared@4.60.31"
|
|
9603
9603
|
],
|
|
9604
9604
|
"ref": "@neocortex/core@0.1.0"
|
|
9605
9605
|
},
|
|
@@ -10653,7 +10653,7 @@
|
|
|
10653
10653
|
"ref": "@lukeed/ms@2.0.2"
|
|
10654
10654
|
},
|
|
10655
10655
|
{
|
|
10656
|
-
"ref": "@neocortex/shared@4.60.
|
|
10656
|
+
"ref": "@neocortex/shared@4.60.31"
|
|
10657
10657
|
},
|
|
10658
10658
|
{
|
|
10659
10659
|
"ref": "@opentelemetry/api@1.9.1"
|
|
@@ -11136,8 +11136,8 @@
|
|
|
11136
11136
|
"metadata": {
|
|
11137
11137
|
"component": {
|
|
11138
11138
|
"author": "OrNexus Team",
|
|
11139
|
-
"bom-ref": "@ornexus/neocortex@4.60.
|
|
11140
|
-
"description": "Neocortex v4.60.
|
|
11139
|
+
"bom-ref": "@ornexus/neocortex@4.60.31",
|
|
11140
|
+
"description": "Neocortex v4.60.31 - Orquestrador de Desenvolvimento de Epics & Stories para Claude Code",
|
|
11141
11141
|
"externalReferences": [
|
|
11142
11142
|
{
|
|
11143
11143
|
"comment": "as detected from PackageJson property \"bugs.url\"",
|
|
@@ -11170,9 +11170,9 @@
|
|
|
11170
11170
|
"value": ""
|
|
11171
11171
|
}
|
|
11172
11172
|
],
|
|
11173
|
-
"purl": "pkg:npm/%40ornexus/neocortex@4.60.
|
|
11173
|
+
"purl": "pkg:npm/%40ornexus/neocortex@4.60.31?vcs_url=git%2Bhttps%3A%2F%2Fgithub.com%2FOrNexus-AI%2Fneocortex.git",
|
|
11174
11174
|
"type": "application",
|
|
11175
|
-
"version": "4.60.
|
|
11175
|
+
"version": "4.60.31"
|
|
11176
11176
|
},
|
|
11177
11177
|
"tools": {
|
|
11178
11178
|
"components": [
|
package/install.ps1
CHANGED
package/install.sh
CHANGED
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ornexus/neocortex",
|
|
3
|
-
"version": "4.60.
|
|
4
|
-
"description": "Neocortex v4.60.
|
|
3
|
+
"version": "4.60.31",
|
|
4
|
+
"description": "Neocortex v4.60.31 - Orquestrador de Desenvolvimento de Epics & Stories para Claude Code",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"claude",
|
|
7
7
|
"claude-code",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{execFile as rt,execFileSync as te}from"node:child_process";import{createHash as b,randomBytes as ye}from"node:crypto";import{lstat as be,open as nt,readFile as T,realpath as J,stat as at}from"node:fs/promises";import{existsSync as q,lstatSync as Oe,readFileSync as Pe,realpathSync as we}from"node:fs";import{basename as R,dirname as F,isAbsolute as ie,join as y,relative as ct,resolve as p}from"node:path";import{promisify as ot}from"node:util";import{publicWriteSet as st}from"../../../shared/dist/yoloop/public-story-write-set.js";import{resolveBranchUnit as dt}from"../../../shared/dist/yoloop/branch-unit.js";import{anchoredAtomicWriteFile as ft,anchoredCreateOwnedDirectory as Ne,anchoredEnsureDirectory as $e,anchoredExecuteGit as ut,anchoredExecuteNode as Ve,anchoredRemoveDirectory as gt,anchoredRenameDirectory as X}from"./secure-filesystem-boundary.js";import{GIT_LIFECYCLE_COMMIT_PUSH_STEP_ID as lt,GIT_LIFECYCLE_REVIEW_PR_STEP_ID as ht}from"./git-lifecycle-step-ids.js";const N=ot(rt),oe="neocortex-yoloop",se="runtime.json",B="node scripts/test-root.mjs --gate complete",Be=Object.freeze({"P174.03.029264":"339141be7339a0edf55710cbccb6e6558f514792"}),mt=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",pt="runtime.lock",Le=new WeakMap;async function hi(t,e){if(!D(e.headSha)||!h(e.graphRevision))throw new Error("p205-transient-binding-invalid");const i=e.anchoredWorkspace;if(i&&p(t)!==y(p(i.parent),i.name))throw new Error("p205-transient-anchor-binding-invalid");const r=async x=>i?(await ut(i.parent,i.name,i.identity,x)).toString("utf8"):String((await N("git",[...x],{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 T(y(t,"config","release-gates.v2.json"),"utf8"),runner:await T(y(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 f=JSON.parse(o),w=Array.isArray(f.requiredCompleteClasses)?f.requiredCompleteClasses.filter(x=>typeof x=="string"&&/^[a-z0-9-]+$/.test(x)):[];if(f.contract!=="P205-CI-02"||w.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 N(process.execPath,["scripts/test-root.mjs","--gate","complete"],{cwd:t,encoding:"utf8",maxBuffer:64*1024*1024})).stdout),{manifest:m,runner:S}=await n();if(m!==o||S!==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 $=b("sha256").update(o).digest("hex"),V=b("sha256").update(g).digest("hex"),_=ne(e.nowIso??new Date().toISOString()),l=b("sha256").update(["p205-transient-execution-v1",B,e.headSha,e.graphRevision,$,w.join(","),V,_].join("\0")).digest("hex"),G=Object.freeze({schemaVersion:1,kind:"p205_transient_execution_authority",contract:"P205-CI-02",command:B,executionHeadSha:e.headSha,graphRevision:e.graphRevision,manifestDigest:$,gateIds:Object.freeze(w),resultDigest:V,executedAt:_,executionEvidenceDigest:l}),U=Object.freeze(Object.create(null));return Le.set(U,G),U}async function ve(t,e={}){const i=await Ct(t);return We(i,e)}function yt(t,e={}){let i;try{const r=te("git",["rev-parse","--git-common-dir"],{cwd:t,encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim(),n=we(t),a=ie(r)?p(r):p(n,r),o=we(a);if(o!==a)throw new Error("git-lifecycle-common-dir-symlink");Bt(o);const s=y(o,oe),u=y(s,se);if(q(s)&&(Ye(s,"directory"),we(s)!==s))throw new Error("git-lifecycle-runtime-directory-symlink");i=q(u)?u:y(o,Se)}catch{if(e.required)throw new Error("git-lifecycle-common-dir-invalid");return Ee()}if(!q(i)){if(e.required)throw new Error("git-lifecycle-runtime-missing");return Ee()}return Ye(i,"file"),xe(JSON.parse(Pe(i,"utf8")))}async function mi(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 pi(t,e,i=new Date().toISOString()){if(!Xt(e))throw new Error("git-lifecycle-graph-authority-invalid");const r=y(p(t),".neocortex","state.json"),n=await T(r,"utf8"),a=d(JSON.parse(n));if(!a)throw new Error("git-lifecycle-tracked-state-invalid");const o=await ve(t),s=wt(a,o),u=d(d(s.epics)?.[e.epicId]),c=d(d(s.stories)?.[e.storyId]);if(!u)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");const f=Array.isArray(u.stories)?u.stories.filter(_=>typeof _=="string"):Object.keys(d(s.stories)??{}).filter(_=>{const l=d(d(s.stories)?.[_]);return String(l?.epic_id??_.split(".")[0])===e.epicId});if(Array.isArray(u.stories)&&!f.includes(e.storyId))throw new Error("git-lifecycle-graph-authority-story-invalid");const w=f.map(_=>{const l=d(d(s.stories)?.[_])??{};return{id:_,branch_name:typeof l.branch_name=="string"||l.branch_name===null?l.branch_name:void 0,pr_number:typeof l.pr_number=="number"||l.pr_number===null?l.pr_number:void 0,steps_completed:Array.isArray(l.steps_completed)?l.steps_completed.filter(G=>typeof G=="string"):[],checkpoint:d(l.checkpoint)}}),g=dt({...u,id:e.epicId},w);if(g.mode!=="epic")throw new Error("git-lifecycle-graph-authority-epic-invalid");if(g.executionBranch!==e.executionBranch)throw new Error("git-lifecycle-graph-authority-branch-mismatch");const m=typeof u.graph_revision=="string"?u.graph_revision:void 0,S=typeof d(o.epics[e.epicId])?.graph_revision=="string"?String(d(o.epics[e.epicId]).graph_revision):void 0;if(m!==void 0&&!h(m))throw new Error("git-lifecycle-graph-revision-invalid");if(m===e.graphRevision&&S===e.graphRevision)return{applied:!1,reused:!0,revision:o.revision,graphRevision:e.graphRevision};const C=Date.parse(i);if(!Number.isFinite(C))throw new Error("git-lifecycle-graph-authority-time-invalid");const $=d(u.branch_lease);if($&&Number.isFinite(Date.parse(String($.expiresAt)))&&Date.parse(String($.expiresAt))>C)throw new Error("git-lifecycle-graph-authority-writer-active");return{applied:!0,reused:!1,revision:(await qe(t,_=>{const l=St(_,e.epicId);if(l.branch_mode!==void 0&&l.branch_mode!=="epic")throw new Error("git-lifecycle-graph-authority-epic-raced");const G=l.execution_branch;if(G!==void 0&&G!==e.executionBranch)throw new Error("git-lifecycle-graph-authority-branch-raced");const U=l.graph_revision;if(U!==void 0&&U!==m)throw new Error("git-lifecycle-graph-authority-epoch-raced");const x=d(l.branch_lease);if(x&&Number.isFinite(Date.parse(String(x.expiresAt)))&&Date.parse(String(x.expiresAt))>C)throw new Error("git-lifecycle-graph-authority-writer-active");l.branch_mode="epic",l.execution_branch=e.executionBranch,l.graph_revision=e.graphRevision},{expectedRevision:o.revision,preCommit:async()=>{if(await T(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 _e(t),n=await Ke(r),a=y(n,pt),o=await ti(a);try{const s=y(n,se),u=y(r,Se),c=await We(q(s)?s:u);if(i.expectedRevision!==void 0&&i.expectedRevision!==c.revision)throw new Error("git-lifecycle-runtime-revision-conflict");const f=structuredClone(c),w=e(f),g=xe({...f,schemaVersion:1,revision:c.revision+1});return await i.preCommit?.(g),await z(n,"directory"),await $t(s),await ft(n,se,`${JSON.stringify(g,null,2)}
|
|
2
|
-
`),await z(
|
|
3
|
-
`).map(H=>H.trim())),G=[`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(H=>_.has(H));if(G){const Ce=[..._].find(it=>it.startsWith("Neocortex-Prepared-Base: "))?.slice(25)??"";if(!/^[a-f0-9]{40,64}$/i.test(Ce))return u();te("git",["merge-base","--is-ancestor",Ce,g],{cwd:t,stdio:"ignore"})}const x=j(t,["diff-tree","--no-commit-id","--name-only","-r","-z",g]).split("\0").filter(Boolean);if(x.length===0||x.some(H=>!fe(H)))return u();const le=b("sha256").update(C).digest("hex"),he=b("sha256").update([...x].sort().join("\0")).digest("hex"),P=Ge({checkpoint:c,storyId:i,epicId:r,executionBranch:n,baseSha:m,headSha:g,commitBodyDigest:le,changedPathsDigest:he,changedPaths:x,authorizedWriteSet:o.length>0?o:xt(t,i)});if(!P||f.receiptRef!==`story-qa:${String(f.sourceEvidenceDigest)}`)return u();const Re=Rt({storyId:i,baseSha:m,headSha:g,bundleDigest:String(c.bundleDigest),graphRevision:String(c.graphRevision),commitBody:C,changedPaths:x}),Ae=f.evidenceVersion==="p205-execution-v2"&&f.contract==="P205-CI-02"&&f.command===B&&h(f.manifestDigest)&&L(f.gateIds,32,!0)&&h(f.resultDigest)&&f.sourceEvidenceDigest===At({gitEvidenceDigest:Re,headSha:g,graphRevision:String(c.graphRevision),manifestDigest:String(f.manifestDigest),gateIds:f.gateIds,resultDigest:String(f.resultDigest)}),Xe=f.evidenceVersion==="git-immutable-v1"&&f.sourceEvidenceDigest===Re,et=f.evidenceVersion===void 0&&P.mode==="legacy-migration"&&P.binding?.qaDigest===f.sourceEvidenceDigest,me=Dt(a,S,String(c.graphRevision))&&(Ae||P.mode==="legacy-migration"&&(Xe||et)),pe=a===void 0&&Ae;if(!me&&!pe)return u();const ke=b("sha256").update(["root-commit-range-review-v1",i,m,g,String(c.bundleDigest),String(c.graphRevision),String(f.receiptRef),b("sha256").update(C).digest("hex"),[...x].sort().join(",")].join("\0")).digest("hex");if(w.sourceEvidenceDigest!==ke||w.receiptRef!==`story-review:${ke}`||P.mode==="legacy-migration"&&P.binding?.reviewDigest!==void 0&&P.binding.reviewDigest!==w.sourceEvidenceDigest||!G&&(Be[i]!==g||!Array.isArray(c.receiptRefs)||!c.receiptRefs.some(H=>typeof H=="string"&&H.startsWith("legacy-direct-yolo:"))))return u();const tt=b("sha256").update(["checkpoint-p205-transient-v1",i,r,n,m,g,String(c.bundleDigest),le,he,P.mode,P.effectiveClaimRevision,String(f.sourceEvidenceDigest),String(w.sourceEvidenceDigest),re(a)?.executionEvidenceDigest??(pe?"maintenance-git-verification":"legacy-bounded-authority")].join("\0")).digest("hex"),Z=me?re(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:Z?.executionHeadSha??g,commitBodyDigest:le,changedPathsDigest:he,claimVerification:P.mode,effectiveClaimRevision:P.effectiveClaimRevision,sourceEvidenceDigest:tt,command:B,manifestDigest:Z?.manifestDigest??"0".repeat(64),gateIds:Z?.gateIds??Object.freeze(["legacy-bounded"]),resultDigest:Z?.resultDigest??"0".repeat(64),graphRevision:String(c.graphRevision),executionEvidenceDigest:Z?.executionEvidenceDigest??"0".repeat(64),verifiedAt:Z?.executedAt??ne(s),verdict:"verified",reasonCodes:Object.freeze([me?"checkpoint-p205-transient-verified":pe?"checkpoint-git-maintenance-verified":"checkpoint-legacy-bounded-verified",...P.mode==="legacy-migration"?["checkpoint-legacy-migration-verified"]:[]]),publicSafe:!0})}catch{return u()}}function Dt(t,e,i){const r=re(t);return!!(r&&r.schemaVersion===1&&r.kind==="p205_transient_execution_authority"&&r.contract==="P205-CI-02"&&r.command===B&&r.graphRevision===i&&h(r.resultDigest)&&h(r.executionEvidenceDigest)&&r.executionHeadSha===e&&D(e))}function re(t){return t&&typeof t=="object"?Le.get(t):void 0}function wi(t){const e=re(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 Si(t,e,i){const r=re(t);return!!(r&&r.executionHeadSha===e&&r.graphRevision===i&&r.command===B)}function Ge(t){const e=mt[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=_t(t.authorizedWriteSet),a=n.length>0&&n.length===t.authorizedWriteSet.length&&t.changedPaths.every(o=>n.some(s=>It(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||!h(i))&&!(!a||!He(i,n)))return Object.freeze({mode:"canonical",effectiveClaimRevision:i})}function _t(t){const e=t.map(i=>i.replaceAll("\\","/").replace(/^\.\//,"").replace(/\/{2,}/g,"/"));return e.some(i=>!fe(i))?Object.freeze([]):Object.freeze([...new Set(e)].sort())}function xt(t,e){try{const i=JSON.parse(Pe(y(t,".neocortex","state.json"),"utf8")),r=d(i.stories),n=d(r?.[e]),a=yt(t),o=d(a.stories[e]?.checkpoint)??d(n?.checkpoint);return Et(e,n,o)}catch{return[]}}function Et(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===b("sha256").update(e.join("\0")).digest("hex")||t===b("sha256").update(JSON.stringify(e)).digest("hex")}function It(t,e){return t===e||t.endsWith("/")&&e.startsWith(t)}function vi(t,e,i,r,n,a){try{if(!ze(e,i,r,n))return!1;const o=d(e),s=d(o.qaReceipt),u=d(o.reviewReceipt),c=String(o.headSha),f=String(o.baseSha),w=j(t,["rev-parse",`refs/heads/${n}`]).trim();if(te("git",["merge-base","--is-ancestor",c,w],{cwd:t,stdio:"ignore"}),j(t,["rev-parse",`${c}^`]).trim()!==f||j(t,["rev-list","--count",`${f}..${c}`]).trim()!=="1")return!1;const g=j(t,["show","--no-patch","--format=%H%n%P%n%B",c]),m=j(t,["diff-tree","--no-commit-id","--name-only","-r","-z",c]).split("\0").filter(Boolean);if(m.length===0||m.some(C=>!fe(C)))return!1;const S=Ge({checkpoint:o,storyId:i,epicId:r,executionBranch:n,baseSha:f,headSha:c,changedPaths:m,authorizedWriteSet:a,commitBodyDigest:b("sha256").update(g).digest("hex"),changedPathsDigest:b("sha256").update([...m].sort().join("\0")).digest("hex")});return!(S?.mode!=="legacy-migration"||!S.binding||s.sourceEvidenceDigest!==S.binding.qaDigest||s.receiptRef!==`story-qa:${S.binding.qaDigest}`||u.sourceEvidenceDigest!==S.binding.reviewDigest||u.receiptRef!==`story-review:${S.binding.reviewDigest}`||u.qaReceiptRef!==s.receiptRef)}catch{return!1}}function Rt(t){return b("sha256").update(["local-yolo-tdd-git-immutable-v1",t.storyId,t.baseSha,t.headSha,t.bundleDigest,t.graphRevision,b("sha256").update(t.commitBody).digest("hex"),b("sha256").update([...t.changedPaths].sort().join("\0")).digest("hex")].join("\0")).digest("hex")}function At(t){return b("sha256").update(["local-yolo-tdd-p205-execution-v2",B,t.gitEvidenceDigest,t.headSha,t.graphRevision,t.manifestDigest,t.gateIds.join(","),t.resultDigest].join("\0")).digest("hex")}function kt(t){const e=d(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:D(e?.baseSha)?String(e?.baseSha):"0".repeat(40),headSha:D(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:B,manifestDigest:"0".repeat(64),gateIds:Object.freeze([]),resultDigest:"0".repeat(64),graphRevision:"0".repeat(64),executionEvidenceDigest:"0".repeat(64),sourceEvidenceDigest:"0".repeat(64),verifiedAt:ne(t.verifiedAt),verdict:t.verdict,reasonCodes:Object.freeze([t.reasonCode]),publicSafe:!0})}function j(t,e){return te("git",[...e],{cwd:t,encoding:"utf8",maxBuffer:32*1024*1024})}function ne(t){return Number.isFinite(Date.parse(t))?new Date(Date.parse(t)).toISOString():new Date().toISOString()}async function Di(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 N("git",["rev-parse",`refs/heads/${e.executionBranch}`],{cwd:t,encoding:"utf8",maxBuffer:1048576})).stdout.trim();if(await N("git",["merge-base","--is-ancestor",e.headSha,r],{cwd:t}),(await N("git",["rev-parse",`${e.headSha}^`],{cwd:t,encoding:"utf8",maxBuffer:1024*1024})).stdout.trim()!==e.baseSha)return;const a=String((await N("git",["diff","--binary","--full-index",`${e.baseSha}..${e.headSha}`],{cwd:t,encoding:"utf8",maxBuffer:32*1024*1024})).stdout);if(b("sha256").update(a).digest("hex")!==e.bundleDigest)return;const o=String((await N("git",["show","--no-patch","--format=%H%n%P%n%B",e.headSha],{cwd:t,encoding:"utf8",maxBuffer:4*1024*1024})).stdout);if(!String((await N("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 N("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(l=>c.includes(l))||c.some(l=>!fe(l)))return;const f=await Promise.all(i.map(async l=>String((await N("git",["show",`${e.headSha}:${l}`],{cwd:t,encoding:"utf8",maxBuffer:16*1024*1024})).stdout))),w=JSON.parse(f[0]),g=d(w.stories),m=d(w.epics),S=d(g?.[e.storyId]),C=d(m?.[e.epicId]),$=Array.isArray(S?.steps_completed)?S.steps_completed:[],V=JSON.parse(f[1]);return S?.status!=="done"||!$.includes(lt)||!$.includes(ht)||C?.branch_mode!=="epic"||C.execution_branch!==e.executionBranch||V.storyId!==e.storyId||V.status!=="qa-passed"||V.safeToContinueYoloop!==!0||!Array.isArray(V.blockingChecks)||V.blockingChecks.length!==0||!f[2].includes(e.storyId)||!/P205[\s\S]{0,80}(pass|aprov)/i.test(f[2])||!f[3].includes(e.storyId)||!/approved|aprovado/i.test(f[3])||!f[4].includes(e.storyId)?void 0:`legacy-direct-yolo:${b("sha256").update(["legacy-direct-yolo-recovery-v1",e.storyId,e.epicId,e.executionBranch,e.baseSha,e.headSha,e.bundleDigest,e.graphRevision,b("sha256").update(o).digest("hex"),b("sha256").update([...c].sort().join("\0")).digest("hex"),...f.map(l=>b("sha256").update(l).digest("hex"))].join("\0")).digest("hex")}`}catch{return}}async function Ct(t){const e=await _e(t),i=y(e,oe),r=y(i,se);if(q(i)&&(await z(i,"directory"),await J(i)!==i))throw new Error("git-lifecycle-runtime-directory-symlink");return q(r)?r:y(e,Se)}async function Te(t){return Ke(await _e(t))}async function Ot(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=p(t);await M(i);const r=p(i,e);return ee(i,r),q(r)||await $e(i,e),await M(r,i),await M(i),r}async function v(t,e){const i=p(e),r=p(t);ee(i,r),await M(i),await M(r,i)}async function _i(t,e){await K(t,e)}async function Q(t,e,i){const r=p(e),n=p(t);ee(r,n);try{await v(n,r)}catch(o){if(k(o,"ENOENT"))return!1;throw o}const a=p(r,`${n.slice(r.length+1)}.remove.${process.pid}.${Date.now()}.${ye(4).toString("hex")}`);return ee(r,a),await X(r,R(n),R(a)),await v(a,r),i&&!await i(a)?(await ae(a,n,r).catch(()=>{}),!1):(await gt(r,R(a)),!0)}async function ae(t,e,i){await v(t,i);try{await be(e);return}catch(r){if(!k(r,"ENOENT"))throw r}await X(i,R(t),R(e)),await v(e,i)}async function O(t){try{await v(t,F(t));const e=y(t,"owner.json");await K(e,t);const i=await T(e);return await K(e,t),b("sha256").update(i).digest("hex")}catch{return}}async function xi(t,e){const i=await Te(t),r=await Ot(i,"leases"),n=y(r,"integration"),a=`${n}.recovery`;if(q(a)){await v(a,r);const c=await Fe(a),f=await O(a);if(c===void 0||ge(c))return{ok:!1,reasonCode:"git-lifecycle-integration-backpressure"};if(!f||!await Q(a,r,async w=>await O(w)===f))return{ok:!1,reasonCode:"git-lifecycle-integration-backpressure"}}const o=ne(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:ne(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 M(r,i);try{return await Ne(r,R(n),`${JSON.stringify(s)}
|
|
4
|
-
`),await v(n,r),await K(y(n,"owner.json"),n),!0}catch(c){throw k(c,"EEXIST")||await Q(n,r).catch(()=>{}),c}};try{return await u(),{ok:!0,owner:s,path:n}}catch(c){if(!k(c,"EEXIST"))return{ok:!1,reasonCode:"git-lifecycle-integration-lock-failed"}}try{const c=await ce(n),f=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||ge(c.pid))||f!==void 0&&ge(f)||!c&&f===void 0&&await Ue(n))return{ok:!1,reasonCode:"git-lifecycle-integration-backpressure"};const g=await O(n);if(!g)return{ok:!1,reasonCode:"git-lifecycle-integration-lock-failed"};const m=`${n}.stale.${process.pid}.${Date.now()}`;await X(r,R(n),R(m));try{if(await v(m,r),await O(m)!==g)return await ae(m,n,r).catch(()=>{}),{ok:!1,reasonCode:"git-lifecycle-integration-backpressure"};await u()}finally{await Q(m,r,async S=>await O(S)===g).catch(()=>{})}return{ok:!0,owner:s,path:n}}catch(c){return{ok:!1,reasonCode:k(c,"EEXIST")||k(c,"ENOENT")?"git-lifecycle-integration-backpressure":"git-lifecycle-integration-lock-failed"}}}async function Ei(t,e){const i=await ce(t);return!!(i&&De(i,e)&&Date.parse(i.expiresAt)>Date.now())}async function Pt(t,e){try{const i=F(t);await v(t,i);const r=await ce(t);if(!r||!De(r,e))return!1;const n=await O(t);if(!n)return!1;const a=`${t}.release.${process.pid}.${Date.now()}`;await X(i,R(t),R(a)),await v(a,i);const o=await ce(a);return!o||!De(o,e)||await O(a)!==n?(await ae(a,t,i).catch(()=>{}),!1):Q(a,i,async s=>await O(s)===n)}catch(i){if(k(i,"ENOENT"))return!1;throw i}}function Nt(t){return b("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 Ii(t,e){if(!W(e.storyId)||!A(e.idempotencyKey)||!h(e.ownerDigest))return"foreign";const i=await Te(t),r=y(i,"leases"),n=y(r,"integration");if(!q(n))return"absent";try{await v(r,i),await v(n,r);const a=await ce(n);return!a||a.kind!=="direct"||a.storyId!==e.storyId||a.sessionId!==e.idempotencyKey||a.idempotencyKey!==e.idempotencyKey||a.persistent!==!0||Nt(a)!==e.ownerDigest?"foreign":await Pt(n,a)?"released":"foreign"}catch{return"foreign"}}async function ce(t){try{await v(t,F(t));const e=y(t,"owner.json");await K(e,t);const i=JSON.parse(await T(e,"utf8"));return i.schemaVersion!==1||i.kind!=="direct"&&i.kind!=="continuous"||!W(i.storyId)||!A(i.sessionId)||!A(i.idempotencyKey)||!Number.isSafeInteger(i.pid)||Number(i.pid)<=0||!I(i.createdAt)||!I(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 v(t,F(t));const e=y(t,"owner.json");await K(e,t);const i=JSON.parse(await T(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 _e(t){const e=await J(t),r=(await N("git",["rev-parse","--git-common-dir"],{cwd:e,encoding:"utf8",maxBuffer:1024*1024})).stdout.trim(),n=ie(r)?p(r):p(e,r),a=await J(n);if(a!==n)throw new Error("git-lifecycle-common-dir-symlink");await Vt(a);const s=(await N("git",["rev-parse","--git-common-dir"],{cwd:e,encoding:"utf8",maxBuffer:1024*1024})).stdout.trim();if((ie(s)?p(s):p(e,s))!==n)throw new Error("git-lifecycle-common-dir-raced");return a}async function Ke(t){const e=y(t,oe);if(q(e)||await $e(t,oe),await z(e,"directory"),await J(e)!==e)throw new Error("git-lifecycle-runtime-directory-symlink");return e}async function We(t,e={}){try{return await z(t,"file"),xe(JSON.parse(await T(t,"utf8")))}catch(i){if(k(i,"ENOENT")){if(e.required)throw new Error("git-lifecycle-runtime-missing");return Ee()}throw i}}async function $t(t){try{await z(t,"file")}catch(e){if(k(e,"ENOENT"))return;throw e}}async function z(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(de()&&i.uid!==process.getuid())throw new Error(`git-lifecycle-${e}-ownership-mismatch`);if(de()&&(i.mode&63)!==0)throw new Error(`git-lifecycle-${e}-permissions-unsafe`)}function ee(t,e){const i=p(t),r=p(e),n=ct(i,r);if(!n||n.startsWith("..")||ie(n)||F(r)!==i)throw new Error("git-lifecycle-private-path-escape")}async function M(t,e){const i=p(t);if(e&&ee(p(e),i),await z(i,"directory"),p(await J(i))!==i)throw new Error("git-lifecycle-directory-substituted");if(e){const r=p(e);if(await z(r,"directory"),p(await J(r))!==r)throw new Error("git-lifecycle-directory-parent-substituted")}}async function K(t,e){const i=p(t);if(ee(p(e),i),await M(p(e)),await z(i,"file"),p(await J(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(de()&&i.uid!==process.getuid())throw new Error(`git-lifecycle-${e}-ownership-mismatch`);if(de()&&(i.mode&63)!==0)throw new Error(`git-lifecycle-${e}-permissions-unsafe`)}async function Vt(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 Bt(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 de(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;E(e,["schemaVersion","revision","epics","stories"],"git-lifecycle-runtime-unknown-field");const i=d(e.epics),r=d(e.stories);if(e.schemaVersion!==1||!Number.isSafeInteger(e.revision)||Number(e.revision)<0||!i||!r||Object.values(i).some(n=>!d(n))||Object.values(r).some(n=>!d(n)))throw new Error("git-lifecycle-runtime-invalid");for(const[n,a]of Object.entries(i))if(!W(n)||!jt(a))throw new Error("git-lifecycle-runtime-epic-invalid");for(const[n,a]of Object.entries(r))if(!W(n)||!n.includes(".")||!zt(a,n))throw new Error("git-lifecycle-runtime-story-invalid");return e}const Lt=["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"],qt=["checkpoint","status","last_step","steps_completed"];function jt(t){return E(t,Lt,"git-lifecycle-runtime-epic-unknown-field"),(t.branch_mode===void 0||t.branch_mode==="epic")&&(t.execution_branch===void 0||Y(t.execution_branch))&&(t.origin_branch===void 0||Y(t.origin_branch))&&(t.branch_lease===void 0||t.branch_lease===null||Gt(t.branch_lease))&&(t.origin_binding===void 0||t.origin_binding===null||Ft(t.origin_binding))&&(t.graph_revision===void 0||h(t.graph_revision))&&(t.aggregate_qa_receipt===void 0||t.aggregate_qa_receipt===null||Mt(t.aggregate_qa_receipt))&&(t.terminal_git_receipt===void 0||t.terminal_git_receipt===null||Kt(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||Ut(t.git_reconciliation_receipts))&&(t.git_reconciliation_debt===void 0||Zt(t.git_reconciliation_debt))}function zt(t,e){return E(t,qt,"git-lifecycle-runtime-story-unknown-field"),(t.checkpoint===void 0||t.checkpoint===null||Je(t.checkpoint,e))&&(t.status===void 0||A(t.status))&&(t.last_step===void 0||t.last_step===null||A(t.last_step))&&(t.steps_completed===void 0||L(t.steps_completed,128))}function Gt(t){const e=d(t);return e?(E(e,["schemaVersion","ownerStoryId","sessionId","idempotencyKey","acquiredAt","expiresAt","handoffGrant","handoffConsumption"],"git-lifecycle-runtime-lease-unknown-field"),e.schemaVersion===1&&W(e.ownerStoryId)&&A(e.sessionId)&&A(e.idempotencyKey)&&I(e.acquiredAt)&&I(e.expiresAt)&&Date.parse(String(e.expiresAt))>Date.parse(String(e.acquiredAt))&&(e.handoffGrant===void 0||Ht(e.handoffGrant,e))&&(e.handoffConsumption===void 0||Tt(e.handoffConsumption,e))):!1}function Ht(t,e){const i=d(t);return i?(E(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&&h(i.tokenDigest)&&h(i.bundleDigest)&&h(i.claimRevision)&&I(i.expiresAt)&&Date.parse(String(i.expiresAt))<=Date.parse(String(e.expiresAt))):!1}function Tt(t,e){const i=d(t);return i?(E(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&&A(i.fromSessionId)&&h(i.tokenDigest)&&h(i.bundleDigest)&&h(i.claimRevision)&&i.consumedBySessionId===e.sessionId&&I(i.consumedAt)):!1}function Ft(t){const e=d(t);return e?(E(e,["schemaVersion","originBranch","originHeadSha","executionBranch","capturedFromCurrentCheckout","capturedAt"],"git-lifecycle-runtime-origin-unknown-field"),e.schemaVersion===1&&Y(e.originBranch)&&Y(e.executionBranch)&&e.originBranch!==e.executionBranch&&D(e.originHeadSha)&&e.capturedFromCurrentCheckout===!0&&I(e.capturedAt)):!1}function Mt(t){const e=d(t);if(!e)return!1;E(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===B&&h(e.manifestDigest)&&h(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"&&D(e.executionHeadSha)&&h(e.graphRevision)&&I(e.checkedAt)&&ue(e.receiptRef)&&L(e.gateIds,128,!0)}function Kt(t){const e=d(t);return e?(E(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&&W(e.epicId)&&Y(e.executionBranch)&&Y(e.originBranch)&&D(e.baseSha)&&D(e.executionHeadSha)&&(e.mergeSha===void 0||D(e.mergeSha))&&(e.pushedSha===void 0||D(e.pushedSha))&&(e.strategy==="direct"||e.strategy==="single_pr")&&(e.candidateQa===void 0||Yt(e.candidateQa,e))&&(e.providerGuard===void 0||Wt(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))&&L(e.localGateReceiptRefs,128,!0)&&A(e.idempotencyKey)&&I(e.attemptStartedAt)&&(e.completedAt===void 0||I(e.completedAt))&&typeof e.retryEligible=="boolean"&&L(e.reasonCodes,128)&&e.publicSafe===!0):!1}function Wt(t,e){const i=d(t);if(!i)return!1;E(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&&D(i.prHeadSha)&&i.prHeadSha===e.mergeSha&&D(i.originHeadSha)&&i.originHeadSha===e.baseSha&&I(i.checkedAt)&&i.publicSafe===!0}function Yt(t,e){const i=d(t);return i?(E(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===B&&D(i.originHeadSha)&&i.originHeadSha===e.baseSha&&D(i.executionHeadSha)&&i.executionHeadSha===e.executionHeadSha&&D(i.mergeSha)&&i.mergeSha===e.mergeSha&&D(i.treeSha)&&h(i.graphRevision)&&h(i.manifestDigest)&&h(i.resultDigest)&&L(i.gateIds,128,!0)&&I(i.checkedAt)&&ue(i.receiptRef)):!1}function Je(t,e){const i=d(t);if(!i)return!1;E(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&&Y(i.branch)&&D(i.baseSha)&&D(i.headSha)&&i.baseSha!==i.headSha&&ei(i.commits)&&i.commits.length===1&&i.commits[0]===i.headSha&&A(i.idempotencyKey)&&(i.dispatchId===void 0||h(i.dispatchId))&&(i.bundleId===void 0||h(i.bundleId))&&h(i.bundleDigest)&&h(i.graphRevision)&&(i.claimRevision===void 0||h(i.claimRevision))&&L(i.receiptRefs,256,!0)&&(i.qaVerdict==="passed"||i.qaVerdict==="blocked")&&["approved","changes-requested","pending"].includes(String(i.reviewVerdict))&&Jt(i.qaReceipt,i)&&(i.reviewVerdict==="pending"?i.reviewReceipt===void 0:Qt(i.reviewReceipt,i))&&I(i.recordedAt)}function Jt(t,e){const i=d(t);return i?(E(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===B&&h(i.manifestDigest)&&L(i.gateIds,32,!0)&&h(i.resultDigest))&&Qe(i,e)&&h(i.sourceEvidenceDigest)&&i.verdict===e.qaVerdict&&(i.verdict==="passed"||i.verdict==="blocked")&&I(i.checkedAt)&&ue(i.receiptRef)&&e.receiptRefs.includes(i.receiptRef)):!1}function Qt(t,e){const i=d(t),r=d(e.qaReceipt);return!i||!r?!1:(E(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)&&h(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")&&I(i.reviewedAt)&&Date.parse(String(i.reviewedAt))>=Date.parse(String(r.checkedAt))&&ue(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 Ut(t){return!Array.isArray(t)||t.length>1024?!1:t.every(e=>{const i=d(e);return i?(E(i,["schemaVersion","resourceId","action","outcome","idempotencyKey","reasonCodes","recordedAt","publicSafe"],"git-lifecycle-runtime-reconciliation-receipt-unknown-field"),i.schemaVersion===1&&A(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))&&A(i.idempotencyKey)&&L(i.reasonCodes,128)&&I(i.recordedAt)&&i.publicSafe===!0):!1})}function Zt(t){return!Array.isArray(t)||t.length>1024?!1:t.every(e=>{const i=d(e);return i?(E(i,["schemaVersion","resourceId","action","managed","reasonCodes","evidence","publicSafe"],"git-lifecycle-runtime-reconciliation-debt-unknown-field"),i.schemaVersion===1&&A(i.resourceId)&&i.action==="preserve"&&typeof i.managed=="boolean"&&L(i.reasonCodes,128)&&L(i.evidence,16)&&i.publicSafe===!0):!1})}function E(t,e,i){const r=new Set(e);if(Object.keys(t).some(n=>!r.has(n)))throw new Error(i)}function W(t){return typeof t=="string"&&/^P[1-9][0-9]*(?:\.[0-9]+)*$/.test(t)}function Xt(t){const e=d(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")&&W(e.epicId)&&W(e.storyId)&&String(e.storyId).startsWith(`${String(e.epicId)}.`)&&Y(e.executionBranch)&&typeof e.graphRevision=="string"&&/^[a-f0-9]{64}$/.test(e.graphRevision)&&e.publicSafe===!0:!1}function Y(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 fe(t){return t.length>0&&t.length<=1024&&!ie(t)&&!t.includes("\0")&&!t.replaceAll("\\","/").split("/").includes("..")}function A(t){return typeof t=="string"&&t.length>0&&t.length<=240&&/^[A-Za-z0-9._:/#\-[\]]+$/.test(t)&&!t.includes("..")}function ue(t){return A(t)}function D(t){return typeof t=="string"&&/^[a-f0-9]{40,64}$/i.test(t)}function h(t){return typeof t=="string"&&/^[a-f0-9]{64}$/i.test(t)}function I(t){return typeof t=="string"&&t.length<=64&&Number.isFinite(Date.parse(t))}function L(t,e,i=!1){return Array.isArray(t)&&t.length<=e&&(!i||t.length>0)&&t.every(A)}function ei(t){return Array.isArray(t)&&t.length>0&&t.length<=256&&t.every(D)}function Ee(){return{schemaVersion:1,revision:0,epics:{},stories:{}}}async function ti(t){const e=F(t),i={pid:process.pid,nonce:ye(16).toString("hex")},r=async()=>{await M(e),await Ne(e,R(t),JSON.stringify(i));try{await v(t,e),await K(y(t,"owner.json"),t)}catch(n){throw await Q(t,e).catch(()=>{}),n}};try{await r()}catch(n){if(!k(n,"EEXIST"))throw n;await z(t,"directory");const a=await Ie(t);if(a!==void 0&&ge(a.pid))throw new Error("git-lifecycle-runtime-lock-active");if(a===void 0&&await Ue(t))throw new Error("git-lifecycle-runtime-lock-active");const o=await O(t);if(!o)throw new Error("git-lifecycle-runtime-lock-owner-invalid");const s=`${t}.stale.${process.pid}.${Date.now()}`;await X(e,R(t),R(s));try{if(await v(s,e),await O(s)!==o)throw await ae(s,t,e).catch(()=>{}),new Error("git-lifecycle-runtime-lock-owner-replaced");await r()}finally{await Q(s,e,async u=>await O(u)===o).catch(()=>{})}}return i}async function ii(t,e){const i=F(t);try{await v(t,i);const r=await Ie(t);if(!r||!Ze(r,e))return!1;const n=await O(t);if(!n)return!1;const a=`${t}.release.${process.pid}.${Date.now()}`;await X(i,R(t),R(a)),await v(a,i);const o=await Ie(a);return!o||!Ze(o,e)||await O(a)!==n?(await ae(a,t,i).catch(()=>{}),!1):Q(a,i,async s=>await O(s)===n)}catch(r){if(k(r,"ENOENT"))return!1;throw r}}async function Ue(t){try{return Date.now()-(await at(t)).mtimeMs<3e4}catch{return!0}}async function Ie(t){try{await v(t,F(t));const e=y(t,"owner.json");await K(e,t);const i=JSON.parse(await T(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 ge(t){try{return process.kill(t,0),!0}catch(e){return k(e,"EPERM")}}function d(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:void 0}function k(t,e){return t instanceof Error&&"code"in t&&t.code===e}export{oe as GIT_LIFECYCLE_RUNTIME_DIRECTORY,se as GIT_LIFECYCLE_RUNTIME_FILE,Be as LEGACY_DIRECT_YOLO_RECOVERY_COMMITS,mt as LEGACY_P174_CHECKPOINT_MIGRATIONS,B as P205_COMPLETE_COMMAND,xi as acquireGitLifecyclePhysicalIntegrationLock,wt as applyGitLifecycleRuntimeOverlay,v as assertGitLifecyclePrivateDirectory,_i as assertGitLifecyclePrivateFile,Nt as computeGitLifecyclePhysicalIntegrationLockOwnerDigest,Rt as computeImmutableStoryQaEvidenceDigest,Di as computeLegacyDirectYoloRecoveryReceiptRef,At as computeP205StoryQaEvidenceDigest,Ot as ensureGitLifecyclePrivateChildDirectory,mi as ensureGitLifecycleRuntimeInitialized,St as ensureRuntimeEpic,yi as ensureRuntimeStory,hi as executeP205TransientAuthority,Te as gitLifecycleRuntimeDirectory,Et as gitLifecycleStoryWriteSet,ze as isAcceptedGitLifecycleStoryCheckpoint,qe as mutateGitLifecycleRuntime,Si as p205TransientAuthorityMatchesAggregate,pi as persistGitLifecycleGraphAuthority,de as posixSecurityAvailable,wi as projectP205TransientExecutionEvidence,ve as readGitLifecycleRuntime,yt as readGitLifecycleRuntimeSync,Pt as releaseGitLifecyclePhysicalIntegrationLock,Ii as releaseGitLifecyclePhysicalIntegrationLockForCheckpoint,Q as removeGitLifecyclePrivateDirectory,bi as verifyAcceptedGitLifecycleStoryCheckpoint,vt as verifyAcceptedGitLifecycleStoryCheckpointSync,Ei as verifyGitLifecyclePhysicalIntegrationLock,vi as verifyLegacyCheckpointMigrationCandidateSync};
|
|
1
|
+
import{execFile as ri,execFileSync as re}from"node:child_process";import{createHash as b,randomBytes as ye}from"node:crypto";import{lstat as be,open as ni,readFile as H,realpath as U,stat as ai}from"node:fs/promises";import{existsSync as q,lstatSync as Oe,readFileSync as Pe,realpathSync as we}from"node:fs";import{basename as R,dirname as M,isAbsolute as ne,join as y,relative as ci,resolve as p}from"node:path";import{promisify as oi}from"node:util";import{publicWriteSet as si}from"../../../shared/dist/yoloop/public-story-write-set.js";import{resolveBranchUnit as di}from"../../../shared/dist/yoloop/branch-unit.js";import{anchoredAtomicWriteFile as fi,anchoredCreateOwnedDirectory as Be,anchoredEnsureDirectory as Ne,anchoredExecuteGit as ui,anchoredExecuteNode as $e,anchoredRemoveDirectory as gi,anchoredRenameDirectory as ie}from"./secure-filesystem-boundary.js";import{GIT_LIFECYCLE_COMMIT_PUSH_STEP_ID as hi,GIT_LIFECYCLE_REVIEW_PR_STEP_ID as li}from"./git-lifecycle-step-ids.js";const P=oi(ri),de="neocortex-yoloop",fe="runtime.json",V="node scripts/test-root.mjs --gate complete",Ve=Object.freeze({"P174.03.029264":"339141be7339a0edf55710cbccb6e6558f514792"}),mi=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",pi="runtime.lock",Le=new WeakMap;async function lt(i,e){if(!_(e.headSha)||!h(e.graphRevision))throw new Error("p205-transient-binding-invalid");const t=e.anchoredWorkspace;if(t&&p(i)!==y(p(t.parent),t.name))throw new Error("p205-transient-anchor-binding-invalid");const r=async I=>t?(await ui(t.parent,t.name,t.identity,I)).toString("utf8"):String((await P("git",[...I],{cwd:i,encoding:"utf8",maxBuffer:8*1024*1024})).stdout),n=async()=>t?JSON.parse((await $e(t.parent,t.name,t.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(y(i,"config","release-gates.v2.json"),"utf8"),runner:await H(y(i,"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:d}=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||d!==c)throw new Error("p205-transient-producer-dirty");const f=JSON.parse(o),v=Array.isArray(f.requiredCompleteClasses)?f.requiredCompleteClasses.filter(I=>typeof I=="string"&&/^[a-z0-9-]+$/.test(I)):[];if(f.contract!=="P205-CI-02"||v.length===0)throw new Error("p205-transient-manifest-invalid");const g=t?(await $e(t.parent,t.name,t.identity,["scripts/test-root.mjs","--gate","complete"])).toString("utf8"):String((await P(process.execPath,["scripts/test-root.mjs","--gate","complete"],{cwd:i,encoding:"utf8",maxBuffer:64*1024*1024})).stdout),{manifest:l,runner:w}=await n();if(l!==o||w!==d)throw new Error("p205-transient-producer-raced");if((await r(["rev-parse","HEAD"])).trim()!==e.headSha)throw new Error("p205-transient-head-raced");const $=b("sha256").update(o).digest("hex"),C=b("sha256").update(g).digest("hex"),J=ce(e.nowIso??new Date().toISOString()),S=b("sha256").update(["p205-transient-execution-v1",V,e.headSha,e.graphRevision,$,v.join(","),C,J].join("\0")).digest("hex"),m=Object.freeze({schemaVersion:1,kind:"p205_transient_execution_authority",contract:"P205-CI-02",command:V,executionHeadSha:e.headSha,graphRevision:e.graphRevision,manifestDigest:$,gateIds:Object.freeze(v),resultDigest:C,executedAt:J,executionEvidenceDigest:S}),F=Object.freeze(Object.create(null));return Le.set(F,m),F}async function ve(i,e={}){const t=await Ci(i);return We(t,e)}function yi(i,e={}){let t;try{const r=re("git",["rev-parse","--git-common-dir"],{cwd:i,encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim(),n=we(i),a=ne(r)?p(r):p(n,r),o=we(a);if(o!==a)throw new Error("git-lifecycle-common-dir-symlink");Vi(o);const d=y(o,de),u=y(d,fe);if(q(d)&&(Ye(d,"directory"),we(d)!==d))throw new Error("git-lifecycle-runtime-directory-symlink");t=q(u)?u:y(o,Se)}catch{if(e.required)throw new Error("git-lifecycle-common-dir-invalid");return Ee()}if(!q(t)){if(e.required)throw new Error("git-lifecycle-runtime-missing");return Ee()}return Ye(t,"file"),xe(JSON.parse(Pe(t,"utf8")))}async function mt(i){try{await ve(i,{required:!0});return}catch(e){if(!(e instanceof Error)||e.message!=="git-lifecycle-runtime-missing")throw e}try{await qe(i,()=>{},{expectedRevision:0})}catch(e){if(!(e instanceof Error)||e.message!=="git-lifecycle-runtime-revision-conflict")throw e;await ve(i,{required:!0})}}async function pt(i,e,t=new Date().toISOString()){if(!Xi(e))throw new Error("git-lifecycle-graph-authority-invalid");const r=y(p(i),".neocortex","state.json"),n=await H(r,"utf8"),a=s(JSON.parse(n));if(!a)throw new Error("git-lifecycle-tracked-state-invalid");const o=await ve(i),d=wi(a,o),u=s(s(d.epics)?.[e.epicId]),c=s(s(d.stories)?.[e.storyId]);if(!u)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");const f=Array.isArray(u.stories)?u.stories.filter(S=>typeof S=="string"):Object.keys(s(d.stories)??{}).filter(S=>{const m=s(s(d.stories)?.[S]);return String(m?.epic_id??S.split(".")[0])===e.epicId});if(Array.isArray(u.stories)&&!f.includes(e.storyId))throw new Error("git-lifecycle-graph-authority-story-invalid");const v=f.map(S=>{const m=s(s(d.stories)?.[S])??{};return{id:S,branch_name:typeof m.branch_name=="string"||m.branch_name===null?m.branch_name:void 0,pr_number:typeof m.pr_number=="number"||m.pr_number===null?m.pr_number:void 0,steps_completed:Array.isArray(m.steps_completed)?m.steps_completed.filter(F=>typeof F=="string"):[],checkpoint:s(m.checkpoint)}}),g=di({...u,id:e.epicId},v);if(g.mode!=="epic")throw new Error("git-lifecycle-graph-authority-epic-invalid");if(g.executionBranch!==e.executionBranch)throw new Error("git-lifecycle-graph-authority-branch-mismatch");if(g.originBranch!==void 0&&g.originBranch!==e.originBranch)throw new Error("git-lifecycle-graph-authority-origin-mismatch");const l=typeof s(o.epics[e.epicId])?.origin_branch=="string"?String(s(o.epics[e.epicId]).origin_branch):void 0;if(l!==void 0&&l!==e.originBranch)throw new Error("git-lifecycle-graph-authority-origin-mismatch");if(g.originBranch===void 0&&l===void 0){const{stdout:S}=await P("git",["branch","--show-current"],{cwd:i,encoding:"utf8",maxBuffer:1048576});if(String(S).trim()!==e.originBranch)throw new Error("git-lifecycle-graph-authority-origin-physical-mismatch")}const w=typeof u.graph_revision=="string"?u.graph_revision:void 0,B=typeof s(o.epics[e.epicId])?.graph_revision=="string"?String(s(o.epics[e.epicId]).graph_revision):void 0;if(w!==void 0&&!h(w))throw new Error("git-lifecycle-graph-revision-invalid");if(w===e.graphRevision&&B===e.graphRevision&&g.originBranch===e.originBranch&&l===e.originBranch)return{applied:!1,reused:!0,revision:o.revision,graphRevision:e.graphRevision};const $=Date.parse(t);if(!Number.isFinite($))throw new Error("git-lifecycle-graph-authority-time-invalid");const C=s(u.branch_lease);if(C&&Number.isFinite(Date.parse(String(C.expiresAt)))&&Date.parse(String(C.expiresAt))>$)throw new Error("git-lifecycle-graph-authority-writer-active");return{applied:!0,reused:!1,revision:(await qe(i,S=>{const m=Si(S,e.epicId);if(m.branch_mode!==void 0&&m.branch_mode!=="epic")throw new Error("git-lifecycle-graph-authority-epic-raced");const F=m.execution_branch;if(F!==void 0&&F!==e.executionBranch)throw new Error("git-lifecycle-graph-authority-branch-raced");const I=m.origin_branch;if(I!==void 0&&I!==e.originBranch)throw new Error("git-lifecycle-graph-authority-origin-raced");const X=m.graph_revision;if(X!==void 0&&X!==w)throw new Error("git-lifecycle-graph-authority-epoch-raced");const Q=s(m.branch_lease);if(Q&&Number.isFinite(Date.parse(String(Q.expiresAt)))&&Date.parse(String(Q.expiresAt))>$)throw new Error("git-lifecycle-graph-authority-writer-active");m.branch_mode="epic",m.execution_branch=e.executionBranch,m.origin_branch=e.originBranch,m.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(i,e,t={}){const r=await _e(i),n=await Ke(r),a=y(n,pi),o=await it(a);try{const d=y(n,fe),u=y(r,Se),c=await We(q(d)?d:u);if(t.expectedRevision!==void 0&&t.expectedRevision!==c.revision)throw new Error("git-lifecycle-runtime-revision-conflict");const f=structuredClone(c),v=e(f),g=xe({...f,schemaVersion:1,revision:c.revision+1});return await t.preCommit?.(g),await z(n,"directory"),await Ni(d),await fi(n,fe,`${JSON.stringify(g,null,2)}
|
|
2
|
+
`),await z(d,"file"),await bi(n),{document:g,value:v}}finally{await tt(a,o).catch(()=>{})}}async function bi(i){let e;try{e=await ni(i,"r")}catch(t){if(process.platform==="win32"&&(k(t,"EPERM")||k(t,"EISDIR")||k(t,"EINVAL")))return;throw t}try{await e.sync()}finally{await e.close()}}function wi(i,e){const t=structuredClone(i),r=je(t,"epics"),n=je(t,"stories");for(const[a,o]of Object.entries(e.epics))r[a]={...s(r[a])??{},...structuredClone(o)};for(const[a,o]of Object.entries(e.stories))n[a]={...s(n[a])??{},...structuredClone(o)};return t}function je(i,e){const t=i[e];if(t===void 0){const a={};return i[e]=a,a}const r=s(t);if(r)return r;if(!Array.isArray(t))throw new Error(`git-lifecycle-tracked-${e}-invalid`);const n={};for(const a of t){const o=s(a),d=typeof o?.id=="string"?o.id.trim():"";if(!d||n[d]!==void 0)throw new Error(`git-lifecycle-tracked-${e}-ambiguous`);n[d]=o}return i[e]=n,n}function Si(i,e){return i.epics[e]??(i.epics[e]={})}function yt(i,e){return i.stories[e]??(i.stories[e]={})}function ze(i,e,t,r){const n=s(i);return!!(n&&n.epicId===t&&n.branch===r&&n.qaVerdict==="passed"&&n.reviewVerdict==="approved"&&Je(n,e))}async function bt(i,e,t,r,n,a,o=[]){return vi(i,e,t,r,n,a,o).verdict==="verified"}function vi(i,e,t,r,n,a,o=[],d=new Date().toISOString()){const u=()=>ki({storyId:t,epicId:r,executionBranch:n,value:e,verifiedAt:d,verdict:"rejected",reasonCode:"checkpoint-git-physical-invalid"});try{if(!ze(e,t,r,n))return u();const c=s(e),f=s(c.qaReceipt),v=s(c.reviewReceipt),g=String(c.headSha),l=String(c.baseSha),w=j(i,["rev-parse",`refs/heads/${n}`]).trim();re("git",["merge-base","--is-ancestor",g,w],{cwd:i,stdio:"ignore"});const B=j(i,["show","--no-patch","--format=%H%n%P%n%B",g]),$=j(i,["rev-parse",`${g}^`]).trim(),C=j(i,["rev-list","--count",`${l}..${g}`]).trim();if($!==l||C!=="1")return u();const J=new Set(B.split(`
|
|
3
|
+
`).map(G=>G.trim())),m=[`Neocortex-Story: ${t}`,`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=>J.has(G));if(m){const Ce=[...J].find(ti=>ti.startsWith("Neocortex-Prepared-Base: "))?.slice(25)??"";if(!/^[a-f0-9]{40,64}$/i.test(Ce))return u();re("git",["merge-base","--is-ancestor",Ce,g],{cwd:i,stdio:"ignore"})}const I=j(i,["diff-tree","--no-commit-id","--name-only","-r","-z",g]).split("\0").filter(Boolean);if(I.length===0||I.some(G=>!ge(G)))return u();const X=b("sha256").update(B).digest("hex"),Q=b("sha256").update([...I].sort().join("\0")).digest("hex"),N=Ge({checkpoint:c,storyId:t,epicId:r,executionBranch:n,baseSha:l,headSha:g,commitBodyDigest:X,changedPathsDigest:Q,changedPaths:I,authorizedWriteSet:o.length>0?o:xi(i,t)});if(!N||f.receiptRef!==`story-qa:${String(f.sourceEvidenceDigest)}`)return u();const Re=Ri({storyId:t,baseSha:l,headSha:g,bundleDigest:String(c.bundleDigest),graphRevision:String(c.graphRevision),commitBody:B,changedPaths:I}),Ae=f.evidenceVersion==="p205-execution-v2"&&f.contract==="P205-CI-02"&&f.command===V&&h(f.manifestDigest)&&L(f.gateIds,32,!0)&&h(f.resultDigest)&&f.sourceEvidenceDigest===Ai({gitEvidenceDigest:Re,headSha:g,graphRevision:String(c.graphRevision),manifestDigest:String(f.manifestDigest),gateIds:f.gateIds,resultDigest:String(f.resultDigest)}),Xe=f.evidenceVersion==="git-immutable-v1"&&f.sourceEvidenceDigest===Re,ei=f.evidenceVersion===void 0&&N.mode==="legacy-migration"&&N.binding?.qaDigest===f.sourceEvidenceDigest,me=Di(a,w,String(c.graphRevision))&&(Ae||N.mode==="legacy-migration"&&(Xe||ei)),pe=a===void 0&&Ae;if(!me&&!pe)return u();const ke=b("sha256").update(["root-commit-range-review-v1",t,l,g,String(c.bundleDigest),String(c.graphRevision),String(f.receiptRef),b("sha256").update(B).digest("hex"),[...I].sort().join(",")].join("\0")).digest("hex");if(v.sourceEvidenceDigest!==ke||v.receiptRef!==`story-review:${ke}`||N.mode==="legacy-migration"&&N.binding?.reviewDigest!==void 0&&N.binding.reviewDigest!==v.sourceEvidenceDigest||!m&&(Ve[t]!==g||!Array.isArray(c.receiptRefs)||!c.receiptRefs.some(G=>typeof G=="string"&&G.startsWith("legacy-direct-yolo:"))))return u();const ii=b("sha256").update(["checkpoint-p205-transient-v1",t,r,n,l,g,String(c.bundleDigest),X,Q,N.mode,N.effectiveClaimRevision,String(f.sourceEvidenceDigest),String(v.sourceEvidenceDigest),ae(a)?.executionEvidenceDigest??(pe?"maintenance-git-verification":"legacy-bounded-authority")].join("\0")).digest("hex"),ee=me?ae(a):void 0;return Object.freeze({schemaVersion:1,kind:"story_checkpoint_physical_verification",producer:"client-p205-transient-v1",storyId:t,epicId:r,branch:n,baseSha:l,headSha:g,aggregateHeadSha:ee?.executionHeadSha??g,commitBodyDigest:X,changedPathsDigest:Q,claimVerification:N.mode,effectiveClaimRevision:N.effectiveClaimRevision,sourceEvidenceDigest:ii,command:V,manifestDigest:ee?.manifestDigest??"0".repeat(64),gateIds:ee?.gateIds??Object.freeze(["legacy-bounded"]),resultDigest:ee?.resultDigest??"0".repeat(64),graphRevision:String(c.graphRevision),executionEvidenceDigest:ee?.executionEvidenceDigest??"0".repeat(64),verifiedAt:ee?.executedAt??ce(d),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 Di(i,e,t){const r=ae(i);return!!(r&&r.schemaVersion===1&&r.kind==="p205_transient_execution_authority"&&r.contract==="P205-CI-02"&&r.command===V&&r.graphRevision===t&&h(r.resultDigest)&&h(r.executionEvidenceDigest)&&r.executionHeadSha===e&&_(e))}function ae(i){return i&&typeof i=="object"?Le.get(i):void 0}function wt(i){const e=ae(i);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 St(i,e,t){const r=ae(i);return!!(r&&r.executionHeadSha===e&&r.graphRevision===t&&r.command===V)}function Ge(i){const e=mi[i.storyId],t=typeof i.checkpoint.claimRevision=="string"?i.checkpoint.claimRevision:void 0,r=i.storyId==="P174.03.811759"||i.storyId==="P174.03.685003",n=_i(i.authorizedWriteSet),a=n.length>0&&n.length===i.authorizedWriteSet.length&&i.changedPaths.every(o=>n.some(d=>Ii(d,o)));if(e&&i.epicId==="P174"&&i.executionBranch==="epic/P174"&&i.baseSha===e.baseSha&&i.headSha===e.headSha&&i.checkpoint.graphRevision===e.graphRevision&&i.commitBodyDigest===e.commitBodyDigest&&i.changedPathsDigest===e.changedPathsDigest&&(r?t===void 0:t===e.effectiveClaimRevision))return i.authorizedWriteSet.length>0&&(!a||!He(e.effectiveClaimRevision,n))?void 0:Object.freeze({mode:"legacy-migration",effectiveClaimRevision:e.effectiveClaimRevision,binding:e});if(t!==void 0&&!(!t||!h(t))&&!(!a||!He(t,n)))return Object.freeze({mode:"canonical",effectiveClaimRevision:t})}function _i(i){const e=i.map(t=>t.replaceAll("\\","/").replace(/^\.\//,"").replace(/\/{2,}/g,"/"));return e.some(t=>!ge(t))?Object.freeze([]):Object.freeze([...new Set(e)].sort())}function xi(i,e){try{const t=JSON.parse(Pe(y(i,".neocortex","state.json"),"utf8")),r=s(t.stories),n=s(r?.[e]),a=yi(i),o=s(a.stories[e]?.checkpoint)??s(n?.checkpoint);return Ei(e,n,o)}catch{return[]}}function Ei(i,e,t){const r=Array.isArray(e?.files_to_modify)?e.files_to_modify.filter(n=>typeof n=="string"):[];if(!t?.dispatchId||!t.bundleId)return r;try{return si({...e,id:i,files_to_modify:r})}catch{return[]}}function He(i,e){return i===b("sha256").update(e.join("\0")).digest("hex")||i===b("sha256").update(JSON.stringify(e)).digest("hex")}function Ii(i,e){return i===e||i.endsWith("/")&&e.startsWith(i)}function vt(i,e,t,r,n,a){try{if(!ze(e,t,r,n))return!1;const o=s(e),d=s(o.qaReceipt),u=s(o.reviewReceipt),c=String(o.headSha),f=String(o.baseSha),v=j(i,["rev-parse",`refs/heads/${n}`]).trim();if(re("git",["merge-base","--is-ancestor",c,v],{cwd:i,stdio:"ignore"}),j(i,["rev-parse",`${c}^`]).trim()!==f||j(i,["rev-list","--count",`${f}..${c}`]).trim()!=="1")return!1;const g=j(i,["show","--no-patch","--format=%H%n%P%n%B",c]),l=j(i,["diff-tree","--no-commit-id","--name-only","-r","-z",c]).split("\0").filter(Boolean);if(l.length===0||l.some(B=>!ge(B)))return!1;const w=Ge({checkpoint:o,storyId:t,epicId:r,executionBranch:n,baseSha:f,headSha:c,changedPaths:l,authorizedWriteSet:a,commitBodyDigest:b("sha256").update(g).digest("hex"),changedPathsDigest:b("sha256").update([...l].sort().join("\0")).digest("hex")});return!(w?.mode!=="legacy-migration"||!w.binding||d.sourceEvidenceDigest!==w.binding.qaDigest||d.receiptRef!==`story-qa:${w.binding.qaDigest}`||u.sourceEvidenceDigest!==w.binding.reviewDigest||u.receiptRef!==`story-review:${w.binding.reviewDigest}`||u.qaReceiptRef!==d.receiptRef)}catch{return!1}}function Ri(i){return b("sha256").update(["local-yolo-tdd-git-immutable-v1",i.storyId,i.baseSha,i.headSha,i.bundleDigest,i.graphRevision,b("sha256").update(i.commitBody).digest("hex"),b("sha256").update([...i.changedPaths].sort().join("\0")).digest("hex")].join("\0")).digest("hex")}function Ai(i){return b("sha256").update(["local-yolo-tdd-p205-execution-v2",V,i.gitEvidenceDigest,i.headSha,i.graphRevision,i.manifestDigest,i.gateIds.join(","),i.resultDigest].join("\0")).digest("hex")}function ki(i){const e=s(i.value);return Object.freeze({schemaVersion:1,kind:"story_checkpoint_physical_verification",producer:"client-p205-transient-v1",storyId:i.storyId,epicId:i.epicId,branch:i.executionBranch,baseSha:_(e?.baseSha)?String(e?.baseSha):"0".repeat(40),headSha:_(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:ce(i.verifiedAt),verdict:i.verdict,reasonCodes:Object.freeze([i.reasonCode]),publicSafe:!0})}function j(i,e){return re("git",[...e],{cwd:i,encoding:"utf8",maxBuffer:32*1024*1024})}function ce(i){return Number.isFinite(Date.parse(i))?new Date(Date.parse(i)).toISOString():new Date().toISOString()}async function Dt(i,e){if(Ve[e.storyId]!==e.headSha)return;const t=[".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 P("git",["rev-parse",`refs/heads/${e.executionBranch}`],{cwd:i,encoding:"utf8",maxBuffer:1048576})).stdout.trim();if(await P("git",["merge-base","--is-ancestor",e.headSha,r],{cwd:i}),(await P("git",["rev-parse",`${e.headSha}^`],{cwd:i,encoding:"utf8",maxBuffer:1024*1024})).stdout.trim()!==e.baseSha)return;const a=String((await P("git",["diff","--binary","--full-index",`${e.baseSha}..${e.headSha}`],{cwd:i,encoding:"utf8",maxBuffer:32*1024*1024})).stdout);if(b("sha256").update(a).digest("hex")!==e.bundleDigest)return;const o=String((await P("git",["show","--no-patch","--format=%H%n%P%n%B",e.headSha],{cwd:i,encoding:"utf8",maxBuffer:4*1024*1024})).stdout);if(!String((await P("git",["show","--no-patch","--format=%s",e.headSha],{cwd:i,encoding:"utf8",maxBuffer:1024*1024})).stdout).trim().includes(e.storyId))return;const c=String((await P("git",["diff-tree","--no-commit-id","--name-only","-r","-z",e.headSha],{cwd:i,encoding:"utf8",maxBuffer:8*1024*1024})).stdout).split("\0").filter(Boolean);if(!t.every(S=>c.includes(S))||c.some(S=>!ge(S)))return;const f=await Promise.all(t.map(async S=>String((await P("git",["show",`${e.headSha}:${S}`],{cwd:i,encoding:"utf8",maxBuffer:16*1024*1024})).stdout))),v=JSON.parse(f[0]),g=s(v.stories),l=s(v.epics),w=s(g?.[e.storyId]),B=s(l?.[e.epicId]),$=Array.isArray(w?.steps_completed)?w.steps_completed:[],C=JSON.parse(f[1]);return w?.status!=="done"||!$.includes(hi)||!$.includes(li)||B?.branch_mode!=="epic"||B.execution_branch!==e.executionBranch||C.storyId!==e.storyId||C.status!=="qa-passed"||C.safeToContinueYoloop!==!0||!Array.isArray(C.blockingChecks)||C.blockingChecks.length!==0||!f[2].includes(e.storyId)||!/P205[\s\S]{0,80}(pass|aprov)/i.test(f[2])||!f[3].includes(e.storyId)||!/approved|aprovado/i.test(f[3])||!f[4].includes(e.storyId)?void 0:`legacy-direct-yolo:${b("sha256").update(["legacy-direct-yolo-recovery-v1",e.storyId,e.epicId,e.executionBranch,e.baseSha,e.headSha,e.bundleDigest,e.graphRevision,b("sha256").update(o).digest("hex"),b("sha256").update([...c].sort().join("\0")).digest("hex"),...f.map(S=>b("sha256").update(S).digest("hex"))].join("\0")).digest("hex")}`}catch{return}}async function Ci(i){const e=await _e(i),t=y(e,de),r=y(t,fe);if(q(t)&&(await z(t,"directory"),await U(t)!==t))throw new Error("git-lifecycle-runtime-directory-symlink");return q(r)?r:y(e,Se)}async function Te(i){return Ke(await _e(i))}async function Oi(i,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 t=p(i);await K(t);const r=p(t,e);return te(t,r),q(r)||await Ne(t,e),await K(r,t),await K(t),r}async function D(i,e){const t=p(e),r=p(i);te(t,r),await K(t),await K(r,t)}async function _t(i,e){await W(i,e)}async function Z(i,e,t){const r=p(e),n=p(i);te(r,n);try{await D(n,r)}catch(o){if(k(o,"ENOENT"))return!1;throw o}const a=p(r,`${n.slice(r.length+1)}.remove.${process.pid}.${Date.now()}.${ye(4).toString("hex")}`);return te(r,a),await ie(r,R(n),R(a)),await D(a,r),t&&!await t(a)?(await oe(a,n,r).catch(()=>{}),!1):(await gi(r,R(a)),!0)}async function oe(i,e,t){await D(i,t);try{await be(e);return}catch(r){if(!k(r,"ENOENT"))throw r}await ie(t,R(i),R(e)),await D(e,t)}async function O(i){try{await D(i,M(i));const e=y(i,"owner.json");await W(e,i);const t=await H(e);return await W(e,i),b("sha256").update(t).digest("hex")}catch{return}}async function xt(i,e){const t=await Te(i),r=await Oi(t,"leases"),n=y(r,"integration"),a=`${n}.recovery`;if(q(a)){await D(a,r);const c=await Fe(a),f=await O(a);if(c===void 0||le(c))return{ok:!1,reasonCode:"git-lifecycle-integration-backpressure"};if(!f||!await Z(a,r,async v=>await O(v)===f))return{ok:!1,reasonCode:"git-lifecycle-integration-backpressure"}}const o=ce(e.createdAt??new Date().toISOString()),d=Object.freeze({schemaVersion:1,kind:e.kind,storyId:e.storyId,sessionId:e.sessionId,idempotencyKey:e.idempotencyKey,pid:process.pid,createdAt:o,expiresAt:ce(e.expiresAt),persistent:e.persistent,ownerNonce:e.ownerNonce??ye(16).toString("hex")});if(Date.parse(d.expiresAt)<=Date.parse(d.createdAt))return{ok:!1,reasonCode:"git-lifecycle-integration-lock-failed"};const u=async()=>{await K(r,t);try{return await Be(r,R(n),`${JSON.stringify(d)}
|
|
4
|
+
`),await D(n,r),await W(y(n,"owner.json"),n),!0}catch(c){throw k(c,"EEXIST")||await Z(n,r).catch(()=>{}),c}};try{return await u(),{ok:!0,owner:d,path:n}}catch(c){if(!k(c,"EEXIST"))return{ok:!1,reasonCode:"git-lifecycle-integration-lock-failed"}}try{const c=await se(n),f=c?void 0:await Fe(n);if(c&&Me(c,d))return{ok:!0,owner:c,path:n};if(c&&Date.parse(c.expiresAt)>Date.now()&&(c.persistent||le(c.pid))||f!==void 0&&le(f)||!c&&f===void 0&&await Ue(n))return{ok:!1,reasonCode:"git-lifecycle-integration-backpressure"};const g=await O(n);if(!g)return{ok:!1,reasonCode:"git-lifecycle-integration-lock-failed"};const l=`${n}.stale.${process.pid}.${Date.now()}`;await ie(r,R(n),R(l));try{if(await D(l,r),await O(l)!==g)return await oe(l,n,r).catch(()=>{}),{ok:!1,reasonCode:"git-lifecycle-integration-backpressure"};await u()}finally{await Z(l,r,async w=>await O(w)===g).catch(()=>{})}return{ok:!0,owner:d,path:n}}catch(c){return{ok:!1,reasonCode:k(c,"EEXIST")||k(c,"ENOENT")?"git-lifecycle-integration-backpressure":"git-lifecycle-integration-lock-failed"}}}async function Et(i,e){const t=await se(i);return!!(t&&De(t,e)&&Date.parse(t.expiresAt)>Date.now())}async function Pi(i,e){try{const t=M(i);await D(i,t);const r=await se(i);if(!r||!De(r,e))return!1;const n=await O(i);if(!n)return!1;const a=`${i}.release.${process.pid}.${Date.now()}`;await ie(t,R(i),R(a)),await D(a,t);const o=await se(a);return!o||!De(o,e)||await O(a)!==n?(await oe(a,i,t).catch(()=>{}),!1):Z(a,t,async d=>await O(d)===n)}catch(t){if(k(t,"ENOENT"))return!1;throw t}}function Bi(i){return b("sha256").update(["git-lifecycle-physical-owner-v1",i.kind,i.storyId,i.sessionId,i.idempotencyKey,String(i.pid),i.createdAt,i.expiresAt,i.persistent?"persistent":"ephemeral",i.ownerNonce].join("\0")).digest("hex")}async function It(i,e){if(!Y(e.storyId)||!A(e.idempotencyKey)||!h(e.ownerDigest))return"foreign";const t=await Te(i),r=y(t,"leases"),n=y(r,"integration");if(!q(n))return"absent";try{await D(r,t),await D(n,r);const a=await se(n);return!a||a.kind!=="direct"||a.storyId!==e.storyId||a.sessionId!==e.idempotencyKey||a.idempotencyKey!==e.idempotencyKey||a.persistent!==!0||Bi(a)!==e.ownerDigest?"foreign":await Pi(n,a)?"released":"foreign"}catch{return"foreign"}}async function se(i){try{await D(i,M(i));const e=y(i,"owner.json");await W(e,i);const t=JSON.parse(await H(e,"utf8"));return t.schemaVersion!==1||t.kind!=="direct"&&t.kind!=="continuous"||!Y(t.storyId)||!A(t.sessionId)||!A(t.idempotencyKey)||!Number.isSafeInteger(t.pid)||Number(t.pid)<=0||!E(t.createdAt)||!E(t.expiresAt)||typeof t.persistent!="boolean"||typeof t.ownerNonce!="string"||!/^[a-f0-9]{32}$/.test(t.ownerNonce)?void 0:t}catch{return}}async function Fe(i){try{await D(i,M(i));const e=y(i,"owner.json");await W(e,i);const t=JSON.parse(await H(e,"utf8"));return Number.isSafeInteger(t.pid)&&Number(t.pid)>0?Number(t.pid):void 0}catch{return}}function Me(i,e){return i.kind===e.kind&&i.storyId===e.storyId&&i.sessionId===e.sessionId&&i.idempotencyKey===e.idempotencyKey&&i.expiresAt===e.expiresAt&&i.persistent===e.persistent}function De(i,e){return Me(i,e)&&i.schemaVersion===e.schemaVersion&&i.pid===e.pid&&i.createdAt===e.createdAt&&i.ownerNonce===e.ownerNonce}async function _e(i){const e=await U(i),r=(await P("git",["rev-parse","--git-common-dir"],{cwd:e,encoding:"utf8",maxBuffer:1024*1024})).stdout.trim(),n=ne(r)?p(r):p(e,r),a=await U(n);if(a!==n)throw new Error("git-lifecycle-common-dir-symlink");await $i(a);const d=(await P("git",["rev-parse","--git-common-dir"],{cwd:e,encoding:"utf8",maxBuffer:1024*1024})).stdout.trim();if((ne(d)?p(d):p(e,d))!==n)throw new Error("git-lifecycle-common-dir-raced");return a}async function Ke(i){const e=y(i,de);if(q(e)||await Ne(i,de),await z(e,"directory"),await U(e)!==e)throw new Error("git-lifecycle-runtime-directory-symlink");return e}async function We(i,e={}){try{return await z(i,"file"),xe(JSON.parse(await H(i,"utf8")))}catch(t){if(k(t,"ENOENT")){if(e.required)throw new Error("git-lifecycle-runtime-missing");return Ee()}throw t}}async function Ni(i){try{await z(i,"file")}catch(e){if(k(e,"ENOENT"))return;throw e}}async function z(i,e){const t=await be(i);if(t.isSymbolicLink())throw new Error(`git-lifecycle-${e}-symlink`);if(e==="file"?!t.isFile():!t.isDirectory())throw new Error(`git-lifecycle-${e}-invalid`);if(ue()&&t.uid!==process.getuid())throw new Error(`git-lifecycle-${e}-ownership-mismatch`);if(ue()&&(t.mode&63)!==0)throw new Error(`git-lifecycle-${e}-permissions-unsafe`)}function te(i,e){const t=p(i),r=p(e),n=ci(t,r);if(!n||n.startsWith("..")||ne(n)||M(r)!==t)throw new Error("git-lifecycle-private-path-escape")}async function K(i,e){const t=p(i);if(e&&te(p(e),t),await z(t,"directory"),p(await U(t))!==t)throw new Error("git-lifecycle-directory-substituted");if(e){const r=p(e);if(await z(r,"directory"),p(await U(r))!==r)throw new Error("git-lifecycle-directory-parent-substituted")}}async function W(i,e){const t=p(i);if(te(p(e),t),await K(p(e)),await z(t,"file"),p(await U(t))!==t)throw new Error("git-lifecycle-file-substituted")}function Ye(i,e){const t=Oe(i);if(t.isSymbolicLink())throw new Error(`git-lifecycle-${e}-symlink`);if(e==="file"?!t.isFile():!t.isDirectory())throw new Error(`git-lifecycle-${e}-invalid`);if(ue()&&t.uid!==process.getuid())throw new Error(`git-lifecycle-${e}-ownership-mismatch`);if(ue()&&(t.mode&63)!==0)throw new Error(`git-lifecycle-${e}-permissions-unsafe`)}async function $i(i){const e=await be(i);if(e.isSymbolicLink())throw new Error("git-lifecycle-common-dir-symlink");if(!e.isDirectory())throw new Error("git-lifecycle-common-dir-invalid")}function Vi(i){const e=Oe(i);if(e.isSymbolicLink())throw new Error("git-lifecycle-common-dir-symlink");if(!e.isDirectory())throw new Error("git-lifecycle-common-dir-invalid")}function ue(i=process.platform){return i!=="win32"&&typeof process.getuid=="function"}function xe(i){if(!i||typeof i!="object"||Array.isArray(i))throw new Error("git-lifecycle-runtime-invalid");const e=i;x(e,["schemaVersion","revision","epics","stories"],"git-lifecycle-runtime-unknown-field");const t=s(e.epics),r=s(e.stories);if(e.schemaVersion!==1||!Number.isSafeInteger(e.revision)||Number(e.revision)<0||!t||!r||Object.values(t).some(n=>!s(n))||Object.values(r).some(n=>!s(n)))throw new Error("git-lifecycle-runtime-invalid");for(const[n,a]of Object.entries(t))if(!Y(n)||!ji(a))throw new Error("git-lifecycle-runtime-epic-invalid");for(const[n,a]of Object.entries(r))if(!Y(n)||!n.includes(".")||!zi(a,n))throw new Error("git-lifecycle-runtime-story-invalid");return e}const Li=["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"],qi=["checkpoint","status","last_step","steps_completed"];function ji(i){return x(i,Li,"git-lifecycle-runtime-epic-unknown-field"),(i.branch_mode===void 0||i.branch_mode==="epic")&&(i.execution_branch===void 0||T(i.execution_branch))&&(i.origin_branch===void 0||T(i.origin_branch))&&(i.branch_lease===void 0||i.branch_lease===null||Gi(i.branch_lease))&&(i.origin_binding===void 0||i.origin_binding===null||Fi(i.origin_binding))&&(i.graph_revision===void 0||h(i.graph_revision))&&(i.aggregate_qa_receipt===void 0||i.aggregate_qa_receipt===null||Mi(i.aggregate_qa_receipt))&&(i.terminal_git_receipt===void 0||i.terminal_git_receipt===null||Ki(i.terminal_git_receipt))&&(i.physicalMergeStatus===void 0||["merged","pushed","denied_external_gate","blocked_local_or_repo","not_attempted"].includes(String(i.physicalMergeStatus)))&&(i.pr_number===void 0||i.pr_number===null||Number.isSafeInteger(i.pr_number)&&Number(i.pr_number)>0)&&(i.git_reconciliation_receipts===void 0||Ui(i.git_reconciliation_receipts))&&(i.git_reconciliation_debt===void 0||Zi(i.git_reconciliation_debt))}function zi(i,e){return x(i,qi,"git-lifecycle-runtime-story-unknown-field"),(i.checkpoint===void 0||i.checkpoint===null||Je(i.checkpoint,e))&&(i.status===void 0||A(i.status))&&(i.last_step===void 0||i.last_step===null||A(i.last_step))&&(i.steps_completed===void 0||L(i.steps_completed,128))}function Gi(i){const e=s(i);return e?(x(e,["schemaVersion","ownerStoryId","sessionId","idempotencyKey","acquiredAt","expiresAt","handoffGrant","handoffConsumption"],"git-lifecycle-runtime-lease-unknown-field"),e.schemaVersion===1&&Y(e.ownerStoryId)&&A(e.sessionId)&&A(e.idempotencyKey)&&E(e.acquiredAt)&&E(e.expiresAt)&&Date.parse(String(e.expiresAt))>Date.parse(String(e.acquiredAt))&&(e.handoffGrant===void 0||Hi(e.handoffGrant,e))&&(e.handoffConsumption===void 0||Ti(e.handoffConsumption,e))):!1}function Hi(i,e){const t=s(i);return t?(x(t,["schemaVersion","kind","storyId","fromSessionId","tokenDigest","bundleDigest","claimRevision","expiresAt"],"git-lifecycle-runtime-handoff-grant-unknown-field"),t.schemaVersion===1&&t.kind==="direct-yolo-setup-handoff"&&t.storyId===e.ownerStoryId&&t.fromSessionId===e.sessionId&&h(t.tokenDigest)&&h(t.bundleDigest)&&h(t.claimRevision)&&E(t.expiresAt)&&Date.parse(String(t.expiresAt))<=Date.parse(String(e.expiresAt))):!1}function Ti(i,e){const t=s(i);return t?(x(t,["schemaVersion","kind","state","storyId","fromSessionId","tokenDigest","bundleDigest","claimRevision","consumedBySessionId","consumedAt"],"git-lifecycle-runtime-handoff-consumption-unknown-field"),t.schemaVersion===1&&t.kind==="direct-yolo-setup-handoff-consumption"&&t.state==="consumed"&&t.storyId===e.ownerStoryId&&A(t.fromSessionId)&&h(t.tokenDigest)&&h(t.bundleDigest)&&h(t.claimRevision)&&t.consumedBySessionId===e.sessionId&&E(t.consumedAt)):!1}function Fi(i){const e=s(i);return e?(x(e,["schemaVersion","originBranch","originHeadSha","executionBranch","capturedFromCurrentCheckout","capturedAt"],"git-lifecycle-runtime-origin-unknown-field"),e.schemaVersion===1&&T(e.originBranch)&&T(e.executionBranch)&&e.originBranch!==e.executionBranch&&_(e.originHeadSha)&&e.capturedFromCurrentCheckout===!0&&E(e.capturedAt)):!1}function Mi(i){const e=s(i);if(!e)return!1;x(e,["schemaVersion","evidenceVersion","producer","contract","command","verdict","executionHeadSha","graphRevision","manifestDigest","resultDigest","checkedAt","receiptRef","gateIds"],"git-lifecycle-runtime-aggregate-qa-unknown-field");const t=e.evidenceVersion==="p205-execution-v2"&&e.producer==="local-yolo-tdd"&&e.contract==="P205-CI-02"&&e.command===V&&h(e.manifestDigest)&&h(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&&(t||r)&&e.verdict==="passed"&&_(e.executionHeadSha)&&h(e.graphRevision)&&E(e.checkedAt)&&he(e.receiptRef)&&L(e.gateIds,128,!0)}function Ki(i){const e=s(i);return e?(x(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&&Y(e.epicId)&&T(e.executionBranch)&&T(e.originBranch)&&_(e.baseSha)&&_(e.executionHeadSha)&&(e.mergeSha===void 0||_(e.mergeSha))&&(e.pushedSha===void 0||_(e.pushedSha))&&(e.strategy==="direct"||e.strategy==="single_pr")&&(e.candidateQa===void 0||Yi(e.candidateQa,e))&&(e.providerGuard===void 0||Wi(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))&&L(e.localGateReceiptRefs,128,!0)&&A(e.idempotencyKey)&&E(e.attemptStartedAt)&&(e.completedAt===void 0||E(e.completedAt))&&typeof e.retryEligible=="boolean"&&L(e.reasonCodes,128)&&e.publicSafe===!0):!1}function Wi(i,e){const t=s(i);if(!t)return!1;x(t,["schemaVersion","provider","mode","source","prHeadSha","originHeadSha","checkedAt","publicSafe"],"git-lifecycle-runtime-provider-guard-unknown-field");const r=t.mode==="recovered_exact_tree"?t.source==="physical_recovery":t.mode==="strict_up_to_date_expected_head"&&["branch_protection","ruleset","branch_protection_and_ruleset"].includes(String(t.source));return t.schemaVersion===1&&t.provider==="github"&&r&&e.strategy==="single_pr"&&e.physicalStatus==="pushed"&&Number.isSafeInteger(e.prNumber)&&Number(e.prNumber)>0&&_(t.prHeadSha)&&t.prHeadSha===e.mergeSha&&_(t.originHeadSha)&&t.originHeadSha===e.baseSha&&E(t.checkedAt)&&t.publicSafe===!0}function Yi(i,e){const t=s(i);return t?(x(t,["schemaVersion","kind","contract","command","originHeadSha","executionHeadSha","mergeSha","treeSha","graphRevision","manifestDigest","resultDigest","gateIds","checkedAt","receiptRef"],"git-lifecycle-runtime-merge-candidate-unknown-field"),t.schemaVersion===1&&t.kind==="epic_merge_candidate_qa"&&t.contract==="P205-CI-02"&&t.command===V&&_(t.originHeadSha)&&t.originHeadSha===e.baseSha&&_(t.executionHeadSha)&&t.executionHeadSha===e.executionHeadSha&&_(t.mergeSha)&&t.mergeSha===e.mergeSha&&_(t.treeSha)&&h(t.graphRevision)&&h(t.manifestDigest)&&h(t.resultDigest)&&L(t.gateIds,128,!0)&&E(t.checkedAt)&&he(t.receiptRef)):!1}function Je(i,e){const t=s(i);if(!t)return!1;x(t,["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 t.schemaVersion===1&&t.storyId===e&&t.epicId===r&&T(t.branch)&&_(t.baseSha)&&_(t.headSha)&&t.baseSha!==t.headSha&&et(t.commits)&&t.commits.length===1&&t.commits[0]===t.headSha&&A(t.idempotencyKey)&&(t.dispatchId===void 0||h(t.dispatchId))&&(t.bundleId===void 0||h(t.bundleId))&&h(t.bundleDigest)&&h(t.graphRevision)&&(t.claimRevision===void 0||h(t.claimRevision))&&L(t.receiptRefs,256,!0)&&(t.qaVerdict==="passed"||t.qaVerdict==="blocked")&&["approved","changes-requested","pending"].includes(String(t.reviewVerdict))&&Ji(t.qaReceipt,t)&&(t.reviewVerdict==="pending"?t.reviewReceipt===void 0:Qi(t.reviewReceipt,t))&&E(t.recordedAt)}function Ji(i,e){const t=s(i);return t?(x(t,["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"),t.schemaVersion===1&&t.kind==="story_qa_evidence"&&t.producer==="local-yolo-tdd"&&(t.evidenceVersion===void 0||t.evidenceVersion==="git-immutable-v1"||t.evidenceVersion==="p205-execution-v2"&&t.contract==="P205-CI-02"&&t.command===V&&h(t.manifestDigest)&&L(t.gateIds,32,!0)&&h(t.resultDigest))&&Qe(t,e)&&h(t.sourceEvidenceDigest)&&t.verdict===e.qaVerdict&&(t.verdict==="passed"||t.verdict==="blocked")&&E(t.checkedAt)&&he(t.receiptRef)&&e.receiptRefs.includes(t.receiptRef)):!1}function Qi(i,e){const t=s(i),r=s(e.qaReceipt);return!t||!r?!1:(x(t,["schemaVersion","kind","producer","storyId","epicId","baseSha","headSha","bundleDigest","graphRevision","sourceEvidenceDigest","qaReceiptRef","verdict","reviewedAt","receiptRef"],"git-lifecycle-runtime-story-review-unknown-field"),t.schemaVersion===1&&t.kind==="story_review_evidence"&&t.producer==="root-commit-range-review"&&Qe(t,e)&&h(t.sourceEvidenceDigest)&&t.qaReceiptRef===r.receiptRef&&t.receiptRef!==r.receiptRef&&(t.verdict==="approved"||t.verdict==="changes-requested")&&(t.verdict==="approved"?e.reviewVerdict==="approved":e.reviewVerdict==="changes-requested")&&E(t.reviewedAt)&&Date.parse(String(t.reviewedAt))>=Date.parse(String(r.checkedAt))&&he(t.receiptRef)&&e.receiptRefs.includes(t.receiptRef))}function Qe(i,e){return["storyId","epicId","baseSha","headSha","bundleDigest","graphRevision"].every(t=>i[t]===e[t])}function Ui(i){return!Array.isArray(i)||i.length>1024?!1:i.every(e=>{const t=s(e);return t?(x(t,["schemaVersion","resourceId","action","outcome","idempotencyKey","reasonCodes","recordedAt","publicSafe"],"git-lifecycle-runtime-reconciliation-receipt-unknown-field"),t.schemaVersion===1&&A(t.resourceId)&&["no_op","delete_local_branch","delete_remote_branch","close_pull_request"].includes(String(t.action))&&["applied","already_absent","dry_run","failed"].includes(String(t.outcome))&&A(t.idempotencyKey)&&L(t.reasonCodes,128)&&E(t.recordedAt)&&t.publicSafe===!0):!1})}function Zi(i){return!Array.isArray(i)||i.length>1024?!1:i.every(e=>{const t=s(e);return t?(x(t,["schemaVersion","resourceId","action","managed","reasonCodes","evidence","publicSafe"],"git-lifecycle-runtime-reconciliation-debt-unknown-field"),t.schemaVersion===1&&A(t.resourceId)&&t.action==="preserve"&&typeof t.managed=="boolean"&&L(t.reasonCodes,128)&&L(t.evidence,16)&&t.publicSafe===!0):!1})}function x(i,e,t){const r=new Set(e);if(Object.keys(i).some(n=>!r.has(n)))throw new Error(t)}function Y(i){return typeof i=="string"&&/^P[1-9][0-9]*(?:\.[0-9]+)*$/.test(i)}function Xi(i){const e=s(i);return e?Object.keys(e).length===10&&e.schemaVersion===1&&e.kind==="git_lifecycle_graph_authority"&&e.producer==="server-continuous-yoloop-v1"&&(e.source==="yolo"||e.source==="yoloop")&&Y(e.epicId)&&Y(e.storyId)&&String(e.storyId).startsWith(`${String(e.epicId)}.`)&&T(e.executionBranch)&&T(e.originBranch)&&e.originBranch!==e.executionBranch&&typeof e.graphRevision=="string"&&/^[a-f0-9]{64}$/.test(e.graphRevision)&&e.publicSafe===!0:!1}function T(i){return typeof i=="string"&&/^[A-Za-z0-9][A-Za-z0-9._/-]{0,239}$/.test(i)&&!i.includes("..")&&!i.includes("//")&&!i.includes("@{")&&!i.endsWith("/")&&!i.endsWith(".")&&!i.split("/").some(e=>!e||e.startsWith(".")||e.endsWith(".lock"))}function ge(i){return i.length>0&&i.length<=1024&&!ne(i)&&!i.includes("\0")&&!i.replaceAll("\\","/").split("/").includes("..")}function A(i){return typeof i=="string"&&i.length>0&&i.length<=240&&/^[A-Za-z0-9._:/#\-[\]]+$/.test(i)&&!i.includes("..")}function he(i){return A(i)}function _(i){return typeof i=="string"&&/^[a-f0-9]{40,64}$/i.test(i)}function h(i){return typeof i=="string"&&/^[a-f0-9]{64}$/i.test(i)}function E(i){return typeof i=="string"&&i.length<=64&&Number.isFinite(Date.parse(i))}function L(i,e,t=!1){return Array.isArray(i)&&i.length<=e&&(!t||i.length>0)&&i.every(A)}function et(i){return Array.isArray(i)&&i.length>0&&i.length<=256&&i.every(_)}function Ee(){return{schemaVersion:1,revision:0,epics:{},stories:{}}}async function it(i){const e=M(i),t={pid:process.pid,nonce:ye(16).toString("hex")},r=async()=>{await K(e),await Be(e,R(i),JSON.stringify(t));try{await D(i,e),await W(y(i,"owner.json"),i)}catch(n){throw await Z(i,e).catch(()=>{}),n}};try{await r()}catch(n){if(!k(n,"EEXIST"))throw n;await z(i,"directory");const a=await Ie(i);if(a!==void 0&&le(a.pid))throw new Error("git-lifecycle-runtime-lock-active");if(a===void 0&&await Ue(i))throw new Error("git-lifecycle-runtime-lock-active");const o=await O(i);if(!o)throw new Error("git-lifecycle-runtime-lock-owner-invalid");const d=`${i}.stale.${process.pid}.${Date.now()}`;await ie(e,R(i),R(d));try{if(await D(d,e),await O(d)!==o)throw await oe(d,i,e).catch(()=>{}),new Error("git-lifecycle-runtime-lock-owner-replaced");await r()}finally{await Z(d,e,async u=>await O(u)===o).catch(()=>{})}}return t}async function tt(i,e){const t=M(i);try{await D(i,t);const r=await Ie(i);if(!r||!Ze(r,e))return!1;const n=await O(i);if(!n)return!1;const a=`${i}.release.${process.pid}.${Date.now()}`;await ie(t,R(i),R(a)),await D(a,t);const o=await Ie(a);return!o||!Ze(o,e)||await O(a)!==n?(await oe(a,i,t).catch(()=>{}),!1):Z(a,t,async d=>await O(d)===n)}catch(r){if(k(r,"ENOENT"))return!1;throw r}}async function Ue(i){try{return Date.now()-(await ai(i)).mtimeMs<3e4}catch{return!0}}async function Ie(i){try{await D(i,M(i));const e=y(i,"owner.json");await W(e,i);const t=JSON.parse(await H(e,"utf8"));return Number.isSafeInteger(t.pid)&&Number(t.pid)>0&&(t.nonce===void 0||typeof t.nonce=="string"&&/^[a-f0-9]{32}$/.test(t.nonce))?{pid:Number(t.pid),...typeof t.nonce=="string"?{nonce:t.nonce}:{}}:void 0}catch{return}}function Ze(i,e){return i.pid===e.pid&&i.nonce!==void 0&&i.nonce===e.nonce}function le(i){try{return process.kill(i,0),!0}catch(e){return k(e,"EPERM")}}function s(i){return i&&typeof i=="object"&&!Array.isArray(i)?i:void 0}function k(i,e){return i instanceof Error&&"code"in i&&i.code===e}export{de as GIT_LIFECYCLE_RUNTIME_DIRECTORY,fe as GIT_LIFECYCLE_RUNTIME_FILE,Ve as LEGACY_DIRECT_YOLO_RECOVERY_COMMITS,mi as LEGACY_P174_CHECKPOINT_MIGRATIONS,V as P205_COMPLETE_COMMAND,xt as acquireGitLifecyclePhysicalIntegrationLock,wi as applyGitLifecycleRuntimeOverlay,D as assertGitLifecyclePrivateDirectory,_t as assertGitLifecyclePrivateFile,Bi as computeGitLifecyclePhysicalIntegrationLockOwnerDigest,Ri as computeImmutableStoryQaEvidenceDigest,Dt as computeLegacyDirectYoloRecoveryReceiptRef,Ai as computeP205StoryQaEvidenceDigest,Oi as ensureGitLifecyclePrivateChildDirectory,mt as ensureGitLifecycleRuntimeInitialized,Si as ensureRuntimeEpic,yt as ensureRuntimeStory,lt as executeP205TransientAuthority,Te as gitLifecycleRuntimeDirectory,Ei as gitLifecycleStoryWriteSet,ze as isAcceptedGitLifecycleStoryCheckpoint,qe as mutateGitLifecycleRuntime,St as p205TransientAuthorityMatchesAggregate,pt as persistGitLifecycleGraphAuthority,ue as posixSecurityAvailable,wt as projectP205TransientExecutionEvidence,ve as readGitLifecycleRuntime,yi as readGitLifecycleRuntimeSync,Pi as releaseGitLifecyclePhysicalIntegrationLock,It as releaseGitLifecyclePhysicalIntegrationLockForCheckpoint,Z as removeGitLifecyclePrivateDirectory,bt as verifyAcceptedGitLifecycleStoryCheckpoint,vi as verifyAcceptedGitLifecycleStoryCheckpointSync,Et as verifyGitLifecyclePhysicalIntegrationLock,vt as verifyLegacyCheckpointMigrationCandidateSync};
|
|
@@ -373,7 +373,12 @@ function validPositional(kind, value) {
|
|
|
373
373
|
return /^@?(?:docs\/stories\/[A-Za-z0-9._/-]+\.story\.md|P\d+\.\d+|story-P\d+\.\d+)$/.test(value);
|
|
374
374
|
}
|
|
375
375
|
if (kind === 'epic-ref') {
|
|
376
|
-
|
|
376
|
+
const candidate = value.startsWith('@') ? value.slice(1) : value;
|
|
377
|
+
// Canonical P-prefixed IDs remain preferred, while the typed boundary
|
|
378
|
+
// preserves the legacy numeric/slug forms already understood by the
|
|
379
|
+
// orchestrator (`@epic-5`, `epic-customer-portal`). Keep the accepted
|
|
380
|
+
// alphabet narrow so compatibility cannot become a path/shell bypass.
|
|
381
|
+
return /^(?:docs\/epics\/epic-[A-Za-z0-9][A-Za-z0-9_-]*\.md|P\d+|epic-[A-Za-z0-9][A-Za-z0-9_-]*(?:\.md)?)$/i.test(candidate);
|
|
377
382
|
}
|
|
378
383
|
if (kind === 'target-ref') {
|
|
379
384
|
const target = value.startsWith('@') ? value.slice(1) : value;
|
|
@@ -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.31 | 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.31 │
|
|
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.31 | 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.31 │
|
|
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.31 | 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.31 | 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.31 │
|
|
68
68
|
│ ######### ##### │
|
|
69
69
|
│ ## ############## Development Orchestrator │
|
|
70
70
|
│ ## ### ###### ## OrNexus Team │
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: neocortex-root
|
|
3
|
-
description: "🧠 Neocortex v4.60.
|
|
3
|
+
description: "🧠 Neocortex v4.60.31 | OrNexus Team"
|
|
4
4
|
kind: local
|
|
5
5
|
tools:
|
|
6
6
|
# File operations (Gemini CLI built-ins)
|
|
@@ -62,7 +62,7 @@ SEMPRE que este agente for invocado, imprima o banner abaixo como PRIMEIRO outpu
|
|
|
62
62
|
┌────────────────────────────────────────────────────────────┐
|
|
63
63
|
│ │
|
|
64
64
|
│ ####### N E O C O R T E X │
|
|
65
|
-
│ ### ######## v4.60.
|
|
65
|
+
│ ### ######## v4.60.31 │
|
|
66
66
|
│ ######### ##### │
|
|
67
67
|
│ ## ############## Development Orchestrator │
|
|
68
68
|
│ ## ### ###### ## OrNexus Team │
|
|
@@ -58,7 +58,7 @@ explicit server opt-in rather than a local assumption.
|
|
|
58
58
|
┌────────────────────────────────────────────────────────────┐
|
|
59
59
|
│ │
|
|
60
60
|
│ ####### N E O C O R T E X │
|
|
61
|
-
│ ### ######## v4.60.
|
|
61
|
+
│ ### ######## v4.60.31 │
|
|
62
62
|
│ ######### ##### │
|
|
63
63
|
│ ## ############## Development Orchestrator │
|
|
64
64
|
│ ## ### ###### ## OrNexus Team │
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: "neocortex"
|
|
3
|
-
description: "Neocortex v4.60.
|
|
3
|
+
description: "Neocortex v4.60.31 | OrNexus Team"
|
|
4
4
|
tools:
|
|
5
5
|
# Read / Edit (built-in tool sets)
|
|
6
6
|
- read
|
|
@@ -68,7 +68,7 @@ SEMPRE que este agente for invocado, imprima o banner abaixo como PRIMEIRO outpu
|
|
|
68
68
|
┌────────────────────────────────────────────────────────────┐
|
|
69
69
|
│ │
|
|
70
70
|
│ ####### N E O C O R T E X │
|
|
71
|
-
│ ### ######## v4.60.
|
|
71
|
+
│ ### ######## v4.60.31 │
|
|
72
72
|
│ ######### ##### │
|
|
73
73
|
│ ## ############## Development Orchestrator │
|
|
74
74
|
│ ## ### ###### ## OrNexus Team │
|