elanous 0.2.32 → 0.2.34

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 (633) 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/{IVKr3AlRUVLKsw2fh7eXF → L04y73dlwKeTW-GetaTF3}/_buildManifest.js +1 -1
  4. package/apps/pwa/out/_next/static/chunks/1162.c69abda138c7ce43.js +79 -0
  5. package/apps/pwa/out/_next/static/chunks/1449-1fede62af84c3e43.js +1 -0
  6. package/apps/pwa/out/_next/static/chunks/1598-13fc845935e816df.js +1 -0
  7. package/apps/pwa/out/_next/static/chunks/1639.62c5e16fa20d242f.js +94 -0
  8. package/apps/pwa/out/_next/static/chunks/{4174.92ed04922709ac9e.js → 1644.35dd25240ae24e4b.js} +2 -2
  9. package/apps/pwa/out/_next/static/chunks/1661-adb8b2babc9aaf8c.js +1 -0
  10. package/apps/pwa/out/_next/static/chunks/{2940-619bfd8ef337c611.js → 1895-60ed0e341c658bd4.js} +1 -1
  11. package/apps/pwa/out/_next/static/chunks/{5525.86debf231e181813.js → 2124.ed5bf480cea7f85b.js} +1 -1
  12. package/apps/pwa/out/_next/static/chunks/2147.107c0fc6146fb15a.js +23 -0
  13. package/apps/pwa/out/_next/static/chunks/2202-ef1c9b000c3074fc.js +1 -0
  14. package/apps/pwa/out/_next/static/chunks/2247.1e326638ee43e672.js +115 -0
  15. package/apps/pwa/out/_next/static/chunks/2268.56e1e3d58180abae.js +8 -0
  16. package/apps/pwa/out/_next/static/chunks/2469-606819c812414021.js +1 -0
  17. package/apps/pwa/out/_next/static/chunks/{6092.a7f99e68b188ca66.js → 2547.dd27303624cb4da8.js} +1 -1
  18. package/apps/pwa/out/_next/static/chunks/{2213.2ccbada92c33ea0f.js → 2554.3b5e200f5f5cfcd6.js} +16 -16
  19. package/apps/pwa/out/_next/static/chunks/2593.e53c1620c0bb3599.js +1 -0
  20. package/apps/pwa/out/_next/static/chunks/2690.e96671114222676a.js +1 -0
  21. package/apps/pwa/out/_next/static/chunks/2898-79ee1a5cc0cd9d13.js +1 -0
  22. package/apps/pwa/out/_next/static/chunks/298.26099a9f65e5c8ff.js +1 -0
  23. package/apps/pwa/out/_next/static/chunks/{5173-233188df2f42c626.js → 2987-30cf9c2eb7b8bdd5.js} +1 -1
  24. package/apps/pwa/out/_next/static/chunks/2992.51fc2a7295bd8139.js +1 -0
  25. package/apps/pwa/out/_next/static/chunks/{3541-ce3a5424ed5ad7f1.js → 3001-5a52788c813b6113.js} +1 -1
  26. package/apps/pwa/out/_next/static/chunks/3014-291245fba9df7b5b.js +1 -0
  27. package/apps/pwa/out/_next/static/chunks/3068.ee78201f0251a18d.js +1 -0
  28. package/apps/pwa/out/_next/static/chunks/3083.cd399a17e9365f78.js +1 -0
  29. package/apps/pwa/out/_next/static/chunks/3103.84470c8445962f04.js +34 -0
  30. package/apps/pwa/out/_next/static/chunks/{6433.fc573af22bbc9ab7.js → 3110.0a7065f25c841818.js} +17 -17
  31. package/apps/pwa/out/_next/static/chunks/3117-e1c474683fd1f824.js +1 -0
  32. package/apps/pwa/out/_next/static/chunks/3121.779fafe3e44612c5.js +1 -0
  33. package/apps/pwa/out/_next/static/chunks/3251-2c17bd5a91f8de2e.js +1 -0
  34. package/apps/pwa/out/_next/static/chunks/326.3fb32322bb2ddf6d.js +1 -0
  35. package/apps/pwa/out/_next/static/chunks/3411-f87314c6c66ebc73.js +1 -0
  36. package/apps/pwa/out/_next/static/chunks/{6157.0c9af021de4fb31b.js → 3414.172ad4ca2d9b08e8.js} +2 -2
  37. package/apps/pwa/out/_next/static/chunks/3421-7ff7fbaa156985a7.js +1 -0
  38. package/apps/pwa/out/_next/static/chunks/{4745.67d6f99c245af3f7.js → 3498.cf2a15a8a9e5b926.js} +3 -3
  39. package/apps/pwa/out/_next/static/chunks/381.f55dc63ea87735e6.js +1 -0
  40. package/apps/pwa/out/_next/static/chunks/3819.163d4777f0a597f6.js +32 -0
  41. package/apps/pwa/out/_next/static/chunks/{5543.a438b8ab5a13ea47.js → 3837.722e053fb9f321ad.js} +1 -1
  42. package/apps/pwa/out/_next/static/chunks/4129-ab0a6189f1778633.js +1 -0
  43. package/apps/pwa/out/_next/static/chunks/4361.93d14ba594b3a035.js +104 -0
  44. package/apps/pwa/out/_next/static/chunks/4364.7a7eb19cceb67d2f.js +286 -0
  45. package/apps/pwa/out/_next/static/chunks/4406.d71f506f7c3ee9d3.js +149 -0
  46. package/apps/pwa/out/_next/static/chunks/4461.2ad1514180ae7e29.js +148 -0
  47. package/apps/pwa/out/_next/static/chunks/4479.bd309cbe0e3842ee.js +64 -0
  48. package/apps/pwa/out/_next/static/chunks/4522-05966f777d66d13b.js +1 -0
  49. package/apps/pwa/out/_next/static/chunks/4543-9a3e9812e845de65.js +1 -0
  50. package/apps/pwa/out/_next/static/chunks/4557.f8f1d84a0d90d590.js +74 -0
  51. package/apps/pwa/out/_next/static/chunks/4589-79b11542179ef58c.js +1 -0
  52. package/apps/pwa/out/_next/static/chunks/4633-9f8f9f88ffbb8f5c.js +1 -0
  53. package/apps/pwa/out/_next/static/chunks/4831.23af4d10c0697b5e.js +1 -0
  54. package/apps/pwa/out/_next/static/chunks/4983.5951b85724f61f2a.js +1 -0
  55. package/apps/pwa/out/_next/static/chunks/{b313b242.cb1265eea908db61.js → 4fa33ebd.21c1bd5b294496e6.js} +1 -1
  56. package/apps/pwa/out/_next/static/chunks/{997ce8a5-2ad501927003b41b.js → 5014f970-22bef0b5210f7d60.js} +1 -1
  57. package/apps/pwa/out/_next/static/chunks/{2112-e4efc21a6505d5bc.js → 5028-f0722e6114c313e7.js} +1 -1
  58. package/apps/pwa/out/_next/static/chunks/{2898.fd781bc7cf01a7b7.js → 5249.96a848656b582a93.js} +1 -1
  59. package/apps/pwa/out/_next/static/chunks/5311.16e0ffbfa5468b80.js +62 -0
  60. package/apps/pwa/out/_next/static/chunks/{9407.e49124dedf0f5e72.js → 5446.edf141cff9ef647d.js} +1 -1
  61. package/apps/pwa/out/_next/static/chunks/{9002.e5658224e3dc1b6f.js → 5489.ec2dd1b5272a19dc.js} +1 -1
  62. package/apps/pwa/out/_next/static/chunks/{1335-6731f392c35216eb.js → 5576-82d3703636d5c4b9.js} +3 -3
  63. package/apps/pwa/out/_next/static/chunks/559.df87695df637920c.js +1 -0
  64. package/apps/pwa/out/_next/static/chunks/5618-5c88f2f70178c4ad.js +1 -0
  65. package/apps/pwa/out/_next/static/chunks/5764.05487bf0b73ddb6b.js +1 -0
  66. package/apps/pwa/out/_next/static/chunks/5930.e678826c3f831aab.js +1 -0
  67. package/apps/pwa/out/_next/static/chunks/5dfb57f7.f2e3305326202474.js +1 -0
  68. package/apps/pwa/out/_next/static/chunks/6053-d893974de92e6198.js +1 -0
  69. package/apps/pwa/out/_next/static/chunks/{2985.39ccdecd36848b12.js → 6086.913a69e6fa3e4a8b.js} +4 -4
  70. package/apps/pwa/out/_next/static/chunks/6200-cefd6f33f59d765e.js +1 -0
  71. package/apps/pwa/out/_next/static/chunks/6314-edeba650ae686ac9.js +1 -0
  72. package/apps/pwa/out/_next/static/chunks/6316-bc9a9b74d7842d79.js +1 -0
  73. package/apps/pwa/out/_next/static/chunks/6476-13b9779b73528008.js +1 -0
  74. package/apps/pwa/out/_next/static/chunks/666-04db3ac4c8e3c66f.js +1 -0
  75. package/apps/pwa/out/_next/static/chunks/670.682e55106ef915a6.js +77 -0
  76. package/apps/pwa/out/_next/static/chunks/{7862.30a8d6482bb238eb.js → 6740.43de73fc427c9fe2.js} +1 -1
  77. package/apps/pwa/out/_next/static/chunks/6816.b7ba9d0a1a4a46a7.js +1 -0
  78. package/apps/pwa/out/_next/static/chunks/690-fbbcc777f189af37.js +1 -0
  79. package/apps/pwa/out/_next/static/chunks/6989.0d3d4020e5cb3df6.js +90 -0
  80. package/apps/pwa/out/_next/static/chunks/{2871.0bca6137343b3f76.js → 7005.1623d2aea78eb85f.js} +1 -1
  81. package/apps/pwa/out/_next/static/chunks/7193-cf355cca5ba6c5d5.js +1 -0
  82. package/apps/pwa/out/_next/static/chunks/7217-d17393fe7af78fa6.js +1 -0
  83. package/apps/pwa/out/_next/static/chunks/7232.24edbd938a69c8d0.js +1 -0
  84. package/apps/pwa/out/_next/static/chunks/7295cd1e.b4b557908888eeee.js +1 -0
  85. package/apps/pwa/out/_next/static/chunks/7323.adb02de21991883c.js +1 -0
  86. package/apps/pwa/out/_next/static/chunks/7386.5d8e7e42e818dfb6.js +287 -0
  87. package/apps/pwa/out/_next/static/chunks/{7502.ccd5b8065545edd0.js → 7431.3051e9b8a4372d2d.js} +2 -2
  88. package/apps/pwa/out/_next/static/chunks/{3583.a05e88cc8d594628.js → 7448.478958ffbbba0ac0.js} +1 -1
  89. package/apps/pwa/out/_next/static/chunks/7537.ba2208c5c656b8a3.js +1 -0
  90. package/apps/pwa/out/_next/static/chunks/7562.948255cbc3e79d33.js +41 -0
  91. package/apps/pwa/out/_next/static/chunks/7596-962ae6db6cfc9c83.js +1 -0
  92. package/apps/pwa/out/_next/static/chunks/7671.cff51beac212a2ba.js +1 -0
  93. package/apps/pwa/out/_next/static/chunks/7883.3916734ee16d3e58.js +27 -0
  94. package/apps/pwa/out/_next/static/chunks/{9989.3694300e5f000b14.js → 7952.b192c31b6a0e00cc.js} +1 -1
  95. package/apps/pwa/out/_next/static/chunks/801.5b24e81eded22d1b.js +1 -0
  96. package/apps/pwa/out/_next/static/chunks/8176.8c9a8613f5a01ac1.js +36 -0
  97. package/apps/pwa/out/_next/static/chunks/819e78a6.fa3dd7f7da19bf61.js +1 -0
  98. package/apps/pwa/out/_next/static/chunks/8220-78978450c3183d8d.js +1 -0
  99. package/apps/pwa/out/_next/static/chunks/8221-eb60b5bc692a3361.js +1 -0
  100. package/apps/pwa/out/_next/static/chunks/826.e9a26064f474949e.js +1 -0
  101. package/apps/pwa/out/_next/static/chunks/{5307.60f2209e809bd627.js → 8368.014caa8de2f5af34.js} +1 -1
  102. package/apps/pwa/out/_next/static/chunks/8459-a351487a4480f584.js +1 -0
  103. package/apps/pwa/out/_next/static/chunks/8482-75823d513a4ce151.js +1 -0
  104. package/apps/pwa/out/_next/static/chunks/8488.8da515248cda3f3a.js +1 -0
  105. package/apps/pwa/out/_next/static/chunks/{9221.7d22eaf353a2d4e7.js → 8548.036c344973968847.js} +1 -1
  106. package/apps/pwa/out/_next/static/chunks/8584.388a1779d9b203af.js +1 -0
  107. package/apps/pwa/out/_next/static/chunks/8637.a55e098e61ffefb8.js +1 -0
  108. package/apps/pwa/out/_next/static/chunks/8817.61bb7ffbba502ecb.js +1 -0
  109. package/apps/pwa/out/_next/static/chunks/{9398-6aed28f0a96d0d6f.js → 9131-fce7256c4180c4a5.js} +1 -1
  110. package/apps/pwa/out/_next/static/chunks/9207-8e6a12db30373f32.js +1 -0
  111. package/apps/pwa/out/_next/static/chunks/9263-00ae932c62696a86.js +1 -0
  112. package/apps/pwa/out/_next/static/chunks/9318.caafc3a130e8769c.js +1 -0
  113. package/apps/pwa/out/_next/static/chunks/932.da3fb55951882562.js +93 -0
  114. package/apps/pwa/out/_next/static/chunks/9433.002f8426ac75b6b7.js +1 -0
  115. package/apps/pwa/out/_next/static/chunks/9464.dd631a5a14b1d660.js +24 -0
  116. package/apps/pwa/out/_next/static/chunks/{3278.2e5d15b53a4091c8.js → 9550.d5f76828f972058c.js} +2 -2
  117. package/apps/pwa/out/_next/static/chunks/{2534.e85ae21ad0dac829.js → 9739.8d5f36ac67a3b236.js} +1 -1
  118. package/apps/pwa/out/_next/static/chunks/9743.beeabb9d5f86abe4.js +1 -0
  119. package/apps/pwa/out/_next/static/chunks/9843-a23d3f32dc43f715.js +1 -0
  120. package/apps/pwa/out/_next/static/chunks/994-28211077c7c587d5.js +1 -0
  121. package/apps/pwa/out/_next/static/chunks/{7a1887c4.f36b88fba31da8fd.js → 9a8cb466.cc9fc9e6e46038aa.js} +1 -1
  122. package/apps/pwa/out/_next/static/chunks/{0bb0ff36.b8d418980951e5ba.js → 9b48c871.204d5d13e7809bd0.js} +7 -7
  123. package/apps/pwa/out/_next/static/chunks/{409f1e57.d0649fc47691ebfe.js → abb4b98b.163e0f56e84ae35d.js} +1 -1
  124. package/apps/pwa/out/_next/static/chunks/app/_not-found/page-3b4c947f174e33d8.js +1 -0
  125. package/apps/pwa/out/_next/static/chunks/app/approvals/page-369d5ce99483f859.js +1 -0
  126. package/apps/pwa/out/_next/static/chunks/app/autopilot/page-63c0ed0eb26e5fce.js +1 -0
  127. package/apps/pwa/out/_next/static/chunks/app/board/page-62802c6003bc85cc.js +1 -0
  128. package/apps/pwa/out/_next/static/chunks/app/botlab/page-ecb41560d4e77be9.js +1 -0
  129. package/apps/pwa/out/_next/static/chunks/app/bots/page-7b65ad8130c93e95.js +1 -0
  130. package/apps/pwa/out/_next/static/chunks/app/ceo/page-8755477c15a9060c.js +1 -0
  131. package/apps/pwa/out/_next/static/chunks/app/chat/page-5725447dd972c471.js +1 -0
  132. package/apps/pwa/out/_next/static/chunks/app/consult/page-b979de0591a69375.js +1 -0
  133. package/apps/pwa/out/_next/static/chunks/app/control/page-6d0796bf4633751a.js +1 -0
  134. package/apps/pwa/out/_next/static/chunks/app/decisions/page-59c31dc0394e67b4.js +1 -0
  135. package/apps/pwa/out/_next/static/chunks/app/design-check/page-12dfc95f6cc5c718.js +1 -0
  136. package/apps/pwa/out/_next/static/chunks/app/editor/page-25788244e66aa4dd.js +1 -0
  137. package/apps/pwa/out/_next/static/chunks/app/exec/page-a2555dc705466322.js +1 -0
  138. package/apps/pwa/out/_next/static/chunks/app/field/page-4fb31eb476dcbad3.js +1 -0
  139. package/apps/pwa/out/_next/static/chunks/app/healthz/route-3b4c947f174e33d8.js +1 -0
  140. package/apps/pwa/out/_next/static/chunks/app/inside/page-578729adbeaa40cb.js +1 -0
  141. package/apps/pwa/out/_next/static/chunks/app/intake/page-a1d20fffbec35205.js +1 -0
  142. package/apps/pwa/out/_next/static/chunks/app/layout-4a558f94516b8004.js +1 -0
  143. package/apps/pwa/out/_next/static/chunks/app/live/page-9e3834705b86145e.js +1 -0
  144. package/apps/pwa/out/_next/static/chunks/app/live-run/page-d7bff0f0905a662c.js +1 -0
  145. package/apps/pwa/out/_next/static/chunks/app/loops/page-cb1c5fe746ea4014.js +1 -0
  146. package/apps/pwa/out/_next/static/chunks/app/market/page-9ee320507356582a.js +1 -0
  147. package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-66fd183b74835886.js +1 -0
  148. package/apps/pwa/out/_next/static/chunks/app/morning/page-3272a064a01a9927.js +1 -0
  149. package/apps/pwa/out/_next/static/chunks/app/not-found-f281b7a7f6ef2529.js +1 -0
  150. package/apps/pwa/out/_next/static/chunks/app/observatory/page-d45a65f8b7124fcd.js +1 -0
  151. package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-e9c1fe684dd19a66.js +1 -0
  152. package/apps/pwa/out/_next/static/chunks/app/ops/release/page-b8322932fc6e34de.js +1 -0
  153. package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-82c66d9af2290575.js +1 -0
  154. package/apps/pwa/out/_next/static/chunks/app/outputs/page-63c6752009c97b05.js +1 -0
  155. package/apps/pwa/out/_next/static/chunks/app/page-bb33d42ebc358aec.js +1 -0
  156. package/apps/pwa/out/_next/static/chunks/app/reflection/page-7e4c9379197d7214.js +1 -0
  157. package/apps/pwa/out/_next/static/chunks/app/scheduler/page-38bf1e9a7001732b.js +1 -0
  158. package/apps/pwa/out/_next/static/chunks/app/sessions/page-2e5b752012389d56.js +1 -0
  159. package/apps/pwa/out/_next/static/chunks/app/settings/devices/{page-8c66a3b24a745630.js → page-398c0faa173203f7.js} +1 -1
  160. package/apps/pwa/out/_next/static/chunks/app/settings/page-002f53a965b6445c.js +1 -0
  161. package/apps/pwa/out/_next/static/chunks/app/setup/done/page-7f75997f61a26269.js +1 -0
  162. package/apps/pwa/out/_next/static/chunks/app/setup/layout-3b4c947f174e33d8.js +1 -0
  163. package/apps/pwa/out/_next/static/chunks/app/setup/page-05631753294f23fb.js +1 -0
  164. package/apps/pwa/out/_next/static/chunks/app/share/page-edd700fd2cc3d7f8.js +1 -0
  165. package/apps/pwa/out/_next/static/chunks/app/showroom/page-105f83ecb4594365.js +1 -0
  166. package/apps/pwa/out/_next/static/chunks/app/tasks/page-5823e87d2017f19c.js +1 -0
  167. package/apps/pwa/out/_next/static/chunks/app/term/{page-04d00ae9b0890349.js → page-df3445b207ceceab.js} +1 -1
  168. package/apps/pwa/out/_next/static/chunks/app/today/page-b51ca09566c03de7.js +1 -0
  169. package/apps/pwa/out/_next/static/chunks/app/trace/page-8aacd5ded5dbac60.js +1 -0
  170. package/apps/pwa/out/_next/static/chunks/app/vault/page-bae3365a0b3c6a8e.js +1 -0
  171. package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-9ed52b48ff1aa7fd.js +1 -0
  172. package/apps/pwa/out/_next/static/chunks/app/workflows/page-b6f8cad35fe00946.js +1 -0
  173. package/apps/pwa/out/_next/static/chunks/app/workspace/page-6d25ceda500d2457.js +1 -0
  174. package/apps/pwa/out/_next/static/chunks/app/worktrees/page-b6401a5f2c962fe8.js +1 -0
  175. package/apps/pwa/out/_next/static/chunks/ebf6cf5e.0d2f887b040e80fb.js +122 -0
  176. package/apps/pwa/out/_next/static/chunks/f09ec7d7-d29abe23edcbb193.js +1 -0
  177. package/apps/pwa/out/_next/static/chunks/{ebc7d829.264a0bcb6c750b50.js → ffdc3a04.b9c23c1b28dd4a96.js} +1 -1
  178. package/apps/pwa/out/_next/static/chunks/framework-9322cb8a56ac081c.js +1 -0
  179. package/apps/pwa/out/_next/static/chunks/main-2fbab294e49a1561.js +1 -0
  180. package/apps/pwa/out/_next/static/chunks/main-app-f36729f56621a8f3.js +1 -0
  181. package/apps/pwa/out/_next/static/chunks/pages/_app-2a62e450b47c6114.js +1 -0
  182. package/apps/pwa/out/_next/static/chunks/pages/_error-5e17f7b445f34d43.js +1 -0
  183. package/apps/pwa/out/_next/static/chunks/webpack-b4263e2190ea7adf.js +1 -0
  184. package/apps/pwa/out/approvals/index.html +1 -1
  185. package/apps/pwa/out/approvals/index.txt +22 -22
  186. package/apps/pwa/out/autopilot/index.html +1 -1
  187. package/apps/pwa/out/autopilot/index.txt +22 -22
  188. package/apps/pwa/out/board/index.html +1 -1
  189. package/apps/pwa/out/board/index.txt +22 -22
  190. package/apps/pwa/out/botlab/index.html +1 -1
  191. package/apps/pwa/out/botlab/index.txt +21 -21
  192. package/apps/pwa/out/bots/index.html +1 -1
  193. package/apps/pwa/out/bots/index.txt +21 -21
  194. package/apps/pwa/out/ceo/index.html +1 -1
  195. package/apps/pwa/out/ceo/index.txt +22 -22
  196. package/apps/pwa/out/chat/index.html +1 -1
  197. package/apps/pwa/out/chat/index.txt +21 -21
  198. package/apps/pwa/out/consult/index.html +1 -1
  199. package/apps/pwa/out/consult/index.txt +22 -22
  200. package/apps/pwa/out/control/index.html +1 -1
  201. package/apps/pwa/out/control/index.txt +22 -22
  202. package/apps/pwa/out/decisions/index.html +1 -1
  203. package/apps/pwa/out/decisions/index.txt +21 -21
  204. package/apps/pwa/out/design-check/index.html +1 -1
  205. package/apps/pwa/out/design-check/index.txt +22 -22
  206. package/apps/pwa/out/editor/index.html +1 -1
  207. package/apps/pwa/out/editor/index.txt +22 -22
  208. package/apps/pwa/out/exec/index.html +1 -1
  209. package/apps/pwa/out/exec/index.txt +22 -22
  210. package/apps/pwa/out/field/index.html +1 -1
  211. package/apps/pwa/out/field/index.txt +22 -22
  212. package/apps/pwa/out/healthz +1 -1
  213. package/apps/pwa/out/index.html +1 -1
  214. package/apps/pwa/out/index.txt +21 -21
  215. package/apps/pwa/out/inside/index.html +1 -1
  216. package/apps/pwa/out/inside/index.txt +21 -21
  217. package/apps/pwa/out/intake/index.html +1 -1
  218. package/apps/pwa/out/intake/index.txt +22 -22
  219. package/apps/pwa/out/live/index.html +1 -1
  220. package/apps/pwa/out/live/index.txt +22 -22
  221. package/apps/pwa/out/live-run/index.html +1 -1
  222. package/apps/pwa/out/live-run/index.txt +22 -22
  223. package/apps/pwa/out/loops/index.html +1 -1
  224. package/apps/pwa/out/loops/index.txt +21 -21
  225. package/apps/pwa/out/market/index.html +1 -1
  226. package/apps/pwa/out/market/index.txt +21 -21
  227. package/apps/pwa/out/missions/placeholder/index.html +1 -1
  228. package/apps/pwa/out/missions/placeholder/index.txt +21 -21
  229. package/apps/pwa/out/morning/index.html +1 -1
  230. package/apps/pwa/out/morning/index.txt +22 -22
  231. package/apps/pwa/out/observatory/index.html +1 -1
  232. package/apps/pwa/out/observatory/index.txt +22 -22
  233. package/apps/pwa/out/ops/checklist/index.html +1 -1
  234. package/apps/pwa/out/ops/checklist/index.txt +21 -21
  235. package/apps/pwa/out/ops/release/index.html +1 -1
  236. package/apps/pwa/out/ops/release/index.txt +21 -21
  237. package/apps/pwa/out/ops/seats/index.html +1 -1
  238. package/apps/pwa/out/ops/seats/index.txt +21 -21
  239. package/apps/pwa/out/outputs/index.html +1 -1
  240. package/apps/pwa/out/outputs/index.txt +21 -21
  241. package/apps/pwa/out/reflection/index.html +1 -1
  242. package/apps/pwa/out/reflection/index.txt +22 -22
  243. package/apps/pwa/out/scheduler/index.html +1 -1
  244. package/apps/pwa/out/scheduler/index.txt +22 -22
  245. package/apps/pwa/out/sessions/index.html +1 -1
  246. package/apps/pwa/out/sessions/index.txt +21 -21
  247. package/apps/pwa/out/settings/devices/index.html +1 -1
  248. package/apps/pwa/out/settings/devices/index.txt +22 -22
  249. package/apps/pwa/out/settings/index.html +1 -1
  250. package/apps/pwa/out/settings/index.txt +22 -22
  251. package/apps/pwa/out/setup/done/index.html +1 -1
  252. package/apps/pwa/out/setup/done/index.txt +22 -22
  253. package/apps/pwa/out/setup/index.html +1 -1
  254. package/apps/pwa/out/setup/index.txt +22 -22
  255. package/apps/pwa/out/share/index.html +1 -1
  256. package/apps/pwa/out/share/index.txt +22 -22
  257. package/apps/pwa/out/showroom/index.html +1 -1
  258. package/apps/pwa/out/showroom/index.txt +21 -21
  259. package/apps/pwa/out/tasks/index.html +1 -1
  260. package/apps/pwa/out/tasks/index.txt +22 -22
  261. package/apps/pwa/out/term/index.html +1 -1
  262. package/apps/pwa/out/term/index.txt +22 -22
  263. package/apps/pwa/out/today/index.html +1 -1
  264. package/apps/pwa/out/today/index.txt +22 -22
  265. package/apps/pwa/out/trace/index.html +1 -1
  266. package/apps/pwa/out/trace/index.txt +22 -22
  267. package/apps/pwa/out/vault/index.html +1 -1
  268. package/apps/pwa/out/vault/index.txt +22 -22
  269. package/apps/pwa/out/workflows/chat-ui/index.html +1 -1
  270. package/apps/pwa/out/workflows/chat-ui/index.txt +22 -22
  271. package/apps/pwa/out/workflows/index.html +1 -1
  272. package/apps/pwa/out/workflows/index.txt +22 -22
  273. package/apps/pwa/out/workspace/index.html +1 -1
  274. package/apps/pwa/out/workspace/index.txt +22 -22
  275. package/apps/pwa/out/worktrees/index.html +1 -1
  276. package/apps/pwa/out/worktrees/index.txt +22 -22
  277. package/bin/elanous.mjs +9 -2
  278. package/docs/goal-context/README.md +1 -0
  279. package/graphs/default-loop.yaml +20 -3
  280. package/graphs/document-loop.yaml +21 -2
  281. package/graphs/implement-loop.yaml +6 -0
  282. package/graphs/journey/SCENARIOS.md +33 -0
  283. package/graphs/journey/recipes.yaml +1 -0
  284. package/graphs/journey/ta-journey.yaml +84 -0
  285. package/graphs/journey/units/author/author.yaml +20 -0
  286. package/graphs/journey/units/author/recipes.yaml +2 -0
  287. package/graphs/journey/units/green/green.yaml +20 -0
  288. package/graphs/journey/units/green/recipes.yaml +2 -0
  289. package/graphs/journey/units/pr/pr.yaml +20 -0
  290. package/graphs/journey/units/pr/recipes.yaml +2 -0
  291. package/graphs/journey/units/remember/recipes.yaml +2 -0
  292. package/graphs/journey/units/remember/remember.yaml +20 -0
  293. package/graphs/operate-loop.yaml +21 -2
  294. package/graphs/overlays/stop-heal-ladder.yaml +1 -1
  295. package/graphs/release-rehearsal/recipes.yaml +1 -1
  296. package/graphs/release-rehearsal/release-rehearsal.yaml +2 -2
  297. package/graphs/research-loop.yaml +23 -2
  298. package/graphs/units/dispatch-pod/dispatch-pod.yaml +50 -0
  299. package/graphs/units/dispatch-pod/recipes.yaml +14 -0
  300. package/graphs/units/entry/entry.yaml +50 -0
  301. package/graphs/units/entry/recipes.yaml +14 -0
  302. package/graphs/units/harvest/harvest.yaml +25 -0
  303. package/graphs/units/harvest/recipes.yaml +4 -0
  304. package/graphs/units/land/land.yaml +45 -0
  305. package/graphs/units/land/recipes.yaml +3 -0
  306. package/graphs/units/recipes.yaml +7 -0
  307. package/graphs/units/recover.yaml +39 -0
  308. package/graphs/units/reflect/recipes.yaml +3 -0
  309. package/graphs/units/reflect/reflect.yaml +15 -0
  310. package/graphs/units/task-agent-recover-review.yaml +17 -0
  311. package/graphs/units/task-agent-recover-wait.yaml +17 -0
  312. package/graphs/units/verbs/make-doc.yaml +34 -0
  313. package/graphs/units/verbs/recipes.yaml +33 -0
  314. package/graphs/units/verbs/verify.yaml +55 -0
  315. package/graphs/work/recipes.yaml +2 -0
  316. package/graphs/work/research-report.yaml +28 -0
  317. package/package.json +1 -1
  318. package/scripts/ci-typecheck-changed.ts +69 -16
  319. package/scripts/docs/generate-graph-anatomy.ts +19 -2
  320. package/scripts/graph-harvest-unit.ts +22 -0
  321. package/scripts/graph-units/journey-stub.ts +6 -0
  322. package/scripts/graph-units/land-enqueue.ts +78 -0
  323. package/scripts/graph-units/recover-plan.ts +15 -0
  324. package/scripts/graph-units/reflect-node.ts +88 -0
  325. package/scripts/graph-units/ta-journey-observe.ts +109 -0
  326. package/scripts/graph-units/verbs/headless-goal-loop.ts +152 -0
  327. package/scripts/graph-units/verbs/verify-stage.ts +75 -0
  328. package/scripts/graph-units/verbs-envelope.ts +139 -0
  329. package/scripts/hq/standby-snapshot.ts +25 -0
  330. package/scripts/public-export.ts +43 -1
  331. package/scripts/ratchets/train-side-invariants.sh +45 -0
  332. package/scripts/release-loop/auto-approve-node.ts +30 -16
  333. package/scripts/release-loop/gate-closure.ts +5 -1
  334. package/scripts/release-loop/gate-diff.ts +1 -1
  335. package/scripts/release-loop/gate-node.ts +498 -31
  336. package/scripts/release-loop/gate-partial.ts +3 -3
  337. package/scripts/release-loop/gate-radius-shadow.ts +138 -0
  338. package/scripts/release-loop/gate-traffic-mode.ts +128 -0
  339. package/scripts/release-loop/gate-triage-node.ts +5 -2
  340. package/scripts/release-loop/known-issues-0.2.33-approved.json +194 -0
  341. package/scripts/release-loop/known-issues-node.ts +77 -8
  342. package/scripts/release-loop/preflight.ts +93 -7
  343. package/scripts/release-loop/publish-node.ts +60 -9
  344. package/scripts/release-loop/resume-cap.ts +56 -0
  345. package/scripts/release-loop/resume-release.ts +114 -15
  346. package/scripts/release-loop/resume.ts +24 -1
  347. package/scripts/release-loop/tui-sim-node.ts +8 -2
  348. package/scripts/release-loop/unattended-release.ts +8 -2
  349. package/src/acp/core-turn-bridge.ts +20 -5
  350. package/src/acp/reasoning-thought-buffer.ts +45 -0
  351. package/src/agent-substrate/acp-reviewer.ts +52 -12
  352. package/src/agent-substrate/review-finding-key.ts +53 -0
  353. package/src/agent-substrate/self-review-cli.ts +126 -5
  354. package/src/ask-user-question/pending-questions.ts +1 -1
  355. package/src/autopilot/pr-manager.ts +192 -43
  356. package/src/chat/tool-render/dispatch.ts +62 -10
  357. package/src/cli/control-cli.ts +24 -7
  358. package/src/cli/guardian-cli.ts +10 -0
  359. package/src/cli/light-entry-route.ts +35 -0
  360. package/src/cli/llm-detect-cli.ts +23 -1
  361. package/src/cli/pr-cli.ts +76 -12
  362. package/src/cli/pr-land-base-read.ts +2 -0
  363. package/src/cli/pr-land-overlap-evidence.ts +154 -16
  364. package/src/cli/pr-land-recovery.ts +64 -0
  365. package/src/cli/pty-takeover-cli.ts +6 -5
  366. package/src/cli/release-cli.ts +120 -33
  367. package/src/cli/release-run-if-ready.ts +29 -28
  368. package/src/cli/release-single-flight.ts +178 -0
  369. package/src/cli/seat-cli.ts +37 -0
  370. package/src/cli/setup-cli.ts +40 -1
  371. package/src/cli/tasks-cli.ts +149 -5
  372. package/src/control/control-status.ts +8 -3
  373. package/src/control-plane/ledger.ts +5 -3
  374. package/src/control-plane/server.ts +5 -3
  375. package/src/core-turn/short-question.ts +5 -1
  376. package/src/dashboard/index.ts +36 -67
  377. package/src/dashboard/input/chat-main-plain-turn-runtime.ts +3 -0
  378. package/src/dashboard/input/dashboard-plain-turn-stream.ts +4 -0
  379. package/src/dashboard/input/seat-autowake.ts +56 -3
  380. package/src/dashboard/seat-boot-preamble.ts +1 -1
  381. package/src/dashboard/slash-runtime/ask-clarification.ts +48 -0
  382. package/src/dashboard/slash-runtime/dashboard-delegated-slashes.ts +68 -0
  383. package/src/dashboard/slash-runtime/dashboard-handlers.ts +62 -322
  384. package/src/dashboard/slash-runtime/dashboard-log-slash.ts +208 -0
  385. package/src/dashboard/turn-preamble.ts +47 -1
  386. package/src/dashboard/turn-stream-formatter.ts +34 -1
  387. package/src/dashboard/turn-stream-runtime.ts +2 -0
  388. package/src/dashboard/turn-typeahead-prompt-zone.ts +67 -0
  389. package/src/domains/guardian-tick.ts +54 -2
  390. package/src/domains/outbound-alert.ts +3 -2
  391. package/src/extractors.ts +3 -1
  392. package/src/git-fs/retry.ts +4 -0
  393. package/src/git-fs/runner.ts +2 -0
  394. package/src/graph-runner/runner.ts +114 -44
  395. package/src/grok/credential.ts +5 -0
  396. package/src/harness/harness-cli-command.ts +39 -10
  397. package/src/harness/harness-incidents.ts +4 -0
  398. package/src/harness/harness-pod-dispatch.ts +38 -1
  399. package/src/harness/harness-salvage-cli.ts +14 -2
  400. package/src/index.ts +192 -8
  401. package/src/intake-plane/already-built-hint.ts +89 -0
  402. package/src/knowhow/pack.ts +199 -0
  403. package/src/light-cli.ts +95 -0
  404. package/src/llm.ts +55 -9
  405. package/src/loops/budget.ts +95 -0
  406. package/src/loops/msg-wake.ts +8 -2
  407. package/src/loops/orchestrator/traffic.ts +132 -1
  408. package/src/mss/logging/log-store.ts +4 -5
  409. package/src/nexus/api/graphs-api.ts +22 -3
  410. package/src/nexus/api/http-server.ts +1 -1
  411. package/src/nexus/api/ops-api.ts +12 -0
  412. package/src/oauth/claude-pty-maturity.ts +66 -0
  413. package/src/oauth/codex-access-mirror.ts +55 -0
  414. package/src/oauth/fallback-chain.ts +1 -1
  415. package/src/onboarding/first-run.ts +5 -3
  416. package/src/onboarding/non-interactive.ts +64 -13
  417. package/src/onboarding.ts +10 -2
  418. package/src/ops/overview-collect.ts +36 -1
  419. package/src/ops/overview.ts +11 -0
  420. package/src/pr-tool/census.ts +23 -5
  421. package/src/pr-tool/inflight-registry.ts +160 -7
  422. package/src/prompt-library/gpt6-family-addendum.ts +14 -1
  423. package/src/pty-shell/herdr-agent-report.ts +442 -0
  424. package/src/pty-shell/pty-control-ipc.ts +5 -5
  425. package/src/pty-shell/pty-write-outcome.ts +24 -6
  426. package/src/pty-shell/tui-run-state.ts +117 -3
  427. package/src/release-loop/checklist.ts +79 -5
  428. package/src/release-loop/feature-store.ts +19 -2
  429. package/src/release-loop/placement.ts +10 -3
  430. package/src/release-loop/rehearsal.ts +205 -25
  431. package/src/release-loop/rubric.ts +16 -2
  432. package/src/self-dev/draft-sweep.ts +52 -3
  433. package/src/self-dev/graph-journey-nodes.ts +10 -6
  434. package/src/self-dev/graph-journey-route.ts +60 -6
  435. package/src/self-dev/orchestrate.ts +79 -3
  436. package/src/self-dev/run-supervisor.ts +107 -12
  437. package/src/self-dev/run-types.ts +5 -1
  438. package/src/self-implement/gate-baseline.ts +49 -5
  439. package/src/self-implement/gate-remote.ts +9 -5
  440. package/src/self-implement/goal-author-identity.ts +66 -0
  441. package/src/self-implement/goal-author-preservation-obligation.ts +35 -0
  442. package/src/self-implement/goal-author.ts +4 -120
  443. package/src/self-implement/graph-overlay-yaml.ts +17 -2
  444. package/src/self-implement/graph-unit-flatten.ts +103 -0
  445. package/src/self-implement/graph-unit-resolver.ts +107 -0
  446. package/src/self-implement/graph-yaml.ts +151 -1
  447. package/src/self-implement/headless-elanous-driver.ts +1 -0
  448. package/src/self-implement/knowhow-pack.ts +103 -0
  449. package/src/self-implement/orchestrator.ts +8 -0
  450. package/src/self-implement/pod-warm-pool-profile.ts +45 -0
  451. package/src/self-implement/review-mustfix-class.ts +203 -0
  452. package/src/self-implement/run-stop.ts +8 -2
  453. package/src/self-implement/seams.ts +32 -1
  454. package/src/self-implement/stop-autoheal.ts +25 -1
  455. package/src/session/chat.ts +27 -0
  456. package/src/session-runtime/retry-policy.ts +2 -1
  457. package/src/skills/tools/schedule-wakeup.ts +66 -17
  458. package/src/steward/release-day.ts +7 -3
  459. package/src/steward/triage.ts +37 -4
  460. package/src/task-agent/harvest-unit.ts +141 -0
  461. package/src/task-agent/live-moves.ts +98 -12
  462. package/src/task-agent/parent-host.ts +93 -3
  463. package/src/task-agent/postland-card.ts +80 -1
  464. package/src/task-agent/rejudge-on-head.ts +112 -26
  465. package/src/task-agent/repair-branch-cas.ts +4 -1
  466. package/src/task-agent/repair-cycle.ts +16 -3
  467. package/src/task-agent/run-identity.ts +4 -3
  468. package/src/task-agent/shadow.ts +12 -2
  469. package/src/task-agent/task-hand.ts +54 -7
  470. package/src/task-agent/work-order-build.ts +22 -0
  471. package/src/task-orchestrator/surfaces/pod-account-broker.ts +39 -3
  472. package/src/task-orchestrator/surfaces/pod-command-job.ts +2 -1
  473. package/src/task-orchestrator/surfaces/pod-lifecycle-stages.ts +86 -8
  474. package/src/task-orchestrator/surfaces/pod-pool.ts +73 -17
  475. package/src/task-orchestrator/surfaces/pod-source-receive.ts +54 -4
  476. package/src/task-orchestrator/surfaces/pod-warm-worker-pod.ts +26 -3
  477. package/src/task-orchestrator/surfaces/pod-warm-worker-provider.ts +389 -0
  478. package/src/task-orchestrator/surfaces/pod-warm-worker-runtime.ts +2 -1
  479. package/src/task-orchestrator/surfaces/self-implement-pod.ts +223 -38
  480. package/src/task-orchestrator/surfaces/self-implement.ts +83 -2
  481. package/src/tool-runtime/truncation-store.ts +4 -0
  482. package/src/tui-client/dashboard-session.ts +10 -1
  483. package/src/user-config/coercion.ts +36 -0
  484. package/src/user-config.ts +18 -41
  485. package/src/ux-sim/scenario.ts +72 -13
  486. package/src/version/packed-revision.json +1 -1
  487. package/apps/pwa/out/_next/static/chunks/1034-8b639cee57b8e4a8.js +0 -1
  488. package/apps/pwa/out/_next/static/chunks/1085-6c2d35526f11f840.js +0 -1
  489. package/apps/pwa/out/_next/static/chunks/1220.1ff7d5cdc34b1ae5.js +0 -27
  490. package/apps/pwa/out/_next/static/chunks/1247.5884ec81b39fe2e7.js +0 -287
  491. package/apps/pwa/out/_next/static/chunks/1302.87681521a7a4661e.js +0 -62
  492. package/apps/pwa/out/_next/static/chunks/1324-59dae3002413623b.js +0 -1
  493. package/apps/pwa/out/_next/static/chunks/1343-f40b5870ac1eda5a.js +0 -1
  494. package/apps/pwa/out/_next/static/chunks/146-b6cd56be11dda017.js +0 -1
  495. package/apps/pwa/out/_next/static/chunks/1654.32de4b324981a188.js +0 -23
  496. package/apps/pwa/out/_next/static/chunks/1834-98b64172bc1efe77.js +0 -1
  497. package/apps/pwa/out/_next/static/chunks/1849.1ce38efa6c527d9a.js +0 -149
  498. package/apps/pwa/out/_next/static/chunks/1913.7cc6fb6055b1ed3f.js +0 -41
  499. package/apps/pwa/out/_next/static/chunks/2001.6c7e0fd02190886c.js +0 -1
  500. package/apps/pwa/out/_next/static/chunks/2030.41fae98c7e907304.js +0 -1
  501. package/apps/pwa/out/_next/static/chunks/2099-08b2f2dfba742c9b.js +0 -1
  502. package/apps/pwa/out/_next/static/chunks/2134.ecee03a550ee7250.js +0 -1
  503. package/apps/pwa/out/_next/static/chunks/2236.66061832181cb745.js +0 -1
  504. package/apps/pwa/out/_next/static/chunks/2422.b0bd272e7020d7e6.js +0 -1
  505. package/apps/pwa/out/_next/static/chunks/3040.92ff9ffc9f971cb9.js +0 -115
  506. package/apps/pwa/out/_next/static/chunks/3144.6861096c7b4edef7.js +0 -64
  507. package/apps/pwa/out/_next/static/chunks/3267c0e6.d34854e7b3984a6e.js +0 -1
  508. package/apps/pwa/out/_next/static/chunks/3771.e928edf2867d28c0.js +0 -1
  509. package/apps/pwa/out/_next/static/chunks/3902.e1e71aaac850a045.js +0 -34
  510. package/apps/pwa/out/_next/static/chunks/4063-03284b5de59965f3.js +0 -1
  511. package/apps/pwa/out/_next/static/chunks/4111.2bfedbb233ad206b.js +0 -1
  512. package/apps/pwa/out/_next/static/chunks/4300-c7ec4eeabbb5f3f7.js +0 -1
  513. package/apps/pwa/out/_next/static/chunks/4483.646d5065199e1b55.js +0 -36
  514. package/apps/pwa/out/_next/static/chunks/4519.28199ff26b2fd80d.js +0 -1
  515. package/apps/pwa/out/_next/static/chunks/4581.ef2443578054544f.js +0 -1
  516. package/apps/pwa/out/_next/static/chunks/4608-8d894e9cbe4f08bf.js +0 -1
  517. package/apps/pwa/out/_next/static/chunks/4639.ae48a01d1bb50a93.js +0 -286
  518. package/apps/pwa/out/_next/static/chunks/4739.08742ac668aada67.js +0 -77
  519. package/apps/pwa/out/_next/static/chunks/4882-16cef71d6a1a32be.js +0 -1
  520. package/apps/pwa/out/_next/static/chunks/4999.c064a4000c2a9e94.js +0 -79
  521. package/apps/pwa/out/_next/static/chunks/5260-69f35419bca263e7.js +0 -1
  522. package/apps/pwa/out/_next/static/chunks/5272.b92d1b72a15c25fe.js +0 -1
  523. package/apps/pwa/out/_next/static/chunks/5304.04d24756f242a094.js +0 -148
  524. package/apps/pwa/out/_next/static/chunks/5415-997980f828667736.js +0 -1
  525. package/apps/pwa/out/_next/static/chunks/5458-16cd7a2b51b74c8c.js +0 -1
  526. package/apps/pwa/out/_next/static/chunks/5572-42c9084f27ca761e.js +0 -1
  527. package/apps/pwa/out/_next/static/chunks/5661-80470aac963d9f36.js +0 -1
  528. package/apps/pwa/out/_next/static/chunks/5723.421338408b5c30c4.js +0 -74
  529. package/apps/pwa/out/_next/static/chunks/5809.64c3664267c50bce.js +0 -1
  530. package/apps/pwa/out/_next/static/chunks/6000.64bc21ac8627f2f5.js +0 -94
  531. package/apps/pwa/out/_next/static/chunks/6013.39459b9c68eabf5f.js +0 -1
  532. package/apps/pwa/out/_next/static/chunks/607-06466dff012b03ef.js +0 -1
  533. package/apps/pwa/out/_next/static/chunks/60fb96c9.360b01d8d4927b7b.js +0 -1
  534. package/apps/pwa/out/_next/static/chunks/6192.a190b989b81e9743.js +0 -1
  535. package/apps/pwa/out/_next/static/chunks/6323.8672b4817a306928.js +0 -1
  536. package/apps/pwa/out/_next/static/chunks/6444.7d1fdcb9b09ae71c.js +0 -1
  537. package/apps/pwa/out/_next/static/chunks/6517.4147878ac06d584d.js +0 -90
  538. package/apps/pwa/out/_next/static/chunks/6532.e34302010b2f0b68.js +0 -32
  539. package/apps/pwa/out/_next/static/chunks/6544cb48.a87fe20ddf137be2.js +0 -1
  540. package/apps/pwa/out/_next/static/chunks/6546.74bc4ed82f19016d.js +0 -104
  541. package/apps/pwa/out/_next/static/chunks/6684-e7523ce7c2fad075.js +0 -1
  542. package/apps/pwa/out/_next/static/chunks/6726.ebdc82feb161431e.js +0 -1
  543. package/apps/pwa/out/_next/static/chunks/6739.00fb6f892e5e392b.js +0 -1
  544. package/apps/pwa/out/_next/static/chunks/6745.934c4921bf15513a.js +0 -1
  545. package/apps/pwa/out/_next/static/chunks/6767.ea607cf0c20a25af.js +0 -24
  546. package/apps/pwa/out/_next/static/chunks/6843.67bfd020da0926c5.js +0 -93
  547. package/apps/pwa/out/_next/static/chunks/69-0a2c8209c6d4a158.js +0 -1
  548. package/apps/pwa/out/_next/static/chunks/6948.1062d4594652b5bf.js +0 -1
  549. package/apps/pwa/out/_next/static/chunks/7138-eaf841fc1dc03463.js +0 -1
  550. package/apps/pwa/out/_next/static/chunks/7174-cda29ee13d7790e7.js +0 -1
  551. package/apps/pwa/out/_next/static/chunks/7304-3c07583f4e405f4f.js +0 -1
  552. package/apps/pwa/out/_next/static/chunks/7371.80c05c653b08e907.js +0 -1
  553. package/apps/pwa/out/_next/static/chunks/7391.ebae168025c91b6a.js +0 -1
  554. package/apps/pwa/out/_next/static/chunks/7557.e325503a090a4310.js +0 -8
  555. package/apps/pwa/out/_next/static/chunks/7569-9ce9432c7f10989f.js +0 -1
  556. package/apps/pwa/out/_next/static/chunks/7886-55854585fadeded1.js +0 -1
  557. package/apps/pwa/out/_next/static/chunks/7947-d0759430f8042240.js +0 -1
  558. package/apps/pwa/out/_next/static/chunks/8018.a32663f04a6fc5f9.js +0 -1
  559. package/apps/pwa/out/_next/static/chunks/8097-9530c03bcc550f02.js +0 -1
  560. package/apps/pwa/out/_next/static/chunks/8215-1661812b6e9ad71f.js +0 -1
  561. package/apps/pwa/out/_next/static/chunks/8260-19c921a51ca8ec3e.js +0 -1
  562. package/apps/pwa/out/_next/static/chunks/8440.3a5cf5c85aa76db8.js +0 -1
  563. package/apps/pwa/out/_next/static/chunks/8519-4599be2249161e68.js +0 -1
  564. package/apps/pwa/out/_next/static/chunks/8547.b028b90c5c01ace6.js +0 -1
  565. package/apps/pwa/out/_next/static/chunks/8587-cbe02a953a7f4990.js +0 -1
  566. package/apps/pwa/out/_next/static/chunks/877-2b977259c4b15655.js +0 -1
  567. package/apps/pwa/out/_next/static/chunks/9019-0a4b40c50c7314fb.js +0 -1
  568. package/apps/pwa/out/_next/static/chunks/9138.b6e80031afb1d973.js +0 -1
  569. package/apps/pwa/out/_next/static/chunks/9188-d36e4fc869ddc166.js +0 -1
  570. package/apps/pwa/out/_next/static/chunks/9230.44f5039e796e4ab4.js +0 -1
  571. package/apps/pwa/out/_next/static/chunks/9279-d28c5b7754d010ae.js +0 -1
  572. package/apps/pwa/out/_next/static/chunks/939.336acce73e98482c.js +0 -1
  573. package/apps/pwa/out/_next/static/chunks/9610.c07cce4bfcc14ed7.js +0 -1
  574. package/apps/pwa/out/_next/static/chunks/9667-ce78c2ce91050ff9.js +0 -1
  575. package/apps/pwa/out/_next/static/chunks/app/_not-found/page-339fabb3499da0e1.js +0 -1
  576. package/apps/pwa/out/_next/static/chunks/app/approvals/page-504204b58c82c253.js +0 -1
  577. package/apps/pwa/out/_next/static/chunks/app/autopilot/page-a9717a67c2eecbaf.js +0 -1
  578. package/apps/pwa/out/_next/static/chunks/app/board/page-5c9ec30aee62dfbf.js +0 -1
  579. package/apps/pwa/out/_next/static/chunks/app/botlab/page-584191533721fa16.js +0 -1
  580. package/apps/pwa/out/_next/static/chunks/app/bots/page-73c4b4bb3ac7ab5f.js +0 -1
  581. package/apps/pwa/out/_next/static/chunks/app/ceo/page-c0f1ca371f710b06.js +0 -1
  582. package/apps/pwa/out/_next/static/chunks/app/chat/page-46430d45a9e04eac.js +0 -1
  583. package/apps/pwa/out/_next/static/chunks/app/consult/page-3b2ebf1dc64ff0be.js +0 -1
  584. package/apps/pwa/out/_next/static/chunks/app/control/page-a27b1e5a0d1b308f.js +0 -1
  585. package/apps/pwa/out/_next/static/chunks/app/decisions/page-25654b82094f7d22.js +0 -1
  586. package/apps/pwa/out/_next/static/chunks/app/design-check/page-8ea49a4c6dd2c6e7.js +0 -1
  587. package/apps/pwa/out/_next/static/chunks/app/editor/page-ce5113aefea0a8d1.js +0 -1
  588. package/apps/pwa/out/_next/static/chunks/app/exec/page-0e5a41fac1c75396.js +0 -1
  589. package/apps/pwa/out/_next/static/chunks/app/field/page-31aaf1ed37c6df9a.js +0 -1
  590. package/apps/pwa/out/_next/static/chunks/app/healthz/route-339fabb3499da0e1.js +0 -1
  591. package/apps/pwa/out/_next/static/chunks/app/inside/page-3dcc1fa411e1f4e0.js +0 -1
  592. package/apps/pwa/out/_next/static/chunks/app/intake/page-c69247e7134d329d.js +0 -1
  593. package/apps/pwa/out/_next/static/chunks/app/layout-66dc5cd3a0999abe.js +0 -1
  594. package/apps/pwa/out/_next/static/chunks/app/live/page-26ff7ff651a7217d.js +0 -1
  595. package/apps/pwa/out/_next/static/chunks/app/live-run/page-617b3976981efa96.js +0 -1
  596. package/apps/pwa/out/_next/static/chunks/app/loops/page-d256f5d5d9552823.js +0 -1
  597. package/apps/pwa/out/_next/static/chunks/app/market/page-ce8f1907b8a6101c.js +0 -1
  598. package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-33e182a316263116.js +0 -1
  599. package/apps/pwa/out/_next/static/chunks/app/morning/page-32866485913d6a04.js +0 -1
  600. package/apps/pwa/out/_next/static/chunks/app/not-found-7607cca9b84950c6.js +0 -1
  601. package/apps/pwa/out/_next/static/chunks/app/observatory/page-eeab86176b03dc3b.js +0 -1
  602. package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-5b93dbae3432b996.js +0 -1
  603. package/apps/pwa/out/_next/static/chunks/app/ops/release/page-77a6cb90a9cf2b10.js +0 -1
  604. package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-f47e768b5b242b5a.js +0 -1
  605. package/apps/pwa/out/_next/static/chunks/app/outputs/page-eb41aa3367fc2505.js +0 -1
  606. package/apps/pwa/out/_next/static/chunks/app/page-4d13ab0b8a267e3f.js +0 -1
  607. package/apps/pwa/out/_next/static/chunks/app/reflection/page-84dad32ff0fc0831.js +0 -1
  608. package/apps/pwa/out/_next/static/chunks/app/scheduler/page-95306f892aa2d0ee.js +0 -1
  609. package/apps/pwa/out/_next/static/chunks/app/sessions/page-940fb6c217f6b470.js +0 -1
  610. package/apps/pwa/out/_next/static/chunks/app/settings/page-7b675dfd35c36fc9.js +0 -1
  611. package/apps/pwa/out/_next/static/chunks/app/setup/done/page-8bd0d3cf7665bcfc.js +0 -1
  612. package/apps/pwa/out/_next/static/chunks/app/setup/layout-339fabb3499da0e1.js +0 -1
  613. package/apps/pwa/out/_next/static/chunks/app/setup/page-c219f2ed171131be.js +0 -1
  614. package/apps/pwa/out/_next/static/chunks/app/share/page-40f8fa21bdae955b.js +0 -1
  615. package/apps/pwa/out/_next/static/chunks/app/showroom/page-468f8313e4f1fbd9.js +0 -1
  616. package/apps/pwa/out/_next/static/chunks/app/tasks/page-7bbb8fa353a246c4.js +0 -1
  617. package/apps/pwa/out/_next/static/chunks/app/today/page-4214b855d9233ea8.js +0 -1
  618. package/apps/pwa/out/_next/static/chunks/app/trace/page-936752c7aa58762e.js +0 -1
  619. package/apps/pwa/out/_next/static/chunks/app/vault/page-ec052ad359df1797.js +0 -1
  620. package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-8305570551091338.js +0 -1
  621. package/apps/pwa/out/_next/static/chunks/app/workflows/page-fad650e4793adb65.js +0 -1
  622. package/apps/pwa/out/_next/static/chunks/app/workspace/page-d90e64743826e1d8.js +0 -1
  623. package/apps/pwa/out/_next/static/chunks/app/worktrees/page-a16bcfd49af86a32.js +0 -1
  624. package/apps/pwa/out/_next/static/chunks/e5012ffe.f727e23c231f4342.js +0 -122
  625. package/apps/pwa/out/_next/static/chunks/ea695e3c-1f1d70d740cf3031.js +0 -1
  626. package/apps/pwa/out/_next/static/chunks/framework-906af9bd029e166c.js +0 -1
  627. package/apps/pwa/out/_next/static/chunks/main-a24847f9f684d469.js +0 -1
  628. package/apps/pwa/out/_next/static/chunks/main-app-7bdcd8aa7c8397d3.js +0 -1
  629. package/apps/pwa/out/_next/static/chunks/pages/_app-6ba46a5066fc226d.js +0 -1
  630. package/apps/pwa/out/_next/static/chunks/pages/_error-a8dc6d07591f2a25.js +0 -1
  631. package/apps/pwa/out/_next/static/chunks/webpack-f13df28c15c55eee.js +0 -1
  632. package/src/cli/g6a-registration-probe.ts +0 -16
  633. /package/apps/pwa/out/_next/static/{IVKr3AlRUVLKsw2fh7eXF → L04y73dlwKeTW-GetaTF3}/_ssgManifest.js +0 -0
