elanous 0.2.37 → 0.2.40

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.
Files changed (727) hide show
  1. package/apps/pwa/out/404/index.html +1 -1
  2. package/apps/pwa/out/404.html +1 -1
  3. package/apps/pwa/out/_next/static/{8kITumG9GAZ1LwT9POrAR → HjeK7zONHfR7op1hKXp4k}/_buildManifest.js +1 -1
  4. package/apps/pwa/out/_next/static/chunks/{1746.3563617ea64023a3.js → 1060.014f1f01a17aec26.js} +1 -1
  5. package/apps/pwa/out/_next/static/chunks/{9151.a2c51e93f9156dae.js → 1281.d81877e35b9068f4.js} +1 -1
  6. package/apps/pwa/out/_next/static/chunks/1350.59f40e39e02d91b1.js +1 -0
  7. package/apps/pwa/out/_next/static/chunks/1415.79821ec7ae99acdb.js +1 -0
  8. package/apps/pwa/out/_next/static/chunks/1452.162bb2d9d699e82a.js +1 -0
  9. package/apps/pwa/out/_next/static/chunks/147.f92f63bbc5e85fa5.js +286 -0
  10. package/apps/pwa/out/_next/static/chunks/1537-6bb97b5214928ea9.js +1 -0
  11. package/apps/pwa/out/_next/static/chunks/1661.fb425a1d8a065b72.js +149 -0
  12. package/apps/pwa/out/_next/static/chunks/1671-1c22b40b50b208f2.js +1 -0
  13. package/apps/pwa/out/_next/static/chunks/1758.0204d3f48783c49d.js +90 -0
  14. package/apps/pwa/out/_next/static/chunks/1806.027bf78b6a94d340.js +104 -0
  15. package/apps/pwa/out/_next/static/chunks/{3578.4e9f9948a9a6f2f4.js → 2047.8f23e210995d4548.js} +2 -2
  16. package/apps/pwa/out/_next/static/chunks/2061-7f2bbc53ae96c88b.js +1 -0
  17. package/apps/pwa/out/_next/static/chunks/{7424.c0fe2a595d4232b5.js → 2066.a77257c8c350770a.js} +1 -1
  18. package/apps/pwa/out/_next/static/chunks/2096-a938496bc996dcbd.js +1 -0
  19. package/apps/pwa/out/_next/static/chunks/{4931.95cc6dbd230774ca.js → 2177.df8547f9d7215c4e.js} +16 -16
  20. package/apps/pwa/out/_next/static/chunks/2200-9a453b8f99687d49.js +1 -0
  21. package/apps/pwa/out/_next/static/chunks/{6680.6a693c28aae4cd19.js → 2226.2cf61ec781827219.js} +2 -2
  22. package/apps/pwa/out/_next/static/chunks/2281-b8cede695c6c650e.js +1 -0
  23. package/apps/pwa/out/_next/static/chunks/2499.02fbfd18126c10c0.js +1 -0
  24. package/apps/pwa/out/_next/static/chunks/{6252.240578f10952e091.js → 2522.f2766b76d22c8bdf.js} +1 -1
  25. package/apps/pwa/out/_next/static/chunks/{1262.a89bb27a5b2f844e.js → 2566.beaffc3a5e1fcd2e.js} +1 -1
  26. package/apps/pwa/out/_next/static/chunks/261.0d471e8aded799f3.js +226 -0
  27. package/apps/pwa/out/_next/static/chunks/2615.3c9738153de3ef3f.js +1 -0
  28. package/apps/pwa/out/_next/static/chunks/2727.e703d99ac414916d.js +1 -0
  29. package/apps/pwa/out/_next/static/chunks/2752.7904b8df0254d0ae.js +27 -0
  30. package/apps/pwa/out/_next/static/chunks/2762-5051a862dfa40e99.js +1 -0
  31. package/apps/pwa/out/_next/static/chunks/2767-31784bfedf8e245d.js +1 -0
  32. package/apps/pwa/out/_next/static/chunks/{2318-450e75d07605b8fe.js → 2774-719820e3f5b2a3eb.js} +1 -1
  33. package/apps/pwa/out/_next/static/chunks/2812-f016aa0dda149287.js +1 -0
  34. package/apps/pwa/out/_next/static/chunks/{4725-34bed25720cc326b.js → 2829-734fe8bf2eee7347.js} +1 -1
  35. package/apps/pwa/out/_next/static/chunks/311-32dcac79970985e8.js +1 -0
  36. package/apps/pwa/out/_next/static/chunks/3175-f93f7495cd28253c.js +1 -0
  37. package/apps/pwa/out/_next/static/chunks/3184.8da993f5502d2140.js +1 -0
  38. package/apps/pwa/out/_next/static/chunks/3231-d7c981db0ff8bdcc.js +1 -0
  39. package/apps/pwa/out/_next/static/chunks/3250.151309c5176d6b4b.js +1 -0
  40. package/apps/pwa/out/_next/static/chunks/3330.7443183b7e6fdbdf.js +1 -0
  41. package/apps/pwa/out/_next/static/chunks/3517.a5aa1797a9dbf2ee.js +1 -0
  42. package/apps/pwa/out/_next/static/chunks/3567-45f676877ed9e8a5.js +1 -0
  43. package/apps/pwa/out/_next/static/chunks/3746-f80a78f220bf37b5.js +1 -0
  44. package/apps/pwa/out/_next/static/chunks/3819.8a1de79b2e8c7298.js +24 -0
  45. package/apps/pwa/out/_next/static/chunks/39.9b37b0be4c128a83.js +77 -0
  46. package/apps/pwa/out/_next/static/chunks/{4337e36d.f42c3b391b3d8f20.js → 3b355b3d.6f73c98bf6f9c749.js} +1 -1
  47. package/apps/pwa/out/_next/static/chunks/4023.a19045970a9ce16a.js +36 -0
  48. package/apps/pwa/out/_next/static/chunks/{58edce7d.f1b0c72acf13b123.js → 409c787b.e48c5bec8ec10456.js} +1 -1
  49. package/apps/pwa/out/_next/static/chunks/413-24c8284bda08241d.js +1 -0
  50. package/apps/pwa/out/_next/static/chunks/4135.e45d6ebc29e20647.js +1 -0
  51. package/apps/pwa/out/_next/static/chunks/4283.65502f5d0e6ff6c0.js +287 -0
  52. package/apps/pwa/out/_next/static/chunks/4305-4e28fa92a7b34a5b.js +1 -0
  53. package/apps/pwa/out/_next/static/chunks/4335-50efa61fd7613142.js +1 -0
  54. package/apps/pwa/out/_next/static/chunks/4351.0f37a6db2b34d50b.js +1 -0
  55. package/apps/pwa/out/_next/static/chunks/{5046.7fd5cbd859299448.js → 470.51a72a2348306455.js} +2 -2
  56. package/apps/pwa/out/_next/static/chunks/4720.ecbd1693fa151068.js +1 -0
  57. package/apps/pwa/out/_next/static/chunks/{2375.bf364c85dbb6f085.js → 4769.9fd582071301f382.js} +1 -1
  58. package/apps/pwa/out/_next/static/chunks/483.725e4a61be922788.js +1 -0
  59. package/apps/pwa/out/_next/static/chunks/{de8446d3.31b73eb239fecd7b.js → 4864a2ca.1c1c280a7772c5e5.js} +1 -1
  60. package/apps/pwa/out/_next/static/chunks/4969-4b209d7307410c00.js +1 -0
  61. package/apps/pwa/out/_next/static/chunks/5068-c7f53862f83c0917.js +1 -0
  62. package/apps/pwa/out/_next/static/chunks/5315.bc96711c24dfefe2.js +74 -0
  63. package/apps/pwa/out/_next/static/chunks/{4383.18e5c54db3a22c88.js → 5383.bdfa5d886e39a826.js} +1 -1
  64. package/apps/pwa/out/_next/static/chunks/5436.fdf6fa8ae3e9588d.js +64 -0
  65. package/apps/pwa/out/_next/static/chunks/5542.efbf14f16baed4dd.js +1 -0
  66. package/apps/pwa/out/_next/static/chunks/5622.94893f5aea7185d0.js +1 -0
  67. package/apps/pwa/out/_next/static/chunks/5644.8f401a25601d05fc.js +1 -0
  68. package/apps/pwa/out/_next/static/chunks/5658.35f70eb9871a54bf.js +1 -0
  69. package/apps/pwa/out/_next/static/chunks/5721.7bdc0e904c76ab51.js +8 -0
  70. package/apps/pwa/out/_next/static/chunks/5790-eef0ca20884a6bdf.js +1 -0
  71. package/apps/pwa/out/_next/static/chunks/5802.ef0d8598ca68fe84.js +62 -0
  72. package/apps/pwa/out/_next/static/chunks/5890.fb974729788dcb71.js +1 -0
  73. package/apps/pwa/out/_next/static/chunks/5924.5ef25cddd36d5dbf.js +1 -0
  74. package/apps/pwa/out/_next/static/chunks/5979-e59c099ebf8d1f35.js +1 -0
  75. package/apps/pwa/out/_next/static/chunks/6020.714cfeada2315e2e.js +94 -0
  76. package/apps/pwa/out/_next/static/chunks/6027-dfe0349d8c50f698.js +1 -0
  77. package/apps/pwa/out/_next/static/chunks/{6745-5a63492933959dd9.js → 6051-0ae955eedb10adb9.js} +3 -3
  78. package/apps/pwa/out/_next/static/chunks/6178.bc4730c86cf74536.js +1 -0
  79. package/apps/pwa/out/_next/static/chunks/{2283.edd9627b7bdfb546.js → 6257.c0037b8949239f5e.js} +2 -2
  80. package/apps/pwa/out/_next/static/chunks/6273.d808b0dcb3c2b155.js +1 -0
  81. package/apps/pwa/out/_next/static/chunks/6292.6ef1df64fa6a4c8a.js +1 -0
  82. package/apps/pwa/out/_next/static/chunks/647-af8dd920ba46533c.js +1 -0
  83. package/apps/pwa/out/_next/static/chunks/6541-170dc5c59e135c0c.js +1 -0
  84. package/apps/pwa/out/_next/static/chunks/6624.981ef7caeb680560.js +32 -0
  85. package/apps/pwa/out/_next/static/chunks/6742-a1ad4a94ba7bc37a.js +1 -0
  86. package/apps/pwa/out/_next/static/chunks/{6819.be5c9c4d67f22922.js → 6749.0744ce6eb08d40e9.js} +16 -16
  87. package/apps/pwa/out/_next/static/chunks/6836-493dc55c39187949.js +1 -0
  88. package/apps/pwa/out/_next/static/chunks/6856-53ac421c06039a18.js +1 -0
  89. package/apps/pwa/out/_next/static/chunks/6908.06008c67f6380ea9.js +148 -0
  90. package/apps/pwa/out/_next/static/chunks/6915.096931864206f522.js +1 -0
  91. package/apps/pwa/out/_next/static/chunks/6925.5e181fb7dcf90193.js +1 -0
  92. package/apps/pwa/out/_next/static/chunks/6cc1d1d6.9a98dd4622f1afc6.js +1 -0
  93. package/apps/pwa/out/_next/static/chunks/7203-800e11037adc41eb.js +1 -0
  94. package/apps/pwa/out/_next/static/chunks/7219-15bdd9a80661af8e.js +1 -0
  95. package/apps/pwa/out/_next/static/chunks/7279.6170f591105936bb.js +93 -0
  96. package/apps/pwa/out/_next/static/chunks/7349-373165c7fbdcc3df.js +1 -0
  97. package/apps/pwa/out/_next/static/chunks/7514-a533ba0ca1cae4f4.js +1 -0
  98. package/apps/pwa/out/_next/static/chunks/7515.1ad6efe157fa4448.js +1 -0
  99. package/apps/pwa/out/_next/static/chunks/7521.d919cc1fab80c1d9.js +24 -0
  100. package/apps/pwa/out/_next/static/chunks/7538.90e97bbdf9178cff.js +1 -0
  101. package/apps/pwa/out/_next/static/chunks/7611.85f045bf232053ac.js +1 -0
  102. package/apps/pwa/out/_next/static/chunks/7825-39203196a12579b2.js +1 -0
  103. package/apps/pwa/out/_next/static/chunks/7869.5e1a9a12fd70d6c7.js +1 -0
  104. package/apps/pwa/out/_next/static/chunks/8086.1ab9103c41be884f.js +1 -0
  105. package/apps/pwa/out/_next/static/chunks/8099.1cccf31c1baa7e1c.js +1 -0
  106. package/apps/pwa/out/_next/static/chunks/8179-e61fffbdb70f1152.js +1 -0
  107. package/apps/pwa/out/_next/static/chunks/8265.bdeb991b34db6a06.js +1 -0
  108. package/apps/pwa/out/_next/static/chunks/{2002-a43a3f380df873ec.js → 8272-025653884f9645d2.js} +1 -1
  109. package/apps/pwa/out/_next/static/chunks/{7867.e8725745ddd1d940.js → 8357.1aaa713b052a78b1.js} +4 -4
  110. package/apps/pwa/out/_next/static/chunks/8638-e42615f2166165b5.js +1 -0
  111. package/apps/pwa/out/_next/static/chunks/8639-92c11d069792429e.js +1 -0
  112. package/apps/pwa/out/_next/static/chunks/8691.54e22831d5e8ccf8.js +1 -0
  113. package/apps/pwa/out/_next/static/chunks/8d173e38.18a2f7b4e1848bdb.js +1 -0
  114. package/apps/pwa/out/_next/static/chunks/9069.657590a84afb8fac.js +41 -0
  115. package/apps/pwa/out/_next/static/chunks/9125-ae588d88a0293b93.js +1 -0
  116. package/apps/pwa/out/_next/static/chunks/{4313.76f232c304a15bde.js → 9175.2de5209a5ce6f68a.js} +1 -1
  117. package/apps/pwa/out/_next/static/chunks/9184.45afbf44fec87574.js +1 -0
  118. package/apps/pwa/out/_next/static/chunks/{8c58d09b.e8724a299658d86f.js → 9189505a.980427ac048c8c60.js} +1 -1
  119. package/apps/pwa/out/_next/static/chunks/9311.f9f641a46a508611.js +1 -0
  120. package/apps/pwa/out/_next/static/chunks/9371-a6fee8378ebfa3ee.js +1 -0
  121. package/apps/pwa/out/_next/static/chunks/9421-3aa9ff4fa7f63d8a.js +1 -0
  122. package/apps/pwa/out/_next/static/chunks/9992.07ce73c10bd5e6a1.js +79 -0
  123. package/apps/pwa/out/_next/static/chunks/app/_not-found/page-76394dc618d322c8.js +1 -0
  124. package/apps/pwa/out/_next/static/chunks/app/approvals/page-1b948637c37b3abd.js +1 -0
  125. package/apps/pwa/out/_next/static/chunks/app/autopilot/page-c63400f1bcf3e47c.js +1 -0
  126. package/apps/pwa/out/_next/static/chunks/app/board/page-95d0957267819586.js +1 -0
  127. package/apps/pwa/out/_next/static/chunks/app/botlab/page-ba957ff875a026a0.js +1 -0
  128. package/apps/pwa/out/_next/static/chunks/app/bots/page-bb6fd0714879cb87.js +1 -0
  129. package/apps/pwa/out/_next/static/chunks/app/ceo/page-8f9038520d2acbef.js +1 -0
  130. package/apps/pwa/out/_next/static/chunks/app/chat/page-d4b48397e05fce2c.js +1 -0
  131. package/apps/pwa/out/_next/static/chunks/app/consult/page-72d5744245dc0c27.js +1 -0
  132. package/apps/pwa/out/_next/static/chunks/app/control/page-37625dc8300fa43a.js +1 -0
  133. package/apps/pwa/out/_next/static/chunks/app/decisions/page-fbef9d160272dbc1.js +1 -0
  134. package/apps/pwa/out/_next/static/chunks/app/design-check/page-58424168df84928e.js +1 -0
  135. package/apps/pwa/out/_next/static/chunks/app/editor/page-72c12ba430ac57c0.js +1 -0
  136. package/apps/pwa/out/_next/static/chunks/app/exec/page-d53f3e9ed806d7e0.js +1 -0
  137. package/apps/pwa/out/_next/static/chunks/app/field/page-4d2fbd45feee0829.js +1 -0
  138. package/apps/pwa/out/_next/static/chunks/app/healthz/route-76394dc618d322c8.js +1 -0
  139. package/apps/pwa/out/_next/static/chunks/app/inside/page-8783dc0ed7590a2c.js +1 -0
  140. package/apps/pwa/out/_next/static/chunks/app/intake/page-3706cb390606e930.js +1 -0
  141. package/apps/pwa/out/_next/static/chunks/app/layout-9b0a86598e0111fd.js +1 -0
  142. package/apps/pwa/out/_next/static/chunks/app/live/{page-3337c6a1328c2674.js → page-4edb8df90f4537ce.js} +1 -1
  143. package/apps/pwa/out/_next/static/chunks/app/live-run/page-83d27757e2b8060a.js +1 -0
  144. package/apps/pwa/out/_next/static/chunks/app/loops/page-47398b9ba1cc5e1b.js +1 -0
  145. package/apps/pwa/out/_next/static/chunks/app/market/page-fb86f55cfe2e681d.js +1 -0
  146. package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-e22345fc8fd47b1b.js +1 -0
  147. package/apps/pwa/out/_next/static/chunks/app/morning/{page-1e5da297557d2354.js → page-fca2e59a81744d9e.js} +1 -1
  148. package/apps/pwa/out/_next/static/chunks/app/not-found-6e96bda63100b31e.js +1 -0
  149. package/apps/pwa/out/_next/static/chunks/app/observatory/page-4d17ad8e0db8cea4.js +1 -0
  150. package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-121f92766c33beaa.js +1 -0
  151. package/apps/pwa/out/_next/static/chunks/app/ops/release/page-43f14212c545f92d.js +1 -0
  152. package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-ccec2023e7a974ec.js +1 -0
  153. package/apps/pwa/out/_next/static/chunks/app/outputs/page-b04f33f548b89a94.js +1 -0
  154. package/apps/pwa/out/_next/static/chunks/app/page-c8792823c0917021.js +1 -0
  155. package/apps/pwa/out/_next/static/chunks/app/reflection/page-8c0e32782ceef4cb.js +1 -0
  156. package/apps/pwa/out/_next/static/chunks/app/scheduler/page-94bd3922eb230ce8.js +1 -0
  157. package/apps/pwa/out/_next/static/chunks/app/sessions/page-bca565887bafa03c.js +1 -0
  158. package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-ac1dffafe649fc6c.js +1 -0
  159. package/apps/pwa/out/_next/static/chunks/app/settings/page-52374edb5e23e455.js +1 -0
  160. package/apps/pwa/out/_next/static/chunks/app/setup/done/page-ad4ebca120d43ca7.js +1 -0
  161. package/apps/pwa/out/_next/static/chunks/app/setup/layout-76394dc618d322c8.js +1 -0
  162. package/apps/pwa/out/_next/static/chunks/app/setup/page-718b89ce4b4ae4e4.js +1 -0
  163. package/apps/pwa/out/_next/static/chunks/app/share/page-204eca33eeeaddec.js +1 -0
  164. package/apps/pwa/out/_next/static/chunks/app/showroom/page-e58ba9bcdb9ac0f9.js +1 -0
  165. package/apps/pwa/out/_next/static/chunks/app/tasks/page-98f6dd50bafd7734.js +1 -0
  166. package/apps/pwa/out/_next/static/chunks/app/term/{page-ac2c1e6169cfce57.js → page-139d722de1dcd6c1.js} +1 -1
  167. package/apps/pwa/out/_next/static/chunks/app/today/page-5a4bdd72bff27057.js +1 -0
  168. package/apps/pwa/out/_next/static/chunks/app/trace/page-6f6ab17d44f984ce.js +1 -0
  169. package/apps/pwa/out/_next/static/chunks/app/vault/page-aabb7bd15fb72da9.js +1 -0
  170. package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-e4322319164a4436.js +1 -0
  171. package/apps/pwa/out/_next/static/chunks/app/workflows/page-e9efc0c8f32e2371.js +1 -0
  172. package/apps/pwa/out/_next/static/chunks/app/workspace/{page-c1c80e345fa9d6f5.js → page-ccde99f07aaf71f7.js} +1 -1
  173. package/apps/pwa/out/_next/static/chunks/app/worktrees/page-80464aced9614390.js +1 -0
  174. package/apps/pwa/out/_next/static/chunks/{d9815f84.4918f682a45a8502.js → b84cad00.594027ebe0531fe2.js} +3 -3
  175. package/apps/pwa/out/_next/static/chunks/c696986b.5dc8bb1143af16d1.js +1 -0
  176. package/apps/pwa/out/_next/static/chunks/{709a918c.4fd3b4e2a32cb4e3.js → ca3702f8.2913182e73889fa2.js} +1 -1
  177. package/apps/pwa/out/_next/static/chunks/d5d3cefc-373c4eb722ed848b.js +1 -0
  178. package/apps/pwa/out/_next/static/chunks/{5f6af561-f90b7a67f4f75d13.js → d8de0de2-dd0f4ac8e5ab1832.js} +1 -1
  179. package/apps/pwa/out/_next/static/chunks/framework-002b472a66935d31.js +1 -0
  180. package/apps/pwa/out/_next/static/chunks/main-49b88d47292c0476.js +1 -0
  181. package/apps/pwa/out/_next/static/chunks/main-app-fff2549cb10a133f.js +1 -0
  182. package/apps/pwa/out/_next/static/chunks/pages/_app-32abbbba3f3b76b7.js +1 -0
  183. package/apps/pwa/out/_next/static/chunks/pages/_error-9d9cfef60c60dd7a.js +1 -0
  184. package/apps/pwa/out/_next/static/chunks/webpack-cc7f483fa294034a.js +1 -0
  185. package/apps/pwa/out/approvals/index.html +1 -1
  186. package/apps/pwa/out/approvals/index.txt +22 -22
  187. package/apps/pwa/out/autopilot/index.html +1 -1
  188. package/apps/pwa/out/autopilot/index.txt +22 -22
  189. package/apps/pwa/out/board/index.html +1 -1
  190. package/apps/pwa/out/board/index.txt +22 -22
  191. package/apps/pwa/out/botlab/index.html +1 -1
  192. package/apps/pwa/out/botlab/index.txt +21 -21
  193. package/apps/pwa/out/bots/index.html +1 -1
  194. package/apps/pwa/out/bots/index.txt +21 -21
  195. package/apps/pwa/out/ceo/index.html +1 -1
  196. package/apps/pwa/out/ceo/index.txt +22 -22
  197. package/apps/pwa/out/chat/index.html +1 -1
  198. package/apps/pwa/out/chat/index.txt +21 -21
  199. package/apps/pwa/out/consult/index.html +1 -1
  200. package/apps/pwa/out/consult/index.txt +22 -22
  201. package/apps/pwa/out/control/index.html +1 -1
  202. package/apps/pwa/out/control/index.txt +22 -22
  203. package/apps/pwa/out/decisions/index.html +1 -1
  204. package/apps/pwa/out/decisions/index.txt +21 -21
  205. package/apps/pwa/out/design-check/index.html +1 -1
  206. package/apps/pwa/out/design-check/index.txt +22 -22
  207. package/apps/pwa/out/editor/index.html +1 -1
  208. package/apps/pwa/out/editor/index.txt +22 -22
  209. package/apps/pwa/out/exec/index.html +1 -1
  210. package/apps/pwa/out/exec/index.txt +22 -22
  211. package/apps/pwa/out/field/index.html +1 -1
  212. package/apps/pwa/out/field/index.txt +22 -22
  213. package/apps/pwa/out/healthz +1 -1
  214. package/apps/pwa/out/index.html +1 -1
  215. package/apps/pwa/out/index.txt +21 -21
  216. package/apps/pwa/out/inside/index.html +1 -1
  217. package/apps/pwa/out/inside/index.txt +21 -21
  218. package/apps/pwa/out/intake/index.html +1 -1
  219. package/apps/pwa/out/intake/index.txt +22 -22
  220. package/apps/pwa/out/live/index.html +1 -1
  221. package/apps/pwa/out/live/index.txt +22 -22
  222. package/apps/pwa/out/live-run/index.html +1 -1
  223. package/apps/pwa/out/live-run/index.txt +22 -22
  224. package/apps/pwa/out/loops/index.html +1 -1
  225. package/apps/pwa/out/loops/index.txt +21 -21
  226. package/apps/pwa/out/market/index.html +1 -1
  227. package/apps/pwa/out/market/index.txt +21 -21
  228. package/apps/pwa/out/missions/placeholder/index.html +1 -1
  229. package/apps/pwa/out/missions/placeholder/index.txt +21 -21
  230. package/apps/pwa/out/morning/index.html +1 -1
  231. package/apps/pwa/out/morning/index.txt +22 -22
  232. package/apps/pwa/out/observatory/index.html +1 -1
  233. package/apps/pwa/out/observatory/index.txt +22 -22
  234. package/apps/pwa/out/ops/checklist/index.html +1 -1
  235. package/apps/pwa/out/ops/checklist/index.txt +21 -21
  236. package/apps/pwa/out/ops/release/index.html +1 -1
  237. package/apps/pwa/out/ops/release/index.txt +21 -21
  238. package/apps/pwa/out/ops/seats/index.html +1 -1
  239. package/apps/pwa/out/ops/seats/index.txt +21 -21
  240. package/apps/pwa/out/outputs/index.html +1 -1
  241. package/apps/pwa/out/outputs/index.txt +21 -21
  242. package/apps/pwa/out/reflection/index.html +1 -1
  243. package/apps/pwa/out/reflection/index.txt +22 -22
  244. package/apps/pwa/out/scheduler/index.html +1 -1
  245. package/apps/pwa/out/scheduler/index.txt +22 -22
  246. package/apps/pwa/out/sessions/index.html +1 -1
  247. package/apps/pwa/out/sessions/index.txt +21 -21
  248. package/apps/pwa/out/settings/devices/index.html +1 -1
  249. package/apps/pwa/out/settings/devices/index.txt +22 -22
  250. package/apps/pwa/out/settings/index.html +1 -1
  251. package/apps/pwa/out/settings/index.txt +22 -22
  252. package/apps/pwa/out/setup/done/index.html +1 -1
  253. package/apps/pwa/out/setup/done/index.txt +22 -22
  254. package/apps/pwa/out/setup/index.html +1 -1
  255. package/apps/pwa/out/setup/index.txt +22 -22
  256. package/apps/pwa/out/share/index.html +1 -1
  257. package/apps/pwa/out/share/index.txt +22 -22
  258. package/apps/pwa/out/showroom/index.html +1 -1
  259. package/apps/pwa/out/showroom/index.txt +21 -21
  260. package/apps/pwa/out/tasks/index.html +1 -1
  261. package/apps/pwa/out/tasks/index.txt +22 -22
  262. package/apps/pwa/out/term/index.html +1 -1
  263. package/apps/pwa/out/term/index.txt +22 -22
  264. package/apps/pwa/out/today/index.html +1 -1
  265. package/apps/pwa/out/today/index.txt +22 -22
  266. package/apps/pwa/out/trace/index.html +1 -1
  267. package/apps/pwa/out/trace/index.txt +22 -22
  268. package/apps/pwa/out/vault/index.html +1 -1
  269. package/apps/pwa/out/vault/index.txt +22 -22
  270. package/apps/pwa/out/workflows/chat-ui/index.html +1 -1
  271. package/apps/pwa/out/workflows/chat-ui/index.txt +22 -22
  272. package/apps/pwa/out/workflows/index.html +1 -1
  273. package/apps/pwa/out/workflows/index.txt +22 -22
  274. package/apps/pwa/out/workspace/index.html +1 -1
  275. package/apps/pwa/out/workspace/index.txt +22 -22
  276. package/apps/pwa/out/worktrees/index.html +1 -1
  277. package/apps/pwa/out/worktrees/index.txt +22 -22
  278. package/graphs/demo/persona-marketer/fixtures/marketer-scenario.yaml +10 -0
  279. package/graphs/demo/persona-marketer/persona-marketer.yaml +25 -0
  280. package/graphs/demo/persona-marketer/recipes.yaml +19 -0
  281. package/graphs/release/recipes.yaml +9 -0
  282. package/graphs/release/release-loop.yaml +26 -18
  283. package/graphs/video/explainer-line.yaml +4 -1
  284. package/package.json +1 -1
  285. package/scripts/ask-op-inbox-once.ts +17 -0
  286. package/scripts/brand/check.ts +13 -4
  287. package/scripts/dead-code/report.ts +169 -0
  288. package/scripts/gate-0226-accepted-remaining-90.txt +91 -0
  289. package/scripts/gate-0226-failure-census.ts +39 -0
  290. package/scripts/intake-collect-telegram-saved-stage.ts +48 -0
  291. package/scripts/lib/morning-report-options.ts +3 -4
  292. package/scripts/lib/tui-regress-evidence.ts +56 -0
  293. package/scripts/morning-report.ts +5 -1
  294. package/scripts/provision-export-redactions.ts +15 -0
  295. package/scripts/public-copy-lint.ts +122 -0
  296. package/scripts/public-export.ts +77 -2
  297. package/scripts/ratchets/next-tui-entry-budget.ts +124 -0
  298. package/scripts/ratchets/train-side-invariants.sh +7 -1
  299. package/scripts/release-loop/cut-branch.ts +61 -12
  300. package/scripts/release-loop/export-check-node.ts +21 -3
  301. package/scripts/release-loop/gate-node.ts +527 -60
  302. package/scripts/release-loop/gate-partial.ts +82 -3
  303. package/scripts/release-loop/gate-prewarm-plan.ts +35 -0
  304. package/scripts/release-loop/gate-radius-live.ts +4 -2
  305. package/scripts/release-loop/gate-shard-dispatch.ts +128 -0
  306. package/scripts/release-loop/gate-shard-receipts.ts +89 -0
  307. package/scripts/release-loop/gate-wall.ts +5 -5
  308. package/scripts/release-loop/preflight.ts +6 -2
  309. package/scripts/release-loop/resume-cap.ts +2 -1
  310. package/scripts/release-loop/resume-release.ts +317 -13
  311. package/scripts/release-loop/resume.ts +61 -5
  312. package/scripts/release-loop/traffic-node.ts +12 -4
  313. package/scripts/release-loop/traffic-transition.ts +53 -13
  314. package/scripts/release-loop/version-node.ts +35 -5
  315. package/scripts/release-story/draft.ts +1 -1
  316. package/scripts/research-bench/README.md +53 -0
  317. package/scripts/research-bench/questions.json +66 -0
  318. package/scripts/research-bench/rubric.md +33 -0
  319. package/scripts/research-bench/run.ts +523 -0
  320. package/scripts/tui-regress.ts +85 -10
  321. package/scripts/ux-sim.ts +1 -1
  322. package/scripts/video-pipeline.ts +2 -2
  323. package/src/acp/core-turn-bridge.ts +14 -1
  324. package/src/agent/autonomous-tools.ts +10 -3
  325. package/src/agent/monad-agent-turn.ts +4 -1
  326. package/src/agent/registry.ts +26 -2
  327. package/src/agent/run-context.ts +1 -1
  328. package/src/agent/shared-app-tools.ts +1 -1
  329. package/src/agent/surface-ux/build.ts +12 -3
  330. package/src/agent/surface-ux/types.ts +1 -1
  331. package/src/agent/task-notification.ts +78 -7
  332. package/src/agent/types.ts +3 -0
  333. package/src/agent-mission/driver.ts +29 -3
  334. package/src/agent-mission/mission-cli.ts +2 -1
  335. package/src/agent-substrate/review-context-pack.ts +365 -0
  336. package/src/agent-substrate/review-observation.ts +10 -0
  337. package/src/agent-substrate/self-review-cli.ts +419 -42
  338. package/src/ask-user-question/index.ts +6 -0
  339. package/src/ask-user-question/inline-resolver.ts +49 -0
  340. package/src/auto-research/question-ladder-contract.ts +156 -0
  341. package/src/auto-research/research-turn.ts +467 -0
  342. package/src/autopilot/agent-loop.ts +1 -1
  343. package/src/autopilot/discovery/doc-lint.ts +1 -1
  344. package/src/autopilot/pty-control-loop.ts +8 -1
  345. package/src/boot/daemon-tools/index.ts +4 -3
  346. package/src/boot/daemon-tools/self-implement.ts +270 -2
  347. package/src/boot/daemon-tools/types.ts +2 -0
  348. package/src/bots/screen-probe.ts +1 -1
  349. package/src/budget/llm-cost.ts +44 -5
  350. package/src/budget/unified-usage.ts +17 -1
  351. package/src/capture/tui-self-report.ts +24 -2
  352. package/src/chat/index.ts +34 -7
  353. package/src/chat/tool-render/dispatch.ts +8 -1
  354. package/src/cli/agent-cli.ts +43 -8
  355. package/src/cli/guardian-cli.ts +3 -1
  356. package/src/cli/intake-cli.ts +70 -13
  357. package/src/cli/lesson-cli.ts +86 -10
  358. package/src/cli/log-event-names.ts +1 -0
  359. package/src/cli/pod-cli.ts +17 -2
  360. package/src/cli/pr-land-overlap-evidence.ts +38 -5
  361. package/src/cli/pr-land-refusal.ts +1 -1
  362. package/src/cli/pty-takeover-cli.ts +125 -12
  363. package/src/cli/release-checklist-read-cli.ts +5 -2
  364. package/src/cli/release-cli.ts +99 -15
  365. package/src/cli/repo-cli.ts +2 -1
  366. package/src/cli/review-carry.ts +77 -0
  367. package/src/cli/self-update.ts +1 -1
  368. package/src/cli/tasks-card-show.ts +31 -1
  369. package/src/cli/tasks-cli.ts +98 -32
  370. package/src/cli/tasks-read-cli.ts +13 -5
  371. package/src/context-bus/context-now.ts +86 -2
  372. package/src/control-plane/ledger.ts +21 -4
  373. package/src/core-turn/run-core-turn.ts +51 -3
  374. package/src/core-turn/run-goal-loop.ts +152 -8
  375. package/src/core-turn/types.ts +12 -0
  376. package/src/dashboard/chat/acp-chat.ts +2 -2
  377. package/src/dashboard/classic-sigquit.ts +16 -0
  378. package/src/dashboard/index.ts +339 -44
  379. package/src/dashboard/input/chat-main-interaction-opts.ts +3 -0
  380. package/src/dashboard/input/chat-main-plain-turn-runtime.ts +7 -2
  381. package/src/dashboard/input/chat-main-slash-command.ts +7 -0
  382. package/src/dashboard/input/dashboard-plain-turn-stream.ts +4 -0
  383. package/src/dashboard/input/dashboard-priority-key-route.ts +21 -5
  384. package/src/dashboard/input/external-input-host.ts +2 -0
  385. package/src/dashboard/input/terminal-modal-router.ts +8 -159
  386. package/src/dashboard/side-basic-runtime.ts +61 -0
  387. package/src/dashboard/sidetab-runtime.ts +228 -0
  388. package/src/dashboard/slash-runtime/ask-clarification.ts +7 -1
  389. package/src/dashboard/slash-runtime/dashboard-handlers.ts +22 -8
  390. package/src/dashboard/slash-runtime/help-from-registry.ts +2 -2
  391. package/src/dashboard/term-slash-runtime.ts +18 -18
  392. package/src/dashboard/turn-preamble.ts +30 -4
  393. package/src/domains/guardian-tick.ts +9 -0
  394. package/src/domains/knowledge.ts +1 -1
  395. package/src/esc-abort-gate.ts +33 -1
  396. package/src/execution-loop/launch-gate.ts +206 -1
  397. package/src/git-fs/watcher.ts +27 -22
  398. package/src/git-fs/worktree.ts +19 -3
  399. package/src/graph-runner/graph-cli.ts +6 -4
  400. package/src/graph-runner/graph-grow.ts +37 -9
  401. package/src/graph-runner/runner.ts +48 -11
  402. package/src/graph-wizard/generate.ts +16 -7
  403. package/src/graph-wizard/mission-compose.ts +201 -0
  404. package/src/grok/agent-search.ts +8 -2
  405. package/src/grok/credential.ts +112 -36
  406. package/src/grounding/ref-index.ts +11 -0
  407. package/src/grounding/ref-vector.ts +61 -0
  408. package/src/grounding/sources-cli.ts +2 -2
  409. package/src/grounding/sources.ts +15 -1
  410. package/src/harness/harness-cli-command.ts +38 -9
  411. package/src/harness/harness-pod-dispatch.ts +7 -1
  412. package/src/hq/fence-wrapper.ts +1 -1
  413. package/src/hq/transfer.ts +1 -1
  414. package/src/index.ts +60 -16
  415. package/src/input/external-input-queue.ts +10 -0
  416. package/src/intake-plane/collect-telegram-saved.ts +90 -6
  417. package/src/intake-plane/intake-to-tasks.ts +246 -3
  418. package/src/interactive-terminal-modal.ts +3 -0
  419. package/src/keybindings.ts +17 -22
  420. package/src/lessons/friction-ledger.ts +154 -0
  421. package/src/live-supply/collector.ts +149 -0
  422. package/src/live-supply/probes.ts +52 -0
  423. package/src/live-supply/snapshot.ts +40 -0
  424. package/src/llm/provider-credentials.ts +1 -1
  425. package/src/llm-tool-schema.ts +20 -0
  426. package/src/llm.ts +486 -61
  427. package/src/loops/orchestrator/inbox-once.ts +28 -0
  428. package/src/loops/orchestrator/inbox.ts +130 -1
  429. package/src/loops/orchestrator/tick.ts +14 -3
  430. package/src/maturity/feature-maturity.ts +1 -0
  431. package/src/nexus/api/channel-ask-op.ts +96 -0
  432. package/src/nexus/api/discord-trigger-bot.ts +28 -1
  433. package/src/nexus/api/harness-api.ts +2 -1
  434. package/src/nexus/api/telegram-trigger-bot.ts +24 -0
  435. package/src/nexus/api/terminals.ts +28 -6
  436. package/src/patents/ledger.ts +18 -1
  437. package/src/preview/terminal.ts +4 -2
  438. package/src/prompt-cache/anthropic.ts +2 -0
  439. package/src/prompt-enhance/enhance.ts +5 -0
  440. package/src/pty/snapshot.py +132 -0
  441. package/src/pty-shell/pty-control-ipc.ts +29 -2
  442. package/src/pty-shell/pty-manifest.ts +75 -5
  443. package/src/pty-shell/registry.ts +2 -0
  444. package/src/pty-shell/tui-run-state.ts +80 -3
  445. package/src/release-loop/gate-host-reservation.ts +13 -4
  446. package/src/release-loop/gate-shard-ledger.ts +68 -0
  447. package/src/release-loop/gate-shards.ts +61 -0
  448. package/src/release-loop/light-rc.ts +7 -4
  449. package/src/release-loop/merged-pr-checklist.ts +25 -2
  450. package/src/release-loop/rehearsal-shard-plan.ts +6 -1
  451. package/src/release-loop/rehearsal.ts +28 -1
  452. package/src/repl/index.ts +10 -0
  453. package/src/research/axis-fanout.ts +133 -0
  454. package/src/research/edge-decision.ts +197 -0
  455. package/src/research/gap-followup.ts +249 -0
  456. package/src/research/lenses/counter-evidence.ts +100 -0
  457. package/src/research/lenses/working-backwards.ts +89 -0
  458. package/src/research/output-router.ts +127 -0
  459. package/src/research/plugin-discovery.ts +242 -0
  460. package/src/research-bridge/format.ts +16 -1
  461. package/src/research-bridge/index.ts +1 -0
  462. package/src/research-bridge/invoke.ts +45 -7
  463. package/src/research-bridge/types.ts +2 -0
  464. package/src/self-dev/ask-launch-flow.ts +34 -106
  465. package/src/self-dev/decompose.ts +45 -9
  466. package/src/self-dev/dev-cli.ts +2 -0
  467. package/src/self-dev/dev-pipeline.ts +8 -4
  468. package/src/self-dev/draft-residue.ts +221 -2
  469. package/src/self-dev/draft-sweep.ts +29 -16
  470. package/src/self-dev/graph-journey-route.ts +10 -2
  471. package/src/self-dev/launch-preflight-text.ts +2 -2
  472. package/src/self-dev/launch-preflight.ts +38 -7
  473. package/src/self-dev/orchestrate-cli.ts +1 -0
  474. package/src/self-dev/orchestrate.ts +1 -0
  475. package/src/self-dev/run-supervisor.ts +41 -7
  476. package/src/self-dev/shard-run.ts +260 -3
  477. package/src/self-implement/comment-only-source.ts +54 -0
  478. package/src/self-implement/device-first.ts +8 -2
  479. package/src/self-implement/doctor-visit.ts +100 -57
  480. package/src/self-implement/gate-artifacts.ts +5 -2
  481. package/src/self-implement/gate-baseline.ts +119 -13
  482. package/src/self-implement/gate-cli.ts +466 -93
  483. package/src/self-implement/gate-failure-signature.ts +44 -0
  484. package/src/self-implement/gate-receipt-registry.ts +180 -0
  485. package/src/self-implement/gate-remote.ts +147 -22
  486. package/src/self-implement/goal-author-clarification.ts +178 -24
  487. package/src/self-implement/goal-author-decompose.ts +24 -15
  488. package/src/self-implement/goal-author.ts +82 -7
  489. package/src/self-implement/goal-doc/section.ts +22 -0
  490. package/src/self-implement/goal-supervisor-fill.ts +38 -4
  491. package/src/self-implement/host-regate.ts +120 -45
  492. package/src/self-implement/impl-findings-feedback.ts +188 -0
  493. package/src/self-implement/knowhow-pack.ts +301 -9
  494. package/src/self-implement/l8-merge-queue.ts +198 -32
  495. package/src/self-implement/off-diff-evidence.ts +147 -0
  496. package/src/self-implement/orchestrator.ts +137 -16
  497. package/src/self-implement/pod-inplace-worktree.ts +82 -0
  498. package/src/self-implement/pod-warm-pool-profile.ts +2 -2
  499. package/src/self-implement/premise-review.ts +7 -5
  500. package/src/self-implement/run-ledger.ts +304 -8
  501. package/src/self-implement/run-stop.ts +12 -0
  502. package/src/self-implement/seams.ts +39 -13
  503. package/src/self-implement/self-implement-cli.ts +30 -4
  504. package/src/session/channel-ask-op-envelope.ts +36 -0
  505. package/src/session/channel-op-reply-route.ts +200 -0
  506. package/src/session/chat.ts +92 -15
  507. package/src/session/index.ts +2 -0
  508. package/src/session-runtime/index.ts +9 -22
  509. package/src/session-runtime/provider-circuit.ts +140 -0
  510. package/src/shell-runner/file-engine.ts +1 -0
  511. package/src/shell-runner/types.ts +4 -0
  512. package/src/sidetab-core/model.ts +176 -0
  513. package/src/skills/runner.ts +7 -3
  514. package/src/skills/tools/dev-harness.ts +2 -2
  515. package/src/skills/tools/schedule-wakeup.ts +24 -7
  516. package/src/skills/tools/shell.ts +51 -5
  517. package/src/status/bar.ts +3 -3
  518. package/src/steward/directive-audit.ts +354 -0
  519. package/src/storage/file-lock.ts +17 -4
  520. package/src/surface/child-process.ts +31 -0
  521. package/src/surface/tui-stderr-owner.ts +48 -0
  522. package/src/task-agent/adopt-pr.ts +63 -2
  523. package/src/task-agent/cover.ts +30 -12
  524. package/src/task-agent/evidence-command-normalize.ts +42 -0
  525. package/src/task-agent/export-redactions-provision.ts +43 -0
  526. package/src/task-agent/judge.ts +56 -0
  527. package/src/task-agent/parent-host.ts +59 -12
  528. package/src/task-agent/postland-card.ts +35 -2
  529. package/src/task-agent/rejudge-on-head.ts +46 -2
  530. package/src/task-agent/repair-cycle.ts +68 -9
  531. package/src/task-agent/repair-worker.ts +37 -1
  532. package/src/task-agent/task-hand.ts +226 -33
  533. package/src/task-agent/tier-split.ts +142 -24
  534. package/src/task-orchestrator/surfaces/pod-command-job.ts +330 -2
  535. package/src/task-orchestrator/surfaces/pod-config-snapshot.ts +123 -0
  536. package/src/task-orchestrator/surfaces/pod-failure-reason.ts +57 -5
  537. package/src/task-orchestrator/surfaces/pod-mirror-seed.ts +11 -8
  538. package/src/task-orchestrator/surfaces/pod-pool.ts +27 -4
  539. package/src/task-orchestrator/surfaces/pod-si-warm-protocol.ts +1 -1
  540. package/src/task-orchestrator/surfaces/pod-source-receive.ts +74 -6
  541. package/src/task-orchestrator/surfaces/pod-warm-worker-pod.ts +2 -1
  542. package/src/task-orchestrator/surfaces/pod-warm-worker-provider.ts +56 -15
  543. package/src/task-orchestrator/surfaces/self-implement-pod.ts +310 -79
  544. package/src/task-orchestrator/surfaces/self-implement.ts +33 -2
  545. package/src/terminal/session-registry.ts +1 -0
  546. package/src/terminal/terminal-modal-router.ts +156 -0
  547. package/src/tool-hints/gate.ts +6 -4
  548. package/src/tool-hints/signals.ts +33 -1
  549. package/src/tool-runtime/skill-exec-runtime.ts +95 -5
  550. package/src/tui/chat/background-job-status.ts +8 -2
  551. package/src/tui/entry.ts +483 -32
  552. package/src/tui/inline-choice.ts +188 -0
  553. package/src/tui/sidetab/attach.ts +304 -0
  554. package/src/tui/sidetab/list.ts +2 -0
  555. package/src/tui/sidetab/nl-tool.ts +136 -0
  556. package/src/tui/slash/resume-command.ts +23 -0
  557. package/src/tui/slash/resume.ts +3 -23
  558. package/src/tui/slash/term-next.ts +2 -1
  559. package/src/tui/slash/term.ts +12 -1
  560. package/src/tui-client/dashboard-session.ts +7 -1
  561. package/src/tui-client/local-chat-turn.ts +29 -8
  562. package/src/user-config.ts +42 -3
  563. package/src/ux-sim/classic-tui-seat-scenarios.ts +1 -7
  564. package/src/ux-sim/fake-land-queue.ts +88 -0
  565. package/src/ux-sim/fake-llm.ts +11 -5
  566. package/src/ux-sim/gate-shard-host-reroute.ts +82 -0
  567. package/src/ux-sim/goal-interim-trace.ts +24 -0
  568. package/src/ux-sim/next-tui-seat-scenarios.ts +61 -14
  569. package/src/ux-sim/task-orchestrator-surfaces-self-implement-pod-device.ts +4 -1
  570. package/src/version/packed-revision.json +1 -1
  571. package/src/video-pipeline/recipes/explainer.ts +54 -2
  572. package/src/web-search/grok.ts +32 -6
  573. package/src/web-search/index.ts +8 -7
  574. package/src/workflow-runtime/node-catalog.ts +53 -4
  575. package/apps/pwa/out/_next/static/chunks/1041-5841aae848fb6403.js +0 -1
  576. package/apps/pwa/out/_next/static/chunks/1087.3177e54f672dc526.js +0 -1
  577. package/apps/pwa/out/_next/static/chunks/1105.efe1e13503ac7a33.js +0 -1
  578. package/apps/pwa/out/_next/static/chunks/1224.2ceca6c180d5130b.js +0 -62
  579. package/apps/pwa/out/_next/static/chunks/1417-1768233ac92f8a5d.js +0 -1
  580. package/apps/pwa/out/_next/static/chunks/1612.81bbc19af06af16c.js +0 -1
  581. package/apps/pwa/out/_next/static/chunks/1766.728d42053070bb2d.js +0 -1
  582. package/apps/pwa/out/_next/static/chunks/1773.d38e945481e04125.js +0 -1
  583. package/apps/pwa/out/_next/static/chunks/1974-c12f9600da3d3c26.js +0 -1
  584. package/apps/pwa/out/_next/static/chunks/1ed5e8af.cf424815c7c0efad.js +0 -1
  585. package/apps/pwa/out/_next/static/chunks/2061.7232dc9dc058417f.js +0 -1
  586. package/apps/pwa/out/_next/static/chunks/210.90b2cbd64926cf34.js +0 -32
  587. package/apps/pwa/out/_next/static/chunks/244-a810d282a20f1783.js +0 -1
  588. package/apps/pwa/out/_next/static/chunks/2479-fe7e188bd9402d14.js +0 -1
  589. package/apps/pwa/out/_next/static/chunks/2514.03b60f266531a015.js +0 -148
  590. package/apps/pwa/out/_next/static/chunks/2526-a657538869888604.js +0 -1
  591. package/apps/pwa/out/_next/static/chunks/2533-6f0341ff075809e9.js +0 -1
  592. package/apps/pwa/out/_next/static/chunks/2676.e7994c695ef0f30d.js +0 -1
  593. package/apps/pwa/out/_next/static/chunks/2734.3ffdf54254fb6f99.js +0 -27
  594. package/apps/pwa/out/_next/static/chunks/2770-23252bf3a37880b9.js +0 -1
  595. package/apps/pwa/out/_next/static/chunks/2969.66b8b545139d1544.js +0 -1
  596. package/apps/pwa/out/_next/static/chunks/3128.a9210d08800ea6a8.js +0 -1
  597. package/apps/pwa/out/_next/static/chunks/3199.6a1a9b0e6cd01dc6.js +0 -1
  598. package/apps/pwa/out/_next/static/chunks/3212.12179fd3eee8cef1.js +0 -1
  599. package/apps/pwa/out/_next/static/chunks/3760-2909ddb9279281cd.js +0 -1
  600. package/apps/pwa/out/_next/static/chunks/3825.1921b5901bf33dce.js +0 -36
  601. package/apps/pwa/out/_next/static/chunks/3994-63eb884ed0547011.js +0 -1
  602. package/apps/pwa/out/_next/static/chunks/4036.d54e55e1ebf5acdc.js +0 -90
  603. package/apps/pwa/out/_next/static/chunks/4115.5b438b99f0ae729f.js +0 -226
  604. package/apps/pwa/out/_next/static/chunks/4269.d8f9f34bb0fc6c43.js +0 -287
  605. package/apps/pwa/out/_next/static/chunks/431-4eed5bd2c5fe1719.js +0 -1
  606. package/apps/pwa/out/_next/static/chunks/4324.c99ba3e83eb1b691.js +0 -1
  607. package/apps/pwa/out/_next/static/chunks/4599-96eff3f2a9c242c1.js +0 -1
  608. package/apps/pwa/out/_next/static/chunks/4825-a9d9d4e9f5892309.js +0 -1
  609. package/apps/pwa/out/_next/static/chunks/4833-7934c592c5569f00.js +0 -1
  610. package/apps/pwa/out/_next/static/chunks/4879-68518f547a207aff.js +0 -1
  611. package/apps/pwa/out/_next/static/chunks/4896.f9b70285363b27b2.js +0 -24
  612. package/apps/pwa/out/_next/static/chunks/4937-28d437999b77c9dd.js +0 -1
  613. package/apps/pwa/out/_next/static/chunks/49aa54ab.80f39398e0ed0f30.js +0 -1
  614. package/apps/pwa/out/_next/static/chunks/5056.482687319b82638e.js +0 -104
  615. package/apps/pwa/out/_next/static/chunks/506.16b83d56a437a9ee.js +0 -1
  616. package/apps/pwa/out/_next/static/chunks/5260-20593b0a25d0afbc.js +0 -1
  617. package/apps/pwa/out/_next/static/chunks/5404.cc4e9fec26fd5925.js +0 -1
  618. package/apps/pwa/out/_next/static/chunks/576.485e83e3f3dec19a.js +0 -1
  619. package/apps/pwa/out/_next/static/chunks/5832-a6be14e663f65726.js +0 -1
  620. package/apps/pwa/out/_next/static/chunks/5854-56648a9fe646b9a0.js +0 -1
  621. package/apps/pwa/out/_next/static/chunks/5925.3b1f8b135710249b.js +0 -93
  622. package/apps/pwa/out/_next/static/chunks/5952.294fc574a8625184.js +0 -1
  623. package/apps/pwa/out/_next/static/chunks/6168.17749aa3905fa073.js +0 -74
  624. package/apps/pwa/out/_next/static/chunks/6416.5d50b8ec9986ca98.js +0 -1
  625. package/apps/pwa/out/_next/static/chunks/6758.e7fbf532953c0783.js +0 -1
  626. package/apps/pwa/out/_next/static/chunks/6795.0cb8a59730d99703.js +0 -149
  627. package/apps/pwa/out/_next/static/chunks/6877-84d47b7e85d0c41e.js +0 -1
  628. package/apps/pwa/out/_next/static/chunks/6971-fb5f9dc0a2cb5d2d.js +0 -1
  629. package/apps/pwa/out/_next/static/chunks/717.522b08685979b814.js +0 -1
  630. package/apps/pwa/out/_next/static/chunks/7191.e41eb8f455c7f089.js +0 -41
  631. package/apps/pwa/out/_next/static/chunks/7233.8e744b7513119409.js +0 -1
  632. package/apps/pwa/out/_next/static/chunks/7238-97c2226f80504bd8.js +0 -1
  633. package/apps/pwa/out/_next/static/chunks/7285.307963afcf7e7660.js +0 -24
  634. package/apps/pwa/out/_next/static/chunks/7299-fbe4b8c47a87614a.js +0 -1
  635. package/apps/pwa/out/_next/static/chunks/7314.df0d95930b0c3f50.js +0 -1
  636. package/apps/pwa/out/_next/static/chunks/7406.c0589fdf2ee66629.js +0 -1
  637. package/apps/pwa/out/_next/static/chunks/752-90e3e7daad3d8e39.js +0 -1
  638. package/apps/pwa/out/_next/static/chunks/7524-bcd3d9928c6842d9.js +0 -1
  639. package/apps/pwa/out/_next/static/chunks/7549.9a4de3bf231cfc52.js +0 -1
  640. package/apps/pwa/out/_next/static/chunks/757-4fbaf50942b8c424.js +0 -1
  641. package/apps/pwa/out/_next/static/chunks/765.76ae970ceb597b5b.js +0 -1
  642. package/apps/pwa/out/_next/static/chunks/7893-e444a1b0809cd1e4.js +0 -1
  643. package/apps/pwa/out/_next/static/chunks/7956-33748cabb3a05562.js +0 -1
  644. package/apps/pwa/out/_next/static/chunks/7c5ed21f-f286708e57cf88f7.js +0 -1
  645. package/apps/pwa/out/_next/static/chunks/8030-aa66b478b53dbfca.js +0 -1
  646. package/apps/pwa/out/_next/static/chunks/8051.c88c07dacbbc5f21.js +0 -8
  647. package/apps/pwa/out/_next/static/chunks/8080-40d781e7704d3671.js +0 -1
  648. package/apps/pwa/out/_next/static/chunks/8149.80e402d4345e8dae.js +0 -77
  649. package/apps/pwa/out/_next/static/chunks/8205.50a5268f4e12ba0b.js +0 -1
  650. package/apps/pwa/out/_next/static/chunks/8231.a128feaa6f8b6079.js +0 -1
  651. package/apps/pwa/out/_next/static/chunks/85.4ddb1dda2ea3ffa2.js +0 -286
  652. package/apps/pwa/out/_next/static/chunks/8537.26517a09e8247beb.js +0 -1
  653. package/apps/pwa/out/_next/static/chunks/8595-e9b7081ab773a61f.js +0 -1
  654. package/apps/pwa/out/_next/static/chunks/8821-30cc65a61a60951f.js +0 -1
  655. package/apps/pwa/out/_next/static/chunks/8905.b3385aadb7b133e6.js +0 -79
  656. package/apps/pwa/out/_next/static/chunks/8983.246bb3a1ac38f50f.js +0 -1
  657. package/apps/pwa/out/_next/static/chunks/9072.18342f5941a1f3ec.js +0 -1
  658. package/apps/pwa/out/_next/static/chunks/9123.9df04866b2d6e00f.js +0 -1
  659. package/apps/pwa/out/_next/static/chunks/9175-7d383df15a82e2be.js +0 -1
  660. package/apps/pwa/out/_next/static/chunks/9181-bf89c07ce5b8f599.js +0 -1
  661. package/apps/pwa/out/_next/static/chunks/920-429bbc4504b45f71.js +0 -1
  662. package/apps/pwa/out/_next/static/chunks/9207.625edf45d656151c.js +0 -1
  663. package/apps/pwa/out/_next/static/chunks/9378.d2575c6ffd6dd756.js +0 -94
  664. package/apps/pwa/out/_next/static/chunks/957.db5b5c4d32a35240.js +0 -1
  665. package/apps/pwa/out/_next/static/chunks/958.53a8dcf4729e6997.js +0 -64
  666. package/apps/pwa/out/_next/static/chunks/9647.8f0cd0898c592a29.js +0 -1
  667. package/apps/pwa/out/_next/static/chunks/9665-26abb02665704c2c.js +0 -1
  668. package/apps/pwa/out/_next/static/chunks/9703.e7d81b6faef1050a.js +0 -1
  669. package/apps/pwa/out/_next/static/chunks/9882-7a9164b3c2dacbe5.js +0 -1
  670. package/apps/pwa/out/_next/static/chunks/9998.b74e033efadecd10.js +0 -1
  671. package/apps/pwa/out/_next/static/chunks/app/_not-found/page-c604fb980a634d88.js +0 -1
  672. package/apps/pwa/out/_next/static/chunks/app/approvals/page-ec2d8a4979ca9075.js +0 -1
  673. package/apps/pwa/out/_next/static/chunks/app/autopilot/page-cb6add08ad3c7660.js +0 -1
  674. package/apps/pwa/out/_next/static/chunks/app/board/page-e2eaa321ec223fe6.js +0 -1
  675. package/apps/pwa/out/_next/static/chunks/app/botlab/page-5b8a09c475b5f844.js +0 -1
  676. package/apps/pwa/out/_next/static/chunks/app/bots/page-91a77daedfbac191.js +0 -1
  677. package/apps/pwa/out/_next/static/chunks/app/ceo/page-f37fc5e974bda39b.js +0 -1
  678. package/apps/pwa/out/_next/static/chunks/app/chat/page-91429a0b78415a94.js +0 -1
  679. package/apps/pwa/out/_next/static/chunks/app/consult/page-b95798b58263b910.js +0 -1
  680. package/apps/pwa/out/_next/static/chunks/app/control/page-763d53e175e17aa1.js +0 -1
  681. package/apps/pwa/out/_next/static/chunks/app/decisions/page-d55023204055b12f.js +0 -1
  682. package/apps/pwa/out/_next/static/chunks/app/design-check/page-89d2140d78abc810.js +0 -1
  683. package/apps/pwa/out/_next/static/chunks/app/editor/page-82dc069abfe27f55.js +0 -1
  684. package/apps/pwa/out/_next/static/chunks/app/exec/page-25d9eee7beb552c0.js +0 -1
  685. package/apps/pwa/out/_next/static/chunks/app/field/page-770b4594c713ee97.js +0 -1
  686. package/apps/pwa/out/_next/static/chunks/app/healthz/route-c604fb980a634d88.js +0 -1
  687. package/apps/pwa/out/_next/static/chunks/app/inside/page-ba8e0dcae4f83985.js +0 -1
  688. package/apps/pwa/out/_next/static/chunks/app/intake/page-5c112c6d7c33656e.js +0 -1
  689. package/apps/pwa/out/_next/static/chunks/app/layout-09788e1aa9a87db6.js +0 -1
  690. package/apps/pwa/out/_next/static/chunks/app/live-run/page-89acd5d68c0bc560.js +0 -1
  691. package/apps/pwa/out/_next/static/chunks/app/loops/page-5c13e2c76371d797.js +0 -1
  692. package/apps/pwa/out/_next/static/chunks/app/market/page-653a9f18642825c6.js +0 -1
  693. package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-fe986fe79b107546.js +0 -1
  694. package/apps/pwa/out/_next/static/chunks/app/not-found-91ea9f5869a40943.js +0 -1
  695. package/apps/pwa/out/_next/static/chunks/app/observatory/page-7824e21b999962e2.js +0 -1
  696. package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-53d00a60cc75a922.js +0 -1
  697. package/apps/pwa/out/_next/static/chunks/app/ops/release/page-88a1edbff62eaf1d.js +0 -1
  698. package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-4e931248b3f9574b.js +0 -1
  699. package/apps/pwa/out/_next/static/chunks/app/outputs/page-443364c9e4a23b31.js +0 -1
  700. package/apps/pwa/out/_next/static/chunks/app/page-b9af2ac1c4737ce8.js +0 -1
  701. package/apps/pwa/out/_next/static/chunks/app/reflection/page-25ab9c614c14129b.js +0 -1
  702. package/apps/pwa/out/_next/static/chunks/app/scheduler/page-dbcdcfac0a395a8a.js +0 -1
  703. package/apps/pwa/out/_next/static/chunks/app/sessions/page-bf1de6645089ec58.js +0 -1
  704. package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-c4201761a5e839c9.js +0 -1
  705. package/apps/pwa/out/_next/static/chunks/app/settings/page-c304f469ea5d70e4.js +0 -1
  706. package/apps/pwa/out/_next/static/chunks/app/setup/done/page-8e5a238cf5e50c9c.js +0 -1
  707. package/apps/pwa/out/_next/static/chunks/app/setup/layout-c604fb980a634d88.js +0 -1
  708. package/apps/pwa/out/_next/static/chunks/app/setup/page-32b526069ee50b3c.js +0 -1
  709. package/apps/pwa/out/_next/static/chunks/app/share/page-fb9e639c107f5f72.js +0 -1
  710. package/apps/pwa/out/_next/static/chunks/app/showroom/page-84220c776608cedc.js +0 -1
  711. package/apps/pwa/out/_next/static/chunks/app/tasks/page-e475618cbfd5ca2b.js +0 -1
  712. package/apps/pwa/out/_next/static/chunks/app/today/page-fccd3020af2f8806.js +0 -1
  713. package/apps/pwa/out/_next/static/chunks/app/trace/page-9c0d7198ff7b5a91.js +0 -1
  714. package/apps/pwa/out/_next/static/chunks/app/vault/page-d54b1ec9b9c6430d.js +0 -1
  715. package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-8c4bef1791d732ca.js +0 -1
  716. package/apps/pwa/out/_next/static/chunks/app/workflows/page-46fcc0b0bbc6fbfe.js +0 -1
  717. package/apps/pwa/out/_next/static/chunks/app/worktrees/page-7dfda00afd172f5b.js +0 -1
  718. package/apps/pwa/out/_next/static/chunks/f21fd540.63ac75328926ed30.js +0 -1
  719. package/apps/pwa/out/_next/static/chunks/framework-77fdcc873519a6cd.js +0 -1
  720. package/apps/pwa/out/_next/static/chunks/main-app-d0d620d2ce235713.js +0 -1
  721. package/apps/pwa/out/_next/static/chunks/main-e0ef79c79337ba90.js +0 -1
  722. package/apps/pwa/out/_next/static/chunks/pages/_app-84b1bc71e3f9ce6a.js +0 -1
  723. package/apps/pwa/out/_next/static/chunks/pages/_error-2acb61f1363128cb.js +0 -1
  724. package/apps/pwa/out/_next/static/chunks/webpack-462ff5727ceb7824.js +0 -1
  725. package/scripts/migrate-monad-to-elanous.ts +0 -195
  726. package/scripts/rebrand-elanous.ts +0 -242
  727. /package/apps/pwa/out/_next/static/{8kITumG9GAZ1LwT9POrAR → HjeK7zONHfR7op1hKXp4k}/_ssgManifest.js +0 -0
