elanous 0.2.35 → 0.2.36

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (686) 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/chunks/{d06f9160.a3d9062f95de8ad7.js → 053a429e.9a63436527cc751c.js} +1 -1
  4. package/apps/pwa/out/_next/static/chunks/109.f196abf3484bb97f.js +287 -0
  5. package/apps/pwa/out/_next/static/chunks/{4346.8601952e73bf5803.js → 1201.afbfc5b1c5e5cbe4.js} +1 -1
  6. package/apps/pwa/out/_next/static/chunks/1517.9275b89572098ff3.js +1 -0
  7. package/apps/pwa/out/_next/static/chunks/1574.ad11f8db8396ab45.js +1 -0
  8. package/apps/pwa/out/_next/static/chunks/1614.7a8c5c40aee0261f.js +1 -0
  9. package/apps/pwa/out/_next/static/chunks/1871-f1eb29d8dbb4065b.js +1 -0
  10. package/apps/pwa/out/_next/static/chunks/190.285c832bd9626f8c.js +64 -0
  11. package/apps/pwa/out/_next/static/chunks/2193.0ea24c4a7aa1d004.js +36 -0
  12. package/apps/pwa/out/_next/static/chunks/223-ad865c1e80491d78.js +1 -0
  13. package/apps/pwa/out/_next/static/chunks/2265-f0d90b6dbec05f81.js +1 -0
  14. package/apps/pwa/out/_next/static/chunks/2267.eb4a62a209f09ec4.js +149 -0
  15. package/apps/pwa/out/_next/static/chunks/2341-86cd06c0cf01aa33.js +1 -0
  16. package/apps/pwa/out/_next/static/chunks/2352.9abc42422bade876.js +1 -0
  17. package/apps/pwa/out/_next/static/chunks/2397-c1653a816061842d.js +1 -0
  18. package/apps/pwa/out/_next/static/chunks/{3103.0df8da390948bb84.js → 2500.cbc1257b774aae52.js} +1 -1
  19. package/apps/pwa/out/_next/static/chunks/{7644.17e37ba6f1d4226e.js → 2683.c9773a0c589b031b.js} +3 -3
  20. package/apps/pwa/out/_next/static/chunks/2709.8e1889034255fc5f.js +24 -0
  21. package/apps/pwa/out/_next/static/chunks/{4718-17d2af636796a330.js → 275-02ea4c2a33980422.js} +3 -3
  22. package/apps/pwa/out/_next/static/chunks/2812ca6a.3b9f4a7a08885744.js +1 -0
  23. package/apps/pwa/out/_next/static/chunks/284.ac77c0db55bfd3a8.js +1 -0
  24. package/apps/pwa/out/_next/static/chunks/{8714.ff0b7ce3ec3e3ae2.js → 2941.3c3546f96bc6efa7.js} +1 -1
  25. package/apps/pwa/out/_next/static/chunks/2976.b000698a3c6512dc.js +24 -0
  26. package/apps/pwa/out/_next/static/chunks/{9214.63a510d39178e997.js → 2986.45d7652e4f13557e.js} +2 -2
  27. package/apps/pwa/out/_next/static/chunks/3031-85328a92fcce4da6.js +1 -0
  28. package/apps/pwa/out/_next/static/chunks/3136.30aaaa5fa03662a3.js +1 -0
  29. package/apps/pwa/out/_next/static/chunks/{3677-4215f826f6aa68e5.js → 3148-98efd4869d660a87.js} +1 -1
  30. package/apps/pwa/out/_next/static/chunks/3155.2587a55196ecb394.js +226 -0
  31. package/apps/pwa/out/_next/static/chunks/3277.785db1cf09f98601.js +1 -0
  32. package/apps/pwa/out/_next/static/chunks/3320-f9c77381f85a2c0a.js +1 -0
  33. package/apps/pwa/out/_next/static/chunks/3324.a09703033abcbd2f.js +34 -0
  34. package/apps/pwa/out/_next/static/chunks/3386-91049feabff9a94e.js +1 -0
  35. package/apps/pwa/out/_next/static/chunks/339.80afb7e8839372af.js +8 -0
  36. package/apps/pwa/out/_next/static/chunks/3410.7f9af5ab77cbe65f.js +115 -0
  37. package/apps/pwa/out/_next/static/chunks/3538.a445e50bb359d068.js +32 -0
  38. package/apps/pwa/out/_next/static/chunks/3540c645.2595a6af01a97672.js +1 -0
  39. package/apps/pwa/out/_next/static/chunks/3621.581b2054cc14bee4.js +286 -0
  40. package/apps/pwa/out/_next/static/chunks/3676.8c28d16fd84ca843.js +1 -0
  41. package/apps/pwa/out/_next/static/chunks/{9512.5a76207a730e0491.js → 3727.7949ccaacaa71242.js} +2 -2
  42. package/apps/pwa/out/_next/static/chunks/375-b84540853523fe52.js +1 -0
  43. package/apps/pwa/out/_next/static/chunks/{8557-e7898769499cd56f.js → 3757-180308bc61021b05.js} +1 -1
  44. package/apps/pwa/out/_next/static/chunks/379.ee262e37586fe1ae.js +74 -0
  45. package/apps/pwa/out/_next/static/chunks/{359-2250789a2d3499e7.js → 3840-5825d56d46976a92.js} +1 -1
  46. package/apps/pwa/out/_next/static/chunks/3969-81054381eaec4c4c.js +1 -0
  47. package/apps/pwa/out/_next/static/chunks/{da5176c6.6773b6c5994e1d99.js → 3a3d9966.cc4d4585a2708e7c.js} +1 -1
  48. package/apps/pwa/out/_next/static/chunks/4067-bf9aa60547972937.js +1 -0
  49. package/apps/pwa/out/_next/static/chunks/4116.a84a92a2492c080e.js +1 -0
  50. package/apps/pwa/out/_next/static/chunks/4176.e5729c93c29151eb.js +104 -0
  51. package/apps/pwa/out/_next/static/chunks/4227-e6c84686bc8946ca.js +1 -0
  52. package/apps/pwa/out/_next/static/chunks/{9952.5daf5f94063a2b3e.js → 4286.b70c4520306817e8.js} +1 -1
  53. package/apps/pwa/out/_next/static/chunks/4304.e9b2512834a9e23e.js +23 -0
  54. package/apps/pwa/out/_next/static/chunks/4327.b9e08a71c0009348.js +1 -0
  55. package/apps/pwa/out/_next/static/chunks/{938.66ad1ef0e5abae1c.js → 4615.8525eb0add35eba6.js} +1 -1
  56. package/apps/pwa/out/_next/static/chunks/4946.bd106eafd668f248.js +148 -0
  57. package/apps/pwa/out/_next/static/chunks/5085-bce4904931767ca6.js +1 -0
  58. package/apps/pwa/out/_next/static/chunks/5125.2eb9968b83767193.js +93 -0
  59. package/apps/pwa/out/_next/static/chunks/5128-75b733fd74a9a1eb.js +1 -0
  60. package/apps/pwa/out/_next/static/chunks/{6236.e18cced2d5ba6afb.js → 528.38ce20ef8aa251ff.js} +16 -16
  61. package/apps/pwa/out/_next/static/chunks/5489f3fe.4bb1458b09f6dead.js +122 -0
  62. package/apps/pwa/out/_next/static/chunks/{3408.21d1570602f4b6c0.js → 552.b7d061ad91eeac51.js} +2 -2
  63. package/apps/pwa/out/_next/static/chunks/5560-2a4648f6a30f16e7.js +1 -0
  64. package/apps/pwa/out/_next/static/chunks/5711.957b095705c12560.js +1 -0
  65. package/apps/pwa/out/_next/static/chunks/{1530.0e612369b6fd7ea0.js → 575.d929793a53f27c4b.js} +1 -1
  66. package/apps/pwa/out/_next/static/chunks/5772-e29e14f8ff127122.js +1 -0
  67. package/apps/pwa/out/_next/static/chunks/5887.5b2f5b44ce0f7e9a.js +1 -0
  68. package/apps/pwa/out/_next/static/chunks/5899-4c112a2d908cf97f.js +1 -0
  69. package/apps/pwa/out/_next/static/chunks/599.c39c571b6733f2a2.js +41 -0
  70. package/apps/pwa/out/_next/static/chunks/6041.1b65efb796ebc2a5.js +79 -0
  71. package/apps/pwa/out/_next/static/chunks/6057-765c0a26028c86b2.js +1 -0
  72. package/apps/pwa/out/_next/static/chunks/6142.f289e0d039f453a6.js +1 -0
  73. package/apps/pwa/out/_next/static/chunks/6199-6bcd61d2a3910e04.js +1 -0
  74. package/apps/pwa/out/_next/static/chunks/6236.cdf7293e710a9b2d.js +1 -0
  75. package/apps/pwa/out/_next/static/chunks/6387-237e079dac9a3ae6.js +1 -0
  76. package/apps/pwa/out/_next/static/chunks/6448-b6d272d074276e14.js +1 -0
  77. package/apps/pwa/out/_next/static/chunks/6466-92e65a48490b68a9.js +1 -0
  78. package/apps/pwa/out/_next/static/chunks/6566.926a1d1b7c911442.js +1 -0
  79. package/apps/pwa/out/_next/static/chunks/6580-cdc0e4a634ce4708.js +1 -0
  80. package/apps/pwa/out/_next/static/chunks/6659-b242dc31b20b3f29.js +1 -0
  81. package/apps/pwa/out/_next/static/chunks/6690.c5d9b321b1f79384.js +1 -0
  82. package/apps/pwa/out/_next/static/chunks/671-e9b6ad0c771c5514.js +1 -0
  83. package/apps/pwa/out/_next/static/chunks/6862.bcbf89dd0f4496b3.js +27 -0
  84. package/apps/pwa/out/_next/static/chunks/6912-7b375ee48732c767.js +1 -0
  85. package/apps/pwa/out/_next/static/chunks/6925.562d532110879886.js +1 -0
  86. package/apps/pwa/out/_next/static/chunks/{7385.50a308a477bdfc21.js → 6943.c6b24124853a47b2.js} +1 -1
  87. package/apps/pwa/out/_next/static/chunks/{630.fe5a46428d63b013.js → 727.7deb87749b0a343a.js} +1 -1
  88. package/apps/pwa/out/_next/static/chunks/{2018.a741297bce759490.js → 7481.39f7a4654907bf6e.js} +1 -1
  89. package/apps/pwa/out/_next/static/chunks/7545.b1aa42cd15503319.js +1 -0
  90. package/apps/pwa/out/_next/static/chunks/7551-416d298c2dc4a9ab.js +1 -0
  91. package/apps/pwa/out/_next/static/chunks/{8444.4c26b379ca2b9596.js → 771.c3cdb6c1f7f47c02.js} +17 -17
  92. package/apps/pwa/out/_next/static/chunks/7784.1f0ac4a16d190cf4.js +1 -0
  93. package/apps/pwa/out/_next/static/chunks/7870-309de463786ac1fc.js +1 -0
  94. package/apps/pwa/out/_next/static/chunks/7888-e29b151bb6a3bb8b.js +1 -0
  95. package/apps/pwa/out/_next/static/chunks/{3589.5444a06bcf6e775c.js → 7891.03f910124a737985.js} +1 -1
  96. package/apps/pwa/out/_next/static/chunks/7905-6ba78d9234608f79.js +1 -0
  97. package/apps/pwa/out/_next/static/chunks/8037.e254fd797aa224d1.js +1 -0
  98. package/apps/pwa/out/_next/static/chunks/8207.f527886b7c464529.js +1 -0
  99. package/apps/pwa/out/_next/static/chunks/856.50bda61439d465e6.js +62 -0
  100. package/apps/pwa/out/_next/static/chunks/{b2f6ba4d.fb56fdbbf798df33.js → 873d6c12.09bd499f57171543.js} +1 -1
  101. package/apps/pwa/out/_next/static/chunks/{5101.e32282718f99ed6f.js → 8904.7d51af2dc033965c.js} +2 -2
  102. package/apps/pwa/out/_next/static/chunks/9031-92e9b487edb681ee.js +1 -0
  103. package/apps/pwa/out/_next/static/chunks/9060.5410d9f6a95f6287.js +90 -0
  104. package/apps/pwa/out/_next/static/chunks/{5637.281e5dec4ea6ecf1.js → 914.8abefd48d579547b.js} +2 -2
  105. package/apps/pwa/out/_next/static/chunks/9187-c87a2207d4ac5d46.js +1 -0
  106. package/apps/pwa/out/_next/static/chunks/{4705-194e64e47ca0fbdb.js → 9250-072df22eaadaa6b5.js} +1 -1
  107. package/apps/pwa/out/_next/static/chunks/9289.3e92f278821e18e0.js +1 -0
  108. package/apps/pwa/out/_next/static/chunks/9319.7816d3cc741cd34f.js +1 -0
  109. package/apps/pwa/out/_next/static/chunks/9327-e016bb9f1674d24f.js +1 -0
  110. package/apps/pwa/out/_next/static/chunks/9365.3de48bf75193ff9a.js +77 -0
  111. package/apps/pwa/out/_next/static/chunks/9383.5b5e9aa56b5fea97.js +1 -0
  112. package/apps/pwa/out/_next/static/chunks/9387-cb929573ef436f39.js +1 -0
  113. package/apps/pwa/out/_next/static/chunks/9489.c27becacc3283dec.js +1 -0
  114. package/apps/pwa/out/_next/static/chunks/{8637.47f5b35afcae5e6b.js → 9514.131c52cc75fe6439.js} +1 -1
  115. package/apps/pwa/out/_next/static/chunks/9536.28962663c7734376.js +1 -0
  116. package/apps/pwa/out/_next/static/chunks/9686-12286f5bbf15a5a0.js +1 -0
  117. package/apps/pwa/out/_next/static/chunks/9776.289d40cc5a4c342a.js +1 -0
  118. package/apps/pwa/out/_next/static/chunks/{1674.2a65fd5668e1cc5f.js → 9789.60f723d18097ec30.js} +1 -1
  119. package/apps/pwa/out/_next/static/chunks/989.f0c17523c5e61f65.js +1 -0
  120. package/apps/pwa/out/_next/static/chunks/9972-1df393aa8d4f7d52.js +1 -0
  121. package/apps/pwa/out/_next/static/chunks/9f31e478.fefcbcd3c388ebc5.js +1 -0
  122. package/apps/pwa/out/_next/static/chunks/app/_not-found/page-96750aba7430959f.js +1 -0
  123. package/apps/pwa/out/_next/static/chunks/app/approvals/page-4105e5bbbb043024.js +1 -0
  124. package/apps/pwa/out/_next/static/chunks/app/autopilot/page-5d4fa75c2acb113e.js +1 -0
  125. package/apps/pwa/out/_next/static/chunks/app/board/page-a79a9bdb3b2142bf.js +1 -0
  126. package/apps/pwa/out/_next/static/chunks/app/botlab/page-f1c2047484992a35.js +1 -0
  127. package/apps/pwa/out/_next/static/chunks/app/bots/page-15ffc49b2d8c70e2.js +1 -0
  128. package/apps/pwa/out/_next/static/chunks/app/ceo/page-67d53a3fc8734135.js +1 -0
  129. package/apps/pwa/out/_next/static/chunks/app/chat/page-e30c8dc696491336.js +1 -0
  130. package/apps/pwa/out/_next/static/chunks/app/consult/page-2136e04fa77696e2.js +1 -0
  131. package/apps/pwa/out/_next/static/chunks/app/control/page-fecd2814790c2e12.js +1 -0
  132. package/apps/pwa/out/_next/static/chunks/app/decisions/page-280aa4a98fc5bb44.js +1 -0
  133. package/apps/pwa/out/_next/static/chunks/app/design-check/page-c14e96b65fb4b883.js +1 -0
  134. package/apps/pwa/out/_next/static/chunks/app/editor/page-187dac74825ed6bf.js +1 -0
  135. package/apps/pwa/out/_next/static/chunks/app/exec/page-6bc7246ea8c92448.js +1 -0
  136. package/apps/pwa/out/_next/static/chunks/app/field/page-083747f1d4518f61.js +1 -0
  137. package/apps/pwa/out/_next/static/chunks/app/healthz/route-96750aba7430959f.js +1 -0
  138. package/apps/pwa/out/_next/static/chunks/app/inside/page-15ca95a16ec96e1f.js +1 -0
  139. package/apps/pwa/out/_next/static/chunks/app/intake/page-a8ac031b3810eb64.js +1 -0
  140. package/apps/pwa/out/_next/static/chunks/app/layout-8835f93110494cda.js +1 -0
  141. package/apps/pwa/out/_next/static/chunks/app/live/page-e2de2e59111c9aad.js +1 -0
  142. package/apps/pwa/out/_next/static/chunks/app/live-run/page-f2b2e4bf6e981450.js +1 -0
  143. package/apps/pwa/out/_next/static/chunks/app/loops/page-5b92b7f75df20948.js +1 -0
  144. package/apps/pwa/out/_next/static/chunks/app/market/page-468eddf2b1a84ecb.js +1 -0
  145. package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-2af16e62c12f22df.js +1 -0
  146. package/apps/pwa/out/_next/static/chunks/app/morning/page-18b40867a77a5793.js +1 -0
  147. package/apps/pwa/out/_next/static/chunks/app/not-found-fe934f2979f5a4a2.js +1 -0
  148. package/apps/pwa/out/_next/static/chunks/app/observatory/page-3eec435537357170.js +1 -0
  149. package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-ff88cbfd2aa99fc8.js +1 -0
  150. package/apps/pwa/out/_next/static/chunks/app/ops/release/page-a5b39fb780c70ab5.js +1 -0
  151. package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-ae465dde1d1b3933.js +1 -0
  152. package/apps/pwa/out/_next/static/chunks/app/outputs/page-e7abc34a48a6f71e.js +1 -0
  153. package/apps/pwa/out/_next/static/chunks/app/page-cab9674fde9ead26.js +1 -0
  154. package/apps/pwa/out/_next/static/chunks/app/reflection/page-1da49bc8712284d0.js +1 -0
  155. package/apps/pwa/out/_next/static/chunks/app/scheduler/page-5e8aa657551ac912.js +1 -0
  156. package/apps/pwa/out/_next/static/chunks/app/sessions/page-fcc36f36c6dc1fe2.js +1 -0
  157. package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-d22db22f2a7296ca.js +1 -0
  158. package/apps/pwa/out/_next/static/chunks/app/settings/page-d12dc7b1773878f0.js +1 -0
  159. package/apps/pwa/out/_next/static/chunks/app/setup/done/page-99debec9ea7fbec0.js +1 -0
  160. package/apps/pwa/out/_next/static/chunks/app/setup/layout-96750aba7430959f.js +1 -0
  161. package/apps/pwa/out/_next/static/chunks/app/setup/page-2a088a78bad7e924.js +1 -0
  162. package/apps/pwa/out/_next/static/chunks/app/share/page-2e8ed57db7e69993.js +1 -0
  163. package/apps/pwa/out/_next/static/chunks/app/showroom/page-4b3a16213c2ae8fe.js +1 -0
  164. package/apps/pwa/out/_next/static/chunks/app/tasks/page-f098747ddf38c98b.js +1 -0
  165. package/apps/pwa/out/_next/static/chunks/app/term/page-c15958835534404b.js +1 -0
  166. package/apps/pwa/out/_next/static/chunks/app/today/page-68279e3c843c1fd7.js +1 -0
  167. package/apps/pwa/out/_next/static/chunks/app/trace/page-a34a74453367a39d.js +1 -0
  168. package/apps/pwa/out/_next/static/chunks/app/vault/page-8767a7db2155a5bd.js +1 -0
  169. package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-bd5976683460d7f2.js +1 -0
  170. package/apps/pwa/out/_next/static/chunks/app/workflows/page-b7364835e7f2ef54.js +1 -0
  171. package/apps/pwa/out/_next/static/chunks/app/workspace/page-311af16b3ee0ffca.js +1 -0
  172. package/apps/pwa/out/_next/static/chunks/app/worktrees/page-fb670757274ae990.js +1 -0
  173. package/apps/pwa/out/_next/static/chunks/{0368f25d-ad84af92fefee68f.js → ccae1c4b-0cf414f5eff1b10d.js} +1 -1
  174. package/apps/pwa/out/_next/static/chunks/{cbe38a15.5a032598e39970c6.js → ceba0382.650712b56b85b582.js} +1 -1
  175. package/apps/pwa/out/_next/static/chunks/{b6705a4f-b9a9047de9eecfd0.js → da5ecc5c-b005ad8cac737d57.js} +1 -1
  176. package/apps/pwa/out/_next/static/chunks/{56d372f2.681ab4ec4c998fae.js → f9a61e4d.1fc2c1dbdd49fe46.js} +1 -1
  177. package/apps/pwa/out/_next/static/chunks/framework-6d497cbf1eef04c6.js +1 -0
  178. package/apps/pwa/out/_next/static/chunks/main-app-012f5edec932f337.js +1 -0
  179. package/apps/pwa/out/_next/static/chunks/main-da5aeb809edc94a2.js +1 -0
  180. package/apps/pwa/out/_next/static/chunks/pages/_app-5ee319af6f749dfe.js +1 -0
  181. package/apps/pwa/out/_next/static/chunks/pages/_error-4bc84653a718d6c6.js +1 -0
  182. package/apps/pwa/out/_next/static/chunks/webpack-8a96cf6775c73d6e.js +1 -0
  183. package/apps/pwa/out/_next/static/{T1mBQqmkwKDLGtyisDCOd → uC-N0emedeNOFuaBQFv-I}/_buildManifest.js +1 -1
  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/docs/goal-context/05-authoring-lessons.jsonl +47 -0
  278. package/docs/goal-context/README.md +3 -0
  279. package/graphs/default-loop.yaml +6 -1
  280. package/graphs/implement-loop.yaml +24 -0
  281. package/graphs/release/recipes.yaml +6 -0
  282. package/graphs/release/release-loop.yaml +17 -4
  283. package/graphs/wizard/recipes.yaml +44 -0
  284. package/graphs/wizard/wizard-loop.yaml +44 -0
  285. package/graphs/work/research-report.yaml +2 -0
  286. package/package.json +1 -1
  287. package/scripts/ci-typecheck-changed.ts +139 -5
  288. package/scripts/coord-role-pack.ts +1 -1
  289. package/scripts/first10-gate.ts +416 -0
  290. package/scripts/fleet/wsl-node-setup.sh +432 -0
  291. package/scripts/release-loop/docs-node.ts +204 -8
  292. package/scripts/release-loop/gate-node.ts +249 -53
  293. package/scripts/release-loop/node-verdict.ts +2 -0
  294. package/scripts/release-loop/resume-cap.ts +14 -34
  295. package/scripts/release-loop/resume-release.ts +37 -11
  296. package/scripts/release-loop/traffic-node.ts +59 -0
  297. package/scripts/release-loop/traffic-transition.ts +159 -0
  298. package/scripts/rhythm/daily.ts +137 -3
  299. package/scripts/ux-sim.ts +53 -0
  300. package/skills/README.md +1 -0
  301. package/src/acp/core-turn-bridge.ts +48 -6
  302. package/src/agent/delegate-hint.ts +16 -0
  303. package/src/agent/runner.ts +82 -2
  304. package/src/agent/task-notification.ts +56 -10
  305. package/src/agent/types.ts +4 -0
  306. package/src/agent-substrate/pr-reviewer.ts +55 -3
  307. package/src/agent-substrate/review-intent.ts +29 -2
  308. package/src/agent-substrate/review-observation.ts +3 -0
  309. package/src/agent-substrate/self-review-cli.ts +168 -16
  310. package/src/autopilot/mission-codebase-gate.ts +141 -12
  311. package/src/autopilot/pr-manager.ts +25 -5
  312. package/src/boot/daemon-tools/self-implement.ts +1 -0
  313. package/src/budget/usage-outcomes.ts +8 -4
  314. package/src/capture/tui-self-report.ts +102 -0
  315. package/src/chat/goal-continue-verdict.ts +41 -0
  316. package/src/chat/index.ts +30 -4
  317. package/src/chat/internal-turn-origin.ts +1 -0
  318. package/src/chat/paste-fold.ts +86 -0
  319. package/src/chat/tool-render/block.ts +32 -0
  320. package/src/chat/tool-render/dispatch.ts +2 -20
  321. package/src/chat/tool-render/result-text.ts +98 -0
  322. package/src/chat/turn-typeahead.ts +70 -7
  323. package/src/cli/config-audit.ts +119 -0
  324. package/src/cli/doctor-cli.ts +22 -0
  325. package/src/cli/guardian-cli.ts +10 -0
  326. package/src/cli/herdr-cli.ts +34 -0
  327. package/src/cli/light-entry-route.ts +6 -3
  328. package/src/cli/log-event-names.ts +2 -0
  329. package/src/cli/make-cli.ts +247 -11
  330. package/src/cli/msg-cli.ts +117 -3
  331. package/src/cli/pr-cli.ts +29 -16
  332. package/src/cli/pr-land-base-read.ts +11 -2
  333. package/src/cli/pr-land-heavy-remote.ts +6 -3
  334. package/src/cli/pr-land-overlap-evidence.ts +23 -4
  335. package/src/cli/pr-land-recovery.ts +117 -1
  336. package/src/cli/pty-takeover-cli.ts +8 -7
  337. package/src/cli/release-cli.ts +21 -5
  338. package/src/cli/release-single-flight.ts +1 -1
  339. package/src/cli/tasks-card-show.ts +162 -0
  340. package/src/cli/tasks-cli.ts +574 -356
  341. package/src/cli/tasks-read-cli.ts +197 -0
  342. package/src/core-turn/run-core-turn.ts +4 -2
  343. package/src/core-turn/run-goal-loop.ts +73 -16
  344. package/src/core-turn/types.ts +6 -1
  345. package/src/dashboard/context/keys.ts +8 -31
  346. package/src/dashboard/index.ts +202 -49
  347. package/src/dashboard/input/agent-wake.ts +7 -1
  348. package/src/dashboard/input/chat-main-plain-turn-runtime.ts +146 -3
  349. package/src/dashboard/input/chat-main-slash-command.ts +4 -2
  350. package/src/dashboard/input/goal-continue.ts +210 -0
  351. package/src/dashboard/input/goal-interim.ts +2 -0
  352. package/src/dashboard/input/internal-turn.ts +2 -8
  353. package/src/dashboard/input/seat-autowake.ts +9 -7
  354. package/src/dashboard/input/turn-autoheal.ts +52 -0
  355. package/src/dashboard/seat-boot-preamble.ts +132 -5
  356. package/src/dashboard/slash-runtime/chat-persona.ts +65 -8
  357. package/src/dashboard/slash-runtime/dashboard-handlers.ts +3 -2
  358. package/src/dashboard/slash-runtime/model-choices.ts +15 -0
  359. package/src/dashboard/stale-install-check.ts +3 -99
  360. package/src/debug/batch-queue.ts +119 -0
  361. package/src/debug/tui-log-tag.ts +67 -0
  362. package/src/display/agent-surface.ts +7 -0
  363. package/src/domains/standalone-log-sink.ts +15 -2
  364. package/src/esc-abort-gate.ts +69 -0
  365. package/src/git-fs/worktree.ts +95 -1
  366. package/src/graph-runner/graph-cli.ts +18 -0
  367. package/src/graph-runner/runner.ts +20 -11
  368. package/src/graph-wizard/generate.ts +108 -4
  369. package/src/graph-wizard/steps.ts +15 -0
  370. package/src/grounding/proactive-ground.ts +86 -0
  371. package/src/harness/control-inbox.ts +49 -1
  372. package/src/harness/harness-cli-command.ts +51 -7
  373. package/src/harness/harness-incidents.ts +52 -1
  374. package/src/harness/pod-control-send.ts +33 -5
  375. package/src/harness/self-send-remote.ts +69 -0
  376. package/src/harness/self-send-routing-guard.ts +6 -0
  377. package/src/harness/self-send-target.ts +4 -3
  378. package/src/index.ts +327 -12
  379. package/src/input-core/context-key-runtime.ts +21 -0
  380. package/src/light-cli.ts +6 -1
  381. package/src/llm-wellformed.ts +70 -0
  382. package/src/llm.ts +35 -4
  383. package/src/loops/msg-wake.ts +35 -39
  384. package/src/loops/orchestrator/inbox.ts +59 -11
  385. package/src/loops/orchestrator/knowhow-pack.ts +364 -0
  386. package/src/loops/orchestrator/tick.ts +5 -1
  387. package/src/maturity/feature-maturity.ts +1 -1
  388. package/src/models/prompts.ts +17 -2
  389. package/src/msg/msg-post-office.ts +116 -0
  390. package/src/mss/logging/log-store.ts +79 -22
  391. package/src/nexus/api/decisions-route.ts +38 -18
  392. package/src/nexus/api/graph-wizard-api.ts +20 -2
  393. package/src/nexus/boot/register-mcp-clients.ts +263 -38
  394. package/src/nexus/onboarding/first-boot-wizard.ts +56 -8
  395. package/src/onboarding/first-run.ts +37 -6
  396. package/src/onboarding/web-first.ts +43 -11
  397. package/src/ops/overview-collect.ts +12 -6
  398. package/src/ops/overview.ts +3 -3
  399. package/src/persona/loader.ts +11 -0
  400. package/src/persona/types.ts +8 -0
  401. package/src/prompt-library/session-guidance.ts +14 -0
  402. package/src/provider-summary.ts +8 -0
  403. package/src/pty-shell/herdr-agent-report.ts +118 -9
  404. package/src/pty-shell/herdr-prompt.ts +266 -0
  405. package/src/pty-shell/pty-control-ipc.ts +151 -8
  406. package/src/pty-shell/pty-special-keys.ts +42 -2
  407. package/src/pty-shell/stale-install-check.ts +99 -0
  408. package/src/pty-shell/tui-run-state.ts +14 -2
  409. package/src/release-loop/auto-start.ts +20 -2
  410. package/src/release-loop/checklist.ts +76 -4
  411. package/src/release-loop/rehearsal.ts +36 -20
  412. package/src/repl/index.ts +19 -1
  413. package/src/seat-loop/knowhow-lint.ts +1 -1
  414. package/src/self-dev/decompose-proposal.ts +172 -20
  415. package/src/self-dev/decompose.ts +61 -0
  416. package/src/self-dev/dev-cli.ts +37 -3
  417. package/src/self-dev/dev-pipeline.ts +8 -2
  418. package/src/self-dev/draft-triage-rules.ts +31 -0
  419. package/src/self-dev/glm-credential-guard.ts +77 -0
  420. package/src/self-dev/graph-journey-nodes.ts +1 -0
  421. package/src/self-dev/graph-journey-route.ts +12 -2
  422. package/src/self-dev/orchestrate-cli.ts +68 -3
  423. package/src/self-dev/orchestrate.ts +116 -17
  424. package/src/self-dev/run-supervisor.ts +55 -2
  425. package/src/self-dev/run-types.ts +1 -1
  426. package/src/self-health/autoheal.ts +153 -0
  427. package/src/self-health/signatures.ts +6 -0
  428. package/src/self-implement/device-first.ts +116 -0
  429. package/src/self-implement/doctor-visit.ts +239 -1
  430. package/src/self-implement/evidence-command-budget.ts +80 -0
  431. package/src/self-implement/goal-author-cli.ts +1 -0
  432. package/src/self-implement/goal-author-decompose.ts +265 -4
  433. package/src/self-implement/goal-author.ts +33 -8
  434. package/src/self-implement/goal-elaborate.ts +176 -22
  435. package/src/self-implement/goal-refine.ts +3 -0
  436. package/src/self-implement/graph-variant.ts +40 -6
  437. package/src/self-implement/headless-elanous-driver.ts +19 -3
  438. package/src/self-implement/off-diff-evidence.ts +58 -6
  439. package/src/self-implement/orchestrator.ts +222 -21
  440. package/src/self-implement/pod-warm-pool-profile.ts +1 -0
  441. package/src/self-implement/pwa-import-graph.ts +1 -1
  442. package/src/self-implement/rework-policy.ts +30 -0
  443. package/src/self-implement/run-ledger.ts +108 -0
  444. package/src/self-implement/run-ttl.ts +38 -24
  445. package/src/self-implement/scope-adjacency.ts +3 -1
  446. package/src/self-implement/seams.ts +60 -4
  447. package/src/self-implement/wiring-check.ts +358 -0
  448. package/src/shell-env-bootstrap.ts +11 -4
  449. package/src/skills/runner.ts +4 -2
  450. package/src/skills/tools/agent.ts +290 -48
  451. package/src/skills/tools/schedule-wakeup.ts +23 -4
  452. package/src/skills/tools/shell.ts +61 -6
  453. package/src/skills/tools/terminal-modal-inject.ts +1 -2
  454. package/src/skills/tools/terminal-modal.ts +10 -8
  455. package/src/skills/url-router.ts +41 -1
  456. package/src/smart-wizard/run.ts +66 -0
  457. package/src/status/bar.ts +34 -6
  458. package/src/status/status-provider-info.ts +37 -6
  459. package/src/steward/rejudge-tick.ts +10 -2
  460. package/src/steward/ta-repair-event-collect.ts +17 -6
  461. package/src/task-agent/actions.ts +3 -1
  462. package/src/task-agent/land-queue.ts +21 -8
  463. package/src/task-agent/live-moves.ts +22 -6
  464. package/src/task-agent/mission.ts +30 -0
  465. package/src/task-agent/rejudge-on-head.ts +15 -0
  466. package/src/task-agent/repair-cycle.ts +138 -32
  467. package/src/task-agent/repair-next-move.ts +31 -3
  468. package/src/task-agent/repair-outcomes.ts +29 -0
  469. package/src/task-agent/repair-worker.ts +14 -4
  470. package/src/task-agent/shadow.ts +41 -3
  471. package/src/task-agent/task-card-prefix.ts +2 -0
  472. package/src/task-agent/task-hand.ts +477 -22
  473. package/src/task-agent/task-parent-role-llm.ts +36 -0
  474. package/src/task-agent/tier-split.ts +78 -9
  475. package/src/task-orchestrator/surfaces/pod-account-broker.ts +9 -0
  476. package/src/task-orchestrator/surfaces/pod-child-reuse.ts +146 -0
  477. package/src/task-orchestrator/surfaces/pod-command-job.ts +86 -5
  478. package/src/task-orchestrator/surfaces/pod-failure-reason.ts +215 -3
  479. package/src/task-orchestrator/surfaces/pod-launch-history.ts +133 -0
  480. package/src/task-orchestrator/surfaces/pod-manifest-test-normalize.ts +11 -0
  481. package/src/task-orchestrator/surfaces/pod-pool.ts +76 -4
  482. package/src/task-orchestrator/surfaces/pod-provenance.ts +8 -2
  483. package/src/task-orchestrator/surfaces/pod-repair-commit.ts +18 -3
  484. package/src/task-orchestrator/surfaces/pod-si-warm-entry.ts +16 -0
  485. package/src/task-orchestrator/surfaces/pod-si-warm-host.ts +224 -0
  486. package/src/task-orchestrator/surfaces/pod-si-warm-protocol.ts +201 -0
  487. package/src/task-orchestrator/surfaces/pod-si-warm-provider.ts +444 -0
  488. package/src/task-orchestrator/surfaces/pod-si-warm-runner.ts +387 -0
  489. package/src/task-orchestrator/surfaces/pod-si-warm-transport.ts +157 -0
  490. package/src/task-orchestrator/surfaces/pod-warm-worker-protocol.ts +4 -0
  491. package/src/task-orchestrator/surfaces/pod-warm-worker-provider.ts +485 -36
  492. package/src/task-orchestrator/surfaces/pod-warm-worker-runtime.ts +3 -0
  493. package/src/task-orchestrator/surfaces/self-implement-pod.ts +396 -19
  494. package/src/task-orchestrator/surfaces/self-implement.ts +42 -2
  495. package/src/tool-runtime/index.ts +15 -2
  496. package/src/tool-runtime/mcp-proxy-bootstrap.ts +29 -0
  497. package/src/tty-foreground.ts +155 -0
  498. package/src/tui/chat/goal-interim.ts +173 -0
  499. package/src/tui/chat/log-view.ts +205 -18
  500. package/src/tui/chat/self-health-status.ts +232 -0
  501. package/src/tui/entry.ts +370 -81
  502. package/src/tui/input/composer.ts +8 -1
  503. package/src/tui/slash/compact-command.ts +7 -0
  504. package/src/tui/slash/compact.ts +1 -7
  505. package/src/tui/slash/resume.ts +75 -0
  506. package/src/tui-client/local-chat-turn.ts +45 -2
  507. package/src/tui-client/next-dashboard-runtime.ts +8 -0
  508. package/src/tui-client/next-loop-command.ts +70 -0
  509. package/src/tui-client/next-wakeup.ts +191 -0
  510. package/src/tui.ts +37 -0
  511. package/src/ui/modal-adapter.ts +2 -2
  512. package/src/ux-sim/classic-tui-seat-scenarios.ts +516 -0
  513. package/src/ux-sim/cli-config-audit-device.ts +121 -0
  514. package/src/ux-sim/dashboard-event-loop-stall-monitor-device.ts +238 -0
  515. package/src/ux-sim/event-monkey.ts +3 -2
  516. package/src/ux-sim/fake-bin.ts +45 -0
  517. package/src/ux-sim/fake-herdr.ts +238 -0
  518. package/src/ux-sim/fake-llm.ts +111 -6
  519. package/src/ux-sim/fault-glm-no-credential.ts +116 -0
  520. package/src/ux-sim/fault-nextmove-dispatch.ts +102 -1
  521. package/src/ux-sim/fault-scope-escape-lift.ts +33 -6
  522. package/src/ux-sim/fault-tui-400-autoheal.ts +297 -0
  523. package/src/ux-sim/goal-device.ts +619 -0
  524. package/src/ux-sim/in-process-cli.ts +22 -5
  525. package/src/ux-sim/mock-authoring-first-run-child.ts +35 -0
  526. package/src/ux-sim/mock-authoring-first-run.ts +97 -0
  527. package/src/ux-sim/mock-seat-pty-frame-child.ts +29 -0
  528. package/src/ux-sim/mock-seat-pty-frame.ts +297 -0
  529. package/src/ux-sim/mock-seat-pty-sequence-child.ts +21 -0
  530. package/src/ux-sim/mock-seat-pty-sequence.ts +206 -0
  531. package/src/ux-sim/next-tui-seat-scenarios.ts +631 -0
  532. package/src/ux-sim/onboarding-first-run-device.ts +269 -0
  533. package/src/ux-sim/pty-key-modifiers-device.ts +85 -0
  534. package/src/ux-sim/subagent-tools-device.ts +81 -0
  535. package/src/ux-sim/task-orchestrator-surfaces-self-implement-pod-device.ts +250 -0
  536. package/src/ux-sim/tty-foreground-steal-child.ts +21 -0
  537. package/src/version/packed-revision.json +1 -1
  538. package/apps/pwa/out/_next/static/chunks/1165.bad13fc9151a7288.js +0 -1
  539. package/apps/pwa/out/_next/static/chunks/13.02a07436dec15f89.js +0 -32
  540. package/apps/pwa/out/_next/static/chunks/1540.af38731fa7c4a3e0.js +0 -41
  541. package/apps/pwa/out/_next/static/chunks/1850.f2b470ba5a471da0.js +0 -24
  542. package/apps/pwa/out/_next/static/chunks/193.62da94cd0b88323b.js +0 -74
  543. package/apps/pwa/out/_next/static/chunks/1975.260f6d249fac5f7c.js +0 -1
  544. package/apps/pwa/out/_next/static/chunks/1982-67cd8dfe8682325f.js +0 -1
  545. package/apps/pwa/out/_next/static/chunks/1993-c0007b7ad0c0ef41.js +0 -1
  546. package/apps/pwa/out/_next/static/chunks/1999-bb415351c8a2846c.js +0 -1
  547. package/apps/pwa/out/_next/static/chunks/1c735de4.f993a30bbd3c57c4.js +0 -1
  548. package/apps/pwa/out/_next/static/chunks/1dc5a567.9b092bfae3d7099b.js +0 -1
  549. package/apps/pwa/out/_next/static/chunks/2085.8f950b4bda1cbbc7.js +0 -1
  550. package/apps/pwa/out/_next/static/chunks/2159-6179a961376956b9.js +0 -1
  551. package/apps/pwa/out/_next/static/chunks/216.b5c2a421aa1d28a5.js +0 -1
  552. package/apps/pwa/out/_next/static/chunks/2251.49fbe369f74c372c.js +0 -148
  553. package/apps/pwa/out/_next/static/chunks/2286-2939577360d3dcc0.js +0 -1
  554. package/apps/pwa/out/_next/static/chunks/2625.5d870aa999f33db1.js +0 -34
  555. package/apps/pwa/out/_next/static/chunks/2668.34d21539e62bf111.js +0 -77
  556. package/apps/pwa/out/_next/static/chunks/2833-0fe47af99ed13c29.js +0 -1
  557. package/apps/pwa/out/_next/static/chunks/2930.d0edb4f108787ef7.js +0 -1
  558. package/apps/pwa/out/_next/static/chunks/2973.77318e7d85f59477.js +0 -62
  559. package/apps/pwa/out/_next/static/chunks/3123.2bee9ba15d320bd2.js +0 -90
  560. package/apps/pwa/out/_next/static/chunks/3162-6cf652bf7124d8cf.js +0 -1
  561. package/apps/pwa/out/_next/static/chunks/3577-7340009f7007a795.js +0 -1
  562. package/apps/pwa/out/_next/static/chunks/3618.f514792d6c59d7fd.js +0 -36
  563. package/apps/pwa/out/_next/static/chunks/3669.343f9119aa276001.js +0 -1
  564. package/apps/pwa/out/_next/static/chunks/3736.c2efad489604cc3b.js +0 -79
  565. package/apps/pwa/out/_next/static/chunks/3817.f9aeab2bb6675d73.js +0 -1
  566. package/apps/pwa/out/_next/static/chunks/3f7c4ee5.3dde54f01a816613.js +0 -122
  567. package/apps/pwa/out/_next/static/chunks/4182-0b9b1251c29cc0cf.js +0 -1
  568. package/apps/pwa/out/_next/static/chunks/4441-875b97f5821ed58a.js +0 -1
  569. package/apps/pwa/out/_next/static/chunks/4582.bd68683c076649e3.js +0 -286
  570. package/apps/pwa/out/_next/static/chunks/4605-6e623f55aec77422.js +0 -1
  571. package/apps/pwa/out/_next/static/chunks/4607.5cc27468628eb4bf.js +0 -1
  572. package/apps/pwa/out/_next/static/chunks/4627.f07508b3936fd6c0.js +0 -24
  573. package/apps/pwa/out/_next/static/chunks/4747-c22262c093e46807.js +0 -1
  574. package/apps/pwa/out/_next/static/chunks/4775-178215aed0daba61.js +0 -1
  575. package/apps/pwa/out/_next/static/chunks/4815-6ffb8c3c991cc45d.js +0 -1
  576. package/apps/pwa/out/_next/static/chunks/4834-beca8b47ad29a898.js +0 -1
  577. package/apps/pwa/out/_next/static/chunks/5023-fb4802b6d2492b02.js +0 -1
  578. package/apps/pwa/out/_next/static/chunks/5154.a118f3957ed14e36.js +0 -1
  579. package/apps/pwa/out/_next/static/chunks/5210-a2e0015e3d4d5d9c.js +0 -1
  580. package/apps/pwa/out/_next/static/chunks/5356.84ac712cc15928bf.js +0 -1
  581. package/apps/pwa/out/_next/static/chunks/5401.22352141b6fd336e.js +0 -23
  582. package/apps/pwa/out/_next/static/chunks/5483-dd5d7697f6bdb106.js +0 -1
  583. package/apps/pwa/out/_next/static/chunks/5662.02eaa029af05ad46.js +0 -1
  584. package/apps/pwa/out/_next/static/chunks/5760.22456f433c6f42c0.js +0 -1
  585. package/apps/pwa/out/_next/static/chunks/5852.db1f7449f4f74612.js +0 -287
  586. package/apps/pwa/out/_next/static/chunks/5891-0f11a7d7362a9072.js +0 -1
  587. package/apps/pwa/out/_next/static/chunks/5943.264d14a44ca32513.js +0 -1
  588. package/apps/pwa/out/_next/static/chunks/604-1b3c39df083c02aa.js +0 -1
  589. package/apps/pwa/out/_next/static/chunks/6121-5f97072330738caf.js +0 -1
  590. package/apps/pwa/out/_next/static/chunks/6193.07d8ca5af4b09086.js +0 -1
  591. package/apps/pwa/out/_next/static/chunks/6203-b3fea3a60d69ff14.js +0 -1
  592. package/apps/pwa/out/_next/static/chunks/6286.d638fb5953e2e757.js +0 -8
  593. package/apps/pwa/out/_next/static/chunks/6301.ae0245f507e4395e.js +0 -1
  594. package/apps/pwa/out/_next/static/chunks/6673.fbbe5699f6ea5991.js +0 -27
  595. package/apps/pwa/out/_next/static/chunks/6777-f6d301efb5de828d.js +0 -1
  596. package/apps/pwa/out/_next/static/chunks/6786.423f24c88de034c7.js +0 -93
  597. package/apps/pwa/out/_next/static/chunks/6854-cef64a948c5e122d.js +0 -1
  598. package/apps/pwa/out/_next/static/chunks/6866-79aa5b4e47cac6aa.js +0 -1
  599. package/apps/pwa/out/_next/static/chunks/6b89c8bd.24df687a820500b3.js +0 -1
  600. package/apps/pwa/out/_next/static/chunks/7037-fe27f001db30d323.js +0 -1
  601. package/apps/pwa/out/_next/static/chunks/7080.2d826860534fd88e.js +0 -1
  602. package/apps/pwa/out/_next/static/chunks/7118.8731be28c3ebb14b.js +0 -1
  603. package/apps/pwa/out/_next/static/chunks/7196.44241bc1df3e26fe.js +0 -149
  604. package/apps/pwa/out/_next/static/chunks/7235.c7c4e6cb5c693c2d.js +0 -104
  605. package/apps/pwa/out/_next/static/chunks/7706-58bfb1546637f217.js +0 -1
  606. package/apps/pwa/out/_next/static/chunks/7839.5b91455338c9fd3f.js +0 -1
  607. package/apps/pwa/out/_next/static/chunks/7857-31f13ee96f4011aa.js +0 -1
  608. package/apps/pwa/out/_next/static/chunks/81.f74cb60312fe4001.js +0 -1
  609. package/apps/pwa/out/_next/static/chunks/8219.baa715d1deee80e2.js +0 -1
  610. package/apps/pwa/out/_next/static/chunks/8256.e3ac8421a71f82f4.js +0 -1
  611. package/apps/pwa/out/_next/static/chunks/8310-444a6a895c402f12.js +0 -1
  612. package/apps/pwa/out/_next/static/chunks/8423.f7dda8aca4fcaae5.js +0 -1
  613. package/apps/pwa/out/_next/static/chunks/8437-8d5492094b166cfa.js +0 -1
  614. package/apps/pwa/out/_next/static/chunks/8496.75649af8652c74f4.js +0 -226
  615. package/apps/pwa/out/_next/static/chunks/8576.65bb654b524f3614.js +0 -1
  616. package/apps/pwa/out/_next/static/chunks/8609.558ce2f8f9aea2be.js +0 -64
  617. package/apps/pwa/out/_next/static/chunks/8614.caec96cfb91f4ae7.js +0 -1
  618. package/apps/pwa/out/_next/static/chunks/8732.367f44a916202353.js +0 -1
  619. package/apps/pwa/out/_next/static/chunks/9141-7fd1f73a5400bdc2.js +0 -1
  620. package/apps/pwa/out/_next/static/chunks/921.c4267d0d69a65404.js +0 -1
  621. package/apps/pwa/out/_next/static/chunks/9261.3962c3321b047691.js +0 -115
  622. package/apps/pwa/out/_next/static/chunks/936-26efd1a0efdd44d3.js +0 -1
  623. package/apps/pwa/out/_next/static/chunks/9627-4b9efe616b27e2e2.js +0 -1
  624. package/apps/pwa/out/_next/static/chunks/967-2aa39b2d04b4c690.js +0 -1
  625. package/apps/pwa/out/_next/static/chunks/9734.40eb1e558c29ccea.js +0 -1
  626. package/apps/pwa/out/_next/static/chunks/9908.3aa54f7a586a73dc.js +0 -1
  627. package/apps/pwa/out/_next/static/chunks/9954-ca8d29752bdbb45a.js +0 -1
  628. package/apps/pwa/out/_next/static/chunks/9974-507fa67cb94066dd.js +0 -1
  629. package/apps/pwa/out/_next/static/chunks/app/_not-found/page-ce9e00f7fb45506a.js +0 -1
  630. package/apps/pwa/out/_next/static/chunks/app/approvals/page-fa59d6d17daa3389.js +0 -1
  631. package/apps/pwa/out/_next/static/chunks/app/autopilot/page-53f68bbe7bd4b774.js +0 -1
  632. package/apps/pwa/out/_next/static/chunks/app/board/page-1c500fbb9f4a7a04.js +0 -1
  633. package/apps/pwa/out/_next/static/chunks/app/botlab/page-99d72673aa5c307c.js +0 -1
  634. package/apps/pwa/out/_next/static/chunks/app/bots/page-d2d5adc1e9484c88.js +0 -1
  635. package/apps/pwa/out/_next/static/chunks/app/ceo/page-c607c5aae637f1cc.js +0 -1
  636. package/apps/pwa/out/_next/static/chunks/app/chat/page-fa8c23596d555c0f.js +0 -1
  637. package/apps/pwa/out/_next/static/chunks/app/consult/page-bdab8c5e855c8416.js +0 -1
  638. package/apps/pwa/out/_next/static/chunks/app/control/page-406b47745b53f269.js +0 -1
  639. package/apps/pwa/out/_next/static/chunks/app/decisions/page-a4276386b7051f50.js +0 -1
  640. package/apps/pwa/out/_next/static/chunks/app/design-check/page-8a26bab9ad375f25.js +0 -1
  641. package/apps/pwa/out/_next/static/chunks/app/editor/page-775f48aa1dc7a2d5.js +0 -1
  642. package/apps/pwa/out/_next/static/chunks/app/exec/page-1c4dd5f959d0c558.js +0 -1
  643. package/apps/pwa/out/_next/static/chunks/app/field/page-c48938a8377c9f70.js +0 -1
  644. package/apps/pwa/out/_next/static/chunks/app/healthz/route-ce9e00f7fb45506a.js +0 -1
  645. package/apps/pwa/out/_next/static/chunks/app/inside/page-c6e7905859425aa9.js +0 -1
  646. package/apps/pwa/out/_next/static/chunks/app/intake/page-c280f4252452e830.js +0 -1
  647. package/apps/pwa/out/_next/static/chunks/app/layout-cf8c57498f20970a.js +0 -1
  648. package/apps/pwa/out/_next/static/chunks/app/live/page-ca3a17caf409fc83.js +0 -1
  649. package/apps/pwa/out/_next/static/chunks/app/live-run/page-26e6c18a1a750cf6.js +0 -1
  650. package/apps/pwa/out/_next/static/chunks/app/loops/page-3abc872cc6aeee39.js +0 -1
  651. package/apps/pwa/out/_next/static/chunks/app/market/page-f7481b7b2174fe3d.js +0 -1
  652. package/apps/pwa/out/_next/static/chunks/app/missions/[id]/page-1ae7ef8077680337.js +0 -1
  653. package/apps/pwa/out/_next/static/chunks/app/morning/page-47c5d4db587266bd.js +0 -1
  654. package/apps/pwa/out/_next/static/chunks/app/not-found-415f1e243c7ccb13.js +0 -1
  655. package/apps/pwa/out/_next/static/chunks/app/observatory/page-73f380f17b76f95c.js +0 -1
  656. package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-2991073ad66ee2d9.js +0 -1
  657. package/apps/pwa/out/_next/static/chunks/app/ops/release/page-1f5a60f70cb4dd0c.js +0 -1
  658. package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-fbad60d1e358fb2c.js +0 -1
  659. package/apps/pwa/out/_next/static/chunks/app/outputs/page-bac7dee94e5eae4a.js +0 -1
  660. package/apps/pwa/out/_next/static/chunks/app/page-398047d6949e8ca5.js +0 -1
  661. package/apps/pwa/out/_next/static/chunks/app/reflection/page-2d33a2231540ca89.js +0 -1
  662. package/apps/pwa/out/_next/static/chunks/app/scheduler/page-5bf1e6bf70bcb96c.js +0 -1
  663. package/apps/pwa/out/_next/static/chunks/app/sessions/page-ba59c19376a0917d.js +0 -1
  664. package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-111f187139add30f.js +0 -1
  665. package/apps/pwa/out/_next/static/chunks/app/settings/page-acaae197d5be5779.js +0 -1
  666. package/apps/pwa/out/_next/static/chunks/app/setup/done/page-0df20b0f546a0d7d.js +0 -1
  667. package/apps/pwa/out/_next/static/chunks/app/setup/layout-ce9e00f7fb45506a.js +0 -1
  668. package/apps/pwa/out/_next/static/chunks/app/setup/page-27e1202d24b8fe35.js +0 -1
  669. package/apps/pwa/out/_next/static/chunks/app/share/page-bda78c50a78363e5.js +0 -1
  670. package/apps/pwa/out/_next/static/chunks/app/showroom/page-da592691293d9c9f.js +0 -1
  671. package/apps/pwa/out/_next/static/chunks/app/tasks/page-f832994317a2e9f0.js +0 -1
  672. package/apps/pwa/out/_next/static/chunks/app/term/page-dc0a532f5b9196ec.js +0 -1
  673. package/apps/pwa/out/_next/static/chunks/app/today/page-cfccbbeae0473404.js +0 -1
  674. package/apps/pwa/out/_next/static/chunks/app/trace/page-527e2073af84c81b.js +0 -1
  675. package/apps/pwa/out/_next/static/chunks/app/vault/page-bac86e9112671357.js +0 -1
  676. package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-6d59dff410e9d76a.js +0 -1
  677. package/apps/pwa/out/_next/static/chunks/app/workflows/page-53a61f8be09f02d2.js +0 -1
  678. package/apps/pwa/out/_next/static/chunks/app/workspace/page-db8f559e763c17f9.js +0 -1
  679. package/apps/pwa/out/_next/static/chunks/app/worktrees/page-c02aa4cc66455093.js +0 -1
  680. package/apps/pwa/out/_next/static/chunks/framework-50e6acebc630849b.js +0 -1
  681. package/apps/pwa/out/_next/static/chunks/main-7a1ae342d5ed75e6.js +0 -1
  682. package/apps/pwa/out/_next/static/chunks/main-app-7ad7d505ba1f92b4.js +0 -1
  683. package/apps/pwa/out/_next/static/chunks/pages/_app-02edba75232cb235.js +0 -1
  684. package/apps/pwa/out/_next/static/chunks/pages/_error-97d6ebae3e8eee4a.js +0 -1
  685. package/apps/pwa/out/_next/static/chunks/webpack-e986adaa429163e8.js +0 -1
  686. /package/apps/pwa/out/_next/static/{T1mBQqmkwKDLGtyisDCOd → uC-N0emedeNOFuaBQFv-I}/_ssgManifest.js +0 -0