@@ -0,0 +1,88 @@
1
+ import { existsSync, readFileSync, readlinkSync, realpathSync } from 'node:fs';
2
+ import { join, resolve } from 'node:path';
3
+ import { homedir } from 'node:os';
4
+ import { spawnSync } from 'node:child_process';
5
+ import { getUserConfig } from '../../src/user-config.js';
6
+ import { isPodImageCommit } from '../../src/task-orchestrator/surfaces/pod-image-source.js';
7
+ import { debug } from '../../src/debug/log.js';
8
+
9
+ type Rec = Record<string, unknown>;
10
+ const rec = (v: unknown): Rec => v && typeof v === 'object' && !Array.isArray(v) ? v as Rec : {};
11
+ const sha = (v: unknown): v is string => typeof v === 'string' && /^[0-9a-f]{40}$/i.test(v);
12
+ const emit = (outcome: string, result: Rec, evidence: Rec) => {
13
+ debug.log('harness.journey', 'reflect.exit', { outcome, reason: result.reason ?? null, ...evidence });
14
+ console.log(JSON.stringify({ outcome, result, evidence }));
15
+ };
16
+
17
+ async function main() {
18
+ try {
19
+ const contextPath = process.env.ELANOUS_GRAPH_CONTEXT;
20
+ if (!contextPath) throw new Error('ELANOUS_GRAPH_CONTEXT missing');
21
+ const envelope = rec(JSON.parse(readFileSync(contextPath, 'utf8')));
22
+ debug.log('harness.journey', 'reflect.enter', { runId: envelope.runId ?? null, nodeId: envelope.nodeId ?? 'reflect' });
23
+ const input = rec(envelope.input);
24
+ const context = rec(input.context);
25
+ const prior = rec(input.prior);
26
+ const landed = context.landedSha ?? context.commit;
27
+ if (!sha(landed)) throw new Error('context.landedSha must be a full commit SHA');
28
+ const attempts = Number(rec(prior.result).attempts ?? prior.attempts ?? 0);
29
+ const maxAttempts = Number(context.maxAttempts ?? 3);
30
+ if (!Number.isInteger(attempts) || attempts < 0 || !Number.isInteger(maxAttempts) || maxAttempts < 1 || maxAttempts > 10) throw new Error('invalid bounded retry counters');
31
+
32
+ // Root overrides are accepted only in an isolated test universe, never from
33
+ // a production graph envelope that could forge an installed/pinned identity.
34
+ const isolated = process.env.NODE_ENV === 'test' || Boolean(process.env.ELANOUS_TEST_HOME?.trim());
35
+ if (!isolated && (context.installRoot || context.sourceRoot || context.configPath)) throw new Error('identity override requires test universe');
36
+ const root = resolve(isolated && typeof context.installRoot === 'string' ? context.installRoot : join(homedir(), '.local', 'share', 'elanous'));
37
+ const installRecord = join(root, 'install.json');
38
+ if (!existsSync(installRecord)) throw new Error(`install record missing: ${installRecord}`);
39
+ const installed = rec(JSON.parse(readFileSync(installRecord, 'utf8')));
40
+ const source = isolated && typeof context.sourceRoot === 'string' ? resolve(context.sourceRoot) : typeof installed.source === 'string' ? resolve(installed.source) : '';
41
+ const currentLink = join(root, 'current');
42
+ if (!source || !existsSync(currentLink)) throw new Error('installed source/current identity unknown');
43
+ const currentPath = realpathSync(currentLink);
44
+ const versionDir = installed.versionDir;
45
+ if (typeof versionDir !== 'string' || !/^versions\/[A-Za-z0-9][A-Za-z0-9._-]*$/.test(versionDir) ||
46
+ readlinkSync(currentLink) !== versionDir || realpathSync(join(root, versionDir)) !== currentPath) {
47
+ throw new Error('current symlink does not match install.json versionDir');
48
+ }
49
+ const entryPath = join(currentPath, 'node_modules', 'elanous', 'bin', 'elanous.mjs');
50
+ if (!existsSync(entryPath) || !realpathSync(entryPath).startsWith(`${currentPath}/`)) {
51
+ throw new Error('installed current entry missing or points outside current');
52
+ }
53
+ const currentCommit = installed.commit;
54
+ if (!sha(currentCommit)) throw new Error('install.json commit missing/invalid');
55
+ // The installer records the identity in three independent positions: the
56
+ // version directory name, the root record and a copy inside that version.
57
+ // A stale or forged root record alone cannot attest the installed entry.
58
+ if (!versionDir.toLowerCase().endsWith(`-${currentCommit.slice(0, 12).toLowerCase()}`)) {
59
+ throw new Error('installed version name does not match recorded commit');
60
+ }
61
+ const inside = rec(JSON.parse(readFileSync(join(currentPath, 'install.json'), 'utf8')));
62
+ if (inside.versionDir !== versionDir || inside.commit !== currentCommit) {
63
+ throw new Error('current install identity does not match root record');
64
+ }
65
+ // Pin provenance is the live config, never the untrusted graph input.
66
+ const configPath = isolated && typeof context.configPath === 'string' ? resolve(context.configPath) : undefined;
67
+ const pin = getUserConfig(configPath).harness?.imageCommit;
68
+ if (!isPodImageCommit(pin)) throw new Error('harness.imageCommit pin missing/invalid');
69
+ const git = spawnSync('git', ['-C', source, 'merge-base', '--is-ancestor', landed, currentCommit], { encoding: 'utf8' });
70
+ if (git.error || git.status !== 0 && git.status !== 1) throw new Error(`installed ancestry cannot be verified: ${git.stderr || git.error?.message || git.status}`);
71
+ const landedInstalled = git.status === 0;
72
+ // The image pin may be a 12-digit abbreviation: resolve it to a unique
73
+ // commit before checking ancestry, never compare abbreviated strings.
74
+ const expanded = spawnSync('git', ['-C', source, 'rev-parse', '--verify', `${pin.trim()}^{commit}`], { encoding: 'utf8' });
75
+ if (expanded.error || expanded.status !== 0 || !sha(expanded.stdout.trim())) throw new Error('harness pin commit cannot be resolved');
76
+ const pinCommit = expanded.stdout.trim();
77
+ const pinCheck = spawnSync('git', ['-C', source, 'merge-base', '--is-ancestor', landed, pinCommit], { encoding: 'utf8' });
78
+ if (pinCheck.error || pinCheck.status !== 0 && pinCheck.status !== 1) throw new Error(`harness pin ancestry cannot be verified: ${pinCheck.stderr || pinCheck.error?.message || pinCheck.status}`);
79
+ const matchesPin = pinCheck.status === 0;
80
+ const evidence = { landedSha: landed, installedCommit: currentCommit, harnessImageCommit: pin, pinCommit, currentPath, installRecord, installedSource: source, attempts, maxAttempts };
81
+ if (landedInstalled && matchesPin) return emit('done', { reflected: true, attempts }, evidence);
82
+ if (attempts + 1 < maxAttempts) return emit('wait', { reflected: false, attempts: attempts + 1, reason: !landedInstalled ? 'not-installed-yet' : 'image-pin-not-yet-reflecting' }, { ...evidence, attempts: attempts + 1, retryAfterSeconds: 60 });
83
+ return emit('needs-human', { reflected: false, attempts: attempts + 1, reason: !landedInstalled ? 'landed-sha-not-in-installed-current' : 'landed-sha-not-in-harness-image-pin' }, { ...evidence, attempts: attempts + 1 });
84
+ } catch (error) {
85
+ emit('needs-human', { reflected: false, reason: error instanceof Error ? error.message : String(error) }, { failClosed: true });
86
+ }
87
+ }
88
+ void main();
@@ -0,0 +1,109 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { passJourneyNode, type JourneyObservationNodeId } from '../../src/self-dev/graph-journey-nodes.js';
3
+ import type { GoalType } from '../../src/self-implement/goal-author.js';
4
+
5
+ type StepObservation = {
6
+ outcome?: unknown;
7
+ data?: Record<string, unknown>;
8
+ };
9
+ type JourneyContext = {
10
+ observations?: Record<string, StepObservation>;
11
+ substrate?: unknown;
12
+ runId?: unknown;
13
+ goalId?: unknown;
14
+ goalType?: GoalType;
15
+ };
16
+ type UnitId = 'entry' | 'dispatch-pod' | 'author' | 'pr';
17
+ type UnitResult = {
18
+ outcome: 'done' | 'needs-human' | 'failed';
19
+ result: { unit: UnitId; observed: boolean; observations: Record<string, string>; reason?: string };
20
+ evidence: { source: 'existing-harness-observation'; nodes: string[] };
21
+ };
22
+
23
+ const STEPS: Record<UnitId, readonly string[]> = {
24
+ entry: ['intake', 'queue', 'launch-gate'],
25
+ 'dispatch-pod': ['dispatch', 'pool-admit', 'image-sync', 'credential-refresh'],
26
+ author: ['author'],
27
+ pr: ['open-pr'],
28
+ };
29
+
30
+ function stringValue(value: unknown): string | undefined {
31
+ return typeof value === 'string' && value.trim() ? value.trim() : undefined;
32
+ }
33
+
34
+ /** Record only events that the existing execution path supplied; never infer a successful step. */
35
+ export function observeTaJourneyUnit(unit: UnitId, context: JourneyContext): UnitResult {
36
+ const supplied = context.observations ?? {};
37
+ const steps = STEPS[unit];
38
+ const outcomes: Record<string, string> = {};
39
+ const missing: string[] = [];
40
+
41
+ for (const node of steps) {
42
+ if (unit === 'dispatch-pod' && node !== 'dispatch' && context.substrate === 'local') continue;
43
+ const observation = supplied[node];
44
+ const outcome = stringValue(observation?.outcome);
45
+ if (!outcome) {
46
+ // A direct intake never enters the queue. Every other missing step is unresolved evidence.
47
+ if (unit === 'entry' && node === 'queue' && outcomes.intake === 'direct') continue;
48
+ missing.push(node);
49
+ continue;
50
+ }
51
+ outcomes[node] = outcome;
52
+ const helperNode = node as JourneyObservationNodeId;
53
+ passJourneyNode(helperNode, {
54
+ provenance: unit === 'author' ? 'authoring-start' : 'ta-journey-observation-wrapper',
55
+ ...(stringValue(context.runId) ? { runId: stringValue(context.runId) } : {}),
56
+ ...(context.goalType ? { goalType: context.goalType } : {}),
57
+ data: {
58
+ ...observation.data,
59
+ ...(stringValue(context.goalId) ? { goalId: stringValue(context.goalId) } : {}),
60
+ ...(unit === 'author' ? { phase: 'front' } : {}),
61
+ },
62
+ outcome,
63
+ });
64
+ }
65
+
66
+ const values = Object.values(outcomes);
67
+ if (values.some(value => value === 'failed' || value === 'error')) return {
68
+ outcome: 'failed',
69
+ result: { unit, observed: true, observations: outcomes, reason: 'existing-step-failed' },
70
+ evidence: { source: 'existing-harness-observation', nodes: Object.keys(outcomes) },
71
+ };
72
+
73
+ if (missing.length > 0) return {
74
+ outcome: 'needs-human',
75
+ result: { unit, observed: false, observations: outcomes, reason: `missing-observation:${missing.join(',')}` },
76
+ evidence: { source: 'existing-harness-observation', nodes: Object.keys(outcomes) },
77
+ };
78
+
79
+ const accepted: Record<string, readonly string[]> = {
80
+ intake: ['direct', 'queued'],
81
+ queue: ['launched'],
82
+ 'launch-gate': ['pass'],
83
+ dispatch: ['fresh', 'pr-source'],
84
+ 'pool-admit': ['admitted'],
85
+ 'image-sync': ['synced', 'current'],
86
+ 'credential-refresh': ['usable'],
87
+ author: ['authored', 'done'],
88
+ 'open-pr': ['pr-opened'],
89
+ };
90
+ const rejected = Object.entries(outcomes).some(([node, value]) => !accepted[node]?.includes(value));
91
+ return {
92
+ outcome: rejected ? 'needs-human' : 'done',
93
+ result: { unit, observed: true, observations: outcomes, ...(rejected ? { reason: 'existing-step-needs-human' } : {}) },
94
+ evidence: { source: 'existing-harness-observation', nodes: Object.keys(outcomes) },
95
+ };
96
+ }
97
+
98
+ if (import.meta.main) {
99
+ const unit = process.argv[2] as UnitId;
100
+ try {
101
+ const path = process.env.ELANOUS_GRAPH_CONTEXT;
102
+ if (!path) throw new Error('ELANOUS_GRAPH_CONTEXT is required');
103
+ const graphContext = JSON.parse(readFileSync(path, 'utf8')) as { input?: { context?: JourneyContext } };
104
+ const result = observeTaJourneyUnit(unit, graphContext.input?.context ?? {});
105
+ process.stdout.write(`${JSON.stringify(result)}\n`);
106
+ } catch (error) {
107
+ process.stdout.write(`${JSON.stringify({ outcome: 'failed', result: { unit, observed: false, reason: error instanceof Error ? error.message : String(error) }, evidence: { source: 'existing-harness-observation', nodes: [] } })}\n`);
108
+ }
109
+ }
@@ -0,0 +1,152 @@
1
+ /** Executes the existing self-implement seam for a verb unit's document draft. */
2
+ import { execFileSync } from 'node:child_process';
3
+ import { createHash } from 'node:crypto';
4
+ import { readFileSync, realpathSync } from 'node:fs';
5
+ import { isAbsolute, resolve } from 'node:path';
6
+ import type { ChildLlmSelection } from '../../../src/agent/run-context.js';
7
+ import { defaultSeams } from '../../../src/self-implement/seams.js';
8
+
9
+ type Context = {
10
+ graphId: string;
11
+ runId: string;
12
+ nodeId: string;
13
+ input: Record<string, unknown>;
14
+ outputs: Record<string, Record<string, unknown>>;
15
+ };
16
+
17
+ function required(value: unknown, name: string): string {
18
+ if (typeof value !== 'string' || !value.trim()) throw new Error(`verb headless-goal-loop input missing: ${name}`);
19
+ return value;
20
+ }
21
+
22
+ function context(): Context {
23
+ const path = required(process.env.ELANOUS_GRAPH_CONTEXT, 'ELANOUS_GRAPH_CONTEXT');
24
+ const parsed: unknown = JSON.parse(readFileSync(path, 'utf8'));
25
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) throw new Error('invalid verb graph context');
26
+ const ctx = parsed as Partial<Context>;
27
+ if (!['verb-make-doc', 'verb-verify'].includes(ctx.graphId ?? '') || !ctx.input || !ctx.outputs || !ctx.runId || !ctx.nodeId)
28
+ throw new Error('invalid verb graph context');
29
+ if (process.env.ELANOUS_GRAPH_DRY_RUN === '1') throw new Error('dry run must use the side-effect-free recipe');
30
+ return ctx as Context;
31
+ }
32
+
33
+ function repositoryRoot(): string {
34
+ return resolve(import.meta.dir, '../../..');
35
+ }
36
+
37
+ export function appendPriorToGoal(goal: string, prior: unknown): string {
38
+ if (prior === null || prior === undefined) return goal;
39
+ const serialized = JSON.stringify(prior, null, 2);
40
+ if (!serialized) return goal;
41
+ return `${goal}\n\n## Supplied prior research and evidence\nUse only this supplied packet for prior claims. Preserve its sources and limitations, and do not invent unsupported facts.\n\n\`\`\`json\n${serialized}\n\`\`\``;
42
+ }
43
+
44
+ export function childLlmSelectionFromRecipe(provider: string | undefined, model: string | undefined): ChildLlmSelection | undefined {
45
+ const resolvedProvider = provider?.trim();
46
+ const resolvedModel = model?.trim();
47
+ if (!resolvedProvider && !resolvedModel) return undefined;
48
+ if (!resolvedProvider || !resolvedModel) throw new Error('graph recipe child LLM requires both provider and model');
49
+ return { provider: resolvedProvider, model: resolvedModel, source: 'config' };
50
+ }
51
+
52
+ export function implementationRequestFromContext(
53
+ ctx: Pick<Context, 'runId' | 'input' | 'outputs'>,
54
+ env: { ELANOUS_GRAPH_CHILD_LLM_PROVIDER?: string; ELANOUS_GRAPH_CHILD_LLM_MODEL?: string },
55
+ ): { runId: string; feature: string; childLlm?: ChildLlmSelection } {
56
+ const prepared = ctx.outputs.prepare ?? {};
57
+ const goal = typeof prepared.goal === 'string' && prepared.goal.trim()
58
+ ? prepared.goal
59
+ : [ctx.input.ask, ctx.input['must-fix'], ctx.input['gate-log']].filter(Boolean).map(String).join('\n\n');
60
+ if (!goal.trim()) throw new Error('verb headless-goal-loop input missing: goal/ask');
61
+ const prior = prepared.prior ?? ctx.input.prior;
62
+ const childLlm = childLlmSelectionFromRecipe(
63
+ env.ELANOUS_GRAPH_CHILD_LLM_PROVIDER,
64
+ env.ELANOUS_GRAPH_CHILD_LLM_MODEL,
65
+ );
66
+ return {
67
+ runId: ctx.runId,
68
+ feature: appendPriorToGoal(goal, prior),
69
+ ...(childLlm ? { childLlm } : {}),
70
+ };
71
+ }
72
+
73
+ export function assertIsolatedFeatureWorktree(path: string): string {
74
+ if (!isAbsolute(path)) throw new Error('verb worktree must be absolute');
75
+ const cwd = realpathSync(path);
76
+ const root = execFileSync('git', ['rev-parse', '--show-toplevel'], { cwd, encoding: 'utf8' }).trim();
77
+ if (root !== cwd) throw new Error('verb worktree must be a git repository root');
78
+ const gitDir = realpathSync(execFileSync('git', ['rev-parse', '--absolute-git-dir'], { cwd, encoding: 'utf8' }).trim());
79
+ const commonDirValue = execFileSync('git', ['rev-parse', '--git-common-dir'], { cwd, encoding: 'utf8' }).trim();
80
+ const commonDir = realpathSync(isAbsolute(commonDirValue) ? commonDirValue : resolve(cwd, commonDirValue));
81
+ if (gitDir === commonDir) throw new Error('verb worktree must be a separate linked Git worktree');
82
+ const branch = execFileSync('git', ['branch', '--show-current'], { cwd, encoding: 'utf8' }).trim();
83
+ if (!branch || branch === 'main' || branch === 'master') throw new Error('verb worktree must use an isolated feature branch');
84
+ return cwd;
85
+ }
86
+
87
+ export function assertNoNewCommit(cwd: string, beforeHead: string): void {
88
+ const afterHead = execFileSync('git', ['rev-parse', 'HEAD'], { cwd, encoding: 'utf8' }).trim();
89
+ if (afterHead !== beforeHead) throw new Error('headless goal-loop must leave changes uncommitted for its caller');
90
+ }
91
+
92
+ function targetWorktree(ctx: Context): string {
93
+ const prepared = ctx.outputs.prepare ?? {};
94
+ const value = prepared.worktree ?? ctx.input.worktree;
95
+ return assertIsolatedFeatureWorktree(required(value, 'worktree'));
96
+ }
97
+
98
+ export function outcomeForGraph(graphId: string, ok: boolean, documentDrafts: readonly string[]): 'done' | 'failed' {
99
+ if (!ok) return 'failed';
100
+ return graphId === 'verb-make-doc' && documentDrafts.length === 0 ? 'failed' : 'done';
101
+ }
102
+
103
+ function changedFileSnapshot(cwd: string): Map<string, string> {
104
+ const tracked = execFileSync('git', ['diff', '--no-renames', '--name-only', '-z', 'HEAD'], { cwd, encoding: 'utf8' }).split('\0');
105
+ const untracked = execFileSync('git', ['ls-files', '--others', '--exclude-standard', '-z'], { cwd, encoding: 'utf8' }).split('\0');
106
+ const snapshot = new Map<string, string>();
107
+ for (const file of new Set([...tracked, ...untracked].filter(Boolean))) {
108
+ try {
109
+ snapshot.set(file, createHash('sha256').update(readFileSync(resolve(cwd, file))).digest('hex'));
110
+ } catch { snapshot.set(file, '<missing>'); }
111
+ }
112
+ return snapshot;
113
+ }
114
+
115
+ async function run(): Promise<void> {
116
+ const ctx = context();
117
+ const cwd = targetWorktree(ctx);
118
+ const implementationRequest = implementationRequestFromContext(ctx, {
119
+ ELANOUS_GRAPH_CHILD_LLM_PROVIDER: process.env.ELANOUS_GRAPH_CHILD_LLM_PROVIDER,
120
+ ELANOUS_GRAPH_CHILD_LLM_MODEL: process.env.ELANOUS_GRAPH_CHILD_LLM_MODEL,
121
+ });
122
+ const seams = defaultSeams({ elanousBinRoot: repositoryRoot() });
123
+ if (!seams.implement) throw new Error('self-implement seam unavailable');
124
+ const headBefore = execFileSync('git', ['rev-parse', 'HEAD'], { cwd, encoding: 'utf8' }).trim();
125
+ const beforeFiles = changedFileSnapshot(cwd);
126
+ const result = await seams.implement({
127
+ cwd,
128
+ ...implementationRequest,
129
+ });
130
+ assertNoNewCommit(cwd, headBefore);
131
+ const afterFiles = changedFileSnapshot(cwd);
132
+ const changed = [...afterFiles].filter(([file, hash]) => beforeFiles.get(file) !== hash).map(([file]) => file);
133
+ const docs = changed.filter((file) => /\.(?:md|mdx|txt|rst|adoc)$/i.test(file) && afterFiles.get(file) !== '<missing>');
134
+ const outcome = outcomeForGraph(ctx.graphId, result.ok, docs);
135
+ process.stdout.write(`${JSON.stringify({
136
+ outcome,
137
+ result: result.summary,
138
+ evidence: {
139
+ worktree: cwd,
140
+ 'document-drafts': docs,
141
+ 'changed-files': changed,
142
+ 'terminal-status': result.terminalStatus ?? 'unknown',
143
+ },
144
+ })}\n`);
145
+ }
146
+
147
+ if (import.meta.main) {
148
+ run().catch((error: unknown) => {
149
+ console.error(error instanceof Error ? error.message : String(error));
150
+ process.exitCode = 1;
151
+ });
152
+ }
@@ -0,0 +1,75 @@
1
+ /** Runs the existing gate and review seams for verb-verify. */
2
+ import { readFileSync } from 'node:fs';
3
+ import { resolve } from 'node:path';
4
+ import { defaultSeams } from '../../../src/self-implement/seams.js';
5
+ import { streamLLM } from '../../../src/llm.js';
6
+ import { resolveRoleLlm } from '../../../src/user-config.js';
7
+
8
+ type Context = {
9
+ graphId: string;
10
+ runId: string;
11
+ nodeId: string;
12
+ input: Record<string, unknown>;
13
+ outputs: Record<string, Record<string, unknown>>;
14
+ };
15
+
16
+ export function reviewOutcome(result: { reviewed: boolean; mustFix: readonly unknown[]; verdict?: string }): 'pass' | 'fail' | 'needs-human' {
17
+ if (!result.reviewed || result.verdict === 'needs-human') return 'needs-human';
18
+ return result.mustFix.length === 0 && (result.verdict === 'pass' || result.verdict === 'warn') ? 'pass' : 'fail';
19
+ }
20
+
21
+ function required(value: unknown, name: string): string {
22
+ if (typeof value !== 'string' || !value.trim()) throw new Error(`verb verify input missing: ${name}`);
23
+ return value;
24
+ }
25
+
26
+ function context(): Context {
27
+ const path = required(process.env.ELANOUS_GRAPH_CONTEXT, 'ELANOUS_GRAPH_CONTEXT');
28
+ const parsed: unknown = JSON.parse(readFileSync(path, 'utf8'));
29
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) throw new Error('invalid verb verify context');
30
+ const ctx = parsed as Partial<Context>;
31
+ if (ctx.graphId !== 'verb-verify' || !ctx.input || !ctx.outputs || !ctx.runId || !ctx.nodeId)
32
+ throw new Error('invalid verb verify context');
33
+ if (process.env.ELANOUS_GRAPH_DRY_RUN === '1') throw new Error('dry run must use the side-effect-free recipe');
34
+ return ctx as Context;
35
+ }
36
+
37
+ async function run(): Promise<void> {
38
+ const stage = process.argv[2];
39
+ const ctx = context();
40
+ const prepared = ctx.outputs.prepare ?? {};
41
+ const cwd = required(prepared.worktree ?? ctx.input.worktree, 'worktree');
42
+ const seams = defaultSeams({
43
+ repoRoot: resolve(cwd),
44
+ elanousBinRoot: resolve(import.meta.dir, '../../..'),
45
+ llmReview: async (prompt) => streamLLM([{ role: 'user', content: prompt }], () => {}, { model: resolveRoleLlm('review').model }),
46
+ });
47
+
48
+ if (stage === 'gate') {
49
+ if (ctx.nodeId !== 'gate') throw new Error(`verb verify node mismatch: ${ctx.nodeId} / gate`);
50
+ const result = await seams.gate(cwd, { runId: ctx.runId });
51
+ process.stdout.write(`${JSON.stringify({ outcome: result.passed ? 'pass' : 'fail', passed: result.passed,
52
+ 'gate-log': result.log ?? '' })}\n`);
53
+ return;
54
+ }
55
+ if (stage === 'review') {
56
+ if (ctx.nodeId !== 'review') throw new Error(`verb verify node mismatch: ${ctx.nodeId} / review`);
57
+ if (!seams.reviewDiff) throw new Error('verb verify review seam unavailable');
58
+ const intent = required(prepared['review-intent'] ?? ctx.input.ask, 'review-intent');
59
+ const result = await seams.reviewDiff(cwd, { runId: ctx.runId, goal: intent,
60
+ gateEvidenceNote: typeof ctx.outputs.gate?.['gate-log'] === 'string' ? ctx.outputs.gate['gate-log'] : undefined });
61
+ const outcome = reviewOutcome(result);
62
+ process.stdout.write(`${JSON.stringify({ outcome, verdict: result.verdict, reviewed: result.reviewed,
63
+ ...(result.failureReason ? { 'failure-reason': result.failureReason } : {}),
64
+ 'must-fix': result.mustFix, 'review-summary': result.summary })}\n`);
65
+ return;
66
+ }
67
+ throw new Error(`unknown verb verify stage: ${stage ?? '<missing>'}`);
68
+ }
69
+
70
+ if (import.meta.main) {
71
+ run().catch((error: unknown) => {
72
+ console.error(error instanceof Error ? error.message : String(error));
73
+ process.exitCode = 1;
74
+ });
75
+ }
@@ -0,0 +1,139 @@
1
+ import { readFileSync } from 'node:fs';
2
+
3
+ type JsonMap = Record<string, unknown>;
4
+ interface GraphContext { readonly nodeId?: string; readonly input: unknown; readonly outputs: Record<string, unknown> }
5
+
6
+ function record(value: unknown): JsonMap {
7
+ return value && typeof value === 'object' && !Array.isArray(value) ? value as JsonMap : {};
8
+ }
9
+
10
+ function firstValue(context: GraphContext, key: string): unknown {
11
+ const input = record(context.input);
12
+ if (Object.hasOwn(input, key) && input[key] !== undefined && input[key] !== null) return input[key];
13
+ for (const output of Object.values(context.outputs ?? {})) {
14
+ const value = record(output)[key];
15
+ if (value !== undefined && value !== null) return value;
16
+ }
17
+ return null;
18
+ }
19
+
20
+ const VERIFY_INPUTS = ['worktree', 'changed-files', 'diff', 'review-intent', 'must-fix', 'gate-log'] as const;
21
+ const VERIFY_STARTS = new Set(['gate', 'review', 'rework']);
22
+
23
+ export interface MakeDocInputs {
24
+ readonly goal: string;
25
+ readonly worktree: unknown;
26
+ readonly branch: unknown;
27
+ readonly 'review-intent': unknown;
28
+ readonly 'head-sha': unknown;
29
+ readonly 'base-branch': unknown;
30
+ readonly prior: unknown;
31
+ }
32
+
33
+ /** Converts the public make-doc envelope into the existing document-loop recipe contract. */
34
+ export function unpackMakeDocEnvelope(envelope: { readonly ask?: unknown; readonly context?: unknown; readonly prior?: unknown }): MakeDocInputs {
35
+ const context = record(envelope.context);
36
+ const contextGoal = context.goal;
37
+ const ask = typeof envelope.ask === 'string' ? envelope.ask : '';
38
+ const reviewIntent = context['review-intent'] ?? (ask.trim() ? ask : null);
39
+ const goal = typeof contextGoal === 'string' && contextGoal.trim() ? contextGoal : ask;
40
+ return {
41
+ goal,
42
+ worktree: context.worktree ?? null,
43
+ branch: context.branch ?? null,
44
+ 'review-intent': reviewIntent,
45
+ 'head-sha': context['head-sha'] ?? null,
46
+ 'base-branch': context['base-branch'] ?? null,
47
+ prior: envelope.prior ?? null,
48
+ };
49
+ }
50
+
51
+ /** Keeps the make-doc outputs present on every declared exit. */
52
+ export function buildMakeDocOutput(context: GraphContext): JsonMap {
53
+ const draft = record(context.outputs?.['document-draft']);
54
+ const input = record(context.input);
55
+ const prior = record(input.prior);
56
+ const priorEvidence = record(prior.evidence);
57
+ const inputEvidence = record(input.evidence);
58
+ const draftEvidence = record(draft.evidence);
59
+ const evidence = { ...priorEvidence, ...inputEvidence, ...draftEvidence };
60
+ if (prior.result !== undefined) evidence['prior-result'] = prior.result;
61
+ return {
62
+ result: draft.result ?? draft.summary ?? input.result ?? null,
63
+ evidence,
64
+ };
65
+ }
66
+
67
+ /** Selects a verify entry while keeping every unit input explicit at the call boundary. */
68
+ export function buildVerifyEnvelope(context: GraphContext): JsonMap {
69
+ const input = record(context.input);
70
+ const detail = record(input.context);
71
+ const prior = record(input.prior);
72
+ const priorResult = record(prior.result);
73
+ const priorEvidence = record(prior.evidence);
74
+ const start = detail.start_at ?? detail.startAt;
75
+ const startAt = typeof start === 'string' && VERIFY_STARTS.has(start) ? start : 'gate';
76
+ const envelope: JsonMap = {
77
+ outcome: startAt,
78
+ ...Object.fromEntries(VERIFY_INPUTS.map(key => [key, detail[key] ?? prior[key] ?? priorEvidence[key] ?? priorResult[key] ?? firstValue(context, key)])),
79
+ };
80
+ if (detail['review-intent'] == null && typeof input.ask === 'string' && input.ask.trim()) envelope['review-intent'] = input.ask;
81
+ return envelope;
82
+ }
83
+
84
+ /** Emits the complete verify output contract from whichever routes ran. */
85
+ export function buildVerifyOutput(context: GraphContext, outcome: 'done' | 'rework' | 'needs-human' | 'failed'): JsonMap {
86
+ const input = record(context.input);
87
+ const prior = record(input.prior);
88
+ const priorEvidence = record(prior.evidence);
89
+ const outputsByNode = record(context.outputs);
90
+ const stageOrder = outcome === 'done'
91
+ ? ['prepare', 'rework-loop', 'gate', 'review']
92
+ : outcome === 'rework'
93
+ ? ['prepare', 'gate', 'review', 'rework-loop']
94
+ : (() => {
95
+ const source = ['prepare', 'gate', 'review', 'rework-loop']
96
+ .find(node => record(outputsByNode[node]).outcome === outcome);
97
+ if (source === 'gate') return ['prepare', 'review', 'rework-loop', 'gate'];
98
+ if (source === 'review') return ['prepare', 'rework-loop', 'gate', 'review'];
99
+ if (source === 'rework-loop') return ['prepare', 'gate', 'review', 'rework-loop'];
100
+ return ['prepare'];
101
+ })();
102
+ const outputs = stageOrder.map(node => record(outputsByNode[node]));
103
+ const evidence = { ...priorEvidence };
104
+ for (const output of outputs) Object.assign(evidence, record(output.evidence));
105
+ const latest = (key: string, aliases: readonly string[] = []): unknown => {
106
+ let value: unknown = priorEvidence[key] ?? null;
107
+ for (const output of outputs) {
108
+ const nodeValue = [key, ...aliases].map(name => output[name]).find(candidate => candidate !== undefined && candidate !== null);
109
+ const evidenceValue = record(output.evidence)[key];
110
+ if (nodeValue !== undefined) value = nodeValue;
111
+ else if (evidenceValue !== undefined && evidenceValue !== null) value = evidenceValue;
112
+ }
113
+ return value;
114
+ };
115
+ return {
116
+ result: outcome,
117
+ evidence: {
118
+ ...evidence,
119
+ ...(prior.result === undefined ? {} : { 'prior-result': prior.result }),
120
+ 'review-summary': latest('review-summary', ['review_summary']),
121
+ 'must-fix': outcome === 'done' ? [] : latest('must-fix', ['must_fix']),
122
+ 'gate-log': latest('gate-log', ['gate_log']),
123
+ },
124
+ };
125
+ }
126
+
127
+ if (import.meta.main) {
128
+ const contextPath = process.env.ELANOUS_GRAPH_CONTEXT;
129
+ if (!contextPath) throw new Error('ELANOUS_GRAPH_CONTEXT is required');
130
+ const context = JSON.parse(readFileSync(contextPath, 'utf8')) as GraphContext;
131
+ const mode = process.argv[2];
132
+ const output = mode === 'make-doc-input'
133
+ ? unpackMakeDocEnvelope(record(context.input) as { ask?: unknown; context?: unknown; prior?: unknown })
134
+ : mode === 'make-doc-output' ? buildMakeDocOutput(context)
135
+ : mode === 'verify-envelope' ? buildVerifyEnvelope(context)
136
+ : mode === 'verify-output' ? buildVerifyOutput(context, process.argv[3] as 'done' | 'rework' | 'needs-human' | 'failed') : undefined;
137
+ if (!output) throw new Error(`unknown verbs-envelope mode: ${mode ?? '<missing>'}`);
138
+ process.stdout.write(`${JSON.stringify(output)}\n`);
139
+ }
@@ -193,8 +193,33 @@ function pushSurvival(target: string, local: string, manifest: Manifest, root: s
193
193
  rmSync(staging, { recursive: true, force: true });
194
194
  }