@@ -12,6 +12,7 @@ dry_run_await_approval: true
12
12
  terminal_nodes: [done, failed]
13
13
  nodes:
14
14
  - { node_id: version-release, kind: git, recipe: 'cmd:version-release', max_visits: 1 }
15
+ - { node_id: traffic-cut-start, kind: gate, recipe: 'cmd:traffic-cut-start', max_visits: 1 }
15
16
  - { node_id: cutoff, kind: judge, recipe: 'cmd:cutoff', max_visits: 1 }
16
17
  - { node_id: checklist-gate, kind: gate, recipe: 'cmd:checklist-gate', max_visits: 1 }
17
18
  # cmd:docs dispatches by graph node ID: bounded prefetch before gate, TUI join after upgrade, docs write after both.
@@ -39,6 +40,7 @@ nodes:
39
40
  - { node_id: approve-publish, kind: hitl, recipe: 'approval:publish', max_visits: 1 }
40
41
  - { node_id: publish, kind: git, recipe: 'cmd:publish-command', max_visits: 1, notify: { on: [ok, fail] } }
41
42
  - { node_id: npm-publish, kind: git, recipe: 'cmd:npm-publish', max_visits: 1 }
43
+ - { node_id: traffic-npm-published, kind: gate, recipe: 'cmd:traffic-npm-published', max_visits: 1 }
42
44
  - { node_id: docs-land, kind: git, recipe: 'cmd:docs-land', max_visits: 1 }