@@ -7,6 +7,7 @@ import { getDefaultLogStore } from '../mss/logging/log-store.js';
7
7
  import { emitDecision } from '../live/detail-switch.js';
8
8
  import { selectPlanningLlm } from '../prompt-enhance/enhance.js';
9
9
  import type { GoalAuthorDeps } from './goal-author.js';
10
+ import { ensureDeviceFirstSteps } from './device-first.js';
10
11
 
11
12
  const GOAL_STEPS_DECOMPOSED_EVENT = 'goal-steps-decomposed';
12
13
 
@@ -21,6 +22,7 @@ export interface SizedSlice {
21
22
  newFiles: number;
22
23
  tier: SliceTier;
23
24
  unavoidable?: string;
25
+ deviceFirst?: 'device-test' | 'feature';
24
26
  }
25
27
  export type TierSizedDecomposeResult =
26
28
  | { ok: true; slices: SizedSlice[]; redecomposed: number }
@@ -31,6 +33,10 @@ function publicSizedSlices(steps: readonly string[], sizes: readonly GoalSliceSi
31
33
  const size = sizes[index]!;
32
34
  return { goal, files: size.files, behaviours: size.actions, newFiles: size.newFiles,
33
35
  tier: ({ low: '하', medium: '중', high: '상' } as const)[size.tier],
36
+ ...(/(?:^|\n|·\s*)동작:\s*DEVICE-FIRST-STAGE\b/u.test(goal)
37
+ ? { deviceFirst: 'device-test' as const }
38
+ : /(?:^|\n)선행:\s*DEVICE-FIRST-STAGE 조각 착지 뒤 발사(?:$|\n)/u.test(goal)
39
+ ? { deviceFirst: 'feature' as const } : {}),
34
40
  ...(size.unavoidableReason ? { unavoidable: size.unavoidableReason } : {}) };
35
41
  });
