elanous 0.2.42 → 0.2.44
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/apps/pwa/out/404/index.html +1 -1
- package/apps/pwa/out/404.html +1 -1
- package/apps/pwa/out/_next/static/{X1ucLw10Cds_h614NoEnh → HMXsxdy5MIIcHPMHv1wD4}/_buildManifest.js +1 -1
- package/apps/pwa/out/_next/static/chunks/08334415.f0e80896acbef722.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1032-78ba4f6391258cab.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1082-53f86a26e03d309d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1109-7d0e264f6f2edbc7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1124-7c26330402481143.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{2160.a097e7b138ae1c55.js → 118.2a89982fe4276880.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/1244.6c435dbf1bf21d8a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1252.9e665904d3aa3b1a.js +32 -0
- package/apps/pwa/out/_next/static/chunks/1266.a46cc33cb6a72d75.js +104 -0
- package/apps/pwa/out/_next/static/chunks/1306.967240ede9a0f757.js +24 -0
- package/apps/pwa/out/_next/static/chunks/1344.3b95f3bd1b77a3fe.js +94 -0
- package/apps/pwa/out/_next/static/chunks/{4043.6b91203436c9c86b.js → 1401.22dfe92640a2b1ac.js} +4 -4
- package/apps/pwa/out/_next/static/chunks/1431-f7c78bd5be21e011.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1451-cdd35a8a0b31834b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{6632.0eac1c554f8f2ef3.js → 1694.18debfd77562e56d.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/1708-f03d587b7a7545c8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1775-fa7152bdeff6c95f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/178-4da509cd7266672a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1850-522de4ee34957210.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1876-c6f6e0ddcc76c6a1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/1976.097066b072432242.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3507.97e1977bc4d5fb0a.js → 1978.eeb60a606dc5deac.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/2043.e233e3b5a3e790f5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2150.71b94e3348107c83.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2158.ebc6fc5a10280ab7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2216.802962c04f40a26e.js +64 -0
- package/apps/pwa/out/_next/static/chunks/2294.7890edcfa046c97d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/235.c89aaae4bcd6233a.js +74 -0
- package/apps/pwa/out/_next/static/chunks/{5885.0a3e52c8faccec98.js → 239.de075467b5523469.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/249.ba7051590d603c8f.js +226 -0
- package/apps/pwa/out/_next/static/chunks/2571.a6ac4e26c8618403.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2610.e149cd564a08913e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2705.9816f3c244f8b85f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2801.afeb8a4dae22f85f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2954.bbefc95d6b20e0d8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2e0f720a.a0697c08e3806a60.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3042.96ec235fe41c8d4e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3097-8e358f158acef46b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3205-93b1abe28b4fb16a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3273.b4434f0dcae7eb29.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3311.9cbc43ea0c90d60c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{1487.2f67b79444062da6.js → 3349.b5f09ee474d9533e.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/3503.a47a9755fb4d97b0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3506-5f429b3b7e1392b0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3843.bad404d008893291.js +77 -0
- package/apps/pwa/out/_next/static/chunks/3877-4b40e530b47e3bf9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/435-ce2958253cf7de61.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4393.28fa5228d0eec217.js +149 -0
- package/apps/pwa/out/_next/static/chunks/4404.7281c847c6e10dfc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8673-bab689a55f7e13b9.js → 4415-b9d6a90960920a4a.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/447-5b304de1fe098f43.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4484-8ebea83d431e6fae.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8262.ddc03e06b733f184.js → 4502.bdcc877abd437a05.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/4599-f95790fc5c65b8df.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{1262.e804feb8fd1acb8c.js → 46.57c783fa4884714f.js} +2 -2
- package/apps/pwa/out/_next/static/chunks/463-b9114e411f33728e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4659.a57d1f0c5d754cd2.js +36 -0
- package/apps/pwa/out/_next/static/chunks/4722-a847e7a28115035f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{1063.2fb8a9dc55c731f2.js → 4757.67c6d7473a038e78.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/4874-c86f878ec4502ad3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{6377.bc7df239edbff244.js → 4891.3f80ba517a3b2373.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/4998.810ca8833084caa9.js +62 -0
- package/apps/pwa/out/_next/static/chunks/4f98febc.ea5841d4d616bfb2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3482.a9ae9d2ad6a5bd97.js → 5052.7dbb12a55d4f18f5.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/5166-ca73b3e361085a6d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5180-039f4a18b07ad387.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5232.5a2ce4daf7a9e11d.js +115 -0
- package/apps/pwa/out/_next/static/chunks/5439.3fec6dbce29ecb36.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5612-074d9a5e00dfac6a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5675-01989d524a84c505.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5751.af641a1adf5ec697.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5758-c6cb98714d18ab0c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/578eded8.b582637306e16964.js +122 -0
- package/apps/pwa/out/_next/static/chunks/5790.5eb06a653ebd8571.js +34 -0
- package/apps/pwa/out/_next/static/chunks/5853-4033e5bd5afbe06b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5904.97d70bb7f46b2db7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3347.f846266b5e5f3ede.js → 5989.7ecd362c5c44b747.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/{73d2eb0e.4966ad55293c801a.js → 5a34fb2f.52f1b4e1baebb48a.js} +3 -3
- package/apps/pwa/out/_next/static/chunks/{7a98bc80.fa935989e829f9c2.js → 5a5078f8.2099200e5ea95e16.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/6036-c302c34ff0b3d410.js +1 -0
- package/apps/pwa/out/_next/static/chunks/606.ef81c313381f4264.js +1 -0
- package/apps/pwa/out/_next/static/chunks/616.1af54a928b1ba704.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6201.bc936f71f613a8e9.js +41 -0
- package/apps/pwa/out/_next/static/chunks/6204-fdc86e0e64c4f92d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{7411.9b4b8b747dc7b802.js → 6245.1182e007e9d230d9.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{b450776b.3db34d8d965f82d3.js → 63699a35.17262e162bc514b2.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/6420.494801a80030160c.js +27 -0
- package/apps/pwa/out/_next/static/chunks/{e8543907.5b040a5f22a0b0e5.js → 6549dad0.2740b25e51bf8f05.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/{9427.96aa912ddb5801e0.js → 6881.9e7955847640c7fe.js} +17 -17
- package/apps/pwa/out/_next/static/chunks/6931.fcdfb94141e67b3d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/6991-8e081c6ce38c0ba1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7010.1bbd17a7f2b3e376.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7029.d1466acf55fae2ed.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7152-a123aa8e129c131f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7455.196168fffac3b9c4.js +24 -0
- package/apps/pwa/out/_next/static/chunks/7638.6ca4770dd1129138.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7649-f37d76260e5e2a5a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7679.32c40cdd14f20b4a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7751.04bfbd16b4c6cd0a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7864.b1ff31d4030b8994.js +148 -0
- package/apps/pwa/out/_next/static/chunks/7869-c47bd2c075c1fefa.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{8138.6c10b2a356d52fca.js → 8442.2f09ca969d631615.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/8445.2738dbd59a78c78c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8447.5510c439f9938c6d.js +286 -0
- package/apps/pwa/out/_next/static/chunks/{9415.69e4a21c60c7d2db.js → 8551.f762945c2cda2e95.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/8635-57a9d8d9db70f4f1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/86961958-4b0689a5048f756b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8709.3c6019bb18f8554f.js +8 -0
- package/apps/pwa/out/_next/static/chunks/8759.c999528a0a907bf6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{9a852a62-6192a6ea9346ced3.js → 87f498e5-0881de09f2e44707.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/8843.c3197f904c952b81.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{3d0154af.5331fec737ffe8c3.js → 892fd990.456232f326cc39c2.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/8965-135a2c9eaa2464cb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/8971-8d3b9c96f8a6c958.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9059.c8598d96f8e5e9cd.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9115.90447ae198b84eae.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9147.d9b0a02e0babc9b4.js +93 -0
- package/apps/pwa/out/_next/static/chunks/9204-83075f4b70c61cdc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9244-c32ef14b5dc72bdf.js +1 -0
- package/apps/pwa/out/_next/static/chunks/930.2a9a30f964350c66.js +90 -0
- package/apps/pwa/out/_next/static/chunks/9398.1f56e3f17795f43f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9527.3e5ad31c891c5fcb.js +79 -0
- package/apps/pwa/out/_next/static/chunks/9571-4ac933e774d1225c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/_not-found/page-9fc644de2d8edae3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-0c9dace2db62bee8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-f5e65c3dc9d89f2a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/board/page-2a9c19b9a140b7b1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/botlab/page-61533ad92141adfb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/bots/page-112004ced6fd0329.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-f733318c237a49d8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/chat/page-51ea677d2d33bbc0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/consult/page-428b41f2f9566e3c.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/control/page-1b29396ea90a61e5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-cf83ec613ac904bf.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-3f4c0ecbc284bb5f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/editor/page-b63c322f54f70cc6.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/exec/page-fe328c4ee9aac6b4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/field/page-bfb855c584f0fb98.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/healthz/route-9fc644de2d8edae3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/inside/page-47b1710c110eabd7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/intake/page-42895214458bc6d2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/layout-d03de0ebd8366e23.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live/page-3ed6c47e4b1c61c2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live-run/page-ae653e9bf261c738.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/loops/page-23f3f0a0209c0ac4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/market/page-88c691273aae66f9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-e187ac52a95538b3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/morning/page-6e45828daed1295e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/not-found-edb5d7287bb46186.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-4a7eaacd93c3f6a5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-3ca073d43d74cc84.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-1e9fee67b1199436.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-df1283ea963c6816.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-19fcf8d8301ccd18.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/page-5ab699e0303bbb40.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-7cde0d29756984c5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-9d4c598e8ee22f7a.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-cc1609a71f44ec62.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-7659a9a1345bfaa9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/page-0afef60ecc0c4af5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-a3553949f8f34f5f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/layout-9fc644de2d8edae3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/page-057a69702f3c67c7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/share/page-c0f0e570f3f74c73.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-1825071ae34e3b89.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-6244e3e135d8ccfc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/term/page-da787e8a10b8a82e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/today/page-1316d32498e2be42.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/trace/page-4df94572e343de2e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/vault/page-708969f7475e88c1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-c58add08c919a1dc.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-a24847f45e5d5bf9.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-acfec65a3a60e22e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-3dfc598e6fbde245.js +1 -0
- package/apps/pwa/out/_next/static/chunks/framework-c658a626118411b7.js +1 -0
- package/apps/pwa/out/_next/static/chunks/main-4c73685fd891445b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/main-app-6310f7e5de7dd01d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/pages/_app-51c326bf48610be1.js +1 -0
- package/apps/pwa/out/_next/static/chunks/pages/_error-d0beadf754da59b0.js +1 -0
- package/apps/pwa/out/_next/static/chunks/webpack-acd243bfbf3f6732.js +1 -0
- package/apps/pwa/out/_next/static/css/d1f8bb401740a549.css +1 -0
- package/apps/pwa/out/approvals/index.html +1 -1
- package/apps/pwa/out/approvals/index.txt +23 -23
- package/apps/pwa/out/autopilot/index.html +1 -1
- package/apps/pwa/out/autopilot/index.txt +23 -23
- package/apps/pwa/out/board/index.html +1 -1
- package/apps/pwa/out/board/index.txt +23 -23
- package/apps/pwa/out/botlab/index.html +1 -1
- package/apps/pwa/out/botlab/index.txt +22 -22
- package/apps/pwa/out/bots/index.html +1 -1
- package/apps/pwa/out/bots/index.txt +22 -22
- package/apps/pwa/out/ceo/index.html +1 -1
- package/apps/pwa/out/ceo/index.txt +23 -23
- package/apps/pwa/out/chat/index.html +1 -1
- package/apps/pwa/out/chat/index.txt +22 -22
- package/apps/pwa/out/consult/index.html +1 -1
- package/apps/pwa/out/consult/index.txt +23 -23
- package/apps/pwa/out/control/index.html +1 -1
- package/apps/pwa/out/control/index.txt +23 -23
- package/apps/pwa/out/decisions/index.html +1 -1
- package/apps/pwa/out/decisions/index.txt +22 -22
- package/apps/pwa/out/design-check/index.html +1 -1
- package/apps/pwa/out/design-check/index.txt +23 -23
- package/apps/pwa/out/editor/index.html +1 -1
- package/apps/pwa/out/editor/index.txt +23 -23
- package/apps/pwa/out/exec/index.html +1 -1
- package/apps/pwa/out/exec/index.txt +23 -23
- package/apps/pwa/out/field/index.html +1 -1
- package/apps/pwa/out/field/index.txt +23 -23
- package/apps/pwa/out/healthz +1 -1
- package/apps/pwa/out/index.html +1 -1
- package/apps/pwa/out/index.txt +22 -22
- package/apps/pwa/out/inside/index.html +1 -1
- package/apps/pwa/out/inside/index.txt +22 -22
- package/apps/pwa/out/intake/index.html +1 -1
- package/apps/pwa/out/intake/index.txt +23 -23
- package/apps/pwa/out/live/index.html +1 -1
- package/apps/pwa/out/live/index.txt +23 -23
- package/apps/pwa/out/live-run/index.html +1 -1
- package/apps/pwa/out/live-run/index.txt +23 -23
- package/apps/pwa/out/loops/index.html +1 -1
- package/apps/pwa/out/loops/index.txt +22 -22
- package/apps/pwa/out/market/index.html +1 -1
- package/apps/pwa/out/market/index.txt +22 -22
- package/apps/pwa/out/missions/placeholder/index.html +1 -1
- package/apps/pwa/out/missions/placeholder/index.txt +22 -22
- package/apps/pwa/out/morning/index.html +1 -1
- package/apps/pwa/out/morning/index.txt +23 -23
- package/apps/pwa/out/observatory/index.html +1 -1
- package/apps/pwa/out/observatory/index.txt +23 -23
- package/apps/pwa/out/ops/checklist/index.html +1 -1
- package/apps/pwa/out/ops/checklist/index.txt +22 -22
- package/apps/pwa/out/ops/release/index.html +1 -1
- package/apps/pwa/out/ops/release/index.txt +22 -22
- package/apps/pwa/out/ops/seats/index.html +1 -1
- package/apps/pwa/out/ops/seats/index.txt +22 -22
- package/apps/pwa/out/outputs/index.html +1 -1
- package/apps/pwa/out/outputs/index.txt +22 -22
- package/apps/pwa/out/reflection/index.html +1 -1
- package/apps/pwa/out/reflection/index.txt +23 -23
- package/apps/pwa/out/scheduler/index.html +1 -1
- package/apps/pwa/out/scheduler/index.txt +23 -23
- package/apps/pwa/out/sessions/index.html +1 -1
- package/apps/pwa/out/sessions/index.txt +22 -22
- package/apps/pwa/out/settings/devices/index.html +1 -1
- package/apps/pwa/out/settings/devices/index.txt +23 -23
- package/apps/pwa/out/settings/index.html +1 -1
- package/apps/pwa/out/settings/index.txt +23 -23
- package/apps/pwa/out/setup/done/index.html +1 -1
- package/apps/pwa/out/setup/done/index.txt +23 -23
- package/apps/pwa/out/setup/index.html +1 -1
- package/apps/pwa/out/setup/index.txt +23 -23
- package/apps/pwa/out/share/index.html +1 -1
- package/apps/pwa/out/share/index.txt +23 -23
- package/apps/pwa/out/showroom/index.html +1 -1
- package/apps/pwa/out/showroom/index.txt +22 -22
- package/apps/pwa/out/tasks/index.html +1 -1
- package/apps/pwa/out/tasks/index.txt +23 -23
- package/apps/pwa/out/term/index.html +1 -1
- package/apps/pwa/out/term/index.txt +23 -23
- package/apps/pwa/out/today/index.html +1 -1
- package/apps/pwa/out/today/index.txt +23 -23
- package/apps/pwa/out/trace/index.html +1 -1
- package/apps/pwa/out/trace/index.txt +23 -23
- package/apps/pwa/out/vault/index.html +1 -1
- package/apps/pwa/out/vault/index.txt +23 -23
- package/apps/pwa/out/workflows/chat-ui/index.html +1 -1
- package/apps/pwa/out/workflows/chat-ui/index.txt +23 -23
- package/apps/pwa/out/workflows/index.html +1 -1
- package/apps/pwa/out/workflows/index.txt +23 -23
- package/apps/pwa/out/workspace/index.html +1 -1
- package/apps/pwa/out/workspace/index.txt +23 -23
- package/apps/pwa/out/worktrees/index.html +1 -1
- package/apps/pwa/out/worktrees/index.txt +23 -23
- package/catalog/external-commands.yaml +5 -3
- package/catalog/meta/catalogVersion.yaml +2 -1
- package/catalog/signing/catalog-signing-public.pem +3 -0
- package/graphs/intake/intake-daily.yaml +16 -0
- package/graphs/intake/news-sources.yaml +1 -0
- package/graphs/intake/recipes.yaml +7 -0
- package/graphs/overlays/README.md +6 -0
- package/graphs/overlays/examples/research-runtime-empty-terminal.yaml +28 -0
- package/graphs/profiles/local.yaml +5 -0
- package/graphs/profiles/pod.yaml +4 -0
- package/graphs/release/release-loop.yaml +33 -17
- package/graphs/units/verbs/make-doc.yaml +1 -0
- package/package.json +6 -2
- package/plugins/demo-absorption-briefing/plugin.json +18 -0
- package/plugins/demo-absorption-briefing/skills/demo-absorption-briefing/SKILL.md +8 -0
- package/plugins/demo-browser-hand/plugin.json +13 -0
- package/plugins/demo-browser-hand/skills/demo-browser-hand/SKILL.md +8 -0
- package/plugins/demo-linear-secretary/plugin.json +15 -0
- package/plugins/demo-linear-secretary/skills/demo-linear-secretary/SKILL.md +8 -0
- package/plugins/demo-plugin-wizard/plugin.json +11 -0
- package/plugins/demo-plugin-wizard/skills/demo-plugin-wizard/SKILL.md +8 -0
- package/plugins/demo-research/plugin.json +16 -0
- package/plugins/demo-research/skills/demo-research/SKILL.md +8 -0
- package/plugins/demo-video-briefing/plugin.json +15 -0
- package/plugins/demo-video-briefing/skills/demo-video-briefing/SKILL.md +8 -0
- package/scripts/bench-metering-plan.ts +229 -0
- package/scripts/build-signed-catalog.ts +48 -0
- package/scripts/ci-typecheck-main-delta.sh +88 -0
- package/scripts/codex-fallback-live-probe.ts +1 -1
- package/scripts/demo/demo1104-parallel-host.ts +56 -0
- package/scripts/demo/demo1104-parallel-scenes.ts +301 -0
- package/scripts/demo/demo1104-parallel.ts +72 -0
- package/scripts/demo/demo1104-stage.config.ts +21 -0
- package/scripts/demo/demo1104-stage.ts +316 -0
- package/scripts/goal-method-audit.ts +17 -1
- package/scripts/graph-units/land-enqueue.ts +90 -0
- package/scripts/hooks/codex-notify.sh +32 -0
- package/scripts/install.sh +10 -38
- package/scripts/landing-heal/land-plan.ts +57 -0
- package/scripts/public-leak-baseline.txt +0 -1
- package/scripts/release-loop/auto-approve-node.ts +1 -1
- package/scripts/release-loop/docs-node.ts +4 -2
- package/scripts/release-loop/gate-autoheal-sim-evidence.ts +60 -0
- package/scripts/release-loop/gate-image-pin.ts +116 -2
- package/scripts/release-loop/gate-method.ts +139 -0
- package/scripts/release-loop/gate-node.ts +395 -43
- package/scripts/release-loop/gate-progress-sim.ts +73 -0
- package/scripts/release-loop/gate-traffic-mode.ts +151 -3
- package/scripts/release-loop/node-verdict.ts +38 -25
- package/scripts/release-loop/notes-repair.ts +18 -1
- package/scripts/release-loop/preflight.ts +544 -10
- package/scripts/release-loop/render-warm-control-manifest.ts +22 -0
- package/scripts/release-loop/resume-release.ts +9 -7
- package/scripts/release-loop/resume.ts +13 -4
- package/scripts/release-loop/unattended-release.ts +20 -9
- package/scripts/release-loop/warm-control-forward.ts +178 -0
- package/scripts/retro-cycle.ts +30 -8
- package/scripts/rhythm/daily.ts +39 -4
- package/scripts/rhythm/linear-progress-sync.ts +311 -0
- package/scripts/ux-sim.ts +7 -1
- package/scripts/video-pipeline.ts +9 -1
- package/scripts/warm-pool-provider-config.ts +35 -7
- package/src/acp/agent-manager.ts +1 -0
- package/src/acp/codex-app-server-agent.ts +33 -0
- package/src/acp/codex-app-server-client.ts +153 -16
- package/src/acp/core-turn-bridge.ts +17 -12
- package/src/acp/event-router.ts +20 -1
- package/src/acp/server.ts +6 -0
- package/src/agent-mission/browser-roundtrip-coordinator.ts +85 -0
- package/src/agent-mission/claude-headless.ts +4 -1
- package/src/agent-mission/codex-exec.ts +105 -0
- package/src/agent-mission/driver.ts +192 -11
- package/src/agent-mission/grok-auth-status.ts +107 -0
- package/src/agent-mission/hand-hooks.ts +101 -0
- package/src/agent-mission/mission-cli.ts +56 -21
- package/src/agent-mission/mission-hand-reply.ts +118 -0
- package/src/agent-mission/mission-line.ts +180 -0
- package/src/agent-mission/mission-out.ts +256 -18
- package/src/agent-mission/tool-install.ts +122 -11
- package/src/agent-substrate/pr-reviewer.ts +147 -11
- package/src/agent-substrate/self-review-cli.ts +10 -2
- package/src/agents/general-purpose.md +1 -1
- package/src/auto-research/research-fanout.ts +221 -0
- package/src/auto-research/research-turn.ts +362 -31
- package/src/autopilot/mission-codebase-gate.ts +7 -3
- package/src/autopilot/pr-manager.ts +31 -3
- package/src/boot/daemon-tools/self-implement.ts +3 -1
- package/src/boot/daemon-tools/web-search.ts +1 -2
- package/src/briefing/brief-items.ts +55 -11
- package/src/cli/agent-cli.ts +2 -1
- package/src/cli/catalog-cli.ts +31 -0
- package/src/cli/connector-cli.ts +16 -0
- package/src/cli/control-cli.ts +15 -6
- package/src/cli/doctor-fix.ts +2 -2
- package/src/cli/intake-source-cli.ts +44 -8
- package/src/cli/log-event-names.ts +8 -0
- package/src/cli/msg-cli.ts +32 -3
- package/src/cli/pr-cli.ts +21 -1
- package/src/cli/pr-land-heavy-remote.ts +44 -6
- package/src/cli/pr-land-overlap-evidence.ts +13 -1
- package/src/cli/pr-land-pod-shadow-job.ts +143 -5
- package/src/cli/pr-land-pod-shadow.ts +9 -2
- package/src/cli/release-checklist-read-cli.ts +44 -16
- package/src/cli/release-cli.ts +23 -3
- package/src/cli/research-cli.ts +9 -0
- package/src/cli/setup-cli.ts +166 -6
- package/src/cli/setup-keys.ts +199 -0
- package/src/cli/task-plugin-wizard-host.ts +114 -0
- package/src/cli/tasks-cli.ts +54 -9
- package/src/cli/tui-test-cli.ts +190 -0
- package/src/config.ts +4 -2
- package/src/connectors/linear-daily-progress.ts +228 -0
- package/src/connectors/linear-projector.ts +34 -12
- package/src/connectors/linear.ts +151 -7
- package/src/control-plane/ledger.ts +42 -4
- package/src/control-plane/member-tokens.ts +25 -2
- package/src/control-plane/ports.ts +8 -3
- package/src/control-plane/server.ts +26 -5
- package/src/core-turn/deep-turn-bloom.ts +67 -0
- package/src/core-turn/research-policy.ts +43 -0
- package/src/core-turn/run-core-turn.ts +488 -51
- package/src/core-turn/types.ts +4 -0
- package/src/dashboard/chat/acp-chat.ts +10 -0
- package/src/dashboard/classic-sidetab-mission-job.ts +192 -0
- package/src/dashboard/classic-sidetab-mission-pair.ts +82 -0
- package/src/dashboard/classic-sidetab-mission-trio.ts +242 -0
- package/src/dashboard/classic-sidetab-mission.ts +169 -5
- package/src/dashboard/index.ts +387 -14
- package/src/dashboard/input/chat-main-acp-dispatch.ts +23 -0
- package/src/dashboard/input/chat-main-plain-turn-runtime.ts +8 -0
- package/src/dashboard/mission-cli-consumer.ts +20 -8
- package/src/dashboard/plugin-wizard-runtime.ts +50 -0
- package/src/dashboard/plugin-wizard-tool.ts +55 -0
- package/src/dashboard/sidetab-runtime.ts +3 -1
- package/src/dashboard/terminal-popup-runtime.ts +6 -3
- package/src/dashboard/visible-mission-diagnostics.ts +16 -0
- package/src/decisions/linear-progress-summary.ts +78 -0
- package/src/decisions/linear-progress-sync.ts +152 -0
- package/src/domains/outbound-alert.ts +49 -11
- package/src/domains/retro-cycle-observation.ts +43 -0
- package/src/domains/retro-cycle.ts +13 -2
- package/src/domains/retro-proposals.ts +92 -0
- package/src/domains/retro-report.ts +6 -1
- package/src/domains/telegram-kind-route.ts +16 -9
- package/src/graph-runner/arg-allowance.ts +13 -0
- package/src/graph-runner/graph-cli.ts +24 -1
- package/src/graph-runner/graph-grow-llm.ts +3 -1
- package/src/graph-runner/graph-run-api.ts +3 -1
- package/src/graph-runner/runner.ts +310 -46
- package/src/graph-wizard/mission-compose.ts +407 -12
- package/src/harness/dispatch-backpressure.ts +54 -1
- package/src/harness/dispatch-shadow-compare.ts +74 -0
- package/src/harness/harness-cli-command.ts +15 -3
- package/src/harness/harness-pod-dispatch.ts +3 -0
- package/src/harness/skill-exec.ts +21 -9
- package/src/harness/skill-select.ts +1 -1
- package/src/hooks/error-report-cloud.ts +101 -0
- package/src/hooks/receiver.ts +29 -2
- package/src/index.ts +129 -12
- package/src/intake-plane/actions.ts +354 -0
- package/src/intake-plane/adapters/telegram-ambient.ts +34 -18
- package/src/intake-plane/intake-sources.ts +78 -8
- package/src/intake-plane/items.ts +14 -4
- package/src/intake-plane/linear-mission-sync.ts +80 -0
- package/src/intake-plane/linear-secretary-runtime.ts +178 -0
- package/src/intake-plane/linear-wish.ts +227 -1
- package/src/life/life-cli.ts +168 -0
- package/src/life/life-kinds.ts +160 -0
- package/src/live-supply/budget-consumer.ts +78 -0
- package/src/live-supply/read.ts +3 -0
- package/src/live-supply/snapshot.ts +45 -0
- package/src/llm/child-first-llm-observation.ts +112 -0
- package/src/llm/provider-credentials.ts +68 -6
- package/src/llm/provider-failure-evidence.ts +44 -0
- package/src/llm.ts +172 -12
- package/src/maturity/feature-maturity.ts +3 -3
- package/src/mcp/client.ts +7 -0
- package/src/mcp/proxy-runtime.ts +6 -1
- package/src/mcp/server.ts +54 -0
- package/src/msg/msg-sse-server.ts +3 -3
- package/src/msg/msg-store.ts +177 -19
- package/src/native-tool-catalog.ts +36 -2
- package/src/nexus/api/consult-requests.ts +18 -6
- package/src/nexus/api/discord-trigger-bot.ts +6 -6
- package/src/nexus/api/graphs-api.ts +4 -2
- package/src/nexus/api/grokbot-trigger-bot.ts +206 -0
- package/src/nexus/api/http-server.ts +37 -1
- package/src/nexus/api/mcp-public-allowlist.ts +2 -0
- package/src/nexus/api/telegram-trigger-bot.ts +6 -6
- package/src/nexus/boot/register-mcp-clients.ts +114 -8
- package/src/nexus/index.ts +22 -2
- package/src/nexus/outbound/format.ts +9 -0
- package/src/nexus/outbound/grokbot-adapter.ts +71 -0
- package/src/nexus/outbound/router.ts +121 -16
- package/src/nexus/setup-status.ts +9 -0
- package/src/nexus/state/state.ts +3 -0
- package/src/oauth/codex-account-store.ts +20 -7
- package/src/oauth/codex-owner-mirror.ts +81 -0
- package/src/oauth/codex.ts +17 -2
- package/src/oauth/fallback-chain.ts +47 -17
- package/src/onboarding/first-run-doctor.ts +8 -1
- package/src/onboarding/first-run.ts +126 -29
- package/src/onboarding/key-setup.ts +103 -0
- package/src/onboarding/menu-answer.ts +13 -0
- package/src/onboarding/secret-prompt.ts +37 -0
- package/src/plugins/install/plugin-install.ts +59 -0
- package/src/pr-tool/census.ts +130 -0
- package/src/preview/terminal.ts +22 -7
- package/src/prompt-enhance/enhance.ts +10 -0
- package/src/pty-shell/pty-control-ipc.ts +4 -1
- package/src/pty-shell/pty-write-provenance.ts +21 -3
- package/src/pty-shell/registry.ts +9 -2
- package/src/registry/catalog-server.ts +232 -0
- package/src/registry/loader.ts +45 -1
- package/src/registry/types.ts +1 -2
- package/src/release-loop/proposal-auto-place.ts +83 -0
- package/src/research/axis-fanout.ts +79 -29
- package/src/research/lenses/second-order.ts +312 -0
- package/src/self-dev/ask-launch-flow.ts +72 -1
- package/src/self-dev/dev-cli.ts +7 -2
- package/src/self-dev/dev-pipeline.ts +5 -0
- package/src/self-dev/draft-residue.ts +64 -5
- package/src/self-dev/draft-sweep.ts +31 -10
- package/src/self-dev/draft-triage-rules.ts +60 -3
- package/src/self-dev/graph-front-nodes.ts +2 -1
- package/src/self-dev/graph-journey-route.ts +76 -21
- package/src/self-dev/launch-preflight.ts +58 -0
- package/src/self-dev/orchestrate.ts +1 -1
- package/src/self-dev/run-supervisor.ts +152 -2
- package/src/self-dev/shard-aggregate.ts +4 -0
- package/src/self-dev/shard-run.ts +36 -15
- package/src/self-implement/abandoned-classification.ts +12 -3
- package/src/self-implement/budget-gate.ts +7 -0
- package/src/self-implement/child-llm-preference.ts +10 -1
- package/src/self-implement/doctor-visit.ts +30 -8
- package/src/self-implement/elanous-tui-spawn.ts +3 -0
- package/src/self-implement/fixtures/tdd-green-missing-passing-child-transcript.txt +2 -0
- package/src/self-implement/gate-artifacts.ts +2 -1
- package/src/self-implement/goal-author-cli.ts +4 -2
- package/src/self-implement/goal-author.ts +549 -10
- package/src/self-implement/graph-overlay-yaml.ts +181 -4
- package/src/self-implement/graph-overlay.ts +3 -1
- package/src/self-implement/graph-profile-yaml.ts +107 -0
- package/src/self-implement/graph-yaml.ts +94 -5
- package/src/self-implement/off-diff-evidence.ts +249 -5
- package/src/self-implement/orchestrator.ts +298 -26
- package/src/self-implement/run-chart.ts +6 -3
- package/src/self-implement/run-ledger.ts +51 -1
- package/src/self-implement/runtime-overlay-run-steps.ts +95 -0
- package/src/self-implement/tdd-evidence-tags.ts +9 -0
- package/src/self-implement/test-scenario-request.ts +37 -6
- package/src/self-implement/train-gate-receipt.ts +166 -0
- package/src/self-implement/train-gate-remote.ts +62 -18
- package/src/session/chat.ts +6 -4
- package/src/session/session-fanout.ts +2 -0
- package/src/session/streaming/acp-stream-sink.ts +2 -1
- package/src/session/streaming/chunk-producer.ts +6 -0
- package/src/session/streaming/stream-compositor.ts +3 -2
- package/src/session-runtime/index.ts +74 -6
- package/src/session-runtime/retry-policy.ts +1 -1
- package/src/setup/llm-env-detect.ts +3 -0
- package/src/setup/service-key-catalog.ts +46 -0
- package/src/setup/service-keys.ts +241 -0
- package/src/sidetab-core/model.ts +205 -10
- package/src/sidetab-core/visible-agent-mission-pair.ts +51 -0
- package/src/sidetab-core/visible-agent-mission.ts +182 -48
- package/src/skills/tools/agent.ts +23 -4
- package/src/skills/tools/omni-search.ts +127 -27
- package/src/task-agent/parent-host.ts +29 -1
- package/src/task-agent/recall-inject.ts +98 -0
- package/src/task-agent/repair-outcomes.ts +65 -0
- package/src/task-agent/task-hand.ts +46 -14
- package/src/task-orchestrator/dispatcher.ts +14 -1
- package/src/task-orchestrator/linear-capture-events.ts +55 -0
- package/src/task-orchestrator/store.ts +16 -5
- package/src/task-orchestrator/surfaces/pod-artifact-return.ts +23 -1
- package/src/task-orchestrator/surfaces/pod-failure-reason.ts +107 -1
- package/src/task-orchestrator/surfaces/pod-ledger-events.ts +113 -14
- package/src/task-orchestrator/surfaces/pod-si-warm-host.ts +21 -9
- package/src/task-orchestrator/surfaces/pod-source-receive.ts +23 -11
- package/src/task-orchestrator/surfaces/pod-warm-switch.ts +2 -0
- package/src/task-orchestrator/surfaces/pod-warm-worker-pod.ts +1 -1
- package/src/task-orchestrator/surfaces/pod-warm-worker-provider.ts +467 -77
- package/src/task-orchestrator/surfaces/pod-warm-worker-runtime.ts +45 -3
- package/src/task-orchestrator/surfaces/self-implement-pod.ts +210 -14
- package/src/task-orchestrator/surfaces/self-implement.ts +27 -3
- package/src/task-orchestrator/surfaces/warm-reuse-evidence.ts +169 -0
- package/src/task-orchestrator/types.ts +14 -0
- package/src/telegram.ts +14 -16
- package/src/terminal/coding-agent.ts +14 -5
- package/src/terminal/session-registry.ts +1 -1
- package/src/tool-hints/gate.ts +46 -14
- package/src/tool-hints/signals.ts +1 -1
- package/src/tool-hints/types.ts +2 -0
- package/src/tool-runtime/agent-runtime.ts +1 -0
- package/src/tool-runtime/browser-hand-runtime.ts +391 -0
- package/src/tool-runtime/browser-runtime.ts +33 -19
- package/src/tool-runtime/elanous-linear-issue-runtime.ts +76 -0
- package/src/tool-runtime/elanous-linear-secretary-runtime.ts +173 -0
- package/src/tool-runtime/graph-mcp-runtimes.ts +240 -0
- package/src/tool-runtime/index.ts +6 -0
- package/src/tool-runtime/types.ts +5 -0
- package/src/tui/entry.ts +51 -8
- package/src/tui/sidetab/attach.ts +252 -11
- package/src/tui/sidetab/herdr-portal.ts +225 -0
- package/src/tui/sidetab/list.ts +3 -2
- package/src/tui-client/next-dashboard-runtime.ts +52 -0
- package/src/user-config.ts +34 -9
- package/src/user-intent/types.ts +4 -3
- package/src/ux-sim/browser-hand.ts +165 -0
- package/src/ux-sim/draft-inventory-builder.ts +199 -0
- package/src/ux-sim/fake-browser-page.ts +81 -0
- package/src/ux-sim/fake-linear-device.ts +31 -0
- package/src/ux-sim/graph-engine-sim.ts +47 -0
- package/src/ux-sim/linear-secretary.ts +208 -0
- package/src/ux-sim/mock-scenario-catalog.json +81 -26
- package/src/ux-sim/mock-scenario-catalog.ts +175 -5
- package/src/ux-sim/onboarding-first-run-device.ts +31 -21
- package/src/ux-sim/release-sim-rig.ts +62 -18
- package/src/ux-sim/scenario.ts +70 -26
- package/src/ux-sim/service-key-setup.ts +113 -0
- package/src/ux-sim/term-slash-device.ts +74 -0
- package/src/ux-sim/turn-throw-sim.ts +31 -0
- package/src/version/packed-revision.json +1 -1
- package/src/web-search/exa.ts +77 -0
- package/src/web-search/index.ts +30 -9
- package/src/web-search/provider.ts +4 -1
- package/src/web-search/x-intent.ts +5 -0
- package/apps/pwa/out/_next/static/chunks/0244e5b5.6fc7670f8223d82d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1121.13ba7a8aff19df81.js +0 -36
- package/apps/pwa/out/_next/static/chunks/1147-5196d19c222051b3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1319.b9b815ae0f181e06.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1345-31427b833438f521.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1455-530ca16c7e71baff.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1574.878c18ecc97b1bd4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1586.fafc33a9a5835cb7.js +0 -32
- package/apps/pwa/out/_next/static/chunks/1744.855fd60ae4c4a8c8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/193.21a47a3e07ef6860.js +0 -1
- package/apps/pwa/out/_next/static/chunks/1945.7b54990d578c119b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2004.e839fda7ea5a738a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2044-dd681a5c08779ff8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2101.2248decb38829b03.js +0 -286
- package/apps/pwa/out/_next/static/chunks/2300.41ea70ac1bef1446.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2357-07b5eeb5fb12628d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2364.28652020695a6db3.js +0 -34
- package/apps/pwa/out/_next/static/chunks/2456.b6de0e1c05f28843.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2526.c3e50ac1fec064bd.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2549-cda50b716ff4250c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2550-5f1e88f615568045.js +0 -1
- package/apps/pwa/out/_next/static/chunks/261-319078c954e40d66.js +0 -1
- package/apps/pwa/out/_next/static/chunks/2690.0521c738b7749931.js +0 -115
- package/apps/pwa/out/_next/static/chunks/2974.595d1e29d040cb6a.js +0 -64
- package/apps/pwa/out/_next/static/chunks/3207.a756c95e9ec8c3c8.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3285.89ee2f298682f5e5.js +0 -93
- package/apps/pwa/out/_next/static/chunks/3447.06edc7b092021417.js +0 -41
- package/apps/pwa/out/_next/static/chunks/3510-9ca392698bfe4391.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3541.772e5ce425aaa611.js +0 -24
- package/apps/pwa/out/_next/static/chunks/3741.9cf76acaa2ee5298.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3837.a210d7d0db8d8abd.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3898-955c896f394217a6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3947-ef57acea76eaa8d2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4037-3b82ebc7d78afdc7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/405.9022d4a478202b67.js +0 -77
- package/apps/pwa/out/_next/static/chunks/417-fb2cc9a9910e5968.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4276.336d76d858fcdf1b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4302.6ced9aa4535de947.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4320.583cbab64db6be02.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4768-8eac183fd291ca53.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4770.769c9cd9c7034eba.js +0 -148
- package/apps/pwa/out/_next/static/chunks/4895.65605ec3e6504e89.js +0 -74
- package/apps/pwa/out/_next/static/chunks/50061469.0326382241ef3b2d.js +0 -122
- package/apps/pwa/out/_next/static/chunks/5112.4b9f300124fab7b3.js +0 -149
- package/apps/pwa/out/_next/static/chunks/5335.375ee922bcd5bc83.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5342.023a2e729689b320.js +0 -27
- package/apps/pwa/out/_next/static/chunks/53c73f84.373b6160adfa89a4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5431-72a1dbde59400691.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5440-4236de26c5ea5856.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5486-b318c165f645d8ba.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5506-c7d2ec25c62a7c94.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5570-c66ecbea26b4e3b1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5696.ffca5aa259d8451e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5793-8c584aea2aa87560.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5848-6de6b8c173351a90.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5999.94e3c83040200f31.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5a7901d6-2d8d9b5587cf9042.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6131.348b7d6bdcd267ce.js +0 -226
- package/apps/pwa/out/_next/static/chunks/6164.86133a0172611184.js +0 -90
- package/apps/pwa/out/_next/static/chunks/6515.e07e8b2b8a707a87.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6522-c005514f87d18982.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6642.648adb1767f39ecf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/6848.138805a09d001d09.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7049-c09e2b7a253a24f3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7072.1e00447d9fa39972.js +0 -104
- package/apps/pwa/out/_next/static/chunks/7106.64201c539c5e220c.js +0 -94
- package/apps/pwa/out/_next/static/chunks/7151-1f742b455986530e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7199.18d6b25e001154ce.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7279-c199ea83f34338fa.js +0 -1
- package/apps/pwa/out/_next/static/chunks/728b938d.ffaa7ad583d60e58.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7309.171c3de54e0322f1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/733.7a1ab3342e03306f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7504.d5cf1e7cd89b1b08.js +0 -24
- package/apps/pwa/out/_next/static/chunks/7573-0fd4af62d65d4598.js +0 -1
- package/apps/pwa/out/_next/static/chunks/759.6f8267df4689c401.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7825-668b046f72f14483.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7852-1538768b6eb19388.js +0 -1
- package/apps/pwa/out/_next/static/chunks/7868.cff810430bb63c91.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8084-dfcc796874ab4e07.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8266.6bf9b131b2584678.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8403.7b81d5e64074a725.js +0 -8
- package/apps/pwa/out/_next/static/chunks/8470.1998cbd0866a7eac.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8505.fd803c6c33b54cc3.js +0 -79
- package/apps/pwa/out/_next/static/chunks/8546-6f03f8ea34dd61d9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8687-246fda8433d3477c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/898-280022fb082936bc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9098-50eefc1844212e3d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9211-330b6736a63d4cb3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9249.976f1e69a9d80754.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9255-cf88fceda5666645.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9306-e523ba58bb8adc42.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9324.a9866d717ba62cb6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9325.a8510e8aa87c8143.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9353-12bfff0c130104cf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9479-154a697d4b6e4e98.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9540-65aa6ccc31b3fd78.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9633.ce5bddc56784da72.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9656-374232558fd528d0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/9832.f4a98c878ecf2c0a.js +0 -62
- package/apps/pwa/out/_next/static/chunks/9865.f094440645f02d98.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/_not-found/page-e772b4710df5d936.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/approvals/page-4361368e6a76b967.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/autopilot/page-802f349fdd65248d.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/board/page-7f35513988a2a495.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/botlab/page-798121656540e33e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/bots/page-20a089490affe98c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-e5e4ec786d70e604.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/chat/page-d12fe5d0801430e4.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/consult/page-d8cf21022fecc026.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/control/page-21ce565c9c57ee97.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-b56563025f619c9b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/design-check/page-52f14dd133da8348.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/editor/page-c0ed7fdcdba76633.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/exec/page-af8c3020cb520f15.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/field/page-72eda67af9f5e35c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/healthz/route-e772b4710df5d936.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/inside/page-67a6620d31f0a46f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/intake/page-f059363aa0880ec2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/layout-f9f917d6a57f69fb.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live/page-d3ae55eee2f0826c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/live-run/page-0e3d7b9421b79dac.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/loops/page-ba738f7e233eb211.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/market/page-33438b98c74fd599.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-0b34d5fd990d793a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/morning/page-0f291d3c8fd55a3a.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/not-found-3fced192be5279c1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-04cb3cf182a7c1ea.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-6ccbd2ab23a21542.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-aa0518c48a5f4e56.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-4b32226d341ad7d7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-3224fd8f6383b61f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/page-efbc97459f2914e2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/reflection/page-2fe487d88cd5d97c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-48861dd1a858bab7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/sessions/page-197d5d4d21d228ea.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-a763ba89fbdd9c27.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/page-7edb253510b1c136.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-0c875702c61965ea.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/layout-e772b4710df5d936.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/page-e425c951151095f7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/share/page-9c90e0aec4e27f77.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/showroom/page-733e09a02e727d42.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/tasks/page-4f899e14c34d77a1.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/term/page-bf067887b3307423.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/today/page-7af10868ff87d04e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/trace/page-efe5304057aa11c7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/vault/page-76bcd29aaa8a26c3.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-4cfd88e2273ce50f.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-0a1ddb47efba0a32.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workspace/page-2a176c707152c892.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-efe03031b8797fbf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/framework-d0d2d673bfd8a8a9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-4c9fceb2baa09cb7.js +0 -1
- package/apps/pwa/out/_next/static/chunks/main-app-b0ab8d8fc9a97556.js +0 -1
- package/apps/pwa/out/_next/static/chunks/pages/_app-7e2cc62a2e5cec96.js +0 -1
- package/apps/pwa/out/_next/static/chunks/pages/_error-22324935f753ec5e.js +0 -1
- package/apps/pwa/out/_next/static/chunks/webpack-9dc1bfa25334998a.js +0 -1
- package/apps/pwa/out/_next/static/css/be9019f696217521.css +0 -1
- /package/apps/pwa/out/_next/static/{X1ucLw10Cds_h614NoEnh → HMXsxdy5MIIcHPMHv1wD4}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { nextNode, withGrowth } from '../graph-runner/runner.js';
|
|
2
|
+
import type { GraphGrowth } from '../graph-runner/graph-grow.js';
|
|
3
|
+
import type { GraphEdgeSpec, GraphTemplateSpec } from '../self-implement/graph-yaml.js';
|
|
4
|
+
|
|
5
|
+
/** Synthetic component result supplied to the simulator; no node executor or external effect is run. */
|
|
6
|
+
export interface GraphEngineSimExit {
|
|
7
|
+
readonly nodeId: string;
|
|
8
|
+
readonly outcome: 'success' | 'failure' | 'missing' | 'stuck' | 'budget-exceeded' | (string & {});
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export interface GraphEngineSimObservation {
|
|
12
|
+
readonly from: string;
|
|
13
|
+
readonly outcome: string;
|
|
14
|
+
readonly to?: string;
|
|
15
|
+
readonly growthApplied: boolean;
|
|
16
|
+
readonly sourceGraphUnchanged: boolean;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* GRAPH-ENGINE-SIM: inject only a component's exit label and run the production graph-growth and
|
|
21
|
+
* edge-selector functions. This is a selector device, not a simulated executor or live graph run.
|
|
22
|
+
*/
|
|
23
|
+
export function simGraphEngineSelection(input: {
|
|
24
|
+
graph: GraphTemplateSpec;
|
|
25
|
+
exit: GraphEngineSimExit;
|
|
26
|
+
growth?: GraphGrowth;
|
|
27
|
+
}): GraphEngineSimObservation {
|
|
28
|
+
const sourceEdges = input.graph.edges;
|
|
29
|
+
const graph = input.growth ? withGrowth(input.graph, [input.growth]) : input.graph;
|
|
30
|
+
const isSuccess = input.exit.outcome === 'success';
|
|
31
|
+
const to = nextNode(graph.edges, input.exit.nodeId, isSuccess ? 'ok' : 'fail', input.exit.outcome);
|
|
32
|
+
return {
|
|
33
|
+
from: input.exit.nodeId,
|
|
34
|
+
outcome: input.exit.outcome,
|
|
35
|
+
...(to === undefined ? {} : { to }),
|
|
36
|
+
growthApplied: graph !== input.graph,
|
|
37
|
+
sourceGraphUnchanged: input.graph.edges === sourceEdges,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/** Small receipt useful to command-line and test consumers. */
|
|
42
|
+
export function renderGraphEngineSim(observation: GraphEngineSimObservation): string {
|
|
43
|
+
return `${observation.from} --${observation.outcome}--> ${observation.to ?? '(no edge)'} · growth=${observation.growthApplied ? 'applied' : 'none'} · source-unchanged=${observation.sourceGraphUnchanged}`;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/** Keep the production selector's accepted edge shape visible to device authors. */
|
|
47
|
+
export type GraphEngineSimEdges = readonly GraphEdgeSpec[];
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
// Integrated, test-only scene 2 device. Production coordinators run against fake external I/O.
|
|
2
|
+
import { mkdtempSync, rmSync } from 'node:fs';
|
|
3
|
+
import { tmpdir } from 'node:os';
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
import { randomUUID } from 'node:crypto';
|
|
6
|
+
import { createTelegramAmbientMessageHandler } from '../intake-plane/adapters/telegram-ambient.js';
|
|
7
|
+
import { createLinearSecretaryBreakdown, updateLinearSecretaryProgress, type LinearSecretaryPlan } from '../intake-plane/linear-wish.js';
|
|
8
|
+
import { submitIntakeWork } from '../intake-plane/submit-intake-work.js';
|
|
9
|
+
import { DecisionLedger } from '../decisions/decision-ledger.js';
|
|
10
|
+
import { renderCard, type CardView } from '../decisions/decision-cards.js';
|
|
11
|
+
import { LogStore } from '../mss/logging/log-store.js';
|
|
12
|
+
import { simBrowserHand } from './browser-hand.js';
|
|
13
|
+
|
|
14
|
+
const NOW = new Date('2026-10-31T00:00:00.000Z');
|
|
15
|
+
const REQUEST = 'https://example.test/demo/brief 11-04 데모 준비를 리니어로 정리해줘';
|
|
16
|
+
const PLAN: LinearSecretaryPlan = {
|
|
17
|
+
title: '11-04 데모 준비', rationale: '무대·흡수·브라우저·승인 경계를 근거가 보이게 나눴습니다.',
|
|
18
|
+
assigneeId: 'fake-owner', dueDate: '2026-11-05',
|
|
19
|
+
tasks: [
|
|
20
|
+
{ title: '무대 자료 확인', intent: '요청의 공개 근거를 확인한다', refs: ['https://example.test/demo/brief'], assigneeId: 'fake-owner', dueDate: '2026-11-05' },
|
|
21
|
+
{ title: '흡수 자료 연결', intent: '흡수한 자료를 하위 태스크에 연결한다', refs: ['https://example.test/demo/absorb'], assigneeId: 'fake-owner', dueDate: '2026-11-05' },
|
|
22
|
+
{ title: '브라우저 캡처 첨부', intent: '승인된 브라우저 캡처를 같은 태스크에 붙인다', refs: ['https://example.test/demo/browser'], assigneeId: 'fake-owner', dueDate: '2026-11-05' },
|
|
23
|
+
],
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
export interface LinearSecretarySimulationResult {
|
|
27
|
+
runId: string;
|
|
28
|
+
evidencePath: string;
|
|
29
|
+
cleanup(): void;
|
|
30
|
+
reply: string | null;
|
|
31
|
+
parentIssueId: string;
|
|
32
|
+
intakeIds: string[];
|
|
33
|
+
childIssueIds: string[];
|
|
34
|
+
completedIssueIds: string[];
|
|
35
|
+
childEvidence: Array<{ issueId: string; description: string }>;
|
|
36
|
+
linearAttachments: Array<{ issueId: string; url: string }>;
|
|
37
|
+
progressCommentCount: number;
|
|
38
|
+
browserAttachment: { issueId: string; url: string } | null;
|
|
39
|
+
approvalCard: { id: string; text: string; buttons: CardView['buttons'] } | null;
|
|
40
|
+
approvalCardStatus: string | null;
|
|
41
|
+
browserRunId: string | null;
|
|
42
|
+
browserActionRunIds: Array<string | null>;
|
|
43
|
+
externalCalls: number;
|
|
44
|
+
runEvents: string[];
|
|
45
|
+
runEvidence: { category: string; event: string; persisted: boolean };
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export async function simLinearSecretary(): Promise<LinearSecretarySimulationResult> {
|
|
49
|
+
const root = mkdtempSync(join(tmpdir(), 'ux-sim-linear-secretary-'));
|
|
50
|
+
const runId = randomUUID();
|
|
51
|
+
const store = new LogStore(join(root, 'logs', 'logs.db'), { instance: 'ux-sim' });
|
|
52
|
+
let retainEvidence = false;
|
|
53
|
+
const eventNames: string[] = [];
|
|
54
|
+
const event = (name: string, data: Record<string, unknown> = {}): void => {
|
|
55
|
+
eventNames.push(name);
|
|
56
|
+
store.insertBatch([{ surface: 'ux-sim', rec: { ts: NOW.toISOString(), category: 'ux.sim.linear-secretary', event: name,
|
|
57
|
+
level: 'debug', data: { runId, ...data } } }]);
|
|
58
|
+
};
|
|
59
|
+
let externalCalls = 0;
|
|
60
|
+
const descriptions = new Map<string, string>();
|
|
61
|
+
const states = new Map<string, string>();
|
|
62
|
+
const attachments: Array<{ issueId: string; url: string }> = [];
|
|
63
|
+
const comments: Array<{ issueId: string; body: string }> = [];
|
|
64
|
+
const childEvidence: Array<{ issueId: string; description: string }> = [];
|
|
65
|
+
let nextIssue = 0;
|
|
66
|
+
let parentIssueId = '';
|
|
67
|
+
let intakeIds: string[] = [];
|
|
68
|
+
let childIssueIds: string[] = [];
|
|
69
|
+
let completedIssueIds: string[] = [];
|
|
70
|
+
let browserAttachment: { issueId: string; url: string } | null = null;
|
|
71
|
+
let reply: string | null = null;
|
|
72
|
+
let approvalCard: LinearSecretarySimulationResult['approvalCard'] = null;
|
|
73
|
+
let approvalCardStatus: string | null = null;
|
|
74
|
+
let approvalDecisionId: string | undefined;
|
|
75
|
+
let browserRunId: string | null = null;
|
|
76
|
+
let browserActionRunIds: Array<string | null> = [];
|
|
77
|
+
let failure: string | undefined;
|
|
78
|
+
const fakeFetch = (async (_url: string | URL | Request, init?: RequestInit) => {
|
|
79
|
+
externalCalls++;
|
|
80
|
+
if (typeof init?.body !== 'string') throw new Error('fake Linear expected a JSON GraphQL POST body');
|
|
81
|
+
let body: { query?: unknown; variables?: Record<string, unknown> };
|
|
82
|
+
try { body = JSON.parse(init.body) as typeof body; }
|
|
83
|
+
catch { throw new Error('fake Linear expected valid JSON GraphQL POST body'); }
|
|
84
|
+
if (typeof body.query !== 'string') throw new Error('fake Linear GraphQL body is missing its query');
|
|
85
|
+
const id = String(body.variables?.id ?? '');
|
|
86
|
+
if (body.query.includes('LinearIssueStatus')) return Response.json({ data: { issue: { state: { type: states.get(id) ?? 'started' } } } });
|
|
87
|
+
if (body.query.includes('DecisionIssueStates')) return Response.json({ data: { issue: { team: { states: { nodes: [
|
|
88
|
+
{ id: 'todo', type: 'unstarted' }, { id: 'doing', type: 'started' }, { id: 'done', type: 'completed' },
|
|
89
|
+
] } } } } });
|
|
90
|
+
if (body.query.includes('LinearAttachmentCreate')) {
|
|
91
|
+
const input = body.variables?.input as { issueId: string; url: string };
|
|
92
|
+
attachments.push({ issueId: input.issueId, url: input.url });
|
|
93
|
+
return Response.json({ data: { attachmentCreate: { success: true, attachment: { id: `attachment-${attachments.length}` } } } });
|
|
94
|
+
}
|
|
95
|
+
if (body.query.includes('DecisionComment')) {
|
|
96
|
+
const input = body.variables?.input as { issueId: string; body: string };
|
|
97
|
+
comments.push(input);
|
|
98
|
+
return Response.json({ data: { commentCreate: { success: true, comment: { id: `comment-${comments.length}` } } } });
|
|
99
|
+
}
|
|
100
|
+
if (body.query.includes('LinearIssueDescription($id')) return Response.json({ data: { issue: { description: descriptions.get(id) } } });
|
|
101
|
+
if (body.query.includes('LinearIssueDescriptionUpdate')) {
|
|
102
|
+
const input = body.variables?.input as { description: string };
|
|
103
|
+
descriptions.set(id, input.description);
|
|
104
|
+
return Response.json({ data: { issueUpdate: { success: true } } });
|
|
105
|
+
}
|
|
106
|
+
if (body.query.includes('DecisionIssueClose')) {
|
|
107
|
+
const input = body.variables?.input as { stateId: string };
|
|
108
|
+
states.set(id, input.stateId === 'done' ? 'completed' : 'started');
|
|
109
|
+
return Response.json({ data: { issueUpdate: { success: true } } });
|
|
110
|
+
}
|
|
111
|
+
throw new Error(`unexpected fake Linear query: ${body.query}`);
|
|
112
|
+
}) as typeof fetch;
|
|
113
|
+
|
|
114
|
+
try {
|
|
115
|
+
event('request-received');
|
|
116
|
+
const runSecretary = async (request: string) => {
|
|
117
|
+
try {
|
|
118
|
+
if (request !== REQUEST) throw new Error('unexpected request');
|
|
119
|
+
event('secretary-started');
|
|
120
|
+
const absorbed = await submitIntakeWork({ text: request, track: 'absorb', origin: {
|
|
121
|
+
kind: 'external', ledgerSource: 'telegram-bot', provider: 'telegram', ref: 'ux-sim:message-1',
|
|
122
|
+
} }, {
|
|
123
|
+
root: () => join(root, 'intake'), now: () => NOW.toISOString(),
|
|
124
|
+
ingest: (_root, _source, raws) => ({ shaped: raws.length, added: raws.length, merged: 0, seen: 0, skipped: 0, badLines: 0 }),
|
|
125
|
+
log: name => event(name === 'submitted' ? 'intake-submit-observed' : `intake-${name}`),
|
|
126
|
+
});
|
|
127
|
+
if (!absorbed.ok || absorbed.track !== 'absorb' || absorbed.ids.length !== 1) throw new Error('demo URL did not enter the absorb seam');
|
|
128
|
+
intakeIds = absorbed.ids;
|
|
129
|
+
const groundedPlan: LinearSecretaryPlan = { ...PLAN, tasks: PLAN.tasks.map((task, index) => index === 0
|
|
130
|
+
? { ...task, refs: [`elanous:intake:${intakeIds[0]}`] } : task) };
|
|
131
|
+
event('intake-ledger-seam-completed', { intakeIds });
|
|
132
|
+
const result = await createLinearSecretaryBreakdown({ apiKey: 'ux-sim-key', teamKey: 'DEMO', request, plan: groundedPlan,
|
|
133
|
+
fetch: fakeFetch,
|
|
134
|
+
deps: {
|
|
135
|
+
createIssue: async input => {
|
|
136
|
+
const id = `00000000-0000-4000-8000-${String(++nextIssue).padStart(12, '0')}`;
|
|
137
|
+
if (input.parentId) { states.set(id, 'started'); childEvidence.push({ issueId: id, description: input.description ?? '' }); }
|
|
138
|
+
else { parentIssueId = id; states.set(id, 'started'); descriptions.set(id, input.description ?? ''); }
|
|
139
|
+
return id;
|
|
140
|
+
},
|
|
141
|
+
updateDescription: async input => { descriptions.set(input.issueId, input.description); },
|
|
142
|
+
} });
|
|
143
|
+
childIssueIds = result.childIssueIds;
|
|
144
|
+
event('breakdown-created', { parentIssueId, childIssueIds });
|
|
145
|
+
|
|
146
|
+
for (let index = 0; index < childIssueIds.length; index++) {
|
|
147
|
+
const issueId = childIssueIds[index]!;
|
|
148
|
+
const task = groundedPlan.tasks[index]!;
|
|
149
|
+
let captureUrl: string | undefined;
|
|
150
|
+
if (index === 1) {
|
|
151
|
+
const browser = await simBrowserHand('attach', issueId, runId);
|
|
152
|
+
browserRunId = browser.observedRunId;
|
|
153
|
+
browserActionRunIds = [...browser.observedBrowserActionRunIds];
|
|
154
|
+
if (!browserActionRunIds.includes(runId)) throw new Error('browser-act execution event did not consume the secretary runId');
|
|
155
|
+
const attached = browser.linear.attachments.find(item => item.issueId === issueId);
|
|
156
|
+
if (!attached) throw new Error('browser capture was not attached to its Linear child');
|
|
157
|
+
browserAttachment = { issueId, url: attached.url };
|
|
158
|
+
captureUrl = attached.url;
|
|
159
|
+
event('browser-capture-attached', { issueId, url: attached.url });
|
|
160
|
+
}
|
|
161
|
+
await updateLinearSecretaryProgress({ apiKey: 'ux-sim-key', parentIssueId, taskIssueId: issueId, taskTitle: task.title,
|
|
162
|
+
tasks: groundedPlan.tasks.map((item, taskIndex) => ({ issueId: childIssueIds[taskIndex]!, title: item.title })),
|
|
163
|
+
completedIssueIds, state: 'started', summary: `흡수 근거로 ${task.title}을 시작`, fetch: fakeFetch });
|
|
164
|
+
await updateLinearSecretaryProgress({ apiKey: 'ux-sim-key', parentIssueId, taskIssueId: issueId, taskTitle: task.title,
|
|
165
|
+
tasks: groundedPlan.tasks.map((item, taskIndex) => ({ issueId: childIssueIds[taskIndex]!, title: item.title })),
|
|
166
|
+
completedIssueIds, state: 'completed', summary: `${task.title} 완료`, ...(captureUrl ? { captureUrl } : {}), fetch: fakeFetch });
|
|
167
|
+
completedIssueIds = [...completedIssueIds, issueId];
|
|
168
|
+
event('subtask-absorbed', { issueId, completedIssueIds: [...completedIssueIds] });
|
|
169
|
+
}
|
|
170
|
+
const ledger = new DecisionLedger({ stateDir: join(root, 'state'), now: () => NOW,
|
|
171
|
+
resolveVersion: () => ({ released: '0.2.42', dev: '0.2.43-dev.0', codename: null }) });
|
|
172
|
+
const decision = ledger.raise({ title: '11-04 Linear 데모 게시 승인', category: 'publish',
|
|
173
|
+
scqa: { s: '데모 산출물이 준비됐다.', c: '외부 공개는 대표 승인이 필요하다.' },
|
|
174
|
+
options: [{ key: 'a', label: '승인', consequence: '공개를 진행한다' }, { key: 'b', label: '보류', consequence: '외부 공개를 멈춘다' }],
|
|
175
|
+
recommendation: { option: 'b', why: '이 장치는 승인 전 경계까지만 재현한다' }, raisedBy: { agent: 'OPT', track: 'O' },
|
|
176
|
+
refs: [parentIssueId, ...childIssueIds] });
|
|
177
|
+
const card = renderCard(ledger.show(decision.id));
|
|
178
|
+
approvalDecisionId = decision.id;
|
|
179
|
+
approvalCard = { id: decision.id, text: card.text, buttons: card.buttons };
|
|
180
|
+
approvalCardStatus = ledger.show(decision.id).status;
|
|
181
|
+
if (approvalCardStatus !== 'open') throw new Error(`approval card was not left open: ${approvalCardStatus}`);
|
|
182
|
+
event('approval-card-opened', { decisionId: decision.id, status: approvalCardStatus, localOnly: true });
|
|
183
|
+
return { replyCard: result.replyCard };
|
|
184
|
+
} catch (error) {
|
|
185
|
+
failure = error instanceof Error ? error.message : String(error);
|
|
186
|
+
event('failed', { message: failure });
|
|
187
|
+
throw error;
|
|
188
|
+
}
|
|
189
|
+
};
|
|
190
|
+
const handle = createTelegramAmbientMessageHandler({ runSecretary });
|
|
191
|
+
reply = await handle({ text: REQUEST, chatId: 'fake-chat', userId: 'fake-owner' });
|
|
192
|
+
if (reply === null) throw new Error('one-line Linear request was not routed');
|
|
193
|
+
if (failure) throw new Error(`integrated secretary scene failed: ${failure}`);
|
|
194
|
+
event('completed', { parentIssueId, childIssueIds, decisionId: approvalDecisionId });
|
|
195
|
+
const runRows = store.queryByDataKeys({ exactCategories: ['ux.sim.linear-secretary'], runIds: [runId] });
|
|
196
|
+
const linkedEvents = runRows.filter(row => row.event === 'completed');
|
|
197
|
+
const result: LinearSecretarySimulationResult = { runId, evidencePath: store.path, cleanup: () => rmSync(root, { recursive: true, force: true }),
|
|
198
|
+
reply, parentIssueId, intakeIds, childIssueIds, completedIssueIds,
|
|
199
|
+
childEvidence: childEvidence.map(item => ({ ...item, description: descriptions.get(item.issueId) ?? item.description })),
|
|
200
|
+
linearAttachments: attachments, progressCommentCount: comments.length, browserAttachment, browserRunId, browserActionRunIds, approvalCard, approvalCardStatus, externalCalls, runEvents: eventNames,
|
|
201
|
+
runEvidence: { category: 'ux.sim.linear-secretary', event: 'completed', persisted: linkedEvents.length === 1 } };
|
|
202
|
+
retainEvidence = true;
|
|
203
|
+
return result;
|
|
204
|
+
} finally {
|
|
205
|
+
try { store.close(); }
|
|
206
|
+
finally { if (!retainEvidence) rmSync(root, { recursive: true, force: true }); }
|
|
207
|
+
}
|
|
208
|
+
}
|
|
@@ -1,41 +1,96 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version":
|
|
2
|
+
"version": 2,
|
|
3
3
|
"runEvidence": {
|
|
4
|
-
"scope": "ScenarioV0 YAML runs only; catalog entries reference reusable devices/tests, and list/show do not execute them",
|
|
4
|
+
"scope": "ScenarioV0 YAML runs only; catalog entries reference reusable devices/tests, and list/show/devices do not execute them",
|
|
5
5
|
"runId": "uuid per execution",
|
|
6
6
|
"event": { "category": "ux.sim.scenario", "name": "completed" },
|
|
7
|
-
"persistence": "the isolated test instance logs/logs.db;
|
|
7
|
+
"persistence": "ScenarioV0 and device logsRecorded=yes refer to rows persisted in the isolated test instance logs/logs.db (not production ~/.elanous/logs.db); eventNames lists persisted category/event pairs only, while debug-spy-only observations do not count.",
|
|
8
8
|
"artifact": "<test-state>/ux-sim/evidence/<scenario>-seed-<seed>-run-<runId>.json"
|
|
9
9
|
},
|
|
10
10
|
"devices": [
|
|
11
|
-
{
|
|
12
|
-
{
|
|
13
|
-
{
|
|
14
|
-
{
|
|
15
|
-
{
|
|
16
|
-
{
|
|
17
|
-
{
|
|
18
|
-
{
|
|
19
|
-
{
|
|
20
|
-
{
|
|
21
|
-
{
|
|
22
|
-
{
|
|
23
|
-
{
|
|
24
|
-
{
|
|
25
|
-
{
|
|
11
|
+
{"id": "fake-llm", "name": "Fake LLM", "implementation": ["src/ux-sim/fake-llm.ts"], "tests": ["src/ux-sim/fake-llm.test.ts"], "target": "LLM response and streaming boundary", "inputs": ["fixed or scripted response", "delay", "error/status"], "observations": ["captured calls", "stream chunks", "completion or failure"], "entryCommands": ["bun test src/ux-sim/fake-llm.test.ts"], "logsRecorded": "no", "eventNames": [], "recentUse": null},
|
|
12
|
+
{"id": "fake-executable", "name": "Fake executable and PATH", "implementation": ["src/ux-sim/fake-bin.ts"], "tests": ["src/ux-sim/fake-bin.test.ts"], "target": "external executable process boundary", "inputs": ["stdout", "stderr", "exit code", "signal", "delay", "argv"], "observations": ["spawn arguments", "output", "exit result"], "entryCommands": ["bun test src/ux-sim/fake-bin.test.ts"], "logsRecorded": "no", "eventNames": [], "recentUse": null},
|
|
13
|
+
{"id": "fake-github", "name": "Fake GitHub CLI and API", "implementation": ["src/ux-sim/fake-gh.ts"], "tests": ["src/ux-sim/fake-gh.test.ts"], "target": "PR list/edit/review/merge responses", "inputs": ["PR records", "pagination", "injected API failure"], "observations": ["requested operations", "deterministic response", "mutated fake state"], "entryCommands": ["bun test src/ux-sim/fake-gh.test.ts"], "logsRecorded": "no", "eventNames": [], "recentUse": null},
|
|
14
|
+
{"id": "fake-kubectl", "name": "Fake kubectl", "implementation": ["src/ux-sim/fake-kubectl.ts"], "tests": ["src/ux-sim/fake-kubectl.test.ts"], "target": "Pod and Job query/termination boundary", "inputs": ["Pod/Job fixtures", "query result or failure"], "observations": ["kubectl argv", "returned resource state", "failure"], "entryCommands": ["bun test src/ux-sim/fake-kubectl.test.ts"], "logsRecorded": "no", "eventNames": [], "recentUse": null},
|
|
15
|
+
{"id": "fake-herdr", "name": "Fake herdr", "implementation": ["src/ux-sim/fake-herdr.ts"], "tests": ["src/ux-sim/fake-herdr.test.ts"], "target": "pane lifecycle and report-agent handoff", "inputs": ["pane transitions", "missing report", "timeout"], "observations": ["pane state", "handoff result", "timeout classification"], "entryCommands": ["bun test src/ux-sim/fake-herdr.test.ts"], "logsRecorded": "no", "eventNames": [], "recentUse": null},
|
|
16
|
+
{"id": "fake-clock", "name": "Fake clock", "implementation": ["src/ux-sim/fake-clock.ts"], "tests": ["src/ux-sim/fake-clock.test.ts"], "target": "process-local time and timer boundary", "inputs": ["clock advance", "scheduled callback"], "observations": ["elapsed time", "fired timers"], "entryCommands": ["bun test src/ux-sim/fake-clock.test.ts"], "logsRecorded": "no", "eventNames": [], "recentUse": null},
|
|
17
|
+
{"id": "temp-git-remote", "name": "Temporary Git remote", "implementation": ["src/ux-sim/temp-git-remote.ts"], "tests": ["src/ux-sim/temp-git-remote.test.ts"], "target": "real local git bare/clone boundary without GitHub", "inputs": ["temporary refs and commits"], "observations": ["local remote state", "branch and commit result"], "entryCommands": ["bun test src/ux-sim/temp-git-remote.test.ts"], "logsRecorded": "no", "eventNames": [], "recentUse": null},
|
|
18
|
+
{"id": "fake-land-queue", "name": "Fake landing queue", "implementation": ["src/ux-sim/fake-land-queue.ts"], "tests": ["src/ux-sim/fake-land-queue.test.ts"], "target": "landing train scheduling", "inputs": ["load", "gate verdict", "priority", "cut window", "conflict"], "observations": ["queue choice", "wait/reject reason", "slot availability"], "entryCommands": ["bun test src/ux-sim/fake-land-queue.test.ts"], "logsRecorded": "no", "eventNames": [], "recentUse": null},
|
|
19
|
+
{"id": "scenario-runner", "name": "Scenario file runner and human CLI", "implementation": ["src/ux-sim/scenario.ts", "src/ux-sim/mock-scenario-catalog.ts", "scripts/ux-sim.ts", "scenarios/ux-sim/provider-4xx-no-provider.yaml"], "tests": ["src/ux-sim/scenario.test.ts", "src/ux-sim/mock-scenario-catalog.test.ts"], "target": "registered test-only provider-response fault through the real Codex path; catalog list/show CLI", "inputs": ["scenario file", "seed", "registered HTTP/network fault", "MS-id"], "observations": ["widget snapshot", "debug event", "persistent logs.db row", "runId evidence artifact", "catalog listing/detail"], "entryCommands": ["bun scripts/ux-sim.ts list", "bun bin/elanous.mjs --test sim run scenarios/ux-sim/provider-4xx-no-provider.yaml"], "logsRecorded": "conditional", "eventNames": ["llm.codex/request-rejected-shape", "ux.sim.scenario/completed"], "recentUse": null},
|
|
20
|
+
{"id": "draft-inventory", "name": "Draft triage inventory simulator", "implementation": ["src/ux-sim/draft-inventory-builder.ts", "src/ux-sim/scenario.ts"], "tests": ["src/ux-sim/draft-inventory-builder.test.ts", "src/ux-sim/scenario.test.ts"], "target": "production draft triage decision distribution and protected/running safety", "inputs": ["deterministic 200-draft inventory", "merged twins", "open duplicates", "harvest references", "file lineage", "labels", "run state", "age"], "observations": ["real decideDraft/draftClaimState decisions", "scenario screen summary", "runId-scoped isolated test logs.db events", "evidence artifact"], "entryCommands": ["bun test src/ux-sim/draft-inventory-builder.test.ts src/ux-sim/scenario.test.ts"], "logsRecorded": "yes", "eventNames": ["ux.sim.draft-inventory/assessed", "ux.sim.scenario/completed"], "recentUse": null},
|
|
21
|
+
{"id": "linear-secretary", "name": "Integrated Linear secretary simulation", "implementation": ["src/ux-sim/linear-secretary.ts"], "tests": ["src/ux-sim/linear-secretary.test.ts"], "target": "test-only Telegram ambient intake through production intake/decision/browser coordinators with fake Linear and persisted isolated run evidence", "inputs": ["one-line request", "fake Linear GraphQL responses", "isolated browser capture"], "observations": ["child issues and progress", "browser attachment", "approval card", "runId-scoped isolated test logs.db events", "external calls remain simulated"], "entryCommands": ["bun test src/ux-sim/linear-secretary.test.ts"], "logsRecorded": "yes", "eventNames": ["ux.sim.linear-secretary/completed", "ux.sim.linear-secretary/browser-capture-attached", "ux.sim.linear-secretary/approval-card-opened"], "recentUse": null},
|
|
22
|
+
{"id": "release-graph-rig", "name": "Release graph simulation rig", "implementation": ["src/ux-sim/release-sim-rig.ts", "scripts/release-loop/gate-node-sim.ts", "scripts/release-loop/gate-autoheal-sim-evidence.ts", "scenarios/ux-sim/release-sim-rig.yaml"], "tests": ["src/ux-sim/release-sim-rig.test.ts", "scripts/release-loop/release-graph-fanout-mock.test.ts", "scripts/release-loop/gate-flow-sim.test.ts", "scripts/release-loop/gate-node-sim.test.ts"], "target": "release graph routing, fan-out joins, resume and failure paths", "inputs": ["node outcomes", "branch overlap delays", "evidence", "resume state"], "observations": ["visited nodes", "fan-out branch results", "start-time overlap", "unexpected edges", "ledger events", "final graph state"], "entryCommands": ["bun test scripts/release-loop/release-graph-fanout-mock.test.ts", "bun test src/ux-sim/release-sim-rig.test.ts", "bun bin/elanous.mjs --test sim run scenarios/ux-sim/release-sim-rig.yaml"], "logsRecorded": "conditional", "eventNames": [], "recentUse": null},
|
|
23
|
+
{"id": "graph-engine-selector", "name": "Graph engine selection simulator", "implementation": ["src/ux-sim/graph-engine-sim.ts"], "tests": ["src/ux-sim/graph-engine-sim.test.ts"], "target": "production graph edge selection and growth policy from a synthetic component outcome", "inputs": ["graph", "component exit label", "optional growth"], "observations": ["selected edge", "growth applied", "source graph unchanged"], "entryCommands": ["bun test src/ux-sim/graph-engine-sim.test.ts"], "logsRecorded": "no", "eventNames": [], "recentUse": null},
|
|
24
|
+
{"id": "tui-interaction", "name": "TUI interaction and rendering", "implementation": ["src/ux-sim/interaction.ts", "src/ux-sim/turn-states.ts", "src/ux-sim/render-frame.ts", "src/ux-sim/headless-tui.ts", "src/ux-sim/input-history.ts", "src/ux-sim/slash-menu-frames.ts", "src/ux-sim/mock-seat-pty-frame.ts", "src/ux-sim/mock-seat-pty-frame-child.ts", "src/ux-sim/mock-seat-pty-sequence.ts", "src/ux-sim/mock-seat-pty-sequence-child.ts", "src/ux-sim/pty-key-modifiers-device.ts", "src/ux-sim/tty-foreground-steal-child.ts"], "tests": ["src/ux-sim/interaction.test.ts", "src/ux-sim/turn-states.test.ts", "src/ux-sim/render-frame.test.ts", "src/ux-sim/headless-tui.test.ts", "src/ux-sim/input-history.test.ts", "src/ux-sim/slash-menu-frames.test.ts", "src/ux-sim/mock-seat-pty-frame.test.ts", "src/ux-sim/mock-seat-pty-sequence.test.ts", "src/ux-sim/pty-key-modifiers-device.test.ts"], "target": "TUI event, state, frame, input history and PTY boundaries", "inputs": ["keys", "turn phase", "PTY bytes", "frame dimensions", "queued input"], "observations": ["production renderer output", "state transitions", "PTY input/output", "event history"], "entryCommands": ["bun test src/ux-sim/interaction.test.ts src/ux-sim/turn-states.test.ts src/ux-sim/render-frame.test.ts src/ux-sim/headless-tui.test.ts src/ux-sim/input-history.test.ts src/ux-sim/slash-menu-frames.test.ts src/ux-sim/mock-seat-pty-frame.test.ts src/ux-sim/mock-seat-pty-sequence.test.ts src/ux-sim/pty-key-modifiers-device.test.ts"], "logsRecorded": "no", "eventNames": [], "recentUse": null},
|
|
25
|
+
{"id": "fault-injection", "name": "Fault injection devices", "implementation": ["src/ux-sim/fault-cred-expiry.ts", "src/ux-sim/fault-glm-no-credential.ts", "src/ux-sim/fault-needs-human-reason-repair.ts", "src/ux-sim/fault-nextmove-dispatch.ts", "src/ux-sim/fault-pod-child-result.ts", "src/ux-sim/fault-pod-codex-503.ts", "src/ux-sim/fault-pod-death.ts", "src/ux-sim/fault-pool-cap.ts", "src/ux-sim/fault-scope-escape-lift.ts", "src/ux-sim/fault-sqlite-busy.ts", "src/ux-sim/fault-tui-400-autoheal.ts", "src/ux-sim/gate-shard-host-reroute.ts"], "tests": ["src/ux-sim/fault-cred-expiry.test.ts", "src/ux-sim/fault-glm-no-credential.test.ts", "src/ux-sim/fault-needs-human-reason-repair.test.ts", "src/ux-sim/fault-nextmove-dispatch.test.ts", "src/ux-sim/fault-pod-child-result.test.ts", "src/ux-sim/fault-pod-codex-503.test.ts", "src/ux-sim/fault-pod-death.test.ts", "src/ux-sim/fault-pool-cap.test.ts", "src/ux-sim/fault-scope-escape-lift.test.ts", "src/ux-sim/fault-sqlite-busy.test.ts", "src/ux-sim/fault-tui-400-autoheal.test.ts", "src/ux-sim/gate-shard-host-reroute.test.ts"], "target": "credential, Pod, pool, routing, autoheal, scope and persistence failure boundaries", "inputs": ["explicit fault kind", "isolated fixture", "clock or resource outcome"], "observations": ["production decision function output", "reason/event", "recovery or refusal"], "entryCommands": ["bun test src/ux-sim/fault-cred-expiry.test.ts src/ux-sim/fault-glm-no-credential.test.ts src/ux-sim/fault-needs-human-reason-repair.test.ts src/ux-sim/fault-nextmove-dispatch.test.ts src/ux-sim/fault-pod-child-result.test.ts src/ux-sim/fault-pod-codex-503.test.ts src/ux-sim/fault-pod-death.test.ts src/ux-sim/fault-pool-cap.test.ts src/ux-sim/fault-scope-escape-lift.test.ts src/ux-sim/fault-sqlite-busy.test.ts src/ux-sim/fault-tui-400-autoheal.test.ts src/ux-sim/gate-shard-host-reroute.test.ts"], "logsRecorded": "no", "eventNames": [], "recentUse": null},
|
|
26
|
+
{"id": "product-devices", "name": "Product and task-agent devices", "implementation": ["src/ux-sim/boot-daemon-tools-pty-shell-device.ts", "src/ux-sim/cli-config-audit-device.ts", "src/ux-sim/computer-use.ts", "src/ux-sim/dashboard-event-loop-stall-monitor-device.ts", "src/ux-sim/event-monkey.ts", "src/ux-sim/goal-device.ts", "src/ux-sim/goal-interim-trace.ts", "src/ux-sim/onboarding-first-run-device.ts", "src/ux-sim/resume-picker-device.ts", "src/ux-sim/skills-tools-shell-device.ts", "src/ux-sim/subagent-tools-device.ts", "src/ux-sim/task-agent-parent-host-device.ts", "src/ux-sim/task-agent-rejudge-on-head-device.ts", "src/ux-sim/task-orchestrator-surfaces-self-implement-pod-device.ts"], "tests": ["src/ux-sim/boot-daemon-tools-pty-shell-device.test.ts", "src/ux-sim/cli-config-audit-device.test.ts", "src/ux-sim/computer-use.test.ts", "src/ux-sim/dashboard-event-loop-stall-monitor-device.test.ts", "src/ux-sim/event-monkey.test.ts", "src/ux-sim/goal-device.test.ts", "src/ux-sim/onboarding-first-run-device.test.ts", "src/ux-sim/resume-picker-device.test.ts", "src/ux-sim/self-implement-author-clarification.test.ts", "src/ux-sim/skills-tools-shell-device.test.ts", "src/ux-sim/subagent-tools-device.test.ts", "src/ux-sim/task-agent-parent-host-device.test.ts", "src/ux-sim/task-agent-rejudge-on-head-device.test.ts", "src/ux-sim/task-orchestrator-surfaces-self-implement-pod-device.test.ts"], "target": "selected product, PTY, agent and orchestration seams", "inputs": ["UI state", "task outcome", "host/review decision", "tool result"], "observations": ["rendered state", "decision result", "event sequence", "stop reason"], "entryCommands": ["bun test src/ux-sim/boot-daemon-tools-pty-shell-device.test.ts src/ux-sim/cli-config-audit-device.test.ts src/ux-sim/computer-use.test.ts src/ux-sim/dashboard-event-loop-stall-monitor-device.test.ts src/ux-sim/event-monkey.test.ts src/ux-sim/goal-device.test.ts src/ux-sim/onboarding-first-run-device.test.ts src/ux-sim/resume-picker-device.test.ts src/ux-sim/self-implement-author-clarification.test.ts src/ux-sim/skills-tools-shell-device.test.ts src/ux-sim/subagent-tools-device.test.ts src/ux-sim/task-agent-parent-host-device.test.ts src/ux-sim/task-agent-rejudge-on-head-device.test.ts src/ux-sim/task-orchestrator-surfaces-self-implement-pod-device.test.ts"], "logsRecorded": "no", "eventNames": [], "recentUse": null},
|
|
27
|
+
{"id": "turn-throw-sim", "name": "Delayed dashboard turn-body throw", "implementation": ["src/ux-sim/turn-throw-sim.ts", "src/dashboard/input/chat-main-plain-turn-runtime.ts", "src/dashboard/turn-busy-teardown.ts"], "tests": ["src/ux-sim/turn-throw-sim.test.ts", "src/dashboard/turn-busy-teardown.test.ts"], "target": "production plain-turn stage failure, turn-threw logging and busy teardown", "inputs": ["turn stage", "delay milliseconds", "queued external input"], "observations": ["in-memory debug capture of tui.turn/turn-threw phase=turn:<stage> (not persisted to test logs.db)", "turn.state idle", "one queued input delivered"], "entryCommands": ["bun test src/ux-sim/turn-throw-sim.test.ts src/dashboard/turn-busy-teardown.test.ts"], "logsRecorded": "no", "eventNames": [], "recentUse": null},
|
|
28
|
+
{"id": "first-run-and-seminar", "name": "First-run authoring and seminar scenarios", "implementation": ["src/ux-sim/mock-authoring-first-run.ts", "src/ux-sim/mock-authoring-first-run-child.ts", "src/ux-sim/seminar-rehearsal.ts", "src/ux-sim/classic-tui-seat-scenarios.ts", "src/ux-sim/next-tui-seat-scenarios.ts", "src/ux-sim/session-id-seed.ts"], "tests": ["src/ux-sim/mock-authoring-first-run.test.ts", "src/ux-sim/seminar-rehearsal.test.ts", "src/ux-sim/classic-tui-seat-scenarios.test.ts", "src/ux-sim/next-tui-seat-scenarios.test.ts"], "target": "first-run, authoring and scripted TUI flows", "inputs": ["mock author response", "scenario steps", "seeded session id"], "observations": ["step result", "TUI snapshot", "completion and failure markers"], "entryCommands": ["bun test src/ux-sim/mock-authoring-first-run.test.ts src/ux-sim/seminar-rehearsal.test.ts src/ux-sim/classic-tui-seat-scenarios.test.ts src/ux-sim/next-tui-seat-scenarios.test.ts"], "logsRecorded": "no", "eventNames": [], "recentUse": null},
|
|
29
|
+
{"id": "support-fakes", "name": "Additional fake and in-process CLI fixtures", "implementation": ["test/ux-sim/aimock-local.ts", "src/ux-sim/in-process-cli.ts", "src/ux-sim/browser-hand.ts", "src/ux-sim/fake-browser-page.ts", "src/ux-sim/fake-linear-device.ts", "src/ux-sim/service-key-setup.ts", "src/ux-sim/term-slash-device.ts"], "tests": ["src/ux-sim/aimock-local.test.ts", "src/ux-sim/in-process-cli.test.ts", "src/ux-sim/browser-hand.test.ts", "src/ux-sim/service-key-setup.test.ts", "src/ux-sim/term-slash-device.test.ts", "test/telegram-surface-hitl.test.ts"], "target": "local fake LLM server, browser/linear fakes, service-key setup, terminal slash device and test CLI instance", "inputs": ["test state root", "fake endpoint response", "temporary git repository", "browser/page and service state"], "observations": ["isolated CLI result", "server requests", "repository state", "fake device interactions"], "entryCommands": ["bun test src/ux-sim/aimock-local.test.ts", "bun test test/telegram-surface-hitl.test.ts"], "logsRecorded": "no", "eventNames": [], "recentUse": null}
|
|
26
30
|
],
|
|
27
31
|
"scenarios": [
|
|
28
|
-
{
|
|
29
|
-
{
|
|
30
|
-
{
|
|
31
|
-
{
|
|
32
|
-
{
|
|
33
|
-
{
|
|
34
|
-
{
|
|
32
|
+
{"id": "UX-MS-01", "name": "Child report deficit with later harvest", "kind": "report-deficit", "device": "fault-injection", "implementation": ["src/ux-sim/fault-pod-child-result.ts"], "tests": ["src/ux-sim/fault-pod-child-result.test.ts"], "trigger": "A child completes with report-deficit while a later child has a harvestable PR.", "observe": ["failure classification remains report-deficit", "Pod terminal data stays attached", "later harvest remains independent"], "expected": "report-deficit is preserved and harvest result is visible"},
|
|
33
|
+
{"id": "UX-MS-02", "name": "Release gate regression routing", "kind": "gate-regression", "device": "release-graph-rig", "implementation": ["src/ux-sim/release-sim-rig.ts", "scripts/release-loop/gate-node-sim.ts", "scripts/release-loop/gate-autoheal-sim-evidence.ts", "scenarios/ux-sim/release-sim-rig.yaml"], "tests": ["src/ux-sim/release-sim-rig.test.ts", "scripts/release-loop/release-graph-fanout-mock.test.ts", "scripts/release-loop/gate-node-sim.test.ts", "scripts/release-loop/gate-flow-sim.test.ts"], "trigger": "Inject release node outcomes including concurrent warning and required branches.", "observe": ["visited graph nodes", "fan-out join branch outcomes", "start-time overlap", "unexpected edge list", "terminal status"], "expected": "warning failures remain visible but pass the join; required failures route to failed"},
|
|
34
|
+
{"id": "RELEASE-GRAPH-PREPUB-FANOUT", "name": "Pre-gate and pre-prepare required/warning fan-out", "kind": "release-graph-fanout", "device": "release-graph-rig", "implementation": ["graphs/release/release-loop.yaml", "src/ux-sim/release-sim-rig.ts", "scenarios/ux-sim/release-sim-rig.yaml"], "tests": ["scripts/release-loop/release-graph-fanout-mock.test.ts", "src/ux-sim/release-sim-rig.test.ts"], "trigger": "Run export-check with prefetch and mac-smoke with pwa concurrently before gate/prepare.", "observe": ["branch start-time overlap", "warning branch failure preserved", "required branch failure at join", "join outcome and next node"], "expected": "prefetch/mac-smoke failures continue; export-check/pwa failures route through release failure"},
|
|
35
|
+
{"id": "UX-MS-03", "name": "Review cap and no-verdict boundary", "kind": "review-cap-no-verdict", "device": "product-devices", "implementation": ["src/ux-sim/task-agent-rejudge-on-head-device.ts"], "tests": ["src/ux-sim/task-agent-rejudge-on-head-device.test.ts"], "trigger": "Stored review count reaches the cap or a review result is absent.", "observe": ["review request count", "verdict classification", "decision reason"], "expected": "the cap blocks another request and missing verdict stays unmeasured"},
|
|
36
|
+
{"id": "UX-MS-04", "name": "Pod credential failure", "kind": "pod-auth-failure", "device": "fault-injection", "implementation": ["src/ux-sim/fault-glm-no-credential.ts", "src/ux-sim/fault-pod-codex-503.ts"], "tests": ["src/ux-sim/fault-glm-no-credential.test.ts", "src/ux-sim/fault-pod-codex-503.test.ts"], "trigger": "Remove the child credential or inject a Codex 401/503 response.", "observe": ["credential readiness", "provider error event", "launch/recovery disposition"], "expected": "credential absence and temporary provider unavailability remain distinguishable"},
|
|
37
|
+
{"id": "UX-MS-05", "name": "TUI and gate worker stall", "kind": "stall", "device": "product-devices", "implementation": ["src/ux-sim/dashboard-event-loop-stall-monitor-device.ts"], "tests": ["src/ux-sim/dashboard-event-loop-stall-monitor-device.test.ts", "scripts/release-loop/gate-pod-stall.test.ts"], "trigger": "Delay the UI event loop or stop gate shard output.", "observe": ["typing lag/stall sample", "stalled shard reason", "bounded completion"], "expected": "stall is named and unrelated work can finish"},
|
|
38
|
+
{"id": "UX-MS-06", "name": "Landing train rejection", "kind": "train-rejection", "device": "fake-land-queue", "implementation": ["src/ux-sim/fake-land-queue.ts"], "tests": ["src/ux-sim/fake-land-queue.test.ts"], "trigger": "Inject a full queue, failed gate, conflicting head or closed cut window.", "observe": ["queue decision", "rejection reason", "slot state"], "expected": "the queue refuses with a reason and does not grant a slot"},
|
|
39
|
+
{"id": "UX-MS-07", "name": "Pod pool capacity and query errors", "kind": "pod-pool-error", "device": "fault-injection", "implementation": ["src/ux-sim/fault-pool-cap.ts", "src/ux-sim/fake-kubectl.ts"], "tests": ["src/ux-sim/fault-pool-cap.test.ts", "src/ux-sim/fake-kubectl.test.ts"], "trigger": "Omit a pool limit, saturate members, or inject a kubectl query failure.", "observe": ["recommended concurrency", "limitedBy", "query error"], "expected": "known running counts are capped; a query failure preserves unknown occupancy and emits no concurrency recommendation"},
|
|
40
|
+
{"id": "UX-MS-08", "name": "Delayed dashboard turn throw and queue teardown", "kind": "turn-throw-teardown", "device": "turn-throw-sim", "implementation": ["src/ux-sim/turn-throw-sim.ts", "src/dashboard/input/chat-main-plain-turn-runtime.ts", "src/dashboard/turn-busy-teardown.ts"], "tests": ["src/ux-sim/turn-throw-sim.test.ts", "src/dashboard/turn-busy-teardown.test.ts"], "trigger": "Configure a turn:<stage> throw with an optional delay while one external input is queued.", "observe": ["tui.turn turn-threw phase=turn:<stage>", "turn.state idle", "one queued input delivered"], "expected": "the production plain-turn catch logs the configured stage, teardown restores idle, and the queued input is delivered once"},
|
|
41
|
+
{"id": "UX-MS-09", "name": "Draft triage 200-case safety inventory", "kind": "draft-inventory-triage", "device": "draft-inventory", "implementation": ["src/ux-sim/draft-inventory-builder.ts", "src/ux-sim/scenario.ts"], "tests": ["src/ux-sim/draft-inventory-builder.test.ts", "src/ux-sim/scenario.test.ts"], "trigger": "Evaluate deterministic twin, duplicate, harvest, landed-file, protected-label, running, and stale draft cases.", "observe": ["200 production decideDraft results", "draftClaimState for running samples", "protected/running close count", "runId-linked assessment and completion events"], "expected": "scenario completes PASS with the intended case distribution, no mismatches, and no protected/running draft closed"},
|
|
42
|
+
{"id": "UX-MS-11", "name": "Codex request-shape 400 recovery boundary", "kind": "provider-request-rejected", "device": "scenario-runner", "implementation": ["scenarios/ux-sim/provider-4xx-no-provider.yaml", "src/ux-sim/scenario.ts"], "tests": ["src/ux-sim/scenario.test.ts"], "trigger": "Run the test-universe ScenarioV0 fixture with two injected HTTP 400 responses for the Codex request-shape boundary.", "observe": ["llm.codex/request-rejected-shape debug event", "response status and count", "ScenarioV0 completion event and runId evidence artifact"], "expected": "The isolated scenario records one request-rejected-shape event and one runId-scoped completion row."}
|
|
35
43
|
],
|
|
44
|
+
"candidateAudit": {
|
|
45
|
+
"source": "~/elanous-hq/seat-state/OP/MOCK-DEVICES-INVENTORY-1031.md §3 + targeted fake-Telegram consumer scan",
|
|
46
|
+
"baseCommit": "533845484cf2c901cfee902a3586354278e7cae8",
|
|
47
|
+
"sourceRows": 35,
|
|
48
|
+
"existingPaths": 34,
|
|
49
|
+
"excludedPaths": 27,
|
|
50
|
+
"sourceExclusions": [
|
|
51
|
+
{"path": "scenarios/ux-sim/MK-MS-01.yaml", "reason": "Separately registered by open PR #34039 (MK-MS-01 E4 sequence); keep it outside this 33-candidate registration to avoid duplicate catalog ownership."}
|
|
52
|
+
],
|
|
53
|
+
"omissionCheck": {"requiredPaths": ["test/ux-sim/aimock-local.ts", "test/telegram-surface-hitl.test.ts"], "missingPaths": []},
|
|
54
|
+
"candidates": [
|
|
55
|
+
{"path": "scripts/tui-sim-bench.ts", "disposition": "excluded", "entryCommand": "not-applicable: benchmark requires an explicitly selected goal and provider", "logsRecorded": "no", "logsDetail": "Benchmark is not run by catalog discovery.", "excludeReason": "Measurement/benchmark tool, not a mock device."},
|
|
56
|
+
{"path": "scripts/tui-sim.ts", "disposition": "excluded", "entryCommand": "bun scripts/tui-sim.ts start --id mock-catalog-example --test", "logsRecorded": "conditional", "logsDetail": "Writes its own simulation artifacts, not ScenarioV0 logs.", "excludeReason": "Standalone TUI driver; separate artifact contract."},
|
|
57
|
+
{"path": "scripts/ux-sim.ts", "disposition": "already-indexed", "entryCommand": "bun scripts/ux-sim.ts list", "logsRecorded": "conditional", "logsDetail": "ScenarioV0 runs log completion; list/show are read-only.", "deviceId": "scenario-runner"},
|
|
58
|
+
{"path": "scripts/voice-dogfood-sim.ts", "disposition": "excluded", "entryCommand": "bun run scripts/voice-dogfood-sim.ts", "logsRecorded": "no", "logsDetail": "No ScenarioV0 logs.db contract.", "excludeReason": "Product dogfood script, not a reusable fake-device contract."},
|
|
59
|
+
{"path": "scripts/voice-pwa-sim.ts", "disposition": "excluded", "entryCommand": "bun run scripts/voice-pwa-sim.ts", "logsRecorded": "no", "logsDetail": "No ScenarioV0 logs.db contract.", "excludeReason": "PWA voice dogfood script, not an isolated reusable device."},
|
|
60
|
+
{"path": "scripts/release-loop/gate-autoheal-sim-evidence.ts", "disposition": "device", "entryCommand": "bun scripts/release-loop/gate-autoheal-sim-evidence.ts", "logsRecorded": "yes", "logsDetail": "Writes release-loop events to isolated logs.db with runId.", "deviceId": "release-graph-rig", "scenarioIds": ["UX-MS-02"]},
|
|
61
|
+
{"path": "scripts/release-loop/gate-node-sim.ts", "disposition": "device", "entryCommand": "bun test scripts/release-loop/gate-node-sim.test.ts", "logsRecorded": "no", "logsDetail": "Pure decision result asserted by test; no persistent event.", "deviceId": "release-graph-rig", "scenarioIds": ["UX-MS-02"]},
|
|
62
|
+
{"path": "scripts/release-loop/tui-sim-node.ts", "disposition": "excluded", "entryCommand": "called by release-loop tui-sim graph node; no standalone CLI", "logsRecorded": "no", "logsDetail": "Node result/artifact only.", "excludeReason": "Graph-node adapter for TUI measurements, not an independent mock device."},
|
|
63
|
+
{"path": "scripts/lib/pwa-scenarios/acp-replay.ts", "disposition": "excluded", "entryCommand": "bun test scripts/lib/pwa-scenarios/acp-replay.test.ts", "logsRecorded": "no", "logsDetail": "Browser/E2E cell result, not ScenarioV0 logs.", "excludeReason": "Live-browser PWA runner support; not a mock device."},
|
|
64
|
+
{"path": "scripts/lib/pwa-scenarios/cdp-driver.ts", "disposition": "excluded", "entryCommand": "bun scripts/pwa-scenarios.ts --base-url http://127.0.0.1:31455 --shots ./shots", "logsRecorded": "no", "logsDetail": "Writes optional screenshots and cell output through the PWA runner; no logs.db row.", "excludeReason": "Live-browser PWA runner support; not a mock device."},
|
|
65
|
+
{"path": "scripts/lib/pwa-scenarios/runner.ts", "disposition": "excluded", "entryCommand": "bun test scripts/lib/pwa-scenarios/runner.test.ts", "logsRecorded": "no", "logsDetail": "Browser/E2E cell result, not ScenarioV0 logs.", "excludeReason": "Live-browser PWA runner support; not a mock device."},
|
|
66
|
+
{"path": "scripts/lib/pwa-scenarios/scenarios.ts", "disposition": "excluded", "entryCommand": "bun test scripts/lib/pwa-scenarios/scenarios.test.ts", "logsRecorded": "no", "logsDetail": "Browser/E2E cell result, not ScenarioV0 logs.", "excludeReason": "Live-browser PWA runner support; not a mock device."},
|
|
67
|
+
{"path": "test/fixtures/acp-initialize-stub.ts", "disposition": "excluded", "entryCommand": "bun test test/acp-client-observability.test.ts", "logsRecorded": "no", "logsDetail": "The consuming ACP test asserts protocol behavior; fixture emits no app logs.db row.", "excludeReason": "Protocol fixture only; no independent scenario entry."},
|
|
68
|
+
{"path": "test/fixtures/mock-lsp-server.ts", "disposition": "excluded", "entryCommand": "bun test test/lsp-client.test.ts test/lsp-operations-dispatch.test.ts", "logsRecorded": "no", "logsDetail": "The consuming LSP tests assert protocol behavior; fixture emits no app logs.db row.", "excludeReason": "Protocol fixture only; no independent scenario entry."},
|
|
69
|
+
{"path": "test/helpers/intake-fake-repo.ts", "disposition": "excluded", "entryCommand": "bun test test/intake-plane-check-common-name.test.ts", "logsRecorded": "no", "logsDetail": "The consumer test asserts temporary-repository behavior.", "excludeReason": "Test helper, not a simulation device."},
|
|
70
|
+
{"path": "test/ux-sim/aimock-local.ts", "disposition": "already-indexed", "entryCommand": "bun test src/ux-sim/aimock-local.test.ts", "logsRecorded": "no", "logsDetail": "Test server interactions are asserted by tests, not app logs.db.", "deviceId": "support-fakes"},
|
|
71
|
+
{"path": "scenarios/dashboard-default.yaml", "disposition": "excluded", "entryCommand": "not-applicable: consumed by the Playground renderer; no direct scenario CLI", "logsRecorded": "runner-dependent", "logsDetail": "No standalone command or UX ScenarioV0 completion contract.", "excludeReason": "Graph/playground scenario, outside UX mock-device scope."},
|
|
72
|
+
{"path": "scenarios/heap-graph.yaml", "disposition": "excluded", "entryCommand": "not-applicable: consumed by the Playground renderer; no direct scenario CLI", "logsRecorded": "runner-dependent", "logsDetail": "No standalone command or UX ScenarioV0 completion contract.", "excludeReason": "Graph/playground scenario, outside UX mock-device scope."},
|
|
73
|
+
{"path": "scenarios/iul-timeline-viewer.yaml", "disposition": "excluded", "entryCommand": "not-applicable: consumed by the IUL timeline viewer; no direct scenario CLI", "logsRecorded": "runner-dependent", "logsDetail": "No standalone command or UX ScenarioV0 completion contract.", "excludeReason": "Graph/playground scenario, outside UX mock-device scope."},
|
|
74
|
+
{"path": "scenarios/ux-sim/provider-4xx-no-provider.yaml", "disposition": "scenario", "entryCommand": "bun bin/elanous.mjs --test sim run scenarios/ux-sim/provider-4xx-no-provider.yaml", "logsRecorded": "yes", "logsDetail": "ux.sim.scenario/completed in test logs.db; expects llm.codex/request-rejected-shape.", "deviceId": "scenario-runner", "scenarioIds": ["UX-MS-11"]},
|
|
75
|
+
{"path": "scenarios/ux-sim/release-sim-rig.yaml", "disposition": "already-indexed", "entryCommand": "bun bin/elanous.mjs --test sim run scenarios/ux-sim/release-sim-rig.yaml", "logsRecorded": "yes", "logsDetail": "ScenarioV0 completion row is stored in isolated test logs.db; the evidence artifact is a separate JSON file.", "deviceId": "release-graph-rig", "scenarioIds": ["UX-MS-02", "RELEASE-GRAPH-PREPUB-FANOUT"]},
|
|
76
|
+
{"path": "tests/scenarios/4provider-feature-impl.yaml", "disposition": "excluded", "entryCommand": "eln repl --new --json --scenario tests/scenarios/4provider-feature-impl.yaml", "logsRecorded": "runner-dependent", "logsDetail": "REPL logs are separate; some scenarios invoke live models.", "excludeReason": "REPL/provider workflow, not reusable mock device; separate runner or live model dependency."},
|
|
77
|
+
{"path": "tests/scenarios/capability-level-11.yaml", "disposition": "excluded", "entryCommand": "eln repl --new --json --scenario tests/scenarios/capability-level-11.yaml", "logsRecorded": "runner-dependent", "logsDetail": "REPL logs are separate; some scenarios invoke live models.", "excludeReason": "REPL/provider workflow, not reusable mock device; separate runner or live model dependency."},
|
|
78
|
+
{"path": "tests/scenarios/codex-baseline.yaml", "disposition": "excluded", "entryCommand": "eln repl --new --json --scenario tests/scenarios/codex-baseline.yaml", "logsRecorded": "runner-dependent", "logsDetail": "REPL logs are separate; some scenarios invoke live models.", "excludeReason": "REPL/provider workflow, not reusable mock device; separate runner or live model dependency."},
|
|
79
|
+
{"path": "tests/scenarios/codex-opus-2way.yaml", "disposition": "excluded", "entryCommand": "eln repl --new --json --scenario tests/scenarios/codex-opus-2way.yaml", "logsRecorded": "runner-dependent", "logsDetail": "REPL logs are separate; some scenarios invoke live models.", "excludeReason": "REPL/provider workflow, not reusable mock device; separate runner or live model dependency."},
|
|
80
|
+
{"path": "tests/scenarios/codex-variance-w5f.yaml", "disposition": "excluded", "entryCommand": "eln repl --new --json --scenario tests/scenarios/codex-variance-w5f.yaml", "logsRecorded": "runner-dependent", "logsDetail": "REPL logs are separate; some scenarios invoke live models.", "excludeReason": "REPL/provider workflow, not reusable mock device; separate runner or live model dependency."},
|
|
81
|
+
{"path": "tests/scenarios/multi-turn-cache-rate.yaml", "disposition": "excluded", "entryCommand": "eln repl --new --json --scenario tests/scenarios/multi-turn-cache-rate.yaml", "logsRecorded": "runner-dependent", "logsDetail": "REPL logs are separate; some scenarios invoke live models.", "excludeReason": "REPL/provider workflow, not reusable mock device; separate runner or live model dependency."},
|
|
82
|
+
{"path": "tests/scenarios/repl-rotation-chain.yaml", "disposition": "excluded", "entryCommand": "eln repl --new --json --scenario tests/scenarios/repl-rotation-chain.yaml", "logsRecorded": "runner-dependent", "logsDetail": "REPL logs are separate; some scenarios invoke live models.", "excludeReason": "REPL/provider workflow, not reusable mock device; separate runner or live model dependency."},
|
|
83
|
+
{"path": "tests/scenarios/repl-self-debug-arc.yaml", "disposition": "excluded", "entryCommand": "eln repl --new --json --scenario tests/scenarios/repl-self-debug-arc.yaml", "logsRecorded": "runner-dependent", "logsDetail": "REPL logs are separate; some scenarios invoke live models.", "excludeReason": "REPL/provider workflow, not reusable mock device; separate runner or live model dependency."},
|
|
84
|
+
{"path": "tests/scenarios/repl-tool-doom-recovery.yaml", "disposition": "excluded", "entryCommand": "eln repl --new --json --scenario tests/scenarios/repl-tool-doom-recovery.yaml", "logsRecorded": "runner-dependent", "logsDetail": "REPL logs are separate; some scenarios invoke live models.", "excludeReason": "REPL/provider workflow, not reusable mock device; separate runner or live model dependency."},
|
|
85
|
+
{"path": "src/playground-scenario/default-scenarios.ts", "disposition": "excluded", "entryCommand": "bun test src/playground-scenario/", "logsRecorded": "no", "logsDetail": "Scenario constants consumed by Playground tests.", "excludeReason": "Product demo inputs, not mock-device implementation."},
|
|
86
|
+
{"path": "src/playground-scenario/fake-harness.ts", "disposition": "excluded", "entryCommand": "bun test src/playground-scenario/", "logsRecorded": "no", "logsDetail": "In-memory test harness consumed by Playground tests.", "excludeReason": "Test helper, no independent reusable mock interface."},
|
|
87
|
+
{"path": "src/showroom/outbound/channels/stubs.ts", "disposition": "excluded", "entryCommand": "bun test src/showroom/outbound/channels/", "logsRecorded": "no", "logsDetail": "Stub results asserted by channel tests.", "excludeReason": "Outbound channel stub, not a UX simulation device."},
|
|
88
|
+
{"path": "test/telegram-surface-hitl.test.ts", "disposition": "already-indexed", "entryCommand": "bun test test/telegram-surface-hitl.test.ts", "logsRecorded": "no", "logsDetail": "The test drives an in-memory fake TelegramBot and asserts captured interactions; it does not write app logs.db.", "deviceId": "support-fakes"}
|
|
89
|
+
]
|
|
90
|
+
},
|
|
36
91
|
"discovery": {
|
|
37
92
|
"trackedRoot": "src/ux-sim/*.ts runtime modules",
|
|
38
|
-
"candidateRoots": ["scripts/*sim*.ts", "scripts/release-loop/*sim*.ts", "scripts/lib/pwa-scenarios/*.ts", "test/**/*fake*", "test/**/*stub*", "test/scenarios/**/*"],
|
|
93
|
+
"candidateRoots": ["scripts/*sim*.ts", "scripts/release-loop/*sim*.ts", "scripts/lib/pwa-scenarios/*.ts", "test/**/*fake*", "test/**/*stub*", "test/scenarios/**/*", "scenarios/**/*.yaml", "src/playground-scenario/*.ts", "src/showroom/outbound/channels/stubs.ts"],
|
|
39
94
|
"limits": "The index records reviewed reusable simulation devices and named acceptance scenarios. Candidate paths outside the tracked root are surfaced for review; this is not proof that every repository fake/stub has scenario value."
|
|
40
95
|
}
|
|
41
96
|
}
|