43
45
  - { node_id: verify, kind: gate, recipe: 'cmd:verify', max_visits: 1, notify: { on: [ok, fail] } }
44
46
  - { node_id: traffic-verify-complete, kind: gate, recipe: 'cmd:traffic-verify-complete', max_visits: 1 }
@@ -47,35 +49,40 @@ nodes:
47
49
  - { node_id: ops-upgrade, kind: agent, recipe: 'cmd:ops-upgrade', max_visits: 1 }
48
50
  - { node_id: version-dev-bump, kind: git, recipe: 'cmd:version-dev-bump', max_visits: 1 }
49
51
  - { node_id: version-dev-bump-after-failure, kind: git, recipe: 'cmd:version-dev-bump', max_visits: 1 }
52
+ - { node_id: traffic-failed-restore, kind: gate, recipe: 'cmd:traffic-failed-restore', max_visits: 1 }
50
53
  - { node_id: done, kind: gate, max_visits: 1 }
51
54
  - { node_id: failed, kind: gate, max_visits: 1 }
52
55
  edges:
53
- - { from: version-release, on: outcome, map: { ok: cutoff, fail: failed, error: failed } }
54
- - { from: cutoff, on: outcome, map: { ok: checklist-gate, fail: failed, error: failed } }
55
- - { from: checklist-gate, on: outcome, map: { ok: export-check, fail: failed, error: failed } }
56
- - { from: export-check, on: outcome, map: { ok: prefetch, fail: failed, error: failed } }
56
+ - { from: version-release, on: outcome, map: { ok: traffic-cut-start, fail: failed, error: failed } }
57
+ # Advisory traffic writes report failure to OP; release steps still proceed on fail/error.
58
+ - { from: traffic-cut-start, on: outcome, map: { ok: cutoff, fail: cutoff, error: cutoff } }
59
+ - { from: cutoff, on: outcome, map: { ok: checklist-gate, fail: traffic-failed-restore, error: traffic-failed-restore } }
60
+ - { from: checklist-gate, on: outcome, map: { ok: export-check, fail: traffic-failed-restore, error: traffic-failed-restore } }
61
+ - { from: export-check, on: outcome, map: { ok: prefetch, fail: traffic-failed-restore, error: traffic-failed-restore } }
57
62
  # Prefetch never gates: even a crashed prefetch node is a cache miss — the late nodes take their original paths.
