elanous 0.2.35 → 0.2.36
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/chunks/{d06f9160.a3d9062f95de8ad7.js → 053a429e.9a63436527cc751c.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/109.f196abf3484bb97f.js +287 -0
- package/apps/pwa/out/_next/static/chunks/{4346.8601952e73bf5803.js → 1201.afbfc5b1c5e5cbe4.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/1517.9275b89572098ff3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1574.ad11f8db8396ab45.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1614.7a8c5c40aee0261f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1871-f1eb29d8dbb4065b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/190.285c832bd9626f8c.js +64 -0
- package/apps/pwa/out/_next/static/chunks/2193.0ea24c4a7aa1d004.js +36 -0
- package/apps/pwa/out/_next/static/chunks/223-ad865c1e80491d78.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2265-f0d90b6dbec05f81.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2267.eb4a62a209f09ec4.js +149 -0
- package/apps/pwa/out/_next/static/chunks/2341-86cd06c0cf01aa33.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2352.9abc42422bade876.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2397-c1653a816061842d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3103.0df8da390948bb84.js → 2500.cbc1257b774aae52.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{7644.17e37ba6f1d4226e.js → 2683.c9773a0c589b031b.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/2709.8e1889034255fc5f.js +24 -0
- package/apps/pwa/out/_next/static/chunks/{4718-17d2af636796a330.js → 275-02ea4c2a33980422.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/2812ca6a.3b9f4a7a08885744.js +1 -0
- package/apps/pwa/out/_next/static/chunks/284.ac77c0db55bfd3a8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8714.ff0b7ce3ec3e3ae2.js → 2941.3c3546f96bc6efa7.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/2976.b000698a3c6512dc.js +24 -0
- package/apps/pwa/out/_next/static/chunks/{9214.63a510d39178e997.js → 2986.45d7652e4f13557e.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/3031-85328a92fcce4da6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3136.30aaaa5fa03662a3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3677-4215f826f6aa68e5.js → 3148-98efd4869d660a87.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/3155.2587a55196ecb394.js +226 -0
- package/apps/pwa/out/_next/static/chunks/3277.785db1cf09f98601.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3320-f9c77381f85a2c0a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3324.a09703033abcbd2f.js +34 -0
- package/apps/pwa/out/_next/static/chunks/3386-91049feabff9a94e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/339.80afb7e8839372af.js +8 -0
- package/apps/pwa/out/_next/static/chunks/3410.7f9af5ab77cbe65f.js +115 -0
- package/apps/pwa/out/_next/static/chunks/3538.a445e50bb359d068.js +32 -0
- package/apps/pwa/out/_next/static/chunks/3540c645.2595a6af01a97672.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3621.581b2054cc14bee4.js +286 -0
- package/apps/pwa/out/_next/static/chunks/3676.8c28d16fd84ca843.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{9512.5a76207a730e0491.js → 3727.7949ccaacaa71242.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/375-b84540853523fe52.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8557-e7898769499cd56f.js → 3757-180308bc61021b05.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/379.ee262e37586fe1ae.js +74 -0
- package/apps/pwa/out/_next/static/chunks/{359-2250789a2d3499e7.js → 3840-5825d56d46976a92.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/3969-81054381eaec4c4c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{da5176c6.6773b6c5994e1d99.js → 3a3d9966.cc4d4585a2708e7c.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/4067-bf9aa60547972937.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4116.a84a92a2492c080e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4176.e5729c93c29151eb.js +104 -0
- package/apps/pwa/out/_next/static/chunks/4227-e6c84686bc8946ca.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{9952.5daf5f94063a2b3e.js → 4286.b70c4520306817e8.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/4304.e9b2512834a9e23e.js +23 -0
- package/apps/pwa/out/_next/static/chunks/4327.b9e08a71c0009348.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{938.66ad1ef0e5abae1c.js → 4615.8525eb0add35eba6.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/4946.bd106eafd668f248.js +148 -0
- package/apps/pwa/out/_next/static/chunks/5085-bce4904931767ca6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5125.2eb9968b83767193.js +93 -0
- package/apps/pwa/out/_next/static/chunks/5128-75b733fd74a9a1eb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{6236.e18cced2d5ba6afb.js → 528.38ce20ef8aa251ff.js} +16 -16
- package/apps/pwa/out/_next/static/chunks/5489f3fe.4bb1458b09f6dead.js +122 -0
- package/apps/pwa/out/_next/static/chunks/{3408.21d1570602f4b6c0.js → 552.b7d061ad91eeac51.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/5560-2a4648f6a30f16e7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5711.957b095705c12560.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{1530.0e612369b6fd7ea0.js → 575.d929793a53f27c4b.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/5772-e29e14f8ff127122.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5887.5b2f5b44ce0f7e9a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5899-4c112a2d908cf97f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/599.c39c571b6733f2a2.js +41 -0
- package/apps/pwa/out/_next/static/chunks/6041.1b65efb796ebc2a5.js +79 -0
- package/apps/pwa/out/_next/static/chunks/6057-765c0a26028c86b2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6142.f289e0d039f453a6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6199-6bcd61d2a3910e04.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6236.cdf7293e710a9b2d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6387-237e079dac9a3ae6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6448-b6d272d074276e14.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6466-92e65a48490b68a9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6566.926a1d1b7c911442.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6580-cdc0e4a634ce4708.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6659-b242dc31b20b3f29.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6690.c5d9b321b1f79384.js +1 -0
- package/apps/pwa/out/_next/static/chunks/671-e9b6ad0c771c5514.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6862.bcbf89dd0f4496b3.js +27 -0
- package/apps/pwa/out/_next/static/chunks/6912-7b375ee48732c767.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6925.562d532110879886.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{7385.50a308a477bdfc21.js → 6943.c6b24124853a47b2.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{630.fe5a46428d63b013.js → 727.7deb87749b0a343a.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{2018.a741297bce759490.js → 7481.39f7a4654907bf6e.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/7545.b1aa42cd15503319.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7551-416d298c2dc4a9ab.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8444.4c26b379ca2b9596.js → 771.c3cdb6c1f7f47c02.js} +17 -17
- package/apps/pwa/out/_next/static/chunks/7784.1f0ac4a16d190cf4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7870-309de463786ac1fc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7888-e29b151bb6a3bb8b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3589.5444a06bcf6e775c.js → 7891.03f910124a737985.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/7905-6ba78d9234608f79.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8037.e254fd797aa224d1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8207.f527886b7c464529.js +1 -0
- package/apps/pwa/out/_next/static/chunks/856.50bda61439d465e6.js +62 -0
- package/apps/pwa/out/_next/static/chunks/{b2f6ba4d.fb56fdbbf798df33.js → 873d6c12.09bd499f57171543.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{5101.e32282718f99ed6f.js → 8904.7d51af2dc033965c.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/9031-92e9b487edb681ee.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9060.5410d9f6a95f6287.js +90 -0
- package/apps/pwa/out/_next/static/chunks/{5637.281e5dec4ea6ecf1.js → 914.8abefd48d579547b.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/9187-c87a2207d4ac5d46.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{4705-194e64e47ca0fbdb.js → 9250-072df22eaadaa6b5.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/9289.3e92f278821e18e0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9319.7816d3cc741cd34f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9327-e016bb9f1674d24f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9365.3de48bf75193ff9a.js +77 -0
- package/apps/pwa/out/_next/static/chunks/9383.5b5e9aa56b5fea97.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9387-cb929573ef436f39.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9489.c27becacc3283dec.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8637.47f5b35afcae5e6b.js → 9514.131c52cc75fe6439.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/9536.28962663c7734376.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9686-12286f5bbf15a5a0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9776.289d40cc5a4c342a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{1674.2a65fd5668e1cc5f.js → 9789.60f723d18097ec30.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/989.f0c17523c5e61f65.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9972-1df393aa8d4f7d52.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9f31e478.fefcbcd3c388ebc5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/_not-found/page-96750aba7430959f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-4105e5bbbb043024.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-5d4fa75c2acb113e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/board/page-a79a9bdb3b2142bf.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/botlab/page-f1c2047484992a35.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/bots/page-15ffc49b2d8c70e2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-67d53a3fc8734135.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/chat/page-e30c8dc696491336.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/consult/page-2136e04fa77696e2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/control/page-fecd2814790c2e12.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-280aa4a98fc5bb44.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-c14e96b65fb4b883.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/editor/page-187dac74825ed6bf.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/exec/page-6bc7246ea8c92448.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/field/page-083747f1d4518f61.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/healthz/route-96750aba7430959f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/inside/page-15ca95a16ec96e1f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/intake/page-a8ac031b3810eb64.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/layout-8835f93110494cda.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live/page-e2de2e59111c9aad.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live-run/page-f2b2e4bf6e981450.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/loops/page-5b92b7f75df20948.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/market/page-468eddf2b1a84ecb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-2af16e62c12f22df.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/morning/page-18b40867a77a5793.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/not-found-fe934f2979f5a4a2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-3eec435537357170.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-ff88cbfd2aa99fc8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-a5b39fb780c70ab5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-ae465dde1d1b3933.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-e7abc34a48a6f71e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/page-cab9674fde9ead26.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-1da49bc8712284d0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-5e8aa657551ac912.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-fcc36f36c6dc1fe2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-d22db22f2a7296ca.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/page-d12dc7b1773878f0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-99debec9ea7fbec0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/layout-96750aba7430959f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/page-2a088a78bad7e924.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/share/page-2e8ed57db7e69993.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-4b3a16213c2ae8fe.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-f098747ddf38c98b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/term/page-c15958835534404b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/today/page-68279e3c843c1fd7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/trace/page-a34a74453367a39d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/vault/page-8767a7db2155a5bd.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-bd5976683460d7f2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-b7364835e7f2ef54.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-311af16b3ee0ffca.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-fb670757274ae990.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{0368f25d-ad84af92fefee68f.js → ccae1c4b-0cf414f5eff1b10d.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{cbe38a15.5a032598e39970c6.js → ceba0382.650712b56b85b582.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{b6705a4f-b9a9047de9eecfd0.js → da5ecc5c-b005ad8cac737d57.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{56d372f2.681ab4ec4c998fae.js → f9a61e4d.1fc2c1dbdd49fe46.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/framework-6d497cbf1eef04c6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/main-app-012f5edec932f337.js +1 -0
- package/apps/pwa/out/_next/static/chunks/main-da5aeb809edc94a2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/pages/_app-5ee319af6f749dfe.js +1 -0
- package/apps/pwa/out/_next/static/chunks/pages/_error-4bc84653a718d6c6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/webpack-8a96cf6775c73d6e.js +1 -0
- package/apps/pwa/out/_next/static/{T1mBQqmkwKDLGtyisDCOd → uC-N0emedeNOFuaBQFv-I}/_buildManifest.js +1 -1
- 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/docs/goal-context/05-authoring-lessons.jsonl +47 -0
- package/docs/goal-context/README.md +3 -0
- package/graphs/default-loop.yaml +6 -1
- package/graphs/implement-loop.yaml +24 -0
- package/graphs/release/recipes.yaml +6 -0
- package/graphs/release/release-loop.yaml +17 -4
- package/graphs/wizard/recipes.yaml +44 -0
- package/graphs/wizard/wizard-loop.yaml +44 -0
- package/graphs/work/research-report.yaml +2 -0
- package/package.json +1 -1
- package/scripts/ci-typecheck-changed.ts +139 -5
- package/scripts/coord-role-pack.ts +1 -1
- package/scripts/first10-gate.ts +416 -0
- package/scripts/fleet/wsl-node-setup.sh +432 -0
- package/scripts/release-loop/docs-node.ts +204 -8
- package/scripts/release-loop/gate-node.ts +249 -53
- package/scripts/release-loop/node-verdict.ts +2 -0
- package/scripts/release-loop/resume-cap.ts +14 -34
- package/scripts/release-loop/resume-release.ts +37 -11
- package/scripts/release-loop/traffic-node.ts +59 -0
- package/scripts/release-loop/traffic-transition.ts +159 -0
- package/scripts/rhythm/daily.ts +137 -3
- package/scripts/ux-sim.ts +53 -0
- package/skills/README.md +1 -0
- package/src/acp/core-turn-bridge.ts +48 -6
- package/src/agent/delegate-hint.ts +16 -0
- package/src/agent/runner.ts +82 -2
- package/src/agent/task-notification.ts +56 -10
- package/src/agent/types.ts +4 -0
- package/src/agent-substrate/pr-reviewer.ts +55 -3
- package/src/agent-substrate/review-intent.ts +29 -2
- package/src/agent-substrate/review-observation.ts +3 -0
- package/src/agent-substrate/self-review-cli.ts +168 -16
- package/src/autopilot/mission-codebase-gate.ts +141 -12
- package/src/autopilot/pr-manager.ts +25 -5
- package/src/boot/daemon-tools/self-implement.ts +1 -0
- package/src/budget/usage-outcomes.ts +8 -4
- package/src/capture/tui-self-report.ts +102 -0
- package/src/chat/goal-continue-verdict.ts +41 -0
- package/src/chat/index.ts +30 -4
- package/src/chat/internal-turn-origin.ts +1 -0
- package/src/chat/paste-fold.ts +86 -0
- package/src/chat/tool-render/block.ts +32 -0
- package/src/chat/tool-render/dispatch.ts +2 -20
- package/src/chat/tool-render/result-text.ts +98 -0
- package/src/chat/turn-typeahead.ts +70 -7
- package/src/cli/config-audit.ts +119 -0
- package/src/cli/doctor-cli.ts +22 -0
- package/src/cli/guardian-cli.ts +10 -0
- package/src/cli/herdr-cli.ts +34 -0
- package/src/cli/light-entry-route.ts +6 -3
- package/src/cli/log-event-names.ts +2 -0
- package/src/cli/make-cli.ts +247 -11
- package/src/cli/msg-cli.ts +117 -3
- package/src/cli/pr-cli.ts +29 -16
- package/src/cli/pr-land-base-read.ts +11 -2
- package/src/cli/pr-land-heavy-remote.ts +6 -3
- package/src/cli/pr-land-overlap-evidence.ts +23 -4
- package/src/cli/pr-land-recovery.ts +117 -1
- package/src/cli/pty-takeover-cli.ts +8 -7
- package/src/cli/release-cli.ts +21 -5
- package/src/cli/release-single-flight.ts +1 -1
- package/src/cli/tasks-card-show.ts +162 -0
- package/src/cli/tasks-cli.ts +574 -356
- package/src/cli/tasks-read-cli.ts +197 -0
- package/src/core-turn/run-core-turn.ts +4 -2
- package/src/core-turn/run-goal-loop.ts +73 -16
- package/src/core-turn/types.ts +6 -1
- package/src/dashboard/context/keys.ts +8 -31
- package/src/dashboard/index.ts +202 -49
- package/src/dashboard/input/agent-wake.ts +7 -1
- package/src/dashboard/input/chat-main-plain-turn-runtime.ts +146 -3
- package/src/dashboard/input/chat-main-slash-command.ts +4 -2
- package/src/dashboard/input/goal-continue.ts +210 -0
- package/src/dashboard/input/goal-interim.ts +2 -0
- package/src/dashboard/input/internal-turn.ts +2 -8
- package/src/dashboard/input/seat-autowake.ts +9 -7
- package/src/dashboard/input/turn-autoheal.ts +52 -0
- package/src/dashboard/seat-boot-preamble.ts +132 -5
- package/src/dashboard/slash-runtime/chat-persona.ts +65 -8
- package/src/dashboard/slash-runtime/dashboard-handlers.ts +3 -2
- package/src/dashboard/slash-runtime/model-choices.ts +15 -0
- package/src/dashboard/stale-install-check.ts +3 -99
- package/src/debug/batch-queue.ts +119 -0
- package/src/debug/tui-log-tag.ts +67 -0
- package/src/display/agent-surface.ts +7 -0
- package/src/domains/standalone-log-sink.ts +15 -2
- package/src/esc-abort-gate.ts +69 -0
- package/src/git-fs/worktree.ts +95 -1
- package/src/graph-runner/graph-cli.ts +18 -0
- package/src/graph-runner/runner.ts +20 -11
- package/src/graph-wizard/generate.ts +108 -4
- package/src/graph-wizard/steps.ts +15 -0
- package/src/grounding/proactive-ground.ts +86 -0
- package/src/harness/control-inbox.ts +49 -1
- package/src/harness/harness-cli-command.ts +51 -7
- package/src/harness/harness-incidents.ts +52 -1
- package/src/harness/pod-control-send.ts +33 -5
- package/src/harness/self-send-remote.ts +69 -0
- package/src/harness/self-send-routing-guard.ts +6 -0
- package/src/harness/self-send-target.ts +4 -3
- package/src/index.ts +327 -12
- package/src/input-core/context-key-runtime.ts +21 -0
- package/src/light-cli.ts +6 -1
- package/src/llm-wellformed.ts +70 -0
- package/src/llm.ts +35 -4
- package/src/loops/msg-wake.ts +35 -39
- package/src/loops/orchestrator/inbox.ts +59 -11
- package/src/loops/orchestrator/knowhow-pack.ts +364 -0
- package/src/loops/orchestrator/tick.ts +5 -1
- package/src/maturity/feature-maturity.ts +1 -1
- package/src/models/prompts.ts +17 -2
- package/src/msg/msg-post-office.ts +116 -0
- package/src/mss/logging/log-store.ts +79 -22
- package/src/nexus/api/decisions-route.ts +38 -18
- package/src/nexus/api/graph-wizard-api.ts +20 -2
- package/src/nexus/boot/register-mcp-clients.ts +263 -38
- package/src/nexus/onboarding/first-boot-wizard.ts +56 -8
- package/src/onboarding/first-run.ts +37 -6
- package/src/onboarding/web-first.ts +43 -11
- package/src/ops/overview-collect.ts +12 -6
- package/src/ops/overview.ts +3 -3
- package/src/persona/loader.ts +11 -0
- package/src/persona/types.ts +8 -0
- package/src/prompt-library/session-guidance.ts +14 -0
- package/src/provider-summary.ts +8 -0
- package/src/pty-shell/herdr-agent-report.ts +118 -9
- package/src/pty-shell/herdr-prompt.ts +266 -0
- package/src/pty-shell/pty-control-ipc.ts +151 -8
- package/src/pty-shell/pty-special-keys.ts +42 -2
- package/src/pty-shell/stale-install-check.ts +99 -0
- package/src/pty-shell/tui-run-state.ts +14 -2
- package/src/release-loop/auto-start.ts +20 -2
- package/src/release-loop/checklist.ts +76 -4
- package/src/release-loop/rehearsal.ts +36 -20
- package/src/repl/index.ts +19 -1
- package/src/seat-loop/knowhow-lint.ts +1 -1
- package/src/self-dev/decompose-proposal.ts +172 -20
- package/src/self-dev/decompose.ts +61 -0
- package/src/self-dev/dev-cli.ts +37 -3
- package/src/self-dev/dev-pipeline.ts +8 -2
- package/src/self-dev/draft-triage-rules.ts +31 -0
- package/src/self-dev/glm-credential-guard.ts +77 -0
- package/src/self-dev/graph-journey-nodes.ts +1 -0
- package/src/self-dev/graph-journey-route.ts +12 -2
- package/src/self-dev/orchestrate-cli.ts +68 -3
- package/src/self-dev/orchestrate.ts +116 -17
- package/src/self-dev/run-supervisor.ts +55 -2
- package/src/self-dev/run-types.ts +1 -1
- package/src/self-health/autoheal.ts +153 -0
- package/src/self-health/signatures.ts +6 -0
- package/src/self-implement/device-first.ts +116 -0
- package/src/self-implement/doctor-visit.ts +239 -1
- package/src/self-implement/evidence-command-budget.ts +80 -0
- package/src/self-implement/goal-author-cli.ts +1 -0
- package/src/self-implement/goal-author-decompose.ts +265 -4
- package/src/self-implement/goal-author.ts +33 -8
- package/src/self-implement/goal-elaborate.ts +176 -22
- package/src/self-implement/goal-refine.ts +3 -0
- package/src/self-implement/graph-variant.ts +40 -6
- package/src/self-implement/headless-elanous-driver.ts +19 -3
- package/src/self-implement/off-diff-evidence.ts +58 -6
- package/src/self-implement/orchestrator.ts +222 -21
- package/src/self-implement/pod-warm-pool-profile.ts +1 -0
- package/src/self-implement/pwa-import-graph.ts +1 -1
- package/src/self-implement/rework-policy.ts +30 -0
- package/src/self-implement/run-ledger.ts +108 -0
- package/src/self-implement/run-ttl.ts +38 -24
- package/src/self-implement/scope-adjacency.ts +3 -1
- package/src/self-implement/seams.ts +60 -4
- package/src/self-implement/wiring-check.ts +358 -0
- package/src/shell-env-bootstrap.ts +11 -4
- package/src/skills/runner.ts +4 -2
- package/src/skills/tools/agent.ts +290 -48
- package/src/skills/tools/schedule-wakeup.ts +23 -4
- package/src/skills/tools/shell.ts +61 -6
- package/src/skills/tools/terminal-modal-inject.ts +1 -2
- package/src/skills/tools/terminal-modal.ts +10 -8
- package/src/skills/url-router.ts +41 -1
- package/src/smart-wizard/run.ts +66 -0
- package/src/status/bar.ts +34 -6
- package/src/status/status-provider-info.ts +37 -6
- package/src/steward/rejudge-tick.ts +10 -2
- package/src/steward/ta-repair-event-collect.ts +17 -6
- package/src/task-agent/actions.ts +3 -1
- package/src/task-agent/land-queue.ts +21 -8
- package/src/task-agent/live-moves.ts +22 -6
- package/src/task-agent/mission.ts +30 -0
- package/src/task-agent/rejudge-on-head.ts +15 -0
- package/src/task-agent/repair-cycle.ts +138 -32
- package/src/task-agent/repair-next-move.ts +31 -3
- package/src/task-agent/repair-outcomes.ts +29 -0
- package/src/task-agent/repair-worker.ts +14 -4
- package/src/task-agent/shadow.ts +41 -3
- package/src/task-agent/task-card-prefix.ts +2 -0
- package/src/task-agent/task-hand.ts +477 -22
- package/src/task-agent/task-parent-role-llm.ts +36 -0
- package/src/task-agent/tier-split.ts +78 -9
- package/src/task-orchestrator/surfaces/pod-account-broker.ts +9 -0
- package/src/task-orchestrator/surfaces/pod-child-reuse.ts +146 -0
- package/src/task-orchestrator/surfaces/pod-command-job.ts +86 -5
- package/src/task-orchestrator/surfaces/pod-failure-reason.ts +215 -3
- package/src/task-orchestrator/surfaces/pod-launch-history.ts +133 -0
- package/src/task-orchestrator/surfaces/pod-manifest-test-normalize.ts +11 -0
- package/src/task-orchestrator/surfaces/pod-pool.ts +76 -4
- package/src/task-orchestrator/surfaces/pod-provenance.ts +8 -2
- package/src/task-orchestrator/surfaces/pod-repair-commit.ts +18 -3
- package/src/task-orchestrator/surfaces/pod-si-warm-entry.ts +16 -0
- package/src/task-orchestrator/surfaces/pod-si-warm-host.ts +224 -0
- package/src/task-orchestrator/surfaces/pod-si-warm-protocol.ts +201 -0
- package/src/task-orchestrator/surfaces/pod-si-warm-provider.ts +444 -0
- package/src/task-orchestrator/surfaces/pod-si-warm-runner.ts +387 -0
- package/src/task-orchestrator/surfaces/pod-si-warm-transport.ts +157 -0
- package/src/task-orchestrator/surfaces/pod-warm-worker-protocol.ts +4 -0
- package/src/task-orchestrator/surfaces/pod-warm-worker-provider.ts +485 -36
- package/src/task-orchestrator/surfaces/pod-warm-worker-runtime.ts +3 -0
- package/src/task-orchestrator/surfaces/self-implement-pod.ts +396 -19
- package/src/task-orchestrator/surfaces/self-implement.ts +42 -2
- package/src/tool-runtime/index.ts +15 -2
- package/src/tool-runtime/mcp-proxy-bootstrap.ts +29 -0
- package/src/tty-foreground.ts +155 -0
- package/src/tui/chat/goal-interim.ts +173 -0
- package/src/tui/chat/log-view.ts +205 -18
- package/src/tui/chat/self-health-status.ts +232 -0
- package/src/tui/entry.ts +370 -81
- package/src/tui/input/composer.ts +8 -1
- package/src/tui/slash/compact-command.ts +7 -0
- package/src/tui/slash/compact.ts +1 -7
- package/src/tui/slash/resume.ts +75 -0
- package/src/tui-client/local-chat-turn.ts +45 -2
- package/src/tui-client/next-dashboard-runtime.ts +8 -0
- package/src/tui-client/next-loop-command.ts +70 -0
- package/src/tui-client/next-wakeup.ts +191 -0
- package/src/tui.ts +37 -0
- package/src/ui/modal-adapter.ts +2 -2
- package/src/ux-sim/classic-tui-seat-scenarios.ts +516 -0
- package/src/ux-sim/cli-config-audit-device.ts +121 -0
- package/src/ux-sim/dashboard-event-loop-stall-monitor-device.ts +238 -0
- package/src/ux-sim/event-monkey.ts +3 -2
- package/src/ux-sim/fake-bin.ts +45 -0
- package/src/ux-sim/fake-herdr.ts +238 -0
- package/src/ux-sim/fake-llm.ts +111 -6
- package/src/ux-sim/fault-glm-no-credential.ts +116 -0
- package/src/ux-sim/fault-nextmove-dispatch.ts +102 -1
- package/src/ux-sim/fault-scope-escape-lift.ts +33 -6
- package/src/ux-sim/fault-tui-400-autoheal.ts +297 -0
- package/src/ux-sim/goal-device.ts +619 -0
- package/src/ux-sim/in-process-cli.ts +22 -5
- package/src/ux-sim/mock-authoring-first-run-child.ts +35 -0
- package/src/ux-sim/mock-authoring-first-run.ts +97 -0
- package/src/ux-sim/mock-seat-pty-frame-child.ts +29 -0
- package/src/ux-sim/mock-seat-pty-frame.ts +297 -0
- package/src/ux-sim/mock-seat-pty-sequence-child.ts +21 -0
- package/src/ux-sim/mock-seat-pty-sequence.ts +206 -0
- package/src/ux-sim/next-tui-seat-scenarios.ts +631 -0
- package/src/ux-sim/onboarding-first-run-device.ts +269 -0
- package/src/ux-sim/pty-key-modifiers-device.ts +85 -0
- package/src/ux-sim/subagent-tools-device.ts +81 -0
- package/src/ux-sim/task-orchestrator-surfaces-self-implement-pod-device.ts +250 -0
- package/src/ux-sim/tty-foreground-steal-child.ts +21 -0
- package/src/version/packed-revision.json +1 -1
- package/apps/pwa/out/_next/static/chunks/1165.bad13fc9151a7288.js +0 -1
- package/apps/pwa/out/_next/static/chunks/13.02a07436dec15f89.js +0 -32
- package/apps/pwa/out/_next/static/chunks/1540.af38731fa7c4a3e0.js +0 -41
- package/apps/pwa/out/_next/static/chunks/1850.f2b470ba5a471da0.js +0 -24
- package/apps/pwa/out/_next/static/chunks/193.62da94cd0b88323b.js +0 -74
- package/apps/pwa/out/_next/static/chunks/1975.260f6d249fac5f7c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1982-67cd8dfe8682325f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1993-c0007b7ad0c0ef41.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1999-bb415351c8a2846c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1c735de4.f993a30bbd3c57c4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1dc5a567.9b092bfae3d7099b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2085.8f950b4bda1cbbc7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2159-6179a961376956b9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/216.b5c2a421aa1d28a5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2251.49fbe369f74c372c.js +0 -148
- package/apps/pwa/out/_next/static/chunks/2286-2939577360d3dcc0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2625.5d870aa999f33db1.js +0 -34
- package/apps/pwa/out/_next/static/chunks/2668.34d21539e62bf111.js +0 -77
- package/apps/pwa/out/_next/static/chunks/2833-0fe47af99ed13c29.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2930.d0edb4f108787ef7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2973.77318e7d85f59477.js +0 -62
- package/apps/pwa/out/_next/static/chunks/3123.2bee9ba15d320bd2.js +0 -90
- package/apps/pwa/out/_next/static/chunks/3162-6cf652bf7124d8cf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3577-7340009f7007a795.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3618.f514792d6c59d7fd.js +0 -36
- package/apps/pwa/out/_next/static/chunks/3669.343f9119aa276001.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3736.c2efad489604cc3b.js +0 -79
- package/apps/pwa/out/_next/static/chunks/3817.f9aeab2bb6675d73.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3f7c4ee5.3dde54f01a816613.js +0 -122
- package/apps/pwa/out/_next/static/chunks/4182-0b9b1251c29cc0cf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4441-875b97f5821ed58a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4582.bd68683c076649e3.js +0 -286
- package/apps/pwa/out/_next/static/chunks/4605-6e623f55aec77422.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4607.5cc27468628eb4bf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4627.f07508b3936fd6c0.js +0 -24
- package/apps/pwa/out/_next/static/chunks/4747-c22262c093e46807.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4775-178215aed0daba61.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4815-6ffb8c3c991cc45d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4834-beca8b47ad29a898.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5023-fb4802b6d2492b02.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5154.a118f3957ed14e36.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5210-a2e0015e3d4d5d9c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5356.84ac712cc15928bf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5401.22352141b6fd336e.js +0 -23
- package/apps/pwa/out/_next/static/chunks/5483-dd5d7697f6bdb106.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5662.02eaa029af05ad46.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5760.22456f433c6f42c0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5852.db1f7449f4f74612.js +0 -287
- package/apps/pwa/out/_next/static/chunks/5891-0f11a7d7362a9072.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5943.264d14a44ca32513.js +0 -1
- package/apps/pwa/out/_next/static/chunks/604-1b3c39df083c02aa.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6121-5f97072330738caf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6193.07d8ca5af4b09086.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6203-b3fea3a60d69ff14.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6286.d638fb5953e2e757.js +0 -8
- package/apps/pwa/out/_next/static/chunks/6301.ae0245f507e4395e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6673.fbbe5699f6ea5991.js +0 -27
- package/apps/pwa/out/_next/static/chunks/6777-f6d301efb5de828d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6786.423f24c88de034c7.js +0 -93
- package/apps/pwa/out/_next/static/chunks/6854-cef64a948c5e122d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6866-79aa5b4e47cac6aa.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6b89c8bd.24df687a820500b3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7037-fe27f001db30d323.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7080.2d826860534fd88e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7118.8731be28c3ebb14b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7196.44241bc1df3e26fe.js +0 -149
- package/apps/pwa/out/_next/static/chunks/7235.c7c4e6cb5c693c2d.js +0 -104
- package/apps/pwa/out/_next/static/chunks/7706-58bfb1546637f217.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7839.5b91455338c9fd3f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7857-31f13ee96f4011aa.js +0 -1
- package/apps/pwa/out/_next/static/chunks/81.f74cb60312fe4001.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8219.baa715d1deee80e2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8256.e3ac8421a71f82f4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8310-444a6a895c402f12.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8423.f7dda8aca4fcaae5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8437-8d5492094b166cfa.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8496.75649af8652c74f4.js +0 -226
- package/apps/pwa/out/_next/static/chunks/8576.65bb654b524f3614.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8609.558ce2f8f9aea2be.js +0 -64
- package/apps/pwa/out/_next/static/chunks/8614.caec96cfb91f4ae7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8732.367f44a916202353.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9141-7fd1f73a5400bdc2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/921.c4267d0d69a65404.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9261.3962c3321b047691.js +0 -115
- package/apps/pwa/out/_next/static/chunks/936-26efd1a0efdd44d3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9627-4b9efe616b27e2e2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/967-2aa39b2d04b4c690.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9734.40eb1e558c29ccea.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9908.3aa54f7a586a73dc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9954-ca8d29752bdbb45a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9974-507fa67cb94066dd.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/_not-found/page-ce9e00f7fb45506a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-fa59d6d17daa3389.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-53f68bbe7bd4b774.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/board/page-1c500fbb9f4a7a04.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/botlab/page-99d72673aa5c307c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/bots/page-d2d5adc1e9484c88.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-c607c5aae637f1cc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/chat/page-fa8c23596d555c0f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/consult/page-bdab8c5e855c8416.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/control/page-406b47745b53f269.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-a4276386b7051f50.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-8a26bab9ad375f25.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/editor/page-775f48aa1dc7a2d5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/exec/page-1c4dd5f959d0c558.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/field/page-c48938a8377c9f70.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/healthz/route-ce9e00f7fb45506a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/inside/page-c6e7905859425aa9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/intake/page-c280f4252452e830.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/layout-cf8c57498f20970a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live/page-ca3a17caf409fc83.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live-run/page-26e6c18a1a750cf6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/loops/page-3abc872cc6aeee39.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/market/page-f7481b7b2174fe3d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-1ae7ef8077680337.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/morning/page-47c5d4db587266bd.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/not-found-415f1e243c7ccb13.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-73f380f17b76f95c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-2991073ad66ee2d9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-1f5a60f70cb4dd0c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-fbad60d1e358fb2c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-bac7dee94e5eae4a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/page-398047d6949e8ca5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-2d33a2231540ca89.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-5bf1e6bf70bcb96c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-ba59c19376a0917d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-111f187139add30f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/page-acaae197d5be5779.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-0df20b0f546a0d7d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/layout-ce9e00f7fb45506a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/page-27e1202d24b8fe35.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/share/page-bda78c50a78363e5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-da592691293d9c9f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-f832994317a2e9f0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/term/page-dc0a532f5b9196ec.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/today/page-cfccbbeae0473404.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/trace/page-527e2073af84c81b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/vault/page-bac86e9112671357.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-6d59dff410e9d76a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-53a61f8be09f02d2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-db8f559e763c17f9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-c02aa4cc66455093.js +0 -1
- package/apps/pwa/out/_next/static/chunks/framework-50e6acebc630849b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-7a1ae342d5ed75e6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-app-7ad7d505ba1f92b4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/pages/_app-02edba75232cb235.js +0 -1
- package/apps/pwa/out/_next/static/chunks/pages/_error-97d6ebae3e8eee4a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/webpack-e986adaa429163e8.js +0 -1
- /package/apps/pwa/out/_next/static/{T1mBQqmkwKDLGtyisDCOd → uC-N0emedeNOFuaBQFv-I}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{"ts":"2026-10-21T07:39:10+0900","by":"OP","source":"op","cell":"DOCTOR-VISIT-FU","class":"c-unbounded-goal","diag":"문면 «생산 호출·자동 visit·원장 실물을 완성한다» · 자동 채움 경계(merge sha·타입검사)","action":"RUN-DOCTOR-AUTO-60M 에 흡수 · 0.2.36","lesson":"끝이 없는 «완성한다» 대신 착지된 코드(#27620)를 읽고 빠진 생산자 한 곳만 골로","run":"","card":"ta-20261020-ab9943","launch":"","goalSha":"","paths":"","model":"","host":"node-c","evidence":"OP 06:2x","rule":"저작이 대상 파일의 생산 호출부·착지 PR 을 먼저 읽는다","ms":"","outcome":"pending"}
|
|
2
|
+
{"ts":"2026-10-21T07:39:10+0900","by":"OP","source":"op","cell":"MSG-TAG-REACT","class":"a-missing-predecessor","diag":"골이 «MSG-ENVELOPE2 위에» 전제 · 그 칸은 phantom 0.2.41 · msg-store 에 tags 0","action":"0.2.36 이동 · MSG-ENVELOPE2 를 0.2.36 으로 당겨 --predecessor","lesson":"문면의 «X 위에/선행 X» 는 실재(칸 판·코드 필드) 확인 뒤에만","run":"run-680b9b65","card":"ta-20261020-bd7099","launch":"","goalSha":"","paths":"","model":"","host":"node-b","evidence":"OP #23589","rule":"칸 add 때 문면 속 선행을 --predecessor 로 강제 · 없는 칸이면 거부","ms":"","outcome":"pending"}
|
|
3
|
+
{"ts":"2026-10-21T07:39:11+0900","by":"OP","source":"op","cell":"TUI-STEER-NOTIFY","class":"b-stale-path","diag":"문면 한 줄 «알림 같은 경계(RFC P4)» · 대상 = 옛 대시보드 src/dashboard/index.ts (기본 TUI 는 next)","action":"0.2.36 이동 · OPC 새 TUI 문면 retitle · 옛 골 런 harness stop","lesson":"대상 경로가 현행 생산 경로인지(--tui next 전환 뒤 src/tui/·src/repl/) 확인","run":"run-d4bf8660","card":"ta-20261020-b8ca24","launch":"","goalSha":"","paths":"","model":"","host":"node-b","evidence":"OP #23588 #23749","rule":"저작이 대상 경로의 «현행 진입점 도달성» 을 잰다","ms":"","outcome":"pending"}
|
|
4
|
+
{"ts":"2026-10-21T07:39:11+0900","by":"OP","source":"run-doctor","cell":"LAND-RECIPE-GRAPH","class":"g-umbrella-scope","diag":"착지 반장 전체(수집→묶음→재배치→판정→게이트→병합→정리) 한 골 · 73분 · 구현 뒤 10분 LLM 0 · gate 미시작","action":"harness stop · 첫 조각(land-plan.ts 계획 출력만) retitle · 재발사(Sol)","lesson":"단계가 3개 넘는 레시피는 첫 조각(관측 가능한 산출 하나)만 골로","run":"run-53bba27c","card":"ta-20261020-baa78b","launch":"","goalSha":"","paths":"","model":"","host":"node-b","evidence":"OPT #23762 MK #23783 OP #23789","rule":"저작이 «단계 수» 를 세어 >3 이면 첫 조각으로 자동 축소","ms":"","outcome":"pending"}
|
|
5
|
+
{"ts":"2026-10-21T07:39:11+0900","by":"OP","source":"op","cell":"GATE-ATTRIBUTION-CHECK","class":"e-format-trap","diag":"증거 명령 값의 «;» 로 goal-author 가 줄 전체 무시 → «완료 경계 누락» 거부(0.2.35 미초록 38칸 같은 꼴)","action":"28칸 일괄 retitle(명령 한 줄 ⊕ 증거 보충)","lesson":"증거 명령 = 연산자 없는 명령 하나 · 설명은 다음 줄","run":"","card":"","launch":"","goalSha":"","paths":"","model":"","host":"mbp","evidence":"TC #23398","rule":"CELL-DONE-EVIDENCE-ONE-VALIDATOR(검사기 하나 · 정규화 · 원인 문구)","ms":"","outcome":"pending"}
|
|
6
|
+
{"ts":"2026-10-21T07:39:11+0900","by":"OP","source":"op","cell":"OVERLAP-SIBLING-CTX","class":"e-format-trap","diag":"자리 ta-ready 힌트 «# 대상 경로: … · 설명문» 이 칸 제목 경로를 덮어써 «형제 (경로 아님)»","action":"MK 20·UX 15 힌트 경로만 남김","lesson":"힌트 줄엔 경로만 · 설명은 칸 제목에","run":"","card":"","launch":"","goalSha":"","paths":"","model":"","host":"mbp","evidence":"OPT #23608","rule":"디스패처가 칸 제목과 다른 힌트는 무시","ms":"","outcome":"pending"}
|
|
7
|
+
{"ts":"2026-10-21T07:39:11+0900","by":"OP","source":"autopsy","cell":"RUBRIC-V2-REVIEW-FU","class":"f-unaware-of-code","diag":"새 이미지에서도 goal-only-rework-exhausted · 첫 자식 PR 없이 soft-stop","action":"재발사금지 hold · 골 개정 대기","lesson":"(미판정) 재작업 소진 = 골이 이미 착지/불가능한 일을 요구했는지 먼저","run":"run-06b0e6d2","card":"ta-20261020-350383","launch":"","goalSha":"","paths":"","model":"","host":"node-b","evidence":"OPT #23509","rule":"","ms":"","outcome":"pending"}
|
|
8
|
+
{"ts":"2026-10-21T07:39:11+0900","by":"OP","source":"run-doctor","cell":"DRAFT-SWEEP-LINEAGE-HARVESTABLE-FU","class":"env-stale-image","diag":"수리 런이 옛 pin 부모(27f0be)로 typescript 누락 Error/8","action":"수리 재발사 대신 MK 손 수확 → #29739 착지","lesson":"실패가 옛 이미지 탓이면 골을 바꾸지 말고 열린 draft 를 수확","run":"run-5381da59","card":"","launch":"","goalSha":"","paths":"","model":"","host":"node-b","evidence":"MK #23395 OP #23397","rule":"incident 묶음에 Pod 이미지 sha 열 · pin 이전이면 «환경» 분류","ms":"","outcome":"pending"}
|
|
9
|
+
{"ts":"2026-10-21T07:39:11+0900","by":"OP","source":"green-factory","cell":"ALREADY-BUILT-HINT","class":"f-unaware-of-code","diag":"착지했으나 alreadyBuiltHints( 생산 호출부 0","action":"FU 칸 ALREADY-BUILT-HINT-FU 발사","lesson":"골의 완료 경계에 «생산 진입점에서 호출» 을 명시(MS-05)","run":"","card":"","launch":"","goalSha":"","paths":"","model":"","host":"mbp","evidence":"MK green-e4/ALREADY-BUILT-HINT.md","rule":"TRAIN-GREEN-LEG 첫 검사 = 새 export 생산 호출부 0 이면 미배선","ms":"MS-05","outcome":"pending"}
|
|
10
|
+
{"ts":"2026-10-21T07:39:11+0900","by":"OP","source":"green-factory","cell":"ORG-REG","class":"d-rigid-acceptance","diag":"감사 문서 1파일만 착지 · eln org 명령 없음 · 원 수용선은 운영 실물 요구","action":"원칸 재발사 제목 보강안(OPT)","lesson":"코드 칸은 «코드 대상 경로» 가 문서만 바꾸는 PR 로 닫히지 않게 · 수용선은 동작·방법·충실성","run":"","card":"","launch":"","goalSha":"","paths":"","model":"","host":"mbp","evidence":"OPT ORG-REG-RELAUNCH-TITLE.txt","rule":"","ms":"","outcome":"pending"}
|
|
11
|
+
{"ts":"2026-10-21T07:39:11+0900","by":"OP","source":"op","cell":"REVIEW-CAP-COUNT-BY-CONTENT","class":"e-format-trap","diag":"리뷰 상한을 파일명 정규식으로 셈 → -rN- 이름이면 못 세어 #29789 10 head 통과","action":"0.2.35 P0 칸 · UX 구현(내용 pr·headCommit 으로)","lesson":"규칙 집행은 문자열 꼴이 아니라 의미 필드로","run":"","card":"","launch":"","goalSha":"","paths":"","model":"","host":"mbp","evidence":"UX #23784","rule":"집행 코드 리뷰 체크: 꼴 의존 여부","ms":"","outcome":"pending"}
|
|
12
|
+
{"ts":"2026-10-21T07:40:22+0900","by":"UX","source":"autopsy","cell":"ARG-UI-UNITS","class":"a-missing-predecessor","diag":"same-cell PR appeared after run branch push and guard refused draft creation; two rework rounds repeated capture/production-path evidence without a narrower change","action":"inventory open same-cell and path-overlap PRs before launch; if the guard refuses after push, refresh inventory and retry from that state","lesson":"Goal authoring should require a same-cell PR inventory preflight and specify how to join or retry after a late same-cell guard refusal; completion evidence should show that no duplicate push was left stranded.","run":"","card":"","launch":"","goalSha":"","paths":"","model":"","host":"","evidence":"","rule":"","ms":"","outcome":"pending"}
|
|
13
|
+
{"ts":"2026-10-21T07:41:57+0900","by":"TC","source":"op","cell":"LAUNCH-UTTERANCE-LEDGER","class":"g-umbrella-scope","diag":"원문 기록과 저작·결과 연결을 한 PR에서 검증하려다 r3까지 모의 경계 must-fix가 지속됐다","action":"OP #23799에 따라 원문 start JSONL·조회만 #29792에 남기고 저작·결과 연결은 FU로 분리했다","lesson":"골을 원문 보존 첫 착지와 launchId 후속 연결로 나누고 각 수용선을 생산 입구에서 독립 검증한다","run":"","card":"","launch":"","goalSha":"","paths":"","model":"","host":"","evidence":"PR #29792 r3 head 5b19e5c345, OP #23799","rule":"","ms":"","outcome":"scope-split"}
|
|
14
|
+
{"ts":"2026-10-21T07:43:00+0900","by":"OPT","source":"autopsy","cell":"RUN-AUTOPSY-LOOP-FU-CONTRACT","class":"d-rigid-acceptance","diag":"생산 사고 runId CLI 원문·동시 tick 관측을 자식 완료 경계로 요구해 재작업 2라운드 동일 지적 후 사람 의존","action":"자식 워크트리 밖 생산 관측 요구를 완료 경계에서 분리","lesson":"저작 때 자식이 만들 수 있는 증거와 실운영 관측을 분리","run":"run-06c32701-bb62-490a-8e24-784f877849cd","card":"","launch":"","goalSha":"","paths":"","model":"","host":"node-b","evidence":"~/elanous-hq/seat-state/OP/autopsy/reports/run-06c32701-bb62-490a-8e24-784f877849cd.json","rule":"완료 조건이 자식 워크트리에서 만들 수 없는 생산 사고 관측을 요구하면 발사 전에 그 경계를 사람 의존으로 빼고 재작업 루프에 넣지 않는다.","ms":"","outcome":"pending"}
|
|
15
|
+
{"ts":"2026-10-21T07:43:00+0900","by":"OPT","source":"autopsy","cell":"DECOMPOSE-BOUNDARY-ONE-STEP","class":"d-rigid-acceptance","diag":"완료 경계·판정 시험·증거 원문 누락이 EXTEND 뒤에도 반복","action":"골의 시험 파일·증거 출처를 명시하도록 개정","lesson":"완료 경계에 실행 가능한 시험과 증거 출처를 지정","run":"run-08ba654b-2918-46ef-ade0-2f7c88a9b54d","card":"","launch":"","goalSha":"","paths":"","model":"","host":"node-b","evidence":"~/elanous-hq/seat-state/OP/autopsy/reports/run-08ba654b-2918-46ef-ade0-2f7c88a9b54d.json","rule":"완료 경계와 판정 시험·증거 원문이 없으면 실행 전에 골을 되돌리고, 재작업에서 같은 식별값이 반복되면 그 누락을 골 수정 항목으로 고정해 다시 배치하지 않는다.","ms":"","outcome":"pending"}
|
|
16
|
+
{"ts":"2026-10-21T07:43:00+0900","by":"OPT","source":"autopsy","cell":"TUI-FLICKER-DRAW-INTEGRATION","class":"d-rigid-acceptance","diag":"bun test src/dashboard/index.test.ts 실행 원문 누락이 2라운드 반복","action":"시험 출력 증거 확보 뒤 재작업 여부 판정","lesson":"완료 경계의 시험 명령에 실행 출력의 귀속까지 명시","run":"run-0b3c828e-f513-4e06-8afc-d898b733f91b","card":"","launch":"","goalSha":"","paths":"","model":"","host":"node-b","evidence":"~/elanous-hq/seat-state/OP/autopsy/reports/run-0b3c828e-f513-4e06-8afc-d898b733f91b.json","rule":"완료 경계가 비거나 테스트 실행 원문이 없으면 재작업으로 넘기지 말고, 발사 전에 거절하거나 그 출력을 런 증거로 자동 첨부한다.","ms":"","outcome":"pending"}
|
|
17
|
+
{"ts":"2026-10-21T07:43:00+0900","by":"OPT","source":"autopsy","cell":"EFFECTS-YOLO-PROFILE","class":"f-unaware-of-code","diag":"nodeRequiresHumanGate 호출 배선·시험 명령 누락, 호출 없는 import만 남음","action":"생산 호출부와 시험 실행 결과를 확인하도록 골 개정","lesson":"import 존재가 아니라 생산 호출 경로의 실행 증거를 수용선으로","run":"run-1afc4b8c-dcc7-49ec-8620-3b23fb5ac68b","card":"","launch":"","goalSha":"","paths":"","model":"","host":"node-b","evidence":"~/elanous-hq/seat-state/OP/autopsy/reports/run-1afc4b8c-dcc7-49ec-8620-3b23fb5ac68b.json","rule":"완료 경계와 요구 테스트 명령 원문이 없는 골은 발사 전에 거절하고, 직전 라운드와 같은 누락을 호출 없는 import로 덮은 diff는 재작업을 더 주기 전에 기각한다.","ms":"","outcome":"pending"}
|
|
18
|
+
{"ts":"2026-10-21T07:43:00+0900","by":"OPT","source":"autopsy","cell":"LOGS-RETENTION-46MIN","class":"e-format-trap","diag":"판정 신호 마커가 제목뿐이고 완료 경계 누락, 4라운드 동일 지적","action":"판정 신호: <문장> 필드와 완료 경계를 채워 재저작","lesson":"파서가 읽는 판정 신호: 줄을 제목과 구별해 작성","run":"run-1b093b97-8095-48d6-adcb-4b73914d2e5f","card":"","launch":"","goalSha":"","paths":"","model":"","host":"node-b","evidence":"~/elanous-hq/seat-state/OP/autopsy/reports/run-1b093b97-8095-48d6-adcb-4b73914d2e5f.json","rule":"판정 신호 마커나 완료 경계가 없으면 발사하지 말고, 같은 지적 심볼이 반복되면 추가 연장 없이 골을 고친 뒤에만 재발사하게 한다.","ms":"","outcome":"pending"}
|
|
19
|
+
{"ts":"2026-10-21T07:43:00+0900","by":"OPT","source":"autopsy","cell":"RUN-HELPER-FU","class":"d-rigid-acceptance","diag":"src/harness/helper-scan.ts 소스 must-fix에 문서 diff만 두 라운드","action":"소스 수정과 테스트 증거 없으면 문서만의 수용을 보류","lesson":"구현 칸 완료 경계에는 대상 소스 diff와 작동 시험을 함께","run":"run-4e42ef41-42d6-42ab-bc54-f7e1d78dc494","card":"","launch":"","goalSha":"","paths":"","model":"","host":"mbp","evidence":"~/elanous-hq/seat-state/OP/autopsy/reports/run-4e42ef41-42d6-42ab-bc54-f7e1d78dc494.json","rule":"소스 파일을 지목한 must-fix인데 diff가 문서뿐이면 같은 게이트로 다음 라운드를 열지 말고 그 자리에서 불수렴으로 끊는다.","ms":"","outcome":"pending"}
|
|
20
|
+
{"ts":"2026-10-21T07:43:00+0900","by":"OPT","source":"autopsy","cell":"TA-HARVEST-CLAIMED-LABEL","class":"f-unaware-of-code","diag":"큐 진입 라벨·생산 경로 근거가 3라운드 must-fix로 반복","action":"큐 진입 생산 호출 경로 판정 신호를 골에 접지","lesson":"라벨 생성 시점·생산 진입점과 확인할 원장 신호를 명시","run":"run-e53fd51b-6f29-4291-9103-3c41ff2eb1b1","card":"","launch":"","goalSha":"","paths":"","model":"","host":"node-b","evidence":"~/elanous-hq/seat-state/OP/autopsy/reports/run-e53fd51b-6f29-4291-9103-3c41ff2eb1b1.json","rule":"must-fix가 라운드 사이에 줄지 않으면 같은 문면을 재발사하지 말고, 큐 진입 라벨 부착의 생산 경로 판정 신호를 골에 다시 접지한 뒤에만 연다.","ms":"","outcome":"pending"}
|
|
21
|
+
{"ts":"2026-10-21T07:43:00+0900","by":"OPT","source":"autopsy","cell":"GATE-ISOLATE-FANOUT-CAP","class":"env-capacity","diag":"OOMKilled 16Gi 뒤 32Gi 재시도가 pod-pool-unfit으로 종료","action":"메모리 증액 전 단일 노드 수용 여부 검사","lesson":"골 수정 전 OOM 요청량과 풀이 받을 수 있는 한도를 분리 관측","run":"run-61160794-6763-47bf-9e24-a20102f70e0b","card":"","launch":"","goalSha":"","paths":"","model":"","host":"node-c","evidence":"~/elanous-hq/seat-state/OP/autopsy/reports/run-61160794-6763-47bf-9e24-a20102f70e0b.json","rule":"OOM으로 메모리 상한을 올리기 전에 단일 멤버 풀이 그 요청을 스케줄할 수 있는지 확인하고, 못 하면 재시도를 걸지 말고 풀 용량 부족으로 즉시 멈추게 한다.","ms":"","outcome":"pending"}
|
|
22
|
+
{"ts":"2026-10-21T07:43:00+0900","by":"OPT","source":"autopsy","cell":"RELEASE-LOOP-CONTRACT","class":"env-provider","diag":"account candidateCount=0으로 구현 노드 aborted 반복","action":"계정 후보 0은 재작업 대신 자격 고갈로 분류","lesson":"자격 고갈을 골 무진전으로 오인하지 말고 발사 전 후보를 관측","run":"run-6514bbd1-0302-44fa-ab9a-611679d67277","card":"","launch":"","goalSha":"","paths":"","model":"","host":"elangram-wsl","evidence":"~/elanous-hq/seat-state/OP/autopsy/reports/run-6514bbd1-0302-44fa-ab9a-611679d67277.json","rule":"계정 후보가 0이면 구현 라운드를 시작하지 말고 자격 고갈로 즉시 끝내, 무진전·골 개정으로 오인되지 않게 한다.","ms":"","outcome":"pending"}
|
|
23
|
+
{"ts":"2026-10-21T07:43:00+0900","by":"OPT","source":"autopsy","cell":"RESYNC-RELEASE-FLOCK","class":"env-provider","diag":"draft PR 생성 중 GitHub CLI 인증 부재, PR 없이 종료","action":"GH_TOKEN/gh 인증 확인을 Pod 시작 전 포함","lesson":"PR 생성 자격은 완료 시점이 아니라 발사 전 확인","run":"run-690aa720-428d-4088-aecd-bcc36913dc4f","card":"","launch":"","goalSha":"","paths":"","model":"","host":"node-b","evidence":"~/elanous-hq/seat-state/OP/autopsy/reports/run-690aa720-428d-4088-aecd-bcc36913dc4f.json","rule":"파드 골 런은 시작 전에 GitHub CLI 인증(GH_TOKEN)이 있는지 확인하고, 없으면 발사하지 않는다.","ms":"","outcome":"pending"}
|
|
24
|
+
{"ts":"2026-10-21T07:43:00+0900","by":"OPT","source":"autopsy","cell":"GIT-API-PROXY-MOCK","class":"other","diag":"comparison-base-unavailable 반복으로 게이트 재작업 무진전","action":"base ref·공통 조상 미확보를 구현 재작업과 분리","lesson":"게이트 비교 기준 ref·merge-base를 저작 품질과 별도 환경 신호로 확인","run":"run-f2e8432e-ceb5-44bf-afc1-bb3617dbc772","card":"","launch":"","goalSha":"","paths":"","model":"","host":"mbp","evidence":"~/elanous-hq/seat-state/OP/autopsy/reports/run-f2e8432e-ceb5-44bf-afc1-bb3617dbc772.json","rule":"비교 기준 커밋을 확보하지 못하면 구현 재작업을 반복하지 않고 게이트가 comparison-base-unavailable을 즉시 종료 사유로 고정하게 한다.","ms":"","outcome":"pending"}
|
|
25
|
+
{"ts":"2026-10-21T07:44:40+0900","by":"OPT","source":"autopsy","cell":"LAND-RECIPE-GRAPH","class":"g-umbrella-scope","diag":"기존 run-doctor #4와 동일 run: 73분 umbrella 무PR 뒤 OP 손중지 확정; SIGTERM 자체만으로 저작 원인을 단정하지 않음","action":"중복 진단 재신고 없이 첫 조각 계획 산출로 한정","lesson":"수집·묶음·배치·판정·게이트·병합 같은 다단계 레시피는 한 산출물 경계로 쪼갬","run":"run-53bba27c-0560-481c-99e6-b331122ce571","card":"","launch":"","goalSha":"","paths":"","model":"","host":"node-b","evidence":"~/elanous-hq/seat-state/OP/autopsy/reports/run-53bba27c-0560-481c-99e6-b331122ce571.json; OP #23811; 기존 원장 #4","rule":"","ms":"","outcome":"repeated"}
|
|
26
|
+
{"ts":"2026-10-21T07:44:40+0900","by":"OPT","source":"autopsy","cell":"ARG-UI-UNITS","class":"a-missing-predecessor","diag":"기존 UX #12와 동일 런: push 뒤 same-cell PR guard 거부 및 두 재작업 라운드의 증거 결손","action":"같은 셀 PR 인벤토리를 재확인하고 합류·재시도","lesson":"발사 전 동일 셀 PR 선행 상태 확인 및 늦은 guard 거부의 재시도 경로를 완료 경계에 명시","run":"run-6057dab7-9afd-49dc-b36a-73ae1ba0d521","card":"","launch":"","goalSha":"","paths":"","model":"","host":"node-b","evidence":"~/elanous-hq/seat-state/OP/autopsy/reports/run-6057dab7-9afd-49dc-b36a-73ae1ba0d521.json; 기존 원장 #12","rule":"","ms":"","outcome":"repeated"}
|
|
27
|
+
{"ts":"2026-10-21T07:53:04+0900","by":"OP","source":"op","cell":"RELEASE-HARD-REHEARSAL","class":"env-capacity","diag":"예행 체크아웃에 node_modules 없음 → Bun 이 캐시 typescript@7 해석 → public-export.ts TypeError · 검사기는 «no structured diagnostic» 일반 문구로 덮음","action":"TC 재현 → bun install --frozen-lockfile 후 재발사","lesson":"예행·발행 체크아웃은 시작 전 install 상태(node_modules·lock 일치)를 먼저 확인 · 크래시와 누출을 다른 문구로","run":"hard-810c80b8-1e77-4aba-abdb-c8af674cae91","card":"","launch":"","goalSha":"","paths":"","model":"","host":"mbp","evidence":"TC #23868","rule":"rehearsal 가 leak-check stderr 꼬리를 detail 에 싣고 install 사전검사","ms":"","outcome":"pending"}
|
|
28
|
+
{"ts":"2026-10-21T07:53:51+0900","by":"UX","source":"autopsy","cell":"TUI-MSG-SLASH","class":"d-rigid-acceptance","diag":"완료 경계가 비어 [GOAL_DONE_BOUNDARY_MISSING]; 3라운드 동안 격리 TUI 화면과 PR 본문 실물 실행 증거 결손이 반복됨","action":"목표 저작 시 생산 진입점·격리 화면 검증·증거 저장 위치·회귀 명령을 완료 경계에 함께 고정","lesson":"실물 화면/로그 요구를 말로 두지 말고, 재현 명령과 기대 화면 신호 및 PR에 붙일 원문을 완료 전에 명시한다","run":"run-1b69527d-d8a4-455d-87c0-fce8025af49d","card":"","launch":"","goalSha":"","paths":"src/dashboard/slash-runtime/dashboard-handlers.ts · TUI 화면/로그 검증 경로","model":"","host":"node-b","evidence":"node-b:~/.elanous/incidents/2026-10-21.jsonl#run-1b69527d-d8a4-455d-87c0-fce8025af49d","rule":"빈 완료 경계와 반복되는 실물 증거 결손은 재작업 전에 골 저작으로 되돌려 검증 가능한 신호를 정한다","ms":"","outcome":"repeated"}
|
|
29
|
+
{"ts":"2026-10-21T07:53:55+0900","by":"UX","source":"autopsy","cell":"ARG-UI-UNITS","class":"other","diag":"브랜치 push 뒤 같은 셀 PR이 나타나 draft PR 가드가 거부; existing lesson #12에 a-missing-predecessor로 기록됨","action":"기존 교훈을 보완해 발사 후 guard 거부도 최신 same-cell 인벤토리에서 합류 또는 재시도하게 한다","lesson":"같은 셀 PR 검사는 발사 전 한 번으로 끝나지 않는다: guard 거부 시 최신 PR 목록을 다시 읽고 선행 PR에 합류하거나 새 인벤토리로 재시도한다","run":"run-6057dab7-9afd-49dc-b36a-73ae1ba0d521","card":"","launch":"","goalSha":"","paths":"apps/pwa/src/components/editor/GraphCanvasEditor.tsx","model":"","host":"node-b","evidence":"node-b:~/.elanous/incidents/2026-10-21.jsonl#run-6057dab7-9afd-49dc-b36a-73ae1ba0d521","rule":"same-cell guard rejection after push must refresh PR inventory and preserve/attach the work instead of ending at an opaque no-PR failure","ms":"","outcome":"repeated"}
|
|
30
|
+
{"ts":"2026-10-21T07:53:59+0900","by":"UX","source":"autopsy","cell":"TA-HARVEST-CLAIMED-LABEL","class":"d-rigid-acceptance","diag":"큐 진입 라벨 부착과 생산 경로 증거 must-fix가 3라운드 동안 줄지 않음; 기존 교훈 #10은 f-unaware-of-code로 기록됨","action":"수용선을 생산 큐 진입 경로의 라벨 부착 시점과 같은 런의 검증 가능한 신호로 좁힌다","lesson":"구현 완료는 helper 존재가 아니라 큐 진입에서 라벨이 생성되는 생산 호출과 회귀 시험 원문으로 판정한다","run":"run-e53fd51b-6f29-4291-9103-3c41ff2eb1b1","card":"","launch":"","goalSha":"","paths":"src/github/pr-labels.ts · src/task-agent/land-queue.ts","model":"","host":"node-b","evidence":"node-b:~/.elanous/incidents/2026-10-21.jsonl#run-e53fd51b-6f29-4291-9103-3c41ff2eb1b1","rule":"같은 production-path must-fix가 줄지 않으면 추가 라운드 전 goal의 완료 경계·증거를 생산 큐 입구에 접지한다","ms":"","outcome":"repeated"}
|
|
31
|
+
{"ts":"2026-10-21T07:54:04+0900","by":"UX","source":"autopsy","cell":"MSG-ADDRESS-HANDBOOK","class":"other","diag":"draft PR creation failed with terminalClass=failed-no-pr, stage=error and unclassified; underlying create failure cause absent","action":"draft-PR 생성 단계에서 gh/git stderr와 종료 코드, 동파일 PR 인벤토리 결과를 런 증거로 남긴다","lesson":"PR 생성 실패는 stderr와 exit code를 보존하고 same-file OPEN PR 충돌을 구분하기 전 provider/환경 원인으로 단정하지 않는다","run":"run-d88e9fbe-90c6-49b1-82b4-483234c58e93","card":"","launch":"","goalSha":"","paths":"docs/handbook/LOOP-AGENTS.md","model":"","host":"node-b","evidence":"node-b:~/.elanous/incidents/2026-10-21.jsonl#run-d88e9fbe-90c6-49b1-82b4-483234c58e93 · stderr 없음","rule":"failed-no-pr without captured command stderr/exit code stays unclassified until same-file PR overlap is checked","ms":"","outcome":"repeated"}
|
|
32
|
+
{"ts":"2026-10-21T07:54:09+0900","by":"UX","source":"autopsy","cell":"GRAPH-VOCAB","class":"d-rigid-acceptance","diag":"명시된 판정 함수 시험과 완료 원문 대신 OPC 비교 원장·생산 실행·회귀시험 증거 결손이 두 라운드 반복됨","action":"이 골의 정적 함수/회귀시험 경계와 별도 운영 표본 요구를 분리하고, 지정 시험 출력의 저장 위치를 명시","lesson":"골이 관측 함수와 테스트만 요구하면 생산 런을 완료 조건에 추가하지 않는다; 요구한 각 시험 출력은 exact run/PR 근거로 보존한다","run":"run-f9d12d33-0880-45ad-876a-c4c7001bb29e","card":"","launch":"","goalSha":"","paths":"src/self-implement/graph-templates.ts · src/self-implement/graph-templates.test.ts","model":"","host":"node-b","evidence":"node-b:~/.elanous/incidents/2026-10-21.jsonl#run-f9d12d33-0880-45ad-876a-c4c7001bb29e · goal 문서: ASK-armF-graph-vocabulary-covers-orchestrator-stages-2026-09-10.md","rule":"완료 판정은 goal이 지정한 정적 함수 출력과 회귀시험으로 한정하고 범위 밖 운영 증거를 새 수용 조건으로 만들지 않는다","ms":"","outcome":"repeated"}
|
|
33
|
+
{"ts":"2026-10-21T08:05:41+0900","by":"OPT","source":"op","cell":"ORG-REG","class":"g-umbrella-scope","diag":"여섯 CLI 동작과 조직도·redirect를 한 제목에 묶어 첫 조각을 완주할 수 없음","action":"설치별 원장과 add·list만 남기고 rename·merge·split·retire·PWA를 FU로 분리","lesson":"레지스트리 우산은 격리 원장의 add→재읽기 list라는 관측 가능한 한 조각으로 저작","run":"","card":"","launch":"","goalSha":"","paths":"src/hq/seats.ts · src/user-config.ts · src/seat-address/seat-address.ts","model":"","host":"","evidence":"OP #24015 · seat-state/OPT/retitle/ORG-REG.txt","rule":"","ms":"MS-05,MS-06","outcome":"pending"}
|
|
34
|
+
{"ts":"2026-10-21T08:05:41+0900","by":"OPT","source":"op","cell":"FEATURE-SET-BRANCH","class":"d-rigid-acceptance","diag":"부검 insufficient-evidence ×2 · preview 성공 상수는 실제 PR target·게이트 base의 근거가 아님","action":"첫 조각의 단일 runId로 자식 argv·PR target·게이트 base 원문을 연결하고 수명/preview는 FU","lesson":"성공 스텁이 아니라 서로 다른 main·feat 무대에서 생산 base 전파를 확인하도록 수용선 작성","run":"","card":"","launch":"","goalSha":"","paths":"src/harness/harness-cli-command.ts · src/harness/harness-pod-dispatch.ts · src/cli/pr-cli.ts","model":"","host":"","evidence":"OP #24015 · seat-state/OPT/retitle/FEATURE-SET-BRANCH.txt","rule":"","ms":"MS-04,MS-05","outcome":"pending"}
|
|
35
|
+
{"ts":"2026-10-21T08:05:41+0900","by":"OPT","source":"op","cell":"SW-CLI-ACQUIRE","class":"d-rigid-acceptance","diag":"no-progress·insufficient-evidence ×2 · API-key-only를 구독으로 오인하고 플러그인 없는 부분 성공을 ok로 처리","action":"한 CLI 구독 검사 fail-closed만 첫 조각으로, 플러그인·두 CLI 통합은 FU","lesson":"API-key-only 거부와 생산 PTY 경로 증거·부분 완료 거부를 저작 때 명시하고 mock을 실 계정 검증으로 오인하지 않는다","run":"","card":"","launch":"","goalSha":"","paths":"src/agent-mission/tool-install.ts · src/agent-mission/claude-subscription.ts","model":"","host":"","evidence":"OP #24015 · seat-state/OPT/retitle/SW-CLI-ACQUIRE.txt","rule":"","ms":"MS-05,MS-06","outcome":"pending"}
|
|
36
|
+
{"ts":"2026-10-21T08:09:27+0900","by":"TC","source":"retro","cell":"GRAPH-VOCAB-LINT","class":"d-rigid-acceptance","diag":"PR #29807 리뷰가 OPC 동일 49입력 전후 TSV를 첫 코드 조각에 요구해 린트 배선·실물 1회 증거와 전수 분포 검증이 뒤섞임","action":"첫 PR은 린트 코드·집중 시험·test 우주 graph run 1회로, 동일 49입력 전후 TSV는 GRAPH-VOCAB-LINT-FU로 분리","lesson":"처음부터 실물 입구 1회와 전수 운영 표본은 별도 수용선으로 쓰고, 전수 입력 집합이 고정되지 않으면 그 값을 첫 PR의 gate로 요구하지 않는다","run":"","card":"","launch":"","goalSha":"","paths":"","model":"","host":"","evidence":"PR #29807 · OP #24016 · seat-state/TC/goals-next/GRAPH-VOCAB-LINT-FU.md","rule":"","ms":"","outcome":"fixed"}
|
|
37
|
+
{"ts":"2026-10-21T08:09:35+0900","by":"TC","source":"retro","cell":"LAUNCH-SINGLE-DOOR","class":"g-umbrella-scope","diag":"PR #29808이 1A 순수 판정에 env 모드·실제 발사 차단·요청 원장 쓰기까지 한꺼번에 담아 리뷰 경계가 커짐","action":"1A는 순수 판정·기존 관문 연결, 1B는 env·실제 발사, 1C는 요청 원장·소비로 분리","lesson":"발사 제어 골은 판정 로직, 실제 발사 효과, 원장 소비를 처음부터 세 조각으로 나눠 각 조각의 독립 수용 신호를 쓴다","run":"","card":"","launch":"","goalSha":"","paths":"","model":"","host":"","evidence":"PR #29808 · OP #24016 · seat-state/TC/goals-next/LAUNCH-SINGLE-DOOR-1B.md · 1C.md","rule":"","ms":"","outcome":"fixed"}
|
|
38
|
+
{"ts":"2026-10-21T08:17:14+0900","by":"?","source":"op","cell":"UX-EXT-RFC-FIRST","class":"env-provider","diag":"test universe did not isolate baseUrl; a fake key reached the real OpenAI endpoint and returned 401","action":"Stopped retrying with the fake key; use the seat installed eln default subscription provider for exactly one isolated test-universe call","lesson":"Before testing provider routing, verify test-universe baseUrl isolation. Never treat a fake key as a local mock; if one safe real call cannot be made, use a mock runTurn capture and label the PR evidence LLM boundary = mock.","run":"","card":"","launch":"","goalSha":"","paths":"","model":"","host":"","evidence":"OP mail #24041; debug log in old worktree 2026-10-21","rule":"","ms":"","outcome":"fixed"}
|
|
39
|
+
{"ts":"2026-10-21T08:55:27+0900","by":"OPC","source":"green-factory","cell":"GATE-ATTRIBUTION-CHECK","class":"f-unaware-of-code","diag":"비샤드 귀속 unknown1 시험만 골에 넣어 샤드 생산 경로의 passedTestEvidence.testCases 누락을 못 봄","action":"실제 Bun JUnit XML을 남기는 --shards 1 생산 gate로 다시 재어 introduced2/unknown0 편차를 찾고 FU 지정","lesson":"귀속 골은 direct와 shard 두 생산 경로가 같은 기준선 JUnit 양성 신호를 소비하는지 같이 요구한다","run":"","card":"","launch":"","goalSha":"","paths":"src/self-implement/gate-baseline.ts · src/self-dev/shard-aggregate.ts","model":"","host":"","evidence":"~/elanous-hq/seat-state/OPC/evidence/20261021/gate-attribution-shard1/summary.json","rule":"","ms":"MS-04","outcome":"pending"}
|
|
40
|
+
{"ts":"2026-10-21T08:57:06+0900","by":"OP","source":"run-doctor","cell":"RUN-AUTOPSY-LOOP","class":"e-format-trap","diag":"2라운드 PR0 soft-stop · 제목에 «원 칸 설명 원문:» 중복 ⊕ 신설 경로(run-autopsy-shadow.ts)가 본문에만 있고 1행 대상 경로와 다름 · 완료 경계가 LLM classify 경로까지 요구(첫 조각치고 큼)","action":"재발사금지 hold · TC 에 1행=신설 포함 실제 대상, LLM 경로는 후속으로 떼어 재저작","lesson":"retitle 때 원 칸 원문을 붙여 넣지 말고 1행 대상 경로와 신설 줄을 한 벌로 맞춘다 · 첫 조각은 LLM 경로 없이 결정론 분류만","run":"run-bff41b39","card":"","launch":"","goalSha":"","paths":"","model":"","host":"node-b","evidence":"OPT #24212","rule":"","ms":"","outcome":"pending"}
|
|
41
|
+
{"ts":"2026-10-21T08:57:06+0900","by":"OP","source":"run-doctor","cell":"RELEASE-TUI-SUBCHECK-HITL","class":"b-stale-path","diag":"2라운드 PR0 soft-stop · 증거 명령이 publish-node.test.ts 를 요구하나 1행 대상 경로에 없음 → 범위 밖 편집 강요 가능","action":"재발사금지 hold · OPC 에 대상 경로에 publish-node(.test).ts 추가 여부 판단 후 재저작","lesson":"증거 명령에 쓰는 시험 파일과 그 시험이 덮는 소스는 1행 대상 경로에 모두 넣는다","run":"run-38f894ca","card":"","launch":"","goalSha":"","paths":"","model":"","host":"node-b","evidence":"OPT #24212","rule":"","ms":"","outcome":"pending"}
|
|
42
|
+
{"ts":"2026-10-21T08:58:42+0900","by":"OPC","source":"green-factory","cell":"RELEASE-TUI-SUBCHECK-HITL","class":"b-stale-path","diag":"골 대상 경로에는 publish-node(.test).ts가 없는데 완료 증거 명령은 publish-node.test.ts를 필수로 요구해 2라운드 PR0 soft-stop","action":"기존 네 대상에 publish-node.ts와 publish-node.test.ts를 추가한 엄격 retitle 제목을 OP에 전달, 12:00 hold 유지","lesson":"골 1행 대상 경로가 완료 경계 증거 명령의 시험 파일과 실제 생산 호출부를 모두 포함하는지 발사 전에 대조한다","run":"","card":"","launch":"","goalSha":"","paths":"scripts/release-loop/publish-node.ts · scripts/release-loop/publish-node.test.ts","model":"","host":"","evidence":"~/elanous-hq/seat-state/OPC/fu/RELEASE-TUI-SUBCHECK-HITL-retitle.txt","rule":"","ms":"MS-04","outcome":"pending"}
|
|
43
|
+
{"ts":"2026-10-21T10:54:02+0900","by":"OP","source":"run-doctor","cell":"TA-REPAIR-EVENT-COLLECT-FU","class":"f-unaware-of-code","diag":"골이 이미 main 에 있는 boot wiring(nexus/index.ts:91·:1138·:3387)과 collector(steward/ta-repair-event-collect.ts:146)를 새로 만들라 해 자식이 40분+ 진도 0 · PR 0","action":"재저작: 남은 것만(수리 completedAt→수집 60초 운영 표본·fallback 상호작용) · 코드 근거 있는 부분은 green 처분 검토","lesson":"저작 전 대상 기능이 이미 있는지 rg 로 확인하고, 있으면 «현재 계약:» 줄에 경로:줄을 적어 남은 조각만 쓴다","run":"run-1e47f7b5","card":"","launch":"","goalSha":"","paths":"","model":"","host":"","evidence":"TC #24624","rule":"","ms":"","outcome":"pending"}
|
|
44
|
+
{"ts":"2026-10-21T12:19:43+0900","by":"OP","source":"run-doctor","cell":"SW-CLI-ACQUIRE","class":"b-stale-path","diag":"골이 대상 4파일만 적으면서 생산 PTY 호출 배선 증명을 요구 → 자식이 대상 밖 src/cli/pty-takeover-cli.ts 를 고쳐 1차 scope-escape · 2차도 같은 꼴","action":"다음 재저작 때 생산 진입 파일(pty-takeover-cli.ts)을 대상 경로에 넣거나 배선 증명을 수용선에서 뺀다","lesson":"«생산 진입점 배선 증명» 을 요구하면 그 진입점 파일을 1행 대상 경로에 반드시 넣는다","run":"run-c0c379f4","card":"","launch":"","goalSha":"","paths":"","model":"","host":"","evidence":"OPT #25039","rule":"","ms":"","outcome":"pending"}
|
|
45
|
+
{"ts":"2026-10-21T13:26:03+0900","by":"OP","source":"run-doctor","cell":"ORG-REG","class":"f-unaware-of-code","diag":"골 본문이 생산 CLI 등록·원장 신설을 요구했는데 대상 경로에 등록 파일이 없어 자식이 범위 밖 편집 → scope-escape 2회 PR 0","action":"등록 파일만 대상 경로에 추가 ⊕ 경계: 줄로 무관 모듈 금지(13:35 재저작)","lesson":"수용선에 생산 CLI·원장을 쓰면 그 등록 지점(index.ts·*-cli.ts·원장 파일)을 대상 경로 1행에 같이 적는다","run":"run-badf928b","card":"","launch":"","goalSha":"","paths":"src/index.ts · src/cli/org-cli.ts","model":"","host":"","evidence":"seat-state/OPT/SCOPE-ESCAPE-1021.md","rule":"저작 검사: 수용선의 eln <명령> 이 대상 경로의 어느 파일에도 등록되지 않으면 경고","ms":"","outcome":"pending"}
|
|
46
|
+
{"ts":"2026-10-21T13:26:03+0900","by":"OP","source":"run-doctor","cell":"POD-SHELF-ANY-REF","class":"f-unaware-of-code","diag":"골 본문이 생산 CLI 등록·원장 신설을 요구했는데 대상 경로에 등록 파일이 없어 자식이 범위 밖 편집 → scope-escape 2회 PR 0","action":"등록 파일만 대상 경로에 추가 ⊕ 경계: 줄로 무관 모듈 금지(13:35 재저작)","lesson":"수용선에 생산 CLI·원장을 쓰면 그 등록 지점(index.ts·*-cli.ts·원장 파일)을 대상 경로 1행에 같이 적는다","run":"run-b4037201","card":"","launch":"","goalSha":"","paths":"src/cli/pod-cli.ts","model":"","host":"","evidence":"seat-state/OPT/SCOPE-ESCAPE-1021.md","rule":"저작 검사: 수용선의 eln <명령> 이 대상 경로의 어느 파일에도 등록되지 않으면 경고","ms":"","outcome":"pending"}
|
|
47
|
+
{"ts":"2026-10-21T13:26:03+0900","by":"OP","source":"run-doctor","cell":"AUTHORING-LESSONS-LOOP","class":"f-unaware-of-code","diag":"골 본문이 생산 CLI 등록·원장 신설을 요구했는데 대상 경로에 등록 파일이 없어 자식이 범위 밖 편집 → scope-escape 2회 PR 0","action":"등록 파일만 대상 경로에 추가 ⊕ 경계: 줄로 무관 모듈 금지(13:35 재저작)","lesson":"수용선에 생산 CLI·원장을 쓰면 그 등록 지점(index.ts·*-cli.ts·원장 파일)을 대상 경로 1행에 같이 적는다","run":"run-0f090004","card":"","launch":"","goalSha":"","paths":"src/cli/lesson-cli.ts · docs/goal-context/05-authoring-lessons.jsonl","model":"","host":"","evidence":"seat-state/OPT/SCOPE-ESCAPE-1021.md","rule":"저작 검사: 수용선의 eln <명령> 이 대상 경로의 어느 파일에도 등록되지 않으면 경고","ms":"","outcome":"pending"}
|
|
@@ -76,8 +76,11 @@ RESULT: 51 pass, 0 fail, 390 expect() calls; Ran 51 tests across 2 files.
|
|
|
76
76
|
| [`01-goal-authoring-checks.md`](01-goal-authoring-checks.md) | 골을 쓰기 «전»에 답하는 여섯 | [`CONCEPT-self-implement-closed-loop-map`](../CONCEPT-self-implement-closed-loop-map-2026-08-08.md) §8 |
|
|
77
77
|
| [`03-verification-menu.md`](03-verification-menu.md) | 수용선의 주장에 맞춰 검증 방법을 고르는 안내 메뉴 | 해당 방법의 정본 매뉴얼 링크는 메뉴 안에 둔다 |
|
|
78
78
|
| [`04-mock-scenarios.md`](04-mock-scenarios.md) | 표준 검증 무대 템플릿과 MS-01~05 재사용 예시 | initial source: `~/elanous-hq/seat-state/OP/MOCK-SCENARIO-CATALOG.md` |
|
|
79
|
+
| [`05-authoring-lessons.jsonl`](05-authoring-lessons.jsonl) | 부검·런 닥터·초록·OP의 분류별 저작 교훈 원장 스냅샷(사례별 적용 판단; 자동 저작 배선은 별도 작업) | `~/elanous-hq/seat-state/OP/lessons/authoring-lessons.jsonl` |
|
|
79
80
|
| [`refactoring.md`](../refactoring.md) | 리팩터링·seam·큰 파일 쪼개기 골은 냄새 → seam → 패턴 순서를 따르고, 이론상 깔끔함만으로 패턴을 도입하지 않는다 | [`refactoring.md`](../refactoring.md) |
|
|
80
81
|
|
|
82
|
+
`05-authoring-lessons.jsonl`은 원본의 2026-10-21T13:26:03+0900까지를 보존한 스냅샷입니다. 원본과 행별 JSON 객체를 대조하면 `evidence`의 절대경로를 `~`로 이식한 13개 행 외에는 동일합니다. 후속 원본 행은 자동 동기화되지 않습니다. 이 파일에 링크를 붙인 것과 골 저작기가 JSONL을 읽어 사용하는 것은 별개입니다. 후자의 배선과 입력 비용은 AUTHORING-LESSONS-LOOP에서 검증합니다.
|
|
83
|
+
|
|
81
84
|
골의 수용선을 쓸 때는 [`03-verification-menu.md`](03-verification-menu.md)에서 주장에 맞는 검증 방법을 고른다. 이는 안내이며 골 발사를 막는 관문이 아니다.
|
|
82
85
|
|
|
83
86
|
## Cross-ref
|
package/graphs/default-loop.yaml
CHANGED
|
@@ -360,9 +360,14 @@ edges:
|
|
|
360
360
|
blocked: stopped
|
|
361
361
|
fail: stopped
|
|
362
362
|
|
|
363
|
+
# recover@1 의 출구는 «다음 걸음»이다 — 전부 stopped 로 접으면 재진입이 사라져
|
|
364
|
+
# land-refused 한 걸음이 수렴하지 못한다(관측: pod-child-failed · 수렴 못 함).
|
|
365
|
+
# done = 거절 사유가 이미 풀렸다 → 착지 마무리(cleanup)
|
|
366
|
+
# rework = 같은 착지 단계를 «한 번» 다시 밟는다(wait-retry · request-review)
|
|
367
|
+
# needs-human · failed = 사람/판정에게 넘긴다
|
|
363
368
|
- from: recover
|
|
364
369
|
on: outcome
|
|
365
|
-
map: { done:
|
|
370
|
+
map: { done: cleanup, rework: merge, needs-human: stopped, failed: stopped }
|
|
366
371
|
|
|
367
372
|
- { from: freeze-check, on: outcome, map: { open: merge, frozen: hold, taken: stopped, ok: merge, fail: stopped } }
|
|
368
373
|
- { from: hold, to: freeze-check }
|
|
@@ -459,6 +459,20 @@ nodes:
|
|
|
459
459
|
tools: none
|
|
460
460
|
outputs: [decision_card]
|
|
461
461
|
|
|
462
|
+
# LAND-REFUSAL-EDGES 첫 조각 — 착지 거부 한 건을 recover@1(#29093 read-only 유닛)에 «근거째» 결속한다.
|
|
463
|
+
# pr land 가 거부 줄 원문·cardId·PR·head·planner 답을 merge→recover 간선 한 행에 남긴다(src/cli/pr-land-recovery.ts).
|
|
464
|
+
# ⛔ 실행은 아직 없다(execution=none) — 다음 동작은 기존 TA·열차 입장이 쥔다(LAND-REFUSAL-EXEC 후속).
|
|
465
|
+
- node_id: recover
|
|
466
|
+
group: recover
|
|
467
|
+
journey_stage: recover
|
|
468
|
+
kind: subgraph
|
|
469
|
+
recipe: none
|
|
470
|
+
max_visits: 1
|
|
471
|
+
call: recover@1
|
|
472
|
+
budget: { inner_steps: 4 }
|
|
473
|
+
terminal_stages: []
|
|
474
|
+
contract: { inputs: [ask, context, prior], tools: read-only, outputs: [result, evidence] }
|
|
475
|
+
|
|
462
476
|
# LAND-REFUSAL-EDGES: destinations only; recovery execution is a later slice.
|
|
463
477
|
- node_id: ready
|
|
464
478
|
group: land
|
|
@@ -665,5 +679,15 @@ edges:
|
|
|
665
679
|
public-export-leak: next-move
|
|
666
680
|
other: next-move
|
|
667
681
|
|
|
682
|
+
# 거부 근거의 결속 간선 — 위 refusal map(목적지)과 «함께» 남는다. 목적지 계약은 그대로다.
|
|
683
|
+
- from: merge
|
|
684
|
+
on: recovery
|
|
685
|
+
map:
|
|
686
|
+
land-refused: recover
|
|
687
|
+
|
|
688
|
+
- from: recover
|
|
689
|
+
on: outcome
|
|
690
|
+
map: { done: next-move, rework: next-move, needs-human: decision-card, failed: decision-card }
|
|
691
|
+
|
|
668
692
|
- from: merge
|
|
669
693
|
to: cleanup
|
|
@@ -11,6 +11,9 @@ gate:
|
|
|
11
11
|
command: 'bun scripts/release-loop/gate-node.ts --json'
|
|
12
12
|
# 4h — the Pod gate took 2h02m on 09-30 (G1f ②) and the 0.2.5 loop was cut at exactly 2h with no verdict; K9 (≤15 min) is the real fix.
|
|
13
13
|
timeout_ms: 14400000
|
|
14
|
+
traffic-gate-passed:
|
|
15
|
+
command: 'bun scripts/release-loop/traffic-node.ts traffic-gate-passed'
|
|
16
|
+
timeout_ms: 30000
|
|
14
17
|
gate-triage:
|
|
15
18
|
command: 'bun scripts/release-loop/gate-triage-node.ts'
|
|
16
19
|
timeout_ms: 60000
|
|
@@ -59,6 +62,9 @@ docs-land:
|
|
|
59
62
|
verify:
|
|
60
63
|
command: 'bun scripts/release-loop/verify-node.ts'
|
|
61
64
|
timeout_ms: 1800000
|
|
65
|
+
traffic-verify-complete:
|
|
66
|
+
command: 'bun scripts/release-loop/traffic-node.ts traffic-verify-complete'
|
|
67
|
+
timeout_ms: 30000
|
|
62
68
|
vault-note:
|
|
63
69
|
command: 'bun scripts/release-loop/vault-note-node.ts'
|
|
64
70
|
timeout_ms: 60000
|
|
@@ -19,6 +19,8 @@ nodes:
|
|
|
19
19
|
- { node_id: export-check, kind: gate, recipe: 'cmd:export-check', max_visits: 1 }
|
|
20
20
|
- { node_id: prefetch, kind: agent, recipe: 'cmd:docs', max_visits: 1 }
|
|
21
21
|
- { node_id: gate, kind: gate, recipe: 'cmd:gate', max_visits: 1, notify: { on: [fail] } }
|
|
22
|
+
# Deterministic, best-effort traffic transition; it never changes the release verdict.
|
|
23
|
+
- { node_id: traffic-gate-passed, kind: gate, recipe: 'cmd:traffic-gate-passed', max_visits: 1 }
|
|
22
24
|
# S1 shadow: classify and record only; all exits still terminate through the existing failed node.
|
|
23
25
|
- { node_id: gate-triage, kind: judge, recipe: 'cmd:gate-triage', max_visits: 1 }
|
|
24
26
|
- { node_id: mac-smoke, kind: gate, recipe: 'cmd:mac-smoke', max_visits: 1 }
|
|
@@ -29,12 +31,17 @@ nodes:
|
|
|
29
31
|
- { node_id: docs, kind: agent, recipe: 'cmd:docs', max_visits: 1 }
|
|
30
32
|
- { node_id: known-issues, kind: agent, recipe: 'cmd:known-issues', max_visits: 1 }
|
|
31
33
|
- { node_id: notes-check, kind: gate, recipe: 'cmd:notes-check', max_visits: 1 }
|
|
34
|
+
# RELEASE-GRAPH-SELFHEAL: a failed notes check re-enters through the docs repair node before one recheck.
|
|
35
|
+
# Repair is observation-only: it introduces no approval, budget, or loop-cap policy of its own.
|
|
36
|
+
- { node_id: notes-repair, kind: agent, recipe: 'cmd:docs', max_visits: 1 }
|
|
37
|
+
- { node_id: notes-recheck, kind: gate, recipe: 'cmd:notes-check', max_visits: 1 }
|
|
32
38
|
- { node_id: auto-approve, kind: gate, recipe: 'cmd:auto-approve', max_visits: 1 }
|
|
33
39
|
- { node_id: approve-publish, kind: hitl, recipe: 'approval:publish', max_visits: 1 }
|
|
34
40
|
- { node_id: publish, kind: git, recipe: 'cmd:publish-command', max_visits: 1, notify: { on: [ok, fail] } }
|
|
35
41
|
- { node_id: npm-publish, kind: git, recipe: 'cmd:npm-publish', max_visits: 1 }
|
|
36
42
|
- { node_id: docs-land, kind: git, recipe: 'cmd:docs-land', max_visits: 1 }
|
|
37
43
|
- { node_id: verify, kind: gate, recipe: 'cmd:verify', max_visits: 1, notify: { on: [ok, fail] } }
|
|
44
|
+
- { node_id: traffic-verify-complete, kind: gate, recipe: 'cmd:traffic-verify-complete', max_visits: 1 }
|
|
38
45
|
- { node_id: vault-note, kind: gate, recipe: 'cmd:vault-note', max_visits: 1 }
|
|
39
46
|
- { node_id: release-story, kind: gate, recipe: 'cmd:release-story', max_visits: 1 }
|
|
40
47
|
- { node_id: ops-upgrade, kind: agent, recipe: 'cmd:ops-upgrade', max_visits: 1 }
|
|
@@ -49,7 +56,9 @@ edges:
|
|
|
49
56
|
- { from: export-check, on: outcome, map: { ok: prefetch, fail: failed, error: failed } }
|
|
50
57
|
# Prefetch never gates: even a crashed prefetch node is a cache miss — the late nodes take their original paths.
|
|
51
58
|
- { from: prefetch, on: outcome, map: { ok: gate, fail: gate, error: gate } }
|
|
52
|
-
- { from: gate, on: outcome, map: { ok:
|
|
59
|
+
- { from: gate, on: outcome, map: { ok: traffic-gate-passed, fail: gate-triage, error: gate-triage } }
|
|
60
|
+
# Warning-only: the transition result stays truthful; every outcome continues to the next release node.
|
|
61
|
+
- { from: traffic-gate-passed, on: outcome, map: { ok: mac-smoke, fail: mac-smoke, error: mac-smoke } }
|
|
53
62
|
- { from: gate-triage, on: outcome, map: { ok: failed, fail: failed, error: failed } }
|
|
54
63
|
# Warning-only: a macOS failure or unmeasured run never blocks publishing — auto-approve shows it as a warning row.
|
|
55
64
|
- { from: mac-smoke, on: outcome, map: { ok: pwa, fail: pwa, error: pwa } }
|
|
@@ -59,15 +68,19 @@ edges:
|
|
|
59
68
|
- { from: tui, on: outcome, map: { ok: docs, fail: failed, error: failed } }
|
|
60
69
|
- { from: docs, on: outcome, map: { ok: known-issues, fail: failed, error: failed } }
|
|
61
70
|
- { from: known-issues, on: outcome, map: { ok: notes-check, fail: failed, error: failed } }
|
|
62
|
-
-
|
|
71
|
+
# RELEASE-GRAPH-SELFHEAL: fail/error re-enter notes-check through one repair; publish still requires a passing recheck.
|
|
72
|
+
- { from: notes-check, on: outcome, map: { ok: auto-approve, fail: notes-repair, error: notes-repair } }
|
|
73
|
+
- { from: notes-repair, on: outcome, map: { ok: notes-recheck, fail: failed, error: failed } }
|
|
74
|
+
- { from: notes-recheck, on: outcome, map: { ok: auto-approve, fail: failed, error: failed } }
|
|
63
75
|
- { from: auto-approve, on: outcome, map: { ok: publish, fail: approve-publish, error: approve-publish } }
|
|
64
76
|
- { from: approve-publish, on: outcome, map: { ok: publish, fail: failed } }
|
|
65
77
|
- { from: publish, on: outcome, map: { ok: npm-publish, fail: failed, error: failed } }
|
|
66
|
-
- { from: npm-publish, on: outcome, map: { ok: docs-land, fail:
|
|
78
|
+
- { from: npm-publish, on: outcome, map: { ok: docs-land, fail: failed, error: failed } }
|
|
67
79
|
# RELEASE-DEVBUMP-ALWAYS: after a successful publish every fail/error routes through version-dev-bump —
|
|
68
80
|
# a published release always hands main to its own next -dev, then still finishes failed.
|
|
69
81
|
- { from: docs-land, on: outcome, map: { ok: verify, fail: version-dev-bump-after-failure, error: version-dev-bump-after-failure } }
|
|
70
|
-
- { from: verify, on: outcome, map: { ok:
|
|
82
|
+
- { from: verify, on: outcome, map: { ok: traffic-verify-complete, fail: version-dev-bump-after-failure, error: version-dev-bump-after-failure } }
|
|
83
|
+
- { from: traffic-verify-complete, on: outcome, map: { ok: vault-note, fail: vault-note, error: vault-note } }
|
|
71
84
|
# Warning-only: vault note and release story failures after publication never block operational upgrades.
|
|
72
85
|
- { from: vault-note, on: outcome, map: { ok: release-story, fail: release-story, error: release-story } }
|
|
73
86
|
- { from: release-story, on: outcome, map: { ok: ops-upgrade, fail: ops-upgrade, error: ops-upgrade } }
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# graphs/wizard/recipes.yaml — wizard-loop 그래프의 노드별 명령 카탈로그
|
|
2
|
+
#
|
|
3
|
+
# 로더(src/self-implement/graph-yaml.ts)는 recipes.yaml 을 «템플릿»이 아니라
|
|
4
|
+
# 명령 카탈로그로 본다 — 그래프 러너(src/graph-runner/runner.ts)가 노드 id 로 찾아 실행한다.
|
|
5
|
+
# 형식은 src/graph-wizard/steps.ts 의 recipesYamlFor 가 내는 것과 같다:
|
|
6
|
+
# cmd:<id> → command: "<bin> graph step <step> --arg '<arg>'" · timeout_ms
|
|
7
|
+
# approval:<id> → approval: "<사람에게 물을 한 줄>"
|
|
8
|
+
# 커맨드 문자열은 따옴표로 감싼다 — 산문 안의 ':' 가 중첩 매핑으로 읽히지 않게.
|
|
9
|
+
|
|
10
|
+
intake:
|
|
11
|
+
command: "eln graph step llm --arg '지시를 한 줄로: 무엇을 만들려는가 — 막연해도 된다'"
|
|
12
|
+
timeout_ms: 240000
|
|
13
|
+
classify:
|
|
14
|
+
command: "eln graph step llm --arg '분류: 종류(harness|workflow) · 결과물 · 필요한 도구 · 위험도를 적어라'"
|
|
15
|
+
timeout_ms: 240000
|
|
16
|
+
ground:
|
|
17
|
+
command: "eln graph step check --arg '저장소 근거: 이미 있는 부품·경로·시험을 실제로 읽어 적어라. 없으면 없다고 적어라'"
|
|
18
|
+
timeout_ms: 240000
|
|
19
|
+
gap:
|
|
20
|
+
command: "eln graph step llm --arg '차이: refs 와 observed 를 견주어 지금 없는 것을 gap 으로 뽑아라. 비었으면 비었다고 적어라'"
|
|
21
|
+
timeout_ms: 240000
|
|
22
|
+
approve:
|
|
23
|
+
approval: "분류·근거·gap 을 읽었나요? 이 계획으로 진행할까요 — 승인 또는 거부"
|
|
24
|
+
acquire:
|
|
25
|
+
command: "eln graph step knowledge-rag --arg 'gap 을 메울 자료: 저장소·문서·설치된 팩에서 인용을 모아라'"
|
|
26
|
+
timeout_ms: 240000
|
|
27
|
+
generate:
|
|
28
|
+
command: "eln graph step llm --arg 'gap 을 메우는 그래프 YAML 초안을 써라 — 노드·간선·종료 노드는 스키마 그대로'"
|
|
29
|
+
timeout_ms: 240000
|
|
30
|
+
compose:
|
|
31
|
+
command: "eln graph step llm --arg '초안을 하나의 그래프로 합쳐라 — 노드 id 와 recipes 키를 맞추고 간선을 잇는다'"
|
|
32
|
+
timeout_ms: 240000
|
|
33
|
+
verify:
|
|
34
|
+
command: "eln graph step check --arg '검증: 로더 불변식(노드 종류·간선 참조·to/map 배타·종료 done|failed)과 드라이런을 확인하라'"
|
|
35
|
+
timeout_ms: 240000
|
|
36
|
+
store:
|
|
37
|
+
command: "eln graph step llm --arg '확정된 그래프를 저장 경로 graphs/<id>.yaml 에 적고 recipes 도 같은 디렉터리에 남겨라'"
|
|
38
|
+
timeout_ms: 240000
|
|
39
|
+
run:
|
|
40
|
+
command: "eln graph step notify-me --arg '저장된 그래프를 실행하고 결과 상태와 지난 경로를 알려라'"
|
|
41
|
+
timeout_ms: 240000
|
|
42
|
+
improve:
|
|
43
|
+
command: "eln graph step summarize --arg '개선: 이번 루프에서 무엇이 아쉬웠고 다음에 무엇을 바꿀지 한 줄씩'"
|
|
44
|
+
timeout_ms: 240000
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
graph_id: wizard-loop
|
|
2
|
+
version: 1
|
|
3
|
+
entry_node: intake
|
|
4
|
+
terminal_nodes: [done, failed]
|
|
5
|
+
metadata:
|
|
6
|
+
title: 마법사 루프 — 지시 하나를 근거 있는 산출물로 닫는다
|
|
7
|
+
description: >-
|
|
8
|
+
intake→classify→ground→gap→approve→acquire/generate→compose→verify→store→run→improve 순서를 도는
|
|
9
|
+
마법사 루프 선언. 불변식 W1~W4 는 docs/RFC-smart-wizard-to-loop-collective-2026-10-08.md §A2 를 따른다.
|
|
10
|
+
recipes.yaml 은 이 그래프의 명령 카탈로그다(로더는 recipes.yaml 을 템플릿으로 읽지 않는다).
|
|
11
|
+
limits:
|
|
12
|
+
max_steps: 200
|
|
13
|
+
max_wall_ms: 5400000
|
|
14
|
+
nodes:
|
|
15
|
+
# W1 승인 포인트: approve 는 kind=hitl · recipe=approval:* 만 쓴다(사람 승인 없이는 진행하지 않는다).
|
|
16
|
+
- { node_id: intake, kind: agent, recipe: 'cmd:intake', max_visits: 1 } # 지시 접수 | llm | 사용자 지시와 첨부 자료를 하나의 인테이크로 정리
|
|
17
|
+
- { node_id: classify, kind: agent, recipe: 'cmd:classify', max_visits: 1 } # 지시 분류 | llm | 지시 유형·필요 산출물·위험도를 분류
|
|
18
|
+
- { node_id: ground, kind: agent, recipe: 'cmd:ground', max_visits: 1 } # 근거 수집 | web-search | 지시가 전제하는 사실을 찾아 근거를 모은다
|
|
19
|
+
- { node_id: gap, kind: judge, recipe: 'cmd:gap', max_visits: 2 } # 공백 판정 | check | 근거가 지시를 받치는지 판정한다 (결과: ok/gap/fail)
|
|
20
|
+
- { node_id: approve, kind: hitl, recipe: 'approval:approve', max_visits: 1 } # 계획 승인 | approval | 사람이 계획과 근거를 보고 진행을 승인
|
|
21
|
+
- { node_id: acquire, kind: agent, recipe: 'cmd:acquire', max_visits: 2 } # 자료 보강 | web-search | gap 이 지목한 공백을 메울 자료를 더 가져온다
|
|
22
|
+
- { node_id: generate, kind: agent, recipe: 'cmd:generate', max_visits: 1 } # 초안 생성 | llm | 승인된 계획으로 초안을 만든다
|
|
23
|
+
- { node_id: compose, kind: agent, recipe: 'cmd:compose', max_visits: 3 } # 구성 조립 | llm | 초안과 근거를 하나의 산출물로 조립 (verify rework 의 back-edge 대상)
|
|
24
|
+
- { node_id: verify, kind: judge, recipe: 'cmd:verify', max_visits: 2 } # 검증 | check | 산출물이 지시·근거에 맞는지 검증 (결과: ok/rework/fail)
|
|
25
|
+
- { node_id: store, kind: agent, recipe: 'cmd:store', max_visits: 1 } # 저장 | knowledge-rag | 검증된 산출물을 지식에 적재
|
|
26
|
+
- { node_id: run, kind: agent, recipe: 'cmd:run', max_visits: 1 } # 실행 | llm | 산출물로 지시를 실제로 수행
|
|
27
|
+
- { node_id: improve, kind: agent, recipe: 'cmd:improve', max_visits: 1 } # 개선 | llm | 실행 결과를 다음 루프의 개선점으로 남긴다
|
|
28
|
+
- { node_id: done, kind: gate, recipe: none, max_visits: 1 } # 완료
|
|
29
|
+
- { node_id: failed, kind: gate, recipe: none, max_visits: 1 } # 실패
|
|
30
|
+
edges:
|
|
31
|
+
- { from: intake, on: outcome, map: { ok: classify, fail: failed } }
|
|
32
|
+
- { from: classify, on: outcome, map: { ok: ground, fail: failed } }
|
|
33
|
+
- { from: ground, on: outcome, map: { ok: gap, fail: failed } }
|
|
34
|
+
# W2 공백 분기: gap 은 outcome 키로 approve(충분) / acquire(보강) 로 갈라진다.
|
|
35
|
+
- { from: gap, on: outcome, map: { ok: approve, gap: acquire, fail: failed } }
|
|
36
|
+
- { from: acquire, on: outcome, map: { ok: approve, fail: failed } }
|
|
37
|
+
- { from: approve, on: outcome, map: { ok: generate, fail: failed } }
|
|
38
|
+
- { from: generate, on: outcome, map: { ok: compose, fail: failed } }
|
|
39
|
+
- { from: compose, on: outcome, map: { ok: verify, fail: failed } }
|
|
40
|
+
# W3 되돌림: verify 실패(rework)는 compose 로 돌아가고 compose.max_visits=3 ≥ 2.
|
|
41
|
+
- { from: verify, on: outcome, map: { ok: store, rework: compose, fail: failed } }
|
|
42
|
+
- { from: store, on: outcome, map: { ok: run, fail: failed } }
|
|
43
|
+
- { from: run, on: outcome, map: { ok: improve, fail: failed } }
|
|
44
|
+
- { from: improve, on: outcome, map: { ok: done, fail: failed } }
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "elanous",
|
|
3
3
|
"mcpName": "io.github.ElanvitalAI/elanous",
|
|
4
|
-
"version": "0.2.
|
|
4
|
+
"version": "0.2.36",
|
|
5
5
|
"description": "Self-healing coding harness where eyes, hands, and memory all turn on one sentence — it authors its own goals, implements them in isolated worktrees, and reviews its own work.",
|
|
6
6
|
"license": "Apache-2.0",
|
|
7
7
|
"author": "Elanvital AI",
|
|
@@ -1316,6 +1316,129 @@ export function typecheckDispatchFlags(flags: GateRemoteFlags, env: NodeJS.Proce
|
|
|
1316
1316
|
? { ...flags, remote: 'node-b' } : flags;
|
|
1317
1317
|
}
|
|
1318
1318
|
|
|
1319
|
+
// ── WSL-GATE-ENV (0.2.36) — base 환경 해석 · 원격 push 실패 «원인» 보고 ─────────────────────────
|
|
1320
|
+
// 🩸 wsl·node-c 가 «같은 head·base» 를 쟀는데 introduced·preexisting 이 갈렸고, 남는 출력은
|
|
1321
|
+
// `push-failed rc=128: …` 한 줄이었다. 그 한 줄로는 «미러 쓰기 권한» 인지 «base 가 달랐다» 인지
|
|
1322
|
+
// 읽을 수 없었고, base env 가 원격에 무엇으로 전달됐는지도 어디에도 찍히지 않았다.
|
|
1323
|
+
// ⇒ (1) 원격 디스패치마다 base env 를 `ref@sha` 로 «풀어서» 한 줄 찍는다 — 두 호스트가 같은 줄을
|
|
1324
|
+
// 찍는 것이 교차 측정의 전제다. (2) push 실패는 rc·문면으로 «권한/자격증명» 과 «그 밖»을 가르고
|
|
1325
|
+
// 처방을 같이 찍는다. (3) base ref 를 이 트리에서 풀 수 없으면 원격을 «띄우지 않고» 멈춘다 —
|
|
1326
|
+
// 다른 base 로 잰 판정을 두 호스트가 «같다»고 믿게 만든 것이 이 칸의 사고였다.
|
|
1327
|
+
// ⛔ 로컬 경로(--local · Pod · CI)의 출력·원장 형식은 건드리지 않는다 — 아래 줄은 원격 디스패치 안에서만 나온다.
|
|
1328
|
+
const BASE_ENV_KEYS = ['NODE_OPTIONS', 'TSC_BASE_REF', 'TSC_HEAP_MB'] as const;
|
|
1329
|
+
|
|
1330
|
+
export interface RemoteBaseEnv {
|
|
1331
|
+
/** 원격으로 push 해 sha 로 받아야 하는 ref. TSC_BASE_REF 가 없으면 비어 있다(merge-base 는 HEAD 의 조상이라 HEAD 와 함께 간다). */
|
|
1332
|
+
refs: string[];
|
|
1333
|
+
/** 무엇을 base 로 골랐나 — TSC_BASE_REF 의 ref 이름, 없으면 `merge-base(origin/main)`. */
|
|
1334
|
+
baseLabel: string;
|
|
1335
|
+
/** base 를 이 트리에서 푼 sha — 두 호스트가 같은 값을 찍어야 교차 측정이 성립한다. */
|
|
1336
|
+
baseSha?: string;
|
|
1337
|
+
/** 원격 명령에 전달하는 env 키들. */
|
|
1338
|
+
keys: string[];
|
|
1339
|
+
/** 원격 명령 앞에 붙일 `KEY=VALUE`. TSC_BASE_REF 는 «항상» 이 트리에서 고정한 sha 로 넘긴다
|
|
1340
|
+
* (ref 는 dispatch 가 push 한 sha · 없으면 merge-base sha) — 원격이 제 origin/main 으로 다시 풀지 않는다. */
|
|
1341
|
+
forward: (sha: (ref: string) => string) => string[];
|
|
1342
|
+
/** 이 트리에서 base 를 sha 로 고정할 수 없을 때의 사유 — 있으면 원격 디스패치를 멈춘다. */
|
|
1343
|
+
failure?: string;
|
|
1344
|
+
}
|
|
1345
|
+
|
|
1346
|
+
const firstErrorLine = (thrown: unknown): string => (thrown instanceof Error ? thrown.message : String(thrown)).split('\n')[0].trim();
|
|
1347
|
+
|
|
1348
|
+
export function remoteBaseEnv(
|
|
1349
|
+
env: NodeJS.ProcessEnv,
|
|
1350
|
+
resolve: (ref: string) => string = (ref) => execFileSync('git', ['rev-parse', '--verify', '--quiet', ref], { encoding: 'utf8' }).trim(),
|
|
1351
|
+
mergeBase: () => string = () => execFileSync('git', ['merge-base', 'HEAD', 'origin/main'], { encoding: 'utf8' }).trim(),
|
|
1352
|
+
): RemoteBaseEnv {
|
|
1353
|
+
const baseRef = env.TSC_BASE_REF;
|
|
1354
|
+
let baseSha: string | undefined;
|
|
1355
|
+
let failure: string | undefined;
|
|
1356
|
+
if (baseRef) {
|
|
1357
|
+
try { baseSha = resolve(baseRef) || undefined; } catch (thrown) {
|
|
1358
|
+
failure = `TSC_BASE_REF=${baseRef} 를 이 트리에서 sha 로 풀 수 없다 (${firstErrorLine(thrown) || 'git rev-parse 실패'})`;
|
|
1359
|
+
}
|
|
1360
|
+
if (!baseSha && !failure) failure = `TSC_BASE_REF=${baseRef} 를 이 트리에서 sha 로 풀 수 없다 (git rev-parse 빈 출력)`;
|
|
1361
|
+
} else {
|
|
1362
|
+
// TSC_BASE_REF 가 없으면 원격 쪽 기본(merge-base(origin/main))을 «여기서» 미리 풀어 sha 로 못 박는다 —
|
|
1363
|
+
// 원격 미러의 origin/main 은 이 트리와 다를 수 있다(같은 head 인데 base 가 갈린 이 칸의 사고 · 리뷰 r1 must-fix).
|
|
1364
|
+
try { baseSha = mergeBase() || undefined; } catch (thrown) {
|
|
1365
|
+
failure = `merge-base(HEAD, origin/main) 을 이 트리에서 풀 수 없다 (${firstErrorLine(thrown) || 'git merge-base 실패'})`;
|
|
1366
|
+
}
|
|
1367
|
+
if (!baseSha && !failure) failure = 'merge-base(HEAD, origin/main) 을 이 트리에서 풀 수 없다 (git merge-base 빈 출력)';
|
|
1368
|
+
}
|
|
1369
|
+
const passKeys = BASE_ENV_KEYS.filter((key) => key !== 'TSC_BASE_REF' && env[key]);
|
|
1370
|
+
return {
|
|
1371
|
+
refs: baseRef ? [baseRef] : [],
|
|
1372
|
+
baseLabel: baseRef || 'merge-base(origin/main)',
|
|
1373
|
+
baseSha,
|
|
1374
|
+
keys: ['TSC_BASE_REF', ...passKeys],
|
|
1375
|
+
forward: (sha) => [`TSC_BASE_REF=${baseRef ? sha(baseRef) : baseSha}`, ...passKeys.map((key) => `${key}=${env[key]}`)],
|
|
1376
|
+
failure,
|
|
1377
|
+
};
|
|
1378
|
+
}
|
|
1379
|
+
|
|
1380
|
+
/** 두 호스트가 같은 head·base 를 쟀는지 «눈으로» 비교할 수 있는 한 줄. 호스트 이름만 다르다. */
|
|
1381
|
+
export function describeRemoteBaseEnv(env: RemoteBaseEnv, host: string): string {
|
|
1382
|
+
const base = `${env.baseLabel}@${env.baseSha ?? '미해석'}`;
|
|
1383
|
+
return `[tsc-gate] base env [${host}] — base=${base} · refs=${env.refs.length} · forward=${env.keys.join(',') || '없음'}`;
|
|
1384
|
+
}
|
|
1385
|
+
|
|
1386
|
+
export type RemoteInfraCause = 'base-env' | 'push-permission' | 'push-failed' | 'other';
|
|
1387
|
+
|
|
1388
|
+
export interface RemoteDiagnosis { cause: RemoteInfraCause; message: string; hints: string[] }
|
|
1389
|
+
|
|
1390
|
+
/** push 거부 문면에서 «미러 쓰기 권한·자격증명» 을 가리키는 신호. */
|
|
1391
|
+
export const PUSH_PERMISSION_SIGNAL = /permission denied|publickey|could not read (?:Username|Password)|authentication failed|host key verification failed|access denied|terminal prompts disabled/i;
|
|
1392
|
+
|
|
1393
|
+
export const BASE_ENV_HINTS = [
|
|
1394
|
+
'base 는 두 호스트가 «같은 커밋» 이어야 한다 — 위 base= 줄에서 @뒤 sha 가 같은지 먼저 본다.',
|
|
1395
|
+
'TSC_BASE_REF 는 양쪽 트리에 존재하는 ref(또는 sha)로 준다 — 한쪽에만 있는 브랜치면 introduced 가 갈린다.',
|
|
1396
|
+
];
|
|
1397
|
+
|
|
1398
|
+
export function baseEnvDiagnosis(env: RemoteBaseEnv, host: string): RemoteDiagnosis | undefined {
|
|
1399
|
+
if (!env.failure) return undefined;
|
|
1400
|
+
return { cause: 'base-env', message: `${env.failure} — ${host} 를 띄우지 않는다`, hints: BASE_ENV_HINTS };
|
|
1401
|
+
}
|
|
1402
|
+
|
|
1403
|
+
export function formatRemoteDiagnosis(diagnosis: RemoteDiagnosis): string[] {
|
|
1404
|
+
return [
|
|
1405
|
+
`[tsc-gate] ⛔ 원격 판정 실패 원인 [${diagnosis.cause}] — ${diagnosis.message}`,
|
|
1406
|
+
...diagnosis.hints.map((hint) => `[tsc-gate] ${hint}`),
|
|
1407
|
+
];
|
|
1408
|
+
}
|
|
1409
|
+
|
|
1410
|
+
export function diagnoseRemoteOutcome(
|
|
1411
|
+
outcome: { kind: 'ran' | 'busy' | 'infra'; reason?: string },
|
|
1412
|
+
host: string,
|
|
1413
|
+
env: RemoteBaseEnv,
|
|
1414
|
+
): RemoteDiagnosis | undefined {
|
|
1415
|
+
const base = baseEnvDiagnosis(env, host);
|
|
1416
|
+
if (base) return base;
|
|
1417
|
+
if (outcome.kind !== 'infra') return undefined;
|
|
1418
|
+
const reason = outcome.reason ?? '';
|
|
1419
|
+
const push = /^push-failed rc=(\d+)/.exec(reason);
|
|
1420
|
+
if (!push) return {
|
|
1421
|
+
cause: 'other',
|
|
1422
|
+
message: `원격 판정 인프라 실패 — ${reason}`,
|
|
1423
|
+
hints: [`같은 head·base 인데 이 호스트에서만 실패하면 위 base env 줄을 호스트끼리 비교한다.`],
|
|
1424
|
+
};
|
|
1425
|
+
const rc = Number(push[1]);
|
|
1426
|
+
if (rc === 128 && PUSH_PERMISSION_SIGNAL.test(reason)) return {
|
|
1427
|
+
cause: 'push-permission',
|
|
1428
|
+
message: `원격 push 거부 rc=128 — ${host} 미러에 쓰기 권한/자격증명이 없다`,
|
|
1429
|
+
hints: [
|
|
1430
|
+
`호스트 접근부터 확인: ssh -o BatchMode=yes ${host} true (rc=0 이어야 한다 — 아니면 키·호스트 항목 문제다)`,
|
|
1431
|
+
`미러 쓰기 확인: ssh ${host} -- 'test -w <mirror>.git' — 권한이 없으면 ELANOUS_GATE_REMOTE_MIRROR 로 쓰기 가능한 미러를 준다`,
|
|
1432
|
+
'push 는 자격증명이 없으면 «터미널 프롬프트 없이» 죽는다 — 대화형 ssh 로 한 번 손으로 push 해 rc 를 본다.',
|
|
1433
|
+
],
|
|
1434
|
+
};
|
|
1435
|
+
return {
|
|
1436
|
+
cause: 'push-failed',
|
|
1437
|
+
message: `원격 push 실패 rc=${rc} — ${host}`,
|
|
1438
|
+
hints: [`push 출력: ${reason}`, '미러 경로·디스크 여유를 확인하고, 반복되면 같은 트리에서 손으로 push 해 원문을 남긴다.'],
|
|
1439
|
+
};
|
|
1440
|
+
}
|
|
1441
|
+
|
|
1319
1442
|
if (import.meta.main) void (async () => {
|
|
1320
1443
|
// GATE-REMOTE (10-06): the only accepted arguments are the dispatch flags `--remote [host]` / `--local` — they choose
|
|
1321
1444
|
// «where» the same commit is measured, never «what» (the base stays merge-base(origin/main) on both sides).
|
|
@@ -1333,15 +1456,26 @@ if (import.meta.main) void (async () => {
|
|
|
1333
1456
|
const repo = sh('git rev-parse --show-toplevel').trim();
|
|
1334
1457
|
const onMbp = forbidFullTypecheckOnLocal(process.env, hostname(), repo);
|
|
1335
1458
|
const dispatchFlags = typecheckDispatchFlags(flags, process.env, hostname(), repo);
|
|
1336
|
-
const
|
|
1337
|
-
|
|
1338
|
-
|
|
1459
|
+
const baseEnv = remoteBaseEnv(process.env);
|
|
1460
|
+
// 원격만 재는 자리에서 base ref 를 «이 트리에서» 못 풀면, 두 호스트가 «다른 base» 로 잰 판정을
|
|
1461
|
+
// «같은 답»처럼 찍게 된다 — 그래서 띄우지 않고 멈춘다(원인과 처방을 남긴다). --local 은 그대로 간다.
|
|
1462
|
+
if (baseEnv.failure && dispatchFlags.remote !== undefined && !flags.local) {
|
|
1463
|
+
for (const line of formatRemoteDiagnosis(baseEnvDiagnosis(baseEnv, dispatchFlags.remote === true ? '기본 원격' : dispatchFlags.remote)!)) console.error(line);
|
|
1464
|
+
console.error('[tsc-gate] ⇒ 원격을 띄우지 않는다. base 를 양쪽 호스트가 «같이» 푸는 ref/sha 로 고친 뒤 다시 돌려라.');
|
|
1465
|
+
process.exit(2);
|
|
1466
|
+
}
|
|
1339
1467
|
// exitCode, not exit(): piped stdout/stderr drain before the process ends.
|
|
1340
1468
|
process.exitCode = await dispatchHeavyCheck({
|
|
1341
1469
|
tool: 'ci-typecheck-changed', repo, flags: dispatchFlags, explicitRemoteOnly: dispatchFlags.remote !== undefined,
|
|
1342
1470
|
stableCheckout: true, installPwa: true,
|
|
1343
|
-
remoteArgv: (sha) => { const vars =
|
|
1344
|
-
refs:
|
|
1471
|
+
remoteArgv: (sha) => { const vars = baseEnv.forward(sha); return [...(vars.length ? ['env', ...vars] : []), 'bun', 'run', 'scripts/ci-typecheck-changed.ts', '--local']; },
|
|
1472
|
+
refs: baseEnv.refs,
|
|
1473
|
+
// 원격 판정이 «무엇으로» 났는지 호스트마다 같은 문면으로 남긴다 — 교차 측정의 대조 줄.
|
|
1474
|
+
onRemoteOutcome: (outcome, host) => {
|
|
1475
|
+
console.error(describeRemoteBaseEnv(baseEnv, host));
|
|
1476
|
+
const diagnosis = diagnoseRemoteOutcome(outcome, host, baseEnv);
|
|
1477
|
+
if (diagnosis) for (const line of formatRemoteDiagnosis(diagnosis)) console.error(line);
|
|
1478
|
+
},
|
|
1345
1479
|
runLocal: () => { runGate({ forbidFullLocal: onMbp }); return 0; },
|
|
1346
1480
|
});
|
|
1347
1481
|
})();
|
|
@@ -25,7 +25,7 @@ const KNOWHOW_PATH = 'docs/roles/OP/KNOWHOW.md';
|
|
|
25
25
|
* 카드 제목 문법은 src/seat-loop/knowhow-lint.ts 의 CARD_HEADING 과 같아야 한다.
|
|
26
26
|
* 다르면 린트가 카드로 못 본 제목이 자를 때 조용히 사라지거나, 번호만 잘려 엉뚱한 아이디로 제외 기록에 남는다.
|
|
27
27
|
*/
|
|
28
|
-
const CARD_HEADING = /^[ \t]{0,3}##\s+(K-[A-Za-z]
|
|
28
|
+
const CARD_HEADING = /^[ \t]{0,3}##\s+(K-[A-Za-z]+(?:-[A-Za-z]{1,4})?-\d+)(?=$|\s|:|—)(.*)$/u;
|
|
29
29
|
const CARD_HEADING_LIKE = /^[ \t]{0,3}##\s*(K-[^\s:]*)/iu;
|
|
30
30
|
const SECTION_HEADING = /^[ \t]{0,3}##\s/u;
|
|
31
31
|
|