elanous 0.2.38 → 0.2.41
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/README.md +7 -7
- package/apps/pwa/out/404/index.html +1 -1
- package/apps/pwa/out/404.html +1 -1
- package/apps/pwa/out/_next/static/{RrjXTwz-urRAbChP1bX02 → GiOLWmt4MqDZePubBjA4Q}/_buildManifest.js +1 -1
- package/apps/pwa/out/_next/static/chunks/1115.434ae2ecb0ad986d.js +149 -0
- package/apps/pwa/out/_next/static/chunks/1121.667cec0bcdbb3fdb.js +36 -0
- package/apps/pwa/out/_next/static/chunks/1178.1aa9cad0e7695427.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1197-54da59d250a6e476.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{5203.51e5d8b5f1dcfe53.js → 1219.7e17964e0e7cd8e5.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/1245.1cfd13b26dbd71d6.js +287 -0
- package/apps/pwa/out/_next/static/chunks/1494-f93046ff5c5a124d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1609.2b312797599b8e45.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1661.0dd330f3d89f73f3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/167-0c121e4b47e0f9da.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1700.cdc2bf8cc685e221.js +90 -0
- package/apps/pwa/out/_next/static/chunks/1703-78e46acad29f3cfc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{7573.2376e13c9c21f1f8.js → 1765.679b29625c8e88d4.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/{3528.e4b8ab70d339f965.js → 1800.f7ff51dc4978a958.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/1971-7efb628c471dc5a0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1999-8de7b7bb36801913.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2073.689dcb2680113d76.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2198-557d49184104d165.js +1 -0
- package/apps/pwa/out/_next/static/chunks/221-440ce67fa9f5c839.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8879.ac06755bcf3e44a1.js → 2263.e09b6edea33bad2d.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/2427-8ed8e98624cbd664.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2457-725c5827bc003795.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2491-2718b15a5ccb75a5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2527-5c636a43c7cc5dde.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2692-1027cb16fe4ccf49.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2743.5d3f76948be32b34.js +41 -0
- package/apps/pwa/out/_next/static/chunks/2773.0e80b9d325fb5635.js +32 -0
- package/apps/pwa/out/_next/static/chunks/2873-0f3cb56c8e3528ea.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{9fe1b809.738da85c8b17e3fb.js → 2fdf2931.b431eee4fb468bc3.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{eaad0cba.771200940c529df7.js → 2fe2c302.41b517f88d6fe502.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/3097.864e92bdaa2f4d15.js +79 -0
- package/apps/pwa/out/_next/static/chunks/3136-d6870ba63300a93e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3173-0289113d434e83b7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3230-49298c3b73ef2268.js +1 -0
- package/apps/pwa/out/_next/static/chunks/325-dd9208a1a0ab7ce4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3283.528f430dd043fb4e.js +74 -0
- package/apps/pwa/out/_next/static/chunks/3295.cc8cb13b8f0dae1a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3688-86e3b88abf18cb3b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3804-7220467a5473a8df.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3808.3e1e247ce7bdf889.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{b7478fef.5917716286213fcc.js → 385e4574.e9886ab32759eda3.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/3927.b5473ad109da44c5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3934-98ea94832e194796.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4133.2056bb4d78f621af.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4156.ba4de4a3664f04b4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4297-239ca82f293faab0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4320-dcc5a7734126f4c9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4434.94b4c552a2d91e69.js +148 -0
- package/apps/pwa/out/_next/static/chunks/{8911.bf5e712acb25fb6c.js → 4527.a69f2894d1bc9f4a.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/4579.03e4092f73950965.js +226 -0
- package/apps/pwa/out/_next/static/chunks/{5307.d7328020227880c2.js → 4667.97e31aa38c95c475.js} +4 -4
- package/apps/pwa/out/_next/static/chunks/{6142.913b44e260a3f925.js → 4702.4a4adc1f16d7c93b.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/4815.481501c57b3568d9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/487-d16e698ef14662d9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4888-7a38bf522c9cc6fe.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5034-30e429d6bb086881.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5040-35c494e60dadd97d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/50c6ab1e.81a96e419350909d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5154.4b6a836179356f30.js +94 -0
- package/apps/pwa/out/_next/static/chunks/{8487.291666583bebe640.js → 5159.115f1c2ca471386c.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/5228-a8200df486278f2d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/530.d26346e18089640a.js +115 -0
- package/apps/pwa/out/_next/static/chunks/5379.97af106d09566f69.js +8 -0
- package/apps/pwa/out/_next/static/chunks/{89d6c04f-6b8ab341748e468a.js → 53aeb4ee-51c92f8d683f5220.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{3291.f6c1005387d514bd.js → 5471.1e611302ed3a7c53.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/5479-b6372e762719f92f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5534-699c5cbcbc96c5d7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3086.fb14b60ce98b53d3.js → 5574.f35accf4f132b29d.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/5701.9c4e8f250312eeee.js +24 -0
- package/apps/pwa/out/_next/static/chunks/{1632.7d87f998e714bede.js → 5744.b9415e18ad623100.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{5300.677c97e0393742e6.js → 5892.2526d962339662d8.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/5937.c2df9e3447e1f667.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5941.8210cc93c9202c0a.js +286 -0
- package/apps/pwa/out/_next/static/chunks/{7161-8f22db3ec5ed005e.js → 5947-135e26537d80a6b9.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/{3124-561f7f037943cde2.js → 5964-7e21164a8f2cf0ce.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/5975.4004f820ae3cecd5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6142-7ccd48795d7abd55.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6160.bf9177b8c1bfb243.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6398.71ba0690c8027555.js +27 -0
- package/apps/pwa/out/_next/static/chunks/6492.2bd5c10edc1a064e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6552.a3840aa7da35ad68.js +62 -0
- package/apps/pwa/out/_next/static/chunks/6736.1e36d3ac5fa5e41d.js +24 -0
- package/apps/pwa/out/_next/static/chunks/6874.d5cf7eb8edb2cabe.js +2 -0
- package/apps/pwa/out/_next/static/chunks/6900.3ccbe069bdd4556a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/71327eb4.add50b365f94bf3a.js +122 -0
- package/apps/pwa/out/_next/static/chunks/7136.deca3e3a2ddaa374.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7139-ee9f8ed2677a40b3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{2415.738b777642a02233.js → 7191.fdc955f7d96064a4.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/7423-e0aa5d9e2962120e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7453.afc1ea7e05d56a8c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7503-5e6a3d7fe67e4a0c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7761-476fd7bf768abd34.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7975.eafb12097a0a9e62.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{1026-44010f405704050c.js → 8050-9b364bdef8f71927.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/8152.64e253c35cccfaae.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8190.620f0231b3924bcb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/83184dcd-0ee6247ff41eb3f2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8448.45b6b1f1a99eeb35.js +104 -0
- package/apps/pwa/out/_next/static/chunks/8464-e24f10451b658aac.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8477.e4c944bb3aa5d2f3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8710.ca385257d5ca422e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8830.627ccf294ec2465c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8880.64c445592f04acaf.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8981.c706964c8ba27aff.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{5638.107314dc479e2f37.js → 9048.212083de42d25be3.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/9053.bd0fffaff8d3f836.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9161-c66e723d7ec9d682.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9185.1ecdf9b65c0bb684.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9356.fccd5f58086b4ff5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9446.dc0406109371d329.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9506.dcf25d467a42627e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8019.21ca554a821dad01.js → 9507.7026657a2f47eb64.js} +16 -16
- package/apps/pwa/out/_next/static/chunks/9541.eb8e2f8480c7feca.js +93 -0
- package/apps/pwa/out/_next/static/chunks/9577.ed7582186efa5482.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9579.4a8169600fff2058.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9642-ff2e039eb62e3b92.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9659-8f2323348113ad80.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9724.4c5623af2db43153.js +34 -0
- package/apps/pwa/out/_next/static/chunks/{6493.27ad77de7aac7966.js → 9834.63ab2bbc3153172e.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{3389.012c70767a872f9b.js → 9869.81a1e24ca682d5a0.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{8994d93e.33ba491f95345fc2.js → a0a01613.6d1cca322238d7fe.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{de8b930d.d94c0f42acf807fc.js → addc2b32.8c4ff8f0aefe987d.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/_not-found/page-8d9d76ea322d855c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-ed2c4e59f9f1fe21.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-2dc99e03c5d76ca0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/board/page-b5a3a788330e920f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/botlab/{page-866aac5ff226a7f3.js → page-14949db884bfa672.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/bots/page-ea76c85b36388a97.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-01716d20af62d325.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/chat/page-62baf6881a64b1e9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/consult/page-f89ba590c2af8afa.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/control/page-22f8b0f78d9637e5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-817f9d7e6820be80.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-ffb9bc0d2650249a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/editor/page-f6d0e64873c0f629.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/exec/page-8bfa0d4ba23a209d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/field/page-f5060462249e32c7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/healthz/route-8d9d76ea322d855c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/inside/page-b2049f8b1ef79117.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/intake/page-1446c5fa93907f11.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/layout-b48a7a07c5204156.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live/page-e974b8c4ca47614c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live-run/page-8a919b869bd28594.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/loops/page-d31b8de6bfcd72ed.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/market/page-64765f817909db29.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-d128c8569a36ee9b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/morning/page-b2679d357e9b9270.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/not-found-6fabec98a9e7b269.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-048f30149dcf1349.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-9113181d6b5a2725.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-40f9e19149024298.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-1e7a755a13227611.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-3c8f8b67a203cf07.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/page-18032f5437215062.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-da3b739192fd0ee3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-d332545571bd6fd1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-5237aa5b3f3b8ec5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-a142dfb0331a05f5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/page-d16e56c3989c147e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-6b6593600869e2cd.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/layout-8d9d76ea322d855c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/page-29e8b8a8396b55cb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/share/page-b3414d856a1a7e2f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-c3affa52b7ce961b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-f21dddf9f95b6fab.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/term/page-f5a30a24745bf088.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/today/page-8c8569a09b4d4e34.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/trace/page-2ce32722c0243483.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/vault/page-4767b0d9c0a98c6c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-116ee1339c387a75.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-35e8c50ca4ef7ffc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-52e17113356bb891.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-7458ae05ed2ac1a0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/b2271e54.c1de3347976e90b0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{b7459770.6539b11860eb8a9c.js → c0c1a699.0ba79f97005965d4.js} +7 -7
- package/apps/pwa/out/_next/static/chunks/framework-ad6c9dd524ad6ef8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/main-app-2ddd1f2b44d6aa59.js +1 -0
- package/apps/pwa/out/_next/static/chunks/main-e3d82bdc358d20c5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/pages/_app-71d5aa3896e1655f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/pages/_error-03ffc54e00438546.js +1 -0
- package/apps/pwa/out/_next/static/chunks/webpack-56bb89af5a611d0b.js +1 -0
- package/apps/pwa/out/approvals/index.html +1 -1
- package/apps/pwa/out/approvals/index.txt +22 -22
- package/apps/pwa/out/autopilot/index.html +1 -1
- package/apps/pwa/out/autopilot/index.txt +22 -22
- package/apps/pwa/out/board/index.html +1 -1
- package/apps/pwa/out/board/index.txt +22 -22
- package/apps/pwa/out/botlab/index.html +1 -1
- package/apps/pwa/out/botlab/index.txt +21 -21
- package/apps/pwa/out/bots/index.html +1 -1
- package/apps/pwa/out/bots/index.txt +21 -21
- package/apps/pwa/out/ceo/index.html +1 -1
- package/apps/pwa/out/ceo/index.txt +22 -22
- package/apps/pwa/out/chat/index.html +1 -1
- package/apps/pwa/out/chat/index.txt +21 -21
- package/apps/pwa/out/consult/index.html +1 -1
- package/apps/pwa/out/consult/index.txt +22 -22
- package/apps/pwa/out/control/index.html +1 -1
- package/apps/pwa/out/control/index.txt +22 -22
- package/apps/pwa/out/decisions/index.html +1 -1
- package/apps/pwa/out/decisions/index.txt +21 -21
- package/apps/pwa/out/design-check/index.html +1 -1
- package/apps/pwa/out/design-check/index.txt +22 -22
- package/apps/pwa/out/editor/index.html +1 -1
- package/apps/pwa/out/editor/index.txt +22 -22
- package/apps/pwa/out/exec/index.html +1 -1
- package/apps/pwa/out/exec/index.txt +22 -22
- package/apps/pwa/out/field/index.html +1 -1
- package/apps/pwa/out/field/index.txt +22 -22
- package/apps/pwa/out/healthz +1 -1
- package/apps/pwa/out/index.html +1 -1
- package/apps/pwa/out/index.txt +21 -21
- package/apps/pwa/out/inside/index.html +1 -1
- package/apps/pwa/out/inside/index.txt +21 -21
- package/apps/pwa/out/intake/index.html +1 -1
- package/apps/pwa/out/intake/index.txt +22 -22
- package/apps/pwa/out/live/index.html +1 -1
- package/apps/pwa/out/live/index.txt +22 -22
- package/apps/pwa/out/live-run/index.html +1 -1
- package/apps/pwa/out/live-run/index.txt +22 -22
- package/apps/pwa/out/loops/index.html +1 -1
- package/apps/pwa/out/loops/index.txt +21 -21
- package/apps/pwa/out/market/index.html +1 -1
- package/apps/pwa/out/market/index.txt +21 -21
- package/apps/pwa/out/missions/placeholder/index.html +1 -1
- package/apps/pwa/out/missions/placeholder/index.txt +21 -21
- package/apps/pwa/out/morning/index.html +1 -1
- package/apps/pwa/out/morning/index.txt +22 -22
- package/apps/pwa/out/observatory/index.html +1 -1
- package/apps/pwa/out/observatory/index.txt +22 -22
- package/apps/pwa/out/ops/checklist/index.html +1 -1
- package/apps/pwa/out/ops/checklist/index.txt +21 -21
- package/apps/pwa/out/ops/release/index.html +1 -1
- package/apps/pwa/out/ops/release/index.txt +21 -21
- package/apps/pwa/out/ops/seats/index.html +1 -1
- package/apps/pwa/out/ops/seats/index.txt +21 -21
- package/apps/pwa/out/outputs/index.html +1 -1
- package/apps/pwa/out/outputs/index.txt +21 -21
- package/apps/pwa/out/reflection/index.html +1 -1
- package/apps/pwa/out/reflection/index.txt +22 -22
- package/apps/pwa/out/scheduler/index.html +1 -1
- package/apps/pwa/out/scheduler/index.txt +22 -22
- package/apps/pwa/out/sessions/index.html +1 -1
- package/apps/pwa/out/sessions/index.txt +21 -21
- package/apps/pwa/out/settings/devices/index.html +1 -1
- package/apps/pwa/out/settings/devices/index.txt +22 -22
- package/apps/pwa/out/settings/index.html +1 -1
- package/apps/pwa/out/settings/index.txt +22 -22
- package/apps/pwa/out/setup/done/index.html +1 -1
- package/apps/pwa/out/setup/done/index.txt +22 -22
- package/apps/pwa/out/setup/index.html +1 -1
- package/apps/pwa/out/setup/index.txt +22 -22
- package/apps/pwa/out/share/index.html +1 -1
- package/apps/pwa/out/share/index.txt +22 -22
- package/apps/pwa/out/showroom/index.html +1 -1
- package/apps/pwa/out/showroom/index.txt +21 -21
- package/apps/pwa/out/tasks/index.html +1 -1
- package/apps/pwa/out/tasks/index.txt +22 -22
- package/apps/pwa/out/term/index.html +1 -1
- package/apps/pwa/out/term/index.txt +22 -22
- package/apps/pwa/out/today/index.html +1 -1
- package/apps/pwa/out/today/index.txt +22 -22
- package/apps/pwa/out/trace/index.html +1 -1
- package/apps/pwa/out/trace/index.txt +22 -22
- package/apps/pwa/out/vault/index.html +1 -1
- package/apps/pwa/out/vault/index.txt +22 -22
- package/apps/pwa/out/workflows/chat-ui/index.html +1 -1
- package/apps/pwa/out/workflows/chat-ui/index.txt +22 -22
- package/apps/pwa/out/workflows/index.html +1 -1
- package/apps/pwa/out/workflows/index.txt +22 -22
- package/apps/pwa/out/workspace/index.html +1 -1
- package/apps/pwa/out/workspace/index.txt +22 -22
- package/apps/pwa/out/worktrees/index.html +1 -1
- package/apps/pwa/out/worktrees/index.txt +22 -22
- package/bin/elanous.mjs +6 -1
- package/catalog/models/openai/gpt-6.1-sol.yaml +16 -0
- package/catalog/models/openai/gpt-6.1-terra.yaml +16 -0
- package/graphs/demo/persona-marketer/fixtures/marketer-scenario.yaml +10 -0
- package/graphs/demo/persona-marketer/persona-marketer.yaml +25 -0
- package/graphs/demo/persona-marketer/recipes.yaml +19 -0
- package/graphs/demo/persona-teacher/lesson-pack.yaml +16 -0
- package/graphs/demo/persona-teacher/recipes.yaml +17 -0
- package/graphs/demo/persona-teacher/weekly-lesson.yaml +36 -0
- package/graphs/overlays/stop-heal-ladder.yaml +23 -2
- package/graphs/release/release-loop.yaml +3 -1
- package/graphs/units/gate/gate.yaml +20 -0
- package/graphs/units/git/git.yaml +26 -0
- package/graphs/units/implement/implement.yaml +19 -0
- package/graphs/units/landing/landing.yaml +18 -0
- package/graphs/units/review/review.yaml +20 -0
- package/graphs/units/verbs/recipes.yaml +3 -0
- package/graphs/units/verbs/research.yaml +20 -0
- package/graphs/video/explainer-line.yaml +4 -1
- package/graphs/work/research-report.yaml +11 -1
- package/package.json +1 -1
- package/scripts/dead-code/report.ts +169 -0
- package/scripts/disk-steward.ts +46 -0
- package/scripts/fleet/node-setup.sh +50 -0
- package/scripts/graph-units/verbs/research.ts +55 -0
- package/scripts/lib/morning-report-options.ts +3 -4
- package/scripts/lib/tui-regress-evidence.ts +56 -0
- package/scripts/llm-cost-ledger.ts +179 -8
- package/scripts/measure-nl-routing-corpus.ts +10 -2
- package/scripts/morning-report.ts +5 -1
- package/scripts/persona-teacher/weekly-lesson-node.ts +172 -0
- package/scripts/public-copy-lint.ts +163 -19
- package/scripts/public-export.ts +15 -7
- package/scripts/ratchets/train-side-invariants.sh +0 -1
- package/scripts/release-loop/export-check-node.ts +21 -3
- package/scripts/release-loop/gate-autoheal.ts +117 -0
- package/scripts/release-loop/gate-baseline-receipt.ts +8 -1
- package/scripts/release-loop/gate-diff.ts +22 -3
- package/scripts/release-loop/gate-node.ts +583 -64
- package/scripts/release-loop/gate-shard-dispatch.ts +128 -0
- package/scripts/release-loop/gate-shard-load-flaky.ts +256 -0
- package/scripts/release-loop/gate-shard-receipts.ts +89 -0
- package/scripts/release-loop/gate-triage-node.ts +70 -10
- package/scripts/release-loop/gate-wall.ts +5 -5
- package/scripts/release-loop/preflight.ts +6 -2
- package/scripts/release-loop/resume-release.ts +267 -20
- package/scripts/release-loop/resume.ts +48 -0
- package/scripts/release-loop/traffic-node.ts +6 -3
- package/scripts/release-loop/unattended-release.ts +4 -2
- package/scripts/release-loop/version-node.ts +7 -2
- package/scripts/release-story/draft.ts +1 -1
- package/scripts/research-bench/README.md +53 -0
- package/scripts/research-bench/questions.json +66 -0
- package/scripts/research-bench/rubric.md +33 -0
- package/scripts/research-bench/run.ts +523 -0
- package/scripts/shadow-authoring-probe.ts +20 -0
- package/scripts/tui-regress.ts +85 -10
- package/scripts/ux-sim.ts +19 -2
- package/src/acp/core-turn-bridge.ts +94 -4
- package/src/agent/autonomous-tools.ts +10 -3
- package/src/agent/monad-agent-turn.ts +4 -1
- package/src/agent/registry.ts +26 -2
- package/src/agent/shared-app-tools.ts +1 -1
- package/src/agent/surface-ux/build.ts +12 -3
- package/src/agent/surface-ux/types.ts +1 -1
- package/src/agent/task-notification.ts +75 -6
- package/src/agent/types.ts +3 -0
- package/src/agent-mission/driver.ts +29 -3
- package/src/agent-mission/mission-cli.ts +2 -1
- package/src/agent-substrate/review-context-pack.ts +365 -0
- package/src/agent-substrate/self-review-cli.ts +291 -20
- package/src/ask-user-question/index.ts +6 -0
- package/src/ask-user-question/inline-resolver.ts +49 -0
- package/src/auto-research/question-ladder-contract.ts +22 -3
- package/src/auto-research/research-turn.ts +359 -17
- package/src/autopilot/agent-loop.ts +1 -1
- package/src/autopilot/discovery/wiki-claim-proposer.ts +22 -1
- package/src/autopilot/pty-control-loop.ts +8 -1
- package/src/boot/daemon-tools/index.ts +4 -3
- package/src/boot/daemon-tools/self-implement.ts +312 -7
- package/src/boot/daemon-tools/types.ts +2 -0
- package/src/budget/llm-cost.ts +44 -5
- package/src/budget/shadow-arms.ts +52 -0
- package/src/budget/unified-usage.ts +17 -1
- package/src/capture/tui-self-report.ts +14 -0
- package/src/chat/index.ts +33 -7
- package/src/chat/pickers/state.ts +7 -1
- package/src/cli/agent-cli.ts +43 -8
- package/src/cli/intake-cli.ts +22 -1
- package/src/cli/lesson-cli.ts +19 -3
- package/src/cli/log-event-names.ts +6 -0
- package/src/cli/mcp-login.ts +8 -18
- package/src/cli/msg-cli.ts +57 -1
- package/src/cli/pod-cli.ts +17 -2
- package/src/cli/pr-land-heavy-remote.ts +15 -9
- package/src/cli/pty-takeover-cli.ts +67 -7
- package/src/cli/release-cli.ts +79 -7
- package/src/cli/repo-cli.ts +2 -1
- package/src/cli/sim-cli.ts +7 -1
- package/src/cli/tasks-cli.ts +41 -13
- package/src/codex/models.ts +30 -15
- package/src/control-plane/ledger.ts +21 -4
- package/src/core-turn/run-core-turn.ts +47 -3
- package/src/core-turn/run-goal-loop.ts +240 -10
- package/src/core-turn/types.ts +9 -0
- package/src/dashboard/acp-boot.ts +72 -3
- package/src/dashboard/chat/acp-chat.ts +2 -2
- package/src/dashboard/classic-sigquit.ts +16 -0
- package/src/dashboard/index.ts +327 -27
- package/src/dashboard/input/chat-main-interaction-opts.ts +3 -0
- package/src/dashboard/input/chat-main-plain-turn-runtime.ts +7 -2
- package/src/dashboard/input/chat-main-slash-command.ts +7 -0
- package/src/dashboard/input/dashboard-plain-turn-stream.ts +4 -0
- package/src/dashboard/input/dashboard-priority-key-route.ts +21 -5
- package/src/dashboard/input/external-input-host.ts +2 -0
- package/src/dashboard/sidetab-runtime.ts +228 -0
- package/src/dashboard/slash-runtime/ask-clarification.ts +7 -1
- package/src/dashboard/slash-runtime/dashboard-handlers.ts +20 -8
- package/src/dashboard/slash-runtime/help-from-registry.ts +2 -2
- package/src/dashboard/term-slash-runtime.ts +16 -18
- package/src/dashboard/turn-preamble.ts +14 -1
- package/src/disk-steward/judge.ts +73 -0
- package/src/disk-steward/ledger.ts +122 -0
- package/src/disk-steward/steward.ts +373 -0
- package/src/domains/guardian-tick.ts +191 -2
- package/src/domains/knowledge.ts +1 -1
- package/src/esc-abort-gate.ts +33 -1
- package/src/execution-loop/launch-gate.ts +206 -1
- package/src/graph-runner/graph-cli.ts +27 -4
- package/src/graph-runner/in-process-registry.ts +37 -0
- package/src/graph-runner/runner.ts +63 -11
- package/src/graph-wizard/generate.ts +16 -7
- package/src/graph-wizard/mission-compose.ts +201 -0
- package/src/grok/agent-search.ts +8 -2
- package/src/grok/credential.ts +5 -0
- package/src/grounding/ref-index.ts +30 -0
- package/src/grounding/ref-vector.ts +61 -0
- package/src/grounding/sources-cli.ts +11 -3
- package/src/grounding/sources.ts +15 -1
- package/src/harness/harness-cli-command.ts +305 -23
- package/src/harness/harness-incidents.ts +312 -7
- package/src/harness/harness-pod-dispatch.ts +7 -1
- package/src/harness/harness-space.ts +15 -1
- package/src/harness/progress-worker-entry.ts +59 -0
- package/src/harness/progress-worker-runtime.ts +11 -0
- package/src/index.ts +35 -5
- package/src/input/external-input-queue.ts +10 -0
- package/src/instance/dev-project.ts +25 -0
- package/src/intake-plane/collect-telegram-saved.ts +36 -1
- package/src/intake-plane/intake-to-tasks.ts +246 -3
- package/src/intelligence-map/model-alias.ts +6 -5
- package/src/intelligence-map/model-catalog.ts +59 -2
- package/src/lessons/friction-ledger.ts +154 -0
- package/src/live-supply/collector.ts +149 -0
- package/src/live-supply/probes.ts +52 -0
- package/src/live-supply/snapshot.ts +40 -0
- package/src/llm/model-defaults.ts +4 -4
- package/src/llm.ts +473 -87
- package/src/loops/orchestrator/tick.ts +56 -0
- package/src/mcp/mcp-oauth.ts +3 -1
- package/src/model-tier/llm-tier-map.ts +9 -9
- package/src/model-tier/turn-tier.ts +1 -1
- package/src/msg/msg-mirror-github.ts +80 -0
- package/src/msg/msg-mirror-policy.ts +61 -0
- package/src/msg/msg-mirror-runner.ts +219 -0
- package/src/msg/msg-mirror-state.ts +33 -0
- package/src/msg/msg-store.ts +11 -0
- package/src/nexus/api/harness-api.ts +2 -1
- package/src/output-truncation.ts +41 -12
- package/src/project/project-store.ts +48 -1
- package/src/pty/snapshot.py +132 -0
- package/src/pty-shell/pty-control-ipc.ts +29 -2
- package/src/pty-shell/pty-manifest.ts +59 -3
- package/src/pty-shell/registry.ts +2 -0
- package/src/pty-shell/tui-run-state.ts +80 -3
- package/src/release-loop/gate-host-reservation.ts +157 -4
- package/src/release-loop/gate-shard-ledger.ts +68 -0
- package/src/release-loop/merged-pr-checklist.ts +25 -2
- package/src/release-loop/rehearsal-shard-plan.ts +6 -1
- package/src/release-loop/rehearsal.ts +27 -0
- package/src/release-loop/release-schedule.ts +90 -1
- package/src/research/bloom-exemplars.ts +135 -0
- package/src/research/edge-decision.ts +124 -15
- package/src/research/gap-followup.ts +249 -0
- package/src/research/lenses/counter-evidence.ts +100 -0
- package/src/research/lenses/working-backwards.ts +89 -0
- package/src/research/plugin-discovery.ts +242 -0
- package/src/research-bridge/invoke.ts +4 -2
- package/src/research-bridge/types.ts +2 -0
- package/src/self-dev/ask-launch-flow.ts +73 -131
- package/src/self-dev/dev-cli.ts +19 -17
- package/src/self-dev/dev-pipeline.ts +8 -4
- package/src/self-dev/graph-front-nodes.ts +23 -0
- package/src/self-dev/graph-journey-route.ts +10 -2
- package/src/self-dev/launch-preflight-text.ts +2 -2
- package/src/self-dev/launch-preflight.ts +47 -11
- package/src/self-dev/orchestrate-cli.ts +1 -0
- package/src/self-dev/orchestrate.ts +15 -0
- package/src/self-dev/run-supervisor.ts +204 -3
- package/src/self-dev/run-types.ts +3 -0
- package/src/self-implement/device-first.ts +8 -2
- package/src/self-implement/doctor-visit.ts +76 -58
- package/src/self-implement/gate-artifacts.ts +16 -0
- package/src/self-implement/gate-baseline.ts +75 -4
- package/src/self-implement/gate-cli.ts +368 -30
- package/src/self-implement/gate-receipt-registry.ts +180 -0
- package/src/self-implement/gate-remote.ts +165 -24
- package/src/self-implement/goal-author-clarification.ts +205 -32
- package/src/self-implement/goal-author-decompose.ts +24 -15
- package/src/self-implement/goal-author.ts +86 -10
- package/src/self-implement/graph-stage-units.ts +172 -0
- package/src/self-implement/graph-templates.ts +162 -1
- package/src/self-implement/graph-variant.ts +37 -4
- package/src/self-implement/host-regate.ts +124 -49
- package/src/self-implement/impl-findings-feedback.ts +188 -0
- package/src/self-implement/knowhow-pack.ts +227 -10
- package/src/self-implement/off-diff-evidence.ts +124 -0
- package/src/self-implement/orchestrator.ts +320 -28
- package/src/self-implement/run-ledger.ts +110 -14
- package/src/self-implement/run-stop.ts +33 -2
- package/src/self-implement/running-runs.ts +35 -12
- package/src/self-implement/seams.ts +6 -3
- package/src/self-implement/self-implement-cli.ts +40 -6
- package/src/self-implement/stop-autoheal-operational.ts +43 -0
- package/src/self-implement/stop-autoheal.ts +15 -6
- package/src/session/chat.ts +66 -15
- package/src/session/request-size-guard.ts +123 -0
- package/src/session-runtime/provider-circuit.ts +140 -0
- package/src/shell-runner/file-engine.ts +1 -0
- package/src/shell-runner/types.ts +4 -0
- package/src/sidetab-core/model.ts +312 -0
- package/src/skills/tools/schedule-wakeup.ts +23 -1
- package/src/skills/tools/shell.ts +51 -5
- package/src/steward/directive-audit.ts +354 -0
- package/src/surface/child-process.ts +31 -0
- package/src/surface/tui-stderr-owner.ts +48 -0
- package/src/task-agent/cover.ts +30 -12
- package/src/task-agent/judge.ts +56 -0
- package/src/task-agent/parent-host.ts +14 -1
- package/src/task-agent/postland-card.ts +35 -2
- package/src/task-agent/rejudge-on-head.ts +46 -2
- package/src/task-agent/repair-cycle.ts +1 -1
- package/src/task-agent/task-hand.ts +133 -25
- package/src/task-agent/tier-split.ts +105 -21
- package/src/task-orchestrator/surfaces/pod-command-job.ts +330 -2
- package/src/task-orchestrator/surfaces/pod-config-snapshot.ts +123 -0
- package/src/task-orchestrator/surfaces/pod-failure-reason.ts +70 -2
- package/src/task-orchestrator/surfaces/pod-ledger-events.ts +29 -4
- package/src/task-orchestrator/surfaces/pod-mirror-seed.ts +11 -8
- package/src/task-orchestrator/surfaces/pod-si-warm-protocol.ts +1 -1
- package/src/task-orchestrator/surfaces/pod-source-receive.ts +74 -6
- package/src/task-orchestrator/surfaces/pod-warm-worker-pod.ts +2 -1
- package/src/task-orchestrator/surfaces/pod-warm-worker-provider.ts +56 -15
- package/src/task-orchestrator/surfaces/self-implement-pod.ts +298 -45
- package/src/task-orchestrator/surfaces/self-implement.ts +18 -0
- package/src/tool-runtime/skill-exec-runtime.ts +95 -5
- package/src/tui/entry.ts +25 -5
- package/src/tui/inline-choice.ts +188 -0
- package/src/tui/sidetab/list.ts +36 -165
- package/src/tui/sidetab/nl-tool.ts +2 -136
- package/src/tui/sidetab/peek.ts +52 -0
- package/src/tui/slash/term.ts +12 -1
- package/src/tui-client/dashboard-session.ts +10 -1
- package/src/user-config.ts +45 -9
- package/src/ux-sim/classic-tui-seat-scenarios.ts +1 -7
- package/src/ux-sim/fake-land-queue.ts +88 -0
- package/src/ux-sim/fault-needs-human-reason-repair.ts +107 -0
- package/src/ux-sim/fault-pod-child-result.ts +42 -0
- package/src/ux-sim/gate-shard-host-reroute.ts +82 -0
- package/src/ux-sim/goal-interim-trace.ts +24 -0
- package/src/ux-sim/next-tui-seat-scenarios.ts +8 -13
- package/src/ux-sim/release-sim-rig.ts +262 -0
- package/src/ux-sim/seminar-rehearsal.ts +109 -0
- package/src/ux-sim/subagent-tools-device.ts +2 -2
- package/src/ux-sim/task-orchestrator-surfaces-self-implement-pod-device.ts +4 -1
- package/src/version/packed-revision.json +1 -1
- package/src/video-pipeline/recipes/explainer.ts +54 -2
- package/src/web-search/grok.ts +32 -6
- package/src/web-search/index.ts +8 -7
- package/src/workflow-runtime/node-catalog.ts +53 -4
- package/apps/pwa/out/_next/static/chunks/1118.a8a74ea29aac3e46.js +0 -27
- package/apps/pwa/out/_next/static/chunks/1204-2aa830479adf80f4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1341-43b7d2dc77d45c9d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1440-c3ea8882badfd9bf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1698-9c11cbf97f13717e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1770-3b1fc92253ef9f2f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1923-5c1695332240246a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1938.0e6c60ee91c4d7f5.js +0 -148
- package/apps/pwa/out/_next/static/chunks/2104.70e086d5174a4736.js +0 -1
- package/apps/pwa/out/_next/static/chunks/213-20675f20673ba22a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/214.186a430da28338f1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2277.3bd4c0ac7f1b5996.js +0 -93
- package/apps/pwa/out/_next/static/chunks/240.e09f433f71c78ff4.js +0 -104
- package/apps/pwa/out/_next/static/chunks/2417.02151393605a7cd0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2463.cd2641a76daaa9ff.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2576.b9e9c629c4b84c52.js +0 -1
- package/apps/pwa/out/_next/static/chunks/265-c021de53f0865bd9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2998-b1cc13956cd6a6e7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2e4782d3.ba2f0ab2b63a53e7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3130.626b54382b4dc379.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3221-1bb3f99a55088613.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3280.24edb1ffd03a7f3f.js +0 -24
- package/apps/pwa/out/_next/static/chunks/3288-eb3c22a1cbf2ae68.js +0 -1
- package/apps/pwa/out/_next/static/chunks/33.ef99e8374f96c6c4.js +0 -36
- package/apps/pwa/out/_next/static/chunks/3341-f09b9efbd7a82f70.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3410-d7c0f14b329d6fda.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3421.c87d6313a7d670f7.js +0 -287
- package/apps/pwa/out/_next/static/chunks/3422-83a3953f9bd67e26.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3587-002e24e368c515a9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3644.f12a7d821ab940af.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3660.d7516588e2d875c3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3695.b82e2610f4cd4ea9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3858.ca1f5bc0f577eac9.js +0 -94
- package/apps/pwa/out/_next/static/chunks/3959-e6ac4a139d9d4bcc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3f0de3de-2340c532c00395db.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4032.53f62176514ec0ea.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4199-f7c6eb40cd0322f8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4204-ef8484cbecd5d62f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4259-163129ca79913c4b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/428-eaa77df3d0c85969.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4432-97e400ffa1e161f5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/449-aa427cf2cbb75f50.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4491-39a0fd32bbaf3840.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4588.b7cf06d382953979.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4690.70ec8060825366ab.js +0 -32
- package/apps/pwa/out/_next/static/chunks/4804.6012b5cd33c22792.js +0 -90
- package/apps/pwa/out/_next/static/chunks/4881.e4d22d730e3b9df5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4937.ce2e340dc29cad3e.js +0 -79
- package/apps/pwa/out/_next/static/chunks/5-bb1c08d84bd71df3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5005.de98df23b37cdf3c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5035.dc64a89cad5573cc.js +0 -74
- package/apps/pwa/out/_next/static/chunks/5041-5aada92ca215ffdd.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5207.1a224035455790fd.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5255-1b60d50eabe9f057.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5269.d0436ee6d773382a.js +0 -286
- package/apps/pwa/out/_next/static/chunks/5309.3367c4d50f52b489.js +0 -1
- package/apps/pwa/out/_next/static/chunks/552-689827d49780fa00.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5539.34cc9d60622cb69b.js +0 -8
- package/apps/pwa/out/_next/static/chunks/5568.218dea0c00ca2ec7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5645.b7e3b055455a04ea.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5662.18cc0f30353cbd96.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5671.da24fc9dc5e98325.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5b141171.324c40fd49cb6821.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6175-d4621f6a10b0cfab.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6290.3eb53a20746b72ce.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6415-9307f3eafa90837f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6579-3de35d00aacd71b5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/680-2f324c4e039a5b67.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6845-331b3c7481da3ba3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7000.28157393caaf5343.js +0 -62
- package/apps/pwa/out/_next/static/chunks/7311-60a7ea80d23c7521.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7401.525d0a12f7d02c06.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7438.c2cf72b66dca6aa4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7488.966b116789f3d41a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7524.ce973525d30b3d52.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7577.ea6e9ac72e035520.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7628.6b16863ac3972333.js +0 -34
- package/apps/pwa/out/_next/static/chunks/7657.8d1fb3d2f7ebe273.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7903-1435d5d2f0dd7807.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7954.4f7a8832663ee979.js +0 -115
- package/apps/pwa/out/_next/static/chunks/7978-30a91192c5dbe3c2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8025-8795821525cf1a07.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8191.3674a00f0b565c23.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8217-604955d8885c5ef2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8298-eed6f5f2585a63f4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8509.3a54d4e61893d7cb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8758.ac421f726a189125.js +0 -1
- package/apps/pwa/out/_next/static/chunks/891.d6c723a51a067b36.js +0 -149
- package/apps/pwa/out/_next/static/chunks/9223.cbcc88e0e9950426.js +0 -41
- package/apps/pwa/out/_next/static/chunks/9299.24e2a7d9b6d1f91b.js +0 -226
- package/apps/pwa/out/_next/static/chunks/9317.6a9869039c231bb3.js +0 -24
- package/apps/pwa/out/_next/static/chunks/9383.e4755f275b3c11ff.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9581.da63ddf41acfad46.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9715.8c5529a0a5c41a36.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9817.3009d65f0889ef1f.js +0 -2
- package/apps/pwa/out/_next/static/chunks/app/_not-found/page-76873dd80da4f715.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-ed32b6ec5dea8f23.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-fdd40e15babf3d25.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/board/page-384efc78e85e400b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/bots/page-d91809c5aeed319a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-128f3522f89a81ab.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/chat/page-595961abf3b43ad1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/consult/page-f41dccb76d8c0263.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/control/page-a3205c2e28b7d0d9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-c39a80277814a3f4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-1ab3f98194513195.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/editor/page-a5246f7e254d77d0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/exec/page-0f92287bdb81217d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/field/page-5a37131ff63793ef.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/healthz/route-76873dd80da4f715.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/inside/page-ac4bd14bb2348bfd.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/intake/page-c348a3959c5b5fc6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/layout-2addd81c0d3e2906.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live/page-da6b765f58a3eefb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live-run/page-0661e40f8780c32c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/loops/page-b89af1b1c8e4875b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/market/page-da8aeb82ba751cdb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-cc71317b239439db.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/morning/page-bde7fc1d64ffe369.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/not-found-e2797214f713fa58.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-2a35bcda70defaf6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-3af03deedde45032.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-d1d1210f99f620ae.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-46d1b5500885861d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-291ab19fe2acb173.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/page-7f569e533ddeecba.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-990129c9fee46d8f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-7737f785ebb1cdaf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-9f3c73a4f7ffd2f8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-03be7fb347f01058.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/page-96b0280625e4df2b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-56855545049eb56d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/layout-76873dd80da4f715.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/page-79a909c9981f0338.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/share/page-a9d9a3e66459c1e0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-c383cbf2013f7069.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-f57c6a2e54dbdca4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/term/page-6b140f77593576eb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/today/page-6b767ae2d9d0adfc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/trace/page-116d6198d5da0e3d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/vault/page-b9c9b778c7501370.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-a6c78392ab8f6335.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-455183deb4ed0cfe.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-6a63e99526bd63d0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-31c22caafe788c08.js +0 -1
- package/apps/pwa/out/_next/static/chunks/bb6987f9.3647e1a23b0e3217.js +0 -122
- package/apps/pwa/out/_next/static/chunks/framework-4b12a946f352cee2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-941155250ed2644b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-app-f8b6765abed6d149.js +0 -1
- package/apps/pwa/out/_next/static/chunks/pages/_app-78432194c85388f9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/pages/_error-cdf7390829512b1b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/webpack-d5f0964a9c2e92d2.js +0 -1
- package/scripts/ratchets/next-tui-entry-budget.ts +0 -124
- /package/apps/pwa/out/_next/static/{RrjXTwz-urRAbChP1bX02 → GiOLWmt4MqDZePubBjA4Q}/_ssgManifest.js +0 -0
|
@@ -414,12 +414,20 @@ export function runGraphVariantPath(runId: string, dir = runLedgerDir()): string
|
|
|
414
414
|
return `${runLedgerPath(runId, dir)}.graph.yaml`;
|
|
415
415
|
}
|
|
416
416
|
|
|
417
|
+
/** 원장에 실린 unit 선언 근거 한 줄 — 경로와 내용 해시뿐이고 본문은 원장에 없다. */
|
|
418
|
+
export interface RunGraphVariantUnitDeclaration {
|
|
419
|
+
readonly path: string;
|
|
420
|
+
readonly contentHash: string;
|
|
421
|
+
}
|
|
422
|
+
|
|
417
423
|
/** 최초 graph variant 선택의 원장 옆 재조회 계약 — 같은 runId·파일이면 같은 id·선택 이유가 돌아온다. */
|
|
418
424
|
export interface RunGraphVariantSelection {
|
|
419
425
|
/** createGraphVariant 가 골 종류·대상 경로 수에서 유도한 최초 variant id. */
|
|
420
426
|
readonly variantId: string;
|
|
421
427
|
/** 그 variant가 최초로 선택된 근거(종류·경로 수 기반) — 저장·재조회가 같은 문자열. */
|
|
422
428
|
readonly reason: string;
|
|
429
|
+
/** 이 런이 읽은 unit 선언의 경로·내용 해시 — 옛 원장에는 키가 없어 값도 없다(추가 키). */
|
|
430
|
+
readonly unitDeclarations?: readonly RunGraphVariantUnitDeclaration[];
|
|
423
431
|
}
|
|
424
432
|
|
|
425
433
|
/** 런 원장 옆 .graph.yaml 을 처음 한 번 쓰고 저장 경로를 돌려준다 — 이미 있으면 덮쓰지 않는다(flag wx). */
|
|
@@ -447,9 +455,24 @@ export function loadRunGraphVariant(runId: string, dir = runLedgerDir()): RunGra
|
|
|
447
455
|
throw new Error(`invalid run graph variant YAML at ${path}: ${error instanceof Error ? error.message : String(error)}`);
|
|
448
456
|
}
|
|
449
457
|
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) return null;
|
|
450
|
-
const record = parsed as { variant_id?: unknown; reason?: unknown };
|
|
458
|
+
const record = parsed as { variant_id?: unknown; reason?: unknown; unit_declarations?: unknown };
|
|
451
459
|
if (typeof record.variant_id !== 'string' || typeof record.reason !== 'string') return null;
|
|
452
|
-
|
|
460
|
+
const unitDeclarations = parseRunGraphVariantUnitDeclarations(record.unit_declarations);
|
|
461
|
+
return { variantId: record.variant_id, reason: record.reason,
|
|
462
|
+
...(unitDeclarations === undefined ? {} : { unitDeclarations }) };
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
/** `unit_declarations: [{ path, content_hash }]` 추가 키의 재읽기 — 키가 없거나 비면 근거도 없다. */
|
|
466
|
+
function parseRunGraphVariantUnitDeclarations(value: unknown): RunGraphVariantUnitDeclaration[] | undefined {
|
|
467
|
+
if (!Array.isArray(value)) return undefined;
|
|
468
|
+
const declarations: RunGraphVariantUnitDeclaration[] = [];
|
|
469
|
+
for (const entry of value) {
|
|
470
|
+
if (!entry || typeof entry !== 'object' || Array.isArray(entry)) continue;
|
|
471
|
+
const record = entry as { path?: unknown; content_hash?: unknown };
|
|
472
|
+
if (typeof record.path !== 'string' || typeof record.content_hash !== 'string') continue;
|
|
473
|
+
declarations.push({ path: record.path, contentHash: record.content_hash });
|
|
474
|
+
}
|
|
475
|
+
return declarations.length === 0 ? undefined : declarations;
|
|
453
476
|
}
|
|
454
477
|
|
|
455
478
|
/**
|
|
@@ -719,7 +742,9 @@ export interface RunLedgerCheckedAppendOutcome<T> {
|
|
|
719
742
|
* Thrown (typed, with the stable `runId-mismatch` reason) when a checked-append
|
|
720
743
|
* decision returns an entry whose `runId` differs from the locked `runId`. Callers
|
|
721
744
|
* classify identity violations from `error.reason === 'runId-mismatch'` instead of
|
|
722
|
-
* parsing message substrings.
|
|
745
|
+
* parsing message substrings. `RunLedgerEntryRunIdMismatchError` below is the same
|
|
746
|
+
* identity violation observed on already-written ledger bytes, so one `instanceof`
|
|
747
|
+
* covers both producers.
|
|
723
748
|
*/
|
|
724
749
|
export class RunLedgerCheckedAppendRunIdMismatchError extends Error {
|
|
725
750
|
readonly reason = 'runId-mismatch' as const;
|
|
@@ -731,6 +756,21 @@ export class RunLedgerCheckedAppendRunIdMismatchError extends Error {
|
|
|
731
756
|
}
|
|
732
757
|
}
|
|
733
758
|
|
|
759
|
+
/**
|
|
760
|
+
* Thrown (typed, same `runId-mismatch` reason) when a stored ledger *row* declares a
|
|
761
|
+
* `runId` other than the one being loaded. The message prefixes the stable reason and keeps
|
|
762
|
+
* the parser's existing wording, so message-based classifiers (`goal-archive`, the
|
|
763
|
+
* doctor-compare caller's own regression test) keep recognizing it, while
|
|
764
|
+
* `decisionRunId`/`lockedRunId` travel as typed fields so no caller has to re-parse it.
|
|
765
|
+
*/
|
|
766
|
+
export class RunLedgerEntryRunIdMismatchError extends RunLedgerCheckedAppendRunIdMismatchError {
|
|
767
|
+
constructor(decisionRunId: string, lockedRunId: string, readonly lineNumber: number) {
|
|
768
|
+
super(decisionRunId, lockedRunId);
|
|
769
|
+
this.name = 'RunLedgerEntryRunIdMismatchError';
|
|
770
|
+
this.message = `runId-mismatch: invalid run ledger entry at line ${lineNumber}: runId does not match ${lockedRunId}`;
|
|
771
|
+
}
|
|
772
|
+
}
|
|
773
|
+
|
|
734
774
|
/**
|
|
735
775
|
* Atomically decide-and-append under a single per-run lock: the caller-supplied
|
|
736
776
|
* decision runs on the loaded ledger inside `withRunLedgerLock`, and at most one
|
|
@@ -896,7 +936,7 @@ function parseRunLedgerEntry(line: string, lineNumber: number, expectedRunId: st
|
|
|
896
936
|
throw new Error(`invalid run ledger entry at line ${lineNumber}: expected optional timestamp, goalId, shard identity, runId, event, and object data`);
|
|
897
937
|
}
|
|
898
938
|
if (entry.runId !== expectedRunId) {
|
|
899
|
-
throw new
|
|
939
|
+
throw new RunLedgerEntryRunIdMismatchError(entry.runId, expectedRunId, lineNumber);
|
|
900
940
|
}
|
|
901
941
|
return entry as RunLedgerEntry;
|
|
902
942
|
}
|
|
@@ -1154,15 +1194,24 @@ export interface GraphAdaptReport {
|
|
|
1154
1194
|
nonAdapted: { landed: number; denominator: number; rate: number | null };
|
|
1155
1195
|
excludedCount: number;
|
|
1156
1196
|
exclusionReasons: Record<string, number>;
|
|
1197
|
+
unmeasuredCount: number;
|
|
1198
|
+
unmeasuredReasons: Record<string, number>;
|
|
1199
|
+
window: { since: string | null; until: string | null };
|
|
1157
1200
|
}
|
|
1158
1201
|
|
|
1159
1202
|
/** Measure only producer-observed traversals and variant applications; never activate adaptation. */
|
|
1160
|
-
export function queryGraphAdaptReport(goalId: string, stateDir = elanousStateRoot()): GraphAdaptReport {
|
|
1203
|
+
export function queryGraphAdaptReport(goalId: string, stateDir = elanousStateRoot(), window: { since?: string; until?: string } = {}): GraphAdaptReport {
|
|
1161
1204
|
const dir = runLedgerDir(stateDir);
|
|
1162
1205
|
const signatures = new Set<string>();
|
|
1163
1206
|
const counts = { adapted: { landed: 0, denominator: 0 }, nonAdapted: { landed: 0, denominator: 0 } };
|
|
1164
1207
|
const exclusionReasons: Record<string, number> = {};
|
|
1208
|
+
const unmeasuredReasons: Record<string, number> = {};
|
|
1165
1209
|
const exclude = (reason: string): void => { exclusionReasons[reason] = (exclusionReasons[reason] ?? 0) + 1; };
|
|
1210
|
+
const unmeasured = (reason: string): void => { unmeasuredReasons[reason] = (unmeasuredReasons[reason] ?? 0) + 1; };
|
|
1211
|
+
const since = window.since === undefined ? null : Date.parse(window.since);
|
|
1212
|
+
const until = window.until === undefined ? null : Date.parse(window.until);
|
|
1213
|
+
if ((since !== null && !Number.isFinite(since)) || (until !== null && !Number.isFinite(until)) ||
|
|
1214
|
+
(since !== null && until !== null && since > until)) throw new Error('invalid adaptation measurement window');
|
|
1166
1215
|
let unitCallCount = 0;
|
|
1167
1216
|
let adaptationCount = 0;
|
|
1168
1217
|
let fileNames: string[];
|
|
@@ -1181,6 +1230,15 @@ export function queryGraphAdaptReport(goalId: string, stateDir = elanousStateRoo
|
|
|
1181
1230
|
const goalIds = new Set(ledger.map(entry => entry.goalId).filter((id): id is string => typeof id === 'string' && id.length > 0));
|
|
1182
1231
|
if (goalIds.size === 1 && !goalIds.has(goalId)) continue;
|
|
1183
1232
|
if (goalIds.size !== 1) { exclude('goal-id-missing-or-conflicting'); continue; }
|
|
1233
|
+
const start = ledger.find(entry => entry.event === 'start');
|
|
1234
|
+
const startedAt = start && typeof start.timestamp === 'string' ? Date.parse(start.timestamp) : NaN;
|
|
1235
|
+
if (!Number.isFinite(startedAt)) { unmeasured('start-time-missing-or-invalid'); continue; }
|
|
1236
|
+
if ((since !== null && startedAt < since) || (until !== null && startedAt >= until)) { exclude('outside-start-window'); continue; }
|
|
1237
|
+
const lastStatus = [...ledger].reverse().find(entry => entry.event === 'run-status');
|
|
1238
|
+
if (lastStatus && !['completed', 'failed', 'cancelled'].includes(String(lastStatus.data.runStatus))) {
|
|
1239
|
+
exclude('in-flight'); continue;
|
|
1240
|
+
}
|
|
1241
|
+
if (!lastStatus && !ledger.some(entry => entry.event === 'merged')) { exclude('in-flight'); continue; }
|
|
1184
1242
|
const traversals = ledger.filter(entry => entry.event === 'pipeline-traversal-shadow');
|
|
1185
1243
|
const paths = traversals.map(entry => entry.data.observedNodes);
|
|
1186
1244
|
if (paths.length === 0 || paths.some(path => !Array.isArray(path) || path.length === 0 || !path.every(node => typeof node === 'string' && node.length > 0))) {
|
|
@@ -1189,12 +1247,13 @@ export function queryGraphAdaptReport(goalId: string, stateDir = elanousStateRoo
|
|
|
1189
1247
|
let graphRun: unknown;
|
|
1190
1248
|
try { graphRun = JSON.parse(readFileSync(join(stateDir, 'graph-runs', 'self-implement', `${runId}.json`), 'utf8')); }
|
|
1191
1249
|
catch (error) {
|
|
1192
|
-
|
|
1250
|
+
unmeasured((error as NodeJS.ErrnoException).code === 'ENOENT' ? 'graph-run-missing' : 'graph-run-unreadable');
|
|
1251
|
+
continue;
|
|
1193
1252
|
}
|
|
1194
1253
|
const recorded = graphRun && typeof graphRun === 'object' && !Array.isArray(graphRun) ? graphRun as Record<string, unknown> : null;
|
|
1195
|
-
if (recorded
|
|
1196
|
-
(recorded.unitCalls !== undefined && !Array.isArray(recorded.unitCalls)))
|
|
1197
|
-
|
|
1254
|
+
if (!recorded || recorded.runId !== runId || recorded.graphId !== 'self-implement' ||
|
|
1255
|
+
(recorded.unitCalls !== undefined && !Array.isArray(recorded.unitCalls))) {
|
|
1256
|
+
unmeasured('graph-run-invalid'); continue;
|
|
1198
1257
|
}
|
|
1199
1258
|
const merge = [...ledger].reverse().find(entry => entry.event === 'merged');
|
|
1200
1259
|
if (merge && typeof merge.data.merged !== 'boolean') { exclude('landing-invalid'); continue; }
|
|
@@ -1210,7 +1269,9 @@ export function queryGraphAdaptReport(goalId: string, stateDir = elanousStateRoo
|
|
|
1210
1269
|
return { goalId, runCount: counts.adapted.denominator + counts.nonAdapted.denominator,
|
|
1211
1270
|
uniquePathSignatures: signatures.size, unitCallCount, adaptationCount,
|
|
1212
1271
|
adapted: rate(counts.adapted), nonAdapted: rate(counts.nonAdapted),
|
|
1213
|
-
excludedCount: Object.values(exclusionReasons).reduce((total, count) => total + count, 0), exclusionReasons
|
|
1272
|
+
excludedCount: Object.values(exclusionReasons).reduce((total, count) => total + count, 0), exclusionReasons,
|
|
1273
|
+
unmeasuredCount: Object.values(unmeasuredReasons).reduce((total, count) => total + count, 0), unmeasuredReasons,
|
|
1274
|
+
window: { since: window.since ?? null, until: window.until ?? null } };
|
|
1214
1275
|
}
|
|
1215
1276
|
|
|
1216
1277
|
export interface GoalSourceDistributionQuery {
|
|
@@ -1773,6 +1834,8 @@ export interface UnfinishedRunLedgerQuery {
|
|
|
1773
1834
|
* 엉킨 visit 을 셀 수 있게 하는 값이다.
|
|
1774
1835
|
*/
|
|
1775
1836
|
orphanUnitVisitCount?: number;
|
|
1837
|
+
/** True when a caller deadline stopped the scan before every ledger was visited. */
|
|
1838
|
+
timedOut?: boolean;
|
|
1776
1839
|
scope: 'self-implement-run-ledger';
|
|
1777
1840
|
note: string;
|
|
1778
1841
|
}
|
|
@@ -1786,6 +1849,8 @@ export interface UnfinishedRunLedgerQueryOptions {
|
|
|
1786
1849
|
noCache?: boolean;
|
|
1787
1850
|
/** ⛔ 「도는 중」으로 볼 마지막 활동 나이(ms). 호출자가 준다 — 이 모듈이 새 수를 정하지 않는다. */
|
|
1788
1851
|
liveWindowMs?: number;
|
|
1852
|
+
/** Absolute wall-clock deadline; when reached, return the rows scanned so far as partial evidence. */
|
|
1853
|
+
deadlineAtMs?: number;
|
|
1789
1854
|
}
|
|
1790
1855
|
|
|
1791
1856
|
const UNFINISHED_RUN_LEDGER_NOTE = 'Read-only scan of the specified run-ledger directory. A terminal-status-missing ledger is not the same as an unreadable ledger; planned paths are extracted only from a goal document matched by the final hyphen-separated branch segment.';
|
|
@@ -2432,7 +2497,12 @@ export function queryUnfinishedRunLedgers(options: UnfinishedRunLedgerQueryOptio
|
|
|
2432
2497
|
let callerCwdCount = 0;
|
|
2433
2498
|
// ⭐ 터미널 원장도 «세기만» 한다 — entries 로 되살리지 않는다(부활 금지).
|
|
2434
2499
|
let orphanUnitVisitCount = 0;
|
|
2500
|
+
let timedOut = false;
|
|
2435
2501
|
for (const fileName of fileNames) {
|
|
2502
|
+
if (options.deadlineAtMs !== undefined && Date.now() >= options.deadlineAtMs) {
|
|
2503
|
+
timedOut = true;
|
|
2504
|
+
break;
|
|
2505
|
+
}
|
|
2436
2506
|
const runId = runIdFromCanonicalLedgerFile(fileName);
|
|
2437
2507
|
if (!runId) continue;
|
|
2438
2508
|
scanned += 1;
|
|
@@ -2517,9 +2587,10 @@ export function queryUnfinishedRunLedgers(options: UnfinishedRunLedgerQueryOptio
|
|
|
2517
2587
|
indexOrigin,
|
|
2518
2588
|
indexHits,
|
|
2519
2589
|
ms: Date.now() - startedAt,
|
|
2590
|
+
...(timedOut ? { timedOut: true, stopReason: 'deadline-exceeded' } : {}),
|
|
2520
2591
|
});
|
|
2521
2592
|
if (options.path === undefined) {
|
|
2522
|
-
return { entries, ledgerDirectory: dir, goalsDirectory: goalsDir, unreadableLedgerCount, orphanUnitVisitCount, ledgerDirectoryMissing: false, terminalByTrailingRunStatus, cacheHits, cacheMisses, indexHits, indexOrigin, scope: 'self-implement-run-ledger', note: UNFINISHED_RUN_LEDGER_NOTE };
|
|
2593
|
+
return { entries, ledgerDirectory: dir, goalsDirectory: goalsDir, unreadableLedgerCount, orphanUnitVisitCount, ledgerDirectoryMissing: false, terminalByTrailingRunStatus, cacheHits, cacheMisses, indexHits, indexOrigin, ...(timedOut ? { timedOut: true } : {}), scope: 'self-implement-run-ledger', note: UNFINISHED_RUN_LEDGER_NOTE };
|
|
2523
2594
|
}
|
|
2524
2595
|
const pathFilter = options.path;
|
|
2525
2596
|
const unknownPathStatus = (entry: UnfinishedRunLedgerEntry): boolean => entry.plannedPathStatus !== 'found-ledger-goal-file'
|
|
@@ -2545,6 +2616,7 @@ export function queryUnfinishedRunLedgers(options: UnfinishedRunLedgerQueryOptio
|
|
|
2545
2616
|
pathFilter,
|
|
2546
2617
|
matchingPathCount: matchingEntries.length,
|
|
2547
2618
|
unknownPathCount: unknownEntries.length,
|
|
2619
|
+
...(timedOut ? { timedOut: true } : {}),
|
|
2548
2620
|
scope: 'self-implement-run-ledger',
|
|
2549
2621
|
note: UNFINISHED_RUN_LEDGER_NOTE,
|
|
2550
2622
|
};
|
|
@@ -2581,6 +2653,8 @@ export interface FederatedUnfinishedRunLedgerQuery {
|
|
|
2581
2653
|
cacheMisses?: number;
|
|
2582
2654
|
/** Hits served by the persisted cross-process scan index (subset of cacheHits). */
|
|
2583
2655
|
indexHits?: number;
|
|
2656
|
+
timedOut?: boolean;
|
|
2657
|
+
stalledStage?: 'ledger-scan' | 'cross-directory-reconciliation';
|
|
2584
2658
|
pathFilter?: string;
|
|
2585
2659
|
matchingPathCount?: number;
|
|
2586
2660
|
unknownPathCount?: number;
|
|
@@ -2602,6 +2676,7 @@ export interface FederatedUnfinishedRunLedgerQueryOptions {
|
|
|
2602
2676
|
* canonical *.jsonl plus the cross-directory unfinished-runId reconciliation.
|
|
2603
2677
|
*/
|
|
2604
2678
|
runIds?: readonly string[];
|
|
2679
|
+
deadlineAtMs?: number;
|
|
2605
2680
|
}
|
|
2606
2681
|
|
|
2607
2682
|
const FEDERATED_UNFINISHED_RUN_LEDGER_NOTE = 'Read-only union of run-ledger directories selected by the same --all/--include-test target policy as elanous logs. Each row carries its physical ledger directory because instance names can identify multiple state roots.';
|
|
@@ -2621,12 +2696,19 @@ export function queryFederatedUnfinishedRunLedgers(options: FederatedUnfinishedR
|
|
|
2621
2696
|
let cacheHits = 0;
|
|
2622
2697
|
let cacheMisses = 0;
|
|
2623
2698
|
let indexHits = 0;
|
|
2699
|
+
let timedOut = false;
|
|
2700
|
+
let stalledStage: FederatedUnfinishedRunLedgerQuery['stalledStage'];
|
|
2624
2701
|
const recordDirectoryFailure = (kind: FederatedLedgerDirectoryFailureKind): void => {
|
|
2625
2702
|
if (kind === 'missing') missingLedgerDirectoryCount += 1;
|
|
2626
2703
|
else if (kind === 'unreadable') unreadableLedgerDirectoryAccessCount += 1;
|
|
2627
2704
|
else indeterminateLedgerDirectoryCount += 1;
|
|
2628
2705
|
};
|
|
2629
2706
|
for (const ledgerDirectory of candidateLedgerDirectories) {
|
|
2707
|
+
if (options.deadlineAtMs !== undefined && Date.now() >= options.deadlineAtMs) {
|
|
2708
|
+
timedOut = true;
|
|
2709
|
+
stalledStage = 'ledger-scan';
|
|
2710
|
+
break;
|
|
2711
|
+
}
|
|
2630
2712
|
try {
|
|
2631
2713
|
const listDirectory = options.list ?? readdirSync;
|
|
2632
2714
|
const list = requestedRunIds === undefined
|
|
@@ -2635,7 +2717,7 @@ export function queryFederatedUnfinishedRunLedgers(options: FederatedUnfinishedR
|
|
|
2635
2717
|
const runId = runIdFromCanonicalLedgerFile(fileName);
|
|
2636
2718
|
return runId !== null && requestedRunIds.has(runId);
|
|
2637
2719
|
});
|
|
2638
|
-
const result = queryUnfinishedRunLedgers({ dir: ledgerDirectory, goalsDir: goalsDirectory, ...(options.path === undefined ? {} : { path: options.path }), ...(list === undefined ? {} : { list }), noCache: options.noCache });
|
|
2720
|
+
const result = queryUnfinishedRunLedgers({ dir: ledgerDirectory, goalsDir: goalsDirectory, ...(options.path === undefined ? {} : { path: options.path }), ...(list === undefined ? {} : { list }), noCache: options.noCache, deadlineAtMs: options.deadlineAtMs });
|
|
2639
2721
|
if (result.ledgerDirectoryMissing) {
|
|
2640
2722
|
recordDirectoryFailure('missing');
|
|
2641
2723
|
continue;
|
|
@@ -2647,10 +2729,15 @@ export function queryFederatedUnfinishedRunLedgers(options: FederatedUnfinishedR
|
|
|
2647
2729
|
cacheHits += result.cacheHits ?? 0;
|
|
2648
2730
|
cacheMisses += result.cacheMisses ?? 0;
|
|
2649
2731
|
indexHits += result.indexHits ?? 0;
|
|
2732
|
+
if (result.timedOut) {
|
|
2733
|
+
timedOut = true;
|
|
2734
|
+
stalledStage = 'ledger-scan';
|
|
2735
|
+
}
|
|
2650
2736
|
entries.push(...result.entries.map((entry) => ({ ...entry, ledgerDirectory })));
|
|
2651
2737
|
} catch (error) {
|
|
2652
2738
|
recordDirectoryFailure(classifyFederatedLedgerDirectoryReadFailure(error));
|
|
2653
2739
|
}
|
|
2740
|
+
if (timedOut) break;
|
|
2654
2741
|
}
|
|
2655
2742
|
const unreadableLedgerDirectoryCount = missingLedgerDirectoryCount + unreadableLedgerDirectoryAccessCount + indeterminateLedgerDirectoryCount;
|
|
2656
2743
|
// ⛔⭐⭐ 가로 대조 — 원장 «하나»만 보고 「미완」이라 말하지 않는다 (2026-08-11 · 🅣 71차 실측).
|
|
@@ -2660,20 +2747,28 @@ export function queryFederatedUnfinishedRunLedgers(options: FederatedUnfinishedR
|
|
|
2660
2747
|
// 📏 실측(2026-08-11): 미완 57 중 ***7*** 이 다른 원장에 종결을 갖고 있었다.
|
|
2661
2748
|
// ⛔ 판정 술어는 스캐너와 «같은 것»을 쓴다(`run-status` 또는 `terminal`) — 어휘를 새로 만들지 않는다.
|
|
2662
2749
|
const terminatedElsewhere = new Set<string>();
|
|
2750
|
+
const reconciledRunIds = new Set<string>();
|
|
2663
2751
|
// Runs carrying a non-blocking request record never drop out of the union: their requestId
|
|
2664
2752
|
// reason·next must survive restarts and cross-directory reconciliation alike.
|
|
2665
2753
|
const unfinishedRunIds = requestedRunIds === undefined
|
|
2666
2754
|
? new Set(entries.filter((entry) => !entry.nonBlocking).map((entry) => entry.runId))
|
|
2667
2755
|
: new Set([...requestedRunIds].filter((runId) => entries.some((entry) => entry.runId === runId && !entry.nonBlocking)));
|
|
2668
|
-
for (const runId of unfinishedRunIds) {
|
|
2756
|
+
for (const runId of timedOut ? [] : unfinishedRunIds) {
|
|
2757
|
+
if (options.deadlineAtMs !== undefined && Date.now() >= options.deadlineAtMs) {
|
|
2758
|
+
timedOut = true;
|
|
2759
|
+
stalledStage = 'cross-directory-reconciliation';
|
|
2760
|
+
break;
|
|
2761
|
+
}
|
|
2669
2762
|
for (const ledgerDirectory of ledgerDirectories) {
|
|
2670
2763
|
try {
|
|
2671
2764
|
const reconciliationIndex = options.noCache ? undefined : loadRunLedgerScanIndex(ledgerDirectory);
|
|
2672
2765
|
if (readUnfinishedLedgerFacts(runId, ledgerDirectory, undefined, options.noCache, reconciliationIndex).facts.terminal) { terminatedElsewhere.add(runId); break; }
|
|
2673
2766
|
} catch { /* An absent or unreadable sibling cannot establish termination. */ }
|
|
2674
2767
|
}
|
|
2768
|
+
reconciledRunIds.add(runId);
|
|
2675
2769
|
}
|
|
2676
|
-
const reconciledEntries = entries.filter((entry) => !terminatedElsewhere.has(entry.runId)
|
|
2770
|
+
const reconciledEntries = entries.filter((entry) => !terminatedElsewhere.has(entry.runId)
|
|
2771
|
+
&& (stalledStage !== 'cross-directory-reconciliation' || reconciledRunIds.has(entry.runId)));
|
|
2677
2772
|
const reconciledTerminatedElsewhereCount = entries.length - reconciledEntries.length;
|
|
2678
2773
|
entries.length = 0;
|
|
2679
2774
|
entries.push(...reconciledEntries);
|
|
@@ -2691,6 +2786,7 @@ export function queryFederatedUnfinishedRunLedgers(options: FederatedUnfinishedR
|
|
|
2691
2786
|
cacheHits,
|
|
2692
2787
|
cacheMisses,
|
|
2693
2788
|
indexHits,
|
|
2789
|
+
...(timedOut ? { timedOut: true, stalledStage } : {}),
|
|
2694
2790
|
...(options.path === undefined ? {} : { pathFilter: options.path, matchingPathCount, unknownPathCount }),
|
|
2695
2791
|
scope: 'self-implement-run-ledger-federated',
|
|
2696
2792
|
note: FEDERATED_UNFINISHED_RUN_LEDGER_NOTE,
|
|
@@ -16,7 +16,7 @@ import type { PodChildEvidence } from '../task-orchestrator/surfaces/self-implem
|
|
|
16
16
|
/** 닫힌 목록 — 못 고르면 `unclassified`. */
|
|
17
17
|
export const RUN_STOP_CLASSES = [
|
|
18
18
|
'env-unrelated', 'main-sync', 'pod-died', 'pod-vanished', 'review-repeat',
|
|
19
|
-
'review-out-of-scope', 'scope-escape', 'evidence-uncovered', 'fabric', 'launch-failed', 'gate-failed', 'unclassified',
|
|
19
|
+
'review-out-of-scope', 'review-budget-exhausted', 'scope-escape', 'evidence-uncovered', 'fabric', 'launch-failed', 'gate-failed', 'unclassified',
|
|
20
20
|
] as const;
|
|
21
21
|
export type RunStopClass = typeof RUN_STOP_CLASSES[number];
|
|
22
22
|
|
|
@@ -40,6 +40,15 @@ export interface RunStopRecord {
|
|
|
40
40
|
export const RUN_STOP_EVENT = 'stop';
|
|
41
41
|
export const RUN_STOP_CAUSE_MAX = 120;
|
|
42
42
|
|
|
43
|
+
type RunStopListener = (entry: RunLedgerEntry) => void;
|
|
44
|
+
const runStopListeners = new Set<RunStopListener>();
|
|
45
|
+
|
|
46
|
+
/** Subscribe to live terminal run-stop facts. The durable ledger remains the source of truth. */
|
|
47
|
+
export function onRunStop(listener: RunStopListener): () => void {
|
|
48
|
+
runStopListeners.add(listener);
|
|
49
|
+
return () => { runStopListeners.delete(listener); };
|
|
50
|
+
}
|
|
51
|
+
|
|
43
52
|
export interface RunStopInput {
|
|
44
53
|
runId: string;
|
|
45
54
|
goalId?: string;
|
|
@@ -72,7 +81,8 @@ export function classifyMergeHoldStop(mergeReason: string | undefined): RunStopC
|
|
|
72
81
|
const reason = mergeReason ?? '';
|
|
73
82
|
if (reason.startsWith('main-sync') || reason === 'default-branch-unresolved') return 'main-sync';
|
|
74
83
|
if (reason === 'required-evidence-uncovered') return 'evidence-uncovered';
|
|
75
|
-
if (reason
|
|
84
|
+
if (reason.startsWith('review-budget')) return 'review-budget-exhausted';
|
|
85
|
+
if (reason === 'review-must-fix' || reason === 'review-warn-with-must-fix') return 'review-repeat';
|
|
76
86
|
if (reason.startsWith('review-diff') || reason === 'no-real-review') return 'review-out-of-scope';
|
|
77
87
|
return 'unclassified';
|
|
78
88
|
}
|
|
@@ -87,6 +97,24 @@ export function classifyPodExitStop(reason: string | undefined, stage?: string):
|
|
|
87
97
|
}
|
|
88
98
|
}
|
|
89
99
|
|
|
100
|
+
/** Terminal implementation failures are classified only after the inner repair/round budget has ended. */
|
|
101
|
+
export function classifyTerminalHarnessFailure(input: {
|
|
102
|
+
stage: string;
|
|
103
|
+
mergeReason?: string;
|
|
104
|
+
abandonedClassification?: string;
|
|
105
|
+
providerErrorCategory?: string;
|
|
106
|
+
supervisorVerdict?: string;
|
|
107
|
+
}): RunStopClass {
|
|
108
|
+
if (input.mergeReason) return classifyMergeHoldStop(input.mergeReason);
|
|
109
|
+
if (input.providerErrorCategory === 'credential' || input.abandonedClassification === 'credential-failure') return 'launch-failed';
|
|
110
|
+
if (input.abandonedClassification === 'report-deficit') return 'pod-died';
|
|
111
|
+
if (input.stage === 'gate-failed') return 'gate-failed';
|
|
112
|
+
if (input.stage === 'review-blocked' || input.stage === 'no-changes' || input.supervisorVerdict === 'UNCONVERGEABLE') return 'review-repeat';
|
|
113
|
+
if (input.stage === 'merge-conflict') return 'main-sync';
|
|
114
|
+
if (input.stage === 'timed-out') return 'pod-died';
|
|
115
|
+
return 'unclassified';
|
|
116
|
+
}
|
|
117
|
+
|
|
90
118
|
/** 이 프로세스에서 stop 을 이미 쓴 런 — 한 런이 두 자리(예: draft PR 실패 ⊕ aborted)에서 두 줄을 쓰지 않게. */
|
|
91
119
|
const recordedThisProcess = new Set<string>();
|
|
92
120
|
const RECORDED_MAX = 4096;
|
|
@@ -121,6 +149,9 @@ export function recordRunStop(input: RunStopInput, write: RunLedgerWriter = appe
|
|
|
121
149
|
write(entry);
|
|
122
150
|
if (recordedThisProcess.size >= RECORDED_MAX) recordedThisProcess.clear();
|
|
123
151
|
recordedThisProcess.add(input.runId);
|
|
152
|
+
for (const listener of runStopListeners) {
|
|
153
|
+
try { listener(entry); } catch { /* wake consumers cannot change run outcome */ }
|
|
154
|
+
}
|
|
124
155
|
try {
|
|
125
156
|
debug.log('self-implement.run-stop', 'recorded', { runId: input.runId, site: input.site ?? null, ...record, requestedClass: input.class ?? null });
|
|
126
157
|
} catch { /* observation is fail-soft */ }
|
|
@@ -116,6 +116,8 @@ export interface RunningRunsResult {
|
|
|
116
116
|
};
|
|
117
117
|
/** Additive phase-store observability; queryRunningRuns always supplies this value. */
|
|
118
118
|
readonly phases?: RunningRunsPhaseStoreObservation;
|
|
119
|
+
/** Present when a caller time budget stopped one observation stage before full coverage. */
|
|
120
|
+
readonly stalled?: { readonly stage: 'ledger-scan' | 'cross-directory-reconciliation' | 'pty-observation' | 'phase-observation' | 'launch-parent-classification'; readonly reason: 'deadline-exceeded' };
|
|
119
121
|
}
|
|
120
122
|
|
|
121
123
|
export interface QueriedRunningRunsResult extends RunningRunsResult {
|
|
@@ -263,7 +265,7 @@ export interface RunningRunsQueryObservation {
|
|
|
263
265
|
}
|
|
264
266
|
|
|
265
267
|
export interface RunningRunsQueryDeps {
|
|
266
|
-
readonly queryLedgers?: (options: { includeTest?: boolean; ledgerDirectories?: readonly string[]; runIds?: readonly string[]; noCache?: boolean }) => FederatedUnfinishedRunLedgerQuery;
|
|
268
|
+
readonly queryLedgers?: (options: { includeTest?: boolean; ledgerDirectories?: readonly string[]; runIds?: readonly string[]; noCache?: boolean; deadlineAtMs?: number }) => FederatedUnfinishedRunLedgerQuery;
|
|
267
269
|
readonly ledgerDirectories?: (options: { includeTest?: boolean }) => readonly string[];
|
|
268
270
|
readonly ptyTargets?: (options: { includeTest?: boolean }) => readonly { name: string; dbPath: string }[];
|
|
269
271
|
readonly readPtyRows?: typeof listPtyManifestRowsAt;
|
|
@@ -303,6 +305,7 @@ export function assessLingeringLaunchParents(
|
|
|
303
305
|
isProcessAlive: (pid: number) => boolean,
|
|
304
306
|
processStartTime: (pid: number) => number | null,
|
|
305
307
|
ledgerObservation?: Pick<RunningRunsLedgerObservation, 'unreadableLedgerCount' | 'unreadableLedgerDirectoryCount' | 'unreadableLedgerDirectoryAccessCount' | 'indeterminateLedgerDirectoryCount'>,
|
|
308
|
+
deadlineAtMs?: number,
|
|
306
309
|
): LingeringLaunchParentAssessment {
|
|
307
310
|
if (!ledgerObservation || hasUnreadableLedgerObservation(ledgerObservation)) return { observation: 'indeterminate' };
|
|
308
311
|
|
|
@@ -316,6 +319,7 @@ export function assessLingeringLaunchParents(
|
|
|
316
319
|
let reusedPidCount = 0;
|
|
317
320
|
try {
|
|
318
321
|
for (const [runId, ledgerDirectory] of terminatedRunDirectories) {
|
|
322
|
+
if (deadlineAtMs !== undefined && Date.now() >= deadlineAtMs) return { observation: 'indeterminate' };
|
|
319
323
|
const run = loadRun(runId, ledgerDirectory);
|
|
320
324
|
const pid = run?.pid;
|
|
321
325
|
if (typeof pid !== 'number' || !Number.isInteger(pid) || pid <= 0) {
|
|
@@ -454,7 +458,7 @@ export function distinctPhysicalLedgerDirectories(
|
|
|
454
458
|
return distinct;
|
|
455
459
|
}
|
|
456
460
|
|
|
457
|
-
export function queryRunningRuns(options: { includeTest?: boolean; runIds?: readonly string[]; caller?: string; noCache?: boolean } = {}, deps: RunningRunsQueryDeps = {}): QueriedRunningRunsResult {
|
|
461
|
+
export function queryRunningRuns(options: { includeTest?: boolean; runIds?: readonly string[]; caller?: string; noCache?: boolean; timeBudgetMs?: number } = {}, deps: RunningRunsQueryDeps = {}): QueriedRunningRunsResult {
|
|
458
462
|
const directoryFailures = new Map<string, ReturnType<typeof classifyFederatedLedgerDirectoryReadFailure>>();
|
|
459
463
|
const queryLedgers = deps.queryLedgers ?? ((queryOptions: Parameters<typeof queryFederatedUnfinishedRunLedgers>[0]) => queryFederatedUnfinishedRunLedgers({
|
|
460
464
|
...queryOptions,
|
|
@@ -480,6 +484,9 @@ export function queryRunningRuns(options: { includeTest?: boolean; runIds?: read
|
|
|
480
484
|
const processStartTime = deps.processStartedAt ?? processStartedAt;
|
|
481
485
|
const observeQuery = deps.observeQuery ?? ((observation: RunningRunsQueryObservation) => debug.log('self-implement.running-runs', 'query', observation));
|
|
482
486
|
const startedAt = Date.now();
|
|
487
|
+
const deadlineAtMs = options.timeBudgetMs === undefined ? undefined : startedAt + Math.max(0, options.timeBudgetMs);
|
|
488
|
+
let stalled: RunningRunsResult['stalled'];
|
|
489
|
+
const deadlineExceeded = (): boolean => deadlineAtMs !== undefined && Date.now() >= deadlineAtMs;
|
|
483
490
|
// ID 조회 배선 — src/index.ts의 `self running-runs [runId]` 액션이 넘겨준 options.runIds 를 이 조회가 소비한다:
|
|
484
491
|
// 정의된 runIds 는 연합 원장 질의 전달·엔트리·pty 관측을 모두 그 runId 들로 한정한다.
|
|
485
492
|
const requestedRunIdSet = options.runIds === undefined ? undefined : new Set(options.runIds);
|
|
@@ -509,20 +516,25 @@ export function queryRunningRuns(options: { includeTest?: boolean; runIds?: read
|
|
|
509
516
|
try {
|
|
510
517
|
const requestedRunIds = options.runIds === undefined ? {} : { runIds: options.runIds };
|
|
511
518
|
const cacheOption = options.noCache === undefined ? {} : { noCache: options.noCache };
|
|
519
|
+
const deadlineOption = deadlineAtMs === undefined ? {} : { deadlineAtMs };
|
|
512
520
|
ledger = collectLedgerDirectories
|
|
513
|
-
? queryLedgers({ includeTest: options.includeTest, ledgerDirectories: collectedLedgerDirectories, ...requestedRunIds, ...cacheOption })
|
|
514
|
-
: queryLedgers({ includeTest: options.includeTest, ...requestedRunIds, ...cacheOption });
|
|
521
|
+
? queryLedgers({ includeTest: options.includeTest, ledgerDirectories: collectedLedgerDirectories, ...requestedRunIds, ...cacheOption, ...deadlineOption })
|
|
522
|
+
: queryLedgers({ includeTest: options.includeTest, ...requestedRunIds, ...cacheOption, ...deadlineOption });
|
|
515
523
|
ledgerDirectoryCount = ledger.ledgerDirectories.length;
|
|
516
524
|
ledgerEntryCount = ledger.entries.length;
|
|
517
525
|
cacheHits = ledger.cacheHits ?? 0;
|
|
518
526
|
cacheMisses = ledger.cacheMisses ?? 0;
|
|
527
|
+
if (ledger.timedOut) stalled = { stage: ledger.stalledStage ?? 'ledger-scan', reason: 'deadline-exceeded' };
|
|
519
528
|
} finally {
|
|
520
529
|
ledgerReadElapsedMs = Date.now() - ledgerReadStartedAt;
|
|
521
530
|
}
|
|
522
531
|
const screenProcessReadStartedAt = Date.now();
|
|
523
532
|
let pty: FederatedPtyListing;
|
|
524
533
|
try {
|
|
525
|
-
|
|
534
|
+
if (deadlineExceeded()) {
|
|
535
|
+
stalled ??= { stage: 'pty-observation', reason: 'deadline-exceeded' };
|
|
536
|
+
pty = { refs: [], unreadable: ['<skipped:deadline-exceeded>'] };
|
|
537
|
+
} else pty = listPtyRefs(targets({ includeTest: options.includeTest }), readPtyRows);
|
|
526
538
|
} finally {
|
|
527
539
|
screenProcessReadElapsedMs = Date.now() - screenProcessReadStartedAt;
|
|
528
540
|
}
|
|
@@ -538,7 +550,8 @@ export function queryRunningRuns(options: { includeTest?: boolean; runIds?: read
|
|
|
538
550
|
let observedPhases: ObservedRunPhases = { events: [], targetCount: 0, unreadableTargets: [] };
|
|
539
551
|
const stageStoreReadStartedAt = Date.now();
|
|
540
552
|
try {
|
|
541
|
-
|
|
553
|
+
if (deadlineExceeded()) stalled ??= { stage: 'phase-observation', reason: 'deadline-exceeded' };
|
|
554
|
+
else observedPhases = readRunPhases({ includeTest: options.includeTest }, runIds);
|
|
542
555
|
} catch {
|
|
543
556
|
observedPhases = { events: [], targetCount: 1, unreadableTargets: ['phase-query'] };
|
|
544
557
|
} finally {
|
|
@@ -583,13 +596,23 @@ export function queryRunningRuns(options: { includeTest?: boolean; runIds?: read
|
|
|
583
596
|
const launchParentClassificationStartedAt = Date.now();
|
|
584
597
|
let lingeringLaunchParents: LingeringLaunchParentAssessment;
|
|
585
598
|
try {
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
599
|
+
if (deadlineExceeded()) {
|
|
600
|
+
stalled ??= { stage: 'launch-parent-classification', reason: 'deadline-exceeded' };
|
|
601
|
+
lingeringLaunchParents = { observation: 'indeterminate' };
|
|
602
|
+
} else {
|
|
603
|
+
lingeringLaunchParents = assessLingeringLaunchParents(
|
|
604
|
+
scopedLedgerEntries, loadRun, isProcessAlive, processStartTime, ledger, deadlineAtMs,
|
|
605
|
+
);
|
|
606
|
+
if (deadlineExceeded()) stalled ??= { stage: 'launch-parent-classification', reason: 'deadline-exceeded' };
|
|
607
|
+
}
|
|
589
608
|
} finally {
|
|
590
609
|
launchParentClassificationElapsedMs = Date.now() - launchParentClassificationStartedAt;
|
|
591
610
|
}
|
|
592
|
-
|
|
611
|
+
const finalCompleteness = hasUnreadableLedgerObservation(ledger) || stalled ? 'partial' : 'complete';
|
|
612
|
+
const finalCount: RunningRunsCount = finalCompleteness === 'partial'
|
|
613
|
+
? { count: null, lowerBound: result.counts.running + result.counts['probable-running'], unreadable }
|
|
614
|
+
: result.counts.running + result.counts['probable-running'];
|
|
615
|
+
return { ...result, completeness: finalCompleteness, unreadable, count: finalCount, observation, quantities: quantitySummary({ ...result, observation }), lingeringLaunchParents: lingeringLaunchParents!, ledger: { ledgerDirectories: ledger.ledgerDirectories, unreadableLedgerCount: ledger.unreadableLedgerCount, unreadableLedgerDirectoryCount: ledger.unreadableLedgerDirectoryCount, missingLedgerDirectoryCount: ledger.missingLedgerDirectoryCount, unreadableLedgerDirectoryAccessCount: ledger.unreadableLedgerDirectoryAccessCount, indeterminateLedgerDirectoryCount: ledger.indeterminateLedgerDirectoryCount, cacheHits, cacheMisses }, phases: phaseStoreObservation(observedPhases), ...(stalled ? { stalled } : {}) };
|
|
593
616
|
} finally {
|
|
594
617
|
try {
|
|
595
618
|
observeQuery({
|
|
@@ -614,7 +637,7 @@ export function queryRunningRuns(options: { includeTest?: boolean; runIds?: read
|
|
|
614
637
|
|
|
615
638
|
export function isPartialRunningRuns(result: RunningRunsResult): boolean {
|
|
616
639
|
return (result.count !== undefined && typeof result.count !== 'number' && result.count.count === null)
|
|
617
|
-
|| result.completeness === 'partial' || hasUnreadableLedgerObservation(result.ledger) || (result.unreadable?.length ?? 0) > 0;
|
|
640
|
+
|| result.completeness === 'partial' || result.stalled !== undefined || hasUnreadableLedgerObservation(result.ledger) || (result.unreadable?.length ?? 0) > 0;
|
|
618
641
|
}
|
|
619
642
|
|
|
620
643
|
function runningRunsLowerBound(result: RunningRunsResult): number {
|
|
@@ -670,7 +693,7 @@ function formatElapsed(ms: number): string {
|
|
|
670
693
|
export function renderRunProgressTable(result: RunningRunsResult, nowMs: number = Date.now()): string {
|
|
671
694
|
const partial = isPartialRunningRuns(result);
|
|
672
695
|
const header = partial
|
|
673
|
-
? `부분 관측 — 최소 ${runningRunsLowerBound(result)} (
|
|
696
|
+
? `부분 관측 — 최소 ${runningRunsLowerBound(result)} (${result.stalled ? `중단 단계 ${result.stalled.stage} · 사유 ${result.stalled.reason}` : `읽지 못한 원장: ${runningRunsUnreadable(result).map((item) => `${item.dir}:${item.reason}`).join(',') || '목록 미관측'}`})`
|
|
674
697
|
: `도는 런 ${result.counts.running + result.counts['probable-running']} (확인 ${result.counts.running} · 추정 ${result.counts['probable-running']})`;
|
|
675
698
|
const rows = buildRunProgressRows(result, nowMs).map((row) => {
|
|
676
699
|
const phaseUnreadable = row.phaseObservation === 'unreadable' || row.phaseObservation === 'partially-unreadable';
|
|
@@ -2236,7 +2236,10 @@ export function defaultSeams(o: DefaultSeamsOptions = {}): SelfImplementSeams {
|
|
|
2236
2236
|
};
|
|
2237
2237
|
if (failedTest) {
|
|
2238
2238
|
const worktreeLog = failedTest.output ?? '';
|
|
2239
|
-
|
|
2239
|
+
// A supplied gate runner can report a virtual checkout, just like gate-cli's injected runner.
|
|
2240
|
+
const currentFileExists = o.runIntegrityGate ? undefined : (file: string) => existsSync(resolve(cwd, file));
|
|
2241
|
+
const worktreeFailures = extractGateTestFailures(worktreeLog, currentFileExists);
|
|
2242
|
+
const failedFiles = [...new Set(worktreeFailures
|
|
2240
2243
|
.flatMap((failure) => failure.file ? [failure.file] : []))];
|
|
2241
2244
|
// 워크트리와 같은 묶음으로 베이스라인을 돌려 파일 간 간섭을 재현한다. 스코프가 없으면 실패 파일로 폴백.
|
|
2242
2245
|
const testArgs = gateOpts.testArgs;
|
|
@@ -2246,14 +2249,14 @@ export function defaultSeams(o: DefaultSeamsOptions = {}): SelfImplementSeams {
|
|
|
2246
2249
|
const baseline = (o.runGateBaseline ?? runGateBaseline)(cwd, baselineFiles, baselineRefs.get(cwd));
|
|
2247
2250
|
const rerun = (o.rerunBunTimeoutFailures ?? rerunBunTimeoutFailures)(
|
|
2248
2251
|
cwd,
|
|
2249
|
-
|
|
2252
|
+
worktreeFailures,
|
|
2250
2253
|
undefined,
|
|
2251
2254
|
baseline.status === 'unknown' ? undefined : (baseline.output ?? ''),
|
|
2252
2255
|
baseline.missingAtBase ?? [],
|
|
2253
2256
|
);
|
|
2254
2257
|
const rerunObservations = rerun instanceof Map ? rerun : rerun.observations;
|
|
2255
2258
|
const rerunNotRun = rerun instanceof Map ? 0 : rerun.rerunNotRun;
|
|
2256
|
-
const report = buildGateBaselineReport(worktreeLog, baseline, rerunObservations, rerunNotRun);
|
|
2259
|
+
const report = buildGateBaselineReport(worktreeLog, baseline, rerunObservations, rerunNotRun, currentFileExists);
|
|
2257
2260
|
baselineReport = report;
|
|
2258
2261
|
baselineFailures = report.failures;
|
|
2259
2262
|
const unknownReason = baseline.unknownReason;
|