58
63
  - { from: prefetch, on: outcome, map: { ok: gate, fail: gate, error: gate } }
59
64
  - { from: gate, on: outcome, map: { ok: traffic-gate-passed, fail: gate-triage, error: gate-triage } }
60
65
  # Warning-only: the transition result stays truthful; every outcome continues to the next release node.
61
66
  - { from: traffic-gate-passed, on: outcome, map: { ok: mac-smoke, fail: mac-smoke, error: mac-smoke } }
62
- - { from: gate-triage, on: outcome, map: { ok: failed, fail: failed, error: failed } }
67
+ - { from: gate-triage, on: outcome, map: { ok: traffic-failed-restore, fail: traffic-failed-restore, error: traffic-failed-restore } }
63
68
  # Warning-only: a macOS failure or unmeasured run never blocks publishing — auto-approve shows it as a warning row.
64
69
  - { from: mac-smoke, on: outcome, map: { ok: pwa, fail: pwa, error: pwa } }
65
- - { from: pwa, on: outcome, map: { ok: prepare, fail: failed, error: failed } }
66
- - { from: prepare, on: outcome, map: { ok: upgrade, fail: failed, error: failed } }
67
- - { from: upgrade, on: outcome, map: { ok: tui, fail: failed, error: failed } }
68
- - { from: tui, on: outcome, map: { ok: docs, fail: failed, error: failed } }
69
- - { from: docs, on: outcome, map: { ok: known-issues, fail: failed, error: failed } }
70
- - { from: known-issues, on: outcome, map: { ok: notes-check, fail: failed, error: failed } }
70
+ - { from: pwa, on: outcome, map: { ok: prepare, fail: traffic-failed-restore, error: traffic-failed-restore } }
71
+ - { from: prepare, on: outcome, map: { ok: upgrade, fail: traffic-failed-restore, error: traffic-failed-restore } }
72
+ - { from: upgrade, on: outcome, map: { ok: tui, fail: traffic-failed-restore, error: traffic-failed-restore } }
73
+ - { from: tui, on: outcome, map: { ok: docs, fail: traffic-failed-restore, error: traffic-failed-restore } }
74
+ - { from: docs, on: outcome, map: { ok: known-issues, fail: traffic-failed-restore, error: traffic-failed-restore } }
75
+ - { from: known-issues, on: outcome, map: { ok: notes-check, fail: traffic-failed-restore, error: traffic-failed-restore } }
71
76
  # RELEASE-GRAPH-SELFHEAL: fail/error re-enter notes-check through one repair; publish still requires a passing recheck.
