elanous 0.2.36 → 0.2.38
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/apps/pwa/out/404/index.html +1 -1
- package/apps/pwa/out/404.html +1 -1
- package/apps/pwa/out/_next/static/{uC-N0emedeNOFuaBQFv-I → RrjXTwz-urRAbChP1bX02}/_buildManifest.js +1 -1
- package/apps/pwa/out/_next/static/chunks/{9250-072df22eaadaa6b5.js → 1026-44010f405704050c.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/1118.a8a74ea29aac3e46.js +27 -0
- package/apps/pwa/out/_next/static/chunks/1204-2aa830479adf80f4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1341-43b7d2dc77d45c9d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1440-c3ea8882badfd9bf.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{4304.e9b2512834a9e23e.js → 1632.7d87f998e714bede.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/1698-9c11cbf97f13717e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1770-3b1fc92253ef9f2f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1923-5c1695332240246a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1938.0e6c60ee91c4d7f5.js +148 -0
- package/apps/pwa/out/_next/static/chunks/{7784.1f0ac4a16d190cf4.js → 2104.70e086d5174a4736.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/213-20675f20673ba22a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{6566.926a1d1b7c911442.js → 214.186a430da28338f1.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/2277.3bd4c0ac7f1b5996.js +93 -0
- package/apps/pwa/out/_next/static/chunks/240.e09f433f71c78ff4.js +104 -0
- package/apps/pwa/out/_next/static/chunks/{5711.957b095705c12560.js → 2415.738b777642a02233.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/2417.02151393605a7cd0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2463.cd2641a76daaa9ff.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2576.b9e9c629c4b84c52.js +1 -0
- package/apps/pwa/out/_next/static/chunks/265-c021de53f0865bd9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2998-b1cc13956cd6a6e7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2e4782d3.ba2f0ab2b63a53e7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{4286.b70c4520306817e8.js → 3086.fb14b60ce98b53d3.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{3148-98efd4869d660a87.js → 3124-561f7f037943cde2.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/3130.626b54382b4dc379.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3221-1bb3f99a55088613.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3280.24edb1ffd03a7f3f.js +24 -0
- package/apps/pwa/out/_next/static/chunks/3288-eb3c22a1cbf2ae68.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3727.7949ccaacaa71242.js → 3291.f6c1005387d514bd.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/33.ef99e8374f96c6c4.js +36 -0
- package/apps/pwa/out/_next/static/chunks/3341-f09b9efbd7a82f70.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3389.012c70767a872f9b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3410-d7c0f14b329d6fda.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3421.c87d6313a7d670f7.js +287 -0
- package/apps/pwa/out/_next/static/chunks/3422-83a3953f9bd67e26.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8904.7d51af2dc033965c.js → 3528.e4b8ab70d339f965.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/3587-002e24e368c515a9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3644.f12a7d821ab940af.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3660.d7516588e2d875c3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3695.b82e2610f4cd4ea9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3858.ca1f5bc0f577eac9.js +94 -0
- package/apps/pwa/out/_next/static/chunks/3959-e6ac4a139d9d4bcc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3f0de3de-2340c532c00395db.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4032.53f62176514ec0ea.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3031-85328a92fcce4da6.js → 4199-f7c6eb40cd0322f8.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/4204-ef8484cbecd5d62f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4259-163129ca79913c4b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/428-eaa77df3d0c85969.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4432-97e400ffa1e161f5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/449-aa427cf2cbb75f50.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4491-39a0fd32bbaf3840.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4588.b7cf06d382953979.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4690.70ec8060825366ab.js +32 -0
- package/apps/pwa/out/_next/static/chunks/4804.6012b5cd33c22792.js +90 -0
- package/apps/pwa/out/_next/static/chunks/4881.e4d22d730e3b9df5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4937.ce2e340dc29cad3e.js +79 -0
- package/apps/pwa/out/_next/static/chunks/5-bb1c08d84bd71df3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5005.de98df23b37cdf3c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5035.dc64a89cad5573cc.js +74 -0
- package/apps/pwa/out/_next/static/chunks/5041-5aada92ca215ffdd.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{528.38ce20ef8aa251ff.js → 5203.51e5d8b5f1dcfe53.js} +16 -16
- package/apps/pwa/out/_next/static/chunks/5207.1a224035455790fd.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5255-1b60d50eabe9f057.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5269.d0436ee6d773382a.js +286 -0
- package/apps/pwa/out/_next/static/chunks/5300.677c97e0393742e6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{2683.c9773a0c589b031b.js → 5307.d7328020227880c2.js} +4 -4
- package/apps/pwa/out/_next/static/chunks/5309.3367c4d50f52b489.js +1 -0
- package/apps/pwa/out/_next/static/chunks/552-689827d49780fa00.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5539.34cc9d60622cb69b.js +8 -0
- package/apps/pwa/out/_next/static/chunks/5568.218dea0c00ca2ec7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{552.b7d061ad91eeac51.js → 5638.107314dc479e2f37.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/5645.b7e3b055455a04ea.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5662.18cc0f30353cbd96.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5671.da24fc9dc5e98325.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5b141171.324c40fd49cb6821.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6142.913b44e260a3f925.js +64 -0
- package/apps/pwa/out/_next/static/chunks/6175-d4621f6a10b0cfab.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6290.3eb53a20746b72ce.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6415-9307f3eafa90837f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{6925.562d532110879886.js → 6493.27ad77de7aac7966.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/6579-3de35d00aacd71b5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/680-2f324c4e039a5b67.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6845-331b3c7481da3ba3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7000.28157393caaf5343.js +62 -0
- package/apps/pwa/out/_next/static/chunks/{275-02ea4c2a33980422.js → 7161-8f22db3ec5ed005e.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/7311-60a7ea80d23c7521.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7401.525d0a12f7d02c06.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7438.c2cf72b66dca6aa4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3136.30aaaa5fa03662a3.js → 7488.966b116789f3d41a.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{4116.a84a92a2492c080e.js → 7524.ce973525d30b3d52.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/7573.2376e13c9c21f1f8.js +77 -0
- package/apps/pwa/out/_next/static/chunks/7577.ea6e9ac72e035520.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3324.a09703033abcbd2f.js → 7628.6b16863ac3972333.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/7657.8d1fb3d2f7ebe273.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7903-1435d5d2f0dd7807.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3410.7f9af5ab77cbe65f.js → 7954.4f7a8832663ee979.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/7978-30a91192c5dbe3c2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{771.c3cdb6c1f7f47c02.js → 8019.21ca554a821dad01.js} +16 -16
- package/apps/pwa/out/_next/static/chunks/8025-8795821525cf1a07.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8191.3674a00f0b565c23.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8217-604955d8885c5ef2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8298-eed6f5f2585a63f4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{4615.8525eb0add35eba6.js → 8487.291666583bebe640.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/8509.3a54d4e61893d7cb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8758.ac421f726a189125.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{6943.c6b24124853a47b2.js → 8879.ac06755bcf3e44a1.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/891.d6c723a51a067b36.js +149 -0
- package/apps/pwa/out/_next/static/chunks/{575.d929793a53f27c4b.js → 8911.bf5e712acb25fb6c.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{9f31e478.fefcbcd3c388ebc5.js → 8994d93e.33ba491f95345fc2.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{da5ecc5c-b005ad8cac737d57.js → 89d6c04f-6b8ab341748e468a.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{599.c39c571b6733f2a2.js → 9223.cbcc88e0e9950426.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/9299.24e2a7d9b6d1f91b.js +226 -0
- package/apps/pwa/out/_next/static/chunks/9317.6a9869039c231bb3.js +24 -0
- package/apps/pwa/out/_next/static/chunks/9383.e4755f275b3c11ff.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8037.e254fd797aa224d1.js → 9581.da63ddf41acfad46.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/9715.8c5529a0a5c41a36.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9817.3009d65f0889ef1f.js +2 -0
- package/apps/pwa/out/_next/static/chunks/{ceba0382.650712b56b85b582.js → 9fe1b809.738da85c8b17e3fb.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/_not-found/page-76873dd80da4f715.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-ed32b6ec5dea8f23.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-fdd40e15babf3d25.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/board/page-384efc78e85e400b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/botlab/page-866aac5ff226a7f3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/bots/page-d91809c5aeed319a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-128f3522f89a81ab.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/chat/page-595961abf3b43ad1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/consult/page-f41dccb76d8c0263.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/control/page-a3205c2e28b7d0d9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-c39a80277814a3f4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-1ab3f98194513195.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/editor/page-a5246f7e254d77d0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/exec/page-0f92287bdb81217d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/field/page-5a37131ff63793ef.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/healthz/route-76873dd80da4f715.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/inside/page-ac4bd14bb2348bfd.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/intake/page-c348a3959c5b5fc6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/layout-2addd81c0d3e2906.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live/page-da6b765f58a3eefb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live-run/page-0661e40f8780c32c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/loops/page-b89af1b1c8e4875b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/market/page-da8aeb82ba751cdb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-cc71317b239439db.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/morning/page-bde7fc1d64ffe369.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/not-found-e2797214f713fa58.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-2a35bcda70defaf6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-3af03deedde45032.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-d1d1210f99f620ae.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-46d1b5500885861d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/outputs/{page-e7abc34a48a6f71e.js → page-291ab19fe2acb173.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/page-7f569e533ddeecba.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-990129c9fee46d8f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-7737f785ebb1cdaf.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-9f3c73a4f7ffd2f8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-03be7fb347f01058.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/page-96b0280625e4df2b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-56855545049eb56d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/layout-76873dd80da4f715.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/page-79a909c9981f0338.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/share/page-a9d9a3e66459c1e0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-c383cbf2013f7069.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-f57c6a2e54dbdca4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/term/{page-c15958835534404b.js → page-6b140f77593576eb.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/today/page-6b767ae2d9d0adfc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/trace/page-116d6198d5da0e3d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/vault/page-b9c9b778c7501370.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-a6c78392ab8f6335.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-455183deb4ed0cfe.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-6a63e99526bd63d0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-31c22caafe788c08.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3a3d9966.cc4d4585a2708e7c.js → b7459770.6539b11860eb8a9c.js} +7 -7
- package/apps/pwa/out/_next/static/chunks/{053a429e.9a63436527cc751c.js → b7478fef.5917716286213fcc.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/bb6987f9.3647e1a23b0e3217.js +122 -0
- package/apps/pwa/out/_next/static/chunks/{2812ca6a.3b9f4a7a08885744.js → de8b930d.d94c0f42acf807fc.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{873d6c12.09bd499f57171543.js → eaad0cba.771200940c529df7.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/framework-4b12a946f352cee2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/main-941155250ed2644b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/main-app-f8b6765abed6d149.js +1 -0
- package/apps/pwa/out/_next/static/chunks/pages/_app-78432194c85388f9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/pages/_error-cdf7390829512b1b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/webpack-d5f0964a9c2e92d2.js +1 -0
- package/apps/pwa/out/_next/static/css/{b5d88eba78a3d7bf.css → be9019f696217521.css} +1 -1
- package/apps/pwa/out/approvals/index.html +1 -1
- package/apps/pwa/out/approvals/index.txt +23 -23
- package/apps/pwa/out/autopilot/index.html +1 -1
- package/apps/pwa/out/autopilot/index.txt +23 -23
- package/apps/pwa/out/board/index.html +1 -1
- package/apps/pwa/out/board/index.txt +23 -23
- package/apps/pwa/out/botlab/index.html +1 -1
- package/apps/pwa/out/botlab/index.txt +22 -22
- package/apps/pwa/out/bots/index.html +1 -1
- package/apps/pwa/out/bots/index.txt +22 -22
- package/apps/pwa/out/ceo/index.html +1 -1
- package/apps/pwa/out/ceo/index.txt +23 -23
- package/apps/pwa/out/chat/index.html +1 -1
- package/apps/pwa/out/chat/index.txt +22 -22
- package/apps/pwa/out/consult/index.html +1 -1
- package/apps/pwa/out/consult/index.txt +23 -23
- package/apps/pwa/out/control/index.html +1 -1
- package/apps/pwa/out/control/index.txt +23 -23
- package/apps/pwa/out/decisions/index.html +1 -1
- package/apps/pwa/out/decisions/index.txt +22 -22
- package/apps/pwa/out/design-check/index.html +1 -1
- package/apps/pwa/out/design-check/index.txt +23 -23
- package/apps/pwa/out/editor/index.html +1 -1
- package/apps/pwa/out/editor/index.txt +23 -23
- package/apps/pwa/out/exec/index.html +1 -1
- package/apps/pwa/out/exec/index.txt +23 -23
- package/apps/pwa/out/field/index.html +1 -1
- package/apps/pwa/out/field/index.txt +23 -23
- package/apps/pwa/out/healthz +1 -1
- package/apps/pwa/out/index.html +1 -1
- package/apps/pwa/out/index.txt +22 -22
- package/apps/pwa/out/inside/index.html +1 -1
- package/apps/pwa/out/inside/index.txt +22 -22
- package/apps/pwa/out/intake/index.html +1 -1
- package/apps/pwa/out/intake/index.txt +23 -23
- package/apps/pwa/out/live/index.html +1 -1
- package/apps/pwa/out/live/index.txt +23 -23
- package/apps/pwa/out/live-run/index.html +1 -1
- package/apps/pwa/out/live-run/index.txt +23 -23
- package/apps/pwa/out/loops/index.html +1 -1
- package/apps/pwa/out/loops/index.txt +22 -22
- package/apps/pwa/out/market/index.html +1 -1
- package/apps/pwa/out/market/index.txt +22 -22
- package/apps/pwa/out/missions/placeholder/index.html +1 -1
- package/apps/pwa/out/missions/placeholder/index.txt +22 -22
- package/apps/pwa/out/morning/index.html +1 -1
- package/apps/pwa/out/morning/index.txt +23 -23
- package/apps/pwa/out/observatory/index.html +1 -1
- package/apps/pwa/out/observatory/index.txt +23 -23
- package/apps/pwa/out/ops/checklist/index.html +1 -1
- package/apps/pwa/out/ops/checklist/index.txt +22 -22
- package/apps/pwa/out/ops/release/index.html +1 -1
- package/apps/pwa/out/ops/release/index.txt +22 -22
- package/apps/pwa/out/ops/seats/index.html +1 -1
- package/apps/pwa/out/ops/seats/index.txt +22 -22
- package/apps/pwa/out/outputs/index.html +1 -1
- package/apps/pwa/out/outputs/index.txt +22 -22
- package/apps/pwa/out/reflection/index.html +1 -1
- package/apps/pwa/out/reflection/index.txt +23 -23
- package/apps/pwa/out/scheduler/index.html +1 -1
- package/apps/pwa/out/scheduler/index.txt +23 -23
- package/apps/pwa/out/sessions/index.html +1 -1
- package/apps/pwa/out/sessions/index.txt +22 -22
- package/apps/pwa/out/settings/devices/index.html +1 -1
- package/apps/pwa/out/settings/devices/index.txt +23 -23
- package/apps/pwa/out/settings/index.html +1 -1
- package/apps/pwa/out/settings/index.txt +23 -23
- package/apps/pwa/out/setup/done/index.html +1 -1
- package/apps/pwa/out/setup/done/index.txt +23 -23
- package/apps/pwa/out/setup/index.html +1 -1
- package/apps/pwa/out/setup/index.txt +23 -23
- package/apps/pwa/out/share/index.html +1 -1
- package/apps/pwa/out/share/index.txt +23 -23
- package/apps/pwa/out/showroom/index.html +1 -1
- package/apps/pwa/out/showroom/index.txt +22 -22
- package/apps/pwa/out/tasks/index.html +1 -1
- package/apps/pwa/out/tasks/index.txt +23 -23
- package/apps/pwa/out/term/index.html +1 -1
- package/apps/pwa/out/term/index.txt +23 -23
- package/apps/pwa/out/today/index.html +1 -1
- package/apps/pwa/out/today/index.txt +23 -23
- package/apps/pwa/out/trace/index.html +1 -1
- package/apps/pwa/out/trace/index.txt +23 -23
- package/apps/pwa/out/vault/index.html +1 -1
- package/apps/pwa/out/vault/index.txt +23 -23
- package/apps/pwa/out/workflows/chat-ui/index.html +1 -1
- package/apps/pwa/out/workflows/chat-ui/index.txt +23 -23
- package/apps/pwa/out/workflows/index.html +1 -1
- package/apps/pwa/out/workflows/index.txt +23 -23
- package/apps/pwa/out/workspace/index.html +1 -1
- package/apps/pwa/out/workspace/index.txt +23 -23
- package/apps/pwa/out/worktrees/index.html +1 -1
- package/apps/pwa/out/worktrees/index.txt +23 -23
- package/graphs/drafts/recipes.yaml +27 -7
- package/graphs/release/recipes.yaml +9 -0
- package/graphs/release/release-loop.yaml +26 -18
- package/graphs/work/draft-close.yaml +54 -0
- package/graphs/work/green-close.yaml +37 -0
- package/graphs/work/recipes.yaml +46 -1
- package/graphs/work/run-research.yaml +35 -0
- package/package.json +1 -1
- package/scripts/__fixtures__/authoring-paths-10x3.json +32 -0
- package/scripts/ask-op-inbox-once.ts +17 -0
- package/scripts/boundary-proof-mapping-audit.ts +88 -0
- package/scripts/brand/check.ts +13 -4
- package/scripts/codex-fallback-live-probe.ts +17 -15
- package/scripts/fleet/node-setup.sh +32 -2
- package/scripts/fleet/run-light-worker.sh +9 -0
- package/scripts/gate-0226-accepted-remaining-90.txt +91 -0
- package/scripts/gate-0226-failure-census.ts +546 -0
- package/scripts/goals/authoring-metrics.ts +258 -0
- package/scripts/graph-units/draft-close-node.ts +222 -0
- package/scripts/hook-order-sweep.ts +7 -4
- package/scripts/intake-collect-telegram-saved-stage.ts +48 -0
- package/scripts/land-global-checks.ts +69 -1
- package/scripts/measure-nl-routing-corpus.ts +207 -2
- package/scripts/provision-export-redactions.ts +15 -0
- package/scripts/public-copy-lint.ts +122 -0
- package/scripts/public-export.ts +69 -2
- package/scripts/ratchets/next-tui-entry-budget.ts +124 -0
- package/scripts/ratchets/train-side-invariants.sh +7 -1
- package/scripts/release-loop/cut-branch.ts +61 -12
- package/scripts/release-loop/docs-node.ts +140 -0
- package/scripts/release-loop/gate-closure.ts +48 -0
- package/scripts/release-loop/gate-diff.ts +2 -1
- package/scripts/release-loop/gate-node.ts +161 -25
- package/scripts/release-loop/gate-partial.ts +82 -3
- package/scripts/release-loop/gate-prewarm-plan.ts +35 -0
- package/scripts/release-loop/gate-radius-live.ts +4 -2
- package/scripts/release-loop/known-issues-node.ts +6 -4
- package/scripts/release-loop/notes-repair.ts +216 -0
- package/scripts/release-loop/prepare-node.ts +61 -5
- package/scripts/release-loop/resume-cap.ts +2 -1
- package/scripts/release-loop/resume-release.ts +406 -7
- package/scripts/release-loop/resume-test-traffic.ts +10 -0
- package/scripts/release-loop/resume.ts +13 -5
- package/scripts/release-loop/traffic-node.ts +12 -4
- package/scripts/release-loop/traffic-transition.ts +53 -13
- package/scripts/release-loop/version-node.ts +109 -15
- package/scripts/train/green-leg.ts +176 -0
- package/scripts/tui-continue-real-evidence.ts +47 -0
- package/scripts/ux-sim.ts +1 -1
- package/scripts/video-pipeline.ts +2 -2
- package/src/acp/client.ts +31 -5
- package/src/acp/core-turn-bridge.ts +12 -1
- package/src/acp/stderr-summary.ts +49 -0
- package/src/agent/monad-agent-turn.ts +1 -0
- package/src/agent/run-context.ts +1 -1
- package/src/agent/task-notification.ts +3 -1
- package/src/agent/terminal-surface.ts +217 -0
- package/src/agent-substrate/pr-reviewer.ts +11 -3
- package/src/agent-substrate/review-observation.ts +10 -0
- package/src/agent-substrate/self-review-cli.ts +537 -57
- package/src/auto-research/question-ladder-contract.ts +137 -0
- package/src/auto-research/research-turn.ts +134 -0
- package/src/autopilot/discovery/doc-lint.ts +1 -1
- package/src/autopilot/lineage/sources.ts +1 -1
- package/src/autopilot/pr-manager.ts +64 -13
- package/src/boot/daemon-runtime.ts +35 -3
- package/src/boot/daemon-tools/pty-shell.ts +2 -1
- package/src/bots/screen-probe.ts +1 -1
- package/src/budget/run-usage-rollup.ts +12 -7
- package/src/budget/unified-usage.ts +20 -0
- package/src/capture/tui-self-report.ts +42 -5
- package/src/chat/index.ts +1 -0
- package/src/chat/tool-render/dispatch.ts +8 -1
- package/src/cli/autopilot-cli.ts +24 -9
- package/src/cli/decisions-cli.ts +7 -4
- package/src/cli/doctor-cli.ts +116 -7
- package/src/cli/guardian-cli.ts +3 -1
- package/src/cli/intake-cli.ts +48 -12
- package/src/cli/lesson-cli.ts +69 -9
- package/src/cli/logs-cli.ts +357 -2
- package/src/cli/memory-cli.ts +30 -1
- package/src/cli/msg-cli.ts +15 -11
- package/src/cli/pr-granularity.ts +5 -3
- package/src/cli/pr-land-overlap-evidence.ts +38 -5
- package/src/cli/pr-land-refusal.ts +1 -1
- package/src/cli/pty-takeover-cli.ts +58 -5
- package/src/cli/release-checklist-read-cli.ts +112 -4
- package/src/cli/release-cli.ts +89 -18
- package/src/cli/review-carry.ts +77 -0
- package/src/cli/self-update.ts +24 -6
- package/src/cli/self-utterances-cli.ts +13 -16
- package/src/cli/tasks-card-show.ts +31 -1
- package/src/cli/tasks-cli.ts +370 -33
- package/src/cli/tasks-read-cli.ts +13 -5
- package/src/cli/usage-cli.ts +12 -10
- package/src/context-bus/claude-memory-import.ts +99 -0
- package/src/context-bus/context-now.ts +86 -2
- package/src/context-bus/long-term-memory.ts +125 -0
- package/src/core-turn/run-core-turn.ts +9 -2
- package/src/core-turn/run-goal-loop.ts +5 -2
- package/src/core-turn/types.ts +5 -0
- package/src/dashboard/chat/acp-chat.ts +9 -0
- package/src/dashboard/index.ts +115 -30
- package/src/dashboard/input/agent-wake.ts +43 -0
- package/src/dashboard/input/chat-main-acp-dispatch.ts +21 -1
- package/src/dashboard/input/terminal-modal-router.ts +8 -159
- package/src/dashboard/replay-preview.ts +25 -0
- package/src/dashboard/side-basic-runtime.ts +61 -0
- package/src/dashboard/slash-runtime/dashboard-handlers.ts +19 -8
- package/src/dashboard/synchronized-frame-output.ts +74 -0
- package/src/dashboard/term-slash-runtime.ts +2 -0
- package/src/dashboard/turn-preamble.ts +28 -4
- package/src/display/coordinator.ts +45 -12
- package/src/display/resize-listener.ts +41 -20
- package/src/display/synchronized-output-region.ts +60 -0
- package/src/domains/guardian-tick.ts +9 -0
- package/src/domains/surface-events.ts +80 -1
- package/src/exec-requests/planner.ts +37 -2
- package/src/execution-loop/launch-gate.ts +4 -3
- package/src/git-fs/cli-stderr.ts +45 -0
- package/src/git-fs/gh-cli.ts +6 -3
- package/src/git-fs/git-cli.ts +11 -5
- package/src/git-fs/watcher.ts +27 -22
- package/src/git-fs/worktree.ts +19 -3
- package/src/graph-runner/graph-cli.ts +26 -2
- package/src/graph-runner/graph-grow.ts +37 -9
- package/src/graph-runner/graph-run-api.ts +3 -2
- package/src/graph-runner/runner.ts +34 -7
- package/src/graph-wizard/generate.ts +29 -6
- package/src/grok/credential.ts +107 -36
- package/src/harness/harness-cli-command.ts +179 -33
- package/src/harness/review-adapter.ts +26 -6
- package/src/hq/fence-wrapper.ts +1 -1
- package/src/hq/transfer.ts +1 -1
- package/src/index.ts +151 -18
- package/src/instance/test-write-guard-real-transport.fixture.ts +52 -0
- package/src/intake-plane/collect-telegram-saved.ts +54 -5
- package/src/interactive-terminal-modal.ts +3 -0
- package/src/keybindings.ts +17 -22
- package/src/llm/provider-credentials.ts +1 -1
- package/src/llm/route-decision.ts +13 -0
- package/src/llm-tool-name.ts +37 -0
- package/src/llm-tool-schema.ts +55 -0
- package/src/llm.ts +203 -21
- package/src/loops/checker.ts +100 -0
- package/src/loops/consensus.ts +26 -2
- package/src/loops/loop-cli.ts +9 -4
- package/src/loops/orchestrator/anomaly-cluster.ts +243 -0
- package/src/loops/orchestrator/inbox-once.ts +28 -0
- package/src/loops/orchestrator/inbox.ts +130 -1
- package/src/loops/orchestrator/tick.ts +55 -7
- package/src/maturity/feature-maturity.ts +1 -0
- package/src/model-tier/llm-tier-map.ts +12 -17
- package/src/msg/msg-store.ts +17 -0
- package/src/native-tool-catalog.ts +1 -1
- package/src/nexus/api/channel-ask-op.ts +96 -0
- package/src/nexus/api/discord-trigger-bot.ts +28 -1
- package/src/nexus/api/graph-wizard-api.ts +27 -2
- package/src/nexus/api/grid.ts +24 -4
- package/src/nexus/api/http-server.ts +1 -1
- package/src/nexus/api/ops-api.ts +14 -6
- package/src/nexus/api/telegram-trigger-bot.ts +24 -0
- package/src/nexus/api/terminals.ts +28 -6
- package/src/nexus/state/state.ts +7 -1
- package/src/oauth/codex-account-store.ts +34 -1
- package/src/ops/loops-map.ts +46 -0
- package/src/ops/overview-cache.ts +22 -4
- package/src/ops/overview.ts +41 -5
- package/src/patents/ledger.ts +18 -1
- package/src/policy/llm-policy.ts +3 -1
- package/src/preview/terminal.ts +4 -2
- package/src/prompt-cache/anthropic.ts +2 -0
- package/src/prompt-enhance/enhance.ts +9 -4
- package/src/pty-shell/availability.ts +7 -0
- package/src/pty-shell/herdr-agent-report.ts +40 -31
- package/src/pty-shell/herdr-prune-stale.ts +17 -0
- package/src/pty-shell/herdr-sequence-lease.ts +60 -0
- package/src/pty-shell/pty-control-ipc.ts +187 -18
- package/src/pty-shell/pty-manifest.ts +16 -2
- package/src/pty-shell/registry.ts +25 -15
- package/src/pty-shell/tui-run-state.ts +235 -1
- package/src/release-loop/checklist.ts +50 -5
- package/src/release-loop/feature-store.ts +9 -9
- package/src/release-loop/gate-shards.ts +61 -0
- package/src/release-loop/landed-but-yellow.ts +93 -12
- package/src/release-loop/light-rc.ts +7 -4
- package/src/release-loop/rehearsal.ts +1 -1
- package/src/repl/index.ts +18 -0
- package/src/research/axis-fanout.ts +133 -0
- package/src/research/edge-decision.ts +88 -0
- package/src/research/output-router.ts +127 -0
- package/src/research-bridge/format.ts +16 -1
- package/src/research-bridge/index.ts +1 -0
- package/src/research-bridge/invoke.ts +41 -5
- package/src/seat-loop/seat-report.ts +1 -0
- package/src/self-dev/ask-launch-flow.ts +86 -10
- package/src/self-dev/decompose-proposal.ts +29 -18
- package/src/self-dev/decompose.ts +45 -9
- package/src/self-dev/dev-pipeline.ts +29 -7
- package/src/self-dev/draft-residue.ts +221 -2
- package/src/self-dev/draft-sweep.ts +254 -16
- package/src/self-dev/draft-triage-rules.ts +19 -5
- package/src/self-dev/orchestrate.ts +1 -0
- package/src/self-dev/review-provider-fallback.ts +45 -7
- package/src/self-dev/run-supervisor.ts +22 -7
- package/src/self-dev/shard-plan.ts +48 -0
- package/src/self-dev/shard-run.ts +310 -6
- package/src/self-implement/comment-only-source.ts +54 -0
- package/src/self-implement/doctor-visit.ts +108 -0
- package/src/self-implement/gate-artifacts.ts +6 -2
- package/src/self-implement/gate-baseline.ts +99 -1
- package/src/self-implement/gate-cli.ts +231 -82
- package/src/self-implement/gate-failure-signature.ts +44 -0
- package/src/self-implement/gate-remote.ts +30 -4
- package/src/self-implement/gate-scope.ts +13 -1
- package/src/self-implement/goal-author.ts +407 -21
- package/src/self-implement/goal-doc/section.ts +22 -0
- package/src/self-implement/goal-supervisor-fill.ts +110 -27
- package/src/self-implement/importer-test-index.ts +215 -2
- package/src/self-implement/knowhow-pack.ts +125 -12
- package/src/self-implement/l8-merge-queue.ts +198 -32
- package/src/self-implement/off-diff-evidence.ts +23 -0
- package/src/self-implement/orchestrator.ts +369 -33
- package/src/self-implement/pod-inplace-worktree.ts +82 -0
- package/src/self-implement/pod-warm-pool-profile.ts +2 -2
- package/src/self-implement/premise-review.ts +7 -5
- package/src/self-implement/review-round-brief.ts +300 -0
- package/src/self-implement/rework-policy.ts +14 -0
- package/src/self-implement/run-ledger.ts +428 -6
- package/src/self-implement/run-stop.ts +1 -1
- package/src/self-implement/running-runs.ts +17 -3
- package/src/self-implement/seams.ts +45 -16
- package/src/self-implement/self-implement-cli.ts +26 -2
- package/src/self-implement/stop-autoheal.ts +1 -0
- package/src/self-implement/test-seams.ts +13 -1
- package/src/self-implement/train-reach-grouping.ts +8 -2
- package/src/session/channel-ask-op-envelope.ts +36 -0
- package/src/session/channel-op-reply-route.ts +200 -0
- package/src/session/chat.ts +10 -1
- package/src/session/id-prefix.ts +60 -0
- package/src/session/index.ts +6 -0
- package/src/session-runtime/index.ts +18 -23
- package/src/skills/runner.ts +7 -3
- package/src/skills/tools/dev-harness.ts +2 -2
- package/src/skills/tools/pty.ts +5 -0
- package/src/skills/tools/schedule-wakeup.ts +1 -6
- package/src/status/bar.ts +3 -3
- package/src/status/metrics.ts +12 -1
- package/src/steward/rejudge-tick.ts +12 -5
- package/src/steward/resync-tick.ts +31 -4
- package/src/storage/file-lock.ts +17 -4
- package/src/task-agent/actions.ts +199 -4
- package/src/task-agent/adopt-pr.ts +63 -2
- package/src/task-agent/boundary-proof-mapping.ts +12 -0
- package/src/task-agent/boundary-proof-producer.ts +147 -0
- package/src/task-agent/completion-evidence.ts +2 -1
- package/src/task-agent/evidence-command-normalize.ts +42 -0
- package/src/task-agent/export-redactions-provision.ts +43 -0
- package/src/task-agent/green-close-recipe.ts +239 -0
- package/src/task-agent/green-sweep.ts +64 -10
- package/src/task-agent/live-moves.ts +48 -3
- package/src/task-agent/map-host-adapter.ts +134 -0
- package/src/task-agent/map-reduce.ts +158 -0
- package/src/task-agent/map-run-ledger.ts +226 -0
- package/src/task-agent/parent-host.ts +74 -17
- package/src/task-agent/rejudge-on-head.ts +72 -5
- package/src/task-agent/repair-cycle.ts +108 -8
- package/src/task-agent/repair-next-move.ts +12 -2
- package/src/task-agent/repair-worker.ts +37 -1
- package/src/task-agent/review-prior-fix.ts +12 -2
- package/src/task-agent/shadow.ts +188 -5
- package/src/task-agent/task-hand.ts +253 -20
- package/src/task-agent/task-parent-role-llm.ts +9 -0
- package/src/task-agent/tier-split.ts +40 -5
- package/src/task-agent/work-order.ts +53 -2
- package/src/task-orchestrator/dispatcher.ts +46 -1
- package/src/task-orchestrator/generator-prompt.ts +6 -0
- package/src/task-orchestrator/surfaces/pod-artifact-return.ts +16 -6
- package/src/task-orchestrator/surfaces/pod-failure-reason.ts +31 -4
- package/src/task-orchestrator/surfaces/pod-ledger-collect.ts +8 -6
- package/src/task-orchestrator/surfaces/pod-ledger-events.ts +97 -0
- package/src/task-orchestrator/surfaces/pod-pool.ts +77 -8
- package/src/task-orchestrator/surfaces/pod-warm-worker-provider.ts +15 -9
- package/src/task-orchestrator/surfaces/self-implement-pod.ts +338 -79
- package/src/task-orchestrator/surfaces/self-implement.ts +37 -2
- package/src/terminal/session-registry.ts +1 -0
- package/src/terminal/terminal-modal-router.ts +156 -0
- package/src/testing/linux-env.ts +177 -0
- package/src/tool-hints/gate.ts +6 -4
- package/src/tool-hints/signals.ts +33 -1
- package/src/tui/chat/background-job-status.ts +8 -2
- package/src/tui/chat/goal-interim.ts +5 -1
- package/src/tui/entry.ts +722 -30
- package/src/tui/input/at-picker.ts +55 -0
- package/src/tui/sidetab/attach.ts +304 -0
- package/src/tui/sidetab/list.ts +176 -0
- package/src/tui/sidetab/nl-tool.ts +136 -0
- package/src/tui/slash/resume-command.ts +23 -0
- package/src/tui/slash/resume.ts +38 -35
- package/src/tui/slash/signals.ts +114 -0
- package/src/tui/slash/term-next.ts +72 -0
- package/src/tui-client/local-chat-turn.ts +31 -9
- package/src/user-config.ts +30 -3
- package/src/ux-sim/boot-daemon-tools-pty-shell-device.ts +136 -0
- package/src/ux-sim/classic-tui-seat-scenarios.ts +158 -4
- package/src/ux-sim/fake-gh.ts +174 -0
- package/src/ux-sim/fake-kubectl.ts +142 -0
- package/src/ux-sim/fake-llm.ts +17 -6
- package/src/ux-sim/next-tui-seat-scenarios.ts +176 -6
- package/src/ux-sim/resume-picker-device.ts +173 -0
- package/src/ux-sim/session-id-seed.ts +60 -0
- package/src/ux-sim/skills-tools-shell-device.ts +156 -0
- package/src/ux-sim/task-agent-parent-host-device.ts +264 -0
- package/src/ux-sim/task-agent-rejudge-on-head-device.ts +114 -0
- package/src/version/packed-revision.json +1 -1
- package/apps/pwa/out/_next/static/chunks/109.f196abf3484bb97f.js +0 -287
- package/apps/pwa/out/_next/static/chunks/1201.afbfc5b1c5e5cbe4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1517.9275b89572098ff3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1574.ad11f8db8396ab45.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1614.7a8c5c40aee0261f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1871-f1eb29d8dbb4065b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/190.285c832bd9626f8c.js +0 -64
- package/apps/pwa/out/_next/static/chunks/2193.0ea24c4a7aa1d004.js +0 -36
- package/apps/pwa/out/_next/static/chunks/223-ad865c1e80491d78.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2265-f0d90b6dbec05f81.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2267.eb4a62a209f09ec4.js +0 -149
- package/apps/pwa/out/_next/static/chunks/2341-86cd06c0cf01aa33.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2352.9abc42422bade876.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2397-c1653a816061842d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2500.cbc1257b774aae52.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2709.8e1889034255fc5f.js +0 -24
- package/apps/pwa/out/_next/static/chunks/284.ac77c0db55bfd3a8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2941.3c3546f96bc6efa7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2976.b000698a3c6512dc.js +0 -24
- package/apps/pwa/out/_next/static/chunks/2986.45d7652e4f13557e.js +0 -2
- package/apps/pwa/out/_next/static/chunks/3155.2587a55196ecb394.js +0 -226
- package/apps/pwa/out/_next/static/chunks/3277.785db1cf09f98601.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3320-f9c77381f85a2c0a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3386-91049feabff9a94e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/339.80afb7e8839372af.js +0 -8
- package/apps/pwa/out/_next/static/chunks/3538.a445e50bb359d068.js +0 -32
- package/apps/pwa/out/_next/static/chunks/3540c645.2595a6af01a97672.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3621.581b2054cc14bee4.js +0 -286
- package/apps/pwa/out/_next/static/chunks/3676.8c28d16fd84ca843.js +0 -1
- package/apps/pwa/out/_next/static/chunks/375-b84540853523fe52.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3757-180308bc61021b05.js +0 -1
- package/apps/pwa/out/_next/static/chunks/379.ee262e37586fe1ae.js +0 -74
- package/apps/pwa/out/_next/static/chunks/3840-5825d56d46976a92.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3969-81054381eaec4c4c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4067-bf9aa60547972937.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4176.e5729c93c29151eb.js +0 -104
- package/apps/pwa/out/_next/static/chunks/4227-e6c84686bc8946ca.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4327.b9e08a71c0009348.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4946.bd106eafd668f248.js +0 -148
- package/apps/pwa/out/_next/static/chunks/5085-bce4904931767ca6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5125.2eb9968b83767193.js +0 -93
- package/apps/pwa/out/_next/static/chunks/5128-75b733fd74a9a1eb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5489f3fe.4bb1458b09f6dead.js +0 -122
- package/apps/pwa/out/_next/static/chunks/5560-2a4648f6a30f16e7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5772-e29e14f8ff127122.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5887.5b2f5b44ce0f7e9a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5899-4c112a2d908cf97f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6041.1b65efb796ebc2a5.js +0 -79
- package/apps/pwa/out/_next/static/chunks/6057-765c0a26028c86b2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6142.f289e0d039f453a6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6199-6bcd61d2a3910e04.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6236.cdf7293e710a9b2d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6387-237e079dac9a3ae6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6448-b6d272d074276e14.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6466-92e65a48490b68a9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6580-cdc0e4a634ce4708.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6659-b242dc31b20b3f29.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6690.c5d9b321b1f79384.js +0 -1
- package/apps/pwa/out/_next/static/chunks/671-e9b6ad0c771c5514.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6862.bcbf89dd0f4496b3.js +0 -27
- package/apps/pwa/out/_next/static/chunks/6912-7b375ee48732c767.js +0 -1
- package/apps/pwa/out/_next/static/chunks/727.7deb87749b0a343a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7481.39f7a4654907bf6e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7545.b1aa42cd15503319.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7551-416d298c2dc4a9ab.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7870-309de463786ac1fc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7888-e29b151bb6a3bb8b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7891.03f910124a737985.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7905-6ba78d9234608f79.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8207.f527886b7c464529.js +0 -1
- package/apps/pwa/out/_next/static/chunks/856.50bda61439d465e6.js +0 -62
- package/apps/pwa/out/_next/static/chunks/9031-92e9b487edb681ee.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9060.5410d9f6a95f6287.js +0 -90
- package/apps/pwa/out/_next/static/chunks/914.8abefd48d579547b.js +0 -94
- package/apps/pwa/out/_next/static/chunks/9187-c87a2207d4ac5d46.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9289.3e92f278821e18e0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9319.7816d3cc741cd34f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9327-e016bb9f1674d24f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9365.3de48bf75193ff9a.js +0 -77
- package/apps/pwa/out/_next/static/chunks/9383.5b5e9aa56b5fea97.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9387-cb929573ef436f39.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9489.c27becacc3283dec.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9514.131c52cc75fe6439.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9536.28962663c7734376.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9686-12286f5bbf15a5a0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9776.289d40cc5a4c342a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9789.60f723d18097ec30.js +0 -1
- package/apps/pwa/out/_next/static/chunks/989.f0c17523c5e61f65.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9972-1df393aa8d4f7d52.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/_not-found/page-96750aba7430959f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-4105e5bbbb043024.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-5d4fa75c2acb113e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/board/page-a79a9bdb3b2142bf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/botlab/page-f1c2047484992a35.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/bots/page-15ffc49b2d8c70e2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-67d53a3fc8734135.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/chat/page-e30c8dc696491336.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/consult/page-2136e04fa77696e2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/control/page-fecd2814790c2e12.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-280aa4a98fc5bb44.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-c14e96b65fb4b883.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/editor/page-187dac74825ed6bf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/exec/page-6bc7246ea8c92448.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/field/page-083747f1d4518f61.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/healthz/route-96750aba7430959f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/inside/page-15ca95a16ec96e1f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/intake/page-a8ac031b3810eb64.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/layout-8835f93110494cda.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live/page-e2de2e59111c9aad.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live-run/page-f2b2e4bf6e981450.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/loops/page-5b92b7f75df20948.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/market/page-468eddf2b1a84ecb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-2af16e62c12f22df.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/morning/page-18b40867a77a5793.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/not-found-fe934f2979f5a4a2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-3eec435537357170.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-ff88cbfd2aa99fc8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-a5b39fb780c70ab5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-ae465dde1d1b3933.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/page-cab9674fde9ead26.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-1da49bc8712284d0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-5e8aa657551ac912.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-fcc36f36c6dc1fe2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-d22db22f2a7296ca.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/page-d12dc7b1773878f0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-99debec9ea7fbec0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/layout-96750aba7430959f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/page-2a088a78bad7e924.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/share/page-2e8ed57db7e69993.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-4b3a16213c2ae8fe.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-f098747ddf38c98b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/today/page-68279e3c843c1fd7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/trace/page-a34a74453367a39d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/vault/page-8767a7db2155a5bd.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-bd5976683460d7f2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-b7364835e7f2ef54.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-311af16b3ee0ffca.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-fb670757274ae990.js +0 -1
- package/apps/pwa/out/_next/static/chunks/ccae1c4b-0cf414f5eff1b10d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/f9a61e4d.1fc2c1dbdd49fe46.js +0 -1
- package/apps/pwa/out/_next/static/chunks/framework-6d497cbf1eef04c6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-app-012f5edec932f337.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-da5aeb809edc94a2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/pages/_app-5ee319af6f749dfe.js +0 -1
- package/apps/pwa/out/_next/static/chunks/pages/_error-4bc84653a718d6c6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/webpack-8a96cf6775c73d6e.js +0 -1
- package/scripts/migrate-monad-to-elanous.ts +0 -195
- package/scripts/rebrand-elanous.ts +0 -242
- /package/apps/pwa/out/_next/static/{uC-N0emedeNOFuaBQFv-I → RrjXTwz-urRAbChP1bX02}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# Source: 44fe14face:docs/reports/gate-0226-failure-census.tsv (pre-change accepted census)
|
|
2
|
+
apps/android/app/src/test/kotlin/com/elanvitalai/elanous/android/data/FeedbackEnvelopeVectors.test.ts > Android FeedbackEnvelope shared vectors > runs FeedbackEnvelopeVectorsTest and verifies every shared vector was accounted for
|
|
3
|
+
apps/android/app/src/test/kotlin/com/elanvitalai/elanous/android/ui/chat/ChatHarnessBubble.test.ts > ChatScreen assistant bubble for harness-style turns > injects turn-end through NexusClient→ViewModel and observes the bubble badge
|
|
4
|
+
apps/android/app/src/test/kotlin/com/elanvitalai/elanous/android/ui/chat/ChatLastItemScrollOffset.test.ts > chatLastItemScrollOffset aligns the list to the last item end > ChatScreenLayoutTest drives ChatScreenLayout and observes last-item end alignment
|
|
5
|
+
scripts/hooks/claude-code-utterance.test.ts > UserPromptSubmit reaches the human Claude Code utterance query
|
|
6
|
+
scripts/lib/nl-routing-measurement.test.ts > NL routing corpus runner safety gate > the runner entrypoint stops after final surface resolution with non-zero exit and safety guidance
|
|
7
|
+
scripts/nl-routing-measurement.test.ts > NL routing corpus runner safety gate > the runner entrypoint stops after final surface resolution with non-zero exit and safety guidance
|
|
8
|
+
scripts/release-loop/freeze-off-parity.test.ts > freeze switch off: gate, publish and unattended release are byte-identical to pre-freeze behavior
|
|
9
|
+
scripts/test-deterministic.test.ts > terminateDirectChild > SIGKILLs the group when the direct child is already dead and a grandchild ignores SIGTERM
|
|
10
|
+
scripts/test-diet/effectiveness.test.ts > TD3 effectiveness > measure --effectiveness counts unreachable imports and leaves unreadable results absent
|
|
11
|
+
scripts/webclone/loop/mirror-age.test.ts > edition-check는 조용함을 재료 미러보다 앞에 두고, 미러는 기존 original-mirror 인자로 부른다
|
|
12
|
+
scripts/webclone/loop/mirror-age.test.ts > mirror-age > 12시간 경계 양쪽과 여러 미러를 fetchedAt만으로 한 줄씩 판정한다
|
|
13
|
+
scripts/webclone/loop/mirror-age.test.ts > mirror-age > 파일 mtime이 아니라 MIRROR.json fetchedAt으로 판정한다
|
|
14
|
+
scripts/webclone/loop/ruler-version.test.ts > ruler-version rc 계약 > 12시간을 넘긴 기준선은 rc 1 이고 ***origin-drift 로 재라***를 같이 낸다
|
|
15
|
+
scripts/webclone/loop/ruler-version.test.ts > ruler-version rc 계약 > 최근 기준선은 rc 0 이고 「묵었다」고 말하지 않는다
|
|
16
|
+
scripts/webclone/measure-fidelity.test.ts > main RenderProbe wiring > 로컬 링크가 우세한 미러 진입 문서는 링크 수와 self-contained 상태를 보존한다
|
|
17
|
+
scripts/webclone/measure-fidelity.test.ts > main RenderProbe wiring > 원격 링크가 60% 이상인 미러 진입 문서를 non-self-contained로 기록한다
|
|
18
|
+
scripts/webclone/measure-fidelity.test.ts > main RenderProbe wiring > 통제한 로컬 원문과 성공 프로브가 최종 렌더 위치까지 JSON 산출로 연결된다
|
|
19
|
+
scripts/webclone/measure-fidelity.test.ts > main mirror-entry locality wiring > 네트워크 지배 미러는 참조 수를 내고 픽셀 차이를 품질로 읽을 수 없다고 말한다
|
|
20
|
+
scripts/webclone/measure-fidelity.test.ts > main mirror-entry locality wiring > 로컬 지배 미러는 참조 수를 내고 네트워크 지배 경고를 내지 않는다
|
|
21
|
+
scripts/webclone/measure-fidelity.test.ts > main mirror-entry locality wiring > 미러 진입 문서가 없으면 참조 수와 지배 판정을 못 쟀다로 보존한다
|
|
22
|
+
scripts/webclone/measure-fidelity.test.ts > main overlay observability wiring > 원본과 사본 처리 수를 더해 내고 잔여 덮개면 픽셀 차이를 미신뢰로 표시한다
|
|
23
|
+
scripts/webclone/measure-fidelity.test.ts > main screenshot reliability wiring > 실제 정상·빈 PNG를 기본 통계 추출 경로로 읽어 RMSE를 보존하고 미러 공백 사유를 JSON에 낸다
|
|
24
|
+
src/acp/grok-leader-manager.test.ts > GrokLeaderManager · ensureLeader idempotency contract > ensureLeader returns state object (does not throw)
|
|
25
|
+
src/agent-mission/driver-workdir.test.ts > ignored files outside workdir are detected when created or modified
|
|
26
|
+
src/agent-mission/driver-workdir.test.ts > workdir skips git, runs PTY in the folder by default, and accepts a new mp4
|
|
27
|
+
src/autopilot/build/isolated-instance.test.ts > createIsolatedInstance — 주입 worktree > ★ defaultMergeMainIntoWorktree — fetch 실패 → error / up-to-date / merged (실 git)
|
|
28
|
+
src/dashboard/first-screen-band-wiring.test.ts > showDashboard renders the startup band before and after the real first chat input
|
|
29
|
+
src/directives/directive-index.test.ts > FTS5, incremental byte offsets, version search, redaction, track votes and labels; originals stay unchanged
|
|
30
|
+
src/git-fs/spawn-discipline.test.ts > 실제 저장소 — 이 게이트가 지키는 것 > 실물 git 프론트도어는 --help를 git argv로 전달하고 상태 줄과 git 종료 코드를 보존한다
|
|
31
|
+
src/git-fs/spawn-discipline.test.ts > 실제 저장소 — 이 게이트가 지키는 것 > 실물 진입점에서 scripts 유예와 요약을 산출한다
|
|
32
|
+
src/graph-runner/graph-cli.test.ts > graph YAML triggers.schedule fires through the workflow scheduler into graph tick and persists a run
|
|
33
|
+
src/graph-runner/graph-cli.test.ts > graph tick defaults to idle and --start passes JSON input, prints results, and does not restart a finished run
|
|
34
|
+
src/graph-runner/graph-variant-cli.test.ts > a paused variant resumes from its saved graph after the original template changes
|
|
35
|
+
src/graph-runner/graph-variant-cli.test.ts > a route plan without a budget also executes the changed route
|
|
36
|
+
src/graph-runner/graph-variant-cli.test.ts > ambiguous outcome plan is rejected before ledger or node execution
|
|
37
|
+
src/graph-runner/graph-variant-cli.test.ts > two plans on the same template execute distinct persisted variant graphs through fake nodes
|
|
38
|
+
src/graph-runner/graph-variant-cli.test.ts > variant preserves unrelated node and edge metadata in its runnable snapshot
|
|
39
|
+
src/harness/dogfood.test.ts > assertThrowawayTarget — C 안전 가드(auto-approve 우회 방지) > runHarnessDogfood 도 실경로 target 을 current CLI guidance와 함께 refuse
|
|
40
|
+
src/harness/dogfood.test.ts > assertThrowawayTarget — C 안전 가드(auto-approve 우회 방지) > ★ 실경로(홈·repo·시스템) → refuse with current CLI guidance
|
|
41
|
+
src/mss/logging/log-store.test.ts > LogStore writer contention > carries a failed open observation to the next writable connection
|
|
42
|
+
src/plugins/adapters/claude-package.test.ts > readClaudePackageLedger > reads this machine live ledger without a pluginsRoot override
|
|
43
|
+
src/self-implement/orchestrator-blocked-draft.test.ts > environment branch is committed and pushed to an existing origin without opening a PR
|
|
44
|
+
src/self-implement/orchestrator-blocked-draft.test.ts > environment stop without origin commits changes on the local branch for checkout recovery
|
|
45
|
+
src/self-implement/orchestrator-blocked-draft.test.ts > failed environment push is reported to the caller and never presented as preserved
|
|
46
|
+
src/self-implement/orchestrator-blocked-draft.test.ts > missing worktree keeps provider attribution and reports failed preservation without a draft
|
|
47
|
+
src/self-implement/orchestrator-blocked-draft.test.ts > no changes takes precedence over environment branch preservation
|
|
48
|
+
src/self-implement/orchestrator-blocked-draft.test.ts > quota-exhausted blocked run preserves its branch without opening a draft; implementation deficit still opens one
|
|
49
|
+
src/self-implement/orchestrator-blocked-draft.test.ts > worktree-only environment stop never pushes, even when an origin exists
|
|
50
|
+
src/self-implement/run-chain-query.test.ts > queryRunChain > pages past a full matching dispatch result page to find an old matching session
|
|
51
|
+
src/self-implement/seams-usage-role.test.ts > goal summary passes classify usage role alongside the unchanged resolved model
|
|
52
|
+
src/session-runtime/coding-surface-shell.test.ts > coding surface — shell 실행 tool 노출 > runtime 없는 Agent 폴백은 부모 도구·dispatcher·중단 신호를 자식에 보존한다
|
|
53
|
+
src/skills/tools/dev-harness.test.ts > dispatchRunDevHarness — P3 외부 repo 타깃 > target 실 git repo → repoRoot+elanousBinRoot 를 seam 으로
|
|
54
|
+
src/task-agent/mission.test.ts > shadow --mission → 미션 카드 1 ⊕ 조각 카드 4 · 같은 상태 파일 · 선행 없는 조각만 launch 수 · 나머지 wait after
|
|
55
|
+
src/task-orchestrator/surfaces/pod-pool-cli.test.ts > independent harness ask/say and self CLI dispatch run real kubectl apply only when lease permits
|
|
56
|
+
src/video-pipeline/recipes/reframe.test.ts > reframe — Affinity 가 없어도 «끝까지» 간다 > ⛔ 러너가 «없어도» 멈추지 않는다 (앱이 없는 고객 기계의 모습)
|
|
57
|
+
src/video-pipeline/recipes/vlog.test.ts > vlog 레시피 — 실제 ffmpeg > ⭐ build-layers — 덮는 층(스크림·자막)이 «투명»하다 (🩸 불투명 자막이 영상 전체를 덮었다)
|
|
58
|
+
src/webclone/archive-run.test.ts > 브라우저 재현 가능한 미러 계약 > 실제 wget은 POSIX ERE를 컴파일해 www 형제 자산만 받고 외부 호스트는 받지 않는다
|
|
59
|
+
test/acp-subagent-wire-meta.test.ts > AcpAgent.prompt · _meta forwarding > undefined meta → request omits _meta field
|
|
60
|
+
test/ad-production.test.ts > renders planned captions after assembly while preserving the uncaptained master and named failures
|
|
61
|
+
test/ad-qc-measure.test.ts > QC measurement adapter > uses distinct OCR artifacts for repeated and parallel video measurement plans
|
|
62
|
+
test/dashboard-acp-boot.test.ts > bootDashboardAcpSession — boot observability > records the selected branch and every successful boot outcome
|
|
63
|
+
test/dashboard-turn-typeahead-echo.test.ts > dashboard real user echo wiring > PTY screen preserves submitted Q2 → answer Q2 → submitted Q3 → answer Q3
|
|
64
|
+
test/finance-tools.test.ts > finance tool surface > SQL-injection guard on attractiveness args
|
|
65
|
+
test/finance-tools.test.ts > finance tool surface > finance_trend (A2.1/A4): rotation + country + guards + injection-safe
|
|
66
|
+
test/harness-worktree-add.test.ts > harness worktree add > 판정 신호: goal context records a leading H1 goal title instead of structural H2 headings
|
|
67
|
+
test/harness-worktree-add.test.ts > harness worktree add > 판정 신호: goal synthesis truncates generated output at 250 characters and falls back to title on empty or thrown model output
|
|
68
|
+
test/intake-plane-check-repo-axis.test.ts > frequent matches do not overflow the search buffer and disclose sampling
|
|
69
|
+
test/llm-openrouter-provider.test.ts > OpenRouter provider wire > ⛔ 교차 경로 — config 가 grok 이면 그 키·baseUrl 을 OpenRouter 로 «안» 보낸다
|
|
70
|
+
test/nexus-api-terminals.test.ts > handleTerminalsList > merges web preview PTYs into local and federated lists with their first registration time
|
|
71
|
+
test/oauth/codex-mirror-real-home-guard.test.ts > ① 가드 — 실홈이 대상이면 «던진다» (쓰기는 일어나지 않는다) > ⛔ «심볼릭 링크»로 우회해도 던진다 — 문자열 비교로는 통과했다(리뷰 must-fix)
|
|
72
|
+
test/ocr-tesseract.test.ts > OcrRegistry · Tesseract picker behaviour > strengths:["context-aware"] still picks LLM Vision (Tesseract loses)
|
|
73
|
+
test/persistent-grounding-runtime.test.ts > PersistentGrounding ToolRuntime > default registration alias dispatch runs the guarded search loop and records session observations
|
|
74
|
+
test/persistent-grounding-runtime.test.ts > PersistentGrounding ToolRuntime > generates one session ID for ambient observations and grounding when no session ID is supplied
|
|
75
|
+
test/plugin-hooks-shell.test.ts > shell-hook > array JSON → warn + {}
|
|
76
|
+
test/plugin-hooks-shell.test.ts > shell-hook > env propagated to shell
|
|
77
|
+
test/plugin-hooks-shell.test.ts > shell-hook > stdout JSON object → output
|
|
78
|
+
test/plugin-manifest-hooks.test.ts > plugin-host hook registration > end-to-end dispatch through registered manifest hook
|
|
79
|
+
test/plugin-missions-runtime.test.ts > PX-4 P3 — MissionRegistry > never policy: history grows + iteration advances each tick
|
|
80
|
+
test/plugin-missions-runtime.test.ts > PX-4 P3 — MissionRegistry > score_improvement: only strictly-better score advances
|
|
81
|
+
test/plugin-missions-runtime.test.ts > PX-4 P3 — runMissionEvaluator > parses JSON stdout into MissionResult
|
|
82
|
+
test/preview-terminal.test.ts > PreviewTerminal > resize reaches the kernel PTY — the shell sees the new size (stty size)
|
|
83
|
+
test/rules-contract.test.ts > 변경 ↔ 규칙 갱신 — sources 가 바뀌면 그 «규칙 파일»이 같은 diff 에 있다 > 이 검사가 무엇을 봤는지 «말한다»
|
|
84
|
+
test/self-dev-manual-goal-evidence.test.ts > hand-authored --file goal evidence contract > passes the attached requirement to the self-implement boundary for --file input
|
|
85
|
+
test/shell-audit-log.test.ts > shell-primitive audit-log: programmatic sink > run event includes truncated when output exceeds budget
|
|
86
|
+
test/shell-primitive.test.ts > shell-primitive: runShell (no approval) > maxOutputChars truncates and sets truncated=true
|
|
87
|
+
test/skill-tool-mermaid.test.ts > dispatchMermaidRender — happy path > renders a simple flowchart to Unicode boxes
|
|
88
|
+
test/voice-tts-providers.test.ts > TTS provider availability and unpaid default > falls back to edge-tts, not openai-tts, when nobody chose and no credential resolves
|
|
89
|
+
test/voice-tts-providers.test.ts > TTS provider availability and unpaid default > reports edge-tts and macos-say usable without credentials
|
|
90
|
+
test/workflow-templates-packaged.test.ts > the npm package carries every workflow template the repository has
|
|
91
|
+
test/plugin-missions-runtime.test.ts > [error]
|
|
@@ -0,0 +1,546 @@
|
|
|
1
|
+
#!/usr/bin/env bun
|
|
2
|
+
/**
|
|
3
|
+
* GATE-0226-REMAINING-90 — 0.2.26 gate 실패 ID 전수표의 무결성 검증 진입점.
|
|
4
|
+
*
|
|
5
|
+
* 판정: `docs/reports/gate-0226-failure-census.tsv`가 accepted 실패 ID 96건을 중복 없이 보존하고,
|
|
6
|
+
* 그중 `provider-intake` 6건(첫 감소 칸 GATE-0226-PROVIDER-INTAKE6)을 제외한 90건이 정확히 남으며,
|
|
7
|
+
* `Error: no ACP` 로그 사건(34회)은 실패 ID로 더해지지 않았음. 보고서 md의 96행 색인과 선언 카운트도 실측과 일치.
|
|
8
|
+
* intake 제외 90개 ID는 변경 전 `44fe14face` TSV에서 고정한 accepted 목록과 집합 비교한다.
|
|
9
|
+
*
|
|
10
|
+
* 사용: bun run scripts/gate-0226-failure-census.ts [--tsv <path>] [--report <path>] [--accepted <path|none>] [--json] [--write-repair-card]
|
|
11
|
+
*
|
|
12
|
+
* `--write-repair-card`: 표의 `repair_card` 칸을 묶음·주인에서 다시 계산해 되쓴다(검증은 그대로 이어진다).
|
|
13
|
+
*/
|
|
14
|
+
import { existsSync, readFileSync, writeFileSync } from 'node:fs';
|
|
15
|
+
import { homedir } from 'node:os';
|
|
16
|
+
import { join, resolve } from 'node:path';
|
|
17
|
+
|
|
18
|
+
export const CENSUS_TSV = 'docs/reports/gate-0226-failure-census.tsv';
|
|
19
|
+
export const CENSUS_REPORT = 'docs/reports/REPORT-gate-0226-failure-census.md';
|
|
20
|
+
export const DEFAULT_ACCEPTED = 'elanous-hq/seat-state/OP/tools/accepted-0226.json';
|
|
21
|
+
export const DEFAULT_REMAINING_BASELINE = 'scripts/gate-0226-accepted-remaining-90.txt';
|
|
22
|
+
|
|
23
|
+
export const EXPECTED_HEADER = [
|
|
24
|
+
'no',
|
|
25
|
+
'test_id',
|
|
26
|
+
'source_file',
|
|
27
|
+
'group',
|
|
28
|
+
'classification',
|
|
29
|
+
'root_cause',
|
|
30
|
+
'repro_command',
|
|
31
|
+
'evidence',
|
|
32
|
+
'prescription',
|
|
33
|
+
'owner',
|
|
34
|
+
'replacement_contract_if_deleted',
|
|
35
|
+
'status',
|
|
36
|
+
'repair_card',
|
|
37
|
+
] as const;
|
|
38
|
+
|
|
39
|
+
export const TOTAL_IDS = 96;
|
|
40
|
+
export const INTAKE_GROUP = 'provider-intake';
|
|
41
|
+
export const INTAKE_IDS = 6;
|
|
42
|
+
export const REMAINING_IDS = 90;
|
|
43
|
+
|
|
44
|
+
export const EXPECTED_STATUS: Record<string, number> = {
|
|
45
|
+
'hypothesis-unverified': 68,
|
|
46
|
+
'paired-reproduced-root-cause-candidate': 7,
|
|
47
|
+
'untriaged': 21,
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
export const EXPECTED_GROUP: Record<string, number> = {
|
|
51
|
+
'UX-gate-pair': 5,
|
|
52
|
+
'blocked-draft': 7,
|
|
53
|
+
'plugin-stdin-EPIPE-candidate': 7,
|
|
54
|
+
'provider-intake': 6,
|
|
55
|
+
'provider-self-implement': 2,
|
|
56
|
+
'remaining-review': 61,
|
|
57
|
+
'webclone-measure': 8,
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
export const REQUIRED_FIELDS = ['classification', 'root_cause', 'repro_command', 'evidence', 'prescription', 'owner'] as const;
|
|
61
|
+
|
|
62
|
+
export const NO_ACP_MARKER = 'Error: no ACP';
|
|
63
|
+
export const ACP_LOG_EVENTS = 34;
|
|
64
|
+
export const NO_DELETION_PROPOSAL = '시험 삭제 제안 없음';
|
|
65
|
+
|
|
66
|
+
/** 묶음 → 수리 칸. `remaining-review` 만 주인별로 다시 쪼갠다. */
|
|
67
|
+
export const REPAIR_CARDS_BY_GROUP: Record<string, string> = {
|
|
68
|
+
'provider-intake': 'GATE-0226-PROVIDER-INTAKE6',
|
|
69
|
+
'webclone-measure': 'GATE-0226-WEBCLONE-MEASURE',
|
|
70
|
+
'blocked-draft': 'GATE-0226-BLOCKED-DRAFT',
|
|
71
|
+
'plugin-stdin-EPIPE-candidate': 'GATE-0226-PLUGIN-STDIN-EPIPE',
|
|
72
|
+
'UX-gate-pair': 'GATE-0226-UX-GATE-PAIR',
|
|
73
|
+
'provider-self-implement': 'GATE-0226-PROVIDER-SELF-IMPLEMENT',
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
export const REMAINING_CARD_PREFIX = 'GATE-0226-REMAINING-';
|
|
77
|
+
|
|
78
|
+
/** 주인 표기(`TC/OP gate`·`UX/Android·OP gate`)에서 두 글자 이상 대문자 트랙 이름만 뽑아 칸 이름 꼬리를 만든다. */
|
|
79
|
+
export function ownerSlug(owner: string): string {
|
|
80
|
+
const tracks: string[] = [];
|
|
81
|
+
for (const token of owner.split(/[/·]/)) {
|
|
82
|
+
const match = /^[A-Z]{2,}/.exec(token.trim());
|
|
83
|
+
if (match && !tracks.includes(match[0])) tracks.push(match[0]);
|
|
84
|
+
}
|
|
85
|
+
return tracks.join('-');
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/** 한 실패 ID를 어느 수리 칸이 이어받는지 정한다. 묶음 단위 칸 + `remaining-review` 는 주인 단위 칸. */
|
|
89
|
+
export function repairCardFor(group: string, owner: string): string {
|
|
90
|
+
const fixed = REPAIR_CARDS_BY_GROUP[group];
|
|
91
|
+
if (fixed) return fixed;
|
|
92
|
+
const slug = ownerSlug(owner);
|
|
93
|
+
return slug.length > 0 ? `${REMAINING_CARD_PREFIX}${slug}` : REMAINING_CARD_PREFIX;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export type CensusRow = Record<(typeof EXPECTED_HEADER)[number], string>;
|
|
97
|
+
|
|
98
|
+
export type CensusAudit = {
|
|
99
|
+
ok: boolean;
|
|
100
|
+
problems: string[];
|
|
101
|
+
counts: {
|
|
102
|
+
rows: number;
|
|
103
|
+
intake: number;
|
|
104
|
+
remaining: number;
|
|
105
|
+
status: Record<string, number>;
|
|
106
|
+
group: Record<string, number>;
|
|
107
|
+
repair: Record<string, number>;
|
|
108
|
+
};
|
|
109
|
+
intakeIds: string[];
|
|
110
|
+
remainingIds: string[];
|
|
111
|
+
acpLogEvents: number;
|
|
112
|
+
ledger: { path: string; status: 'compared' | 'skipped' | 'failed'; ids: number };
|
|
113
|
+
remainingBaseline: { path: string; status: 'compared' | 'failed'; ids: number };
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
/** RFC4180 형식의 탭 구분 표를 읽는다. 실패 ID 안의 따옴표·탭·개행을 보존한다. */
|
|
117
|
+
export function parseTsv(text: string): string[][] {
|
|
118
|
+
const rows: string[][] = [];
|
|
119
|
+
let row: string[] = [];
|
|
120
|
+
let field = '';
|
|
121
|
+
let quoted = false;
|
|
122
|
+
for (let i = 0; i < text.length; i += 1) {
|
|
123
|
+
const ch = text[i]!;
|
|
124
|
+
if (quoted) {
|
|
125
|
+
if (ch === '"') {
|
|
126
|
+
if (text[i + 1] === '"') {
|
|
127
|
+
field += '"';
|
|
128
|
+
i += 1;
|
|
129
|
+
} else {
|
|
130
|
+
quoted = false;
|
|
131
|
+
}
|
|
132
|
+
} else {
|
|
133
|
+
field += ch;
|
|
134
|
+
}
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
if (ch === '"') {
|
|
138
|
+
quoted = true;
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
if (ch === '\t') {
|
|
142
|
+
row.push(field);
|
|
143
|
+
field = '';
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
if (ch === '\r') continue;
|
|
147
|
+
if (ch === '\n') {
|
|
148
|
+
row.push(field);
|
|
149
|
+
rows.push(row);
|
|
150
|
+
row = [];
|
|
151
|
+
field = '';
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
field += ch;
|
|
155
|
+
}
|
|
156
|
+
if (field.length > 0 || row.length > 0) {
|
|
157
|
+
row.push(field);
|
|
158
|
+
rows.push(row);
|
|
159
|
+
}
|
|
160
|
+
return rows.filter((cells) => cells.some((cell) => cell.trim().length > 0));
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
function encodeCell(value: string): string {
|
|
164
|
+
return /[\t\n\r"]/.test(value) ? `"${value.replace(/"/g, '""')}"` : value;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/** `CensusRow`를 탭 구분 표로 되쓴다(따옴표는 필요할 때만, 줄바꿈은 `\n`). */
|
|
168
|
+
export function serializeTsv(rows: CensusRow[]): string {
|
|
169
|
+
const lines = [EXPECTED_HEADER.join('\t')];
|
|
170
|
+
for (const row of rows) lines.push(EXPECTED_HEADER.map((name) => encodeCell(row[name])).join('\t'));
|
|
171
|
+
return `${lines.join('\n')}\n`;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* 표의 `repair_card` 칸을 묶음·주인에서 다시 계산해 파일에 되쓴다.
|
|
176
|
+
* 표에 정본 스키마 밖 칸이 있으면 자료를 잃지 않도록 거부한다.
|
|
177
|
+
*/
|
|
178
|
+
export function writeRepairCards(path: string): number {
|
|
179
|
+
const rawRows = parseTsv(readFileSync(path, 'utf8'));
|
|
180
|
+
const header = rawRows[0] ?? [];
|
|
181
|
+
const unknown = header.filter((name) => !(EXPECTED_HEADER as readonly string[]).includes(name));
|
|
182
|
+
if (unknown.length > 0) throw new Error(`${path}: 정본 스키마 밖 칸 (${unknown.join(', ')})`);
|
|
183
|
+
const rows: CensusRow[] = rawRows.slice(1).map((cells) => {
|
|
184
|
+
const row = {} as CensusRow;
|
|
185
|
+
EXPECTED_HEADER.forEach((name) => {
|
|
186
|
+
const at = header.indexOf(name);
|
|
187
|
+
row[name] = at >= 0 ? (cells[at] ?? '') : '';
|
|
188
|
+
});
|
|
189
|
+
row.repair_card = repairCardFor(row.group, row.owner);
|
|
190
|
+
return row;
|
|
191
|
+
});
|
|
192
|
+
writeFileSync(path, serializeTsv(rows), 'utf8');
|
|
193
|
+
return rows.length;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
function tally(values: string[]): Record<string, number> {
|
|
197
|
+
const out: Record<string, number> = {};
|
|
198
|
+
for (const value of values) out[value] = (out[value] ?? 0) + 1;
|
|
199
|
+
return out;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
function sortedTally(values: string[]): Record<string, number> {
|
|
203
|
+
const counted = tally(values);
|
|
204
|
+
const out: Record<string, number> = {};
|
|
205
|
+
for (const key of Object.keys(counted).sort()) out[key] = counted[key]!;
|
|
206
|
+
return out;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
function sameTally(actual: Record<string, number>, expected: Record<string, number>): boolean {
|
|
210
|
+
const keys = new Set([...Object.keys(actual), ...Object.keys(expected)]);
|
|
211
|
+
for (const key of keys) if ((actual[key] ?? 0) !== (expected[key] ?? 0)) return false;
|
|
212
|
+
return true;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/** 보고서 md의 `| 번호 | \`실패 ID\` | 묶음 | \`상태\` | 주인 |` 색인 행을 읽는다. */
|
|
216
|
+
export function parseReportIndex(report: string): Array<{ no: number; test_id: string; group: string; status: string; owner: string }> {
|
|
217
|
+
const out: Array<{ no: number; test_id: string; group: string; status: string; owner: string }> = [];
|
|
218
|
+
for (const line of report.split('\n')) {
|
|
219
|
+
const match = /^\| (\d+) \| `(.+?)` \| (.+?) \| `(.+?)` \| (.+?) \|$/.exec(line);
|
|
220
|
+
if (!match) continue;
|
|
221
|
+
out.push({
|
|
222
|
+
no: Number(match[1]),
|
|
223
|
+
test_id: match[2]!.replace(/\\\|/g, '|'),
|
|
224
|
+
group: match[3]!.trim(),
|
|
225
|
+
status: match[4]!,
|
|
226
|
+
owner: match[5]!.trim(),
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
return out;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/** 보고서 md가 선언한 `총 N건 = provider-intake M건 + 나머지 K건` 문면을 읽는다. */
|
|
233
|
+
export function parseReportCounts(report: string): { total: number; intake: number; remaining: number } | null {
|
|
234
|
+
const match = /총 (\d+)건 = provider-intake (\d+)건[^\n]*나머지 (\d+)건/.exec(report);
|
|
235
|
+
if (!match) return null;
|
|
236
|
+
return { total: Number(match[1]), intake: Number(match[2]), remaining: Number(match[3]) };
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/** 보고서 md의 수리 칸 표 `| \`GATE-0226-…\` | N |` 행을 읽는다. */
|
|
240
|
+
export function parseReportRepairCards(report: string): Record<string, number> {
|
|
241
|
+
const out: Record<string, number> = {};
|
|
242
|
+
for (const line of report.split('\n')) {
|
|
243
|
+
const match = /^\| `(GATE-0226-[A-Z0-9-]+)` \| (\d+) \|/.exec(line);
|
|
244
|
+
if (match) out[match[1]!] = Number(match[2]);
|
|
245
|
+
}
|
|
246
|
+
return out;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
function readAcceptedIds(path: string): string[] | null {
|
|
250
|
+
if (!existsSync(path)) return null;
|
|
251
|
+
const parsed: unknown = JSON.parse(readFileSync(path, 'utf8'));
|
|
252
|
+
if (!Array.isArray(parsed)) throw new Error(`${path}: accepted 원장이 배열이 아니다`);
|
|
253
|
+
return parsed.map((entry) => {
|
|
254
|
+
const id = (entry as { id?: unknown }).id;
|
|
255
|
+
if (typeof id !== 'string' || id.length === 0) throw new Error(`${path}: id 없는 항목`);
|
|
256
|
+
return id;
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
export type AuditInput = {
|
|
261
|
+
tsvText: string;
|
|
262
|
+
reportText: string;
|
|
263
|
+
/** accepted 원장 ID. null 이면 비교 불가(원장 부재)를 산출로 남긴다. */
|
|
264
|
+
acceptedIds: string[] | null;
|
|
265
|
+
/** 변경 전 독립 기준으로 고정한 remaining accepted ID 집합. */
|
|
266
|
+
remainingBaselineIds: string[] | null;
|
|
267
|
+
remainingBaselinePath: string;
|
|
268
|
+
ledgerPath: string;
|
|
269
|
+
ledgerRequired: boolean;
|
|
270
|
+
};
|
|
271
|
+
|
|
272
|
+
export function auditCensus(input: AuditInput): CensusAudit {
|
|
273
|
+
const problems: string[] = [];
|
|
274
|
+
const rawRows = parseTsv(input.tsvText);
|
|
275
|
+
const header = rawRows[0] ?? [];
|
|
276
|
+
const headerMatches = header.length === EXPECTED_HEADER.length && EXPECTED_HEADER.every((name, at) => header[at] === name);
|
|
277
|
+
if (!headerMatches) {
|
|
278
|
+
problems.push(`tsv-header: 기대 ${EXPECTED_HEADER.join(',')} / 실측 ${header.join(',')}`);
|
|
279
|
+
}
|
|
280
|
+
const rows: CensusRow[] = rawRows.slice(1).map((cells) => {
|
|
281
|
+
const row = {} as CensusRow;
|
|
282
|
+
EXPECTED_HEADER.forEach((name, at) => {
|
|
283
|
+
row[name] = cells[at] ?? '';
|
|
284
|
+
});
|
|
285
|
+
return row;
|
|
286
|
+
});
|
|
287
|
+
|
|
288
|
+
if (rows.length !== TOTAL_IDS) problems.push(`row-count: 기대 ${TOTAL_IDS}행 / 실측 ${rows.length}행`);
|
|
289
|
+
|
|
290
|
+
const numbering = rows.map((row) => Number(row.no));
|
|
291
|
+
const numbered = numbering.every((value, at) => value === at + 1);
|
|
292
|
+
if (!numbered) problems.push(`row-numbering: no 컬럼이 1..${rows.length} 순차가 아니다 (${numbering.slice(0, 5).join(',')}…)`);
|
|
293
|
+
|
|
294
|
+
const ids = rows.map((row) => row.test_id);
|
|
295
|
+
const uniqueIds = new Set(ids);
|
|
296
|
+
if (uniqueIds.size !== ids.length) {
|
|
297
|
+
const dupes = Object.entries(tally(ids))
|
|
298
|
+
.filter(([, count]) => count > 1)
|
|
299
|
+
.map(([id]) => id);
|
|
300
|
+
problems.push(`unique-ids: 중복 ${ids.length - uniqueIds.size}건 (${dupes.slice(0, 3).join(' | ')})`);
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
const intakeRows = rows.filter((row) => row.group === INTAKE_GROUP);
|
|
304
|
+
const otherRows = rows.filter((row) => row.group !== INTAKE_GROUP);
|
|
305
|
+
const intakeIds = intakeRows.map((row) => row.test_id);
|
|
306
|
+
const remainingIds = otherRows.map((row) => row.test_id);
|
|
307
|
+
if (intakeRows.length !== INTAKE_IDS) {
|
|
308
|
+
problems.push(`intake-split: ${INTAKE_GROUP} 기대 ${INTAKE_IDS}건 / 실측 ${intakeRows.length}건`);
|
|
309
|
+
}
|
|
310
|
+
if (otherRows.length !== REMAINING_IDS) {
|
|
311
|
+
problems.push(`intake-split: 제외 후 나머지 기대 ${REMAINING_IDS}건 / 실측 ${otherRows.length}건`);
|
|
312
|
+
}
|
|
313
|
+
const overlap = remainingIds.filter((id) => intakeIds.includes(id));
|
|
314
|
+
if (overlap.length > 0) problems.push(`intake-split: 제외 대상이 남은 묶음에도 있다 (${overlap.slice(0, 3).join(' | ')})`);
|
|
315
|
+
if (new Set(remainingIds).size !== remainingIds.length) {
|
|
316
|
+
problems.push(`intake-split: 제외 후 90건에 id 중복이 있다`);
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
const intakeCard = REPAIR_CARDS_BY_GROUP[INTAKE_GROUP]!;
|
|
320
|
+
const wrongCard = rows.filter((row) => row.repair_card !== repairCardFor(row.group, row.owner));
|
|
321
|
+
if (wrongCard.length > 0) {
|
|
322
|
+
problems.push(
|
|
323
|
+
`repair-card: 묶음·주인에서 유도한 칸 이름과 다른 행 ${wrongCard.length}건 (no ${wrongCard.slice(0, 4).map((row) => row.no).join(',')})`,
|
|
324
|
+
);
|
|
325
|
+
}
|
|
326
|
+
const repair = sortedTally(rows.map((row) => row.repair_card));
|
|
327
|
+
const onIntakeCard = rows.filter((row) => row.repair_card === intakeCard);
|
|
328
|
+
if (onIntakeCard.length !== INTAKE_IDS) {
|
|
329
|
+
problems.push(`repair-card: ${intakeCard} 기대 ${INTAKE_IDS}건 / 실측 ${onIntakeCard.length}건`);
|
|
330
|
+
}
|
|
331
|
+
const afterIntakeCard = rows.filter((row) => row.repair_card !== intakeCard);
|
|
332
|
+
if (afterIntakeCard.length !== REMAINING_IDS) {
|
|
333
|
+
problems.push(`repair-card: ${intakeCard} 제외 후 기대 ${REMAINING_IDS}건 / 실측 ${afterIntakeCard.length}건`);
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
const status = sortedTally(rows.map((row) => row.status));
|
|
337
|
+
if (!sameTally(status, EXPECTED_STATUS)) {
|
|
338
|
+
problems.push(`status-totals: 기대 ${JSON.stringify(EXPECTED_STATUS)} / 실측 ${JSON.stringify(status)}`);
|
|
339
|
+
}
|
|
340
|
+
const group = sortedTally(rows.map((row) => row.group));
|
|
341
|
+
if (!sameTally(group, EXPECTED_GROUP)) {
|
|
342
|
+
problems.push(`group-totals: 기대 ${JSON.stringify(EXPECTED_GROUP)} / 실측 ${JSON.stringify(group)}`);
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
const acpAttributed = rows.filter((row) => [row.evidence, row.root_cause, row.repro_command].some((cell) => cell.includes(NO_ACP_MARKER)));
|
|
346
|
+
if (acpAttributed.length > 0) {
|
|
347
|
+
problems.push(`no-acp-exclusion: \`${NO_ACP_MARKER}\` 로그 사건을 실패 ID로 센 행 ${acpAttributed.length}건 (${acpAttributed.map((row) => row.no).join(',')})`);
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
const blankCells: string[] = [];
|
|
351
|
+
const deletionProposals: string[] = [];
|
|
352
|
+
for (const row of rows) {
|
|
353
|
+
for (const field of REQUIRED_FIELDS) {
|
|
354
|
+
if (row[field].trim().length === 0) blankCells.push(`${row.no}.${field}`);
|
|
355
|
+
}
|
|
356
|
+
if (row.replacement_contract_if_deleted.trim().length === 0) blankCells.push(`${row.no}.replacement_contract_if_deleted`);
|
|
357
|
+
else if (!row.replacement_contract_if_deleted.includes(NO_DELETION_PROPOSAL)) deletionProposals.push(row.no);
|
|
358
|
+
}
|
|
359
|
+
if (blankCells.length > 0) problems.push(`evidence-completeness: 빈 칸 ${blankCells.length}개 (${blankCells.slice(0, 6).join(',')})`);
|
|
360
|
+
if (deletionProposals.length > 0) {
|
|
361
|
+
problems.push(`no-test-deletion-proposed: 근거 없이 시험 삭제를 제안한 행 ${deletionProposals.length}건 (${deletionProposals.slice(0, 6).join(',')})`);
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
if (!input.reportText.includes('## 90건 후속 조사와 남은 수리 칸')) {
|
|
365
|
+
problems.push('report-follow-up: 90건 후속 조사·상태·주인 근거 절이 없다');
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
const index = parseReportIndex(input.reportText);
|
|
369
|
+
if (index.length !== rows.length) {
|
|
370
|
+
problems.push(`report-index-parity: 보고서 색인 ${index.length}행 / TSV ${rows.length}행`);
|
|
371
|
+
} else {
|
|
372
|
+
const mismatched = rows.filter((row, at) => {
|
|
373
|
+
const entry = index[at]!;
|
|
374
|
+
return entry.no !== at + 1 || entry.test_id !== row.test_id || entry.group !== row.group || entry.status !== row.status || entry.owner !== row.owner;
|
|
375
|
+
});
|
|
376
|
+
if (mismatched.length > 0) {
|
|
377
|
+
problems.push(`report-index-parity: TSV와 어긋난 색인 행 ${mismatched.length}건 (no ${mismatched.slice(0, 4).map((row) => row.no).join(',')})`);
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
const declared = parseReportCounts(input.reportText);
|
|
382
|
+
if (!declared) {
|
|
383
|
+
problems.push('report-counts: 보고서에 `총 N건 = provider-intake M건 … 나머지 K건` 선언이 없다');
|
|
384
|
+
} else if (declared.total !== rows.length || declared.intake !== intakeRows.length || declared.remaining !== otherRows.length) {
|
|
385
|
+
problems.push(
|
|
386
|
+
`report-counts: 보고서 선언 ${declared.total}/${declared.intake}/${declared.remaining} / 실측 ${rows.length}/${intakeRows.length}/${otherRows.length}`,
|
|
387
|
+
);
|
|
388
|
+
}
|
|
389
|
+
const declaredRepair = parseReportRepairCards(input.reportText);
|
|
390
|
+
if (Object.keys(declaredRepair).length === 0) {
|
|
391
|
+
problems.push('report-repair-parity: 보고서에 수리 칸 표(`| `GATE-0226-…` | N |`)가 없다');
|
|
392
|
+
} else if (!sameTally(declaredRepair, repair)) {
|
|
393
|
+
problems.push(`report-repair-parity: 보고서 선언 ${JSON.stringify(declaredRepair)} / 실측 ${JSON.stringify(repair)}`);
|
|
394
|
+
}
|
|
395
|
+
if (!input.reportText.includes(NO_ACP_MARKER) || !input.reportText.includes(`${ACP_LOG_EVENTS}회`) || !input.reportText.includes('겹침은 0건')) {
|
|
396
|
+
problems.push(`report-counts: 보고서가 \`${NO_ACP_MARKER}\` ${ACP_LOG_EVENTS}회 · 겹침 0건 배제를 명시하지 않는다`);
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
let remainingBaseline: CensusAudit['remainingBaseline'];
|
|
400
|
+
if (input.remainingBaselineIds === null) {
|
|
401
|
+
problems.push(`remaining-baseline: 고정 기준 파일이 없다 (${input.remainingBaselinePath})`);
|
|
402
|
+
remainingBaseline = { path: input.remainingBaselinePath, status: 'failed', ids: 0 };
|
|
403
|
+
} else {
|
|
404
|
+
const baselineIds = input.remainingBaselineIds;
|
|
405
|
+
const baseline = new Set(baselineIds);
|
|
406
|
+
const actual = new Set(remainingIds);
|
|
407
|
+
const missing = [...baseline].filter((id) => !actual.has(id));
|
|
408
|
+
const extra = [...actual].filter((id) => !baseline.has(id));
|
|
409
|
+
if (baseline.size !== REMAINING_IDS || baseline.size !== baselineIds.length) {
|
|
410
|
+
problems.push(`remaining-baseline: 고정 기준은 중복 없이 ${REMAINING_IDS} ID여야 한다 (행 ${baselineIds.length} / 고유 ${baseline.size})`);
|
|
411
|
+
}
|
|
412
|
+
if (missing.length > 0 || extra.length > 0 || baseline.size !== actual.size) {
|
|
413
|
+
problems.push(`remaining-baseline: 기준 ${baseline.size}건 / TSV ${actual.size}건 · 누락 ${missing.length}${missing.length ? ` (${missing.slice(0, 3).join(' | ')})` : ''} · 추가 ${extra.length}${extra.length ? ` (${extra.slice(0, 3).join(' | ')})` : ''}`);
|
|
414
|
+
remainingBaseline = { path: input.remainingBaselinePath, status: 'failed', ids: baseline.size };
|
|
415
|
+
} else {
|
|
416
|
+
remainingBaseline = { path: input.remainingBaselinePath, status: 'compared', ids: baseline.size };
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
let ledger: CensusAudit['ledger'];
|
|
421
|
+
if (input.acceptedIds === null) {
|
|
422
|
+
if (input.ledgerRequired) {
|
|
423
|
+
problems.push(`accepted-ledger: 원장 파일이 없다 (${input.ledgerPath})`);
|
|
424
|
+
ledger = { path: input.ledgerPath, status: 'failed', ids: 0 };
|
|
425
|
+
} else {
|
|
426
|
+
ledger = { path: input.ledgerPath, status: 'skipped', ids: 0 };
|
|
427
|
+
}
|
|
428
|
+
} else {
|
|
429
|
+
const accepted = new Set(input.acceptedIds);
|
|
430
|
+
const missing = ids.filter((id) => !accepted.has(id));
|
|
431
|
+
const extra = [...accepted].filter((id) => !uniqueIds.has(id));
|
|
432
|
+
if (missing.length > 0 || extra.length > 0 || accepted.size !== rows.length) {
|
|
433
|
+
problems.push(`accepted-ledger: 원장 ${accepted.size}건 / TSV ${rows.length}건 · 누락 ${missing.length} · 여분 ${extra.length}`);
|
|
434
|
+
ledger = { path: input.ledgerPath, status: 'failed', ids: accepted.size };
|
|
435
|
+
} else {
|
|
436
|
+
ledger = { path: input.ledgerPath, status: 'compared', ids: accepted.size };
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
return {
|
|
441
|
+
ok: problems.length === 0,
|
|
442
|
+
problems,
|
|
443
|
+
counts: { rows: rows.length, intake: intakeRows.length, remaining: otherRows.length, status, group, repair },
|
|
444
|
+
intakeIds,
|
|
445
|
+
remainingIds,
|
|
446
|
+
acpLogEvents: acpAttributed.length,
|
|
447
|
+
ledger,
|
|
448
|
+
remainingBaseline,
|
|
449
|
+
};
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
export function renderText(audit: CensusAudit): string {
|
|
453
|
+
const lines: string[] = [];
|
|
454
|
+
lines.push(`rows: ${audit.counts.rows} (${INTAKE_GROUP} ${audit.counts.intake} excluded → ${audit.counts.remaining})`);
|
|
455
|
+
lines.push(`group: ${Object.entries(audit.counts.group).map(([key, value]) => `${key}=${value}`).join(' ')}`);
|
|
456
|
+
lines.push(`status: ${Object.entries(audit.counts.status).map(([key, value]) => `${key}=${value}`).join(' ')}`);
|
|
457
|
+
lines.push(`repair-cards: ${Object.entries(audit.counts.repair).map(([key, value]) => `${key}=${value}`).join(' ')}`);
|
|
458
|
+
lines.push(`no-acp: ${audit.acpLogEvents} (로그 ${ACP_LOG_EVENTS}회 사건은 실패 ID가 아니다)`);
|
|
459
|
+
lines.push(`accepted-ledger: ${audit.ledger.status} ${audit.ledger.path}${audit.ledger.status === 'skipped' ? ' (원장 부재 — 원장 대조 미실시)' : ''}`);
|
|
460
|
+
lines.push(`remaining-baseline: ${audit.remainingBaseline.status} ${audit.remainingBaseline.path} (${audit.remainingBaseline.ids})`);
|
|
461
|
+
for (const problem of audit.problems) lines.push(`FAIL ${problem}`);
|
|
462
|
+
lines.push(audit.ok ? 'census: PASS' : `census: FAIL (${audit.problems.length})`);
|
|
463
|
+
return lines.join('\n');
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
type CliOptions = {
|
|
467
|
+
tsv: string;
|
|
468
|
+
report: string;
|
|
469
|
+
accepted: string | null;
|
|
470
|
+
acceptedExplicit: boolean;
|
|
471
|
+
json: boolean;
|
|
472
|
+
writeRepairCard: boolean;
|
|
473
|
+
};
|
|
474
|
+
|
|
475
|
+
function parseArgs(argv: string[], cwd: string): CliOptions {
|
|
476
|
+
const options: CliOptions = {
|
|
477
|
+
tsv: resolve(cwd, CENSUS_TSV),
|
|
478
|
+
report: resolve(cwd, CENSUS_REPORT),
|
|
479
|
+
accepted: join(homedir(), DEFAULT_ACCEPTED),
|
|
480
|
+
acceptedExplicit: false,
|
|
481
|
+
json: false,
|
|
482
|
+
writeRepairCard: false,
|
|
483
|
+
};
|
|
484
|
+
for (let at = 0; at < argv.length; at += 1) {
|
|
485
|
+
const arg = argv[at]!;
|
|
486
|
+
const next = argv[at + 1];
|
|
487
|
+
if (arg === '--tsv' && next) {
|
|
488
|
+
options.tsv = resolve(cwd, next);
|
|
489
|
+
at += 1;
|
|
490
|
+
} else if (arg === '--report' && next) {
|
|
491
|
+
options.report = resolve(cwd, next);
|
|
492
|
+
at += 1;
|
|
493
|
+
} else if (arg === '--accepted' && next) {
|
|
494
|
+
options.acceptedExplicit = true;
|
|
495
|
+
options.accepted = next === 'none' ? null : resolve(cwd, next);
|
|
496
|
+
at += 1;
|
|
497
|
+
} else if (arg === '--json') {
|
|
498
|
+
options.json = true;
|
|
499
|
+
} else if (arg === '--write-repair-card') {
|
|
500
|
+
options.writeRepairCard = true;
|
|
501
|
+
} else {
|
|
502
|
+
throw new Error(`알 수 없는 인자: ${arg}`);
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
return options;
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
export function main(argv: string[] = process.argv.slice(2), cwd: string = process.cwd()): number {
|
|
509
|
+
let options: CliOptions;
|
|
510
|
+
try {
|
|
511
|
+
options = parseArgs(argv, cwd);
|
|
512
|
+
} catch (error) {
|
|
513
|
+
console.error(String(error instanceof Error ? error.message : error));
|
|
514
|
+
return 2;
|
|
515
|
+
}
|
|
516
|
+
for (const path of [options.tsv, options.report]) {
|
|
517
|
+
if (!existsSync(path)) {
|
|
518
|
+
console.error(`FAIL inputs: 필수 파일이 없다 — ${path}`);
|
|
519
|
+
return 2;
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
if (options.writeRepairCard) {
|
|
523
|
+
const rewritten = writeRepairCards(options.tsv);
|
|
524
|
+
process.stdout.write(`repair-card: ${rewritten}행 재계산 → ${options.tsv}\n`);
|
|
525
|
+
}
|
|
526
|
+
const acceptedIds = options.accepted ? readAcceptedIds(options.accepted) : null;
|
|
527
|
+
const remainingBaselinePath = resolve(cwd, DEFAULT_REMAINING_BASELINE);
|
|
528
|
+
const remainingBaselineIds = existsSync(remainingBaselinePath)
|
|
529
|
+
? readFileSync(remainingBaselinePath, 'utf8').split(/\r?\n/).filter((line) => line.length > 0 && !line.startsWith('#'))
|
|
530
|
+
: null;
|
|
531
|
+
const audit = auditCensus({
|
|
532
|
+
tsvText: readFileSync(options.tsv, 'utf8'),
|
|
533
|
+
reportText: readFileSync(options.report, 'utf8'),
|
|
534
|
+
acceptedIds,
|
|
535
|
+
remainingBaselineIds,
|
|
536
|
+
remainingBaselinePath: DEFAULT_REMAINING_BASELINE,
|
|
537
|
+
ledgerPath: options.accepted ?? 'none',
|
|
538
|
+
ledgerRequired: options.acceptedExplicit && options.accepted !== null,
|
|
539
|
+
});
|
|
540
|
+
process.stdout.write(`${options.json ? JSON.stringify(audit, null, 2) : renderText(audit)}\n`);
|
|
541
|
+
return audit.ok ? 0 : 1;
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
if (import.meta.main) {
|
|
545
|
+
process.exit(main());
|
|
546
|
+
}
|