elanous 0.2.36 → 0.2.37
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/{uC-N0emedeNOFuaBQFv-I → 8kITumG9GAZ1LwT9POrAR}/_buildManifest.js +1 -1
- package/apps/pwa/out/_next/static/chunks/1041-5841aae848fb6403.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1087.3177e54f672dc526.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1105.efe1e13503ac7a33.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1224.2ceca6c180d5130b.js +62 -0
- package/apps/pwa/out/_next/static/chunks/{4286.b70c4520306817e8.js → 1262.a89bb27a5b2f844e.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/1417-1768233ac92f8a5d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1612.81bbc19af06af16c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3410.7f9af5ab77cbe65f.js → 1746.3563617ea64023a3.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/1766.728d42053070bb2d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1773.d38e945481e04125.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1974-c12f9600da3d3c26.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1ed5e8af.cf424815c7c0efad.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{9250-072df22eaadaa6b5.js → 2002-a43a3f380df873ec.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/2061.7232dc9dc058417f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/210.90b2cbd64926cf34.js +32 -0
- package/apps/pwa/out/_next/static/chunks/{3727.7949ccaacaa71242.js → 2283.edd9627b7bdfb546.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/2318-450e75d07605b8fe.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{4615.8525eb0add35eba6.js → 2375.bf364c85dbb6f085.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/244-a810d282a20f1783.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2479-fe7e188bd9402d14.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2514.03b60f266531a015.js +148 -0
- package/apps/pwa/out/_next/static/chunks/2526-a657538869888604.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2533-6f0341ff075809e9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2676.e7994c695ef0f30d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2734.3ffdf54254fb6f99.js +27 -0
- package/apps/pwa/out/_next/static/chunks/2770-23252bf3a37880b9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2969.66b8b545139d1544.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3128.a9210d08800ea6a8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{5711.957b095705c12560.js → 3199.6a1a9b0e6cd01dc6.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/3212.12179fd3eee8cef1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{2986.45d7652e4f13557e.js → 3578.4e9f9948a9a6f2f4.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/3760-2909ddb9279281cd.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3825.1921b5901bf33dce.js +36 -0
- package/apps/pwa/out/_next/static/chunks/3994-63eb884ed0547011.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4036.d54e55e1ebf5acdc.js +90 -0
- package/apps/pwa/out/_next/static/chunks/4115.5b438b99f0ae729f.js +226 -0
- package/apps/pwa/out/_next/static/chunks/4269.d8f9f34bb0fc6c43.js +287 -0
- package/apps/pwa/out/_next/static/chunks/431-4eed5bd2c5fe1719.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{7481.39f7a4654907bf6e.js → 4313.76f232c304a15bde.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/4324.c99ba3e83eb1b691.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4337e36d.f42c3b391b3d8f20.js +122 -0
- package/apps/pwa/out/_next/static/chunks/{6943.c6b24124853a47b2.js → 4383.18e5c54db3a22c88.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/4599-96eff3f2a9c242c1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3757-180308bc61021b05.js → 4725-34bed25720cc326b.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/4825-a9d9d4e9f5892309.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4833-7934c592c5569f00.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4879-68518f547a207aff.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4896.f9b70285363b27b2.js +24 -0
- package/apps/pwa/out/_next/static/chunks/{771.c3cdb6c1f7f47c02.js → 4931.95cc6dbd230774ca.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/4937-28d437999b77c9dd.js +1 -0
- package/apps/pwa/out/_next/static/chunks/49aa54ab.80f39398e0ed0f30.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{552.b7d061ad91eeac51.js → 5046.7fd5cbd859299448.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/5056.482687319b82638e.js +104 -0
- package/apps/pwa/out/_next/static/chunks/506.16b83d56a437a9ee.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5260-20593b0a25d0afbc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5404.cc4e9fec26fd5925.js +1 -0
- package/apps/pwa/out/_next/static/chunks/576.485e83e3f3dec19a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5832-a6be14e663f65726.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5854-56648a9fe646b9a0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{9f31e478.fefcbcd3c388ebc5.js → 58edce7d.f1b0c72acf13b123.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/5925.3b1f8b135710249b.js +93 -0
- package/apps/pwa/out/_next/static/chunks/{3136.30aaaa5fa03662a3.js → 5952.294fc574a8625184.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{da5ecc5c-b005ad8cac737d57.js → 5f6af561-f90b7a67f4f75d13.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/6168.17749aa3905fa073.js +74 -0
- package/apps/pwa/out/_next/static/chunks/{3324.a09703033abcbd2f.js → 6252.240578f10952e091.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/6416.5d50b8ec9986ca98.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8904.7d51af2dc033965c.js → 6680.6a693c28aae4cd19.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/{275-02ea4c2a33980422.js → 6745-5a63492933959dd9.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/6758.e7fbf532953c0783.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6795.0cb8a59730d99703.js +149 -0
- package/apps/pwa/out/_next/static/chunks/{528.38ce20ef8aa251ff.js → 6819.be5c9c4d67f22922.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/6877-84d47b7e85d0c41e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6971-fb5f9dc0a2cb5d2d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3a3d9966.cc4d4585a2708e7c.js → 709a918c.4fd3b4e2a32cb4e3.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/717.522b08685979b814.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7191.e41eb8f455c7f089.js +41 -0
- package/apps/pwa/out/_next/static/chunks/7233.8e744b7513119409.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7238-97c2226f80504bd8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7285.307963afcf7e7660.js +24 -0
- package/apps/pwa/out/_next/static/chunks/7299-fbe4b8c47a87614a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7314.df0d95930b0c3f50.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7406.c0589fdf2ee66629.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{4304.e9b2512834a9e23e.js → 7424.c0fe2a595d4232b5.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/752-90e3e7daad3d8e39.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7524-bcd3d9928c6842d9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7549.9a4de3bf231cfc52.js +1 -0
- package/apps/pwa/out/_next/static/chunks/757-4fbaf50942b8c424.js +1 -0
- package/apps/pwa/out/_next/static/chunks/765.76ae970ceb597b5b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{2683.c9773a0c589b031b.js → 7867.e8725745ddd1d940.js} +4 -4
- package/apps/pwa/out/_next/static/chunks/{6466-92e65a48490b68a9.js → 7893-e444a1b0809cd1e4.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/7956-33748cabb3a05562.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{ccae1c4b-0cf414f5eff1b10d.js → 7c5ed21f-f286708e57cf88f7.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/8030-aa66b478b53dbfca.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8051.c88c07dacbbc5f21.js +8 -0
- package/apps/pwa/out/_next/static/chunks/{3840-5825d56d46976a92.js → 8080-40d781e7704d3671.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/8149.80e402d4345e8dae.js +77 -0
- package/apps/pwa/out/_next/static/chunks/8205.50a5268f4e12ba0b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8231.a128feaa6f8b6079.js +1 -0
- package/apps/pwa/out/_next/static/chunks/85.4ddb1dda2ea3ffa2.js +286 -0
- package/apps/pwa/out/_next/static/chunks/8537.26517a09e8247beb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8595-e9b7081ab773a61f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8821-30cc65a61a60951f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8905.b3385aadb7b133e6.js +79 -0
- package/apps/pwa/out/_next/static/chunks/8983.246bb3a1ac38f50f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{873d6c12.09bd499f57171543.js → 8c58d09b.e8724a299658d86f.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/9072.18342f5941a1f3ec.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9123.9df04866b2d6e00f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{575.d929793a53f27c4b.js → 9151.a2c51e93f9156dae.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/9175-7d383df15a82e2be.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9181-bf89c07ce5b8f599.js +1 -0
- package/apps/pwa/out/_next/static/chunks/920-429bbc4504b45f71.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9207.625edf45d656151c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9378.d2575c6ffd6dd756.js +94 -0
- package/apps/pwa/out/_next/static/chunks/957.db5b5c4d32a35240.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{190.285c832bd9626f8c.js → 958.53a8dcf4729e6997.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/9647.8f0cd0898c592a29.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9665-26abb02665704c2c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9703.e7d81b6faef1050a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9882-7a9164b3c2dacbe5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9998.b74e033efadecd10.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/_not-found/page-c604fb980a634d88.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-ec2d8a4979ca9075.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-cb6add08ad3c7660.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/board/page-e2eaa321ec223fe6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/botlab/page-5b8a09c475b5f844.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/bots/page-91a77daedfbac191.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-f37fc5e974bda39b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/chat/page-91429a0b78415a94.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/consult/page-b95798b58263b910.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/control/page-763d53e175e17aa1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-d55023204055b12f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-89d2140d78abc810.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/editor/page-82dc069abfe27f55.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/exec/page-25d9eee7beb552c0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/field/page-770b4594c713ee97.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/healthz/route-c604fb980a634d88.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/inside/page-ba8e0dcae4f83985.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/intake/page-5c112c6d7c33656e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/layout-09788e1aa9a87db6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live/{page-e2de2e59111c9aad.js → page-3337c6a1328c2674.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/live-run/{page-f2b2e4bf6e981450.js → page-89acd5d68c0bc560.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/loops/page-5c13e2c76371d797.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/market/page-653a9f18642825c6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/{page-2af16e62c12f22df.js → page-fe986fe79b107546.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/morning/page-1e5da297557d2354.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/not-found-91ea9f5869a40943.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-7824e21b999962e2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-53d00a60cc75a922.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-88a1edbff62eaf1d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-4e931248b3f9574b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-443364c9e4a23b31.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/page-b9af2ac1c4737ce8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-25ab9c614c14129b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-dbcdcfac0a395a8a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-bf1de6645089ec58.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-c4201761a5e839c9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/page-c304f469ea5d70e4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-8e5a238cf5e50c9c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/layout-c604fb980a634d88.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/page-32b526069ee50b3c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/share/page-fb9e639c107f5f72.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-84220c776608cedc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-e475618cbfd5ca2b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/term/page-ac2c1e6169cfce57.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/today/page-fccd3020af2f8806.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/trace/page-9c0d7198ff7b5a91.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/vault/page-d54b1ec9b9c6430d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-8c4bef1791d732ca.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-46fcc0b0bbc6fbfe.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-c1c80e345fa9d6f5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-7dfda00afd172f5b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{053a429e.9a63436527cc751c.js → d9815f84.4918f682a45a8502.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{ceba0382.650712b56b85b582.js → de8446d3.31b73eb239fecd7b.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/f21fd540.63ac75328926ed30.js +1 -0
- package/apps/pwa/out/_next/static/chunks/framework-77fdcc873519a6cd.js +1 -0
- package/apps/pwa/out/_next/static/chunks/main-app-d0d620d2ce235713.js +1 -0
- package/apps/pwa/out/_next/static/chunks/main-e0ef79c79337ba90.js +1 -0
- package/apps/pwa/out/_next/static/chunks/pages/_app-84b1bc71e3f9ce6a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/pages/_error-2acb61f1363128cb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/webpack-462ff5727ceb7824.js +1 -0
- package/apps/pwa/out/_next/static/css/{b5d88eba78a3d7bf.css → be9019f696217521.css} +1 -1
- 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/graphs/drafts/recipes.yaml +27 -7
- package/graphs/work/draft-close.yaml +54 -0
- package/graphs/work/green-close.yaml +37 -0
- package/graphs/work/recipes.yaml +46 -1
- package/graphs/work/run-research.yaml +35 -0
- package/package.json +1 -1
- package/scripts/__fixtures__/authoring-paths-10x3.json +32 -0
- package/scripts/boundary-proof-mapping-audit.ts +88 -0
- package/scripts/codex-fallback-live-probe.ts +17 -15
- package/scripts/fleet/node-setup.sh +32 -2
- package/scripts/fleet/run-light-worker.sh +9 -0
- package/scripts/gate-0226-failure-census.ts +507 -0
- package/scripts/goals/authoring-metrics.ts +258 -0
- package/scripts/graph-units/draft-close-node.ts +222 -0
- package/scripts/hook-order-sweep.ts +7 -4
- package/scripts/land-global-checks.ts +69 -1
- package/scripts/measure-nl-routing-corpus.ts +207 -2
- package/scripts/release-loop/docs-node.ts +140 -0
- package/scripts/release-loop/gate-closure.ts +48 -0
- package/scripts/release-loop/gate-diff.ts +2 -1
- package/scripts/release-loop/known-issues-node.ts +6 -4
- package/scripts/release-loop/notes-repair.ts +216 -0
- package/scripts/release-loop/prepare-node.ts +61 -5
- package/scripts/release-loop/resume-release.ts +114 -4
- package/scripts/release-loop/resume-test-traffic.ts +10 -0
- package/scripts/release-loop/version-node.ts +81 -12
- package/scripts/train/green-leg.ts +176 -0
- package/scripts/tui-continue-real-evidence.ts +47 -0
- package/scripts/ux-sim.ts +1 -1
- package/src/acp/client.ts +31 -5
- package/src/acp/core-turn-bridge.ts +6 -0
- package/src/acp/stderr-summary.ts +49 -0
- package/src/agent/monad-agent-turn.ts +1 -0
- package/src/agent/terminal-surface.ts +217 -0
- package/src/agent-substrate/pr-reviewer.ts +11 -3
- package/src/agent-substrate/self-review-cli.ts +343 -31
- package/src/autopilot/lineage/sources.ts +1 -1
- package/src/autopilot/pr-manager.ts +64 -13
- package/src/boot/daemon-runtime.ts +35 -3
- package/src/boot/daemon-tools/pty-shell.ts +2 -1
- package/src/budget/run-usage-rollup.ts +12 -7
- package/src/budget/unified-usage.ts +20 -0
- package/src/capture/tui-self-report.ts +32 -3
- package/src/cli/autopilot-cli.ts +24 -9
- package/src/cli/decisions-cli.ts +7 -4
- package/src/cli/doctor-cli.ts +116 -7
- package/src/cli/logs-cli.ts +357 -2
- package/src/cli/memory-cli.ts +30 -1
- package/src/cli/msg-cli.ts +15 -11
- package/src/cli/pr-granularity.ts +5 -3
- package/src/cli/release-checklist-read-cli.ts +109 -4
- package/src/cli/release-cli.ts +43 -10
- package/src/cli/self-update.ts +23 -5
- package/src/cli/self-utterances-cli.ts +13 -16
- package/src/cli/tasks-cli.ts +309 -11
- package/src/cli/usage-cli.ts +12 -10
- package/src/context-bus/claude-memory-import.ts +99 -0
- package/src/context-bus/long-term-memory.ts +125 -0
- package/src/core-turn/run-goal-loop.ts +5 -2
- package/src/core-turn/types.ts +2 -0
- package/src/dashboard/chat/acp-chat.ts +9 -0
- package/src/dashboard/index.ts +97 -13
- package/src/dashboard/input/agent-wake.ts +43 -0
- package/src/dashboard/input/chat-main-acp-dispatch.ts +21 -1
- package/src/dashboard/replay-preview.ts +25 -0
- package/src/dashboard/slash-runtime/dashboard-handlers.ts +17 -8
- package/src/dashboard/synchronized-frame-output.ts +74 -0
- package/src/display/coordinator.ts +45 -12
- package/src/display/resize-listener.ts +41 -20
- package/src/display/synchronized-output-region.ts +60 -0
- package/src/domains/surface-events.ts +80 -1
- package/src/exec-requests/planner.ts +37 -2
- package/src/execution-loop/launch-gate.ts +4 -3
- package/src/git-fs/cli-stderr.ts +45 -0
- package/src/git-fs/gh-cli.ts +6 -3
- package/src/git-fs/git-cli.ts +11 -5
- package/src/graph-runner/graph-cli.ts +26 -2
- package/src/graph-runner/graph-run-api.ts +3 -2
- package/src/graph-runner/runner.ts +17 -5
- package/src/graph-wizard/generate.ts +29 -6
- package/src/harness/harness-cli-command.ts +179 -33
- package/src/harness/review-adapter.ts +26 -6
- package/src/index.ts +116 -13
- package/src/instance/test-write-guard-real-transport.fixture.ts +52 -0
- package/src/llm/route-decision.ts +13 -0
- package/src/llm-tool-name.ts +37 -0
- package/src/llm-tool-schema.ts +35 -0
- package/src/llm.ts +123 -11
- package/src/loops/checker.ts +100 -0
- package/src/loops/consensus.ts +26 -2
- package/src/loops/loop-cli.ts +9 -4
- package/src/loops/orchestrator/anomaly-cluster.ts +243 -0
- package/src/loops/orchestrator/tick.ts +49 -4
- package/src/model-tier/llm-tier-map.ts +12 -17
- package/src/msg/msg-store.ts +17 -0
- package/src/native-tool-catalog.ts +1 -1
- package/src/nexus/api/graph-wizard-api.ts +27 -2
- package/src/nexus/api/grid.ts +24 -4
- package/src/nexus/api/http-server.ts +1 -1
- package/src/nexus/api/ops-api.ts +14 -6
- package/src/nexus/state/state.ts +7 -1
- package/src/oauth/codex-account-store.ts +34 -1
- package/src/ops/loops-map.ts +46 -0
- package/src/ops/overview-cache.ts +22 -4
- package/src/ops/overview.ts +41 -5
- package/src/policy/llm-policy.ts +3 -1
- package/src/prompt-enhance/enhance.ts +4 -4
- package/src/pty-shell/availability.ts +7 -0
- package/src/pty-shell/herdr-agent-report.ts +40 -31
- package/src/pty-shell/herdr-prune-stale.ts +17 -0
- package/src/pty-shell/herdr-sequence-lease.ts +60 -0
- package/src/pty-shell/pty-control-ipc.ts +187 -18
- package/src/pty-shell/registry.ts +25 -15
- package/src/pty-shell/tui-run-state.ts +235 -1
- package/src/release-loop/checklist.ts +50 -5
- package/src/release-loop/feature-store.ts +9 -9
- package/src/release-loop/landed-but-yellow.ts +93 -12
- package/src/repl/index.ts +8 -0
- package/src/seat-loop/seat-report.ts +1 -0
- package/src/self-dev/ask-launch-flow.ts +86 -10
- package/src/self-dev/decompose-proposal.ts +29 -18
- package/src/self-dev/dev-pipeline.ts +29 -7
- package/src/self-dev/draft-sweep.ts +241 -16
- package/src/self-dev/draft-triage-rules.ts +19 -5
- package/src/self-dev/review-provider-fallback.ts +45 -7
- package/src/self-dev/shard-plan.ts +48 -0
- package/src/self-dev/shard-run.ts +50 -3
- package/src/self-implement/doctor-visit.ts +83 -0
- package/src/self-implement/gate-artifacts.ts +6 -2
- package/src/self-implement/gate-baseline.ts +64 -1
- package/src/self-implement/gate-cli.ts +93 -9
- package/src/self-implement/gate-remote.ts +28 -4
- package/src/self-implement/gate-scope.ts +13 -1
- package/src/self-implement/goal-author.ts +333 -18
- package/src/self-implement/goal-supervisor-fill.ts +75 -26
- package/src/self-implement/importer-test-index.ts +215 -2
- package/src/self-implement/knowhow-pack.ts +5 -5
- package/src/self-implement/orchestrator.ts +318 -25
- package/src/self-implement/review-round-brief.ts +300 -0
- package/src/self-implement/rework-policy.ts +14 -0
- package/src/self-implement/run-ledger.ts +170 -6
- package/src/self-implement/run-stop.ts +1 -1
- package/src/self-implement/running-runs.ts +17 -3
- package/src/self-implement/seams.ts +12 -6
- package/src/self-implement/stop-autoheal.ts +1 -0
- package/src/self-implement/test-seams.ts +13 -1
- package/src/self-implement/train-reach-grouping.ts +8 -2
- package/src/session/chat.ts +7 -1
- package/src/session/id-prefix.ts +60 -0
- package/src/session/index.ts +4 -0
- package/src/session-runtime/index.ts +9 -1
- package/src/skills/tools/pty.ts +5 -0
- package/src/status/metrics.ts +12 -1
- package/src/steward/rejudge-tick.ts +12 -5
- package/src/steward/resync-tick.ts +31 -4
- package/src/task-agent/actions.ts +199 -4
- package/src/task-agent/boundary-proof-mapping.ts +12 -0
- package/src/task-agent/boundary-proof-producer.ts +147 -0
- package/src/task-agent/completion-evidence.ts +2 -1
- package/src/task-agent/green-close-recipe.ts +239 -0
- package/src/task-agent/green-sweep.ts +64 -10
- package/src/task-agent/live-moves.ts +48 -3
- package/src/task-agent/map-host-adapter.ts +134 -0
- package/src/task-agent/map-reduce.ts +158 -0
- package/src/task-agent/map-run-ledger.ts +226 -0
- package/src/task-agent/parent-host.ts +21 -11
- package/src/task-agent/rejudge-on-head.ts +72 -5
- package/src/task-agent/repair-cycle.ts +41 -0
- package/src/task-agent/repair-next-move.ts +12 -2
- package/src/task-agent/review-prior-fix.ts +12 -2
- package/src/task-agent/shadow.ts +188 -5
- package/src/task-agent/task-hand.ts +158 -13
- package/src/task-agent/task-parent-role-llm.ts +9 -0
- package/src/task-agent/tier-split.ts +4 -3
- package/src/task-agent/work-order.ts +53 -2
- package/src/task-orchestrator/dispatcher.ts +46 -1
- package/src/task-orchestrator/generator-prompt.ts +6 -0
- package/src/task-orchestrator/surfaces/pod-artifact-return.ts +16 -6
- package/src/task-orchestrator/surfaces/pod-ledger-collect.ts +8 -6
- package/src/task-orchestrator/surfaces/pod-ledger-events.ts +97 -0
- package/src/task-orchestrator/surfaces/pod-pool.ts +50 -4
- package/src/task-orchestrator/surfaces/pod-warm-worker-provider.ts +15 -9
- package/src/task-orchestrator/surfaces/self-implement-pod.ts +217 -36
- package/src/task-orchestrator/surfaces/self-implement.ts +4 -0
- package/src/testing/linux-env.ts +177 -0
- package/src/tui/chat/goal-interim.ts +5 -1
- package/src/tui/entry.ts +258 -4
- package/src/tui/input/at-picker.ts +55 -0
- package/src/tui/slash/resume.ts +35 -12
- package/src/tui/slash/signals.ts +114 -0
- package/src/tui/slash/term-next.ts +71 -0
- package/src/tui-client/local-chat-turn.ts +4 -3
- package/src/user-config.ts +19 -1
- package/src/ux-sim/boot-daemon-tools-pty-shell-device.ts +136 -0
- package/src/ux-sim/classic-tui-seat-scenarios.ts +158 -4
- package/src/ux-sim/fake-gh.ts +174 -0
- package/src/ux-sim/fake-kubectl.ts +142 -0
- package/src/ux-sim/fake-llm.ts +6 -1
- package/src/ux-sim/next-tui-seat-scenarios.ts +124 -6
- package/src/ux-sim/resume-picker-device.ts +173 -0
- package/src/ux-sim/session-id-seed.ts +60 -0
- package/src/ux-sim/skills-tools-shell-device.ts +156 -0
- package/src/ux-sim/task-agent-parent-host-device.ts +264 -0
- package/src/ux-sim/task-agent-rejudge-on-head-device.ts +114 -0
- package/src/version/packed-revision.json +1 -1
- package/apps/pwa/out/_next/static/chunks/109.f196abf3484bb97f.js +0 -287
- package/apps/pwa/out/_next/static/chunks/1201.afbfc5b1c5e5cbe4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1517.9275b89572098ff3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1574.ad11f8db8396ab45.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1614.7a8c5c40aee0261f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1871-f1eb29d8dbb4065b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2193.0ea24c4a7aa1d004.js +0 -36
- package/apps/pwa/out/_next/static/chunks/223-ad865c1e80491d78.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2265-f0d90b6dbec05f81.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2267.eb4a62a209f09ec4.js +0 -149
- package/apps/pwa/out/_next/static/chunks/2341-86cd06c0cf01aa33.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2352.9abc42422bade876.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2397-c1653a816061842d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2500.cbc1257b774aae52.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2709.8e1889034255fc5f.js +0 -24
- package/apps/pwa/out/_next/static/chunks/2812ca6a.3b9f4a7a08885744.js +0 -1
- package/apps/pwa/out/_next/static/chunks/284.ac77c0db55bfd3a8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2941.3c3546f96bc6efa7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2976.b000698a3c6512dc.js +0 -24
- package/apps/pwa/out/_next/static/chunks/3031-85328a92fcce4da6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3148-98efd4869d660a87.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3155.2587a55196ecb394.js +0 -226
- package/apps/pwa/out/_next/static/chunks/3277.785db1cf09f98601.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3320-f9c77381f85a2c0a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3386-91049feabff9a94e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/339.80afb7e8839372af.js +0 -8
- package/apps/pwa/out/_next/static/chunks/3538.a445e50bb359d068.js +0 -32
- package/apps/pwa/out/_next/static/chunks/3540c645.2595a6af01a97672.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3621.581b2054cc14bee4.js +0 -286
- package/apps/pwa/out/_next/static/chunks/3676.8c28d16fd84ca843.js +0 -1
- package/apps/pwa/out/_next/static/chunks/375-b84540853523fe52.js +0 -1
- package/apps/pwa/out/_next/static/chunks/379.ee262e37586fe1ae.js +0 -74
- package/apps/pwa/out/_next/static/chunks/3969-81054381eaec4c4c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4067-bf9aa60547972937.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4116.a84a92a2492c080e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4176.e5729c93c29151eb.js +0 -104
- package/apps/pwa/out/_next/static/chunks/4227-e6c84686bc8946ca.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4327.b9e08a71c0009348.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4946.bd106eafd668f248.js +0 -148
- package/apps/pwa/out/_next/static/chunks/5085-bce4904931767ca6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5125.2eb9968b83767193.js +0 -93
- package/apps/pwa/out/_next/static/chunks/5128-75b733fd74a9a1eb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5489f3fe.4bb1458b09f6dead.js +0 -122
- package/apps/pwa/out/_next/static/chunks/5560-2a4648f6a30f16e7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5772-e29e14f8ff127122.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5887.5b2f5b44ce0f7e9a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5899-4c112a2d908cf97f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/599.c39c571b6733f2a2.js +0 -41
- package/apps/pwa/out/_next/static/chunks/6041.1b65efb796ebc2a5.js +0 -79
- package/apps/pwa/out/_next/static/chunks/6057-765c0a26028c86b2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6142.f289e0d039f453a6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6199-6bcd61d2a3910e04.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6236.cdf7293e710a9b2d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6387-237e079dac9a3ae6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6448-b6d272d074276e14.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6566.926a1d1b7c911442.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6580-cdc0e4a634ce4708.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6659-b242dc31b20b3f29.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6690.c5d9b321b1f79384.js +0 -1
- package/apps/pwa/out/_next/static/chunks/671-e9b6ad0c771c5514.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6862.bcbf89dd0f4496b3.js +0 -27
- package/apps/pwa/out/_next/static/chunks/6912-7b375ee48732c767.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6925.562d532110879886.js +0 -1
- package/apps/pwa/out/_next/static/chunks/727.7deb87749b0a343a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7545.b1aa42cd15503319.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7551-416d298c2dc4a9ab.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7784.1f0ac4a16d190cf4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7870-309de463786ac1fc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7888-e29b151bb6a3bb8b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7891.03f910124a737985.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7905-6ba78d9234608f79.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8037.e254fd797aa224d1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8207.f527886b7c464529.js +0 -1
- package/apps/pwa/out/_next/static/chunks/856.50bda61439d465e6.js +0 -62
- package/apps/pwa/out/_next/static/chunks/9031-92e9b487edb681ee.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9060.5410d9f6a95f6287.js +0 -90
- package/apps/pwa/out/_next/static/chunks/914.8abefd48d579547b.js +0 -94
- package/apps/pwa/out/_next/static/chunks/9187-c87a2207d4ac5d46.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9289.3e92f278821e18e0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9319.7816d3cc741cd34f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9327-e016bb9f1674d24f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9365.3de48bf75193ff9a.js +0 -77
- package/apps/pwa/out/_next/static/chunks/9383.5b5e9aa56b5fea97.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9387-cb929573ef436f39.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9489.c27becacc3283dec.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9514.131c52cc75fe6439.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9536.28962663c7734376.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9686-12286f5bbf15a5a0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9776.289d40cc5a4c342a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9789.60f723d18097ec30.js +0 -1
- package/apps/pwa/out/_next/static/chunks/989.f0c17523c5e61f65.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9972-1df393aa8d4f7d52.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/_not-found/page-96750aba7430959f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-4105e5bbbb043024.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-5d4fa75c2acb113e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/board/page-a79a9bdb3b2142bf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/botlab/page-f1c2047484992a35.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/bots/page-15ffc49b2d8c70e2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-67d53a3fc8734135.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/chat/page-e30c8dc696491336.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/consult/page-2136e04fa77696e2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/control/page-fecd2814790c2e12.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-280aa4a98fc5bb44.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-c14e96b65fb4b883.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/editor/page-187dac74825ed6bf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/exec/page-6bc7246ea8c92448.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/field/page-083747f1d4518f61.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/healthz/route-96750aba7430959f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/inside/page-15ca95a16ec96e1f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/intake/page-a8ac031b3810eb64.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/layout-8835f93110494cda.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/loops/page-5b92b7f75df20948.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/market/page-468eddf2b1a84ecb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/morning/page-18b40867a77a5793.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/not-found-fe934f2979f5a4a2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-3eec435537357170.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-ff88cbfd2aa99fc8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-a5b39fb780c70ab5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-ae465dde1d1b3933.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-e7abc34a48a6f71e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/page-cab9674fde9ead26.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-1da49bc8712284d0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-5e8aa657551ac912.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-fcc36f36c6dc1fe2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-d22db22f2a7296ca.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/page-d12dc7b1773878f0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-99debec9ea7fbec0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/layout-96750aba7430959f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/page-2a088a78bad7e924.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/share/page-2e8ed57db7e69993.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-4b3a16213c2ae8fe.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-f098747ddf38c98b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/term/page-c15958835534404b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/today/page-68279e3c843c1fd7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/trace/page-a34a74453367a39d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/vault/page-8767a7db2155a5bd.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-bd5976683460d7f2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-b7364835e7f2ef54.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-311af16b3ee0ffca.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-fb670757274ae990.js +0 -1
- package/apps/pwa/out/_next/static/chunks/f9a61e4d.1fc2c1dbdd49fe46.js +0 -1
- package/apps/pwa/out/_next/static/chunks/framework-6d497cbf1eef04c6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-app-012f5edec932f337.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-da5aeb809edc94a2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/pages/_app-5ee319af6f749dfe.js +0 -1
- package/apps/pwa/out/_next/static/chunks/pages/_error-4bc84653a718d6c6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/webpack-8a96cf6775c73d6e.js +0 -1
- /package/apps/pwa/out/_next/static/{uC-N0emedeNOFuaBQFv-I → 8kITumG9GAZ1LwT9POrAR}/_ssgManifest.js +0 -0
|
@@ -109,6 +109,7 @@ import { getUserConfig } from '../user-config.js';
|
|
|
109
109
|
import { appendRunLedgerEntry, loadRunLedger, parseRunShardIdentity, queryRunChain, type RunChainShardSibling, type RunLedgerEntry, type RunLedgerWriter, type RunOriginData, type RunShardIdentity } from './run-ledger.js';
|
|
110
110
|
import { classifyMergeHoldStop, forgetRunStop, isRunStopClass, readRunStopRecord, recordRunStop, runStopRecorded } from './run-stop.js';
|
|
111
111
|
import { autohealFromStop, parseAutohealMode, type AutohealActions, type AutohealResult } from './stop-autoheal.js';
|
|
112
|
+
import { recordParentNeedsOwnerVisit } from './doctor-visit.js';
|
|
112
113
|
import { emitSessionEvent, type SessionEventInput } from '../context-bus/session-events.js';
|
|
113
114
|
import { decideLineageSupersede, lineageSupersedeCloseComment, type LineageSupersedeOpenDraft } from './lineage-supersede.js';
|
|
114
115
|
import { basename, isAbsolute, join, relative, resolve, sep } from 'node:path';
|
|
@@ -217,7 +218,7 @@ function onePrChecklistLine(body: string): string {
|
|
|
217
218
|
}
|
|
218
219
|
import { renderRoundSummaryCard, type RoundSummaryEntry } from './round-summary-card.js';
|
|
219
220
|
import { computeFlexSignals } from './flex-signals.js';
|
|
220
|
-
import { resolveAdaptiveMaxReworkDecision, resolveEscalateTier, resolveEscalateTarget, buildReworkFeature, failIndicator, isRepeatedUnverifiedOnlyGateFailure, unverifiedRepeatKey, appendReworkHistory, truncateReworkHistoryByItem, applyReworkBudgetDecision, parseContractConflictRelaxation, parseReworkBudgetDecision, resolveReworkBudgetCarry, stripReworkBudgetHeaders, countConsecutiveMustFixIds, mergeReworkNotes, resolveReworkKind, type ReworkPlanRevision, type ReworkNotePart } from './rework-policy.js';
|
|
221
|
+
import { resolveAdaptiveMaxReworkDecision, resolveEscalateTier, resolveEscalateTarget, buildReworkFeature, failIndicator, isRepeatedUnverifiedOnlyGateFailure, unverifiedRepeatKey, appendReworkHistory, truncateReworkHistoryByItem, applyReworkBudgetDecision, parseContractConflictRelaxation, parseReworkBudgetDecision, resolveReworkBudgetCarry, stripReworkBudgetHeaders, countConsecutiveMustFixIds, mergeReworkNotes, resolveReworkKind, decideReviewRound, type ReviewRoundDecision, type ReworkPlanRevision, type ReworkNotePart } from './rework-policy.js';
|
|
221
222
|
import type { SupervisionReworkSource } from './supervision-vocabulary.js';
|
|
222
223
|
import { classifyReworkBudgetShadow } from './classify-shadow.js';
|
|
223
224
|
import { createReworkBudgetJudgment, REWORK_BUDGET_JUDGMENT, reworkBudgetEvidenceForObservation, reworkBudgetWorkflow } from './rework-budget-judgment.js';
|
|
@@ -301,6 +302,7 @@ import { hasModuleLoadFailure, type GateTestFailure } from './gate-baseline.js';
|
|
|
301
302
|
import { commitWorktree, defaultBranchRef, preservationHasChanges } from './seams.js';
|
|
302
303
|
import { detectUncommittedWork } from './uncommitted-work.js';
|
|
303
304
|
import { execFile as execFileCallback, spawnSync } from 'node:child_process';
|
|
305
|
+
import { SPAWN_SYNC_MAX_BUFFER } from '../util/spawn-sync-output.js';
|
|
304
306
|
import { promisify } from 'node:util';
|
|
305
307
|
import { blockedDraftDisposition, blockedDraftTargetFor, decideDraftOnStop, nextMoveFor, parseDraftOnStopMode, repairSalvageLinkComment, salvageBranchForRun, syntheticRepairBasePr, type DraftOnStopMode } from './blocked-draft-policy.js';
|
|
306
308
|
import { formatLlmMergeOutcome } from '../autopilot/build/llm-conflict-merge.js';
|
|
@@ -336,6 +338,7 @@ import {
|
|
|
336
338
|
export type { QuotaAccountAvailabilityEvidence };
|
|
337
339
|
import { decideReworkSalvage, type ReworkSalvageEvidence } from './rework-salvage.js';
|
|
338
340
|
import { type SupervisorGoalFillEvidence, fillUnverifiableGoalSlots, type SupervisorGoalFillResult } from './goal-supervisor-fill.js';
|
|
341
|
+
import { repairNextMove } from '../task-agent/repair-next-move.js';
|
|
339
342
|
import { escalateGoalDocumentClarifications, recordSupervisorPlanRevision, type GoalClarificationEscalationResult, type SupervisorPlanRevisionRelaxation, type SupervisorPlanRevisionResult } from './goal-clarification-escalation.js';
|
|
340
343
|
import { parseGoalDocumentClarifications, selfAnswerGoalDocumentClarifications, type GoalClarificationSelfResolver } from './goal-author-clarification.js';
|
|
341
344
|
import {
|
|
@@ -1053,6 +1056,7 @@ export type ImplementTerminalStatus = {
|
|
|
1053
1056
|
export interface SelfImplementSeams {
|
|
1054
1057
|
/** Run-observer ledger sink. Tests inject an in-memory sink to avoid touching user state. */
|
|
1055
1058
|
writeRunLedger?: RunLedgerWriter;
|
|
1059
|
+
checkUnwiredExports?: typeof findUnwiredExports;
|
|
1056
1060
|
/** STOP-AUTOHEAL — heal action seams (live mode only runs actions given here; missing = needs-owner). */
|
|
1057
1061
|
stopAutohealActions?: AutohealActions;
|
|
1058
1062
|
/** STOP-AUTOHEAL — one-attempt guard reader. Default: real run ledger, or none when `writeRunLedger` is injected. */
|
|
@@ -1229,6 +1233,8 @@ export interface SelfImplementSeams {
|
|
|
1229
1233
|
editPrComment?: (opts: { id: number; body: string; cwd: string }) => Promise<void>;
|
|
1230
1234
|
addPrLabel?: (opts: { number: number; label: string; cwd: string }) => Promise<void>;
|
|
1231
1235
|
readPrFiles?: (opts: { number: number; cwd: string; base?: string }) => Promise<string[]>;
|
|
1236
|
+
/** Read the authoritative GitHub head branch and creation timestamp before run attribution. */
|
|
1237
|
+
readPrAttribution?: (opts: { number: number; cwd: string }) => Promise<{ headRefName: string; createdAt: string }>;
|
|
1232
1238
|
/** PR의 base/head SHA와 관측된 PR base를 한 응답에서 고정한다. 미주입·실패·빈 SHA면 검사 대상을 증명할 수 없어 fail-closed로 PR을 열어 둔다. */
|
|
1233
1239
|
readPrCommitShas?: (opts: { number: number; cwd: string }) => Promise<{ baseCommit: string; headCommit: string; baseRefName?: string }>;
|
|
1234
1240
|
/** 고정한 base/head SHA 쌍의 unified diff. 가변 PR 조회를 다시 사용하면 ABA head 변경에 안전하지 않으므로 두 SHA는 필수 입력이다. */
|
|
@@ -3560,6 +3566,17 @@ async function autohealRecordedStop(stopEntry: RunLedgerEntry, s: SelfImplementS
|
|
|
3560
3566
|
...(loadLedger ? { loadLedger } : {}),
|
|
3561
3567
|
...(s?.writeRunLedger ? { writeLedger: s.writeRunLedger } : {}),
|
|
3562
3568
|
});
|
|
3569
|
+
if (result.action === 'needs-owner') {
|
|
3570
|
+
try {
|
|
3571
|
+
const stopKey = JSON.stringify([stopEntry.timestamp, record.site ?? '', record.class, record.cause, record.evidenceRef]);
|
|
3572
|
+
const visit = recordParentNeedsOwnerVisit({ runId: stopEntry.runId, stopKey, evidence: result.reason ?? record.cause });
|
|
3573
|
+
if (visit.status === 'missing-ledger') {
|
|
3574
|
+
debug.log('run-doctor', 'visit-failed', { runId: stopEntry.runId, from: 'parent', symptom: 'needs-owner', error: 'run-ledger-missing' });
|
|
3575
|
+
}
|
|
3576
|
+
} catch (error) {
|
|
3577
|
+
try { debug.log('run-doctor', 'visit-failed', { runId: stopEntry.runId, from: 'parent', symptom: 'needs-owner', error: error instanceof Error ? error.message : String(error) }); } catch { /* fail-soft */ }
|
|
3578
|
+
}
|
|
3579
|
+
}
|
|
3563
3580
|
s?.onStopAutoheal?.(result);
|
|
3564
3581
|
} catch (error) {
|
|
3565
3582
|
try { debug.log('self-implement.autoheal', 'dispatch-failed', { runId: stopEntry.runId, error: error instanceof Error ? error.message : String(error) }); } catch { /* fail-soft */ }
|
|
@@ -3813,6 +3830,7 @@ export async function runSelfImplement(opts: SelfImplementOptions): Promise<Self
|
|
|
3813
3830
|
reworkCapProceed = false;
|
|
3814
3831
|
const progressDelivery = { delivered: 0, unwired: 0, callbackFailed: 0 };
|
|
3815
3832
|
let capturedPrNumber: number | undefined;
|
|
3833
|
+
let prAttributionMismatch = false;
|
|
3816
3834
|
let openPrInvoked = false;
|
|
3817
3835
|
const defaultProviderName = opts.seams.currentProviderName?.() ?? currentProviderName();
|
|
3818
3836
|
const runProviderName = opts.childLlm?.provider ?? defaultProviderName;
|
|
@@ -3831,8 +3849,6 @@ export async function runSelfImplement(opts: SelfImplementOptions): Promise<Self
|
|
|
3831
3849
|
openPrInvoked = true;
|
|
3832
3850
|
const pr = await opts.seams.openPr(args);
|
|
3833
3851
|
if (pr.rebind) debug.log('self-implement.same-cell', 'rebind-result', pr.rebind);
|
|
3834
|
-
const number = recordedPrNumber(pr.number);
|
|
3835
|
-
if (number !== undefined) capturedPrNumber = number;
|
|
3836
3852
|
return pr;
|
|
3837
3853
|
},
|
|
3838
3854
|
onProgress: (event) => {
|
|
@@ -4266,6 +4282,9 @@ export async function runSelfImplement(opts: SelfImplementOptions): Promise<Self
|
|
|
4266
4282
|
hasCurrentCredentialFailure,
|
|
4267
4283
|
(commit: string | undefined) => { finishedImplementationAtMainSync = true; preSyncCommit = commit; },
|
|
4268
4284
|
preserveMergeHarvest,
|
|
4285
|
+
startedAtMs,
|
|
4286
|
+
(number) => { capturedPrNumber = number; },
|
|
4287
|
+
() => { prAttributionMismatch = true; },
|
|
4269
4288
|
);
|
|
4270
4289
|
terminalNode = result.node;
|
|
4271
4290
|
await mergeChildProviderErrors();
|
|
@@ -4310,6 +4329,22 @@ export async function runSelfImplement(opts: SelfImplementOptions): Promise<Self
|
|
|
4310
4329
|
// ⛔ 이 스코프엔 `progress` 헬퍼가 «없다»(3695행 · 다른 스코프) — seam 을 직접 쓴다.
|
|
4311
4330
|
progress: (stage, message) => { try { opts.seams.onProgress?.({ stage, message }); } catch { /* best-effort */ } },
|
|
4312
4331
|
});
|
|
4332
|
+
if (addressedResult.abandonedClassification?.classification === 'report-deficit') {
|
|
4333
|
+
const classification = addressedResult.abandonedClassification;
|
|
4334
|
+
const basis = classification.classificationBasis;
|
|
4335
|
+
const kind = basis === 'terminal-state-not-reviewed' || basis === 'review-result-observation-unmeasured'
|
|
4336
|
+
? 'unmeasured' as const : 'unverified' as const;
|
|
4337
|
+
const previousEvidence = JSON.stringify({ classification, stage: addressedResult.stage,
|
|
4338
|
+
review: addressedResult.review ?? null, gate: addressedResult.gate ?? null });
|
|
4339
|
+
const deficit = { evidenceId: `report:${runId}:${basis}`, kind, previousEvidence, round: roundCount };
|
|
4340
|
+
observeOuter('supervisor-report-deficit', { ...deficit, supervisorResult: 'unverifiable', classification });
|
|
4341
|
+
if (deficit.kind !== 'unverified') {
|
|
4342
|
+
const move = repairNextMove({ supervisorDeficit: deficit, supervisorResult: 'unverifiable' });
|
|
4343
|
+
if (move.kind === 'grounding') observeOuter('repair-next-move-input', {
|
|
4344
|
+
...move.supervisorDeficit, supervisorResult: 'unverifiable', action: move.action, classification,
|
|
4345
|
+
});
|
|
4346
|
+
}
|
|
4347
|
+
}
|
|
4313
4348
|
observeRunOutcome(observeOuter, {
|
|
4314
4349
|
node: addressedResult.node,
|
|
4315
4350
|
stage: addressedResult.stage,
|
|
@@ -4347,7 +4382,7 @@ export async function runSelfImplement(opts: SelfImplementOptions): Promise<Self
|
|
|
4347
4382
|
...terminalDetail(addressedResult.sessionId),
|
|
4348
4383
|
},
|
|
4349
4384
|
});
|
|
4350
|
-
observeRunRollup(observeOuter, addressedResult, roundClassifications, roundCount, capturedPrNumber, openPrInvoked);
|
|
4385
|
+
observeRunRollup(observeOuter, prAttributionMismatch ? { ...addressedResult, prNumber: undefined } : addressedResult, roundClassifications, roundCount, capturedPrNumber, openPrInvoked);
|
|
4351
4386
|
observeProgressDelivery();
|
|
4352
4387
|
return terminalResult;
|
|
4353
4388
|
} catch (e) {
|
|
@@ -4422,7 +4457,7 @@ export async function runSelfImplement(opts: SelfImplementOptions): Promise<Self
|
|
|
4422
4457
|
...terminalDetail(addressedResult.sessionId ?? terminalSessionId),
|
|
4423
4458
|
},
|
|
4424
4459
|
});
|
|
4425
|
-
observeRunRollup(observeOuter, addressedResult, roundClassifications, roundCount, capturedPrNumber, openPrInvoked);
|
|
4460
|
+
observeRunRollup(observeOuter, prAttributionMismatch ? { ...addressedResult, prNumber: undefined } : addressedResult, roundClassifications, roundCount, capturedPrNumber, openPrInvoked);
|
|
4426
4461
|
observeProgressDelivery();
|
|
4427
4462
|
return terminalResult;
|
|
4428
4463
|
}
|
|
@@ -4841,6 +4876,25 @@ function recordedPrNumber(value: unknown): number | undefined {
|
|
|
4841
4876
|
return typeof value === 'number' && Number.isSafeInteger(value) && value > 0 ? value : undefined;
|
|
4842
4877
|
}
|
|
4843
4878
|
|
|
4879
|
+
/** GitHub's second-precision createdAt cannot distinguish events within that second. */
|
|
4880
|
+
export function prCreatedInRunWindow(createdAt: string, startedAtMs: number): boolean {
|
|
4881
|
+
const createdAtMs = Date.parse(createdAt);
|
|
4882
|
+
if (!Number.isFinite(createdAtMs) || !Number.isFinite(startedAtMs)) return false;
|
|
4883
|
+
const secondPrecision = !/\.\d+(?:Z|[+-]\d\d:\d\d)$/.test(createdAt);
|
|
4884
|
+
return createdAtMs >= (secondPrecision ? Math.floor(startedAtMs / 1_000) * 1_000 : startedAtMs);
|
|
4885
|
+
}
|
|
4886
|
+
|
|
4887
|
+
function prAttributedToRun(
|
|
4888
|
+
attribution: { headRefName: string; createdAt: string }, branch: string, startedAtMs: number,
|
|
4889
|
+
boundCardReuse: { headRefName: string } | undefined,
|
|
4890
|
+
): boolean {
|
|
4891
|
+
if (attribution.headRefName !== (boundCardReuse?.headRefName ?? branch)) return false;
|
|
4892
|
+
// A verified same-card PR predates this run. The production seam exposes the
|
|
4893
|
+
// exception only after the manager verifies card, PR identity, and leased push.
|
|
4894
|
+
return prCreatedInRunWindow(attribution.createdAt, startedAtMs)
|
|
4895
|
+
|| (!!boundCardReuse && Number.isFinite(Date.parse(attribution.createdAt)));
|
|
4896
|
+
}
|
|
4897
|
+
|
|
4844
4898
|
function rollupPrNumber(
|
|
4845
4899
|
result: Pick<SelfImplementResult, 'prNumber'>,
|
|
4846
4900
|
capturedPrNumber: number | undefined,
|
|
@@ -4936,6 +4990,9 @@ async function runSelfImplementInner(
|
|
|
4936
4990
|
hasCurrentCredentialFailure: () => boolean = hasCredentialFailure,
|
|
4937
4991
|
onMainSyncStarted: (commit: string | undefined) => void = () => {},
|
|
4938
4992
|
preserveMergeHarvest: (reason: string, inputChars?: number) => Promise<boolean> = async () => false,
|
|
4993
|
+
startedAtMs = Date.now(),
|
|
4994
|
+
onPrAttributed: (number: number) => void = () => {},
|
|
4995
|
+
onPrAttributionMismatch: () => void = () => {},
|
|
4939
4996
|
): Promise<Omit<SelfImplementResult, 'runId'>> {
|
|
4940
4997
|
const s = opts.seams;
|
|
4941
4998
|
const pipelineStartedAtMs = Date.now();
|
|
@@ -5125,14 +5182,22 @@ async function runSelfImplementInner(
|
|
|
5125
5182
|
: opts.goalFile
|
|
5126
5183
|
? 'authored-goal-file'
|
|
5127
5184
|
: 'no-goal-file';
|
|
5128
|
-
let activeProvider:
|
|
5129
|
-
provider: 'unknown'; model: 'unknown'; auth: 'unknown';
|
|
5130
|
-
};
|
|
5185
|
+
let activeProvider: { provider: string; model: string; auth: string };
|
|
5131
5186
|
try {
|
|
5132
5187
|
activeProvider = (s.inspectActiveProvider ?? inspectActiveProvider)();
|
|
5133
5188
|
} catch {
|
|
5134
5189
|
activeProvider = { provider: 'unknown', model: 'unknown', auth: 'unknown' };
|
|
5135
5190
|
}
|
|
5191
|
+
const configuredProvider = activeProvider;
|
|
5192
|
+
if (opts.childLlm) {
|
|
5193
|
+
// The configured parent model can be sol while this run's implementation child is
|
|
5194
|
+
// explicitly luna. Attribute the run to the model actually passed to implement.
|
|
5195
|
+
activeProvider = {
|
|
5196
|
+
provider: opts.childLlm.provider,
|
|
5197
|
+
model: opts.childLlm.model,
|
|
5198
|
+
auth: configuredProvider.provider?.replace(/^auto:/, '') === opts.childLlm.provider ? configuredProvider.auth : 'unknown',
|
|
5199
|
+
};
|
|
5200
|
+
}
|
|
5136
5201
|
// ⭐ 관측 이벤트와 «같은 값»을 원장으로도 보낸다 — 로그에만 있으면 원장 질의가 못 센다(`F12`).
|
|
5137
5202
|
try { onActiveProvider(activeProvider); } catch { /* 보조 기록이 런을 죽이지 않는다 */ }
|
|
5138
5203
|
const boundedFeature = boundReadableText(opts.feature, RUN_START_FEATURE_MAX_CHARS);
|
|
@@ -5146,6 +5211,7 @@ async function runSelfImplementInner(
|
|
|
5146
5211
|
nestDepth: nestInfo().depth, goalSource, goalFile: opts.goalFile === undefined ? null : resolve(launchCwd, opts.goalFile),
|
|
5147
5212
|
targetRoot: gitRootOf(launchCwd) ?? launchCwd, ...originObservationFields(),
|
|
5148
5213
|
provider: activeProvider.provider ?? null, model: activeProvider.model ?? null, auth: activeProvider.auth ?? null,
|
|
5214
|
+
...(opts.childLlm ? { configuredProvider: configuredProvider.provider ?? null, configuredModel: configuredProvider.model ?? null, modelSelectionSource: 'child' } : {}),
|
|
5149
5215
|
...(opts.correlationId !== undefined ? { correlationId: opts.correlationId } : {}),
|
|
5150
5216
|
});
|
|
5151
5217
|
try {
|
|
@@ -6242,7 +6308,7 @@ async function runSelfImplementInner(
|
|
|
6242
6308
|
return preserveReviewBlockedBranch(`review-blocked 작업 커밋 실패: ${commitError}`, false, `; 미커밋 작업은 worktree 에 남음: ${wt.path}`);
|
|
6243
6309
|
}
|
|
6244
6310
|
}
|
|
6245
|
-
let pr:
|
|
6311
|
+
let pr: OpenPrOutcome;
|
|
6246
6312
|
try {
|
|
6247
6313
|
pr = await withStepTimeout(s.openPr({
|
|
6248
6314
|
title: prTitle(opts.feature, opts.goalFile),
|
|
@@ -6293,9 +6359,48 @@ async function runSelfImplementInner(
|
|
|
6293
6359
|
: `중단 산출물의 draft PR 생성 실패(worktree·branch 보존 · 판정 본문 보존 실패: ${artifactError ?? 'unknown error'})`);
|
|
6294
6360
|
return undefined;
|
|
6295
6361
|
}
|
|
6296
|
-
|
|
6297
|
-
|
|
6298
|
-
|
|
6362
|
+
let draftAttribution: { headRefName: string; createdAt: string } | undefined;
|
|
6363
|
+
let draftAttributionReadError: string | undefined;
|
|
6364
|
+
try {
|
|
6365
|
+
if (s.readPrAttribution) {
|
|
6366
|
+
draftAttribution = await s.readPrAttribution({ number: pr.number, cwd: wt.path });
|
|
6367
|
+
} else {
|
|
6368
|
+
const viewed = spawnSync('gh', ['pr', 'view', String(pr.number), '--json', 'headRefName,createdAt'], { cwd: wt.path, encoding: 'utf8', timeout: 30_000, maxBuffer: SPAWN_SYNC_MAX_BUFFER });
|
|
6369
|
+
if (viewed.status !== 0) throw new Error('gh pr view failed');
|
|
6370
|
+
const parsed = JSON.parse(viewed.stdout) as { headRefName?: unknown; createdAt?: unknown };
|
|
6371
|
+
if (typeof parsed.headRefName !== 'string' || typeof parsed.createdAt !== 'string') throw new Error('invalid PR attribution metadata');
|
|
6372
|
+
draftAttribution = { headRefName: parsed.headRefName, createdAt: parsed.createdAt };
|
|
6373
|
+
}
|
|
6374
|
+
} catch (error) { draftAttributionReadError = safeErrorDescription(error); }
|
|
6375
|
+
const expectedPrHead = pr.boundCardReuse?.headRefName ?? wt.branch;
|
|
6376
|
+
const draftAttributed = !draftAttributionReadError && !!draftAttribution
|
|
6377
|
+
&& prAttributedToRun(draftAttribution, wt.branch, startedAtMs, pr.boundCardReuse);
|
|
6378
|
+
if (draftAttributionReadError || !draftAttribution) {
|
|
6379
|
+
onPrAttributionMismatch();
|
|
6380
|
+
observe('pr-attribution-unverified', {
|
|
6381
|
+
expectedBranch: expectedPrHead,
|
|
6382
|
+
number: pr.number,
|
|
6383
|
+
url: pr.url,
|
|
6384
|
+
reason: draftAttributionReadError ?? 'metadata-absent',
|
|
6385
|
+
}, { level: 'warn' });
|
|
6386
|
+
} else if (draftAttributed) {
|
|
6387
|
+
onPrAttributed(pr.number);
|
|
6388
|
+
observe('pr-opened', { url: pr.url, number: pr.number, branch: expectedPrHead, draft: true });
|
|
6389
|
+
} else {
|
|
6390
|
+
onPrAttributionMismatch();
|
|
6391
|
+
observe('pr-attribution-mismatch', {
|
|
6392
|
+
expectedBranch: expectedPrHead,
|
|
6393
|
+
actualBranch: draftAttribution?.headRefName ?? null,
|
|
6394
|
+
createdAt: draftAttribution?.createdAt ?? null,
|
|
6395
|
+
number: pr.number,
|
|
6396
|
+
url: pr.url,
|
|
6397
|
+
}, { level: 'warn' });
|
|
6398
|
+
}
|
|
6399
|
+
if (!draftAttributed) {
|
|
6400
|
+
blockedDraftPrFailure = `draft PR 귀속 확인 실패; worktree·branch 보존: ${wt.branch} (${wt.path})`;
|
|
6401
|
+
progress('aborted', blockedDraftPrFailure);
|
|
6402
|
+
return undefined;
|
|
6403
|
+
}
|
|
6299
6404
|
observe('rework-blocked-draft-pr', {
|
|
6300
6405
|
...observation,
|
|
6301
6406
|
url: pr.url,
|
|
@@ -6513,6 +6618,19 @@ async function runSelfImplementInner(
|
|
|
6513
6618
|
return 'parked';
|
|
6514
6619
|
}
|
|
6515
6620
|
};
|
|
6621
|
+
let pendingReviewTriage: {
|
|
6622
|
+
round: number;
|
|
6623
|
+
verdict: 'fail';
|
|
6624
|
+
rawMustFix: string[];
|
|
6625
|
+
reflectedMustFix: string[];
|
|
6626
|
+
reflectionApplied: boolean;
|
|
6627
|
+
effectiveMax: number;
|
|
6628
|
+
} | undefined;
|
|
6629
|
+
const recordPendingReviewTriage = (decision: ReviewRoundDecision, nextNode: 'open-pr' | 'rework' | 'review-blocked', effectiveMax: number): void => {
|
|
6630
|
+
if (!pendingReviewTriage) return;
|
|
6631
|
+
observe('review-round-triage', { ...pendingReviewTriage, decision, nextNode, effectiveMax });
|
|
6632
|
+
pendingReviewTriage = undefined;
|
|
6633
|
+
};
|
|
6516
6634
|
for (;;) {
|
|
6517
6635
|
if (round > 0) {
|
|
6518
6636
|
const stoppedBeforeRework = honorParentSoftStop('rework');
|
|
@@ -6670,6 +6788,17 @@ async function runSelfImplementInner(
|
|
|
6670
6788
|
});
|
|
6671
6789
|
}
|
|
6672
6790
|
effectiveMax = budgetDecision.effectiveMax;
|
|
6791
|
+
if (pendingReviewTriage && budgetDecision.stop) {
|
|
6792
|
+
recordPendingReviewTriage('follow-up', budgetDecision.exit === 'proceed' ? 'open-pr' : 'review-blocked', effectiveMax);
|
|
6793
|
+
} else if (pendingReviewTriage && round <= effectiveMax) {
|
|
6794
|
+
const extendedDecision = decideReviewRound({
|
|
6795
|
+
verdict: pendingReviewTriage.verdict,
|
|
6796
|
+
mustFix: pendingReviewTriage.reflectedMustFix,
|
|
6797
|
+
round: pendingReviewTriage.round,
|
|
6798
|
+
effectiveMax,
|
|
6799
|
+
});
|
|
6800
|
+
if (extendedDecision === 'rework') recordPendingReviewTriage('rework', 'rework', effectiveMax);
|
|
6801
|
+
}
|
|
6673
6802
|
if (parsedDecision) {
|
|
6674
6803
|
if (diagnosisRefutations) {
|
|
6675
6804
|
const adjudications = parseSupervisorRefutationAdjudications(diagnosis, diagnosisRefutations.refutations);
|
|
@@ -6878,6 +7007,7 @@ async function runSelfImplementInner(
|
|
|
6878
7007
|
: 'UNCONVERGEABLE' as const;
|
|
6879
7008
|
const supervisorOutcome = { supervisorVerdict, ...(goalCauseObserved ? { goalCauseObserved: true as const } : {}) };
|
|
6880
7009
|
if (isReviewRework(reworkKind)) {
|
|
7010
|
+
recordPendingReviewTriage('follow-up', 'review-blocked', effectiveMax);
|
|
6881
7011
|
if (reflectRejectedAudit.length && review) review.shouldFix = [...review.shouldFix, ...reflectRejectedAudit];
|
|
6882
7012
|
const pr = await preserveBlockedArtifacts({ stage: 'review-blocked', verdict: parsedDecision.verdict, reason: parsedDecision.reason, gate, decomposition: terminalDecomposition, salvageStatusExpected: false });
|
|
6883
7013
|
await draftFollowUpAfterBlocked({ runId, prNumber: pr?.number, stage: 'review-blocked', unresolvedMustFix: review?.mustFix, decompositionPieces: terminalDecomposition?.pieces?.map((p) => p.feature), feature: opts.feature, cellId: opts.goalId, goalFile: opts.goalFile }, s.followUp);
|
|
@@ -6909,6 +7039,7 @@ async function runSelfImplementInner(
|
|
|
6909
7039
|
const terminal = resolveRunOutcome({ termination: 'supervisor-abandoned', verdict: 'UNCONVERGEABLE', applied: true });
|
|
6910
7040
|
const reason = `rework judged unconvergeable after ${round - 1} rework round(s)`;
|
|
6911
7041
|
if (isReviewRework(reworkKind)) {
|
|
7042
|
+
recordPendingReviewTriage('follow-up', 'review-blocked', effectiveMax);
|
|
6912
7043
|
if (reflectRejectedAudit.length && review) review.shouldFix = [...review.shouldFix, ...reflectRejectedAudit];
|
|
6913
7044
|
const pr = await preserveBlockedArtifacts({ stage: 'review-blocked', verdict: lastReworkVerdict, reason, gate, salvageStatusExpected: false });
|
|
6914
7045
|
await draftFollowUpAfterBlocked({ runId, prNumber: pr?.number, stage: 'review-blocked', unresolvedMustFix: review?.mustFix, feature: opts.feature, cellId: opts.goalId, goalFile: opts.goalFile }, s.followUp);
|
|
@@ -6952,6 +7083,7 @@ async function runSelfImplementInner(
|
|
|
6952
7083
|
);
|
|
6953
7084
|
podDecision(acceptance.decision.action === 'accept');
|
|
6954
7085
|
if (acceptance.decision.action === 'accept') {
|
|
7086
|
+
recordPendingReviewTriage('follow-up', 'open-pr', effectiveMax);
|
|
6955
7087
|
if (podReviewBlockedDraft) {
|
|
6956
7088
|
observe('merge-decision', {
|
|
6957
7089
|
autoMerge: autoMergeEnabled(opts), reviewed: review?.reviewed === true, verdict: review?.verdict ?? 'none',
|
|
@@ -6990,6 +7122,7 @@ async function runSelfImplementInner(
|
|
|
6990
7122
|
};
|
|
6991
7123
|
}
|
|
6992
7124
|
} else podDecision(false);
|
|
7125
|
+
recordPendingReviewTriage('follow-up', 'review-blocked', effectiveMax);
|
|
6993
7126
|
const pr = await preserveBlockedArtifacts({ stage: 'review-blocked', reason, gate, salvageStatusExpected: true });
|
|
6994
7127
|
const salvage = blockedDraftNoChanges || blockedDraftPrFailure ? 'parked' : await salvageHardCap(canSalvage, pr);
|
|
6995
7128
|
const disposition = { ...terminal, ...(salvage ? { salvage } : {}) };
|
|
@@ -7349,7 +7482,7 @@ async function runSelfImplementInner(
|
|
|
7349
7482
|
env.GIT_COMMITTER_NAME = childName;
|
|
7350
7483
|
env.GIT_COMMITTER_EMAIL = childEmail;
|
|
7351
7484
|
const git = (args: string[]) => spawnSync('git', ['--no-optional-locks', ...args], {
|
|
7352
|
-
cwd, env, encoding: 'utf8', timeout: 20_000,
|
|
7485
|
+
cwd, env, encoding: 'utf8', timeout: 20_000, maxBuffer: SPAWN_SYNC_MAX_BUFFER,
|
|
7353
7486
|
});
|
|
7354
7487
|
const staged = git(['add', '-A', '--', ...paths]);
|
|
7355
7488
|
if (staged.status !== 0) return { ok: false, out: staged.stderr || staged.stdout || staged.error?.message || 'git add failed' };
|
|
@@ -7858,10 +7991,11 @@ async function runSelfImplementInner(
|
|
|
7858
7991
|
// Gate has passed. Measure newly exported runtime values before review, without
|
|
7859
7992
|
// turning a static-analysis guess into a rework verdict during the first rollout.
|
|
7860
7993
|
const wiringFiles = [...new Set([...(runFacts.changedFiles ?? []), ...(gateRouteFiles ?? []), ...untrackedFiles])];
|
|
7994
|
+
let goalWiring: 'unwired' | undefined;
|
|
7861
7995
|
if (wiringFiles.some((file) => /^(?:src|scripts|apps\/pwa\/src)\/.*\.tsx?$/.test(file))) {
|
|
7862
7996
|
const wiringBase = wt.resolvedBase;
|
|
7863
7997
|
const wiring = wiringBase && /^[0-9a-f]{40}$/i.test(wiringBase)
|
|
7864
|
-
? findUnwiredExports({
|
|
7998
|
+
? (s.checkUnwiredExports ?? findUnwiredExports)({
|
|
7865
7999
|
cwd: wt.path,
|
|
7866
8000
|
changedFiles: wiringFiles,
|
|
7867
8001
|
// Timeouts and git errors throw → recorded as `failure`, never as "absent at base".
|
|
@@ -7871,6 +8005,15 @@ async function runSelfImplementInner(
|
|
|
7871
8005
|
),
|
|
7872
8006
|
})
|
|
7873
8007
|
: { checked: 0, unwired: [], failure: 'resolved-base-unavailable' };
|
|
8008
|
+
if (!wiring.failure && opts.goalFile && wiring.unwired.length > 0) {
|
|
8009
|
+
try {
|
|
8010
|
+
const declared = declaredPathsFromGoalDocumentText(readFileSync(opts.goalFile, 'utf8'));
|
|
8011
|
+
if (declared.readable && wiring.unwired.some(({ file }) =>
|
|
8012
|
+
declared.paths.some((target) => normalizeDeclaredScopePath(target) === normalizeDeclaredScopePath(file)))) {
|
|
8013
|
+
goalWiring = 'unwired';
|
|
8014
|
+
}
|
|
8015
|
+
} catch { /* unreadable goal text cannot establish a wiring deficit */ }
|
|
8016
|
+
}
|
|
7874
8017
|
const wiringObservation = {
|
|
7875
8018
|
round,
|
|
7876
8019
|
checked: wiring.checked,
|
|
@@ -7996,15 +8139,74 @@ async function runSelfImplementInner(
|
|
|
7996
8139
|
: `리뷰 미실행${review.failureReason !== undefined ? ` (${review.failureReason})` : ''}`);
|
|
7997
8140
|
if (opts.goalFile) {
|
|
7998
8141
|
let goalSlotFill: SupervisorGoalFillResult = 'unverifiable';
|
|
8142
|
+
let goalSlotDeficit: import('./goal-supervisor-fill.js').SupervisorGoalDeficit | undefined;
|
|
8143
|
+
let goalSlotAction: 'remeasure' | 'connect-goal' | undefined;
|
|
7999
8144
|
try {
|
|
8000
8145
|
goalSlotFill = await fillUnverifiableGoalSlots({
|
|
8001
8146
|
path: opts.goalFile, round, gate, review,
|
|
8147
|
+
...(goalWiring ? { wiring: goalWiring } : {}),
|
|
8002
8148
|
independentlyCheck: s.independentlyCheckGoalSlots ?? (async () => false),
|
|
8149
|
+
observeDeficit: (deficit) => { goalSlotDeficit = deficit; },
|
|
8003
8150
|
});
|
|
8004
8151
|
} catch {
|
|
8005
8152
|
goalSlotFill = 'rejected';
|
|
8006
8153
|
}
|
|
8007
|
-
|
|
8154
|
+
if (goalSlotFill === 'not-applicable') {
|
|
8155
|
+
observe('goal-slot-remeasure-result', { round, result: goalSlotFill, gatePassed: gate.passed,
|
|
8156
|
+
reason: 'test-step-scope-skipped', scopeReason: gate.scopeReason, testStepExecuted: gate.testStepExecuted });
|
|
8157
|
+
}
|
|
8158
|
+
if (goalSlotDeficit) {
|
|
8159
|
+
observe('supervisor-report-deficit', { runId, ...goalSlotDeficit, supervisorResult: goalSlotFill });
|
|
8160
|
+
if (goalSlotDeficit.kind !== 'unverified') {
|
|
8161
|
+
const move = repairNextMove({ supervisorDeficit: goalSlotDeficit,
|
|
8162
|
+
supervisorResult: goalSlotFill === 'rejected' ? 'rejected' : 'unverifiable' });
|
|
8163
|
+
if (move.kind === 'grounding') {
|
|
8164
|
+
goalSlotAction = move.action;
|
|
8165
|
+
observe('repair-next-move-input', { runId, ...move.supervisorDeficit,
|
|
8166
|
+
supervisorResult: goalSlotFill, action: move.action });
|
|
8167
|
+
}
|
|
8168
|
+
}
|
|
8169
|
+
}
|
|
8170
|
+
if (goalSlotFill === 'unverifiable' && gate.passed && goalSlotAction === 'remeasure' && goalSlotDeficit && runsGate) {
|
|
8171
|
+
observe('goal-slot-remeasure', { round, evidenceId: goalSlotDeficit.evidenceId, action: 'remeasure' });
|
|
8172
|
+
const measuredGate = await stepTimeout(s.gate(wt.path, { runId, round }), T.gate, 'gate');
|
|
8173
|
+
gate = measuredGate;
|
|
8174
|
+
let remeasureDeficit: import('./goal-supervisor-fill.js').SupervisorGoalDeficit | undefined;
|
|
8175
|
+
if (gate.passed) {
|
|
8176
|
+
goalSlotFill = await fillUnverifiableGoalSlots({ path: opts.goalFile, round, gate, review,
|
|
8177
|
+
independentlyCheck: s.independentlyCheckGoalSlots ?? (async () => false),
|
|
8178
|
+
observeDeficit: (deficit) => { remeasureDeficit = deficit; } });
|
|
8179
|
+
}
|
|
8180
|
+
observe('goal-slot-remeasure-result', { round, evidenceId: goalSlotDeficit.evidenceId, result: goalSlotFill,
|
|
8181
|
+
gatePassed: measuredGate.passed,
|
|
8182
|
+
...(remeasureDeficit ? { deficitKind: remeasureDeficit.kind,
|
|
8183
|
+
deficitEvidenceId: remeasureDeficit.evidenceId, gateLog: remeasureDeficit.gateLog,
|
|
8184
|
+
reason: remeasureDeficit.reason, inputSummary: remeasureDeficit.inputSummary, gateLogRef: remeasureDeficit.gateLogRef } : {}) });
|
|
8185
|
+
if (!gate.passed || goalSlotFill === 'unverifiable' || goalSlotFill === 'rejected') {
|
|
8186
|
+
finalizeSupervisorDeliveries('goal-slot-remeasure-gate-failed');
|
|
8187
|
+
const reason = `goal-slot remeasurement ${!gate.passed ? 'failed' : goalSlotFill === 'rejected' ? 'rejected' : 'unmeasured'} · evidence ${goalSlotDeficit.evidenceId}`;
|
|
8188
|
+
const pr = await preserveBlockedArtifacts({ stage: 'gate-failed', reason, gate, salvageStatusExpected: false });
|
|
8189
|
+
return { ok: false, stage: 'gate-failed', node: 'rework', ...resolveRunOutcome({ termination: 'abandoned' }),
|
|
8190
|
+
sessionId, worktreePath: wt.path, branch: wt.branch, gate,
|
|
8191
|
+
quotaExhaustionAssessment: quotaExhaustionAssessmentForRun(),
|
|
8192
|
+
...(pr ? { prUrl: pr.url, prNumber: pr.number } : {}), detail: reason };
|
|
8193
|
+
}
|
|
8194
|
+
}
|
|
8195
|
+
observe('goal-slot-fill', { round, result: goalSlotFill, gatePassed: gate.passed, reviewVerdict: review.verdict,
|
|
8196
|
+
...(goalSlotFill === 'unverifiable' && goalSlotDeficit ? { reason: goalSlotDeficit.reason, inputSummary: goalSlotDeficit.inputSummary, gateLogRef: goalSlotDeficit.gateLogRef } : {}),
|
|
8197
|
+
...(goalSlotFill === 'not-applicable' ? { reason: 'test-step-scope-skipped', scopeReason: gate.scopeReason,
|
|
8198
|
+
testStepExecuted: gate.testStepExecuted } : {}) });
|
|
8199
|
+
if (goalSlotAction === 'connect-goal' && goalSlotDeficit) {
|
|
8200
|
+
finalizeSupervisorDeliveries('goal-slot-connect-goal');
|
|
8201
|
+
const reason = `goal-slot wiring deficit · evidence ${goalSlotDeficit.evidenceId}`;
|
|
8202
|
+
const pr = await preserveBlockedArtifacts({ stage: 'review-blocked', reason, gate, salvageStatusExpected: false });
|
|
8203
|
+
await draftFollowUpAfterBlocked({ runId, prNumber: pr?.number, stage: 'review-blocked',
|
|
8204
|
+
unresolvedMustFix: [reason], feature: opts.feature, cellId: opts.goalId, goalFile: opts.goalFile }, s.followUp);
|
|
8205
|
+
return { ok: false, stage: 'review-blocked', node: 'rework', ...resolveRunOutcome({ termination: 'abandoned' }),
|
|
8206
|
+
sessionId, worktreePath: wt.path, branch: wt.branch, gate, review,
|
|
8207
|
+
quotaExhaustionAssessment: quotaExhaustionAssessmentForRun(),
|
|
8208
|
+
...(pr ? { prUrl: pr.url, prNumber: pr.number } : {}), detail: reason };
|
|
8209
|
+
}
|
|
8008
8210
|
}
|
|
8009
8211
|
const evidenceFacts: ReflectEvidenceFacts = evidenceCoverage
|
|
8010
8212
|
? { requiredEvidence: evidenceCoverage.required, coveredEvidence: evidenceCoverage.covered, missingEvidence: evidenceCoverage.uncovered }
|
|
@@ -8066,6 +8268,9 @@ async function runSelfImplementInner(
|
|
|
8066
8268
|
});
|
|
8067
8269
|
} catch { /* fail-safe: REFUTE never changes a finding without supervisor judgment */ }
|
|
8068
8270
|
}
|
|
8271
|
+
const rawReviewMustFix = [...review.mustFix];
|
|
8272
|
+
let reflectionApplied = false;
|
|
8273
|
+
let reviewTriageRecorded = false;
|
|
8069
8274
|
if (review.verdict === 'fail' && review.mustFix.length > 0) {
|
|
8070
8275
|
let effectiveMustFix = review.mustFix;
|
|
8071
8276
|
if (s.reflectMustFix) {
|
|
@@ -8074,6 +8279,7 @@ async function runSelfImplementInner(
|
|
|
8074
8279
|
try {
|
|
8075
8280
|
const recurrenceHistory = recurrenceHistoryFor(review.mustFix);
|
|
8076
8281
|
const reflected = await withStepTimeout(s.reflectMustFix({ mustFix: review.mustFix, goal: roundGoal, cwd: wt.path, evidenceFacts, gateFacts: gate.reflectGateFacts, citedPathFacts, ...(recurrenceHistory.length ? { recurrenceHistory } : {}), runId, round }), T.review, 'review');
|
|
8282
|
+
reflectionApplied = true;
|
|
8077
8283
|
const rejectedItems = new Set(reflected.rejected.filter((r) => r.reason && r.reason.trim().length > 0).map((r) => r.item));
|
|
8078
8284
|
const rejected = reflected.rejected.filter((r) => rejectedItems.has(r.item));
|
|
8079
8285
|
effectiveMustFix = review.mustFix.filter((m) => !rejectedItems.has(m));
|
|
@@ -8110,6 +8316,17 @@ async function runSelfImplementInner(
|
|
|
8110
8316
|
}
|
|
8111
8317
|
}
|
|
8112
8318
|
if (effectiveMustFix.length === 0) {
|
|
8319
|
+
observe('review-round-triage', {
|
|
8320
|
+
round,
|
|
8321
|
+
verdict: 'fail',
|
|
8322
|
+
rawMustFix: rawReviewMustFix,
|
|
8323
|
+
reflectedMustFix: effectiveMustFix,
|
|
8324
|
+
reflectionApplied,
|
|
8325
|
+
decision: 'pass',
|
|
8326
|
+
nextNode: 'open-pr',
|
|
8327
|
+
effectiveMax,
|
|
8328
|
+
});
|
|
8329
|
+
reviewTriageRecorded = true;
|
|
8113
8330
|
finalizeSupervisorDeliveries('review-reflect-converged');
|
|
8114
8331
|
completionStatus = 'review-reflect-converged';
|
|
8115
8332
|
review.mustFix = [];
|
|
@@ -8119,6 +8336,21 @@ async function runSelfImplementInner(
|
|
|
8119
8336
|
progress('reviewed', '리뷰: fail → warn (반사가 must-fix 를 «전부» 기각 — 사유는 위 줄과 PR 코멘트에)');
|
|
8120
8337
|
break;
|
|
8121
8338
|
}
|
|
8339
|
+
const reviewDecision = decideReviewRound({ verdict: review.verdict, mustFix: effectiveMustFix, round, effectiveMax });
|
|
8340
|
+
const reviewTriage = {
|
|
8341
|
+
round,
|
|
8342
|
+
verdict: review.verdict,
|
|
8343
|
+
rawMustFix: rawReviewMustFix,
|
|
8344
|
+
reflectedMustFix: [...effectiveMustFix],
|
|
8345
|
+
reflectionApplied,
|
|
8346
|
+
effectiveMax,
|
|
8347
|
+
};
|
|
8348
|
+
if (reviewDecision === 'follow-up') {
|
|
8349
|
+
pendingReviewTriage = { ...reviewTriage, verdict: 'fail' };
|
|
8350
|
+
} else {
|
|
8351
|
+
observe('review-round-triage', { ...reviewTriage, decision: reviewDecision, nextNode: 'rework' });
|
|
8352
|
+
reviewTriageRecorded = true;
|
|
8353
|
+
}
|
|
8122
8354
|
appliedLastRound = [...effectiveMustFix];
|
|
8123
8355
|
roundSummaryEntries.push({ round, kind: 'review', tried: impl.summary.replace(/\s+/g, ' ').trim().slice(0, 200),
|
|
8124
8356
|
failedIds: effectiveMustFix.map(stableMustFixId), filesTouched: runFacts.changedFiles,
|
|
@@ -8171,6 +8403,18 @@ async function runSelfImplementInner(
|
|
|
8171
8403
|
round++;
|
|
8172
8404
|
continue;
|
|
8173
8405
|
}
|
|
8406
|
+
if (!reviewTriageRecorded && !pendingReviewTriage) {
|
|
8407
|
+
observe('review-round-triage', {
|
|
8408
|
+
round,
|
|
8409
|
+
verdict: review.verdict,
|
|
8410
|
+
rawMustFix: rawReviewMustFix,
|
|
8411
|
+
reflectedMustFix: rawReviewMustFix,
|
|
8412
|
+
reflectionApplied: false,
|
|
8413
|
+
decision: 'pass',
|
|
8414
|
+
nextNode: 'open-pr',
|
|
8415
|
+
effectiveMax,
|
|
8416
|
+
});
|
|
8417
|
+
}
|
|
8174
8418
|
}
|
|
8175
8419
|
// EVIDENCE-WIRING-EXEMPT — a commandless [preservation] is covered once the changed-file gate passed.
|
|
8176
8420
|
if (gate.passed && evidenceCoverage?.uncoveredCount) {
|
|
@@ -8517,7 +8761,7 @@ async function runSelfImplementInner(
|
|
|
8517
8761
|
s.persistPrBodyArtifact,
|
|
8518
8762
|
'self-implement-pr',
|
|
8519
8763
|
);
|
|
8520
|
-
let pr:
|
|
8764
|
+
let pr: OpenPrOutcome;
|
|
8521
8765
|
try {
|
|
8522
8766
|
pr = await withStepTimeout(s.openPr({
|
|
8523
8767
|
title: prTitle(opts.feature, opts.goalFile),
|
|
@@ -8548,15 +8792,64 @@ async function runSelfImplementInner(
|
|
|
8548
8792
|
const current = runGitCommand(wt.path, ['rev-parse', '--verify', 'HEAD'], { encoding: 'utf8', timeout: 10_000 });
|
|
8549
8793
|
if (current.status !== 0 || current.stdout.trim() !== reviewedHeadCommit) delete reviewedHeadResult.reviewedHeadCommit;
|
|
8550
8794
|
}
|
|
8551
|
-
|
|
8552
|
-
|
|
8553
|
-
|
|
8554
|
-
|
|
8555
|
-
|
|
8556
|
-
|
|
8557
|
-
|
|
8558
|
-
|
|
8559
|
-
|
|
8795
|
+
let prAttribution: { headRefName: string; createdAt: string } | undefined;
|
|
8796
|
+
let prAttributionReadError: string | undefined;
|
|
8797
|
+
try {
|
|
8798
|
+
if (s.readPrAttribution) {
|
|
8799
|
+
prAttribution = await s.readPrAttribution({ number: pr.number, cwd: wt.path });
|
|
8800
|
+
} else {
|
|
8801
|
+
const viewed = spawnSync('gh', ['pr', 'view', String(pr.number), '--json', 'headRefName,createdAt'], {
|
|
8802
|
+
cwd: wt.path, encoding: 'utf8', timeout: 30_000, maxBuffer: SPAWN_SYNC_MAX_BUFFER,
|
|
8803
|
+
});
|
|
8804
|
+
if (viewed.status !== 0) throw new Error(viewed.stderr || viewed.stdout || 'gh pr view failed');
|
|
8805
|
+
const parsed = JSON.parse(viewed.stdout) as { headRefName?: unknown; createdAt?: unknown };
|
|
8806
|
+
if (typeof parsed.headRefName !== 'string' || typeof parsed.createdAt !== 'string') throw new Error('invalid PR attribution metadata');
|
|
8807
|
+
prAttribution = { headRefName: parsed.headRefName, createdAt: parsed.createdAt };
|
|
8808
|
+
}
|
|
8809
|
+
} catch (error) {
|
|
8810
|
+
prAttributionReadError = safeErrorDescription(error);
|
|
8811
|
+
}
|
|
8812
|
+
const expectedPrHead = pr.boundCardReuse?.headRefName ?? wt.branch;
|
|
8813
|
+
const prAttributed = !prAttributionReadError && !!prAttribution
|
|
8814
|
+
&& prAttributedToRun(prAttribution, wt.branch, startedAtMs, pr.boundCardReuse);
|
|
8815
|
+
if (prAttributionReadError || !prAttribution) {
|
|
8816
|
+
onPrAttributionMismatch();
|
|
8817
|
+
observe('pr-attribution-unverified', {
|
|
8818
|
+
expectedBranch: expectedPrHead,
|
|
8819
|
+
number: pr.number,
|
|
8820
|
+
url: pr.url,
|
|
8821
|
+
reason: prAttributionReadError ?? 'metadata-absent',
|
|
8822
|
+
}, { level: 'warn' });
|
|
8823
|
+
} else if (!prAttributed) {
|
|
8824
|
+
onPrAttributionMismatch();
|
|
8825
|
+
observe('pr-attribution-mismatch', {
|
|
8826
|
+
expectedBranch: expectedPrHead,
|
|
8827
|
+
actualBranch: prAttribution.headRefName,
|
|
8828
|
+
createdAt: prAttribution.createdAt,
|
|
8829
|
+
number: pr.number,
|
|
8830
|
+
url: pr.url,
|
|
8831
|
+
}, { level: 'warn' });
|
|
8832
|
+
} else {
|
|
8833
|
+
const attributedNumber = recordedPrNumber(pr.number);
|
|
8834
|
+
if (attributedNumber !== undefined) onPrAttributed(attributedNumber);
|
|
8835
|
+
observe('pr-opened', {
|
|
8836
|
+
url: pr.url,
|
|
8837
|
+
number: pr.number,
|
|
8838
|
+
branch: expectedPrHead,
|
|
8839
|
+
headCommit: runGitCommand(wt.path, ['rev-parse', '--verify', 'HEAD'], { encoding: 'utf8', timeout: 10_000 }).stdout.trim(),
|
|
8840
|
+
autoMerge: canAuto,
|
|
8841
|
+
autoReview: !!labels,
|
|
8842
|
+
...(preparedPrBody.truncated ? { prBodyTruncated: true, prBodyOriginalChars: preparedPrBody.originalChars } : {}),
|
|
8843
|
+
});
|
|
8844
|
+
}
|
|
8845
|
+
if (!prAttributed) {
|
|
8846
|
+
progress('aborted', `PR 귀속 확인 실패 — 외부 PR 후속 처리 중단 (${wt.branch}; worktree: ${wt.path})`);
|
|
8847
|
+
return {
|
|
8848
|
+
ok: false, stage: 'aborted', node: 'open-pr', ...resolveRunOutcome({ termination: 'abandoned' }),
|
|
8849
|
+
...decisionSignalResult, ...scopeExpansionResult, sessionId, worktreePath: wt.path, branch: wt.branch,
|
|
8850
|
+
gate, ...(review ? { review } : {}), detail: 'PR attribution could not be verified; worktree and branch preserved',
|
|
8851
|
+
};
|
|
8852
|
+
}
|
|
8560
8853
|
await flushPrComments(pr);
|
|
8561
8854
|
|
|
8562
8855
|
// Inspect the opened PR itself: the goal text and the pre-sync worktree can differ from its final file list.
|