72
77
  - { from: notes-check, on: outcome, map: { ok: auto-approve, fail: notes-repair, error: notes-repair } }
73
- - { from: notes-repair, on: outcome, map: { ok: notes-recheck, fail: failed, error: failed } }
74
- - { from: notes-recheck, on: outcome, map: { ok: auto-approve, fail: failed, error: failed } }
78
+ - { from: notes-repair, on: outcome, map: { ok: notes-recheck, fail: traffic-failed-restore, error: traffic-failed-restore } }
79
+ - { from: notes-recheck, on: outcome, map: { ok: auto-approve, fail: traffic-failed-restore, error: traffic-failed-restore } }
75
80
  - { from: auto-approve, on: outcome, map: { ok: publish, fail: approve-publish, error: approve-publish } }
76
- - { from: approve-publish, on: outcome, map: { ok: publish, fail: failed } }
77
- - { from: publish, on: outcome, map: { ok: npm-publish, fail: failed, error: failed } }
78
- - { from: npm-publish, on: outcome, map: { ok: docs-land, fail: failed, error: failed } }
81
+ - { from: approve-publish, on: outcome, map: { ok: publish, fail: traffic-failed-restore } }
82
+ - { from: publish, on: outcome, map: { ok: npm-publish, fail: traffic-failed-restore, error: traffic-failed-restore } }
83
+ - { from: npm-publish, on: outcome, map: { ok: traffic-npm-published, fail: traffic-failed-restore, error: traffic-failed-restore } }
84
+ # Publication already happened; a traffic write failure must not skip docs-land.
85
+ - { from: traffic-npm-published, on: outcome, map: { ok: docs-land, fail: docs-land, error: docs-land } }
79
86
  # RELEASE-DEVBUMP-ALWAYS: after a successful publish every fail/error routes through version-dev-bump —
80
87
  # a published release always hands main to its own next -dev, then still finishes failed.
81
88
  - { from: docs-land, on: outcome, map: { ok: verify, fail: version-dev-bump-after-failure, error: version-dev-bump-after-failure } }
@@ -85,5 +92,6 @@ edges:
85
92
  - { from: vault-note, on: outcome, map: { ok: release-story, fail: release-story, error: release-story } }
86
93
  - { from: release-story, on: outcome, map: { ok: ops-upgrade, fail: ops-upgrade, error: ops-upgrade } }
87
94
  - { from: ops-upgrade, on: outcome, map: { ok: version-dev-bump, fail: version-dev-bump, error: version-dev-bump } }
88
- - { from: version-dev-bump, on: outcome, map: { ok: done, fail: failed, error: failed } }
89
- - { from: version-dev-bump-after-failure, on: outcome, map: { ok: failed, fail: failed, error: failed } }
95
+ - { from: version-dev-bump, on: outcome, map: { ok: done, fail: traffic-failed-restore, error: traffic-failed-restore } }
96
+ - { from: version-dev-bump-after-failure, on: outcome, map: { ok: traffic-failed-restore, fail: traffic-failed-restore, error: traffic-failed-restore } }
97
+ - { from: traffic-failed-restore, on: outcome, map: { ok: failed, fail: failed, error: failed } }
@@ -6,6 +6,8 @@ graph_id: explainer-line
6
6
  version: 1
7
7
  entry_node: script
8
8
  terminal_nodes: [delivered, needs-human, blocked, unobserved]
9
+ # ⭐ 요청 동작 — 3분 영상: 이 라인이 만드는 영상 계획의 목표 총 길이는 180초다(지속 필드 target_seconds · 단위 초).
10
+ target_seconds: 180
9
11
  nodes:
10
12
  - node_id: script
11
13
  kind: agent
@@ -55,4 +57,5 @@ edges:
55
57
  # check/snapshot failures are layout faults → rebuild; a wrong-length render is a timing fault → rebuild too.
56
58
  - { from: render, on: outcome, map: { ok: qc, check-fail: build, render-mismatch: build, unmeasurable: unobserved } }
