elanous 0.2.42 → 0.2.43
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 → Om5xS9jpjSXJCeTNGYEi4}/_buildManifest.js +1 -1
- package/apps/pwa/out/_next/static/chunks/{7a98bc80.fa935989e829f9c2.js → 0966f8a1.745fcd44f64a87ea.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{73d2eb0e.4966ad55293c801a.js → 0ad6802e.ae7afb63fdcb4491.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/114.2b90424d1a3ce84c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1151-5c2bb8f002ca2dd6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1200.6a37c202f9f17e9a.js +226 -0
- package/apps/pwa/out/_next/static/chunks/1261-a616d5728e02e624.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1313-19f737e0222c4444.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1357.3bbef3976c37f94a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1362-20adddfaf662b0fa.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3507.97e1977bc4d5fb0a.js → 1406.a1dc2ab6f8449374.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/1737-9491fc6ab29b9ec6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1803-4f91a8e7dcaf042c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1961.a81b12872c3e93a9.js +23 -0
- package/apps/pwa/out/_next/static/chunks/{53c73f84.373b6160adfa89a4.js → 1970cf59.2d4d8ce5d6c81853.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/1971-8890f3962ba7ee0a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{9211-330b6736a63d4cb3.js → 2073-ba274e00e4f9efb4.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{7411.9b4b8b747dc7b802.js → 2144.25b292396712196d.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/2268-53861f339e0b65a2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2312.0c8b61e22d3136d7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{6632.0eac1c554f8f2ef3.js → 2573.387a707f6f9d720c.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/273.f156eee28f11af77.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2873.d2140e5a82546401.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{1262.e804feb8fd1acb8c.js → 3072.01338851ca21a6f7.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/3091.a5a4143dea33d197.js +90 -0
- package/apps/pwa/out/_next/static/chunks/{2456.b6de0e1c05f28843.js → 3095.dc44586a5f83b86d.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{3207.a756c95e9ec8c3c8.js → 3113.d7472bbc27d580c7.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/3228-9650b6447b6fa288.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3402.44b565b314f2263c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3557ac4a.c8931684475018ad.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8505.fd803c6c33b54cc3.js → 360.ae9f9f4c33c395e8.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/3638.80412ea63aae8f3f.js +286 -0
- package/apps/pwa/out/_next/static/chunks/{b450776b.3db34d8d965f82d3.js → 363bfab3.9623b9f89363541f.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/3694.e0099884345f0198.js +64 -0
- package/apps/pwa/out/_next/static/chunks/3744.54f87db52acfd1ab.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3903.3ef4656c67572764.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3935.16701e33f8982dc9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3955.6922286237f2ac2b.js +24 -0
- package/apps/pwa/out/_next/static/chunks/3969.272ee7f9fd6c62e5.js +34 -0
- package/apps/pwa/out/_next/static/chunks/{8138.6c10b2a356d52fca.js → 4199.ce86b281fd0a60b7.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/4311-6dd3144002cc0c2d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4426-2b230fad00c88930.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{2690.0521c738b7749931.js → 4445.7990c76b3751a918.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/4447-14c5161fa59166c7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4856-b0b8075bba8c53f4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4870-de370d65e73c0bb5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4885-2c989165c4b29fad.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{1945.7b54990d578c119b.js → 4894.fec2ca9e99caefa2.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/5093.8f04b7f8cb899a95.js +94 -0
- package/apps/pwa/out/_next/static/chunks/5122-2bb177cebf89e19a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5154.5f56dc3902e3d275.js +36 -0
- package/apps/pwa/out/_next/static/chunks/529.64ff7257180b2ac9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5394.5dabeb0c62293a28.js +93 -0
- package/apps/pwa/out/_next/static/chunks/5461.08bf2404ff38ec85.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5474-22e08a85583209b2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{9427.96aa912ddb5801e0.js → 5564.9e72532188f57586.js} +16 -16
- package/apps/pwa/out/_next/static/chunks/5567-265df39ed8fe9dcb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5570-a94ae19811cb2046.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5574-b47c9ef2dceff1fd.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{4043.6b91203436c9c86b.js → 5628.6ddb2d5ffba4ff4c.js} +4 -4
- package/apps/pwa/out/_next/static/chunks/{1319.b9b815ae0f181e06.js → 5730.43d7ccc09988e646.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{3482.a9ae9d2ad6a5bd97.js → 5789.2da35c258292e1e5.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/5824.da9527b15a3221e5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5866.366966af47fdde5d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{1487.2f67b79444062da6.js → 5930.8b4df3b46c32b05a.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/5963-c4d8469c52a0828b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6001.ec4049ceb3c43418.js +27 -0
- package/apps/pwa/out/_next/static/chunks/6120-471f03db1e299c0c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6175-41479e643aca1878.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6291.a2de4f9787637075.js +104 -0
- package/apps/pwa/out/_next/static/chunks/6400-6699907c3537436a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6428.1f4327d6ae5fdf9a.js +287 -0
- package/apps/pwa/out/_next/static/chunks/644.02cb026fa44bcd0a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6466-6c87d60d3dd174fb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3347.f846266b5e5f3ede.js → 6540.c7bef57ad8f90a87.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/6773.d4264665ab31bec0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6822.3c789f1a8443e774.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8262.ddc03e06b733f184.js → 6944.309f4e3ea54d1537.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/7261-8ff69d3b2ee671fd.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7266.084c6bbc70035140.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7271.5c0100e7320aa856.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7429-bf5731358c8f2f68.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7464.01f7a0ae1215fbe7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7479.0fcad5f37eb64f0c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{4770.769c9cd9c7034eba.js → 7483.427a2fe2049e388d.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/{1147-5196d19c222051b3.js → 7502-be74718178e13e56.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/7530.0889722b19572065.js +24 -0
- package/apps/pwa/out/_next/static/chunks/7645.5b2ee3ad45c55ea3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7788.7d1c79f1a8e18946.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7900.096f455c7c1efc53.js +77 -0
- package/apps/pwa/out/_next/static/chunks/7910-6f139bcafd238b9f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7966.f71c8958d1637548.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8673-bab689a55f7e13b9.js → 8062-7cd0bcc7f01455ba.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/8073.f6cf2f2c71aafbd0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8201.190b94088980f430.js +74 -0
- package/apps/pwa/out/_next/static/chunks/8205.282ca4bb62d54a0a.js +62 -0
- package/apps/pwa/out/_next/static/chunks/8313-dfa1021bb58a46d6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/837-81336ebaca8198a8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8447.7963352ef5f71b76.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8574-868e8129525ef6d9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8588.d1c6a2903727ce87.js +149 -0
- package/apps/pwa/out/_next/static/chunks/8637.90f92d5c8db4732c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/868.6e953be05bcf6dca.js +41 -0
- package/apps/pwa/out/_next/static/chunks/8706-e1fe0309343a2273.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8749-06384cdfc4520add.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{9656-374232558fd528d0.js → 8861-cc1fa1c7b920fa8e.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{5440-4236de26c5ea5856.js → 8967-7dfebf710c9dec9d.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{1063.2fb8a9dc55c731f2.js → 8986.8e2e4efbfa655c59.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/8997-3c564dbb3b58b055.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{4320.583cbab64db6be02.js → 923.2034d10ae91e9c20.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/9312.bc1b89c5d4368033.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{1574.878c18ecc97b1bd4.js → 943.39ae5e82f4f1893f.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/9469.0500480de55fb205.js +32 -0
- package/apps/pwa/out/_next/static/chunks/9770.5f75bc6088b16109.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9810-2543267050e58b82.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9870.8419702475254745.js +8 -0
- package/apps/pwa/out/_next/static/chunks/9941-376d1b74d51b01a4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9958.385434ab04241758.js +1 -0
- package/apps/pwa/out/_next/static/chunks/aa57532f.510551854ff239b1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/_not-found/page-deea1450b17cb8dc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-70985b904f8650ef.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-a2e15e33e56a4353.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/board/page-fc72ce2db12d6ca9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/botlab/page-be03e41f9436ebd9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/bots/page-35a35999382da3f2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-3ff5b1e6ca88b848.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/chat/page-a65101300a0ee5c1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/consult/page-3aca5b6d67dba511.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/control/page-45b8ab0a71e61314.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-53046e282d4cda8e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-17809e60e8354c17.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/editor/page-fd2442d347bf5898.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/exec/page-e9d720d6fc082e21.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/field/page-6b8b4267bab0a677.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/healthz/route-deea1450b17cb8dc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/inside/page-8bcf6233ac7c17af.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/intake/page-7cc25591cfc2126f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/layout-053e871f35c9beba.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live/page-eff819f0c2d5e084.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live-run/page-4d7e9d8db5274a87.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/loops/page-2b2d8f5aa5f69ad4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/market/page-0b8f92c5062e68b1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-1bd9d0fdac2ced3d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/morning/{page-0f291d3c8fd55a3a.js → page-9ee28f7df07428ea.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/not-found-44b7a1ff468c6648.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-cbc6523711dc1b65.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-fdad47899c2695be.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-79a8b5fee4c20871.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-03e8ac9606aeaffb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-4cd55c55ec287e2f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/page-db17b4305404161e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-30041d848350fd02.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-c540da022dbf86b0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-9399efc538da057f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-ca2d09128c585ca4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/page-0e2635aecd343038.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-ef7f4399b6b7726e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/layout-deea1450b17cb8dc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/page-caf530535b875468.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/share/page-eaa20c1543a5fd8e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-c541eb1b75120f61.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-ab5e213eda9479f4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/term/page-0a815f34367b6db6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/today/page-e858ba0ed9393b68.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/trace/page-1638ee9dd6e0582f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/vault/page-4cf5a399109391f2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-b4396321238798ec.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-cb72bfd21006781a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-6135d0242afbc434.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-a1dccf907eddb856.js +1 -0
- package/apps/pwa/out/_next/static/chunks/c7945435-b44d4dbe90ba0dcb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3d0154af.5331fec737ffe8c3.js → cb0f8df8.09a4a6be97e3fc5f.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{e8543907.5b040a5f22a0b0e5.js → d96660fb.cbc21a2a88539dbb.js} +7 -7
- package/apps/pwa/out/_next/static/chunks/{50061469.0326382241ef3b2d.js → ea514caa.05a24f78d9dffe5f.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/fb7d20d5-6892502b6ee39ca6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/framework-e8a911e19b1be41f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/main-7022f418fabba021.js +1 -0
- package/apps/pwa/out/_next/static/chunks/main-app-e5f15df755756a1e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/pages/_app-4525f91e36940c9b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/pages/_error-140f0e519c085b0f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/webpack-8f22ef63dcb865b1.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/examples/research-runtime-empty-terminal.yaml +28 -0
- package/graphs/profiles/local.yaml +5 -0
- package/graphs/profiles/pod.yaml +4 -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/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-scenes.ts +301 -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/release-loop/auto-approve-node.ts +1 -1
- package/scripts/release-loop/gate-autoheal-sim-evidence.ts +60 -0
- package/scripts/release-loop/gate-method.ts +139 -0
- package/scripts/release-loop/gate-node.ts +180 -20
- package/scripts/release-loop/gate-traffic-mode.ts +151 -3
- package/scripts/release-loop/node-verdict.ts +38 -25
- package/scripts/release-loop/preflight.ts +362 -8
- package/scripts/release-loop/unattended-release.ts +20 -9
- package/scripts/rhythm/daily.ts +36 -4
- package/scripts/rhythm/linear-progress-sync.ts +298 -0
- package/scripts/video-pipeline.ts +9 -1
- package/scripts/warm-pool-provider-config.ts +29 -6
- 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 +47 -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/agents/general-purpose.md +1 -1
- package/src/auto-research/research-turn.ts +95 -10
- 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/doctor-fix.ts +2 -2
- package/src/cli/intake-source-cli.ts +44 -8
- 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 +187 -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 +186 -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/core-turn/deep-turn-bloom.ts +67 -0
- package/src/core-turn/research-policy.ts +37 -0
- package/src/core-turn/run-core-turn.ts +320 -30
- package/src/core-turn/types.ts +2 -0
- package/src/dashboard/chat/acp-chat.ts +10 -0
- package/src/dashboard/classic-sidetab-mission-job.ts +103 -0
- package/src/dashboard/classic-sidetab-mission-pair.ts +81 -0
- package/src/dashboard/classic-sidetab-mission-trio.ts +219 -0
- package/src/dashboard/classic-sidetab-mission.ts +167 -5
- package/src/dashboard/index.ts +378 -13
- 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 +1 -1
- package/src/dashboard/terminal-popup-runtime.ts +6 -3
- 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/telegram-kind-route.ts +16 -9
- package/src/graph-runner/arg-allowance.ts +13 -0
- package/src/graph-runner/graph-run-api.ts +3 -1
- package/src/graph-runner/runner.ts +85 -17
- 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 +11 -1
- 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 +127 -10
- 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/provider-credentials.ts +8 -2
- package/src/llm.ts +2 -1
- package/src/maturity/feature-maturity.ts +3 -3
- 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/http-server.ts +37 -1
- package/src/nexus/api/mcp-public-allowlist.ts +2 -0
- package/src/nexus/index.ts +7 -2
- package/src/nexus/outbound/format.ts +9 -0
- package/src/nexus/outbound/router.ts +98 -13
- 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 +44 -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 +85 -26
- 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/pty-shell/pty-control-ipc.ts +4 -1
- package/src/registry/catalog-server.ts +232 -0
- package/src/registry/loader.ts +45 -1
- package/src/registry/types.ts +1 -2
- package/src/research/axis-fanout.ts +43 -28
- package/src/self-dev/ask-launch-flow.ts +72 -1
- package/src/self-dev/dev-cli.ts +4 -1
- package/src/self-dev/dev-pipeline.ts +5 -0
- package/src/self-dev/draft-residue.ts +64 -5
- 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/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 +358 -4
- package/src/self-implement/graph-overlay-yaml.ts +30 -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 +26 -3
- package/src/self-implement/off-diff-evidence.ts +249 -5
- package/src/self-implement/orchestrator.ts +240 -15
- 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/train-gate-receipt.ts +166 -0
- package/src/self-implement/train-gate-remote.ts +62 -18
- package/src/session/chat.ts +4 -2
- 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 +37 -1
- 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/visible-agent-mission.ts +98 -22
- package/src/skills/tools/agent.ts +23 -4
- package/src/skills/tools/omni-search.ts +123 -25
- package/src/task-agent/parent-host.ts +10 -0
- package/src/task-agent/repair-outcomes.ts +65 -0
- package/src/task-agent/task-hand.ts +20 -7
- 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 +4 -0
- package/src/task-orchestrator/surfaces/pod-failure-reason.ts +92 -1
- package/src/task-orchestrator/surfaces/pod-ledger-events.ts +113 -14
- 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-provider.ts +35 -9
- package/src/task-orchestrator/surfaces/self-implement-pod.ts +172 -6
- 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 +1 -0
- package/src/tool-runtime/agent-runtime.ts +1 -0
- package/src/tool-runtime/browser-hand-runtime.ts +381 -0
- package/src/tool-runtime/browser-runtime.ts +2 -1
- package/src/tool-runtime/elanous-linear-issue-runtime.ts +76 -0
- package/src/tool-runtime/elanous-linear-secretary-runtime.ts +57 -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 +3 -0
- package/src/tui/entry.ts +24 -1
- package/src/tui/sidetab/attach.ts +140 -11
- package/src/tui/sidetab/herdr-portal.ts +225 -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 +198 -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 +216 -0
- package/src/ux-sim/mock-scenario-catalog.json +75 -23
- package/src/ux-sim/mock-scenario-catalog.ts +120 -2
- package/src/ux-sim/onboarding-first-run-device.ts +31 -21
- package/src/ux-sim/scenario.ts +70 -26
- package/src/ux-sim/service-key-setup.ts +50 -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/1345-31427b833438f521.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1455-530ca16c7e71baff.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/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/2160.a097e7b138ae1c55.js +0 -23
- 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/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/2974.595d1e29d040cb6a.js +0 -64
- 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/4768-8eac183fd291ca53.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4895.65605ec3e6504e89.js +0 -74
- 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/5431-72a1dbde59400691.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/5885.0a3e52c8faccec98.js +0 -287
- 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/6377.bc7df239edbff244.js +0 -1
- 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/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/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/9415.69e4a21c60c7d2db.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/9832.f4a98c878ecf2c0a.js +0 -62
- package/apps/pwa/out/_next/static/chunks/9865.f094440645f02d98.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9a852a62-6192a6ea9346ced3.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/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 → Om5xS9jpjSXJCeTNGYEi4}/_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';
|
|
@@ -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,9 @@ 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?: 'blocked-by-baseline' | 'goal-only-rework-exhausted';
|
|
2415
|
+
terminationReason?: 'blocked-by-baseline' | 'goal-only-rework-exhausted' | 'tdd-evidence-missing';
|
|
2416
|
+
/** Structured TDD failure survives child JSON/result truncation and parent-ledger mapping. */
|
|
2417
|
+
tddEvidenceFailure?: { reason: 'tdd-evidence-missing'; round: number; missing: readonly TddRecordTag[] };
|
|
2410
2418
|
sessionId?: string;
|
|
2411
2419
|
worktreePath?: string;
|
|
2412
2420
|
branch?: string;
|
|
@@ -2895,6 +2903,8 @@ type BlockedDraftPrState = {
|
|
|
2895
2903
|
childSummaryArtifact?: ChildSummaryArtifactRef;
|
|
2896
2904
|
terminalStatus?: ImplementTerminalStatus;
|
|
2897
2905
|
planRevision?: ReworkPlanRevision;
|
|
2906
|
+
stopStage?: string;
|
|
2907
|
+
stopClass?: ReturnType<typeof classifyTerminalHarnessFailure>;
|
|
2898
2908
|
/** Classifier output for this unfinished run. Omitted means the cause was not classified. */
|
|
2899
2909
|
abandonedClassification?: AbandonedClassificationResult;
|
|
2900
2910
|
};
|
|
@@ -2909,29 +2919,39 @@ export type BlockedDraftClassificationRecord = {
|
|
|
2909
2919
|
readonly classification: string;
|
|
2910
2920
|
readonly classificationBasis: string;
|
|
2911
2921
|
readonly worktreeClean: boolean | null;
|
|
2922
|
+
readonly stop: { readonly class: ReturnType<typeof classifyTerminalHarnessFailure>; readonly stage: string };
|
|
2912
2923
|
};
|
|
2913
2924
|
|
|
2914
2925
|
export function blockedDraftClassificationRecord(
|
|
2915
2926
|
classification: AbandonedClassificationResult | undefined,
|
|
2927
|
+
stop: { readonly stage?: string; readonly class?: ReturnType<typeof classifyTerminalHarnessFailure> } = {},
|
|
2916
2928
|
): BlockedDraftClassificationRecord {
|
|
2929
|
+
const stage = typeof stop.stage === 'string' && stop.stage.trim() ? stop.stage : 'unknown';
|
|
2930
|
+
const stopClass = stop.class ?? classifyTerminalHarnessFailure({
|
|
2931
|
+
stage,
|
|
2932
|
+
...(classification ? { abandonedClassification: classification.classification } : {}),
|
|
2933
|
+
});
|
|
2917
2934
|
if (!classification) {
|
|
2918
2935
|
return {
|
|
2919
2936
|
classification: BLOCKED_DRAFT_UNCLASSIFIED_CLASSIFICATION,
|
|
2920
2937
|
classificationBasis: BLOCKED_DRAFT_UNCLASSIFIED_CLASSIFICATION,
|
|
2921
2938
|
worktreeClean: null,
|
|
2939
|
+
stop: { class: stopClass, stage },
|
|
2922
2940
|
};
|
|
2923
2941
|
}
|
|
2924
2942
|
return {
|
|
2925
2943
|
classification: classification.classification,
|
|
2926
2944
|
classificationBasis: classification.classificationBasis,
|
|
2927
2945
|
worktreeClean: classification.worktreeClean ?? null,
|
|
2946
|
+
stop: { class: stopClass, stage },
|
|
2928
2947
|
};
|
|
2929
2948
|
}
|
|
2930
2949
|
|
|
2931
2950
|
export function formatBlockedDraftClassificationSection(
|
|
2932
2951
|
classification: AbandonedClassificationResult | undefined,
|
|
2952
|
+
stop: { readonly stage?: string; readonly class?: ReturnType<typeof classifyTerminalHarnessFailure> } = {},
|
|
2933
2953
|
): string[] {
|
|
2934
|
-
const record = blockedDraftClassificationRecord(classification);
|
|
2954
|
+
const record = blockedDraftClassificationRecord(classification, stop);
|
|
2935
2955
|
const human = record.classification === BLOCKED_DRAFT_UNCLASSIFIED_CLASSIFICATION
|
|
2936
2956
|
? `${record.classification} (분류를 못 함)`
|
|
2937
2957
|
: record.classification;
|
|
@@ -2942,6 +2962,8 @@ export function formatBlockedDraftClassificationSection(
|
|
|
2942
2962
|
`- classification: ${record.classification}`,
|
|
2943
2963
|
`- classificationBasis: ${record.classificationBasis}`,
|
|
2944
2964
|
`- worktreeClean: ${worktreeCleanText}`,
|
|
2965
|
+
`- stop.class: ${record.stop.class}`,
|
|
2966
|
+
`- stop.stage: ${record.stop.stage}`,
|
|
2945
2967
|
'',
|
|
2946
2968
|
'```json',
|
|
2947
2969
|
JSON.stringify(record),
|
|
@@ -2967,7 +2989,7 @@ function blockedDraftPrBody(feature: string, implSummary: string, state: Blocked
|
|
|
2967
2989
|
...(state.childSummaryArtifact ? [`- child summary artifact: ${state.childSummaryArtifact.path}`] : []),
|
|
2968
2990
|
...(state.terminalStatus ? [`- child terminal status: reached=${state.terminalStatus.reached}; changed=${state.terminalStatus.changed}; toolCalls=${state.terminalStatus.toolCalls}; timedOut=${state.terminalStatus.timedOut}`] : []),
|
|
2969
2991
|
'',
|
|
2970
|
-
...formatBlockedDraftClassificationSection(state.abandonedClassification),
|
|
2992
|
+
...formatBlockedDraftClassificationSection(state.abandonedClassification, { stage: state.stopStage, class: state.stopClass }),
|
|
2971
2993
|
'',
|
|
2972
2994
|
'## 미배달 감독 수리 지시',
|
|
2973
2995
|
...(state.undeliveredSupervisorInputs.length
|
|
@@ -3103,10 +3125,12 @@ export function assembleBlockedDraftPrBody(
|
|
|
3103
3125
|
persist?: SelfImplementSeams['persistPrBodyArtifact'],
|
|
3104
3126
|
): { body: string; truncated: boolean; originalChars: number } {
|
|
3105
3127
|
const raw = blockedDraftPrBody(feature, implSummary, state, goalFile);
|
|
3106
|
-
const classificationRecord = blockedDraftClassificationRecord(state.abandonedClassification);
|
|
3128
|
+
const classificationRecord = blockedDraftClassificationRecord(state.abandonedClassification, { stage: state.stopStage, class: state.stopClass });
|
|
3107
3129
|
const essentialSuffix = [
|
|
3108
3130
|
`- reason: ${state.reason}`,
|
|
3109
3131
|
`- classification: ${classificationRecord.classification}`,
|
|
3132
|
+
`- stop.class: ${classificationRecord.stop.class}`,
|
|
3133
|
+
`- stop.stage: ${classificationRecord.stop.stage}`,
|
|
3110
3134
|
JSON.stringify(classificationRecord),
|
|
3111
3135
|
...(state.reasonTruncated ? ['- reason truncated: true'] : []),
|
|
3112
3136
|
...(state.terminalStatus ? [`- child terminal status: reached=${state.terminalStatus.reached}; changed=${state.terminalStatus.changed}; toolCalls=${state.terminalStatus.toolCalls}; timedOut=${state.terminalStatus.timedOut}`] : []),
|
|
@@ -4203,6 +4227,49 @@ export async function runSelfImplement(opts: SelfImplementOptions): Promise<Self
|
|
|
4203
4227
|
unjoinedNodes: unjoined,
|
|
4204
4228
|
}, { category: 'graph.path' });
|
|
4205
4229
|
}
|
|
4230
|
+
if (runGraphTemplate?.graphId === 'self-implement') {
|
|
4231
|
+
const profileIds = new Set<string>();
|
|
4232
|
+
let journeyEvidenceStatus: 'read' | 'missing' | 'read-error' = 'missing';
|
|
4233
|
+
let journeyEvidenceError: string | undefined;
|
|
4234
|
+
const journeySteps: Array<{ from: string; to: string; skipped?: string[] }> = [];
|
|
4235
|
+
try {
|
|
4236
|
+
// `recordJourneyEdge` appends graph.path synchronously to the canonical run ledger.
|
|
4237
|
+
// Reading that same append boundary avoids a potentially lagging debug LogStore mirror.
|
|
4238
|
+
const entries = loadRunLedger(runId, runLedgerDir());
|
|
4239
|
+
if (entries !== null) {
|
|
4240
|
+
journeyEvidenceStatus = 'read';
|
|
4241
|
+
for (const entry of entries) {
|
|
4242
|
+
if (entry.event !== 'graph.path') continue;
|
|
4243
|
+
const data = entry.data;
|
|
4244
|
+
if (Array.isArray(data.profileIds)) for (const id of data.profileIds) if (typeof id === 'string') profileIds.add(id);
|
|
4245
|
+
if (data.event !== 'edge-taken' || typeof data.from !== 'string' || typeof data.taken !== 'string') continue;
|
|
4246
|
+
const skipped = Array.isArray(data.skippedNodes)
|
|
4247
|
+
? data.skippedNodes.flatMap((item) => item && typeof item === 'object'
|
|
4248
|
+
&& typeof (item as { node?: unknown }).node === 'string' ? [(item as { node: string }).node] : [])
|
|
4249
|
+
: [];
|
|
4250
|
+
journeySteps.push({ from: data.from, to: data.taken, ...(skipped.length > 0 ? { skipped } : {}) });
|
|
4251
|
+
}
|
|
4252
|
+
}
|
|
4253
|
+
} catch (error) {
|
|
4254
|
+
journeyEvidenceStatus = 'read-error';
|
|
4255
|
+
journeyEvidenceError = error instanceof Error ? error.message : String(error);
|
|
4256
|
+
}
|
|
4257
|
+
const pathBasis = 'self-implement-pipeline-and-journey-v1';
|
|
4258
|
+
const pipelineNodes = traversedNodes.map(String);
|
|
4259
|
+
const pipelineSteps = pipelineNodes.slice(1).map((to, index) => ({ from: pipelineNodes[index]!, to }));
|
|
4260
|
+
const pathSteps = [...pipelineSteps, ...journeySteps];
|
|
4261
|
+
const visitedNodes = [
|
|
4262
|
+
...pipelineNodes,
|
|
4263
|
+
...journeySteps.flatMap((step) => [step.from, ...(step.skipped ?? []), step.to]),
|
|
4264
|
+
];
|
|
4265
|
+
const pathSignature = pathSignatureOf(pathSteps);
|
|
4266
|
+
observeOuter('path-signature', {
|
|
4267
|
+
...graphIdentityOf(runGraphTemplate), ...journeyJoinFields(), pathBasis,
|
|
4268
|
+
profileIds: [...profileIds].sort(), pathSignature, pathSteps, visitedNodes,
|
|
4269
|
+
journeyEdgeCount: journeySteps.length,
|
|
4270
|
+
journeyEvidenceStatus, ...(journeyEvidenceError ? { journeyEvidenceError } : {}),
|
|
4271
|
+
}, { category: 'graph.path' });
|
|
4272
|
+
}
|
|
4206
4273
|
try {
|
|
4207
4274
|
const checked = terminalNode
|
|
4208
4275
|
? (opts.seams.checkPipelineTraversal ?? checkPipelineTraversal)(traversedNodes, terminalNode)
|
|
@@ -4897,6 +4964,7 @@ export function attachAbandonedClassification(
|
|
|
4897
4964
|
...(credentialFailure ? { credentialFailure: true } : {}),
|
|
4898
4965
|
...(providerError ? { providerError: true } : {}),
|
|
4899
4966
|
...(providerError && result.providerErrors?.category ? { providerErrorCategory: result.providerErrors.category } : {}),
|
|
4967
|
+
...(result.terminationReason === 'tdd-evidence-missing' ? { terminationReason: result.terminationReason } : {}),
|
|
4900
4968
|
worktreePorcelain: worktree.worktreePorcelain,
|
|
4901
4969
|
...(worktree.gitResidue ? { gitResidue: worktree.gitResidue } : {}),
|
|
4902
4970
|
...(result.completionDisposition ? { completionDisposition: result.completionDisposition } : {}),
|
|
@@ -4931,6 +4999,7 @@ export function observeRunOutcome(
|
|
|
4931
4999
|
worktreePath: SelfImplementResult['worktreePath'] | undefined;
|
|
4932
5000
|
review: SelfImplementResult['review'] | undefined;
|
|
4933
5001
|
completionDisposition: SelfImplementResult['completionDisposition'] | undefined;
|
|
5002
|
+
terminationReason?: SelfImplementResult['terminationReason'];
|
|
4934
5003
|
supervisorVerdict: SelfImplementResult['supervisorVerdict'] | undefined;
|
|
4935
5004
|
goalCauseObserved?: SelfImplementResult['goalCauseObserved'];
|
|
4936
5005
|
mergeApprovalReceived: SelfImplementResult['mergeApprovalReceived'] | undefined;
|
|
@@ -4972,6 +5041,7 @@ export function observeRunOutcome(
|
|
|
4972
5041
|
...(result.quotaExhaustionAssessment?.exhausted ? { quotaExhausted: true } : {}),
|
|
4973
5042
|
...(result.quotaExhaustionAssessment?.accountAvailability ? { quotaAccountAvailability: result.quotaExhaustionAssessment.accountAvailability } : {}),
|
|
4974
5043
|
...(result.providerErrors?.category ? { providerError: true, providerErrorCategory: result.providerErrors.category } : {}),
|
|
5044
|
+
...(result.terminationReason === 'tdd-evidence-missing' ? { terminationReason: result.terminationReason } : {}),
|
|
4975
5045
|
stage: result.stage,
|
|
4976
5046
|
reviewResultObserved: result.review !== undefined,
|
|
4977
5047
|
mustFixReported: (result.review?.mustFix.length ?? 0) > 0,
|
|
@@ -5319,6 +5389,7 @@ async function runSelfImplementInner(
|
|
|
5319
5389
|
if (graphAuthority.enabled) onGraphTemplateResolved(graphTemplate);
|
|
5320
5390
|
// ⛔ 선택을 «전부» 싣는다 — 얹힌 것만 실으면 「왜 안 얹혔나」를 사후에 못 묻는다.
|
|
5321
5391
|
let reviewRepeat: number | undefined;
|
|
5392
|
+
const recordedRuntimeStructuralSteps = new Set<string>();
|
|
5322
5393
|
/** ⭐ ③ «다이나믹» — 라운드마다 runtime 오버레이를 다시 고른다.
|
|
5323
5394
|
* ⛔ **매번 «기준 선언»에서 다시 얹는다** — 이전 라운드 결과 위에 겹쳐 얹으면
|
|
5324
5395
|
* 「이 걸음을 무엇이 만들었나」가 «누적»이 되어 사후에 못 푼다.
|
|
@@ -5339,6 +5410,7 @@ async function runSelfImplementInner(
|
|
|
5339
5410
|
...(stopClass === undefined ? {} : { stopClass }),
|
|
5340
5411
|
...(reviewRepeat === undefined ? {} : { reviewRepeat }),
|
|
5341
5412
|
});
|
|
5413
|
+
const beforeRuntimeGraph = graphTemplate;
|
|
5342
5414
|
const decision = decideTemplate({
|
|
5343
5415
|
goalType: graphGoalType,
|
|
5344
5416
|
authority: graphAuthority,
|
|
@@ -5347,7 +5419,41 @@ async function runSelfImplementInner(
|
|
|
5347
5419
|
stage: 'runtime',
|
|
5348
5420
|
...(variantSpec ? { specs: { [variantSpec.graphId]: variantSpec } } : {}),
|
|
5349
5421
|
});
|
|
5350
|
-
if (decision.appliedIds.length > 0)
|
|
5422
|
+
if (decision.appliedIds.length > 0) {
|
|
5423
|
+
graphTemplate = decision.template;
|
|
5424
|
+
const structuralEvents = runtimeOverlayRunSteps({
|
|
5425
|
+
runId: runIdentity.runId,
|
|
5426
|
+
timestamp: new Date().toISOString(),
|
|
5427
|
+
before: beforeRuntimeGraph,
|
|
5428
|
+
after: graphTemplate,
|
|
5429
|
+
overlayIds: decision.appliedIds,
|
|
5430
|
+
round,
|
|
5431
|
+
});
|
|
5432
|
+
const pendingStructuralEvents = structuralEvents.map((entry) => ({
|
|
5433
|
+
entry,
|
|
5434
|
+
key: entry.event === 'node-added'
|
|
5435
|
+
? `${entry.event}:${entry.data.node}`
|
|
5436
|
+
: `${entry.event}:${entry.data.from}:${entry.data.outcome}:${entry.data.was}:${entry.data.to}`,
|
|
5437
|
+
})).filter(({ key }) => !recordedRuntimeStructuralSteps.has(key));
|
|
5438
|
+
if (pendingStructuralEvents.length > 0) {
|
|
5439
|
+
try {
|
|
5440
|
+
const batch = pendingStructuralEvents.map(({ entry }) => entry);
|
|
5441
|
+
if (opts.seams.writeRunLedgerBatch) opts.seams.writeRunLedgerBatch(batch);
|
|
5442
|
+
else if (opts.seams.writeRunLedger) for (const entry of batch) opts.seams.writeRunLedger(entry);
|
|
5443
|
+
else appendRunLedgerEntries(batch);
|
|
5444
|
+
for (const { key } of pendingStructuralEvents) recordedRuntimeStructuralSteps.add(key);
|
|
5445
|
+
} catch (error) {
|
|
5446
|
+
const first = pendingStructuralEvents[0]!.entry;
|
|
5447
|
+
observe('graph-overlay-step-write-failed', {
|
|
5448
|
+
runId: runIdentity.runId,
|
|
5449
|
+
round,
|
|
5450
|
+
event: first.event,
|
|
5451
|
+
events: pendingStructuralEvents.map(({ entry }) => entry.event),
|
|
5452
|
+
error: error instanceof Error ? error.message : String(error),
|
|
5453
|
+
});
|
|
5454
|
+
}
|
|
5455
|
+
}
|
|
5456
|
+
}
|
|
5351
5457
|
// ⭐ SELFIMPL-NODE-SEAMS-BACK — 같은 NodeContext 가 라운드로 이어진다: 체크포인트를 옮기고,
|
|
5352
5458
|
// 부품이 도는 중에 다른 판으로 바뀌었으면 그 사실을 값으로 낸다(걸음과 신원이 갈리는 것을 막는다).
|
|
5353
5459
|
if (nodeContext !== undefined) {
|
|
@@ -5722,8 +5828,8 @@ async function runSelfImplementInner(
|
|
|
5722
5828
|
// 거짓 표시한다 · 리뷰 4R). 수확본이 비면 **요약에서 수확**한다 — 요약 원문을 통째로 싣지 않는다.
|
|
5723
5829
|
const harvestedForPr = (): string | undefined => {
|
|
5724
5830
|
if (!impl) return undefined;
|
|
5725
|
-
const fromChild = impl.evidenceTranscript?.trim() ? impl.evidenceTranscript : undefined;
|
|
5726
|
-
const picked = fromChild
|
|
5831
|
+
const fromChild = impl.evidenceTranscript?.trim() ? harvestEvidenceLines(impl.evidenceTranscript) : undefined;
|
|
5832
|
+
const picked = fromChild?.trim() ? fromChild : harvestEvidenceLines(impl.summary);
|
|
5727
5833
|
return picked.trim() ? picked : undefined;
|
|
5728
5834
|
};
|
|
5729
5835
|
let offDiffEvidence: OffDiffEvidenceParse = { items: [], discardedMissingVerify: 0, discardedEmptyClaim: 0, missingResult: 0, orphanResult: 0, truncatedResult: 0, anchoredEvidence: 0 };
|
|
@@ -6194,6 +6300,7 @@ async function runSelfImplementInner(
|
|
|
6194
6300
|
};
|
|
6195
6301
|
let blockedDraftNoChanges = false;
|
|
6196
6302
|
let blockedDraftPrFailure: string | undefined;
|
|
6303
|
+
let blockedDraftPrFailureKind: 'blocked-draft-pr-guard' | undefined;
|
|
6197
6304
|
let repairLink: { originalPr: number; salvageRef: string } | undefined;
|
|
6198
6305
|
const reviewBlockedResult = (pr: { url: string; number: number } | undefined) => ({
|
|
6199
6306
|
stage: blockedDraftNoChanges && podReviewBlockedDraft ? 'no-changes' as const : podReviewBlockedDraft && !pr ? 'aborted' as const : 'review-blocked' as const,
|
|
@@ -6264,14 +6371,26 @@ async function runSelfImplementInner(
|
|
|
6264
6371
|
observe('blocked-draft-decision-signal-failed', { stage, error: decisionSignalObservation.error }, { level: 'warn' });
|
|
6265
6372
|
}
|
|
6266
6373
|
const abandonedClassification = classifyUnfinishedRun(stage, verdict, decomposition);
|
|
6267
|
-
const
|
|
6374
|
+
const stopClass = classifyTerminalHarnessFailure({
|
|
6375
|
+
stage,
|
|
6376
|
+
abandonedClassification: abandonedClassification.classification,
|
|
6377
|
+
...(verdict ? { supervisorVerdict: verdict } : {}),
|
|
6378
|
+
});
|
|
6379
|
+
const classificationRecord = blockedDraftClassificationRecord(abandonedClassification, { stage, class: stopClass });
|
|
6268
6380
|
observe('blocked-draft-classification', {
|
|
6269
6381
|
stage,
|
|
6270
6382
|
...classificationRecord,
|
|
6271
6383
|
}, { level: 'warn' });
|
|
6384
|
+
observe('draft-stop-classified', {
|
|
6385
|
+
stage,
|
|
6386
|
+
stop: classificationRecord.stop,
|
|
6387
|
+
classification: classificationRecord.classification,
|
|
6388
|
+
classificationBasis: classificationRecord.classificationBasis,
|
|
6389
|
+
}, { level: 'warn' });
|
|
6272
6390
|
const observation = {
|
|
6273
6391
|
branch: wt.branch,
|
|
6274
6392
|
stage,
|
|
6393
|
+
stopClass: classificationRecord.stop.class,
|
|
6275
6394
|
verdict: verdict ?? null,
|
|
6276
6395
|
reason: reason.slice(0, 240),
|
|
6277
6396
|
rounds: round,
|
|
@@ -6314,6 +6433,8 @@ async function runSelfImplementInner(
|
|
|
6314
6433
|
reason,
|
|
6315
6434
|
rounds: round,
|
|
6316
6435
|
undeliveredSupervisorInputs: undeliveredSupervisorInputSnapshot(),
|
|
6436
|
+
stopStage: stage,
|
|
6437
|
+
stopClass,
|
|
6317
6438
|
abandonedClassification,
|
|
6318
6439
|
...(decomposition ? { decomposition } : {}),
|
|
6319
6440
|
...(harvestedForPr() ? { evidence: harvestedForPr() as string } : {}),
|
|
@@ -6585,6 +6706,9 @@ async function runSelfImplementInner(
|
|
|
6585
6706
|
...(artifactPath ? { prBodyArtifactPath: artifactPath } : {}),
|
|
6586
6707
|
...(artifactError ? { prBodyArtifactError: artifactError } : {}),
|
|
6587
6708
|
}, { level: 'warn' });
|
|
6709
|
+
blockedDraftPrFailureKind = /self-implement PR guard 실패/.test(prError) && /(?:same-cell|goal-only)/.test(prError)
|
|
6710
|
+
? 'blocked-draft-pr-guard' : undefined;
|
|
6711
|
+
blockedDraftPrFailure = `draft PR 생성 실패: ${prError}`;
|
|
6588
6712
|
// STOP-RECORD: a failed blocked-draft PR open (e.g. same-branch rerun with a PR already open) left no stop reason.
|
|
6589
6713
|
let draftStopEntry: RunLedgerEntry | undefined;
|
|
6590
6714
|
try {
|
|
@@ -7798,7 +7922,61 @@ async function runSelfImplementInner(
|
|
|
7798
7922
|
// ② 첫 조각 커밋의 피처 시험·구현 전 실행 RED 기록과 구현 뒤 같은 명령 GREEN 기록이
|
|
7799
7923
|
// 없으면 수리 라운드 1회(완료 경계·기존 동작은 보존), 그래도 없으면 fail-closed.
|
|
7800
7924
|
// ③ 관측 원장에 tdd-red/tdd-green 이벤트를 남긴다.
|
|
7801
|
-
let
|
|
7925
|
+
let tddTranscript = [impl.evidenceTranscript, impl.summary].filter((part): part is string => Boolean(part?.trim())).join('\n');
|
|
7926
|
+
let tddJudgment = judgeTddEvidence(roundGoal, parseOffDiffEvidence(tddTranscript));
|
|
7927
|
+
const runHarnessBaseTddWhenRedMissing = (input: {
|
|
7928
|
+
readonly round: number;
|
|
7929
|
+
readonly goal: string;
|
|
7930
|
+
readonly transcript: string;
|
|
7931
|
+
readonly judgment: ReturnType<typeof judgeTddEvidence>;
|
|
7932
|
+
readonly implementation: typeof impl;
|
|
7933
|
+
}): { readonly transcript: string; readonly judgment: ReturnType<typeof judgeTddEvidence> } => {
|
|
7934
|
+
if (!input.judgment.planned || input.judgment.red.observed || !input.implementation.ok
|
|
7935
|
+
|| input.implementation.terminalStatus?.reached !== true) {
|
|
7936
|
+
return { transcript: input.transcript, judgment: input.judgment };
|
|
7937
|
+
}
|
|
7938
|
+
if (!wt.resolvedBase) {
|
|
7939
|
+
observe('tdd-base-test', { round: input.round, status: 'unmeasured', reason: 'base-commit-unavailable' }, { level: 'warn' });
|
|
7940
|
+
return { transcript: input.transcript, judgment: input.judgment };
|
|
7941
|
+
}
|
|
7942
|
+
const result = (s.runTddBaseHeadTest ?? runTddBaseHeadTest)({ cwd: wt.path, baseSha: wt.resolvedBase, goal: input.goal });
|
|
7943
|
+
observe('tdd-base-test', {
|
|
7944
|
+
round: input.round, status: result.accepted ? 'red-green' : 'unmeasured', reason: result.reason,
|
|
7945
|
+
baseSha: wt.resolvedBase, command: result.command, baseResult: result.baseResult ?? null, headResult: result.headResult ?? null,
|
|
7946
|
+
}, result.accepted ? {} : { level: 'warn' });
|
|
7947
|
+
if (!result.accepted || !result.transcript) return { transcript: input.transcript, judgment: input.judgment };
|
|
7948
|
+
const transcript = `${result.transcript}\n${input.transcript}`;
|
|
7949
|
+
return { transcript, judgment: judgeTddEvidence(input.goal, parseOffDiffEvidence(transcript)) };
|
|
7950
|
+
};
|
|
7951
|
+
const baseTdd = runHarnessBaseTddWhenRedMissing({ round, goal: roundGoal, transcript: tddTranscript, judgment: tddJudgment, implementation: impl });
|
|
7952
|
+
tddTranscript = baseTdd.transcript;
|
|
7953
|
+
tddJudgment = baseTdd.judgment;
|
|
7954
|
+
const receivedTddRed = receiveObservedTddRed({
|
|
7955
|
+
goal: roundGoal, judgment: tddJudgment, transcript: tddTranscript,
|
|
7956
|
+
resultParsed: impl.ok && impl.terminalStatus?.reached === true,
|
|
7957
|
+
});
|
|
7958
|
+
debug.log('self-implement.tdd-evidence', 'red-receive', {
|
|
7959
|
+
round, source: 'child-tool-output', accepted: receivedTddRed.accepted, reason: receivedTddRed.reason,
|
|
7960
|
+
observedTestCommand: receivedTddRed.command ?? null, observedTestResult: receivedTddRed.result ?? null,
|
|
7961
|
+
});
|
|
7962
|
+
if (receivedTddRed.accepted) {
|
|
7963
|
+
tddTranscript = receivedTddRed.transcript;
|
|
7964
|
+
tddJudgment = judgeTddEvidence(roundGoal, parseOffDiffEvidence(tddTranscript));
|
|
7965
|
+
}
|
|
7966
|
+
const receivedTddGreen = receiveObservedTddGreen({
|
|
7967
|
+
goal: roundGoal, judgment: tddJudgment, transcript: tddTranscript,
|
|
7968
|
+
resultParsed: impl.ok && impl.terminalStatus?.reached === true,
|
|
7969
|
+
});
|
|
7970
|
+
debug.log('self-implement.tdd-evidence', 'green-receive', {
|
|
7971
|
+
round, source: 'child-tool-output', accepted: receivedTddGreen.accepted, reason: receivedTddGreen.reason,
|
|
7972
|
+
taggedGreenPresent: tddJudgment.green.observed, observedTestCommand: receivedTddGreen.command ?? null,
|
|
7973
|
+
observedTestResult: receivedTddGreen.result ?? null,
|
|
7974
|
+
});
|
|
7975
|
+
if (receivedTddGreen.accepted) {
|
|
7976
|
+
tddTranscript = receivedTddGreen.transcript;
|
|
7977
|
+
tddJudgment = judgeTddEvidence(roundGoal, parseOffDiffEvidence(tddTranscript));
|
|
7978
|
+
}
|
|
7979
|
+
let tddEvidenceFailure: SelfImplementResult['tddEvidenceFailure'];
|
|
7802
7980
|
if (tddJudgment.needsRepair && impl.ok && round < effectiveMax && opts.goalFile
|
|
7803
7981
|
&& !hasCurrentProviderError() && !hasCurrentCredentialFailure()) {
|
|
7804
7982
|
let goalDocument: string | undefined;
|
|
@@ -7835,14 +8013,55 @@ async function runSelfImplementInner(
|
|
|
7835
8013
|
tddRetryAbort.abort();
|
|
7836
8014
|
tddRetryImpl = { ...beforeTddRetry, ok: false, summary: `[구현 재작업 · tdd-evidence-missing] 수리 라운드 실패 — ${safeErrorDescription(error)}` };
|
|
7837
8015
|
}
|
|
7838
|
-
|
|
8016
|
+
let tddRetryTranscript = [tddRetryImpl.evidenceTranscript, tddRetryImpl.summary]
|
|
8017
|
+
.filter((part): part is string => Boolean(part?.trim())).join('\n');
|
|
8018
|
+
let tddRetryJudgment = judgeTddEvidence(roundGoal, parseOffDiffEvidence(tddRetryTranscript));
|
|
8019
|
+
const retryBaseTdd = runHarnessBaseTddWhenRedMissing({
|
|
8020
|
+
round: tddRetryRound, goal: roundGoal, transcript: tddRetryTranscript, judgment: tddRetryJudgment, implementation: tddRetryImpl,
|
|
8021
|
+
});
|
|
8022
|
+
tddRetryTranscript = retryBaseTdd.transcript;
|
|
8023
|
+
tddRetryJudgment = retryBaseTdd.judgment;
|
|
8024
|
+
const retryTddRed = receiveObservedTddRed({
|
|
8025
|
+
goal: roundGoal, judgment: tddRetryJudgment, transcript: tddRetryTranscript,
|
|
8026
|
+
resultParsed: tddRetryImpl.ok && tddRetryImpl.terminalStatus?.reached === true,
|
|
8027
|
+
});
|
|
8028
|
+
debug.log('self-implement.tdd-evidence', 'red-receive', {
|
|
8029
|
+
round: tddRetryRound, source: 'child-tool-output', accepted: retryTddRed.accepted, reason: retryTddRed.reason,
|
|
8030
|
+
observedTestCommand: retryTddRed.command ?? null, observedTestResult: retryTddRed.result ?? null,
|
|
8031
|
+
});
|
|
8032
|
+
if (retryTddRed.accepted) {
|
|
8033
|
+
tddRetryTranscript = retryTddRed.transcript;
|
|
8034
|
+
tddRetryJudgment = judgeTddEvidence(roundGoal, parseOffDiffEvidence(tddRetryTranscript));
|
|
8035
|
+
}
|
|
8036
|
+
const retryTddGreen = receiveObservedTddGreen({
|
|
8037
|
+
goal: roundGoal, judgment: tddRetryJudgment, transcript: tddRetryTranscript,
|
|
8038
|
+
resultParsed: tddRetryImpl.ok && tddRetryImpl.terminalStatus?.reached === true,
|
|
8039
|
+
});
|
|
8040
|
+
debug.log('self-implement.tdd-evidence', 'green-receive', {
|
|
8041
|
+
round: tddRetryRound, source: 'child-tool-output', accepted: retryTddGreen.accepted, reason: retryTddGreen.reason,
|
|
8042
|
+
taggedGreenPresent: tddRetryJudgment.green.observed, observedTestCommand: retryTddGreen.command ?? null,
|
|
8043
|
+
observedTestResult: retryTddGreen.result ?? null,
|
|
8044
|
+
});
|
|
8045
|
+
if (retryTddGreen.accepted) {
|
|
8046
|
+
tddRetryTranscript = retryTddGreen.transcript;
|
|
8047
|
+
tddRetryJudgment = judgeTddEvidence(roundGoal, parseOffDiffEvidence(tddRetryTranscript));
|
|
8048
|
+
}
|
|
7839
8049
|
if (tddRetryImpl.ok && !tddRetryJudgment.needsRepair) {
|
|
7840
|
-
observe('implementation-tdd-rework', { status: 'succeeded', round: tddRetryRound, missing: [] });
|
|
8050
|
+
observe('implementation-tdd-rework', { status: 'succeeded', round: tddRetryRound, missing: [...tddRetryJudgment.missing] });
|
|
7841
8051
|
tddJudgment = tddRetryJudgment;
|
|
7842
8052
|
impl = tddRetryImpl;
|
|
7843
8053
|
round = tddRetryRound;
|
|
7844
8054
|
} else {
|
|
7845
8055
|
observe('implementation-tdd-rework', { status: 'exhausted', round: tddRetryRound, missing: [...tddRetryJudgment.missing] }, { level: 'warn' });
|
|
8056
|
+
// Only an initially successful implementation can enter this one retry. Goal-only exhaustion
|
|
8057
|
+
// has impl.ok=false before this point, so these two terminal reason codes cannot compete.
|
|
8058
|
+
if (tddRetryJudgment.missing.length > 0) {
|
|
8059
|
+
tddEvidenceFailure = {
|
|
8060
|
+
reason: 'tdd-evidence-missing',
|
|
8061
|
+
round: tddRetryRound,
|
|
8062
|
+
missing: [...tddRetryJudgment.missing],
|
|
8063
|
+
};
|
|
8064
|
+
}
|
|
7846
8065
|
impl = { ...beforeTddRetry, ok: false, summary: `[구현 재작업 · tdd-evidence-missing] RED/GREEN 기록 결손 — ${beforeTddRetry.summary}` };
|
|
7847
8066
|
}
|
|
7848
8067
|
}
|
|
@@ -7933,7 +8152,7 @@ async function runSelfImplementInner(
|
|
|
7933
8152
|
// 창 밖으로 밀려 파서에 도달조차 못 하던 자리다. 미주입 seam 은 종전대로 요약에서 판다(무회귀).
|
|
7934
8153
|
// ⛔ `??` 가 아니라 **빈 문자열도 폴백**이다 — 수확본이 비면 *"수확했다"* 가 아니라 *"없다"* 이고,
|
|
7935
8154
|
// `??` 로 두면 관측이 `harvested` 라 **거짓을 말한다**(리뷰 3R).
|
|
7936
|
-
const harvested = impl.evidenceTranscript?.trim() ? impl.evidenceTranscript : undefined;
|
|
8155
|
+
const harvested = impl.evidenceTranscript?.trim() ? harvestEvidenceLines(impl.evidenceTranscript) : undefined;
|
|
7937
8156
|
const childEvidenceSource = harvested ?? impl.summary;
|
|
7938
8157
|
let diffEvidence = '';
|
|
7939
8158
|
let roundObservationMeasurementBasis: ObservationMeasurementBasis | undefined;
|
|
@@ -8028,6 +8247,8 @@ async function runSelfImplementInner(
|
|
|
8028
8247
|
observe('implemented', { ok: impl.ok, round, ...(materializedPaths ? { materializedPaths: [...materializedPaths] } : {}),
|
|
8029
8248
|
...(effectiveDisposition ? { completionDisposition: effectiveDisposition } : {}) });
|
|
8030
8249
|
progress('implemented', impl.ok ? (round === 0 ? '구현 완료' : `rework ${round} 완료`) : impl.completionDisposition ? '변경 없이 완료 검증' : '구현 실패(worktree 보존)');
|
|
8250
|
+
// TDD exhaustion marks impl failed above; this return precedes finished-child commit and gate handling,
|
|
8251
|
+
// so those success-only terminal paths cannot swallow the structured report-deficit facts.
|
|
8031
8252
|
if (!impl.ok) {
|
|
8032
8253
|
finalizeSupervisorDeliveries('next-round-implement-not-ok');
|
|
8033
8254
|
const abort = buildImplementAbortRecord(impl.summary, impl.terminalStatus);
|
|
@@ -8051,7 +8272,11 @@ async function runSelfImplementInner(
|
|
|
8051
8272
|
salvageStatusExpected: false,
|
|
8052
8273
|
...(abort.terminalStatus ? { terminalStatus: abort.terminalStatus } : {}),
|
|
8053
8274
|
});
|
|
8054
|
-
return { ok: false, stage: 'aborted', node: 'implement', ...resolveRunOutcome({ termination: 'abandoned' }),
|
|
8275
|
+
return { ok: false, stage: 'aborted', node: 'implement', ...resolveRunOutcome({ termination: 'abandoned' }),
|
|
8276
|
+
...(tddEvidenceFailure ? { terminationReason: tddEvidenceFailure.reason, tddEvidenceFailure }
|
|
8277
|
+
: goalOnlyReworkExhausted ? { terminationReason: 'goal-only-rework-exhausted' as const } : {}),
|
|
8278
|
+
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,
|
|
8279
|
+
...(blockedDraftPrFailureKind ? { detailKind: blockedDraftPrFailureKind } : {}) };
|
|
8055
8280
|
}
|
|
8056
8281
|
|
|
8057
8282
|
if (finishedChildCommitMissing) {
|
|
@@ -55,8 +55,11 @@ export function readRunChart(runId: string, device: RunChartDevice, dir: string)
|
|
|
55
55
|
export function runChartMetrics(entries: readonly RunLedgerEntry[]): { emptyHandoffs: number; unreadHandoffs: number; conflictingVerdicts: number } {
|
|
56
56
|
const cells = entries.filter((e) => e.event === 'run-chart-cell');
|
|
57
57
|
const emptyHandoffs = cells.filter((e) => !String(e.data.handoff ?? '').trim()).length;
|
|
58
|
-
const unreadHandoffs = cells.filter((e) =>
|
|
59
|
-
|
|
58
|
+
const unreadHandoffs = cells.filter((e) => {
|
|
59
|
+
const handoff = String(e.data.handoff ?? '').trim().toLowerCase();
|
|
60
|
+
return handoff !== '' && handoff !== 'none'
|
|
61
|
+
&& !cells.some((next) => next.data.readStopKeys instanceof Array && next.data.readStopKeys.includes(String(e.data.stopKey)));
|
|
62
|
+
}).length;
|
|
60
63
|
const verdicts = new Map<string, Set<string>>();
|
|
61
64
|
for (const cell of cells) {
|
|
62
65
|
const key = `${String(cell.data.device)}\0${String(cell.data.stopKey)}`;
|
|
@@ -90,7 +93,7 @@ export function recordRunChartDecision(input: RunChartDecision): RunChartWriteRe
|
|
|
90
93
|
}
|
|
91
94
|
append.push({ timestamp: new Date().toISOString(), runId: input.runId, event: 'run-chart-cell', data: {
|
|
92
95
|
device: input.device, stopKey: input.stopKey, observed: input.observed.slice(0, 240), verdict: input.verdict,
|
|
93
|
-
action: input.action, handoff: input.handoff, why: input.why.slice(0, 240), readStopKeys: input.readStopKeys.slice(-RUN_CHART_READ_CELLS),
|
|
96
|
+
action: input.action, handoff: input.handoff ?? 'none', why: input.why.slice(0, 240), readStopKeys: input.readStopKeys.slice(-RUN_CHART_READ_CELLS),
|
|
94
97
|
...(input.waitCount === undefined ? {} : { waitCount: input.waitCount }),
|
|
95
98
|
...(input.failureClass === undefined ? {} : { failureClass: input.failureClass }),
|
|
96
99
|
} });
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { appendFileSync, closeSync, existsSync, mkdirSync, openSync, readFileSync, readSync, readdirSync, statSync, unlinkSync, writeFileSync } from 'node:fs';
|
|
1
|
+
import { appendFileSync, closeSync, existsSync, mkdirSync, openSync, readFileSync, readSync, readdirSync, statSync, truncateSync, unlinkSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { createHash } from 'node:crypto';
|
|
2
3
|
import { dirname, isAbsolute, join, resolve } from 'node:path';
|
|
3
4
|
import { parse as parseYaml } from 'yaml';
|
|
4
5
|
import { refuseProductionLedgerWriteInTest } from '../harness/ledger-write-guard.js';
|
|
@@ -32,9 +33,15 @@ export interface RunLedgerEntry {
|
|
|
32
33
|
shardIdentityReadFailure?: RunShardIdentityReadFailure;
|
|
33
34
|
}
|
|
34
35
|
|
|
36
|
+
/** Stable signature for an ordered observed route; callers record the evidence basis separately. */
|
|
37
|
+
export function pathSignatureOf(steps: readonly { readonly from: string; readonly to: string; readonly skipped?: readonly string[] }[]): string {
|
|
38
|
+
return createHash('sha256').update(JSON.stringify(steps.map(step => [step.from, step.to, step.skipped ?? []]))).digest('hex').slice(0, 12);
|
|
39
|
+
}
|
|
40
|
+
|
|
35
41
|
const RUN_GRAPH_STEP_EVENTS = new Set([
|
|
36
42
|
'node-enter', 'node-exit', 'edge-taken', 'node-skipped', 'node-added', 'edge-rerouted',
|
|
37
43
|
'unit-expanded', 'unit-collapsed', 'pipeline-node-entry', 'pipeline-node-exit', 'graph-edge-taken',
|
|
44
|
+
'graph.path',
|
|
38
45
|
]);
|
|
39
46
|
|
|
40
47
|
function isRunGraphStepEvent(entry: RunLedgerEntry): boolean {
|
|
@@ -192,6 +199,7 @@ export interface RunOriginData extends Record<string, unknown> {
|
|
|
192
199
|
}
|
|
193
200
|
|
|
194
201
|
export type RunLedgerWriter = (entry: RunLedgerEntry) => void;
|
|
202
|
+
export type RunLedgerBatchWriter = (entries: readonly RunLedgerEntry[]) => void;
|
|
195
203
|
export type RunLedgerReader = (path: string, encoding?: 'utf8') => string | Buffer;
|
|
196
204
|
|
|
197
205
|
/** A live PTY lacks its producer correlation id, or that id lacks an observable JSONL ledger. */
|
|
@@ -820,6 +828,48 @@ export function appendRunLedgerEntry(entry: RunLedgerEntry, dir = runLedgerDir()
|
|
|
820
828
|
}
|
|
821
829
|
}
|
|
822
830
|
|
|
831
|
+
/** Append one run's structural graph events as a rollback-protected ledger batch. */
|
|
832
|
+
export function appendRunLedgerEntries(entries: readonly RunLedgerEntry[], dir = runLedgerDir()): void {
|
|
833
|
+
if (entries.length === 0) return;
|
|
834
|
+
const runId = entries[0]!.runId;
|
|
835
|
+
if (!runId || entries.some((entry) => entry.runId !== runId)) throw new Error('run ledger batch must have one runId');
|
|
836
|
+
if (entries.some((entry) => !isRunGraphStepEvent(entry))) throw new Error('run ledger batch accepts graph-step events only');
|
|
837
|
+
if (refuseProductionLedgerWriteInTest(dir, 'run-ledger')) return;
|
|
838
|
+
if (!existsSync(dir)) mkdirSync(dir, { recursive: true });
|
|
839
|
+
const live = runLedgerPath(runId, dir);
|
|
840
|
+
const devProject = process.env.ELANOUS_DEV_PROJECT;
|
|
841
|
+
withRunLedgerLock(dir, runId, () => {
|
|
842
|
+
restoreArchivedRunLedger(dir, runId);
|
|
843
|
+
let lastSequence = lastRunGraphEventSequence(runId, dir);
|
|
844
|
+
const rows = entries.map((entry) => {
|
|
845
|
+
const sequenced = sequenceRunGraphEvent(entry, lastSequence);
|
|
846
|
+
lastSequence = sequenced.seq ?? (typeof sequenced.data.seq === 'number' ? sequenced.data.seq : lastSequence);
|
|
847
|
+
return sequenced.devProject === undefined && typeof devProject === 'string' && devProject.startsWith('prj-')
|
|
848
|
+
? { ...sequenced, devProject }
|
|
849
|
+
: sequenced;
|
|
850
|
+
});
|
|
851
|
+
const lines = rows.map((row) => `${JSON.stringify(row)}\n`).join('');
|
|
852
|
+
const appendLine = separateAppendedLedgerLine(live, lines);
|
|
853
|
+
const existed = existsSync(live);
|
|
854
|
+
const sizeBefore = existed ? statSync(live).size : 0;
|
|
855
|
+
try {
|
|
856
|
+
appendFileSync(live, appendLine, 'utf8');
|
|
857
|
+
} catch (error) {
|
|
858
|
+
try {
|
|
859
|
+
if (existed) truncateSync(live, sizeBefore);
|
|
860
|
+
else if (existsSync(live)) unlinkSync(live);
|
|
861
|
+
} catch (rollbackError) {
|
|
862
|
+
throw new AggregateError([error, rollbackError], `run ledger batch append and rollback failed: ${runId}`);
|
|
863
|
+
}
|
|
864
|
+
throw error;
|
|
865
|
+
}
|
|
866
|
+
});
|
|
867
|
+
for (const entry of entries) {
|
|
868
|
+
try { recordRunRequestVsEffectiveFromLedger(runId, dir, entry); }
|
|
869
|
+
catch { /* This comparison is observation and cannot fail a committed batch. */ }
|
|
870
|
+
}
|
|
871
|
+
}
|
|
872
|
+
|
|
823
873
|
/** Caller decision inside `appendRunLedgerEntryChecked`: either `append` exactly one entry, or skip with `result`. */
|
|
824
874
|
export type RunLedgerCheckedAppendDecision<T> =
|
|
825
875
|
| { append: false; result: T }
|