36
42
  }
@@ -72,6 +78,23 @@ function expectedSliceTier(files: number, actions: number, newFiles: number): Go
72
78
  return 'high';
73
79
  }
74
80
 
81
+ /**
82
+ * 경계 분기(1 step ⊕ acceptance 3)의 크기 메타 — 경계 step 은 쪼개지 않고 «한 조각»으로 잰다.
83
+ * 동작 수는 1(묶은 step 자체)이고 상 로 갈리면 불가분 사유를 싣는다(완료 경계 3행은 acceptance 셋이라
84
+ * 나누면 코드 없는 실물·증거 조각이 생긴다).
85
+ */
86
+ function boundaryStepSize(step: string, rows: readonly CompletionBoundaryRow[]): GoalSliceSize {
87
+ const paths = new Set<string>();
88
+ for (const row of rows) for (const path of row.paths) paths.add(path);
89
+ for (const match of step.matchAll(/(?:^|[\s`·,()])([\w.@-]+(?:\/[\w.@-]+)+\.[A-Za-z][\w-]*)/gu)) paths.add(match[1]!);
90
+ const files = Math.max(1, paths.size);
91
+ const tier = expectedSliceTier(files, 1, 0);
92
+ return { files, actions: 1, newFiles: 0, tier,
93
+ unavoidableReason: tier === 'high'
94
+ ? '완료 경계 3행은 한 step 의 acceptance 셋 — 나누면 코드 없는 실물·증거 조각이 생긴다.'
95
+ : null };
96
+ }
97
+
75
98
  /** Estimates are observations from the planner, checked against the declared tier before they guide retry. */
76
99
  function parseGoalSliceSizes(raw: string, count: number): GoalSliceSize[] | null {
77
100
  try {
@@ -253,6 +276,195 @@ export function classifyShadowFirstSplit(objective: string): ShadowFirstSplitVer
253
276
  return { kind: 'single-piece' };
254
277
  }
255
278
 
279
+ /**
280
+ * ⭐ DECOMPOSE-BOUNDARY-ONE-STEP(MK · 0.2.36) — 완료 경계 3행(코드 · 실물 · 증거 명령)은 «세 조각»이 아니라
281
+ * 한 step 의 acceptance 셋이다. 종전에는 경계 행이 문면에 그대로 있어도 LLM 쪼개기가 행마다 조각을 만들어
282
+ * «코드 없는 증거 조각»·«라이브 조각»이 생겼고, 그 조각들은 구현할 것이 없어 손으로 닫아야 했다
283
+ * (실측 10-17 UX 미션 ta-20261016-ddf426 · ta-20261016-179cbb).
284
+ * 판정은 순수 규칙이다 — 골 문면에서 `완료 경계 코드:`·`완료 경계 실물:`·`완료 경계 증거 명령:` 세 줄을 읽고,
285
+ * 셋이 다 있으면 step 1 ⊕ acceptance 3 으로 묶는다. 둘 이하면 종전 경로 그대로(동작 0 변화).
286
+ * 결과는 «직렬 카드 셋»(step 카드 + 경계 카드)으로도 나온다 — 코드 경로가 없는 실물·증거 행은
287
+ * 코드 없는 live/evidence 카드로 남는다(그 카드가 조각으로 승격되지 않는다는 것이 이 판정의 요점).
288
+ */
289
+ export const COMPLETION_BOUNDARY_LABELS = {
290
+ code: '완료 경계 코드',
291
+ live: '완료 경계 실물',
292
+ 'evidence-command': '완료 경계 증거 명령',
293
+ } as const;
294
+
295
+ export type CompletionBoundaryKind = keyof typeof COMPLETION_BOUNDARY_LABELS;
296
+
297
+ export type CompletionBoundaryRow = {
298
+ kind: CompletionBoundaryKind;
299
+ label: string;
300
+ /** 라벨 뒤 값 — 문면 그대로. */
301
+ text: string;
302
+ /** `완료 경계 코드` 행에서만 채운다(실물·증거 명령 행은 코드 없는 카드다). */
303
+ paths: readonly string[];
304
+ /** `완료 경계 증거 명령` 행에서만 채운다 — 명령 원문 그대로. */
305
+ command?: string;
306
+ };
307
+
308
+ export type GoalDecomposeCard = {
309
+ kind: 'step' | 'acceptance' | 'live' | 'evidence';
310
+ id: string;
311
+ title: string;
312
+ body: string;
313
+ paths?: readonly string[];
314
+ command?: string;
315
+ };
316
+
317
+ export type GoalDecomposeResult = {
318
+ /** 경계 3행을 step 1 ⊕ acceptance 3 으로 묶었나. */
319
+ bundled: boolean;
320
+ rows: readonly CompletionBoundaryRow[];
321
+ steps: readonly string[];
322
+ acceptance: readonly string[];
323
+ cards: readonly GoalDecomposeCard[];
324
+ };
325
+
326
+ const COMPLETION_BOUNDARY_LINE = /^\s*(?:[-*+]\s+|\d+[.)]\s+|>\s*)?완료\s*경계\s*(코드|실물|증거\s*명령)\s*[::]\s*(.+?)\s*$/u;
327
+ const COMPLETION_BOUNDARY_KIND_BY_TOKEN: Record<string, CompletionBoundaryKind> = {
328
+ 코드: 'code',
329
+ 실물: 'live',
330
+ 증거명령: 'evidence-command',
331
+ };
332
+
333
+ export const COMPLETION_BOUNDARY_STEP_PREFIX =
334
+ '① 완료 경계 3행(코드·실물·증거 명령) 한 step — 경계 행은 조각이 아니라 이 step 의 acceptance 다';
335
+
336
+ function completionBoundaryPaths(text: string): string[] {
337
+ const paths: string[] = [];
338
+ for (const match of text.matchAll(/(?:^|[\s`·,()])((?:[\w.@-]+\/)+[\w.@-]+\.[A-Za-z][\w-]*)/gu)) {
339
+ const path = match[1]!;
340
+ if (!paths.includes(path)) paths.push(path);
341
+ }
342
+ return paths;
343
+ }
344
+
345
+ /** 골 문면의 완료 경계 행 — 종류마다 첫 줄 하나(중복 라벨은 첫 줄이 이긴다). */
346
+ export function parseCompletionBoundaryRows(goal: string): CompletionBoundaryRow[] {
347
+ const rows: CompletionBoundaryRow[] = [];
348
+ const seen = new Set<CompletionBoundaryKind>();
349
+ for (const line of goal.split(/\r?\n/)) {
350
+ const match = COMPLETION_BOUNDARY_LINE.exec(line);
351
+ if (!match) continue;
352
+ const kind = COMPLETION_BOUNDARY_KIND_BY_TOKEN[match[1]!.replace(/\s+/gu, '')];
353
+ if (!kind || seen.has(kind)) continue;
354
+ const text = match[2]!.trim();
355
+ if (!text) continue;
356
+ seen.add(kind);
357
+ rows.push({
358
+ kind,
359
+ label: COMPLETION_BOUNDARY_LABELS[kind],
360
+ text,
361
+ paths: kind === 'code' ? completionBoundaryPaths(text) : [],
362
+ ...(kind === 'evidence-command' ? { command: text } : {}),
363
+ });
364
+ }
365
+ return rows;
366
+ }
367
+
368
+ /**
369
+ * 경계 3행 골도 «장치 먼저» RED 단계를 피하지 않는다 — 다만 그 단계를 별도 조각(step 2)으로 만들지
370
+ * 않고 «같은 런의 첫 동작» 으로 다시 써 이 step 안에 접어 넣는다(판정선: step 1 ⊕ acceptance 3).
371
+ *
372
+ * ⭐ must-fix(b) — 접힌 문면에서 다음 셋을 뺀다:
373
+ * ⑴ «운영 코드 변경 0» — 기능을 구현하라는 step 에 «운영 코드 변경 0» 을 섞으면 자식이 모순 지시를 받는다.
374
+ * ⑵ «선행: DEVICE-FIRST-STAGE 조각 착지 뒤 발사» — 자기 자신(이 step)을 선행으로 기다리라는 문구다.
375
+ * ⑶ «동작: DEVICE-FIRST-STAGE» 표지 — 이 표지가 남으면 `publicSizedSlices` 가 접힌 조각을
376
+ * `deviceFirst:'device-test'` 로 분류하고, `handTaskWithTierSplit` 이 «장치 시험 카드» 미션만
377
+ * 발사해 기능 카드가 0장이 된다(결함을 `outcome:'device-first-deferred'` 로 정답 처리하던 원전).
378
+ */
379
+ /** 접힌 경계 step 이 «장치 RED 를 같은 런의 첫 동작으로 싣고 있다»는 표지 — goal-author 의 재-staging 이 이를 알아본다. */
380
+ export const FOLDED_DEVICE_FIRST_ACTION_MARKER = '첫 동작(같은 런)';
381
+
382
+ function foldDeviceStageIntoBoundaryStep(goal: string, step: string, root?: string): string {
383
+ const staged = ensureDeviceFirstSteps(goal, [step], root);
384
+ if (staged.steps.length <= 1) {
385
+ // A boundary goal still starts with RED inside its single feature slice. Use
386
+ // the test path supplied by the completion boundary; never invent a device.
387
+ const rows = parseCompletionBoundaryRows(goal);
388
+ const declaredTest = [rows.find((row) => row.kind === 'evidence-command'), rows.find((row) => row.kind === 'code')]
389
+ .filter((row): row is CompletionBoundaryRow => row !== undefined)
390
+ .flatMap((row) => completionBoundaryPaths(row.text))
391
+ .find((path) => /\.(?:test|spec)\.[cm]?[jt]sx?$/u.test(path));
392
+ const firstAction = declaredTest
393
+ ? `${FOLDED_DEVICE_FIRST_ACTION_MARKER}: 완료 경계에 적힌 ${declaredTest}의 존재를 확인한다. 기존이면 mock 무대 시험 RED를 먼저 기록하고, 없으면 새 경로를 짐작하지 말고 신설: 선언 뒤 같은 시험의 RED를 기록한다.`
394
+ : `${FOLDED_DEVICE_FIRST_ACTION_MARKER}: 시험 경로 미확정 — 골의 증거 명령에서 시험 경로를 정한 뒤 mock 무대 시험 RED를 기록한다.`;
395
+ return `${firstAction} ⇒ ${step.replace(/\r?\n/gu, ' ')}`;
396
+ }
397
+ const decision = staged.decision;
398
+ const test = decision.device.replace(/\.ts$/u, '.test.ts');
399
+ const inventory = decision.inventoryMeasured
400
+ ? (decision.exists
401
+ ? `기존 ${decision.device} 를 써서`
402
+ : `신규 ${decision.device} 를 만들어`)
403
+ : `장치 재고를 대상 저장소에서 먼저 확인한 뒤 기존 장치를 쓰거나 없으면 ${decision.device} 로 새로 만들어`;
404
+ const deviceAction = `${FOLDED_DEVICE_FIRST_ACTION_MARKER}: ${inventory} ${test} 의 mock 무대 시험 RED 를 먼저 기록한다.`;
405
+ // «step 한 줄» 불변식 유지 — 원 step 의 개행을 치환해 붙인다(선행 문구는 아예 더하지 않는다).
406
+ return `${deviceAction} ⇒ ${step.replace(/\r?\n/gu, ' ')}`;
407
+ }
408
+
409
+ function bundledCompletionBoundaryStep(rows: readonly CompletionBoundaryRow[]): string {
410
+ return `${COMPLETION_BOUNDARY_STEP_PREFIX}: ${rows
411
+ .map((row, index) => `acceptance ${index + 1}[${row.label}] ${row.text}`)
412
+ .join(' ⇒ ')}`;
413
+ }
414
+
415
+ function completionBoundaryCards(rows: readonly CompletionBoundaryRow[], step: string): GoalDecomposeCard[] {
416
+ const codePaths = rows.find((row) => row.kind === 'code')?.paths ?? [];
417
+ const cards: GoalDecomposeCard[] = [
418
+ { kind: 'step', id: 'step-1', title: 'step 1 — 완료 경계 3행 한 step', body: step, paths: codePaths },
419
+ ];
420
+ for (const row of rows) {
421
+ if (row.kind === 'code') {
422
+ cards.push({ kind: 'acceptance', id: 'acceptance-code', title: row.label, body: row.text, paths: row.paths });
423
+ continue;
424
+ }
425
+ if (row.kind === 'live') {
426
+ cards.push({ kind: 'live', id: 'acceptance-live', title: row.label, body: row.text });
427
+ continue;
428
+ }
429
+ cards.push({ kind: 'evidence', id: 'acceptance-evidence-command', title: row.label, body: row.text,
430
+ ...(row.command === undefined ? {} : { command: row.command }) });
431
+ }
432
+ return cards;
433
+ }
434
+
435
+ /**
436
+ * 골 문면 → 직렬 카드 셋. `bundling: false` 는 반증 스위치다 — 같은 문면이 step 3 개로 흩어지는 모습을
437
+ * 시험이 그대로 만들 수 있게 한다(생산 경로는 이 스위치를 끄지 않는다).
438
+ */
439
+ export function decomposeGoal(goal: string, options: { bundling?: boolean } = {}): GoalDecomposeResult {
440
+ const rows = parseCompletionBoundaryRows(goal);
441
+ if (!rows.length) return { bundled: false, rows, steps: [], acceptance: [], cards: [] };
442
+ if (options.bundling === false) {
443
+ return {
444
+ bundled: false,
445
+ rows,
446
+ steps: rows.map((row) => `${row.label}: ${row.text}`),
447
+ acceptance: [],
448
+ cards: rows.map((row, index) => ({
449
+ kind: 'step',
450
+ id: `step-${index + 1}`,
451
+ title: `step ${index + 1} — ${row.label}`,
452
+ body: `${row.label}: ${row.text}`,
453
+ ...(row.kind === 'code' ? { paths: row.paths } : {}),
454
+ })),
455
+ };
456
+ }
457
+ if (rows.length < 3) return { bundled: false, rows, steps: [], acceptance: [], cards: [] };
458
+ const step = bundledCompletionBoundaryStep(rows);
459
+ return {
460
+ bundled: true,
461
+ rows,
462
+ steps: [step],
463
+ acceptance: rows.map((row) => `${row.label}: ${row.text}`),
464
+ cards: completionBoundaryCards(rows, step),
465
+ };
466
+ }
467
+
256
468
  /** Shared LLM-backed decomposition seam for every goal-author entrypoint. */