57
59
  # speech ≠ script → re-voice that line; loudness off → rebuild (mix lives in the composition); public release is a human call.
58
- - { from: qc, on: outcome, map: { pass: delivered, vo-mismatch: vo, loudness: build, public: needs-human, unmeasurable: unobserved } }
60
+ # narration past the target_seconds(180) plan is a timing fault → rebuild too.
61
+ - { from: qc, on: outcome, map: { pass: delivered, vo-mismatch: vo, loudness: build, too-long: build, public: needs-human, unmeasurable: unobserved } }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "elanous",
3
3
  "mcpName": "io.github.ElanvitalAI/elanous",
4
- "version": "0.2.37",
4
+ "version": "0.2.40",
5
5
  "description": "Self-healing coding harness where eyes, hands, and memory all turn on one sentence — it authors its own goals, implements them in isolated worktrees, and reviews its own work.",
6
6
  "license": "Apache-2.0",
7
7
  "author": "Elanvital AI",
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env bun
2
+ /** Drain the coordinator inbox once without running the orchestrator graph. */
3
+ import { runCoordinatorInboxOnce, type InboxOnceOptions } from '../src/loops/orchestrator/inbox-once.js';
4
+
5
+ export function runAskOpInboxCli(options: InboxOnceOptions = {}) {
6
+ return runCoordinatorInboxOnce(options);
7
+ }
8
+
9
+ if (import.meta.main) {
10
+ try {
11
+ const result = await runAskOpInboxCli();
12
+ console.log(JSON.stringify(result));
13
+ } catch (error) {
14
+ console.error(`coordinator inbox: ${error instanceof Error ? error.message : String(error)}`);
15
+ process.exitCode = 1;
16
+ }
17
+ }
@@ -104,9 +104,8 @@ function isEnglishDocument(content: string, file: string, scope: Scope): boolean
104
104
  return /\b[A-Za-z]{2,}(?:\s+[A-Za-z]{2,}){2,}\b/.test(body);
105
105
  }
106
106
 