195
195
 
196
+ /** Flags that need a value before any snapshot work (STANDBY-SURVIVAL-KEEP-ARGS · mirror parseVerifyArgs / parsePromoteArgs). */
197
+ export const SURVIVAL_VALUE_FLAGS = ['--survival-keep', '--survival-keep-daily', '--prune-survival'] as const;
198
+
199
+ /** Throw when a survival-keep / prune-survival flag is present without its value/target — same rule as `${flag} requires a value`. */
200
+ export function assertSurvivalKeepArgs(argv: string[]): void {
201
+ for (const flag of SURVIVAL_VALUE_FLAGS) {
202
+ for (let i = 0; i < argv.length; i += 1) {
203
+ const token = argv[i];
204
+ if (token.startsWith(`${flag}=`)) {
205
+ if (token === `${flag}=`) throw new Error(`${flag} requires a value`);
206
+ continue;
207
+ }
208
+ if (token !== flag) continue;
209
+ const value = argv[i + 1];
210
+ if (!value || value.startsWith('--')) throw new Error(`${flag} requires a value`);
211
+ }
212
+ }
213
+ }
214
+
196
215
  if (import.meta.main) {
197
216
  const argv = process.argv.slice(2);
217
+ try {
218
+ assertSurvivalKeepArgs(argv);
219
+ } catch (error) {
220
+ console.error(`standby-snapshot: ${String(error)}`);
221
+ process.exit(2);
222
+ }
198
223
  const val = (k: string) => { const i = argv.indexOf(k); return i >= 0 ? argv[i + 1] : undefined; };
199
224
  const tier = (val('--tier') ?? 'core') as Tier;
200
225
  if (tier !== 'core' && tier !== 'big' && tier !== 'obs') { console.error('--tier core|big|obs'); process.exit(2); }