257
469
  export function createGoalAuthorDecomposeSteps(
258
470
  signal?: AbortSignal,
@@ -261,6 +473,7 @@ export function createGoalAuthorDecomposeSteps(
261
473
  adversarialReviewSource?: 'cli' | 'default' | 'unknown';
262
474
  recentStepCounts?: readonly number[];
263
475
  onSizedSlices?: (slices: SizedSlice[], redecomposed: number) => void;
476
+ repositoryRoot?: string;
264
477
  } = {},
265
478
  ): NonNullable<GoalAuthorDeps['decomposeSteps']> {
266
479
  return async (objective, options) => {
@@ -301,6 +514,42 @@ export function createGoalAuthorDecomposeSteps(
301
514
  : '자연어 요청(그림자 우선 어휘 ⊕ 분할 지시) — 그림자 우선 두 조각(선행 간선 1).',
302
515
  );
303
516
  }
517
+ // ⭐ DECOMPOSE-BOUNDARY-ONE-STEP — 완료 경계 3행이 다 있는 골은 LLM 쪼개기 «전에» 한 step 으로 묶는다.
518
+ // 묶지 않으면 행마다 조각이 생겨 «코드 없는 증거/라이브 조각»이 나온다(실측 10-17 UX 미션 2건 손마감).
519
+ const boundary = decomposeGoal(objective);
520
+ if (boundary.bundled) {
521
+ try {
522
+ debug.log('goal-author', 'completion-boundary-bundled', {
523
+ surface: 'goal-author',
524
+ verdict: 'one-step-three-acceptance',
525
+ boundaryKind: 'completion-boundary',
526
+ rows: boundary.rows.map((row) => row.kind),
527
+ cards: boundary.cards.map((card) => card.kind),
528
+ steps: boundary.steps.length,
529
+ acceptance: boundary.acceptance.length,
530
+ ...(options?.runId === undefined ? {} : { runId: options.runId }),
531
+ });
532
+ } catch { /* observation is fail-soft */ }
533
+ // ⭐ 경계 분기도 finish() 와 같은 계약으로 크기 메타를 만들어 onSizedSlices 를 부른다
534
+ // (1조각 SizedSlice · restoreSlicePaths 포함 · redecomposed 0). 우회하면 생산 소비자
535
+ // `decomposeToTierSizedSlices`(tier-split 기본 seam)이 «no sized slices» 로 막힌다.
536
+ const boundarySteps = boundary.steps.map((step) => foldDeviceStageIntoBoundaryStep(objective, step, config.repositoryRoot));
537
+ const boundarySizes = boundarySteps.map((step) => boundaryStepSize(step, boundary.rows));
538
+ const declaredTargetLine = objective.split(/\r?\n/u)
539
+ .map((line) => line.trim())
540
+ .find((line) => /^대상\s*경로\s*[::]/u.test(line));
541
+ const boundarySlices = restoreSlicePaths(publicSizedSlices(boundarySteps, boundarySizes), objective);
542
+ // The authored step stays one line. The handed slice must start with the parent's
543
+ // declared target line: preflight reads only that line before tracing paths.
544
+ config.onSizedSlices?.(declaredTargetLine
545
+ ? boundarySlices.map((slice) => ({ ...slice, goal: slice.goal.startsWith(declaredTargetLine)
546
+ ? slice.goal : `${declaredTargetLine}\n${slice.goal}` }))
547
+ : boundarySlices, 0);
548
+ return finalize(
549
+ boundarySteps,
550
+ '완료 경계 3행(코드·실물·증거 명령) — step 1 의 acceptance 3 으로 묶음(경계 행은 조각이 아니다).',
551
+ );
552
+ }
304
553
  const { streamLLM } = await import('../llm.js');
305
554
  // ⭐ AUTHOR-DECOMPOSE-KNOB(0.2.24 · G7 #25848) — 쪼개기·적대 비평의 두 streamLLM 호출이 인핸서와
306
555
  // «같은 규칙»으로 planning 노브(roleLlm.planning ⊕ ELANOUS_PROMPT_ENHANCE_MODEL/EFFORT)를 따른다.
@@ -321,8 +570,19 @@ export function createGoalAuthorDecomposeSteps(
321
570
  );
322
571
  };