107
- function findInFile(file: string, rules: Rule[], scope: Scope): Finding[] {
107
+ function findInContent(file: string, content: string, rules: Rule[], scope: Scope): Finding[] {
108
108
  const findings: Finding[] = [];
109
- const content = readFileSync(file, 'utf8');
110
109
  const html = ['.html', '.htm'].includes(extname(file).toLowerCase());
111
110
  const englishDocument = isEnglishDocument(content, file, scope);
112
111
  const markdown = ['.md', '.mdx'].includes(extname(file).toLowerCase());
@@ -144,14 +143,24 @@ function findInFile(file: string, rules: Rule[], scope: Scope): Finding[] {
144
143
  return findings;
145
144
  }
146
145
 
146
+ function applicableRules(scope: Scope, rulesPath: string): Rule[] {
147
+ return loadRules(rulesPath).filter((rule) => scope === 'any' || rule.scope.includes('any') || rule.scope.includes(scope));
148
+ }
149
+
150
+ /** Scan in-memory text (for example a PR body) with the same rules as file scans. */
151
+ export function checkBrandText(text: string, label: string, scope: Scope = 'public-docs', rulesPath = defaultRules): Finding[] {
152
+ if (!existsSync(rulesPath)) throw new Error(BRAND_RULES_UNMEASURED);
153
+ return findInContent(label, text, applicableRules(scope, rulesPath), scope);
154
+ }
155
+
147
156
  export function checkBrand(scope: Scope, paths: string[], rulesPath = defaultRules): { files: number; findings: Finding[]; rules: number; missing: boolean; message?: string } {
148
157
  if (!existsSync(rulesPath)) {
149
158
  debug.log('brand.check', 'run', { scope, files: 0, findings: 0, rules: 0, missing: true, message: BRAND_RULES_UNMEASURED });
150
159
  return { files: 0, findings: [], rules: 0, missing: true, message: BRAND_RULES_UNMEASURED };
151
160
  }
152
- const applicable = loadRules(rulesPath).filter((rule) => scope === 'any' || rule.scope.includes('any') || rule.scope.includes(scope));
161
+ const applicable = applicableRules(scope, rulesPath);
153
162
  const files = filesAt(paths);
154
- const findings = files.flatMap((file) => findInFile(file, applicable, scope));
163
+ const findings = files.flatMap((file) => findInContent(file, readFileSync(file, 'utf8'), applicable, scope));
155
164
  debug.log('brand.check', 'run', { scope, files: files.length, findings: findings.length, rules: applicable.length });
156
165
  return { files: files.length, findings, rules: applicable.length, missing: false };
157
166
  }
@@ -0,0 +1,169 @@
1
+ #!/usr/bin/env bun
2
+ /** Conservative multi-entrypoint reachability inventory. This command NEVER deletes files. */
3
+ import { execFileSync } from 'node:child_process';
4
+ import { existsSync, readFileSync, writeFileSync } from 'node:fs';
5
+ import { dirname, join, relative, resolve } from 'node:path';
6
+ import { fileURLToPath } from 'node:url';
7
+ import ts from 'typescript';
8
+
9
+ export interface RootGroup { name: string; roots: string[]; configuration?: string }
10
+ export interface ModuleGap { importer: string; specifier: string; kind: 'unresolved' | 'dynamic' }
11
+ export interface GroupResult { name: string; roots: string[]; reachable: string[]; gaps: ModuleGap[] }
12
+ export interface ReachabilityReport {
13
+ schemaVersion: 1;
14
+ trackedFiles: number;
15
+ groups: GroupResult[];
16
+ unionReachable: string[];
17
+ unknownKeep: string[];
18
+ unresolved: ModuleGap[];
19
+ dynamic: ModuleGap[];
20
+ /** Never interpreted as safe-to-delete: configuration/runtime loaders cannot be exhaustively statically enumerated. */
21
+ unclassifiedKeep: string[];
22
+ overlaps: Record<string, string[]>;
23
+ deletions: 0;
24
+ }
25
+
26
+ const moduleFile = (p: string) => /\.[cm]?[jt]sx?$/.test(p);
27
+ const testFile = (p: string) => /(?:^|\/)(?:__tests__|__fixtures__|test|tests|fixtures)\//.test(p) || /\.(?:test|spec)\.[cm]?[jt]sx?$/.test(p);
28
+ const normalized = (p: string) => p.replaceAll('\\', '/');
29
+ const sorted = (items: Iterable<string>) => [...new Set(items)].sort();
30
+
31
+ export function trackedModules(root: string): string[] {
32
+ return execFileSync('git', ['ls-files', '-z', '--cached'], { cwd: root, maxBuffer: 16 * 1024 * 1024 })
33
+ .toString().split('\0').filter(moduleFile).filter(Boolean).map(normalized).sort();
34
+ }
35
+
36
+ function loadOptions(config: string | undefined, root: string): ts.CompilerOptions {
37
+ if (!config || !existsSync(join(root, config))) return { moduleResolution: ts.ModuleResolutionKind.Bundler, module: ts.ModuleKind.ESNext, allowJs: true };
38
+ const filename = join(root, config);
39
+ const source = ts.readConfigFile(filename, ts.sys.readFile);
40
+ if (source.error) throw new Error(ts.flattenDiagnosticMessageText(source.error.messageText, '\n'));
41
+ const parsed = ts.parseJsonConfigFileContent(source.config, ts.sys, dirname(filename), undefined, filename);
42
+ if (parsed.errors.length) throw new Error(parsed.errors.map(e => ts.flattenDiagnosticMessageText(e.messageText, '\n')).join('\n'));
43
+ return parsed.options;
44
+ }
45
+
46
+ export function inventoryRoots(root: string, files: readonly string[]): RootGroup[] {
47
+ const groups: RootGroup[] = [
48
+ { name: 'cli', roots: ['bin/elanous.mjs', 'src/index.ts', 'src/light-cli.ts'], configuration: 'tsconfig.json' },
49
+ { name: 'scripts', roots: files.filter(p => p.startsWith('scripts/') && !testFile(p)), configuration: 'tsconfig.json' },
50
+ { name: 'pwa', roots: files.filter(p => /^apps\/pwa\/src\/(app\/(?:.*\/)?(?:page|layout|route|loading|error|not-found|template|default)|middleware|instrumentation)\.[jt]sx?$/.test(p)), configuration: 'apps/pwa/tsconfig.json' },
51
+ { name: 'desktop', roots: ['apps/desktop/src/main.ts'], configuration: 'apps/desktop/tsconfig.json' },
52
+ ];
53
+ for (const app of sorted(files.filter(p => /^apps\/[^/]+\/src\/(?:main|index)\.[jt]sx?$/.test(p)))) {
54
+ if (app.startsWith('apps/desktop/') || app.startsWith('apps/pwa/')) continue;
55
+ groups.push({ name: `app:${app.split('/')[1]}`, roots: [app], configuration: `apps/${app.split('/')[1]}/tsconfig.json` });
56
+ }
57
+ // Manifest-declared paths are roots even when no TS import refers to them.
58
+ const manifests = execFileSync('git', ['ls-files', '-z', '--', 'plugins/*/plugin.json', 'plugins/*/manifest.json'], { cwd: root }).toString().split('\0').filter(Boolean);
59
+ const plugins: string[] = [];
60
+ for (const path of manifests) {
61
+ const manifest = JSON.parse(readFileSync(join(root, path), 'utf8')) as { entry?: string; main?: string };
62
+ const declared = manifest.entry ?? manifest.main;
63
+ if (!declared) continue;
64
+ const entry = normalized(join(dirname(path), declared));
65
+ // Missing manifest entries remain roots and become explicit unresolved/unknown gaps.
66
+ plugins.push(entry);
67
+ }
68
+ groups.push({ name: 'plugins', roots: sorted(plugins), configuration: 'tsconfig.json' });
69
+ // Runtime loaders and independently launched ACP boot are not necessarily in the CLI's import graph.
70
+ groups.push({ name: 'runtime', roots: ['src/boot/acp-server.ts', 'src/plugin-declarative/discovery.ts', 'src/self-implement/graph-catalog.ts', 'src/graph-runner/runner.ts'], configuration: 'tsconfig.json' });
71
+ return groups;
72
+ }
73
+
74
+ export function analyzeReachability(root: string, files: readonly string[], groups: readonly RootGroup[]): ReachabilityReport {
75
+ const tracked = new Set(files.map(normalized));
76
+ const cache = new Map<string, ts.SourceFile>();
77
+ const results: GroupResult[] = [];
78
+ const unknown = new Set<string>();
79
+ for (const group of groups) {
80
+ const options = loadOptions(group.configuration, root);
81
+ const reachable = new Set<string>();
82
+ const gaps: ModuleGap[] = [];
83
+ const queue = [...group.roots];
84
+ const host = ts.createCompilerHost(options, true);
85
+ const moduleCache = ts.createModuleResolutionCache(root, s => s, options);
86
+ while (queue.length) {
87
+ const path = queue.pop()!;
88
+ if (reachable.has(path)) continue;
89
+ if (!tracked.has(path)) {
90
+ gaps.push({ importer: `(root:${group.name})`, specifier: path, kind: 'unresolved' });
91
+ unknown.add(path);
92
+ continue;
93
+ }
94
+ reachable.add(path);
95
+ const absolute = join(root, path);
96
+ let source = cache.get(path);
97
+ if (!source) {
98
+ source = ts.createSourceFile(absolute, readFileSync(absolute, 'utf8'), ts.ScriptTarget.Latest, true, path.endsWith('x') ? ts.ScriptKind.TSX : ts.ScriptKind.TS);
99
+ cache.set(path, source);
100
+ }
101
+ const inspect = (specifier: ts.Expression) => {
102
+ if (!ts.isStringLiteralLike(specifier)) {
103
+ gaps.push({ importer: path, specifier: specifier.getText(source), kind: 'dynamic' }); unknown.add(path); return;
104
+ }
105
+ const text = specifier.text;
106
+ const resolved = ts.resolveModuleName(text, absolute, options, host, moduleCache).resolvedModule?.resolvedFileName;
107
+ const name = resolved ? normalized(relative(root, resolved)) : '';
108
+ if (name && tracked.has(name)) queue.push(name);
109
+ else if (text.startsWith('.') || text.startsWith('/') || text.startsWith('@/')) {
110
+ gaps.push({ importer: path, specifier: text, kind: 'unresolved' }); unknown.add(path);
111
+ }
112
+ // External packages are outside the tracked-source deletion domain.
113
+ };
114
+ const walk = (node: ts.Node) => {
115
+ if ((ts.isImportDeclaration(node) || ts.isExportDeclaration(node)) && node.moduleSpecifier) inspect(node.moduleSpecifier);
116
+ else if (ts.isImportEqualsDeclaration(node) && ts.isExternalModuleReference(node.moduleReference) && node.moduleReference.expression) inspect(node.moduleReference.expression);
117
+ else if (ts.isCallExpression(node) && (node.expression.kind === ts.SyntaxKind.ImportKeyword || (ts.isIdentifier(node.expression) && node.expression.text === 'require'))) {
118
+ if (node.arguments[0]) inspect(node.arguments[0]);
119
+ else { gaps.push({ importer: path, specifier: '(missing argument)', kind: 'dynamic' }); unknown.add(path); }
120
+ }
121
+ ts.forEachChild(node, walk);
122
+ };
123
+ walk(source);
124
+ }
125
+ results.push({ name: group.name, roots: sorted(group.roots), reachable: sorted(reachable), gaps });
126
+ }
127
+ const uses = new Map<string, string[]>();
128
+ for (const group of results) for (const p of group.reachable) uses.set(p, [...(uses.get(p) ?? []), group.name]);
129
+ const gaps = results.flatMap(r => r.gaps);
130
+ const uniqueGaps = (kind: ModuleGap['kind']) => [...new Map(gaps.filter(g => g.kind === kind).map(g => [`${g.importer}\0${g.specifier}`, g])).values()]
131
+ .sort((a, b) => a.importer.localeCompare(b.importer) || a.specifier.localeCompare(b.specifier));
132
+ // The rest are *not* dead code: lazy/config/graph/plugin discovery and non-TS launchers are open-world inputs.
133
+ const unclassified = files.filter(p => !uses.has(p));
134
+ return {
135
+ schemaVersion: 1, trackedFiles: files.length, groups: results,
136
+ unionReachable: sorted(uses.keys()), unknownKeep: sorted([...unknown, ...unclassified]),
137
+ unresolved: uniqueGaps('unresolved'), dynamic: uniqueGaps('dynamic'),
138
+ unclassifiedKeep: sorted(unclassified),
139
+ overlaps: Object.fromEntries([...uses].filter(([, v]) => v.length > 1).sort(([a], [b]) => a.localeCompare(b))),
140
+ deletions: 0,
141
+ };
142
+ }
143
+
144
+ export function renderMarkdown(report: ReachabilityReport): string {
145
+ const lines = ['# Multi-entrypoint reachability inventory', '', 'This is an observation, not a safe-to-delete list. Deletions: 0.', '',
146
+ `Tracked source: ${report.trackedFiles}; union reachable: ${report.unionReachable.length}; unknown/keep: ${report.unknownKeep.length}; unresolved: ${report.unresolved.length}; dynamic: ${report.dynamic.length}.`, '',
147
+ '| Root family | roots | reachable | unknown edges |', '|---|---:|---:|---:|'];
148
+ for (const g of report.groups) lines.push(`| ${g.name} | ${g.roots.length} | ${g.reachable.length} | ${g.gaps.length} |`);
149
+ lines.push('', 'Unclassified source, dynamic imports, configuration/graph loaders and resolution gaps remain unknown/keep; no deletion candidate is asserted.', '');
150
+ return lines.join('\n');
151
+ }
152
+
153
+ if (process.argv[1] && resolve(process.argv[1]) === fileURLToPath(import.meta.url)) {
154
+ const root = resolve(process.argv[2] ?? '.');
155
+ const files = trackedModules(root);
156
+ const report = analyzeReachability(root, files, inventoryRoots(root, files));
157
+ const json = JSON.stringify(report, null, 2);
158
+ if (process.argv.includes('--json')) process.stdout.write(json + '\n');
159
+ else if (process.argv.includes('--md')) process.stdout.write(renderMarkdown(report));
160
+ else if (process.argv.includes('--output')) {
161
+ const index = process.argv.indexOf('--output');
162
+ const target = process.argv[index + 1];
163
+ if (!target || target.startsWith('--')) throw new Error('--output requires a path');
164
+ const output = resolve(target);
165
+ writeFileSync(output + '.json', json + '\n');
166
+ writeFileSync(output + '.md', renderMarkdown(report));
167
+ console.log(`report: ${output}.json / ${output}.md`);
168
+ } else process.stdout.write(renderMarkdown(report));
169
+ }
@@ -0,0 +1,91 @@
1
+ # Source: 44fe14face:docs/reports/gate-0226-failure-census.tsv (pre-change accepted census)
2
+ apps/android/app/src/test/kotlin/com/elanvitalai/elanous/android/data/FeedbackEnvelopeVectors.test.ts > Android FeedbackEnvelope shared vectors > runs FeedbackEnvelopeVectorsTest and verifies every shared vector was accounted for
3
+ apps/android/app/src/test/kotlin/com/elanvitalai/elanous/android/ui/chat/ChatHarnessBubble.test.ts > ChatScreen assistant bubble for harness-style turns > injects turn-end through NexusClient→ViewModel and observes the bubble badge
4
+ apps/android/app/src/test/kotlin/com/elanvitalai/elanous/android/ui/chat/ChatLastItemScrollOffset.test.ts > chatLastItemScrollOffset aligns the list to the last item end > ChatScreenLayoutTest drives ChatScreenLayout and observes last-item end alignment
5
+ scripts/hooks/claude-code-utterance.test.ts > UserPromptSubmit reaches the human Claude Code utterance query
6
+ scripts/lib/nl-routing-measurement.test.ts > NL routing corpus runner safety gate > the runner entrypoint stops after final surface resolution with non-zero exit and safety guidance
7
+ scripts/nl-routing-measurement.test.ts > NL routing corpus runner safety gate > the runner entrypoint stops after final surface resolution with non-zero exit and safety guidance
8
+ scripts/release-loop/freeze-off-parity.test.ts > freeze switch off: gate, publish and unattended release are byte-identical to pre-freeze behavior
9
+ scripts/test-deterministic.test.ts > terminateDirectChild > SIGKILLs the group when the direct child is already dead and a grandchild ignores SIGTERM
10
+ scripts/test-diet/effectiveness.test.ts > TD3 effectiveness > measure --effectiveness counts unreachable imports and leaves unreadable results absent
11
+ scripts/webclone/loop/mirror-age.test.ts > edition-check는 조용함을 재료 미러보다 앞에 두고, 미러는 기존 original-mirror 인자로 부른다
12
+ scripts/webclone/loop/mirror-age.test.ts > mirror-age > 12시간 경계 양쪽과 여러 미러를 fetchedAt만으로 한 줄씩 판정한다
13
+ scripts/webclone/loop/mirror-age.test.ts > mirror-age > 파일 mtime이 아니라 MIRROR.json fetchedAt으로 판정한다
14
+ scripts/webclone/loop/ruler-version.test.ts > ruler-version rc 계약 > 12시간을 넘긴 기준선은 rc 1 이고 ***origin-drift 로 재라***를 같이 낸다
15
+ scripts/webclone/loop/ruler-version.test.ts > ruler-version rc 계약 > 최근 기준선은 rc 0 이고 「묵었다」고 말하지 않는다
16
+ scripts/webclone/measure-fidelity.test.ts > main RenderProbe wiring > 로컬 링크가 우세한 미러 진입 문서는 링크 수와 self-contained 상태를 보존한다
17
+ scripts/webclone/measure-fidelity.test.ts > main RenderProbe wiring > 원격 링크가 60% 이상인 미러 진입 문서를 non-self-contained로 기록한다
18
+ scripts/webclone/measure-fidelity.test.ts > main RenderProbe wiring > 통제한 로컬 원문과 성공 프로브가 최종 렌더 위치까지 JSON 산출로 연결된다
19
+ scripts/webclone/measure-fidelity.test.ts > main mirror-entry locality wiring > 네트워크 지배 미러는 참조 수를 내고 픽셀 차이를 품질로 읽을 수 없다고 말한다
20
+ scripts/webclone/measure-fidelity.test.ts > main mirror-entry locality wiring > 로컬 지배 미러는 참조 수를 내고 네트워크 지배 경고를 내지 않는다
21
+ scripts/webclone/measure-fidelity.test.ts > main mirror-entry locality wiring > 미러 진입 문서가 없으면 참조 수와 지배 판정을 못 쟀다로 보존한다
22
+ scripts/webclone/measure-fidelity.test.ts > main overlay observability wiring > 원본과 사본 처리 수를 더해 내고 잔여 덮개면 픽셀 차이를 미신뢰로 표시한다
23
+ scripts/webclone/measure-fidelity.test.ts > main screenshot reliability wiring > 실제 정상·빈 PNG를 기본 통계 추출 경로로 읽어 RMSE를 보존하고 미러 공백 사유를 JSON에 낸다
24
+ src/acp/grok-leader-manager.test.ts > GrokLeaderManager · ensureLeader idempotency contract > ensureLeader returns state object (does not throw)
25
+ src/agent-mission/driver-workdir.test.ts > ignored files outside workdir are detected when created or modified
26
+ src/agent-mission/driver-workdir.test.ts > workdir skips git, runs PTY in the folder by default, and accepts a new mp4
27
+ src/autopilot/build/isolated-instance.test.ts > createIsolatedInstance — 주입 worktree > ★ defaultMergeMainIntoWorktree — fetch 실패 → error / up-to-date / merged (실 git)
28
+ src/dashboard/first-screen-band-wiring.test.ts > showDashboard renders the startup band before and after the real first chat input
29
+ src/directives/directive-index.test.ts > FTS5, incremental byte offsets, version search, redaction, track votes and labels; originals stay unchanged
30
+ src/git-fs/spawn-discipline.test.ts > 실제 저장소 — 이 게이트가 지키는 것 > 실물 git 프론트도어는 --help를 git argv로 전달하고 상태 줄과 git 종료 코드를 보존한다
31
+ src/git-fs/spawn-discipline.test.ts > 실제 저장소 — 이 게이트가 지키는 것 > 실물 진입점에서 scripts 유예와 요약을 산출한다
32
+ src/graph-runner/graph-cli.test.ts > graph YAML triggers.schedule fires through the workflow scheduler into graph tick and persists a run
33
+ src/graph-runner/graph-cli.test.ts > graph tick defaults to idle and --start passes JSON input, prints results, and does not restart a finished run
34
+ src/graph-runner/graph-variant-cli.test.ts > a paused variant resumes from its saved graph after the original template changes
35
+ src/graph-runner/graph-variant-cli.test.ts > a route plan without a budget also executes the changed route
36
+ src/graph-runner/graph-variant-cli.test.ts > ambiguous outcome plan is rejected before ledger or node execution
37
+ src/graph-runner/graph-variant-cli.test.ts > two plans on the same template execute distinct persisted variant graphs through fake nodes
38
+ src/graph-runner/graph-variant-cli.test.ts > variant preserves unrelated node and edge metadata in its runnable snapshot
39
+ src/harness/dogfood.test.ts > assertThrowawayTarget — C 안전 가드(auto-approve 우회 방지) > runHarnessDogfood 도 실경로 target 을 current CLI guidance와 함께 refuse
40
+ src/harness/dogfood.test.ts > assertThrowawayTarget — C 안전 가드(auto-approve 우회 방지) > ★ 실경로(홈·repo·시스템) → refuse with current CLI guidance
41
+ src/mss/logging/log-store.test.ts > LogStore writer contention > carries a failed open observation to the next writable connection
42
+ src/plugins/adapters/claude-package.test.ts > readClaudePackageLedger > reads this machine live ledger without a pluginsRoot override
43
+ src/self-implement/orchestrator-blocked-draft.test.ts > environment branch is committed and pushed to an existing origin without opening a PR
44
+ src/self-implement/orchestrator-blocked-draft.test.ts > environment stop without origin commits changes on the local branch for checkout recovery
45
+ src/self-implement/orchestrator-blocked-draft.test.ts > failed environment push is reported to the caller and never presented as preserved
46
+ src/self-implement/orchestrator-blocked-draft.test.ts > missing worktree keeps provider attribution and reports failed preservation without a draft
47
+ src/self-implement/orchestrator-blocked-draft.test.ts > no changes takes precedence over environment branch preservation
48
+ src/self-implement/orchestrator-blocked-draft.test.ts > quota-exhausted blocked run preserves its branch without opening a draft; implementation deficit still opens one
49
+ src/self-implement/orchestrator-blocked-draft.test.ts > worktree-only environment stop never pushes, even when an origin exists
50
+ src/self-implement/run-chain-query.test.ts > queryRunChain > pages past a full matching dispatch result page to find an old matching session
51
+ src/self-implement/seams-usage-role.test.ts > goal summary passes classify usage role alongside the unchanged resolved model
52
+ src/session-runtime/coding-surface-shell.test.ts > coding surface — shell 실행 tool 노출 > runtime 없는 Agent 폴백은 부모 도구·dispatcher·중단 신호를 자식에 보존한다
53
+ src/skills/tools/dev-harness.test.ts > dispatchRunDevHarness — P3 외부 repo 타깃 > target 실 git repo → repoRoot+elanousBinRoot 를 seam 으로
54
+ src/task-agent/mission.test.ts > shadow --mission → 미션 카드 1 ⊕ 조각 카드 4 · 같은 상태 파일 · 선행 없는 조각만 launch 수 · 나머지 wait after
55
+ src/task-orchestrator/surfaces/pod-pool-cli.test.ts > independent harness ask/say and self CLI dispatch run real kubectl apply only when lease permits
56
+ src/video-pipeline/recipes/reframe.test.ts > reframe — Affinity 가 없어도 «끝까지» 간다 > ⛔ 러너가 «없어도» 멈추지 않는다 (앱이 없는 고객 기계의 모습)
57
+ src/video-pipeline/recipes/vlog.test.ts > vlog 레시피 — 실제 ffmpeg > ⭐ build-layers — 덮는 층(스크림·자막)이 «투명»하다 (🩸 불투명 자막이 영상 전체를 덮었다)
58
+ src/webclone/archive-run.test.ts > 브라우저 재현 가능한 미러 계약 > 실제 wget은 POSIX ERE를 컴파일해 www 형제 자산만 받고 외부 호스트는 받지 않는다
59
+ test/acp-subagent-wire-meta.test.ts > AcpAgent.prompt · _meta forwarding > undefined meta → request omits _meta field
60
+ test/ad-production.test.ts > renders planned captions after assembly while preserving the uncaptained master and named failures
61
+ test/ad-qc-measure.test.ts > QC measurement adapter > uses distinct OCR artifacts for repeated and parallel video measurement plans
62
+ test/dashboard-acp-boot.test.ts > bootDashboardAcpSession — boot observability > records the selected branch and every successful boot outcome
63
+ test/dashboard-turn-typeahead-echo.test.ts > dashboard real user echo wiring > PTY screen preserves submitted Q2 → answer Q2 → submitted Q3 → answer Q3
64
+ test/finance-tools.test.ts > finance tool surface > SQL-injection guard on attractiveness args
65
+ test/finance-tools.test.ts > finance tool surface > finance_trend (A2.1/A4): rotation + country + guards + injection-safe
66
+ test/harness-worktree-add.test.ts > harness worktree add > 판정 신호: goal context records a leading H1 goal title instead of structural H2 headings
67
+ test/harness-worktree-add.test.ts > harness worktree add > 판정 신호: goal synthesis truncates generated output at 250 characters and falls back to title on empty or thrown model output
68
+ test/intake-plane-check-repo-axis.test.ts > frequent matches do not overflow the search buffer and disclose sampling
69
+ test/llm-openrouter-provider.test.ts > OpenRouter provider wire > ⛔ 교차 경로 — config 가 grok 이면 그 키·baseUrl 을 OpenRouter 로 «안» 보낸다
70
+ test/nexus-api-terminals.test.ts > handleTerminalsList > merges web preview PTYs into local and federated lists with their first registration time
71
+ test/oauth/codex-mirror-real-home-guard.test.ts > ① 가드 — 실홈이 대상이면 «던진다» (쓰기는 일어나지 않는다) > ⛔ «심볼릭 링크»로 우회해도 던진다 — 문자열 비교로는 통과했다(리뷰 must-fix)
72
+ test/ocr-tesseract.test.ts > OcrRegistry · Tesseract picker behaviour > strengths:["context-aware"] still picks LLM Vision (Tesseract loses)
73
+ test/persistent-grounding-runtime.test.ts > PersistentGrounding ToolRuntime > default registration alias dispatch runs the guarded search loop and records session observations
74
+ test/persistent-grounding-runtime.test.ts > PersistentGrounding ToolRuntime > generates one session ID for ambient observations and grounding when no session ID is supplied
75
+ test/plugin-hooks-shell.test.ts > shell-hook > array JSON → warn + {}
76
+ test/plugin-hooks-shell.test.ts > shell-hook > env propagated to shell
77
+ test/plugin-hooks-shell.test.ts > shell-hook > stdout JSON object → output
78
+ test/plugin-manifest-hooks.test.ts > plugin-host hook registration > end-to-end dispatch through registered manifest hook
79
+ test/plugin-missions-runtime.test.ts > PX-4 P3 — MissionRegistry > never policy: history grows + iteration advances each tick
80
+ test/plugin-missions-runtime.test.ts > PX-4 P3 — MissionRegistry > score_improvement: only strictly-better score advances
81
+ test/plugin-missions-runtime.test.ts > PX-4 P3 — runMissionEvaluator > parses JSON stdout into MissionResult
82
+ test/preview-terminal.test.ts > PreviewTerminal > resize reaches the kernel PTY — the shell sees the new size (stty size)
83
+ test/rules-contract.test.ts > 변경 ↔ 규칙 갱신 — sources 가 바뀌면 그 «규칙 파일»이 같은 diff 에 있다 > 이 검사가 무엇을 봤는지 «말한다»
84
+ test/self-dev-manual-goal-evidence.test.ts > hand-authored --file goal evidence contract > passes the attached requirement to the self-implement boundary for --file input
85
+ test/shell-audit-log.test.ts > shell-primitive audit-log: programmatic sink > run event includes truncated when output exceeds budget
86
+ test/shell-primitive.test.ts > shell-primitive: runShell (no approval) > maxOutputChars truncates and sets truncated=true
87
+ test/skill-tool-mermaid.test.ts > dispatchMermaidRender — happy path > renders a simple flowchart to Unicode boxes
88
+ test/voice-tts-providers.test.ts > TTS provider availability and unpaid default > falls back to edge-tts, not openai-tts, when nobody chose and no credential resolves
89
+ test/voice-tts-providers.test.ts > TTS provider availability and unpaid default > reports edge-tts and macos-say usable without credentials
90
+ test/workflow-templates-packaged.test.ts > the npm package carries every workflow template the repository has
91
+ test/plugin-missions-runtime.test.ts > [error]
@@ -5,6 +5,7 @@
5
5
  * 판정: `docs/reports/gate-0226-failure-census.tsv`가 accepted 실패 ID 96건을 중복 없이 보존하고,
6
6
  * 그중 `provider-intake` 6건(첫 감소 칸 GATE-0226-PROVIDER-INTAKE6)을 제외한 90건이 정확히 남으며,
7
7
  * `Error: no ACP` 로그 사건(34회)은 실패 ID로 더해지지 않았음. 보고서 md의 96행 색인과 선언 카운트도 실측과 일치.
8
+ * intake 제외 90개 ID는 변경 전 `44fe14face` TSV에서 고정한 accepted 목록과 집합 비교한다.
8
9
  *
9
10
  * 사용: bun run scripts/gate-0226-failure-census.ts [--tsv <path>] [--report <path>] [--accepted <path|none>] [--json] [--write-repair-card]
10
11
  *
@@ -17,6 +18,7 @@ import { join, resolve } from 'node:path';
17
18
  export const CENSUS_TSV = 'docs/reports/gate-0226-failure-census.tsv';
18
19
  export const CENSUS_REPORT = 'docs/reports/REPORT-gate-0226-failure-census.md';
19
20
  export const DEFAULT_ACCEPTED = 'elanous-hq/seat-state/OP/tools/accepted-0226.json';
21
+ export const DEFAULT_REMAINING_BASELINE = 'scripts/gate-0226-accepted-remaining-90.txt';
20
22
 
21
23
  export const EXPECTED_HEADER = [
22
24
  'no',
@@ -108,6 +110,7 @@ export type CensusAudit = {
108
110
  remainingIds: string[];
109
111
  acpLogEvents: number;
110
112
  ledger: { path: string; status: 'compared' | 'skipped' | 'failed'; ids: number };
113
+ remainingBaseline: { path: string; status: 'compared' | 'failed'; ids: number };
111
114
  };
112
115
 
113
116
  /** RFC4180 형식의 탭 구분 표를 읽는다. 실패 ID 안의 따옴표·탭·개행을 보존한다. */
@@ -259,6 +262,9 @@ export type AuditInput = {
259
262
  reportText: string;
260
263
  /** accepted 원장 ID. null 이면 비교 불가(원장 부재)를 산출로 남긴다. */
261
264
  acceptedIds: string[] | null;
265
+ /** 변경 전 독립 기준으로 고정한 remaining accepted ID 집합. */
266
+ remainingBaselineIds: string[] | null;
267
+ remainingBaselinePath: string;
262
268
  ledgerPath: string;
263
269
  ledgerRequired: boolean;
264
270
  };
@@ -355,6 +361,10 @@ export function auditCensus(input: AuditInput): CensusAudit {
355
361
  problems.push(`no-test-deletion-proposed: 근거 없이 시험 삭제를 제안한 행 ${deletionProposals.length}건 (${deletionProposals.slice(0, 6).join(',')})`);
356
362
  }
357
363
 
364
+ if (!input.reportText.includes('## 90건 후속 조사와 남은 수리 칸')) {
365
+ problems.push('report-follow-up: 90건 후속 조사·상태·주인 근거 절이 없다');
366
+ }
367
+
358
368
  const index = parseReportIndex(input.reportText);
359
369
  if (index.length !== rows.length) {
360
370
  problems.push(`report-index-parity: 보고서 색인 ${index.length}행 / TSV ${rows.length}행`);
@@ -386,6 +396,27 @@ export function auditCensus(input: AuditInput): CensusAudit {
386
396
  problems.push(`report-counts: 보고서가 \`${NO_ACP_MARKER}\` ${ACP_LOG_EVENTS}회 · 겹침 0건 배제를 명시하지 않는다`);
387
397
  }
388
398
 
399
+ let remainingBaseline: CensusAudit['remainingBaseline'];
400
+ if (input.remainingBaselineIds === null) {
401
+ problems.push(`remaining-baseline: 고정 기준 파일이 없다 (${input.remainingBaselinePath})`);
402
+ remainingBaseline = { path: input.remainingBaselinePath, status: 'failed', ids: 0 };
403
+ } else {
404
+ const baselineIds = input.remainingBaselineIds;
405
+ const baseline = new Set(baselineIds);
406
+ const actual = new Set(remainingIds);
407
+ const missing = [...baseline].filter((id) => !actual.has(id));
408
+ const extra = [...actual].filter((id) => !baseline.has(id));
409
+ if (baseline.size !== REMAINING_IDS || baseline.size !== baselineIds.length) {
410
+ problems.push(`remaining-baseline: 고정 기준은 중복 없이 ${REMAINING_IDS} ID여야 한다 (행 ${baselineIds.length} / 고유 ${baseline.size})`);
411
+ }
412
+ if (missing.length > 0 || extra.length > 0 || baseline.size !== actual.size) {
413
+ problems.push(`remaining-baseline: 기준 ${baseline.size}건 / TSV ${actual.size}건 · 누락 ${missing.length}${missing.length ? ` (${missing.slice(0, 3).join(' | ')})` : ''} · 추가 ${extra.length}${extra.length ? ` (${extra.slice(0, 3).join(' | ')})` : ''}`);
414
+ remainingBaseline = { path: input.remainingBaselinePath, status: 'failed', ids: baseline.size };
415
+ } else {
416
+ remainingBaseline = { path: input.remainingBaselinePath, status: 'compared', ids: baseline.size };
417
+ }
418
+ }
419
+
389
420
  let ledger: CensusAudit['ledger'];
390
421
  if (input.acceptedIds === null) {
391
422
  if (input.ledgerRequired) {
@@ -414,6 +445,7 @@ export function auditCensus(input: AuditInput): CensusAudit {
414
445
  remainingIds,
415
446
  acpLogEvents: acpAttributed.length,
416
447
  ledger,
448
+ remainingBaseline,
417
449
  };
418
450
  }
419
451
 
@@ -425,6 +457,7 @@ export function renderText(audit: CensusAudit): string {
425
457
  lines.push(`repair-cards: ${Object.entries(audit.counts.repair).map(([key, value]) => `${key}=${value}`).join(' ')}`);
426
458
  lines.push(`no-acp: ${audit.acpLogEvents} (로그 ${ACP_LOG_EVENTS}회 사건은 실패 ID가 아니다)`);
427
459
  lines.push(`accepted-ledger: ${audit.ledger.status} ${audit.ledger.path}${audit.ledger.status === 'skipped' ? ' (원장 부재 — 원장 대조 미실시)' : ''}`);
460
+ lines.push(`remaining-baseline: ${audit.remainingBaseline.status} ${audit.remainingBaseline.path} (${audit.remainingBaseline.ids})`);
428
461
  for (const problem of audit.problems) lines.push(`FAIL ${problem}`);
429
462
  lines.push(audit.ok ? 'census: PASS' : `census: FAIL (${audit.problems.length})`);
430
463
  return lines.join('\n');
@@ -491,10 +524,16 @@ export function main(argv: string[] = process.argv.slice(2), cwd: string = proce
491
524
  process.stdout.write(`repair-card: ${rewritten}행 재계산 → ${options.tsv}\n`);
492
525
  }
493
526
  const acceptedIds = options.accepted ? readAcceptedIds(options.accepted) : null;
527
+ const remainingBaselinePath = resolve(cwd, DEFAULT_REMAINING_BASELINE);
528
+ const remainingBaselineIds = existsSync(remainingBaselinePath)
529
+ ? readFileSync(remainingBaselinePath, 'utf8').split(/\r?\n/).filter((line) => line.length > 0 && !line.startsWith('#'))
530
+ : null;
494
531
  const audit = auditCensus({
495
532
  tsvText: readFileSync(options.tsv, 'utf8'),
496
533
  reportText: readFileSync(options.report, 'utf8'),
497
534
  acceptedIds,
535
+ remainingBaselineIds,
536
+ remainingBaselinePath: DEFAULT_REMAINING_BASELINE,
498
537
  ledgerPath: options.accepted ?? 'none',
499
538
  ledgerRequired: options.acceptedExplicit && options.accepted !== null,
500
539
  });
@@ -0,0 +1,48 @@
1
+ // TG-SAVED-ZERO 무대 — save(me) 대화의 가짜 저장 메시지로 흡수 경로를 세 번 지난다.
2
+ // ① 다른 주체가 이미 흡수한 판 · ② 사흘 0 관측 그대로(필터로 비어 커서만 전진) · ③ 판정선(저장 1건이 다음 흡수에 원장으로).
3
+ import { mkdtempSync } from 'node:fs';
4
+ import { tmpdir } from 'node:os';
5
+ import { join } from 'node:path';
6
+ import { collectTelegramSaved, readSavedCursor, renderCollectTelegramSavedResult, savedMessageToRaws, type SavedMessage } from '../src/intake-plane/collect-telegram-saved.js';
7
+ import { ingestIntakeItems, listIntakeItems, markIntakeItem, pickAbsorbQueue } from '../src/intake-plane/items.js';
8
+
9
+ const root = mkdtempSync(join(tmpdir(), 'tg-saved-zero-'));
10
+ const saved: SavedMessage[] = [
11
+ { id: 8959, date: '2026-10-22T00:05:00.000Z', text: 'https://example.com/first 메모', urls: [] },
12
+ { id: 8975, date: '2026-10-23T00:05:00.000Z', text: '', urls: [] },
13
+ { id: 9092, date: '2026-10-24T00:05:00.000Z', text: ' ', urls: [] },
14
+ { id: 9200, date: '2026-10-25T00:05:00.000Z', text: 'https://example.com/next 다음 것', urls: [] },
15
+ ];
16
+
17
+ // 대표가 텔레그램에서 «저장한» 목록의 창 — 지금 창 안의 메시지만 fetch 가 돌려준다.
18
+ let visibleUpTo = 8959;
19
+ const fetchSaved = async (minId: number) => saved.filter((m) => m.id > minId && m.id <= visibleUpTo);
20
+ const run = (max = 300) => collectTelegramSaved(root, fetchSaved, { max });
21
+
22
+ // ① 다른 주체(queue)가 8959 를 먼저 가져가 흡수까지 끝낸 판 — collect 는 «이미 끝난 것» 만 본다.
23
+ ingestIntakeItems(root, 'telegram-saved', savedMessageToRaws(saved[0]!));
24
+ for (const item of pickAbsorbQueue(root, { max: 10, laneMax: 30 })) markIntakeItem(root, item.id, { status: 'absorbed' });
25
+ const consumed = await run();
26
+ console.log('=== ① 같은 항목을 다른 주체(queue)가 먼저 흡수한 판 — «원장 입력 있음 · 새 0»');
27
+ console.log(renderCollectTelegramSavedResult(consumed));
28
+
29
+ // ② 사흘 0 의 관측 그대로 — 커서는 8959→9092 로 전진했는데 원장 입력 0(빈 메시지가 필터에 걸림)
30
+ visibleUpTo = 9092;
31
+ const filtered = await run();
32
+ console.log('=== ② 사흘 0 관측 그대로 — 커서만 8959 → 9092 로 전진 · 원장 입력 0');
33
+ console.log(renderCollectTelegramSavedResult(filtered));
34
+ console.log(` (원장 줄 수 ${listIntakeItems(root).length} — 그대로)`);
35
+
36
+ // ③ 판정 — 대표가 저장한 다음 메시지 1건(id 9200)이 다음 흡수에 원장으로 들어간다
37
+ visibleUpTo = 9200;
38
+ const next = await run();
39
+ console.log('=== ③ 판정 — 대표가 저장한 메시지 1건(id 9200)이 다음 흡수에 원장으로 들어감');
40
+ console.log(renderCollectTelegramSavedResult(next));
41
+
42
+ const links = listIntakeItems(root).map((i) => i.url);
43
+ console.log(`\n[ledger] 원장 링크 ${JSON.stringify(links)} · 커서 ${readSavedCursor(root)}`);
44
+ const ok = filtered.raws === 0 && filtered.cursorAfter === 9092 && filtered.messages === 2
45
+ && (next.ingest?.added ?? 0) === 1 && links.filter((u) => u === 'https://example.com/next').length === 1
46
+ && consumed.ingest?.seen === 1;
47
+ console.log(ok ? '[verdict] 판정선 통과 — 저장 메시지 1건이 다음 흡수에 원장으로 들어갔다' : '[verdict] 판정선 실패');
48
+ process.exitCode = ok ? 0 : 1;
@@ -12,10 +12,9 @@
12
12
  // 경로(model 미지정 ⇒ providerFor(cfg))를 그대로 보존한다. 값이 없거나 빈 값이면
13
13
  // parseArgv 오류를 던져 기본 모델로 조용히 실행되지 않도록 한다.
14
14
  //
15
- // ⛔ 의도된 경계(비연결 선언): 이 유닛은 «정의 + 단위시험» 에서 멈춘다.
16
- // scripts/morning-report.ts 탑레벨(CLI 진입) → composeMorningReport(..., { model }) 배선은
17
- // 의존 형제 샤드(task:d0183079b142)의 몫이다. 지금 이 유닛을 실행 경로에서 부르는 곳은
18
- // scripts/lib/morning-report-options.test.ts(bun test, in-process) 다.
15
+ // ✅ 배선 완료(SWAP-BENCH-CRON): scripts/morning-report.ts 탑레벨(CLI 진입)이 이 파서를
16
+ // 호출해 --narrative-model 값을 composeMorningReport(..., { model }) 로 넘긴다.
17
+ // 배선 계약 시험은 test/morning-report.test.ts(mock 무대)가 누른다.
19
18
 
20
19
  import { parseArgv, type ArgvContract } from './argv.js';
21
20