elanous 0.2.42 → 0.2.44
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/apps/pwa/out/404/index.html +1 -1
- package/apps/pwa/out/404.html +1 -1
- package/apps/pwa/out/_next/static/{X1ucLw10Cds_h614NoEnh → HMXsxdy5MIIcHPMHv1wD4}/_buildManifest.js +1 -1
- package/apps/pwa/out/_next/static/chunks/08334415.f0e80896acbef722.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1032-78ba4f6391258cab.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1082-53f86a26e03d309d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1109-7d0e264f6f2edbc7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1124-7c26330402481143.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{2160.a097e7b138ae1c55.js → 118.2a89982fe4276880.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/1244.6c435dbf1bf21d8a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1252.9e665904d3aa3b1a.js +32 -0
- package/apps/pwa/out/_next/static/chunks/1266.a46cc33cb6a72d75.js +104 -0
- package/apps/pwa/out/_next/static/chunks/1306.967240ede9a0f757.js +24 -0
- package/apps/pwa/out/_next/static/chunks/1344.3b95f3bd1b77a3fe.js +94 -0
- package/apps/pwa/out/_next/static/chunks/{4043.6b91203436c9c86b.js → 1401.22dfe92640a2b1ac.js} +4 -4
- package/apps/pwa/out/_next/static/chunks/1431-f7c78bd5be21e011.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1451-cdd35a8a0b31834b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{6632.0eac1c554f8f2ef3.js → 1694.18debfd77562e56d.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/1708-f03d587b7a7545c8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1775-fa7152bdeff6c95f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/178-4da509cd7266672a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1850-522de4ee34957210.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1876-c6f6e0ddcc76c6a1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1976.097066b072432242.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3507.97e1977bc4d5fb0a.js → 1978.eeb60a606dc5deac.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/2043.e233e3b5a3e790f5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2150.71b94e3348107c83.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2158.ebc6fc5a10280ab7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2216.802962c04f40a26e.js +64 -0
- package/apps/pwa/out/_next/static/chunks/2294.7890edcfa046c97d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/235.c89aaae4bcd6233a.js +74 -0
- package/apps/pwa/out/_next/static/chunks/{5885.0a3e52c8faccec98.js → 239.de075467b5523469.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/249.ba7051590d603c8f.js +226 -0
- package/apps/pwa/out/_next/static/chunks/2571.a6ac4e26c8618403.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2610.e149cd564a08913e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2705.9816f3c244f8b85f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2801.afeb8a4dae22f85f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2954.bbefc95d6b20e0d8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2e0f720a.a0697c08e3806a60.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3042.96ec235fe41c8d4e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3097-8e358f158acef46b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3205-93b1abe28b4fb16a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3273.b4434f0dcae7eb29.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3311.9cbc43ea0c90d60c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{1487.2f67b79444062da6.js → 3349.b5f09ee474d9533e.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/3503.a47a9755fb4d97b0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3506-5f429b3b7e1392b0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3843.bad404d008893291.js +77 -0
- package/apps/pwa/out/_next/static/chunks/3877-4b40e530b47e3bf9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/435-ce2958253cf7de61.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4393.28fa5228d0eec217.js +149 -0
- package/apps/pwa/out/_next/static/chunks/4404.7281c847c6e10dfc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8673-bab689a55f7e13b9.js → 4415-b9d6a90960920a4a.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/447-5b304de1fe098f43.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4484-8ebea83d431e6fae.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8262.ddc03e06b733f184.js → 4502.bdcc877abd437a05.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/4599-f95790fc5c65b8df.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{1262.e804feb8fd1acb8c.js → 46.57c783fa4884714f.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/463-b9114e411f33728e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4659.a57d1f0c5d754cd2.js +36 -0
- package/apps/pwa/out/_next/static/chunks/4722-a847e7a28115035f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{1063.2fb8a9dc55c731f2.js → 4757.67c6d7473a038e78.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/4874-c86f878ec4502ad3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{6377.bc7df239edbff244.js → 4891.3f80ba517a3b2373.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/4998.810ca8833084caa9.js +62 -0
- package/apps/pwa/out/_next/static/chunks/4f98febc.ea5841d4d616bfb2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3482.a9ae9d2ad6a5bd97.js → 5052.7dbb12a55d4f18f5.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/5166-ca73b3e361085a6d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5180-039f4a18b07ad387.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5232.5a2ce4daf7a9e11d.js +115 -0
- package/apps/pwa/out/_next/static/chunks/5439.3fec6dbce29ecb36.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5612-074d9a5e00dfac6a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5675-01989d524a84c505.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5751.af641a1adf5ec697.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5758-c6cb98714d18ab0c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/578eded8.b582637306e16964.js +122 -0
- package/apps/pwa/out/_next/static/chunks/5790.5eb06a653ebd8571.js +34 -0
- package/apps/pwa/out/_next/static/chunks/5853-4033e5bd5afbe06b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5904.97d70bb7f46b2db7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3347.f846266b5e5f3ede.js → 5989.7ecd362c5c44b747.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/{73d2eb0e.4966ad55293c801a.js → 5a34fb2f.52f1b4e1baebb48a.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/{7a98bc80.fa935989e829f9c2.js → 5a5078f8.2099200e5ea95e16.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/6036-c302c34ff0b3d410.js +1 -0
- package/apps/pwa/out/_next/static/chunks/606.ef81c313381f4264.js +1 -0
- package/apps/pwa/out/_next/static/chunks/616.1af54a928b1ba704.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6201.bc936f71f613a8e9.js +41 -0
- package/apps/pwa/out/_next/static/chunks/6204-fdc86e0e64c4f92d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{7411.9b4b8b747dc7b802.js → 6245.1182e007e9d230d9.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{b450776b.3db34d8d965f82d3.js → 63699a35.17262e162bc514b2.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/6420.494801a80030160c.js +27 -0
- package/apps/pwa/out/_next/static/chunks/{e8543907.5b040a5f22a0b0e5.js → 6549dad0.2740b25e51bf8f05.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{9427.96aa912ddb5801e0.js → 6881.9e7955847640c7fe.js} +17 -17
- package/apps/pwa/out/_next/static/chunks/6931.fcdfb94141e67b3d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6991-8e081c6ce38c0ba1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7010.1bbd17a7f2b3e376.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7029.d1466acf55fae2ed.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7152-a123aa8e129c131f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7455.196168fffac3b9c4.js +24 -0
- package/apps/pwa/out/_next/static/chunks/7638.6ca4770dd1129138.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7649-f37d76260e5e2a5a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7679.32c40cdd14f20b4a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7751.04bfbd16b4c6cd0a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7864.b1ff31d4030b8994.js +148 -0
- package/apps/pwa/out/_next/static/chunks/7869-c47bd2c075c1fefa.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8138.6c10b2a356d52fca.js → 8442.2f09ca969d631615.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/8445.2738dbd59a78c78c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8447.5510c439f9938c6d.js +286 -0
- package/apps/pwa/out/_next/static/chunks/{9415.69e4a21c60c7d2db.js → 8551.f762945c2cda2e95.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/8635-57a9d8d9db70f4f1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/86961958-4b0689a5048f756b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8709.3c6019bb18f8554f.js +8 -0
- package/apps/pwa/out/_next/static/chunks/8759.c999528a0a907bf6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{9a852a62-6192a6ea9346ced3.js → 87f498e5-0881de09f2e44707.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/8843.c3197f904c952b81.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3d0154af.5331fec737ffe8c3.js → 892fd990.456232f326cc39c2.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/8965-135a2c9eaa2464cb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8971-8d3b9c96f8a6c958.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9059.c8598d96f8e5e9cd.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9115.90447ae198b84eae.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9147.d9b0a02e0babc9b4.js +93 -0
- package/apps/pwa/out/_next/static/chunks/9204-83075f4b70c61cdc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9244-c32ef14b5dc72bdf.js +1 -0
- package/apps/pwa/out/_next/static/chunks/930.2a9a30f964350c66.js +90 -0
- package/apps/pwa/out/_next/static/chunks/9398.1f56e3f17795f43f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9527.3e5ad31c891c5fcb.js +79 -0
- package/apps/pwa/out/_next/static/chunks/9571-4ac933e774d1225c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/_not-found/page-9fc644de2d8edae3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-0c9dace2db62bee8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-f5e65c3dc9d89f2a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/board/page-2a9c19b9a140b7b1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/botlab/page-61533ad92141adfb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/bots/page-112004ced6fd0329.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-f733318c237a49d8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/chat/page-51ea677d2d33bbc0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/consult/page-428b41f2f9566e3c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/control/page-1b29396ea90a61e5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-cf83ec613ac904bf.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-3f4c0ecbc284bb5f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/editor/page-b63c322f54f70cc6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/exec/page-fe328c4ee9aac6b4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/field/page-bfb855c584f0fb98.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/healthz/route-9fc644de2d8edae3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/inside/page-47b1710c110eabd7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/intake/page-42895214458bc6d2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/layout-d03de0ebd8366e23.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live/page-3ed6c47e4b1c61c2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live-run/page-ae653e9bf261c738.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/loops/page-23f3f0a0209c0ac4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/market/page-88c691273aae66f9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-e187ac52a95538b3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/morning/page-6e45828daed1295e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/not-found-edb5d7287bb46186.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-4a7eaacd93c3f6a5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-3ca073d43d74cc84.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-1e9fee67b1199436.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-df1283ea963c6816.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-19fcf8d8301ccd18.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/page-5ab699e0303bbb40.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-7cde0d29756984c5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-9d4c598e8ee22f7a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-cc1609a71f44ec62.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-7659a9a1345bfaa9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/page-0afef60ecc0c4af5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-a3553949f8f34f5f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/layout-9fc644de2d8edae3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/page-057a69702f3c67c7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/share/page-c0f0e570f3f74c73.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-1825071ae34e3b89.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-6244e3e135d8ccfc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/term/page-da787e8a10b8a82e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/today/page-1316d32498e2be42.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/trace/page-4df94572e343de2e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/vault/page-708969f7475e88c1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-c58add08c919a1dc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-a24847f45e5d5bf9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-acfec65a3a60e22e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-3dfc598e6fbde245.js +1 -0
- package/apps/pwa/out/_next/static/chunks/framework-c658a626118411b7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/main-4c73685fd891445b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/main-app-6310f7e5de7dd01d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/pages/_app-51c326bf48610be1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/pages/_error-d0beadf754da59b0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/webpack-acd243bfbf3f6732.js +1 -0
- package/apps/pwa/out/_next/static/css/d1f8bb401740a549.css +1 -0
- package/apps/pwa/out/approvals/index.html +1 -1
- package/apps/pwa/out/approvals/index.txt +23 -23
- package/apps/pwa/out/autopilot/index.html +1 -1
- package/apps/pwa/out/autopilot/index.txt +23 -23
- package/apps/pwa/out/board/index.html +1 -1
- package/apps/pwa/out/board/index.txt +23 -23
- package/apps/pwa/out/botlab/index.html +1 -1
- package/apps/pwa/out/botlab/index.txt +22 -22
- package/apps/pwa/out/bots/index.html +1 -1
- package/apps/pwa/out/bots/index.txt +22 -22
- package/apps/pwa/out/ceo/index.html +1 -1
- package/apps/pwa/out/ceo/index.txt +23 -23
- package/apps/pwa/out/chat/index.html +1 -1
- package/apps/pwa/out/chat/index.txt +22 -22
- package/apps/pwa/out/consult/index.html +1 -1
- package/apps/pwa/out/consult/index.txt +23 -23
- package/apps/pwa/out/control/index.html +1 -1
- package/apps/pwa/out/control/index.txt +23 -23
- package/apps/pwa/out/decisions/index.html +1 -1
- package/apps/pwa/out/decisions/index.txt +22 -22
- package/apps/pwa/out/design-check/index.html +1 -1
- package/apps/pwa/out/design-check/index.txt +23 -23
- package/apps/pwa/out/editor/index.html +1 -1
- package/apps/pwa/out/editor/index.txt +23 -23
- package/apps/pwa/out/exec/index.html +1 -1
- package/apps/pwa/out/exec/index.txt +23 -23
- package/apps/pwa/out/field/index.html +1 -1
- package/apps/pwa/out/field/index.txt +23 -23
- package/apps/pwa/out/healthz +1 -1
- package/apps/pwa/out/index.html +1 -1
- package/apps/pwa/out/index.txt +22 -22
- package/apps/pwa/out/inside/index.html +1 -1
- package/apps/pwa/out/inside/index.txt +22 -22
- package/apps/pwa/out/intake/index.html +1 -1
- package/apps/pwa/out/intake/index.txt +23 -23
- package/apps/pwa/out/live/index.html +1 -1
- package/apps/pwa/out/live/index.txt +23 -23
- package/apps/pwa/out/live-run/index.html +1 -1
- package/apps/pwa/out/live-run/index.txt +23 -23
- package/apps/pwa/out/loops/index.html +1 -1
- package/apps/pwa/out/loops/index.txt +22 -22
- package/apps/pwa/out/market/index.html +1 -1
- package/apps/pwa/out/market/index.txt +22 -22
- package/apps/pwa/out/missions/placeholder/index.html +1 -1
- package/apps/pwa/out/missions/placeholder/index.txt +22 -22
- package/apps/pwa/out/morning/index.html +1 -1
- package/apps/pwa/out/morning/index.txt +23 -23
- package/apps/pwa/out/observatory/index.html +1 -1
- package/apps/pwa/out/observatory/index.txt +23 -23
- package/apps/pwa/out/ops/checklist/index.html +1 -1
- package/apps/pwa/out/ops/checklist/index.txt +22 -22
- package/apps/pwa/out/ops/release/index.html +1 -1
- package/apps/pwa/out/ops/release/index.txt +22 -22
- package/apps/pwa/out/ops/seats/index.html +1 -1
- package/apps/pwa/out/ops/seats/index.txt +22 -22
- package/apps/pwa/out/outputs/index.html +1 -1
- package/apps/pwa/out/outputs/index.txt +22 -22
- package/apps/pwa/out/reflection/index.html +1 -1
- package/apps/pwa/out/reflection/index.txt +23 -23
- package/apps/pwa/out/scheduler/index.html +1 -1
- package/apps/pwa/out/scheduler/index.txt +23 -23
- package/apps/pwa/out/sessions/index.html +1 -1
- package/apps/pwa/out/sessions/index.txt +22 -22
- package/apps/pwa/out/settings/devices/index.html +1 -1
- package/apps/pwa/out/settings/devices/index.txt +23 -23
- package/apps/pwa/out/settings/index.html +1 -1
- package/apps/pwa/out/settings/index.txt +23 -23
- package/apps/pwa/out/setup/done/index.html +1 -1
- package/apps/pwa/out/setup/done/index.txt +23 -23
- package/apps/pwa/out/setup/index.html +1 -1
- package/apps/pwa/out/setup/index.txt +23 -23
- package/apps/pwa/out/share/index.html +1 -1
- package/apps/pwa/out/share/index.txt +23 -23
- package/apps/pwa/out/showroom/index.html +1 -1
- package/apps/pwa/out/showroom/index.txt +22 -22
- package/apps/pwa/out/tasks/index.html +1 -1
- package/apps/pwa/out/tasks/index.txt +23 -23
- package/apps/pwa/out/term/index.html +1 -1
- package/apps/pwa/out/term/index.txt +23 -23
- package/apps/pwa/out/today/index.html +1 -1
- package/apps/pwa/out/today/index.txt +23 -23
- package/apps/pwa/out/trace/index.html +1 -1
- package/apps/pwa/out/trace/index.txt +23 -23
- package/apps/pwa/out/vault/index.html +1 -1
- package/apps/pwa/out/vault/index.txt +23 -23
- package/apps/pwa/out/workflows/chat-ui/index.html +1 -1
- package/apps/pwa/out/workflows/chat-ui/index.txt +23 -23
- package/apps/pwa/out/workflows/index.html +1 -1
- package/apps/pwa/out/workflows/index.txt +23 -23
- package/apps/pwa/out/workspace/index.html +1 -1
- package/apps/pwa/out/workspace/index.txt +23 -23
- package/apps/pwa/out/worktrees/index.html +1 -1
- package/apps/pwa/out/worktrees/index.txt +23 -23
- package/catalog/external-commands.yaml +5 -3
- package/catalog/meta/catalogVersion.yaml +2 -1
- package/catalog/signing/catalog-signing-public.pem +3 -0
- package/graphs/intake/intake-daily.yaml +16 -0
- package/graphs/intake/news-sources.yaml +1 -0
- package/graphs/intake/recipes.yaml +7 -0
- package/graphs/overlays/README.md +6 -0
- package/graphs/overlays/examples/research-runtime-empty-terminal.yaml +28 -0
- package/graphs/profiles/local.yaml +5 -0
- package/graphs/profiles/pod.yaml +4 -0
- package/graphs/release/release-loop.yaml +33 -17
- package/graphs/units/verbs/make-doc.yaml +1 -0
- package/package.json +6 -2
- package/plugins/demo-absorption-briefing/plugin.json +18 -0
- package/plugins/demo-absorption-briefing/skills/demo-absorption-briefing/SKILL.md +8 -0
- package/plugins/demo-browser-hand/plugin.json +13 -0
- package/plugins/demo-browser-hand/skills/demo-browser-hand/SKILL.md +8 -0
- package/plugins/demo-linear-secretary/plugin.json +15 -0
- package/plugins/demo-linear-secretary/skills/demo-linear-secretary/SKILL.md +8 -0
- package/plugins/demo-plugin-wizard/plugin.json +11 -0
- package/plugins/demo-plugin-wizard/skills/demo-plugin-wizard/SKILL.md +8 -0
- package/plugins/demo-research/plugin.json +16 -0
- package/plugins/demo-research/skills/demo-research/SKILL.md +8 -0
- package/plugins/demo-video-briefing/plugin.json +15 -0
- package/plugins/demo-video-briefing/skills/demo-video-briefing/SKILL.md +8 -0
- package/scripts/bench-metering-plan.ts +229 -0
- package/scripts/build-signed-catalog.ts +48 -0
- package/scripts/ci-typecheck-main-delta.sh +88 -0
- package/scripts/codex-fallback-live-probe.ts +1 -1
- package/scripts/demo/demo1104-parallel-host.ts +56 -0
- package/scripts/demo/demo1104-parallel-scenes.ts +301 -0
- package/scripts/demo/demo1104-parallel.ts +72 -0
- package/scripts/demo/demo1104-stage.config.ts +21 -0
- package/scripts/demo/demo1104-stage.ts +316 -0
- package/scripts/goal-method-audit.ts +17 -1
- package/scripts/graph-units/land-enqueue.ts +90 -0
- package/scripts/hooks/codex-notify.sh +32 -0
- package/scripts/install.sh +10 -38
- package/scripts/landing-heal/land-plan.ts +57 -0
- package/scripts/public-leak-baseline.txt +0 -1
- package/scripts/release-loop/auto-approve-node.ts +1 -1
- package/scripts/release-loop/docs-node.ts +4 -2
- package/scripts/release-loop/gate-autoheal-sim-evidence.ts +60 -0
- package/scripts/release-loop/gate-image-pin.ts +116 -2
- package/scripts/release-loop/gate-method.ts +139 -0
- package/scripts/release-loop/gate-node.ts +395 -43
- package/scripts/release-loop/gate-progress-sim.ts +73 -0
- package/scripts/release-loop/gate-traffic-mode.ts +151 -3
- package/scripts/release-loop/node-verdict.ts +38 -25
- package/scripts/release-loop/notes-repair.ts +18 -1
- package/scripts/release-loop/preflight.ts +544 -10
- package/scripts/release-loop/render-warm-control-manifest.ts +22 -0
- package/scripts/release-loop/resume-release.ts +9 -7
- package/scripts/release-loop/resume.ts +13 -4
- package/scripts/release-loop/unattended-release.ts +20 -9
- package/scripts/release-loop/warm-control-forward.ts +178 -0
- package/scripts/retro-cycle.ts +30 -8
- package/scripts/rhythm/daily.ts +39 -4
- package/scripts/rhythm/linear-progress-sync.ts +311 -0
- package/scripts/ux-sim.ts +7 -1
- package/scripts/video-pipeline.ts +9 -1
- package/scripts/warm-pool-provider-config.ts +35 -7
- package/src/acp/agent-manager.ts +1 -0
- package/src/acp/codex-app-server-agent.ts +33 -0
- package/src/acp/codex-app-server-client.ts +153 -16
- package/src/acp/core-turn-bridge.ts +17 -12
- package/src/acp/event-router.ts +20 -1
- package/src/acp/server.ts +6 -0
- package/src/agent-mission/browser-roundtrip-coordinator.ts +85 -0
- package/src/agent-mission/claude-headless.ts +4 -1
- package/src/agent-mission/codex-exec.ts +105 -0
- package/src/agent-mission/driver.ts +192 -11
- package/src/agent-mission/grok-auth-status.ts +107 -0
- package/src/agent-mission/hand-hooks.ts +101 -0
- package/src/agent-mission/mission-cli.ts +56 -21
- package/src/agent-mission/mission-hand-reply.ts +118 -0
- package/src/agent-mission/mission-line.ts +180 -0
- package/src/agent-mission/mission-out.ts +256 -18
- package/src/agent-mission/tool-install.ts +122 -11
- package/src/agent-substrate/pr-reviewer.ts +147 -11
- package/src/agent-substrate/self-review-cli.ts +10 -2
- package/src/agents/general-purpose.md +1 -1
- package/src/auto-research/research-fanout.ts +221 -0
- package/src/auto-research/research-turn.ts +362 -31
- package/src/autopilot/mission-codebase-gate.ts +7 -3
- package/src/autopilot/pr-manager.ts +31 -3
- package/src/boot/daemon-tools/self-implement.ts +3 -1
- package/src/boot/daemon-tools/web-search.ts +1 -2
- package/src/briefing/brief-items.ts +55 -11
- package/src/cli/agent-cli.ts +2 -1
- package/src/cli/catalog-cli.ts +31 -0
- package/src/cli/connector-cli.ts +16 -0
- package/src/cli/control-cli.ts +15 -6
- package/src/cli/doctor-fix.ts +2 -2
- package/src/cli/intake-source-cli.ts +44 -8
- package/src/cli/log-event-names.ts +8 -0
- package/src/cli/msg-cli.ts +32 -3
- package/src/cli/pr-cli.ts +21 -1
- package/src/cli/pr-land-heavy-remote.ts +44 -6
- package/src/cli/pr-land-overlap-evidence.ts +13 -1
- package/src/cli/pr-land-pod-shadow-job.ts +143 -5
- package/src/cli/pr-land-pod-shadow.ts +9 -2
- package/src/cli/release-checklist-read-cli.ts +44 -16
- package/src/cli/release-cli.ts +23 -3
- package/src/cli/research-cli.ts +9 -0
- package/src/cli/setup-cli.ts +166 -6
- package/src/cli/setup-keys.ts +199 -0
- package/src/cli/task-plugin-wizard-host.ts +114 -0
- package/src/cli/tasks-cli.ts +54 -9
- package/src/cli/tui-test-cli.ts +190 -0
- package/src/config.ts +4 -2
- package/src/connectors/linear-daily-progress.ts +228 -0
- package/src/connectors/linear-projector.ts +34 -12
- package/src/connectors/linear.ts +151 -7
- package/src/control-plane/ledger.ts +42 -4
- package/src/control-plane/member-tokens.ts +25 -2
- package/src/control-plane/ports.ts +8 -3
- package/src/control-plane/server.ts +26 -5
- package/src/core-turn/deep-turn-bloom.ts +67 -0
- package/src/core-turn/research-policy.ts +43 -0
- package/src/core-turn/run-core-turn.ts +488 -51
- package/src/core-turn/types.ts +4 -0
- package/src/dashboard/chat/acp-chat.ts +10 -0
- package/src/dashboard/classic-sidetab-mission-job.ts +192 -0
- package/src/dashboard/classic-sidetab-mission-pair.ts +82 -0
- package/src/dashboard/classic-sidetab-mission-trio.ts +242 -0
- package/src/dashboard/classic-sidetab-mission.ts +169 -5
- package/src/dashboard/index.ts +387 -14
- package/src/dashboard/input/chat-main-acp-dispatch.ts +23 -0
- package/src/dashboard/input/chat-main-plain-turn-runtime.ts +8 -0
- package/src/dashboard/mission-cli-consumer.ts +20 -8
- package/src/dashboard/plugin-wizard-runtime.ts +50 -0
- package/src/dashboard/plugin-wizard-tool.ts +55 -0
- package/src/dashboard/sidetab-runtime.ts +3 -1
- package/src/dashboard/terminal-popup-runtime.ts +6 -3
- package/src/dashboard/visible-mission-diagnostics.ts +16 -0
- package/src/decisions/linear-progress-summary.ts +78 -0
- package/src/decisions/linear-progress-sync.ts +152 -0
- package/src/domains/outbound-alert.ts +49 -11
- package/src/domains/retro-cycle-observation.ts +43 -0
- package/src/domains/retro-cycle.ts +13 -2
- package/src/domains/retro-proposals.ts +92 -0
- package/src/domains/retro-report.ts +6 -1
- package/src/domains/telegram-kind-route.ts +16 -9
- package/src/graph-runner/arg-allowance.ts +13 -0
- package/src/graph-runner/graph-cli.ts +24 -1
- package/src/graph-runner/graph-grow-llm.ts +3 -1
- package/src/graph-runner/graph-run-api.ts +3 -1
- package/src/graph-runner/runner.ts +310 -46
- package/src/graph-wizard/mission-compose.ts +407 -12
- package/src/harness/dispatch-backpressure.ts +54 -1
- package/src/harness/dispatch-shadow-compare.ts +74 -0
- package/src/harness/harness-cli-command.ts +15 -3
- package/src/harness/harness-pod-dispatch.ts +3 -0
- package/src/harness/skill-exec.ts +21 -9
- package/src/harness/skill-select.ts +1 -1
- package/src/hooks/error-report-cloud.ts +101 -0
- package/src/hooks/receiver.ts +29 -2
- package/src/index.ts +129 -12
- package/src/intake-plane/actions.ts +354 -0
- package/src/intake-plane/adapters/telegram-ambient.ts +34 -18
- package/src/intake-plane/intake-sources.ts +78 -8
- package/src/intake-plane/items.ts +14 -4
- package/src/intake-plane/linear-mission-sync.ts +80 -0
- package/src/intake-plane/linear-secretary-runtime.ts +178 -0
- package/src/intake-plane/linear-wish.ts +227 -1
- package/src/life/life-cli.ts +168 -0
- package/src/life/life-kinds.ts +160 -0
- package/src/live-supply/budget-consumer.ts +78 -0
- package/src/live-supply/read.ts +3 -0
- package/src/live-supply/snapshot.ts +45 -0
- package/src/llm/child-first-llm-observation.ts +112 -0
- package/src/llm/provider-credentials.ts +68 -6
- package/src/llm/provider-failure-evidence.ts +44 -0
- package/src/llm.ts +172 -12
- package/src/maturity/feature-maturity.ts +3 -3
- package/src/mcp/client.ts +7 -0
- package/src/mcp/proxy-runtime.ts +6 -1
- package/src/mcp/server.ts +54 -0
- package/src/msg/msg-sse-server.ts +3 -3
- package/src/msg/msg-store.ts +177 -19
- package/src/native-tool-catalog.ts +36 -2
- package/src/nexus/api/consult-requests.ts +18 -6
- package/src/nexus/api/discord-trigger-bot.ts +6 -6
- package/src/nexus/api/graphs-api.ts +4 -2
- package/src/nexus/api/grokbot-trigger-bot.ts +206 -0
- package/src/nexus/api/http-server.ts +37 -1
- package/src/nexus/api/mcp-public-allowlist.ts +2 -0
- package/src/nexus/api/telegram-trigger-bot.ts +6 -6
- package/src/nexus/boot/register-mcp-clients.ts +114 -8
- package/src/nexus/index.ts +22 -2
- package/src/nexus/outbound/format.ts +9 -0
- package/src/nexus/outbound/grokbot-adapter.ts +71 -0
- package/src/nexus/outbound/router.ts +121 -16
- package/src/nexus/setup-status.ts +9 -0
- package/src/nexus/state/state.ts +3 -0
- package/src/oauth/codex-account-store.ts +20 -7
- package/src/oauth/codex-owner-mirror.ts +81 -0
- package/src/oauth/codex.ts +17 -2
- package/src/oauth/fallback-chain.ts +47 -17
- package/src/onboarding/first-run-doctor.ts +8 -1
- package/src/onboarding/first-run.ts +126 -29
- package/src/onboarding/key-setup.ts +103 -0
- package/src/onboarding/menu-answer.ts +13 -0
- package/src/onboarding/secret-prompt.ts +37 -0
- package/src/plugins/install/plugin-install.ts +59 -0
- package/src/pr-tool/census.ts +130 -0
- package/src/preview/terminal.ts +22 -7
- package/src/prompt-enhance/enhance.ts +10 -0
- package/src/pty-shell/pty-control-ipc.ts +4 -1
- package/src/pty-shell/pty-write-provenance.ts +21 -3
- package/src/pty-shell/registry.ts +9 -2
- package/src/registry/catalog-server.ts +232 -0
- package/src/registry/loader.ts +45 -1
- package/src/registry/types.ts +1 -2
- package/src/release-loop/proposal-auto-place.ts +83 -0
- package/src/research/axis-fanout.ts +79 -29
- package/src/research/lenses/second-order.ts +312 -0
- package/src/self-dev/ask-launch-flow.ts +72 -1
- package/src/self-dev/dev-cli.ts +7 -2
- package/src/self-dev/dev-pipeline.ts +5 -0
- package/src/self-dev/draft-residue.ts +64 -5
- package/src/self-dev/draft-sweep.ts +31 -10
- package/src/self-dev/draft-triage-rules.ts +60 -3
- package/src/self-dev/graph-front-nodes.ts +2 -1
- package/src/self-dev/graph-journey-route.ts +76 -21
- package/src/self-dev/launch-preflight.ts +58 -0
- package/src/self-dev/orchestrate.ts +1 -1
- package/src/self-dev/run-supervisor.ts +152 -2
- package/src/self-dev/shard-aggregate.ts +4 -0
- package/src/self-dev/shard-run.ts +36 -15
- package/src/self-implement/abandoned-classification.ts +12 -3
- package/src/self-implement/budget-gate.ts +7 -0
- package/src/self-implement/child-llm-preference.ts +10 -1
- package/src/self-implement/doctor-visit.ts +30 -8
- package/src/self-implement/elanous-tui-spawn.ts +3 -0
- package/src/self-implement/fixtures/tdd-green-missing-passing-child-transcript.txt +2 -0
- package/src/self-implement/gate-artifacts.ts +2 -1
- package/src/self-implement/goal-author-cli.ts +4 -2
- package/src/self-implement/goal-author.ts +549 -10
- package/src/self-implement/graph-overlay-yaml.ts +181 -4
- package/src/self-implement/graph-overlay.ts +3 -1
- package/src/self-implement/graph-profile-yaml.ts +107 -0
- package/src/self-implement/graph-yaml.ts +94 -5
- package/src/self-implement/off-diff-evidence.ts +249 -5
- package/src/self-implement/orchestrator.ts +298 -26
- package/src/self-implement/run-chart.ts +6 -3
- package/src/self-implement/run-ledger.ts +51 -1
- package/src/self-implement/runtime-overlay-run-steps.ts +95 -0
- package/src/self-implement/tdd-evidence-tags.ts +9 -0
- package/src/self-implement/test-scenario-request.ts +37 -6
- package/src/self-implement/train-gate-receipt.ts +166 -0
- package/src/self-implement/train-gate-remote.ts +62 -18
- package/src/session/chat.ts +6 -4
- package/src/session/session-fanout.ts +2 -0
- package/src/session/streaming/acp-stream-sink.ts +2 -1
- package/src/session/streaming/chunk-producer.ts +6 -0
- package/src/session/streaming/stream-compositor.ts +3 -2
- package/src/session-runtime/index.ts +74 -6
- package/src/session-runtime/retry-policy.ts +1 -1
- package/src/setup/llm-env-detect.ts +3 -0
- package/src/setup/service-key-catalog.ts +46 -0
- package/src/setup/service-keys.ts +241 -0
- package/src/sidetab-core/model.ts +205 -10
- package/src/sidetab-core/visible-agent-mission-pair.ts +51 -0
- package/src/sidetab-core/visible-agent-mission.ts +182 -48
- package/src/skills/tools/agent.ts +23 -4
- package/src/skills/tools/omni-search.ts +127 -27
- package/src/task-agent/parent-host.ts +29 -1
- package/src/task-agent/recall-inject.ts +98 -0
- package/src/task-agent/repair-outcomes.ts +65 -0
- package/src/task-agent/task-hand.ts +46 -14
- package/src/task-orchestrator/dispatcher.ts +14 -1
- package/src/task-orchestrator/linear-capture-events.ts +55 -0
- package/src/task-orchestrator/store.ts +16 -5
- package/src/task-orchestrator/surfaces/pod-artifact-return.ts +23 -1
- package/src/task-orchestrator/surfaces/pod-failure-reason.ts +107 -1
- package/src/task-orchestrator/surfaces/pod-ledger-events.ts +113 -14
- package/src/task-orchestrator/surfaces/pod-si-warm-host.ts +21 -9
- package/src/task-orchestrator/surfaces/pod-source-receive.ts +23 -11
- package/src/task-orchestrator/surfaces/pod-warm-switch.ts +2 -0
- package/src/task-orchestrator/surfaces/pod-warm-worker-pod.ts +1 -1
- package/src/task-orchestrator/surfaces/pod-warm-worker-provider.ts +467 -77
- package/src/task-orchestrator/surfaces/pod-warm-worker-runtime.ts +45 -3
- package/src/task-orchestrator/surfaces/self-implement-pod.ts +210 -14
- package/src/task-orchestrator/surfaces/self-implement.ts +27 -3
- package/src/task-orchestrator/surfaces/warm-reuse-evidence.ts +169 -0
- package/src/task-orchestrator/types.ts +14 -0
- package/src/telegram.ts +14 -16
- package/src/terminal/coding-agent.ts +14 -5
- package/src/terminal/session-registry.ts +1 -1
- package/src/tool-hints/gate.ts +46 -14
- package/src/tool-hints/signals.ts +1 -1
- package/src/tool-hints/types.ts +2 -0
- package/src/tool-runtime/agent-runtime.ts +1 -0
- package/src/tool-runtime/browser-hand-runtime.ts +391 -0
- package/src/tool-runtime/browser-runtime.ts +33 -19
- package/src/tool-runtime/elanous-linear-issue-runtime.ts +76 -0
- package/src/tool-runtime/elanous-linear-secretary-runtime.ts +173 -0
- package/src/tool-runtime/graph-mcp-runtimes.ts +240 -0
- package/src/tool-runtime/index.ts +6 -0
- package/src/tool-runtime/types.ts +5 -0
- package/src/tui/entry.ts +51 -8
- package/src/tui/sidetab/attach.ts +252 -11
- package/src/tui/sidetab/herdr-portal.ts +225 -0
- package/src/tui/sidetab/list.ts +3 -2
- package/src/tui-client/next-dashboard-runtime.ts +52 -0
- package/src/user-config.ts +34 -9
- package/src/user-intent/types.ts +4 -3
- package/src/ux-sim/browser-hand.ts +165 -0
- package/src/ux-sim/draft-inventory-builder.ts +199 -0
- package/src/ux-sim/fake-browser-page.ts +81 -0
- package/src/ux-sim/fake-linear-device.ts +31 -0
- package/src/ux-sim/graph-engine-sim.ts +47 -0
- package/src/ux-sim/linear-secretary.ts +208 -0
- package/src/ux-sim/mock-scenario-catalog.json +81 -26
- package/src/ux-sim/mock-scenario-catalog.ts +175 -5
- package/src/ux-sim/onboarding-first-run-device.ts +31 -21
- package/src/ux-sim/release-sim-rig.ts +62 -18
- package/src/ux-sim/scenario.ts +70 -26
- package/src/ux-sim/service-key-setup.ts +113 -0
- package/src/ux-sim/term-slash-device.ts +74 -0
- package/src/ux-sim/turn-throw-sim.ts +31 -0
- package/src/version/packed-revision.json +1 -1
- package/src/web-search/exa.ts +77 -0
- package/src/web-search/index.ts +30 -9
- package/src/web-search/provider.ts +4 -1
- package/src/web-search/x-intent.ts +5 -0
- package/apps/pwa/out/_next/static/chunks/0244e5b5.6fc7670f8223d82d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1121.13ba7a8aff19df81.js +0 -36
- package/apps/pwa/out/_next/static/chunks/1147-5196d19c222051b3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1319.b9b815ae0f181e06.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1345-31427b833438f521.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1455-530ca16c7e71baff.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1574.878c18ecc97b1bd4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1586.fafc33a9a5835cb7.js +0 -32
- package/apps/pwa/out/_next/static/chunks/1744.855fd60ae4c4a8c8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/193.21a47a3e07ef6860.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1945.7b54990d578c119b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2004.e839fda7ea5a738a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2044-dd681a5c08779ff8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2101.2248decb38829b03.js +0 -286
- package/apps/pwa/out/_next/static/chunks/2300.41ea70ac1bef1446.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2357-07b5eeb5fb12628d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2364.28652020695a6db3.js +0 -34
- package/apps/pwa/out/_next/static/chunks/2456.b6de0e1c05f28843.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2526.c3e50ac1fec064bd.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2549-cda50b716ff4250c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2550-5f1e88f615568045.js +0 -1
- package/apps/pwa/out/_next/static/chunks/261-319078c954e40d66.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2690.0521c738b7749931.js +0 -115
- package/apps/pwa/out/_next/static/chunks/2974.595d1e29d040cb6a.js +0 -64
- package/apps/pwa/out/_next/static/chunks/3207.a756c95e9ec8c3c8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3285.89ee2f298682f5e5.js +0 -93
- package/apps/pwa/out/_next/static/chunks/3447.06edc7b092021417.js +0 -41
- package/apps/pwa/out/_next/static/chunks/3510-9ca392698bfe4391.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3541.772e5ce425aaa611.js +0 -24
- package/apps/pwa/out/_next/static/chunks/3741.9cf76acaa2ee5298.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3837.a210d7d0db8d8abd.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3898-955c896f394217a6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3947-ef57acea76eaa8d2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4037-3b82ebc7d78afdc7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/405.9022d4a478202b67.js +0 -77
- package/apps/pwa/out/_next/static/chunks/417-fb2cc9a9910e5968.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4276.336d76d858fcdf1b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4302.6ced9aa4535de947.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4320.583cbab64db6be02.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4768-8eac183fd291ca53.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4770.769c9cd9c7034eba.js +0 -148
- package/apps/pwa/out/_next/static/chunks/4895.65605ec3e6504e89.js +0 -74
- package/apps/pwa/out/_next/static/chunks/50061469.0326382241ef3b2d.js +0 -122
- package/apps/pwa/out/_next/static/chunks/5112.4b9f300124fab7b3.js +0 -149
- package/apps/pwa/out/_next/static/chunks/5335.375ee922bcd5bc83.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5342.023a2e729689b320.js +0 -27
- package/apps/pwa/out/_next/static/chunks/53c73f84.373b6160adfa89a4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5431-72a1dbde59400691.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5440-4236de26c5ea5856.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5486-b318c165f645d8ba.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5506-c7d2ec25c62a7c94.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5570-c66ecbea26b4e3b1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5696.ffca5aa259d8451e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5793-8c584aea2aa87560.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5848-6de6b8c173351a90.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5999.94e3c83040200f31.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5a7901d6-2d8d9b5587cf9042.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6131.348b7d6bdcd267ce.js +0 -226
- package/apps/pwa/out/_next/static/chunks/6164.86133a0172611184.js +0 -90
- package/apps/pwa/out/_next/static/chunks/6515.e07e8b2b8a707a87.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6522-c005514f87d18982.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6642.648adb1767f39ecf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6848.138805a09d001d09.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7049-c09e2b7a253a24f3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7072.1e00447d9fa39972.js +0 -104
- package/apps/pwa/out/_next/static/chunks/7106.64201c539c5e220c.js +0 -94
- package/apps/pwa/out/_next/static/chunks/7151-1f742b455986530e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7199.18d6b25e001154ce.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7279-c199ea83f34338fa.js +0 -1
- package/apps/pwa/out/_next/static/chunks/728b938d.ffaa7ad583d60e58.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7309.171c3de54e0322f1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/733.7a1ab3342e03306f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7504.d5cf1e7cd89b1b08.js +0 -24
- package/apps/pwa/out/_next/static/chunks/7573-0fd4af62d65d4598.js +0 -1
- package/apps/pwa/out/_next/static/chunks/759.6f8267df4689c401.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7825-668b046f72f14483.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7852-1538768b6eb19388.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7868.cff810430bb63c91.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8084-dfcc796874ab4e07.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8266.6bf9b131b2584678.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8403.7b81d5e64074a725.js +0 -8
- package/apps/pwa/out/_next/static/chunks/8470.1998cbd0866a7eac.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8505.fd803c6c33b54cc3.js +0 -79
- package/apps/pwa/out/_next/static/chunks/8546-6f03f8ea34dd61d9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8687-246fda8433d3477c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/898-280022fb082936bc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9098-50eefc1844212e3d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9211-330b6736a63d4cb3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9249.976f1e69a9d80754.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9255-cf88fceda5666645.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9306-e523ba58bb8adc42.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9324.a9866d717ba62cb6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9325.a8510e8aa87c8143.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9353-12bfff0c130104cf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9479-154a697d4b6e4e98.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9540-65aa6ccc31b3fd78.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9633.ce5bddc56784da72.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9656-374232558fd528d0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9832.f4a98c878ecf2c0a.js +0 -62
- package/apps/pwa/out/_next/static/chunks/9865.f094440645f02d98.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/_not-found/page-e772b4710df5d936.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-4361368e6a76b967.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-802f349fdd65248d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/board/page-7f35513988a2a495.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/botlab/page-798121656540e33e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/bots/page-20a089490affe98c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-e5e4ec786d70e604.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/chat/page-d12fe5d0801430e4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/consult/page-d8cf21022fecc026.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/control/page-21ce565c9c57ee97.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-b56563025f619c9b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-52f14dd133da8348.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/editor/page-c0ed7fdcdba76633.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/exec/page-af8c3020cb520f15.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/field/page-72eda67af9f5e35c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/healthz/route-e772b4710df5d936.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/inside/page-67a6620d31f0a46f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/intake/page-f059363aa0880ec2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/layout-f9f917d6a57f69fb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live/page-d3ae55eee2f0826c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live-run/page-0e3d7b9421b79dac.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/loops/page-ba738f7e233eb211.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/market/page-33438b98c74fd599.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-0b34d5fd990d793a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/morning/page-0f291d3c8fd55a3a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/not-found-3fced192be5279c1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-04cb3cf182a7c1ea.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-6ccbd2ab23a21542.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-aa0518c48a5f4e56.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-4b32226d341ad7d7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-3224fd8f6383b61f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/page-efbc97459f2914e2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-2fe487d88cd5d97c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-48861dd1a858bab7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-197d5d4d21d228ea.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-a763ba89fbdd9c27.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/page-7edb253510b1c136.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-0c875702c61965ea.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/layout-e772b4710df5d936.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/page-e425c951151095f7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/share/page-9c90e0aec4e27f77.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-733e09a02e727d42.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-4f899e14c34d77a1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/term/page-bf067887b3307423.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/today/page-7af10868ff87d04e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/trace/page-efe5304057aa11c7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/vault/page-76bcd29aaa8a26c3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-4cfd88e2273ce50f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-0a1ddb47efba0a32.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-2a176c707152c892.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-efe03031b8797fbf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/framework-d0d2d673bfd8a8a9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-4c9fceb2baa09cb7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-app-b0ab8d8fc9a97556.js +0 -1
- package/apps/pwa/out/_next/static/chunks/pages/_app-7e2cc62a2e5cec96.js +0 -1
- package/apps/pwa/out/_next/static/chunks/pages/_error-22324935f753ec5e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/webpack-9dc1bfa25334998a.js +0 -1
- package/apps/pwa/out/_next/static/css/be9019f696217521.css +0 -1
- /package/apps/pwa/out/_next/static/{X1ucLw10Cds_h614NoEnh → HMXsxdy5MIIcHPMHv1wD4}/_ssgManifest.js +0 -0
|
@@ -106,7 +106,7 @@ export function formatAutoMergeSuccessMessage(input: {
|
|
|
106
106
|
import { GoalRunStore, insertGoalRunRecord, type GoalPriorRuns } from './goal-run-store.js';
|
|
107
107
|
import { writeGoalRunRecordFragment } from './goal-execution-records.js';
|
|
108
108
|
import { getUserConfig } from '../user-config.js';
|
|
109
|
-
import { appendRunLedgerEntry, loadRunLedger, parseRunShardIdentity, queryRunChain, runLedgerDir, type RunChainShardSibling, type RunLedgerEntry, type RunLedgerWriter, type RunOriginData, type RunShardIdentity } from './run-ledger.js';
|
|
109
|
+
import { appendRunLedgerEntries, appendRunLedgerEntry, loadRunLedger, parseRunShardIdentity, pathSignatureOf, queryRunChain, runLedgerDir, type RunChainShardSibling, type RunLedgerBatchWriter, type RunLedgerEntry, type RunLedgerWriter, type RunOriginData, type RunShardIdentity } from './run-ledger.js';
|
|
110
110
|
import { buildRunStopTerminalEvidence, classifyMergeHoldStop, classifyTerminalHarnessFailure, forgetRunStop, isRunStopClass, readRunStopRecord, recordRunStop, runStopRecorded } from './run-stop.js';
|
|
111
111
|
import { autohealFromStop, parseAutohealMode, pickAutohealAction, type AutohealActions, type AutohealResult } from './stop-autoheal.js';
|
|
112
112
|
import { operationalAutohealActions } from './stop-autoheal-operational.js';
|
|
@@ -117,7 +117,7 @@ import { decideLineageSupersede, lineageSupersedeCloseComment, type LineageSuper
|
|
|
117
117
|
import { basename, isAbsolute, join, relative, resolve, sep } from 'node:path';
|
|
118
118
|
import { homedir } from 'node:os';
|
|
119
119
|
import { enqueueControlMemo, readSoftStopRequestStatus, type SoftStopRequestRead } from '../harness/control-inbox.js';
|
|
120
|
-
import { debug } from '../debug/log.js';
|
|
120
|
+
import { debug, redactSecretText } from '../debug/log.js';
|
|
121
121
|
import { enterJourneyNode, exitJourneyNode, journeyJoinFields, withJourneyNode } from '../self-dev/graph-journey-nodes.js';
|
|
122
122
|
import { classifyGateEnvDeficit, DEFAULT_GATE_ENV_RETRY, GATE_ENV_DEFICIT_HARVESTABLE_MARK, type GateEnvDeficitKind } from './gate-env-retry.js';
|
|
123
123
|
import { recordFailureEvent } from './heal-intake.js';
|
|
@@ -228,7 +228,8 @@ import { formatGateFailedId, type PremiseReviewCard, type PremiseReviewInput } f
|
|
|
228
228
|
import { runWorkflowToCompletion } from '../workflow-runtime/executor.js';
|
|
229
229
|
import { mapReworkVerdict, supervisionObservationFields } from './supervision-vocabulary.js';
|
|
230
230
|
import { resolveRunOutcome } from './run-outcome.js';
|
|
231
|
-
import { authorLimitationCountFromGoal, authoredSignalExecution, harvestEvidenceLines, harvestedEvidenceObservation, MAX_HARVESTED_EVIDENCE_CHARS, parseOffDiffEvidence, judgeTddEvidence, requiredEvidenceFromGoal, createRequiredEvidenceBudget, coverRequiredEvidence, settleUncoveredEvidence, formatUncoveredEvidenceFeedback, type OffDiffEvidenceParse } from './off-diff-evidence.js';
|
|
231
|
+
import { authorLimitationCountFromGoal, authoredSignalExecution, harvestEvidenceLines, harvestedEvidenceObservation, MAX_HARVESTED_EVIDENCE_CHARS, parseOffDiffEvidence, judgeTddEvidence, receiveObservedTddRed, receiveObservedTddGreen, runTddBaseHeadTest, requiredEvidenceFromGoal, createRequiredEvidenceBudget, coverRequiredEvidence, settleUncoveredEvidence, formatUncoveredEvidenceFeedback, type OffDiffEvidenceParse } from './off-diff-evidence.js';
|
|
232
|
+
import type { TddRecordTag } from './tdd-evidence-tags.js';
|
|
232
233
|
import { resolveEvidenceHeadCommit } from './evidence-command-budget.js';
|
|
233
234
|
import { pressDecisionSignals, type DecisionSignalPressResult } from './decision-signal-press.js';
|
|
234
235
|
import { inspectDecisionObservations, inspectDecisionSignalKinds, inspectDecisionSignalObservations } from '../../scripts/ask-marker-check.js';
|
|
@@ -320,6 +321,7 @@ import { createArtifactStore } from '../artifact/index.js';
|
|
|
320
321
|
import { mapStageToRunStatus, type SelfImplementStage } from './run-status-mapping.js';
|
|
321
322
|
import type { LifecycleScreenComparison } from './lifecycle-screen-scoreboard.js';
|
|
322
323
|
import { buildRuntimeOverlayState } from './graph-overlay-condition.js';
|
|
324
|
+
import { runtimeOverlayRunSteps } from './runtime-overlay-run-steps.js';
|
|
323
325
|
import { activeTemplate, decideTemplate, graphAuthorityFields, nodeNameForStage, overlayDecisionObservation, resolveGraphAuthorityForUserConfig, routeGate, visitBudgetOf } from './graph-authority.js';
|
|
324
326
|
import type { GraphTemplate } from './graph-templates.js';
|
|
325
327
|
import { defaultOverlaysDir, loadGraphOverlays, type GraphOverlaySpec } from './graph-overlay-yaml.js';
|
|
@@ -1068,6 +1070,8 @@ export type ImplementTerminalStatus = {
|
|
|
1068
1070
|
export interface SelfImplementSeams {
|
|
1069
1071
|
/** Run-observer ledger sink. Tests inject an in-memory sink to avoid touching user state. */
|
|
1070
1072
|
writeRunLedger?: RunLedgerWriter;
|
|
1073
|
+
/** Atomic sink for one accepted runtime graph overlay's structural event batch. */
|
|
1074
|
+
writeRunLedgerBatch?: RunLedgerBatchWriter;
|
|
1071
1075
|
checkUnwiredExports?: typeof findUnwiredExports;
|
|
1072
1076
|
/** STOP-AUTOHEAL — heal action seams (live mode only runs actions given here; missing = needs-owner). */
|
|
1073
1077
|
stopAutohealActions?: AutohealActions;
|
|
@@ -1228,6 +1232,8 @@ export interface SelfImplementSeams {
|
|
|
1228
1232
|
headCommit?: (cwd: string) => string | undefined;
|
|
1229
1233
|
/** Test seam for required evidence command execution; production uses its bounded shell runner. */
|
|
1230
1234
|
evidenceCommandRunner?: (command: string, cwd: string) => Pick<ReturnType<typeof spawnSync>, 'status' | 'stdout' | 'stderr' | 'error'>;
|
|
1235
|
+
/** Replays the goal's changed Bun test on base and head when child RED output is absent. */
|
|
1236
|
+
runTddBaseHeadTest?: typeof runTddBaseHeadTest;
|
|
1231
1237
|
/** `commit` pins the pushed state; without it the worktree HEAD is pushed. */
|
|
1232
1238
|
preserveBlockedBranch?: (ctx: { cwd: string; branch: string; title: string; commit?: string }) => boolean | Promise<boolean>;
|
|
1233
1239
|
/** DRAFT-NOT-ARCHIVE — `tools.selfImplement.draftOnStop` 읽기 seam. 생략하면 user-config(실패·부재 = 'always' · 종전). */
|
|
@@ -2406,7 +2412,11 @@ export interface SelfImplementResult {
|
|
|
2406
2412
|
/** Additive hard-cap disposition; outcome remains the stable public terminal contract. */
|
|
2407
2413
|
salvage?: 'launched' | 'parked';
|
|
2408
2414
|
/** Rework stopped on exclusively baseline/flaky/precondition failures; do not retry this goal against the same base. */
|
|
2409
|
-
terminationReason?:
|
|
2415
|
+
terminationReason?: string;
|
|
2416
|
+
/** Child's concrete stop summary when implementation did not converge before TDD evidence adjudication. */
|
|
2417
|
+
terminationDetail?: string;
|
|
2418
|
+
/** Structured TDD failure survives child JSON/result truncation and parent-ledger mapping. */
|
|
2419
|
+
tddEvidenceFailure?: { reason: 'tdd-evidence-missing'; round: number; missing: readonly TddRecordTag[] };
|
|
2410
2420
|
sessionId?: string;
|
|
2411
2421
|
worktreePath?: string;
|
|
2412
2422
|
branch?: string;
|
|
@@ -2895,6 +2905,8 @@ type BlockedDraftPrState = {
|
|
|
2895
2905
|
childSummaryArtifact?: ChildSummaryArtifactRef;
|
|
2896
2906
|
terminalStatus?: ImplementTerminalStatus;
|
|
2897
2907
|
planRevision?: ReworkPlanRevision;
|
|
2908
|
+
stopStage?: string;
|
|
2909
|
+
stopClass?: ReturnType<typeof classifyTerminalHarnessFailure>;
|
|
2898
2910
|
/** Classifier output for this unfinished run. Omitted means the cause was not classified. */
|
|
2899
2911
|
abandonedClassification?: AbandonedClassificationResult;
|
|
2900
2912
|
};
|
|
@@ -2909,29 +2921,39 @@ export type BlockedDraftClassificationRecord = {
|
|
|
2909
2921
|
readonly classification: string;
|
|
2910
2922
|
readonly classificationBasis: string;
|
|
2911
2923
|
readonly worktreeClean: boolean | null;
|
|
2924
|
+
readonly stop: { readonly class: ReturnType<typeof classifyTerminalHarnessFailure>; readonly stage: string };
|
|
2912
2925
|
};
|
|
2913
2926
|
|
|
2914
2927
|
export function blockedDraftClassificationRecord(
|
|
2915
2928
|
classification: AbandonedClassificationResult | undefined,
|
|
2929
|
+
stop: { readonly stage?: string; readonly class?: ReturnType<typeof classifyTerminalHarnessFailure> } = {},
|
|
2916
2930
|
): BlockedDraftClassificationRecord {
|
|
2931
|
+
const stage = typeof stop.stage === 'string' && stop.stage.trim() ? stop.stage : 'unknown';
|
|
2932
|
+
const stopClass = stop.class ?? classifyTerminalHarnessFailure({
|
|
2933
|
+
stage,
|
|
2934
|
+
...(classification ? { abandonedClassification: classification.classification } : {}),
|
|
2935
|
+
});
|
|
2917
2936
|
if (!classification) {
|
|
2918
2937
|
return {
|
|
2919
2938
|
classification: BLOCKED_DRAFT_UNCLASSIFIED_CLASSIFICATION,
|
|
2920
2939
|
classificationBasis: BLOCKED_DRAFT_UNCLASSIFIED_CLASSIFICATION,
|
|
2921
2940
|
worktreeClean: null,
|
|
2941
|
+
stop: { class: stopClass, stage },
|
|
2922
2942
|
};
|
|
2923
2943
|
}
|
|
2924
2944
|
return {
|
|
2925
2945
|
classification: classification.classification,
|
|
2926
2946
|
classificationBasis: classification.classificationBasis,
|
|
2927
2947
|
worktreeClean: classification.worktreeClean ?? null,
|
|
2948
|
+
stop: { class: stopClass, stage },
|
|
2928
2949
|
};
|
|
2929
2950
|
}
|
|
2930
2951
|
|
|
2931
2952
|
export function formatBlockedDraftClassificationSection(
|
|
2932
2953
|
classification: AbandonedClassificationResult | undefined,
|
|
2954
|
+
stop: { readonly stage?: string; readonly class?: ReturnType<typeof classifyTerminalHarnessFailure> } = {},
|
|
2933
2955
|
): string[] {
|
|
2934
|
-
const record = blockedDraftClassificationRecord(classification);
|
|
2956
|
+
const record = blockedDraftClassificationRecord(classification, stop);
|
|
2935
2957
|
const human = record.classification === BLOCKED_DRAFT_UNCLASSIFIED_CLASSIFICATION
|
|
2936
2958
|
? `${record.classification} (분류를 못 함)`
|
|
2937
2959
|
: record.classification;
|
|
@@ -2942,6 +2964,8 @@ export function formatBlockedDraftClassificationSection(
|
|
|
2942
2964
|
`- classification: ${record.classification}`,
|
|
2943
2965
|
`- classificationBasis: ${record.classificationBasis}`,
|
|
2944
2966
|
`- worktreeClean: ${worktreeCleanText}`,
|
|
2967
|
+
`- stop.class: ${record.stop.class}`,
|
|
2968
|
+
`- stop.stage: ${record.stop.stage}`,
|
|
2945
2969
|
'',
|
|
2946
2970
|
'```json',
|
|
2947
2971
|
JSON.stringify(record),
|
|
@@ -2967,7 +2991,7 @@ function blockedDraftPrBody(feature: string, implSummary: string, state: Blocked
|
|
|
2967
2991
|
...(state.childSummaryArtifact ? [`- child summary artifact: ${state.childSummaryArtifact.path}`] : []),
|
|
2968
2992
|
...(state.terminalStatus ? [`- child terminal status: reached=${state.terminalStatus.reached}; changed=${state.terminalStatus.changed}; toolCalls=${state.terminalStatus.toolCalls}; timedOut=${state.terminalStatus.timedOut}`] : []),
|
|
2969
2993
|
'',
|
|
2970
|
-
...formatBlockedDraftClassificationSection(state.abandonedClassification),
|
|
2994
|
+
...formatBlockedDraftClassificationSection(state.abandonedClassification, { stage: state.stopStage, class: state.stopClass }),
|
|
2971
2995
|
'',
|
|
2972
2996
|
'## 미배달 감독 수리 지시',
|
|
2973
2997
|
...(state.undeliveredSupervisorInputs.length
|
|
@@ -3013,6 +3037,15 @@ type PreparedPrBody = {
|
|
|
3013
3037
|
const PR_BODY_TRUNCATION_MARKER_MAX_CHARS = 1_024;
|
|
3014
3038
|
|
|
3015
3039
|
type ChildProviderErrorQueryResult = Exclude<Awaited<ReturnType<NonNullable<SelfImplementSeams['queryChildProviderErrors']>>>, undefined>;
|
|
3040
|
+
type ChildProviderErrorDetail = {
|
|
3041
|
+
provider?: string;
|
|
3042
|
+
model?: string;
|
|
3043
|
+
message?: string;
|
|
3044
|
+
observedAt?: string;
|
|
3045
|
+
httpStatus?: number;
|
|
3046
|
+
providerErrorCode?: string;
|
|
3047
|
+
providerErrorType?: string;
|
|
3048
|
+
};
|
|
3016
3049
|
|
|
3017
3050
|
/** Aggregates only router-produced structured records; provider messages are never reparsed. */
|
|
3018
3051
|
export function queryStructuredChildProviderErrors(
|
|
@@ -3032,8 +3065,8 @@ export function queryStructuredChildProviderErrors(
|
|
|
3032
3065
|
});
|
|
3033
3066
|
if (rows.length === 0) return { status: 'none' };
|
|
3034
3067
|
let credentialFailureCount = 0;
|
|
3035
|
-
let lastProviderError:
|
|
3036
|
-
let lastCredentialFailure:
|
|
3068
|
+
let lastProviderError: ChildProviderErrorDetail | undefined;
|
|
3069
|
+
let lastCredentialFailure: ChildProviderErrorDetail | undefined;
|
|
3037
3070
|
for (const row of rows) {
|
|
3038
3071
|
let data: Record<string, unknown> | undefined;
|
|
3039
3072
|
try {
|
|
@@ -3045,6 +3078,9 @@ export function queryStructuredChildProviderErrors(
|
|
|
3045
3078
|
...(typeof data?.model === 'string' ? { model: data.model } : {}),
|
|
3046
3079
|
...(typeof data?.message === 'string' ? { message: data.message } : {}),
|
|
3047
3080
|
...(typeof row.ts === 'string' ? { observedAt: row.ts } : {}),
|
|
3081
|
+
...(typeof data?.httpStatus === 'number' ? { httpStatus: data.httpStatus } : {}),
|
|
3082
|
+
...(typeof data?.providerErrorCode === 'string' ? { providerErrorCode: data.providerErrorCode } : {}),
|
|
3083
|
+
...(typeof data?.providerErrorType === 'string' ? { providerErrorType: data.providerErrorType } : {}),
|
|
3048
3084
|
};
|
|
3049
3085
|
lastProviderError = detail;
|
|
3050
3086
|
if (data?.authRejected === true) {
|
|
@@ -3103,10 +3139,12 @@ export function assembleBlockedDraftPrBody(
|
|
|
3103
3139
|
persist?: SelfImplementSeams['persistPrBodyArtifact'],
|
|
3104
3140
|
): { body: string; truncated: boolean; originalChars: number } {
|
|
3105
3141
|
const raw = blockedDraftPrBody(feature, implSummary, state, goalFile);
|
|
3106
|
-
const classificationRecord = blockedDraftClassificationRecord(state.abandonedClassification);
|
|
3142
|
+
const classificationRecord = blockedDraftClassificationRecord(state.abandonedClassification, { stage: state.stopStage, class: state.stopClass });
|
|
3107
3143
|
const essentialSuffix = [
|
|
3108
3144
|
`- reason: ${state.reason}`,
|
|
3109
3145
|
`- classification: ${classificationRecord.classification}`,
|
|
3146
|
+
`- stop.class: ${classificationRecord.stop.class}`,
|
|
3147
|
+
`- stop.stage: ${classificationRecord.stop.stage}`,
|
|
3110
3148
|
JSON.stringify(classificationRecord),
|
|
3111
3149
|
...(state.reasonTruncated ? ['- reason truncated: true'] : []),
|
|
3112
3150
|
...(state.terminalStatus ? [`- child terminal status: reached=${state.terminalStatus.reached}; changed=${state.terminalStatus.changed}; toolCalls=${state.terminalStatus.toolCalls}; timedOut=${state.terminalStatus.timedOut}`] : []),
|
|
@@ -3854,8 +3892,8 @@ export async function runSelfImplement(opts: SelfImplementOptions): Promise<Self
|
|
|
3854
3892
|
const latestVerdictSeq = (): number => Math.max(lastFailedGateSeq, lastMustFixReviewSeq);
|
|
3855
3893
|
const hasCurrentProviderError = (): boolean => providerErrorCount > 0 && lastProviderErrorSeq > latestVerdictSeq();
|
|
3856
3894
|
const hasCurrentCredentialFailure = (): boolean => credentialFailureCount > 0 && lastCredentialFailureSeq > latestVerdictSeq();
|
|
3857
|
-
let lastProviderError:
|
|
3858
|
-
let lastCredentialFailure:
|
|
3895
|
+
let lastProviderError: ChildProviderErrorDetail | undefined;
|
|
3896
|
+
let lastCredentialFailure: ChildProviderErrorDetail | undefined;
|
|
3859
3897
|
let childProviderErrorQueryStatus: 'found' | 'none' | 'unavailable' | 'not-configured' = 'not-configured';
|
|
3860
3898
|
let queriedProviderErrorCount = 0;
|
|
3861
3899
|
let queriedCredentialFailureCount = 0;
|
|
@@ -3905,8 +3943,22 @@ export async function runSelfImplement(opts: SelfImplementOptions): Promise<Self
|
|
|
3905
3943
|
credentialFailureCount,
|
|
3906
3944
|
queriedProviderErrorCount,
|
|
3907
3945
|
queriedCredentialFailureCount,
|
|
3908
|
-
lastProviderError: lastProviderError ? {
|
|
3909
|
-
|
|
3946
|
+
lastProviderError: lastProviderError ? {
|
|
3947
|
+
provider: lastProviderError.provider ?? null,
|
|
3948
|
+
model: lastProviderError.model ?? null,
|
|
3949
|
+
observedAt: lastProviderError.observedAt ?? null,
|
|
3950
|
+
...(typeof lastProviderError.httpStatus === 'number' ? { httpStatus: lastProviderError.httpStatus } : {}),
|
|
3951
|
+
...(typeof lastProviderError.providerErrorCode === 'string' ? { providerErrorCode: lastProviderError.providerErrorCode } : {}),
|
|
3952
|
+
...(typeof lastProviderError.providerErrorType === 'string' ? { providerErrorType: lastProviderError.providerErrorType } : {}),
|
|
3953
|
+
} : null,
|
|
3954
|
+
lastCredentialFailure: lastCredentialFailure ? {
|
|
3955
|
+
provider: lastCredentialFailure.provider ?? null,
|
|
3956
|
+
model: lastCredentialFailure.model ?? null,
|
|
3957
|
+
observedAt: lastCredentialFailure.observedAt ?? null,
|
|
3958
|
+
...(typeof lastCredentialFailure.httpStatus === 'number' ? { httpStatus: lastCredentialFailure.httpStatus } : {}),
|
|
3959
|
+
...(typeof lastCredentialFailure.providerErrorCode === 'string' ? { providerErrorCode: lastCredentialFailure.providerErrorCode } : {}),
|
|
3960
|
+
...(typeof lastCredentialFailure.providerErrorType === 'string' ? { providerErrorType: lastCredentialFailure.providerErrorType } : {}),
|
|
3961
|
+
} : null,
|
|
3910
3962
|
lastProviderErrorSeq,
|
|
3911
3963
|
lastCredentialFailureSeq,
|
|
3912
3964
|
lastFailedGateSeq,
|
|
@@ -3921,7 +3973,7 @@ export async function runSelfImplement(opts: SelfImplementOptions): Promise<Self
|
|
|
3921
3973
|
if (record.category !== 'llm.router.error') return;
|
|
3922
3974
|
const data = record.data;
|
|
3923
3975
|
if (!data || typeof data !== 'object') return;
|
|
3924
|
-
const { provider, model, message } = data as Record<string, unknown>;
|
|
3976
|
+
const { provider, model, message, httpStatus, providerErrorCode, providerErrorType } = data as Record<string, unknown>;
|
|
3925
3977
|
providerErrorCount++;
|
|
3926
3978
|
lastProviderErrorSeq = ++failureSequence;
|
|
3927
3979
|
lastProviderError = {
|
|
@@ -3929,6 +3981,9 @@ export async function runSelfImplement(opts: SelfImplementOptions): Promise<Self
|
|
|
3929
3981
|
...(typeof model === 'string' ? { model } : {}),
|
|
3930
3982
|
...(typeof message === 'string' ? { message } : {}),
|
|
3931
3983
|
...(typeof record.ts === 'string' ? { observedAt: record.ts } : {}),
|
|
3984
|
+
...(typeof httpStatus === 'number' ? { httpStatus } : {}),
|
|
3985
|
+
...(typeof providerErrorCode === 'string' ? { providerErrorCode } : {}),
|
|
3986
|
+
...(typeof providerErrorType === 'string' ? { providerErrorType } : {}),
|
|
3932
3987
|
};
|
|
3933
3988
|
// ⛔⭐⭐⭐ 자격 거부는 「프로바이더 오류」의 부분집합이지만 ***사람이 할 다음 행동이 다르다***
|
|
3934
3989
|
// (2026-08-14 실측 · `[T]` 83차): grok 자식 «둘»이 401 로 죽었는데 부모가 남긴 것은
|
|
@@ -4203,6 +4258,49 @@ export async function runSelfImplement(opts: SelfImplementOptions): Promise<Self
|
|
|
4203
4258
|
unjoinedNodes: unjoined,
|
|
4204
4259
|
}, { category: 'graph.path' });
|
|
4205
4260
|
}
|
|
4261
|
+
if (runGraphTemplate?.graphId === 'self-implement') {
|
|
4262
|
+
const profileIds = new Set<string>();
|
|
4263
|
+
let journeyEvidenceStatus: 'read' | 'missing' | 'read-error' = 'missing';
|
|
4264
|
+
let journeyEvidenceError: string | undefined;
|
|
4265
|
+
const journeySteps: Array<{ from: string; to: string; skipped?: string[] }> = [];
|
|
4266
|
+
try {
|
|
4267
|
+
// `recordJourneyEdge` appends graph.path synchronously to the canonical run ledger.
|
|
4268
|
+
// Reading that same append boundary avoids a potentially lagging debug LogStore mirror.
|
|
4269
|
+
const entries = loadRunLedger(runId, runLedgerDir());
|
|
4270
|
+
if (entries !== null) {
|
|
4271
|
+
journeyEvidenceStatus = 'read';
|
|
4272
|
+
for (const entry of entries) {
|
|
4273
|
+
if (entry.event !== 'graph.path') continue;
|
|
4274
|
+
const data = entry.data;
|
|
4275
|
+
if (Array.isArray(data.profileIds)) for (const id of data.profileIds) if (typeof id === 'string') profileIds.add(id);
|
|
4276
|
+
if (data.event !== 'edge-taken' || typeof data.from !== 'string' || typeof data.taken !== 'string') continue;
|
|
4277
|
+
const skipped = Array.isArray(data.skippedNodes)
|
|
4278
|
+
? data.skippedNodes.flatMap((item) => item && typeof item === 'object'
|
|
4279
|
+
&& typeof (item as { node?: unknown }).node === 'string' ? [(item as { node: string }).node] : [])
|
|
4280
|
+
: [];
|
|
4281
|
+
journeySteps.push({ from: data.from, to: data.taken, ...(skipped.length > 0 ? { skipped } : {}) });
|
|
4282
|
+
}
|
|
4283
|
+
}
|
|
4284
|
+
} catch (error) {
|
|
4285
|
+
journeyEvidenceStatus = 'read-error';
|
|
4286
|
+
journeyEvidenceError = error instanceof Error ? error.message : String(error);
|
|
4287
|
+
}
|
|
4288
|
+
const pathBasis = 'self-implement-pipeline-and-journey-v1';
|
|
4289
|
+
const pipelineNodes = traversedNodes.map(String);
|
|
4290
|
+
const pipelineSteps = pipelineNodes.slice(1).map((to, index) => ({ from: pipelineNodes[index]!, to }));
|
|
4291
|
+
const pathSteps = [...pipelineSteps, ...journeySteps];
|
|
4292
|
+
const visitedNodes = [
|
|
4293
|
+
...pipelineNodes,
|
|
4294
|
+
...journeySteps.flatMap((step) => [step.from, ...(step.skipped ?? []), step.to]),
|
|
4295
|
+
];
|
|
4296
|
+
const pathSignature = pathSignatureOf(pathSteps);
|
|
4297
|
+
observeOuter('path-signature', {
|
|
4298
|
+
...graphIdentityOf(runGraphTemplate), ...journeyJoinFields(), pathBasis,
|
|
4299
|
+
profileIds: [...profileIds].sort(), pathSignature, pathSteps, visitedNodes,
|
|
4300
|
+
journeyEdgeCount: journeySteps.length,
|
|
4301
|
+
journeyEvidenceStatus, ...(journeyEvidenceError ? { journeyEvidenceError } : {}),
|
|
4302
|
+
}, { category: 'graph.path' });
|
|
4303
|
+
}
|
|
4206
4304
|
try {
|
|
4207
4305
|
const checked = terminalNode
|
|
4208
4306
|
? (opts.seams.checkPipelineTraversal ?? checkPipelineTraversal)(traversedNodes, terminalNode)
|
|
@@ -4731,6 +4829,14 @@ function safeErrorDescription(error: unknown): string {
|
|
|
4731
4829
|
}
|
|
4732
4830
|
}
|
|
4733
4831
|
|
|
4832
|
+
function safePreservationFailure(error: unknown): string {
|
|
4833
|
+
const detail = redactSecretText(safeErrorDescription(error))
|
|
4834
|
+
.replace(/[\r\n\t\x00-\x1f\x7f]+/g, ' ')
|
|
4835
|
+
.trim()
|
|
4836
|
+
.slice(0, 400);
|
|
4837
|
+
return detail || '[empty preservation error]';
|
|
4838
|
+
}
|
|
4839
|
+
|
|
4734
4840
|
|
|
4735
4841
|
/** ⛔ 회전 스냅샷이 «이미 갖고 있는» 값을 증거 칸으로 옮기는 순수 사상.
|
|
4736
4842
|
*
|
|
@@ -4897,6 +5003,7 @@ export function attachAbandonedClassification(
|
|
|
4897
5003
|
...(credentialFailure ? { credentialFailure: true } : {}),
|
|
4898
5004
|
...(providerError ? { providerError: true } : {}),
|
|
4899
5005
|
...(providerError && result.providerErrors?.category ? { providerErrorCategory: result.providerErrors.category } : {}),
|
|
5006
|
+
...(result.terminationReason === 'tdd-evidence-missing' ? { terminationReason: result.terminationReason } : {}),
|
|
4900
5007
|
worktreePorcelain: worktree.worktreePorcelain,
|
|
4901
5008
|
...(worktree.gitResidue ? { gitResidue: worktree.gitResidue } : {}),
|
|
4902
5009
|
...(result.completionDisposition ? { completionDisposition: result.completionDisposition } : {}),
|
|
@@ -4931,6 +5038,7 @@ export function observeRunOutcome(
|
|
|
4931
5038
|
worktreePath: SelfImplementResult['worktreePath'] | undefined;
|
|
4932
5039
|
review: SelfImplementResult['review'] | undefined;
|
|
4933
5040
|
completionDisposition: SelfImplementResult['completionDisposition'] | undefined;
|
|
5041
|
+
terminationReason?: SelfImplementResult['terminationReason'];
|
|
4934
5042
|
supervisorVerdict: SelfImplementResult['supervisorVerdict'] | undefined;
|
|
4935
5043
|
goalCauseObserved?: SelfImplementResult['goalCauseObserved'];
|
|
4936
5044
|
mergeApprovalReceived: SelfImplementResult['mergeApprovalReceived'] | undefined;
|
|
@@ -4972,6 +5080,7 @@ export function observeRunOutcome(
|
|
|
4972
5080
|
...(result.quotaExhaustionAssessment?.exhausted ? { quotaExhausted: true } : {}),
|
|
4973
5081
|
...(result.quotaExhaustionAssessment?.accountAvailability ? { quotaAccountAvailability: result.quotaExhaustionAssessment.accountAvailability } : {}),
|
|
4974
5082
|
...(result.providerErrors?.category ? { providerError: true, providerErrorCategory: result.providerErrors.category } : {}),
|
|
5083
|
+
...(result.terminationReason === 'tdd-evidence-missing' ? { terminationReason: result.terminationReason } : {}),
|
|
4975
5084
|
stage: result.stage,
|
|
4976
5085
|
reviewResultObserved: result.review !== undefined,
|
|
4977
5086
|
mustFixReported: (result.review?.mustFix.length ?? 0) > 0,
|
|
@@ -5319,6 +5428,7 @@ async function runSelfImplementInner(
|
|
|
5319
5428
|
if (graphAuthority.enabled) onGraphTemplateResolved(graphTemplate);
|
|
5320
5429
|
// ⛔ 선택을 «전부» 싣는다 — 얹힌 것만 실으면 「왜 안 얹혔나」를 사후에 못 묻는다.
|
|
5321
5430
|
let reviewRepeat: number | undefined;
|
|
5431
|
+
const recordedRuntimeStructuralSteps = new Set<string>();
|
|
5322
5432
|
/** ⭐ ③ «다이나믹» — 라운드마다 runtime 오버레이를 다시 고른다.
|
|
5323
5433
|
* ⛔ **매번 «기준 선언»에서 다시 얹는다** — 이전 라운드 결과 위에 겹쳐 얹으면
|
|
5324
5434
|
* 「이 걸음을 무엇이 만들었나」가 «누적»이 되어 사후에 못 푼다.
|
|
@@ -5339,6 +5449,7 @@ async function runSelfImplementInner(
|
|
|
5339
5449
|
...(stopClass === undefined ? {} : { stopClass }),
|
|
5340
5450
|
...(reviewRepeat === undefined ? {} : { reviewRepeat }),
|
|
5341
5451
|
});
|
|
5452
|
+
const beforeRuntimeGraph = graphTemplate;
|
|
5342
5453
|
const decision = decideTemplate({
|
|
5343
5454
|
goalType: graphGoalType,
|
|
5344
5455
|
authority: graphAuthority,
|
|
@@ -5347,7 +5458,41 @@ async function runSelfImplementInner(
|
|
|
5347
5458
|
stage: 'runtime',
|
|
5348
5459
|
...(variantSpec ? { specs: { [variantSpec.graphId]: variantSpec } } : {}),
|
|
5349
5460
|
});
|
|
5350
|
-
if (decision.appliedIds.length > 0)
|
|
5461
|
+
if (decision.appliedIds.length > 0) {
|
|
5462
|
+
graphTemplate = decision.template;
|
|
5463
|
+
const structuralEvents = runtimeOverlayRunSteps({
|
|
5464
|
+
runId: runIdentity.runId,
|
|
5465
|
+
timestamp: new Date().toISOString(),
|
|
5466
|
+
before: beforeRuntimeGraph,
|
|
5467
|
+
after: graphTemplate,
|
|
5468
|
+
overlayIds: decision.appliedIds,
|
|
5469
|
+
round,
|
|
5470
|
+
});
|
|
5471
|
+
const pendingStructuralEvents = structuralEvents.map((entry) => ({
|
|
5472
|
+
entry,
|
|
5473
|
+
key: entry.event === 'node-added'
|
|
5474
|
+
? `${entry.event}:${entry.data.node}`
|
|
5475
|
+
: `${entry.event}:${entry.data.from}:${entry.data.outcome}:${entry.data.was}:${entry.data.to}`,
|
|
5476
|
+
})).filter(({ key }) => !recordedRuntimeStructuralSteps.has(key));
|
|
5477
|
+
if (pendingStructuralEvents.length > 0) {
|
|
5478
|
+
try {
|
|
5479
|
+
const batch = pendingStructuralEvents.map(({ entry }) => entry);
|
|
5480
|
+
if (opts.seams.writeRunLedgerBatch) opts.seams.writeRunLedgerBatch(batch);
|
|
5481
|
+
else if (opts.seams.writeRunLedger) for (const entry of batch) opts.seams.writeRunLedger(entry);
|
|
5482
|
+
else appendRunLedgerEntries(batch);
|
|
5483
|
+
for (const { key } of pendingStructuralEvents) recordedRuntimeStructuralSteps.add(key);
|
|
5484
|
+
} catch (error) {
|
|
5485
|
+
const first = pendingStructuralEvents[0]!.entry;
|
|
5486
|
+
observe('graph-overlay-step-write-failed', {
|
|
5487
|
+
runId: runIdentity.runId,
|
|
5488
|
+
round,
|
|
5489
|
+
event: first.event,
|
|
5490
|
+
events: pendingStructuralEvents.map(({ entry }) => entry.event),
|
|
5491
|
+
error: error instanceof Error ? error.message : String(error),
|
|
5492
|
+
});
|
|
5493
|
+
}
|
|
5494
|
+
}
|
|
5495
|
+
}
|
|
5351
5496
|
// ⭐ SELFIMPL-NODE-SEAMS-BACK — 같은 NodeContext 가 라운드로 이어진다: 체크포인트를 옮기고,
|
|
5352
5497
|
// 부품이 도는 중에 다른 판으로 바뀌었으면 그 사실을 값으로 낸다(걸음과 신원이 갈리는 것을 막는다).
|
|
5353
5498
|
if (nodeContext !== undefined) {
|
|
@@ -5722,8 +5867,8 @@ async function runSelfImplementInner(
|
|
|
5722
5867
|
// 거짓 표시한다 · 리뷰 4R). 수확본이 비면 **요약에서 수확**한다 — 요약 원문을 통째로 싣지 않는다.
|
|
5723
5868
|
const harvestedForPr = (): string | undefined => {
|
|
5724
5869
|
if (!impl) return undefined;
|
|
5725
|
-
const fromChild = impl.evidenceTranscript?.trim() ? impl.evidenceTranscript : undefined;
|
|
5726
|
-
const picked = fromChild
|
|
5870
|
+
const fromChild = impl.evidenceTranscript?.trim() ? harvestEvidenceLines(impl.evidenceTranscript) : undefined;
|
|
5871
|
+
const picked = fromChild?.trim() ? fromChild : harvestEvidenceLines(impl.summary);
|
|
5727
5872
|
return picked.trim() ? picked : undefined;
|
|
5728
5873
|
};
|
|
5729
5874
|
let offDiffEvidence: OffDiffEvidenceParse = { items: [], discardedMissingVerify: 0, discardedEmptyClaim: 0, missingResult: 0, orphanResult: 0, truncatedResult: 0, anchoredEvidence: 0 };
|
|
@@ -6194,6 +6339,7 @@ async function runSelfImplementInner(
|
|
|
6194
6339
|
};
|
|
6195
6340
|
let blockedDraftNoChanges = false;
|
|
6196
6341
|
let blockedDraftPrFailure: string | undefined;
|
|
6342
|
+
let blockedDraftPrFailureKind: 'blocked-draft-pr-guard' | undefined;
|
|
6197
6343
|
let repairLink: { originalPr: number; salvageRef: string } | undefined;
|
|
6198
6344
|
const reviewBlockedResult = (pr: { url: string; number: number } | undefined) => ({
|
|
6199
6345
|
stage: blockedDraftNoChanges && podReviewBlockedDraft ? 'no-changes' as const : podReviewBlockedDraft && !pr ? 'aborted' as const : 'review-blocked' as const,
|
|
@@ -6264,14 +6410,26 @@ async function runSelfImplementInner(
|
|
|
6264
6410
|
observe('blocked-draft-decision-signal-failed', { stage, error: decisionSignalObservation.error }, { level: 'warn' });
|
|
6265
6411
|
}
|
|
6266
6412
|
const abandonedClassification = classifyUnfinishedRun(stage, verdict, decomposition);
|
|
6267
|
-
const
|
|
6413
|
+
const stopClass = classifyTerminalHarnessFailure({
|
|
6414
|
+
stage,
|
|
6415
|
+
abandonedClassification: abandonedClassification.classification,
|
|
6416
|
+
...(verdict ? { supervisorVerdict: verdict } : {}),
|
|
6417
|
+
});
|
|
6418
|
+
const classificationRecord = blockedDraftClassificationRecord(abandonedClassification, { stage, class: stopClass });
|
|
6268
6419
|
observe('blocked-draft-classification', {
|
|
6269
6420
|
stage,
|
|
6270
6421
|
...classificationRecord,
|
|
6271
6422
|
}, { level: 'warn' });
|
|
6423
|
+
observe('draft-stop-classified', {
|
|
6424
|
+
stage,
|
|
6425
|
+
stop: classificationRecord.stop,
|
|
6426
|
+
classification: classificationRecord.classification,
|
|
6427
|
+
classificationBasis: classificationRecord.classificationBasis,
|
|
6428
|
+
}, { level: 'warn' });
|
|
6272
6429
|
const observation = {
|
|
6273
6430
|
branch: wt.branch,
|
|
6274
6431
|
stage,
|
|
6432
|
+
stopClass: classificationRecord.stop.class,
|
|
6275
6433
|
verdict: verdict ?? null,
|
|
6276
6434
|
reason: reason.slice(0, 240),
|
|
6277
6435
|
rounds: round,
|
|
@@ -6314,6 +6472,8 @@ async function runSelfImplementInner(
|
|
|
6314
6472
|
reason,
|
|
6315
6473
|
rounds: round,
|
|
6316
6474
|
undeliveredSupervisorInputs: undeliveredSupervisorInputSnapshot(),
|
|
6475
|
+
stopStage: stage,
|
|
6476
|
+
stopClass,
|
|
6317
6477
|
abandonedClassification,
|
|
6318
6478
|
...(decomposition ? { decomposition } : {}),
|
|
6319
6479
|
...(harvestedForPr() ? { evidence: harvestedForPr() as string } : {}),
|
|
@@ -6368,7 +6528,7 @@ async function runSelfImplementInner(
|
|
|
6368
6528
|
}
|
|
6369
6529
|
}
|
|
6370
6530
|
} catch (error) {
|
|
6371
|
-
pushError =
|
|
6531
|
+
pushError = new Error(safePreservationFailure(error));
|
|
6372
6532
|
}
|
|
6373
6533
|
}
|
|
6374
6534
|
observe('rework-blocked-draft-pr', {
|
|
@@ -6382,9 +6542,10 @@ async function runSelfImplementInner(
|
|
|
6382
6542
|
}, pushError ? { level: 'warn' } : undefined);
|
|
6383
6543
|
if (pushError) {
|
|
6384
6544
|
const failure = preservationErrorStep === 'worktree' ? '워크트리 부재로 보존 실패' : preservationErrorStep === 'commit' ? '로컬 브랜치 커밋 실패' : '원격 브랜치 보존 실패';
|
|
6385
|
-
|
|
6545
|
+
const failedStep = preservationErrorStep ?? 'push';
|
|
6546
|
+
progress('aborted', `환경 탓 중단 — ${failure}: ${wt.branch} (stage=${failedStep}; error=${pushError.message}; worktree: ${wt.path})`);
|
|
6386
6547
|
if (preservationErrorStep === 'worktree') return undefined;
|
|
6387
|
-
throw new Error(`환경 탓 중단 — ${failure}: ${wt.branch} (worktree: ${wt.path})`, { cause: pushError });
|
|
6548
|
+
throw new Error(`환경 탓 중단 — ${failure}: ${wt.branch} (stage=${failedStep}; error=${pushError.message}; worktree: ${wt.path})`, { cause: pushError });
|
|
6388
6549
|
}
|
|
6389
6550
|
if (worktreeOnly) {
|
|
6390
6551
|
progress(stage, artifactPath
|
|
@@ -6585,6 +6746,9 @@ async function runSelfImplementInner(
|
|
|
6585
6746
|
...(artifactPath ? { prBodyArtifactPath: artifactPath } : {}),
|
|
6586
6747
|
...(artifactError ? { prBodyArtifactError: artifactError } : {}),
|
|
6587
6748
|
}, { level: 'warn' });
|
|
6749
|
+
blockedDraftPrFailureKind = /self-implement PR guard 실패/.test(prError) && /(?:same-cell|goal-only)/.test(prError)
|
|
6750
|
+
? 'blocked-draft-pr-guard' : undefined;
|
|
6751
|
+
blockedDraftPrFailure = `draft PR 생성 실패: ${prError}`;
|
|
6588
6752
|
// STOP-RECORD: a failed blocked-draft PR open (e.g. same-branch rerun with a PR already open) left no stop reason.
|
|
6589
6753
|
let draftStopEntry: RunLedgerEntry | undefined;
|
|
6590
6754
|
try {
|
|
@@ -7798,7 +7962,66 @@ async function runSelfImplementInner(
|
|
|
7798
7962
|
// ② 첫 조각 커밋의 피처 시험·구현 전 실행 RED 기록과 구현 뒤 같은 명령 GREEN 기록이
|
|
7799
7963
|
// 없으면 수리 라운드 1회(완료 경계·기존 동작은 보존), 그래도 없으면 fail-closed.
|
|
7800
7964
|
// ③ 관측 원장에 tdd-red/tdd-green 이벤트를 남긴다.
|
|
7801
|
-
let
|
|
7965
|
+
let tddTranscript = [impl.evidenceTranscript, impl.summary].filter((part): part is string => Boolean(part?.trim())).join('\n');
|
|
7966
|
+
let tddJudgment = judgeTddEvidence(roundGoal, parseOffDiffEvidence(tddTranscript));
|
|
7967
|
+
const runHarnessBaseTddWhenRedMissing = (input: {
|
|
7968
|
+
readonly round: number;
|
|
7969
|
+
readonly goal: string;
|
|
7970
|
+
readonly transcript: string;
|
|
7971
|
+
readonly judgment: ReturnType<typeof judgeTddEvidence>;
|
|
7972
|
+
readonly implementation: typeof impl;
|
|
7973
|
+
}): { readonly transcript: string; readonly judgment: ReturnType<typeof judgeTddEvidence> } => {
|
|
7974
|
+
const skippedReason = !input.judgment.planned ? 'not-planned'
|
|
7975
|
+
: input.judgment.red.observed ? 'child-red-present'
|
|
7976
|
+
: !input.implementation.ok ? 'impl-not-ok'
|
|
7977
|
+
: input.implementation.terminalStatus?.reached !== true ? 'terminal-not-reached' : undefined;
|
|
7978
|
+
if (skippedReason) {
|
|
7979
|
+
observe('tdd-base-test', { round: input.round, status: 'skipped', reason: skippedReason,
|
|
7980
|
+
...(skippedReason === 'impl-not-ok' ? { implementationFailure: input.implementation.summary.slice(0, 240) } : {}) }, { level: 'warn' });
|
|
7981
|
+
return { transcript: input.transcript, judgment: input.judgment };
|
|
7982
|
+
}
|
|
7983
|
+
if (!wt.resolvedBase) {
|
|
7984
|
+
observe('tdd-base-test', { round: input.round, status: 'unmeasured', reason: 'base-commit-unavailable' }, { level: 'warn' });
|
|
7985
|
+
return { transcript: input.transcript, judgment: input.judgment };
|
|
7986
|
+
}
|
|
7987
|
+
const result = (s.runTddBaseHeadTest ?? runTddBaseHeadTest)({ cwd: wt.path, baseSha: wt.resolvedBase, goal: input.goal });
|
|
7988
|
+
observe('tdd-base-test', {
|
|
7989
|
+
round: input.round, status: result.accepted ? 'red-green' : 'unmeasured', reason: result.reason,
|
|
7990
|
+
baseSha: wt.resolvedBase, command: result.command, baseResult: result.baseResult ?? null, headResult: result.headResult ?? null,
|
|
7991
|
+
}, result.accepted ? {} : { level: 'warn' });
|
|
7992
|
+
if (!result.accepted || !result.transcript) return { transcript: input.transcript, judgment: input.judgment };
|
|
7993
|
+
const transcript = `${result.transcript}\n${input.transcript}`;
|
|
7994
|
+
return { transcript, judgment: judgeTddEvidence(input.goal, parseOffDiffEvidence(transcript)) };
|
|
7995
|
+
};
|
|
7996
|
+
const baseTdd = runHarnessBaseTddWhenRedMissing({ round, goal: roundGoal, transcript: tddTranscript, judgment: tddJudgment, implementation: impl });
|
|
7997
|
+
tddTranscript = baseTdd.transcript;
|
|
7998
|
+
tddJudgment = baseTdd.judgment;
|
|
7999
|
+
const receivedTddRed = receiveObservedTddRed({
|
|
8000
|
+
goal: roundGoal, judgment: tddJudgment, transcript: tddTranscript,
|
|
8001
|
+
resultParsed: impl.ok && impl.terminalStatus?.reached === true,
|
|
8002
|
+
});
|
|
8003
|
+
debug.log('self-implement.tdd-evidence', 'red-receive', {
|
|
8004
|
+
round, source: 'child-tool-output', accepted: receivedTddRed.accepted, reason: receivedTddRed.reason,
|
|
8005
|
+
observedTestCommand: receivedTddRed.command ?? null, observedTestResult: receivedTddRed.result ?? null,
|
|
8006
|
+
});
|
|
8007
|
+
if (receivedTddRed.accepted) {
|
|
8008
|
+
tddTranscript = receivedTddRed.transcript;
|
|
8009
|
+
tddJudgment = judgeTddEvidence(roundGoal, parseOffDiffEvidence(tddTranscript));
|
|
8010
|
+
}
|
|
8011
|
+
const receivedTddGreen = receiveObservedTddGreen({
|
|
8012
|
+
goal: roundGoal, judgment: tddJudgment, transcript: tddTranscript,
|
|
8013
|
+
resultParsed: impl.ok && impl.terminalStatus?.reached === true,
|
|
8014
|
+
});
|
|
8015
|
+
debug.log('self-implement.tdd-evidence', 'green-receive', {
|
|
8016
|
+
round, source: 'child-tool-output', accepted: receivedTddGreen.accepted, reason: receivedTddGreen.reason,
|
|
8017
|
+
taggedGreenPresent: tddJudgment.green.observed, observedTestCommand: receivedTddGreen.command ?? null,
|
|
8018
|
+
observedTestResult: receivedTddGreen.result ?? null,
|
|
8019
|
+
});
|
|
8020
|
+
if (receivedTddGreen.accepted) {
|
|
8021
|
+
tddTranscript = receivedTddGreen.transcript;
|
|
8022
|
+
tddJudgment = judgeTddEvidence(roundGoal, parseOffDiffEvidence(tddTranscript));
|
|
8023
|
+
}
|
|
8024
|
+
let tddEvidenceFailure: SelfImplementResult['tddEvidenceFailure'];
|
|
7802
8025
|
if (tddJudgment.needsRepair && impl.ok && round < effectiveMax && opts.goalFile
|
|
7803
8026
|
&& !hasCurrentProviderError() && !hasCurrentCredentialFailure()) {
|
|
7804
8027
|
let goalDocument: string | undefined;
|
|
@@ -7835,14 +8058,55 @@ async function runSelfImplementInner(
|
|
|
7835
8058
|
tddRetryAbort.abort();
|
|
7836
8059
|
tddRetryImpl = { ...beforeTddRetry, ok: false, summary: `[구현 재작업 · tdd-evidence-missing] 수리 라운드 실패 — ${safeErrorDescription(error)}` };
|
|
7837
8060
|
}
|
|
7838
|
-
|
|
8061
|
+
let tddRetryTranscript = [tddRetryImpl.evidenceTranscript, tddRetryImpl.summary]
|
|
8062
|
+
.filter((part): part is string => Boolean(part?.trim())).join('\n');
|
|
8063
|
+
let tddRetryJudgment = judgeTddEvidence(roundGoal, parseOffDiffEvidence(tddRetryTranscript));
|
|
8064
|
+
const retryBaseTdd = runHarnessBaseTddWhenRedMissing({
|
|
8065
|
+
round: tddRetryRound, goal: roundGoal, transcript: tddRetryTranscript, judgment: tddRetryJudgment, implementation: tddRetryImpl,
|
|
8066
|
+
});
|
|
8067
|
+
tddRetryTranscript = retryBaseTdd.transcript;
|
|
8068
|
+
tddRetryJudgment = retryBaseTdd.judgment;
|
|
8069
|
+
const retryTddRed = receiveObservedTddRed({
|
|
8070
|
+
goal: roundGoal, judgment: tddRetryJudgment, transcript: tddRetryTranscript,
|
|
8071
|
+
resultParsed: tddRetryImpl.ok && tddRetryImpl.terminalStatus?.reached === true,
|
|
8072
|
+
});
|
|
8073
|
+
debug.log('self-implement.tdd-evidence', 'red-receive', {
|
|
8074
|
+
round: tddRetryRound, source: 'child-tool-output', accepted: retryTddRed.accepted, reason: retryTddRed.reason,
|
|
8075
|
+
observedTestCommand: retryTddRed.command ?? null, observedTestResult: retryTddRed.result ?? null,
|
|
8076
|
+
});
|
|
8077
|
+
if (retryTddRed.accepted) {
|
|
8078
|
+
tddRetryTranscript = retryTddRed.transcript;
|
|
8079
|
+
tddRetryJudgment = judgeTddEvidence(roundGoal, parseOffDiffEvidence(tddRetryTranscript));
|
|
8080
|
+
}
|
|
8081
|
+
const retryTddGreen = receiveObservedTddGreen({
|
|
8082
|
+
goal: roundGoal, judgment: tddRetryJudgment, transcript: tddRetryTranscript,
|
|
8083
|
+
resultParsed: tddRetryImpl.ok && tddRetryImpl.terminalStatus?.reached === true,
|
|
8084
|
+
});
|
|
8085
|
+
debug.log('self-implement.tdd-evidence', 'green-receive', {
|
|
8086
|
+
round: tddRetryRound, source: 'child-tool-output', accepted: retryTddGreen.accepted, reason: retryTddGreen.reason,
|
|
8087
|
+
taggedGreenPresent: tddRetryJudgment.green.observed, observedTestCommand: retryTddGreen.command ?? null,
|
|
8088
|
+
observedTestResult: retryTddGreen.result ?? null,
|
|
8089
|
+
});
|
|
8090
|
+
if (retryTddGreen.accepted) {
|
|
8091
|
+
tddRetryTranscript = retryTddGreen.transcript;
|
|
8092
|
+
tddRetryJudgment = judgeTddEvidence(roundGoal, parseOffDiffEvidence(tddRetryTranscript));
|
|
8093
|
+
}
|
|
7839
8094
|
if (tddRetryImpl.ok && !tddRetryJudgment.needsRepair) {
|
|
7840
|
-
observe('implementation-tdd-rework', { status: 'succeeded', round: tddRetryRound, missing: [] });
|
|
8095
|
+
observe('implementation-tdd-rework', { status: 'succeeded', round: tddRetryRound, missing: [...tddRetryJudgment.missing] });
|
|
7841
8096
|
tddJudgment = tddRetryJudgment;
|
|
7842
8097
|
impl = tddRetryImpl;
|
|
7843
8098
|
round = tddRetryRound;
|
|
7844
8099
|
} else {
|
|
7845
8100
|
observe('implementation-tdd-rework', { status: 'exhausted', round: tddRetryRound, missing: [...tddRetryJudgment.missing] }, { level: 'warn' });
|
|
8101
|
+
// Only an initially successful implementation can enter this one retry. Goal-only exhaustion
|
|
8102
|
+
// has impl.ok=false before this point, so these two terminal reason codes cannot compete.
|
|
8103
|
+
if (tddRetryJudgment.missing.length > 0) {
|
|
8104
|
+
tddEvidenceFailure = {
|
|
8105
|
+
reason: 'tdd-evidence-missing',
|
|
8106
|
+
round: tddRetryRound,
|
|
8107
|
+
missing: [...tddRetryJudgment.missing],
|
|
8108
|
+
};
|
|
8109
|
+
}
|
|
7846
8110
|
impl = { ...beforeTddRetry, ok: false, summary: `[구현 재작업 · tdd-evidence-missing] RED/GREEN 기록 결손 — ${beforeTddRetry.summary}` };
|
|
7847
8111
|
}
|
|
7848
8112
|
}
|
|
@@ -7933,7 +8197,7 @@ async function runSelfImplementInner(
|
|
|
7933
8197
|
// 창 밖으로 밀려 파서에 도달조차 못 하던 자리다. 미주입 seam 은 종전대로 요약에서 판다(무회귀).
|
|
7934
8198
|
// ⛔ `??` 가 아니라 **빈 문자열도 폴백**이다 — 수확본이 비면 *"수확했다"* 가 아니라 *"없다"* 이고,
|
|
7935
8199
|
// `??` 로 두면 관측이 `harvested` 라 **거짓을 말한다**(리뷰 3R).
|
|
7936
|
-
const harvested = impl.evidenceTranscript?.trim() ? impl.evidenceTranscript : undefined;
|
|
8200
|
+
const harvested = impl.evidenceTranscript?.trim() ? harvestEvidenceLines(impl.evidenceTranscript) : undefined;
|
|
7937
8201
|
const childEvidenceSource = harvested ?? impl.summary;
|
|
7938
8202
|
let diffEvidence = '';
|
|
7939
8203
|
let roundObservationMeasurementBasis: ObservationMeasurementBasis | undefined;
|
|
@@ -8028,6 +8292,8 @@ async function runSelfImplementInner(
|
|
|
8028
8292
|
observe('implemented', { ok: impl.ok, round, ...(materializedPaths ? { materializedPaths: [...materializedPaths] } : {}),
|
|
8029
8293
|
...(effectiveDisposition ? { completionDisposition: effectiveDisposition } : {}) });
|
|
8030
8294
|
progress('implemented', impl.ok ? (round === 0 ? '구현 완료' : `rework ${round} 완료`) : impl.completionDisposition ? '변경 없이 완료 검증' : '구현 실패(worktree 보존)');
|
|
8295
|
+
// TDD exhaustion marks impl failed above; this return precedes finished-child commit and gate handling,
|
|
8296
|
+
// so those success-only terminal paths cannot swallow the structured report-deficit facts.
|
|
8031
8297
|
if (!impl.ok) {
|
|
8032
8298
|
finalizeSupervisorDeliveries('next-round-implement-not-ok');
|
|
8033
8299
|
const abort = buildImplementAbortRecord(impl.summary, impl.terminalStatus);
|
|
@@ -8051,7 +8317,13 @@ async function runSelfImplementInner(
|
|
|
8051
8317
|
salvageStatusExpected: false,
|
|
8052
8318
|
...(abort.terminalStatus ? { terminalStatus: abort.terminalStatus } : {}),
|
|
8053
8319
|
});
|
|
8054
|
-
|
|
8320
|
+
const implementationStop = impl.summary.split(/\r?\n/u, 1)[0]?.trim().slice(0, 240);
|
|
8321
|
+
return { ok: false, stage: 'aborted', node: 'implement', ...resolveRunOutcome({ termination: 'abandoned' }),
|
|
8322
|
+
...(tddEvidenceFailure ? { terminationReason: tddEvidenceFailure.reason, tddEvidenceFailure }
|
|
8323
|
+
: goalOnlyReworkExhausted ? { terminationReason: 'goal-only-rework-exhausted' as const }
|
|
8324
|
+
: { terminationReason: implementationStop || 'implementation-did-not-converge', terminationDetail: implementationStop || 'implementation did not converge' }),
|
|
8325
|
+
sessionId, worktreePath: wt.path, branch: wt.branch, quotaExhaustionAssessment: quotaExhaustionAssessmentForRun(), ...(impl.completionDisposition ? { completionDisposition: impl.completionDisposition } : {}), ...(pr ? { prUrl: pr.url, prNumber: pr.number } : {}), detail: blockedDraftPrFailure ?? impl.summary,
|
|
8326
|
+
...(blockedDraftPrFailureKind ? { detailKind: blockedDraftPrFailureKind } : {}) };
|
|
8055
8327
|
}
|
|
8056
8328
|
|
|
8057
8329
|
if (finishedChildCommitMissing) {
|