323
572
  const steps = await decompose(objective);
324
- const finish = async (candidate: string[], rationale?: string): Promise<string[]> => {
325
- if (!candidate.length) return finalize(candidate, rationale);
573
+ const finish = async (rawCandidate: string[], rationale?: string): Promise<string[]> => {
574
+ if (!rawCandidate.length) return finalize(rawCandidate, rationale);
575
+ const staged = ensureDeviceFirstSteps(objective, rawCandidate, config.repositoryRoot);
576
+ let candidate = staged.steps;
577
+ if (staged.decision.required) {
578
+ try { debug.log('self-implement.decompose', 'device-first-slice', {
579
+ runId: options?.runId ?? null, firstSliceKind: staged.decision.firstSliceKind,
580
+ deviceCandidates: [staged.decision.device], deviceSource: staged.decision.deviceSource,
581
+ deviceExists: staged.decision.exists,
582
+ inventoryMeasured: staged.decision.inventoryMeasured,
583
+ featureSlices: Math.max(0, candidate.length - 1),
584
+ }); } catch { /* observation is fail-soft */ }
585
+ }
326
586
  const measure = async (slices: string[]) => {
327
587
  const parsed = parseGoalSliceSizes(await streamLLM(
328
588
  [{ role: 'user', content: goalSliceSizePrompt(objective, slices) }], () => {}, llmOpts), slices.length);
@@ -350,7 +610,7 @@ export function createGoalAuthorDecomposeSteps(
350
610
  const regenerated = await decompose(retryAsk);
351
611
  if (!regenerated.length) throw new Error('goal-author slice sizing: regeneration produced no slices');
352
612
  redecomposed = 1;
353
- candidate = regenerated;
613
+ candidate = ensureDeviceFirstSteps(objective, regenerated, config.repositoryRoot).steps;
354
614
  rationale = decompositionRationale;
355
615
  measured = await measure(candidate);
356
616
  sizes = measured.sizes;
@@ -438,12 +698,13 @@ export function createGoalAuthorDecomposeSteps(
438
698
  /** Public goal-author sizing seam for a hand caller that needs per-slice tier metadata. */
439
699
  export async function decomposeToTierSizedSlices(
440
700
  goal: string,
441
- opts?: { signal?: AbortSignal },
701
+ opts?: { signal?: AbortSignal; repositoryRoot?: string },
442
702
  ): Promise<TierSizedDecomposeResult> {
443
703
  let result: { slices: SizedSlice[]; redecomposed: number } | undefined;
444
704
  try {
445
705
  const steps = await createGoalAuthorDecomposeSteps(opts?.signal, {
446
706
  adversarialReview: false,
707
+ ...(opts?.repositoryRoot ? { repositoryRoot: opts.repositoryRoot } : {}),
447
708
  onSizedSlices: (slices, redecomposed) => { result = { slices, redecomposed }; },
448
709
  })(goal);
449
710
  if (!steps.length || !result) return { ok: false, reason: 'goal-author slice sizing: no sized slices' };
@@ -8,6 +8,8 @@ import { extractSlugSource, generateMissionSlug, slugify } from '../autopilot/mi
8
8
  import { enhancePrompt, type EnhanceOpts, type EnhanceResult } from '../prompt-enhance/enhance.js';
9
9
  import type { LLMUsage } from '../prompt-cache/types.js';
10
10
  import { debug } from '../debug/log.js';
11
+ import { ensureDeviceFirstSteps, inspectDeviceFirstGoal } from './device-first.js';
12
+ import { COMPLETION_BOUNDARY_STEP_PREFIX, FOLDED_DEVICE_FIRST_ACTION_MARKER } from './goal-author-decompose.js';
11
13
 
12
14
  function observeGoalAuthor(
13
15
  category: 'goal-author' | 'goal-author.clarify',
@@ -48,6 +50,7 @@ import { resolveGoalDocumentsDir } from './goal-documents-dir.js';
48
50
  import { REQUIRED_EVIDENCE_COMMAND_SEPARATOR } from './off-diff-evidence.js';
49
51
  import { renderLaunchPreflight, siblingTestPath, type LaunchPreflightResult } from '../self-dev/launch-preflight-text.js';
50
52
  import { quoteShellArg } from '../cli/logs-cli.js';
53
+ import { focusedEvidenceTestPath } from './evidence-command-budget.js';
51
54
  import type { HarnessGroundingProvenance } from './context-capsule.js';
52
55
  import { hasGoalStepCodeName } from './goal-step-code-name.js';
53
56
  import { targetScopedGoalText } from './goal-text-path-scope.js';
@@ -2369,7 +2372,7 @@ const CONSTANT_DOCUMENT_INSTRUCTION_POLICY = [
2369
2372
  ] as const;
2370
2373
 
2371
2374
  export const GOAL_RULES_POLICY = [
2372
- '- Do not run the whole test suite. If tests apply, name the focused file(s) and read only each summary line; a full suite can exhaust the implementer context window.',
2375
+ '- Do not run the whole test suite. If tests apply, name the focused file(s) and read only each summary line; a full suite can exhaust the implementer context window. If the same evidence test times out twice, stop rerunning it and switch to a narrower direct-import test; report the timeout and replacement command.',
2373
2376
  '- Do not infer a code path from a symbol grep. Trace a candidate before naming it as an implementation target.',
2374
2377
  '- Do not create a planner, milestones, steps, task decomposition, worktree, PR, mission, daemon call, or dev-pipeline hand-off; this artifact is authoring only.',
2375
2378
  '- Do not write an acceptance criterion that cannot hold at the same time as another one. Naming a field to add while demanding that same return value stay completely unchanged is a trap, not a contract: name the fields and values that must stay identical.',
@@ -2844,13 +2847,24 @@ export function verificationBehaviour(checklist: readonly string[], ask: string)
2844
2847
  function observedVerificationPlan(input: Omit<VerificationPlanInput, 'menu' | 'catalog'>, repositoryRoot: string | undefined, authorRunId: string): string[] {
2845
2848
  try {
2846
2849
  const plan = authorVerificationPlan({ ...input, ...readVerificationMenuDocs(repositoryRoot) });
2850
+ const device = inspectDeviceFirstGoal(input.ask, repositoryRoot);
2851
+ if (device.required) {
2852
+ try { debug.log('goal-author.verify', 'device-check', {
2853
+ authorRunId, device: device.device, exists: device.exists, inventoryMeasured: device.inventoryMeasured,
2854
+ firstSlice: device.firstSliceKind,
2855
+ }); } catch { /* observation is fail-soft */ }
2856
+ }
2847
2857
  try {
2848
2858
  observeGoalAuthor('goal-author', 'verification-plan', {
2849
2859
  authorRunId, source: plan.stage.source, stageId: plan.stage.id, level: plan.stage.level,
2850
2860
  menuPresent: plan.menuPresent, catalogPresent: plan.catalogPresent,
2851
2861
  });
2852
2862
  } catch { /* observation is fail-soft */ }
2853
- return plan.lines;
2863
+ return device.required
2864
+ ? [...plan.lines.slice(0, 3), device.inventoryMeasured
2865
+ ? `- 쓸 장치: ${device.device} · ${device.exists ? '기존 장치' : '필요한 장치 · 없음 — 첫 조각에서 개발'}`
2866
+ : `- 장치 재고: 미측정(대상 루트 미상) · 후보: ${device.device}`, ...plan.lines.slice(3)]
2867
+ : plan.lines;
2854
2868
  } catch (error) {
2855
2869
  try { observeGoalAuthor('goal-author', 'verification-plan-failed', { authorRunId, error: error instanceof Error ? error.message : String(error) }); } catch { /* fail-soft */ }
2856
2870
  return [VERIFICATION_PLAN_HEADING, '- UNVERIFIABLE: 검증 계획 저작이 실패했다 — 사람이 다섯 줄(동작·무대·RED·GREEN·배선)을 채운다.'];
@@ -5228,15 +5242,18 @@ function requiredEvidenceInformation(criteria: readonly CheckableCriterion[]): s
5228
5242
  return [`${REQUIRED_EVIDENCE_ANNOTATION_PREFIX} acceptance-criterion evidence kinds: ${[...counts.entries()].map(([type, count]) => `${type} ${count}`).join(', ')}.`];
5229
5243
  }
5230
5244
 
5231
- function requiredEvidence(criteria: readonly CheckableCriterion[], targetPaths: readonly string[], authorRunId: string): string[] {
5245
+ function requiredEvidence(criteria: readonly CheckableCriterion[], targetPaths: readonly string[], authorRunId: string, repositoryRoot?: string): string[] {
5232
5246
  const lines = [
5233
5247
  ...collapseEvidenceKinds(criteria).map(({ tag, evidence }) => `- [${tag}] ${evidence}`),
5234
5248
  ...requiredEvidenceInformation(criteria),
5235
5249
  ];
5236
- const siblingTests = [...new Set(targetPaths.flatMap((path) => {
5237
- const sibling = siblingTestPath(path);
5238
- return sibling ? [sibling] : [];
5239
- }))];
5250
+ const choices = targetPaths.map((path) => ({ path, sibling: siblingTestPath(path), selected: focusedEvidenceTestPath(path, repositoryRoot) }));
5251
+ const siblingTests = [...new Set(choices.flatMap(({ selected }) => selected ? [selected] : []))];
5252
+ const budgetDecisions = choices.filter(({ sibling, selected }) => sibling && sibling !== selected);
5253
+ if (budgetDecisions.length) {
5254
+ try { observeGoalAuthor('goal-author', 'required-evidence-command-budget', { authorRunId, decisions: budgetDecisions }); }
5255
+ catch { /* observation is fail-soft */ }
5256
+ }
5240
5257
  const firstEvidenceLine = lines.findIndex((line) => line.startsWith('- ['));
5241
5258
  const appendedSiblingTestCount = siblingTests.length && firstEvidenceLine >= 0 ? siblingTests.length : 0;
5242
5259
  if (appendedSiblingTestCount) {
@@ -5688,6 +5705,14 @@ async function authorGoalWithSupersededRootIntent(
5688
5705
  } catch { /* observation is fail-soft */ }
5689
5706
  }
5690
5707
  }
5708
+ if (goalType === 'implement' && resolvedSteps?.length) {
5709
+ // ⭐ must-fix — 경계 분기가 내준 «접힌» step 은 장치 RED 가 «같은 런의 첫 동작» 으로 이미 들어 있다.
5710
+ // 다시 staging 하면 «운영 코드 변경 0» 장치 조각이 step 앞에 이중으로 끼워져 모순 문면이 된다.
5711
+ const foldedBoundaryStep = resolvedSteps.length === 1
5712
+ && resolvedSteps[0]!.includes(COMPLETION_BOUNDARY_STEP_PREFIX)
5713
+ && resolvedSteps[0]!.includes(FOLDED_DEVICE_FIRST_ACTION_MARKER);
5714
+ if (!foldedBoundaryStep) resolvedSteps = ensureDeviceFirstSteps(ask, resolvedSteps, deps.repositoryRoot).steps;
5715
+ }
5691
5716
  const explicitGoalTitle = deps.goalTitle === undefined ? undefined : validGoalSummary(deps.goalTitle);
5692
5717
  if (deps.goalTitle !== undefined && !explicitGoalTitle) throw new Error('goalTitle must contain non-whitespace text');
5693
5718
  endAssembleSubphase();
@@ -5986,7 +6011,7 @@ async function authorGoalWithSupersededRootIntent(
5986
6011
  ...preservationAmbiguityClarification(clarificationQuestions, clarificationResponses),
5987
6012
  '',
5988
6013
  '## REQUIRED EVIDENCE',
5989
- ...requiredEvidence(criteria, facts ? implementationCandidates(facts) : [], authorRunId),
6014
+ ...requiredEvidence(criteria, facts ? implementationCandidates(facts) : [], authorRunId, deps.repositoryRoot),
5990
6015
  '',
5991
6016
  ...(goalType === 'implement' ? ['## TRACED PATHS', ...tracedPathsSection(facts, ask, deps.repositoryRoot, narrative.tracedPathsUnavailableEvidence), ''] : []),
5992
6017
  '## SCOPE BOUNDARY',