@ethlete/cli 3.0.0-next.26 → 3.0.0-next.28

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 (837) hide show
  1. package/CHANGELOG.md +481 -0
  2. package/build-info.json +1 -0
  3. package/design/arrow-anchor.ts +55 -0
  4. package/design/define-call.ts +75 -30
  5. package/design/define-part.ts +64 -4
  6. package/design/icon-sheet.ts +1 -1
  7. package/design/interaction-rows.ts +13 -6
  8. package/design/mark-part.ts +51 -1
  9. package/design/token-sheet.ts +1 -1
  10. package/design/web/frame-fit.ts +7 -0
  11. package/design/web/frame-surfaces.ts +294 -0
  12. package/design/web/frame.ts +69 -15
  13. package/design/web/surface-interactive.css +42 -0
  14. package/design/with-action.ts +29 -0
  15. package/package.json +3 -1
  16. package/src/index.js +9 -1
  17. package/src/index.js.map +1 -1
  18. package/src/lib/api/compose.js +3 -2
  19. package/src/lib/api/compose.js.map +1 -1
  20. package/src/lib/api/git.js +2 -1
  21. package/src/lib/api/git.js.map +1 -1
  22. package/src/lib/api/setup.js +2 -2
  23. package/src/lib/api/setup.js.map +1 -1
  24. package/src/lib/design/asset-shot.js +4 -4
  25. package/src/lib/design/asset-shot.js.map +1 -1
  26. package/src/lib/design/blank-png.d.ts +2 -0
  27. package/src/lib/design/blank-png.js +28 -0
  28. package/src/lib/design/blank-png.js.map +1 -0
  29. package/src/lib/design/build-watch.d.ts +26 -0
  30. package/src/lib/design/build-watch.js +138 -0
  31. package/src/lib/design/build-watch.js.map +1 -0
  32. package/src/lib/design/cache-entry.d.ts +8 -0
  33. package/src/lib/design/cache-entry.js +30 -0
  34. package/src/lib/design/cache-entry.js.map +1 -0
  35. package/src/lib/design/calls-tsconfig.js +20 -13
  36. package/src/lib/design/calls-tsconfig.js.map +1 -1
  37. package/src/lib/design/calls.js +3 -3
  38. package/src/lib/design/calls.js.map +1 -1
  39. package/src/lib/design/changed-parts.d.ts +1 -1
  40. package/src/lib/design/check.d.ts +2 -0
  41. package/src/lib/design/check.js +217 -24
  42. package/src/lib/design/check.js.map +1 -1
  43. package/src/lib/design/code-hash.d.ts +30 -0
  44. package/src/lib/design/code-hash.js +118 -0
  45. package/src/lib/design/code-hash.js.map +1 -0
  46. package/src/lib/design/commit-hunks.d.ts +22 -0
  47. package/src/lib/design/commit-hunks.js +173 -0
  48. package/src/lib/design/commit-hunks.js.map +1 -0
  49. package/src/lib/design/design-command.d.ts +2 -0
  50. package/src/lib/design/design-command.js +271 -27
  51. package/src/lib/design/design-command.js.map +1 -1
  52. package/src/lib/design/{paths.d.ts → design-config.d.ts} +34 -28
  53. package/src/lib/design/design-config.js +35 -0
  54. package/src/lib/design/design-config.js.map +1 -0
  55. package/src/lib/design/design-lint.d.ts +68 -0
  56. package/src/lib/design/design-lint.js +183 -0
  57. package/src/lib/design/design-lint.js.map +1 -0
  58. package/src/lib/design/draw-ledger.d.ts +6 -0
  59. package/src/lib/design/draw-ledger.js +10 -0
  60. package/src/lib/design/draw-ledger.js.map +1 -1
  61. package/src/lib/design/force-interactions.d.ts +3 -1
  62. package/src/lib/design/force-interactions.js +8 -4
  63. package/src/lib/design/force-interactions.js.map +1 -1
  64. package/src/lib/design/generated-stylesheets.d.ts +1 -1
  65. package/src/lib/design/generated-stylesheets.js +2 -2
  66. package/src/lib/design/generated-stylesheets.js.map +1 -1
  67. package/src/lib/design/git-top.d.ts +5 -0
  68. package/src/lib/design/git-top.js +16 -0
  69. package/src/lib/design/git-top.js.map +1 -0
  70. package/src/lib/design/hooks-problem.d.ts +2 -0
  71. package/src/lib/design/hooks-problem.js +23 -0
  72. package/src/lib/design/hooks-problem.js.map +1 -0
  73. package/src/lib/design/inbox-command.js +9 -5
  74. package/src/lib/design/inbox-command.js.map +1 -1
  75. package/src/lib/design/index.d.ts +4 -1
  76. package/src/lib/design/index.js +4 -1
  77. package/src/lib/design/index.js.map +1 -1
  78. package/src/lib/design/is-running.d.ts +1 -0
  79. package/src/lib/design/is-running.js +14 -0
  80. package/src/lib/design/is-running.js.map +1 -0
  81. package/src/lib/design/legacy.js +3 -3
  82. package/src/lib/design/legacy.js.map +1 -1
  83. package/src/lib/design/mcp-command.d.ts +5 -1
  84. package/src/lib/design/mcp-command.js +27 -16
  85. package/src/lib/design/mcp-command.js.map +1 -1
  86. package/src/lib/design/merge-compare.d.ts +10 -2
  87. package/src/lib/design/merge-compare.js +63 -11
  88. package/src/lib/design/merge-compare.js.map +1 -1
  89. package/src/lib/design/motion-command.js +4 -4
  90. package/src/lib/design/motion-command.js.map +1 -1
  91. package/src/lib/design/motion-shot.js +3 -2
  92. package/src/lib/design/motion-shot.js.map +1 -1
  93. package/src/lib/design/new-call.js +22 -13
  94. package/src/lib/design/new-call.js.map +1 -1
  95. package/src/lib/design/old-shot-folders.d.ts +2 -0
  96. package/src/lib/design/old-shot-folders.js +26 -0
  97. package/src/lib/design/old-shot-folders.js.map +1 -0
  98. package/src/lib/design/package-root.d.ts +21 -0
  99. package/src/lib/design/package-root.js +79 -0
  100. package/src/lib/design/package-root.js.map +1 -0
  101. package/src/lib/design/parent-watch.d.ts +7 -0
  102. package/src/lib/design/parent-watch.js +23 -0
  103. package/src/lib/design/parent-watch.js.map +1 -0
  104. package/src/lib/design/part-marks.d.ts +3 -2
  105. package/src/lib/design/part-marks.js +15 -7
  106. package/src/lib/design/part-marks.js.map +1 -1
  107. package/src/lib/design/phase-timing.d.ts +5 -0
  108. package/src/lib/design/phase-timing.js +27 -0
  109. package/src/lib/design/phase-timing.js.map +1 -0
  110. package/src/lib/design/physical-cores.d.ts +12 -0
  111. package/src/lib/design/physical-cores.js +43 -0
  112. package/src/lib/design/physical-cores.js.map +1 -0
  113. package/src/lib/design/product-command.d.ts +1 -1
  114. package/src/lib/design/product-command.js +16 -18
  115. package/src/lib/design/product-command.js.map +1 -1
  116. package/src/lib/design/push-status.d.ts +30 -0
  117. package/src/lib/design/push-status.js +122 -0
  118. package/src/lib/design/push-status.js.map +1 -0
  119. package/src/lib/design/ready-shots.d.ts +21 -12
  120. package/src/lib/design/ready-shots.js +79 -44
  121. package/src/lib/design/ready-shots.js.map +1 -1
  122. package/src/lib/design/render-packages.d.ts +7 -18
  123. package/src/lib/design/render-packages.js +24 -63
  124. package/src/lib/design/render-packages.js.map +1 -1
  125. package/src/lib/design/render-worker.js +24 -6
  126. package/src/lib/design/render-worker.js.map +1 -1
  127. package/src/lib/design/render.d.ts +26 -3
  128. package/src/lib/design/render.js +52 -13
  129. package/src/lib/design/render.js.map +1 -1
  130. package/src/lib/design/resident/client.d.ts +52 -0
  131. package/src/lib/design/resident/client.js +263 -0
  132. package/src/lib/design/resident/client.js.map +1 -0
  133. package/src/lib/design/resident/discovery.d.ts +21 -0
  134. package/src/lib/design/resident/discovery.js +63 -0
  135. package/src/lib/design/resident/discovery.js.map +1 -0
  136. package/src/lib/design/resident/resident-process.d.ts +19 -0
  137. package/src/lib/design/resident/resident-process.js +189 -0
  138. package/src/lib/design/resident/resident-process.js.map +1 -0
  139. package/src/lib/design/resident/server.d.ts +52 -0
  140. package/src/lib/design/resident/server.js +212 -0
  141. package/src/lib/design/resident/server.js.map +1 -0
  142. package/src/lib/design/run-abort.d.ts +9 -0
  143. package/src/lib/design/run-abort.js +45 -0
  144. package/src/lib/design/run-abort.js.map +1 -0
  145. package/src/lib/design/run-deadline.d.ts +19 -0
  146. package/src/lib/design/run-deadline.js +104 -0
  147. package/src/lib/design/run-deadline.js.map +1 -0
  148. package/src/lib/design/run-yield.d.ts +8 -0
  149. package/src/lib/design/run-yield.js +43 -0
  150. package/src/lib/design/run-yield.js.map +1 -0
  151. package/src/lib/design/serve-state.d.ts +15 -0
  152. package/src/lib/design/serve-state.js +56 -0
  153. package/src/lib/design/serve-state.js.map +1 -0
  154. package/src/lib/design/serve.d.ts +41 -3
  155. package/src/lib/design/serve.js +272 -54
  156. package/src/lib/design/serve.js.map +1 -1
  157. package/src/lib/design/server-identity.d.ts +40 -0
  158. package/src/lib/design/server-identity.js +71 -0
  159. package/src/lib/design/server-identity.js.map +1 -0
  160. package/src/lib/design/settle-frames.d.ts +4 -0
  161. package/src/lib/design/settle-frames.js +22 -0
  162. package/src/lib/design/settle-frames.js.map +1 -0
  163. package/src/lib/design/shot-board.d.ts +26 -0
  164. package/src/lib/design/shot-board.js +80 -0
  165. package/src/lib/design/shot-board.js.map +1 -0
  166. package/src/lib/design/shot-command.d.ts +26 -5
  167. package/src/lib/design/shot-command.js +143 -50
  168. package/src/lib/design/shot-command.js.map +1 -1
  169. package/src/lib/design/shot-store.d.ts +29 -3
  170. package/src/lib/design/shot-store.js +206 -36
  171. package/src/lib/design/shot-store.js.map +1 -1
  172. package/src/lib/design/shot.d.ts +60 -2
  173. package/src/lib/design/shot.js +238 -28
  174. package/src/lib/design/shot.js.map +1 -1
  175. package/src/lib/design/sketch-at.js +2 -1
  176. package/src/lib/design/sketch-at.js.map +1 -1
  177. package/src/lib/design/sketch-command.d.ts +19 -1
  178. package/src/lib/design/sketch-command.js +664 -159
  179. package/src/lib/design/sketch-command.js.map +1 -1
  180. package/src/lib/design/ssr-shims.d.ts +1 -0
  181. package/src/lib/design/ssr-shims.js +3 -3
  182. package/src/lib/design/ssr-shims.js.map +1 -1
  183. package/src/lib/design/stale-cli-dist.d.ts +11 -0
  184. package/src/lib/design/stale-cli-dist.js +56 -0
  185. package/src/lib/design/stale-cli-dist.js.map +1 -0
  186. package/src/lib/design/stamp.d.ts +23 -1
  187. package/src/lib/design/stamp.js +56 -9
  188. package/src/lib/design/stamp.js.map +1 -1
  189. package/src/lib/design/started-by-studio.d.ts +1 -0
  190. package/src/lib/design/started-by-studio.js +6 -0
  191. package/src/lib/design/started-by-studio.js.map +1 -0
  192. package/src/lib/design/status.d.ts +1 -1
  193. package/src/lib/design/status.js +15 -4
  194. package/src/lib/design/status.js.map +1 -1
  195. package/src/lib/design/studio-api.d.ts +21 -10
  196. package/src/lib/design/studio-api.js +192 -88
  197. package/src/lib/design/studio-api.js.map +1 -1
  198. package/src/lib/design/system/accepted-pictures.d.ts +69 -0
  199. package/src/lib/design/system/accepted-pictures.js +346 -0
  200. package/src/lib/design/system/accepted-pictures.js.map +1 -0
  201. package/src/lib/design/system/action-cache.d.ts +45 -0
  202. package/src/lib/design/system/action-cache.js +72 -0
  203. package/src/lib/design/system/action-cache.js.map +1 -0
  204. package/src/lib/design/system/action-lost.d.ts +61 -0
  205. package/src/lib/design/system/action-lost.js +116 -0
  206. package/src/lib/design/system/action-lost.js.map +1 -0
  207. package/src/lib/design/system/action-press.d.ts +29 -0
  208. package/src/lib/design/system/action-press.js +88 -0
  209. package/src/lib/design/system/action-press.js.map +1 -0
  210. package/src/lib/design/system/action-undeclared.d.ts +34 -0
  211. package/src/lib/design/system/action-undeclared.js +81 -0
  212. package/src/lib/design/system/action-undeclared.js.map +1 -0
  213. package/src/lib/design/system/actions-command.d.ts +108 -0
  214. package/src/lib/design/system/actions-command.js +816 -0
  215. package/src/lib/design/system/actions-command.js.map +1 -0
  216. package/src/lib/design/system/actions.d.ts +181 -0
  217. package/src/lib/design/system/actions.js +333 -0
  218. package/src/lib/design/system/actions.js.map +1 -0
  219. package/src/lib/design/system/anti-alias.d.ts +2 -0
  220. package/src/lib/design/system/anti-alias.js +11 -0
  221. package/src/lib/design/system/anti-alias.js.map +1 -0
  222. package/src/lib/design/system/app-files.d.ts +10 -0
  223. package/src/lib/design/system/app-files.js +175 -0
  224. package/src/lib/design/system/app-files.js.map +1 -0
  225. package/src/lib/design/system/arrow-anchor.d.ts +9 -0
  226. package/src/lib/design/system/arrow-anchor.js +40 -0
  227. package/src/lib/design/system/arrow-anchor.js.map +1 -0
  228. package/src/lib/design/system/base-issues.d.ts +28 -0
  229. package/src/lib/design/system/base-issues.js +80 -0
  230. package/src/lib/design/system/base-issues.js.map +1 -0
  231. package/src/lib/design/system/base.d.ts +1 -1
  232. package/src/lib/design/system/base.js +2 -2
  233. package/src/lib/design/system/base.js.map +1 -1
  234. package/src/lib/design/system/baseline-history.d.ts +13 -0
  235. package/src/lib/design/system/baseline-history.js +40 -0
  236. package/src/lib/design/system/baseline-history.js.map +1 -0
  237. package/src/lib/design/system/bespoke-controls.d.ts +33 -0
  238. package/src/lib/design/system/bespoke-controls.js +149 -0
  239. package/src/lib/design/system/bespoke-controls.js.map +1 -0
  240. package/src/lib/design/system/build-ready-contract.d.ts +33 -0
  241. package/src/lib/design/system/build-ready-contract.js +18 -0
  242. package/src/lib/design/system/build-ready-contract.js.map +1 -0
  243. package/src/lib/design/system/build-running.d.ts +13 -0
  244. package/src/lib/design/system/build-running.js +48 -0
  245. package/src/lib/design/system/build-running.js.map +1 -0
  246. package/src/lib/design/system/check-record.d.ts +18 -0
  247. package/src/lib/design/system/check-record.js +47 -0
  248. package/src/lib/design/system/check-record.js.map +1 -0
  249. package/src/lib/design/system/check-rules.d.ts +1 -0
  250. package/src/lib/design/system/check-rules.js +100 -0
  251. package/src/lib/design/system/check-rules.js.map +1 -0
  252. package/src/lib/design/system/check-system.d.ts +83 -7
  253. package/src/lib/design/system/check-system.js +647 -68
  254. package/src/lib/design/system/check-system.js.map +1 -1
  255. package/src/lib/design/system/comments/comment.d.ts +4 -1
  256. package/src/lib/design/system/comments/comment.js +13 -4
  257. package/src/lib/design/system/comments/comment.js.map +1 -1
  258. package/src/lib/design/system/comments/inbox.d.ts +1 -1
  259. package/src/lib/design/system/comments/inbox.js +2 -2
  260. package/src/lib/design/system/comments/inbox.js.map +1 -1
  261. package/src/lib/design/system/compare-cache.d.ts +20 -0
  262. package/src/lib/design/system/compare-cache.js +92 -0
  263. package/src/lib/design/system/compare-cache.js.map +1 -0
  264. package/src/lib/design/system/compare-command.d.ts +150 -0
  265. package/src/lib/design/system/compare-command.js +580 -0
  266. package/src/lib/design/system/compare-command.js.map +1 -0
  267. package/src/lib/design/system/complete-command.js +1 -1
  268. package/src/lib/design/system/complete-command.js.map +1 -1
  269. package/src/lib/design/system/complete.d.ts +63 -2
  270. package/src/lib/design/system/complete.js +281 -71
  271. package/src/lib/design/system/complete.js.map +1 -1
  272. package/src/lib/design/system/component-outputs.d.ts +20 -0
  273. package/src/lib/design/system/component-outputs.js +86 -0
  274. package/src/lib/design/system/component-outputs.js.map +1 -0
  275. package/src/lib/design/system/contrast-check.d.ts +1 -1
  276. package/src/lib/design/system/contrast-check.js +14 -3
  277. package/src/lib/design/system/contrast-check.js.map +1 -1
  278. package/src/lib/design/system/decision-refs.d.ts +5 -0
  279. package/src/lib/design/system/decision-refs.js +21 -0
  280. package/src/lib/design/system/decision-refs.js.map +1 -0
  281. package/src/lib/design/system/demo-backdrop.d.ts +11 -0
  282. package/src/lib/design/system/demo-backdrop.js +41 -0
  283. package/src/lib/design/system/demo-backdrop.js.map +1 -0
  284. package/src/lib/design/system/design-hash.d.ts +52 -0
  285. package/src/lib/design/system/design-hash.js +132 -0
  286. package/src/lib/design/system/design-hash.js.map +1 -0
  287. package/src/lib/design/system/disabled-interaction.d.ts +8 -0
  288. package/src/lib/design/system/disabled-interaction.js +37 -0
  289. package/src/lib/design/system/disabled-interaction.js.map +1 -0
  290. package/src/lib/design/system/dom-command.d.ts +36 -0
  291. package/src/lib/design/system/dom-command.js +178 -0
  292. package/src/lib/design/system/dom-command.js.map +1 -0
  293. package/src/lib/design/system/drawn-open-points.d.ts +26 -4
  294. package/src/lib/design/system/drawn-open-points.js +65 -14
  295. package/src/lib/design/system/drawn-open-points.js.map +1 -1
  296. package/src/lib/design/system/dropped-props.d.ts +39 -0
  297. package/src/lib/design/system/dropped-props.js +271 -0
  298. package/src/lib/design/system/dropped-props.js.map +1 -0
  299. package/src/lib/design/system/embedded-actions.d.ts +21 -0
  300. package/src/lib/design/system/embedded-actions.js +37 -0
  301. package/src/lib/design/system/embedded-actions.js.map +1 -0
  302. package/src/lib/design/system/exceptions.js +2 -1
  303. package/src/lib/design/system/exceptions.js.map +1 -1
  304. package/src/lib/design/system/flows/flow.js +2 -1
  305. package/src/lib/design/system/flows/flow.js.map +1 -1
  306. package/src/lib/design/system/frozen-animations.d.ts +13 -0
  307. package/src/lib/design/system/frozen-animations.js +51 -0
  308. package/src/lib/design/system/frozen-animations.js.map +1 -0
  309. package/src/lib/design/system/grid-report.d.ts +5 -0
  310. package/src/lib/design/system/grid-report.js +78 -0
  311. package/src/lib/design/system/grid-report.js.map +1 -0
  312. package/src/lib/design/system/handoff.js +2 -1
  313. package/src/lib/design/system/handoff.js.map +1 -1
  314. package/src/lib/design/system/harness-build-cache.d.ts +49 -0
  315. package/src/lib/design/system/harness-build-cache.js +188 -0
  316. package/src/lib/design/system/harness-build-cache.js.map +1 -0
  317. package/src/lib/design/system/harness-command.d.ts +7 -0
  318. package/src/lib/design/system/harness-command.js +51 -0
  319. package/src/lib/design/system/harness-command.js.map +1 -0
  320. package/src/lib/design/system/harness-config.d.ts +9 -0
  321. package/src/lib/design/system/harness-config.js +65 -0
  322. package/src/lib/design/system/harness-config.js.map +1 -0
  323. package/src/lib/design/system/harness-inputs.d.ts +17 -0
  324. package/src/lib/design/system/harness-inputs.js +160 -0
  325. package/src/lib/design/system/harness-inputs.js.map +1 -0
  326. package/src/lib/design/system/harness-map.d.ts +44 -0
  327. package/src/lib/design/system/harness-map.js +126 -0
  328. package/src/lib/design/system/harness-map.js.map +1 -0
  329. package/src/lib/design/system/harness-samples.d.ts +20 -0
  330. package/src/lib/design/system/harness-samples.js +92 -0
  331. package/src/lib/design/system/harness-samples.js.map +1 -0
  332. package/src/lib/design/system/harness-server.d.ts +51 -0
  333. package/src/lib/design/system/harness-server.js +306 -0
  334. package/src/lib/design/system/harness-server.js.map +1 -0
  335. package/src/lib/design/system/harness-shot.d.ts +78 -0
  336. package/src/lib/design/system/harness-shot.js +349 -0
  337. package/src/lib/design/system/harness-shot.js.map +1 -0
  338. package/src/lib/design/system/harness-watch.d.ts +79 -0
  339. package/src/lib/design/system/harness-watch.js +334 -0
  340. package/src/lib/design/system/harness-watch.js.map +1 -0
  341. package/src/lib/design/system/implementation-baseline.d.ts +20 -0
  342. package/src/lib/design/system/implementation-baseline.js +44 -0
  343. package/src/lib/design/system/implementation-baseline.js.map +1 -0
  344. package/src/lib/design/system/imports.js +14 -1
  345. package/src/lib/design/system/imports.js.map +1 -1
  346. package/src/lib/design/system/in-order-at-once.d.ts +6 -0
  347. package/src/lib/design/system/in-order-at-once.js +28 -0
  348. package/src/lib/design/system/in-order-at-once.js.map +1 -0
  349. package/src/lib/design/system/inventory-approval.js +2 -1
  350. package/src/lib/design/system/inventory-approval.js.map +1 -1
  351. package/src/lib/design/system/inventory.d.ts +13 -4
  352. package/src/lib/design/system/inventory.js +36 -7
  353. package/src/lib/design/system/inventory.js.map +1 -1
  354. package/src/lib/design/system/leftover-gate-files.d.ts +2 -0
  355. package/src/lib/design/system/leftover-gate-files.js +15 -0
  356. package/src/lib/design/system/leftover-gate-files.js.map +1 -0
  357. package/src/lib/design/system/lib-build-lock.d.ts +18 -0
  358. package/src/lib/design/system/lib-build-lock.js +111 -0
  359. package/src/lib/design/system/lib-build-lock.js.map +1 -0
  360. package/src/lib/design/system/link-free.d.ts +12 -0
  361. package/src/lib/design/system/link-free.js +125 -0
  362. package/src/lib/design/system/link-free.js.map +1 -0
  363. package/src/lib/design/system/list-system.d.ts +8 -8
  364. package/src/lib/design/system/list-system.js +19 -80
  365. package/src/lib/design/system/list-system.js.map +1 -1
  366. package/src/lib/design/system/live-actions.d.ts +121 -0
  367. package/src/lib/design/system/live-actions.js +674 -0
  368. package/src/lib/design/system/live-actions.js.map +1 -0
  369. package/src/lib/design/system/live-compare.d.ts +136 -0
  370. package/src/lib/design/system/live-compare.js +441 -0
  371. package/src/lib/design/system/live-compare.js.map +1 -0
  372. package/src/lib/design/system/live-uncovered.d.ts +45 -0
  373. package/src/lib/design/system/live-uncovered.js +158 -0
  374. package/src/lib/design/system/live-uncovered.js.map +1 -0
  375. package/src/lib/design/system/nested-scroll.d.ts +7 -0
  376. package/src/lib/design/system/nested-scroll.js +25 -0
  377. package/src/lib/design/system/nested-scroll.js.map +1 -0
  378. package/src/lib/design/system/no-verdict.d.ts +13 -0
  379. package/src/lib/design/system/no-verdict.js +17 -0
  380. package/src/lib/design/system/no-verdict.js.map +1 -0
  381. package/src/lib/design/system/notes/note.js +2 -1
  382. package/src/lib/design/system/notes/note.js.map +1 -1
  383. package/src/lib/design/system/occluded.d.ts +13 -0
  384. package/src/lib/design/system/occluded.js +111 -0
  385. package/src/lib/design/system/occluded.js.map +1 -0
  386. package/src/lib/design/system/off-centre.d.ts +11 -0
  387. package/src/lib/design/system/off-centre.js +74 -0
  388. package/src/lib/design/system/off-centre.js.map +1 -0
  389. package/src/lib/design/system/open-points-cache.d.ts +11 -0
  390. package/src/lib/design/system/open-points-cache.js +27 -0
  391. package/src/lib/design/system/open-points-cache.js.map +1 -0
  392. package/src/lib/design/system/open-points-runner.d.ts +43 -0
  393. package/src/lib/design/system/open-points-runner.js +119 -0
  394. package/src/lib/design/system/open-points-runner.js.map +1 -0
  395. package/src/lib/design/system/open-points-worker.d.ts +1 -0
  396. package/src/lib/design/system/open-points-worker.js +28 -0
  397. package/src/lib/design/system/open-points-worker.js.map +1 -0
  398. package/src/lib/design/system/open-points.d.ts +24 -6
  399. package/src/lib/design/system/open-points.js +59 -30
  400. package/src/lib/design/system/open-points.js.map +1 -1
  401. package/src/lib/design/system/part-build-ready.d.ts +45 -0
  402. package/src/lib/design/system/part-build-ready.js +135 -0
  403. package/src/lib/design/system/part-build-ready.js.map +1 -0
  404. package/src/lib/design/system/part-command.js +2 -9
  405. package/src/lib/design/system/part-command.js.map +1 -1
  406. package/src/lib/design/system/part-compare.d.ts +139 -0
  407. package/src/lib/design/system/part-compare.js +501 -0
  408. package/src/lib/design/system/part-compare.js.map +1 -0
  409. package/src/lib/design/system/part-picture-cache.d.ts +23 -0
  410. package/src/lib/design/system/part-picture-cache.js +68 -0
  411. package/src/lib/design/system/part-picture-cache.js.map +1 -0
  412. package/src/lib/design/system/part-ready.d.ts +71 -7
  413. package/src/lib/design/system/part-ready.js +128 -19
  414. package/src/lib/design/system/part-ready.js.map +1 -1
  415. package/src/lib/design/system/part-task.d.ts +167 -0
  416. package/src/lib/design/system/part-task.js +331 -0
  417. package/src/lib/design/system/part-task.js.map +1 -0
  418. package/src/lib/design/system/pixel-cache.d.ts +16 -0
  419. package/src/lib/design/system/pixel-cache.js +79 -0
  420. package/src/lib/design/system/pixel-cache.js.map +1 -0
  421. package/src/lib/design/system/pointer-focus.d.ts +89 -0
  422. package/src/lib/design/system/pointer-focus.js +175 -0
  423. package/src/lib/design/system/pointer-focus.js.map +1 -0
  424. package/src/lib/design/system/prettier.d.ts +10 -0
  425. package/src/lib/design/system/prettier.js +37 -0
  426. package/src/lib/design/system/prettier.js.map +1 -0
  427. package/src/lib/design/system/problem.d.ts +6 -0
  428. package/src/lib/design/system/product.js +2 -2
  429. package/src/lib/design/system/product.js.map +1 -1
  430. package/src/lib/design/system/reach.d.ts +12 -0
  431. package/src/lib/design/system/reach.js +186 -0
  432. package/src/lib/design/system/reach.js.map +1 -0
  433. package/src/lib/design/system/reachable-controls.d.ts +6 -0
  434. package/src/lib/design/system/reachable-controls.js +19 -0
  435. package/src/lib/design/system/reachable-controls.js.map +1 -0
  436. package/src/lib/design/system/reachable-files.d.ts +14 -0
  437. package/src/lib/design/system/reachable-files.js +101 -0
  438. package/src/lib/design/system/reachable-files.js.map +1 -0
  439. package/src/lib/design/system/reached-state.d.ts +23 -0
  440. package/src/lib/design/system/reached-state.js +53 -0
  441. package/src/lib/design/system/reached-state.js.map +1 -0
  442. package/src/lib/design/system/read-open-points.d.ts +9 -3
  443. package/src/lib/design/system/read-open-points.js +38 -9
  444. package/src/lib/design/system/read-open-points.js.map +1 -1
  445. package/src/lib/design/system/ready-command.d.ts +6 -2
  446. package/src/lib/design/system/ready-command.js +52 -15
  447. package/src/lib/design/system/ready-command.js.map +1 -1
  448. package/src/lib/design/system/record-settled.d.ts +24 -0
  449. package/src/lib/design/system/record-settled.js +50 -0
  450. package/src/lib/design/system/record-settled.js.map +1 -0
  451. package/src/lib/design/system/render-check.d.ts +68 -1
  452. package/src/lib/design/system/render-check.js +427 -114
  453. package/src/lib/design/system/render-check.js.map +1 -1
  454. package/src/lib/design/system/render-issue-key.d.ts +9 -0
  455. package/src/lib/design/system/render-issue-key.js +27 -0
  456. package/src/lib/design/system/render-issue-key.js.map +1 -0
  457. package/src/lib/design/system/resolve-product.d.ts +4 -1
  458. package/src/lib/design/system/resolve-product.js +19 -3
  459. package/src/lib/design/system/resolve-product.js.map +1 -1
  460. package/src/lib/design/system/rule-baseline.d.ts +53 -0
  461. package/src/lib/design/system/rule-baseline.js +124 -0
  462. package/src/lib/design/system/rule-baseline.js.map +1 -0
  463. package/src/lib/design/system/rule-skips.d.ts +20 -0
  464. package/src/lib/design/system/rule-skips.js +36 -0
  465. package/src/lib/design/system/rule-skips.js.map +1 -0
  466. package/src/lib/design/system/rules/app-spec.d.ts +30 -0
  467. package/src/lib/design/system/rules/app-spec.js +87 -0
  468. package/src/lib/design/system/rules/app-spec.js.map +1 -0
  469. package/src/lib/design/system/rules/canonical-class.d.ts +6 -0
  470. package/src/lib/design/system/rules/canonical-class.js +92 -113
  471. package/src/lib/design/system/rules/canonical-class.js.map +1 -1
  472. package/src/lib/design/system/rules/capability-place.d.ts +46 -0
  473. package/src/lib/design/system/rules/capability-place.js +129 -0
  474. package/src/lib/design/system/rules/capability-place.js.map +1 -0
  475. package/src/lib/design/system/rules/command-text.d.ts +7 -0
  476. package/src/lib/design/system/rules/command-text.js +72 -0
  477. package/src/lib/design/system/rules/command-text.js.map +1 -0
  478. package/src/lib/design/system/rules/denied-class.d.ts +9 -0
  479. package/src/lib/design/system/rules/denied-class.js +121 -0
  480. package/src/lib/design/system/rules/denied-class.js.map +1 -0
  481. package/src/lib/design/system/rules/design-coverage.d.ts +30 -0
  482. package/src/lib/design/system/rules/design-coverage.js +205 -0
  483. package/src/lib/design/system/rules/design-coverage.js.map +1 -0
  484. package/src/lib/design/system/rules/exemptions.d.ts +18 -0
  485. package/src/lib/design/system/rules/exemptions.js +18 -0
  486. package/src/lib/design/system/rules/exemptions.js.map +1 -0
  487. package/src/lib/design/system/rules/flow.js +1 -1
  488. package/src/lib/design/system/rules/flow.js.map +1 -1
  489. package/src/lib/design/system/rules/glued-interpolation.d.ts +8 -0
  490. package/src/lib/design/system/rules/glued-interpolation.js +77 -0
  491. package/src/lib/design/system/rules/glued-interpolation.js.map +1 -0
  492. package/src/lib/design/system/rules/hard-coded-colour.js +2 -1
  493. package/src/lib/design/system/rules/hard-coded-colour.js.map +1 -1
  494. package/src/lib/design/system/rules/implemented-components.d.ts +22 -0
  495. package/src/lib/design/system/rules/implemented-components.js +45 -0
  496. package/src/lib/design/system/rules/implemented-components.js.map +1 -0
  497. package/src/lib/design/system/rules/implements-unrendered.d.ts +13 -0
  498. package/src/lib/design/system/rules/implements-unrendered.js +63 -0
  499. package/src/lib/design/system/rules/implements-unrendered.js.map +1 -0
  500. package/src/lib/design/system/rules/implements.d.ts +2 -1
  501. package/src/lib/design/system/rules/implements.js +26 -21
  502. package/src/lib/design/system/rules/implements.js.map +1 -1
  503. package/src/lib/design/system/rules/inline-svg.js +4 -1
  504. package/src/lib/design/system/rules/inline-svg.js.map +1 -1
  505. package/src/lib/design/system/rules/inline-ui-in-page-open.d.ts +13 -0
  506. package/src/lib/design/system/rules/inline-ui-in-page-open.js +5 -0
  507. package/src/lib/design/system/rules/inline-ui-in-page-open.js.map +1 -0
  508. package/src/lib/design/system/rules/inline-ui-in-page.d.ts +18 -0
  509. package/src/lib/design/system/rules/inline-ui-in-page.js +123 -0
  510. package/src/lib/design/system/rules/inline-ui-in-page.js.map +1 -0
  511. package/src/lib/design/system/rules/inline-ui.d.ts +16 -0
  512. package/src/lib/design/system/rules/inline-ui.js +100 -0
  513. package/src/lib/design/system/rules/inline-ui.js.map +1 -0
  514. package/src/lib/design/system/rules/motion.d.ts +1 -1
  515. package/src/lib/design/system/rules/motion.js +31 -17
  516. package/src/lib/design/system/rules/motion.js.map +1 -1
  517. package/src/lib/design/system/rules/native-title.d.ts +7 -0
  518. package/src/lib/design/system/rules/native-title.js +74 -0
  519. package/src/lib/design/system/rules/native-title.js.map +1 -0
  520. package/src/lib/design/system/rules/option-values.d.ts +1 -1
  521. package/src/lib/design/system/rules/orphan-endpoint-known.d.ts +12 -0
  522. package/src/lib/design/system/rules/orphan-endpoint-known.js +20 -0
  523. package/src/lib/design/system/rules/orphan-endpoint-known.js.map +1 -0
  524. package/src/lib/design/system/rules/orphan-endpoint.d.ts +23 -0
  525. package/src/lib/design/system/rules/orphan-endpoint.js +166 -0
  526. package/src/lib/design/system/rules/orphan-endpoint.js.map +1 -0
  527. package/src/lib/design/system/rules/part-rewrite.d.ts +13 -0
  528. package/src/lib/design/system/rules/part-rewrite.js +125 -0
  529. package/src/lib/design/system/rules/part-rewrite.js.map +1 -0
  530. package/src/lib/design/system/rules/pending-state.d.ts +39 -0
  531. package/src/lib/design/system/rules/pending-state.js +289 -0
  532. package/src/lib/design/system/rules/pending-state.js.map +1 -0
  533. package/src/lib/design/system/rules/sample-default-known.d.ts +5 -0
  534. package/src/lib/design/system/rules/sample-default-known.js +17 -0
  535. package/src/lib/design/system/rules/sample-default-known.js.map +1 -0
  536. package/src/lib/design/system/rules/sample-default.d.ts +22 -0
  537. package/src/lib/design/system/rules/sample-default.js +92 -0
  538. package/src/lib/design/system/rules/sample-default.js.map +1 -0
  539. package/src/lib/design/system/rules/sdk-attribute-value.d.ts +10 -0
  540. package/src/lib/design/system/rules/sdk-attribute-value.js +78 -0
  541. package/src/lib/design/system/rules/sdk-attribute-value.js.map +1 -0
  542. package/src/lib/design/system/rules/sdk-private-var.d.ts +9 -0
  543. package/src/lib/design/system/rules/sdk-private-var.js +54 -0
  544. package/src/lib/design/system/rules/sdk-private-var.js.map +1 -0
  545. package/src/lib/design/system/rules/skips.d.ts +4 -0
  546. package/src/lib/design/system/rules/skips.js +27 -0
  547. package/src/lib/design/system/rules/skips.js.map +1 -0
  548. package/src/lib/design/system/rules/stale-replace.js +5 -0
  549. package/src/lib/design/system/rules/stale-replace.js.map +1 -1
  550. package/src/lib/design/system/rules/state-in-component.d.ts +16 -0
  551. package/src/lib/design/system/rules/state-in-component.js +101 -0
  552. package/src/lib/design/system/rules/state-in-component.js.map +1 -0
  553. package/src/lib/design/system/rules/tailwind-classes.d.ts +52 -0
  554. package/src/lib/design/system/rules/tailwind-classes.js +237 -0
  555. package/src/lib/design/system/rules/tailwind-classes.js.map +1 -0
  556. package/src/lib/design/system/rules/token-selectors.js +10 -3
  557. package/src/lib/design/system/rules/token-selectors.js.map +1 -1
  558. package/src/lib/design/system/rules/top-level-await.d.ts +9 -0
  559. package/src/lib/design/system/rules/top-level-await.js +62 -0
  560. package/src/lib/design/system/rules/top-level-await.js.map +1 -0
  561. package/src/lib/design/system/rules/unbound-input-known.d.ts +7 -0
  562. package/src/lib/design/system/rules/unbound-input-known.js +44 -0
  563. package/src/lib/design/system/rules/unbound-input-known.js.map +1 -0
  564. package/src/lib/design/system/rules/unbound-input.d.ts +24 -0
  565. package/src/lib/design/system/rules/unbound-input.js +67 -0
  566. package/src/lib/design/system/rules/unbound-input.js.map +1 -0
  567. package/src/lib/design/system/rules/uncovered-region.d.ts +13 -0
  568. package/src/lib/design/system/rules/uncovered-region.js +36 -0
  569. package/src/lib/design/system/rules/uncovered-region.js.map +1 -0
  570. package/src/lib/design/system/rules/undefined-class.d.ts +9 -0
  571. package/src/lib/design/system/rules/undefined-class.js +41 -0
  572. package/src/lib/design/system/rules/undefined-class.js.map +1 -0
  573. package/src/lib/design/system/rules/undefined-token.d.ts +1 -1
  574. package/src/lib/design/system/rules/undefined-token.js +7 -61
  575. package/src/lib/design/system/rules/undefined-token.js.map +1 -1
  576. package/src/lib/design/system/rules/utility-css.d.ts +2 -1
  577. package/src/lib/design/system/rules/utility-css.js +40 -13
  578. package/src/lib/design/system/rules/utility-css.js.map +1 -1
  579. package/src/lib/design/system/rules/view-coverage.d.ts +8 -0
  580. package/src/lib/design/system/rules/view-coverage.js +51 -0
  581. package/src/lib/design/system/rules/view-coverage.js.map +1 -0
  582. package/src/lib/design/system/rules/visible-change.d.ts +19 -0
  583. package/src/lib/design/system/rules/visible-change.js +48 -0
  584. package/src/lib/design/system/rules/visible-change.js.map +1 -0
  585. package/src/lib/design/system/sdk-declarations.d.ts +10 -0
  586. package/src/lib/design/system/sdk-declarations.js +177 -0
  587. package/src/lib/design/system/sdk-declarations.js.map +1 -0
  588. package/src/lib/design/system/sdk-errors.d.ts +14 -0
  589. package/src/lib/design/system/sdk-errors.js +38 -0
  590. package/src/lib/design/system/sdk-errors.js.map +1 -0
  591. package/src/lib/design/system/sdk-selectors.d.ts +18 -0
  592. package/src/lib/design/system/sdk-selectors.js +131 -0
  593. package/src/lib/design/system/sdk-selectors.js.map +1 -0
  594. package/src/lib/design/system/see-through.d.ts +12 -0
  595. package/src/lib/design/system/see-through.js +112 -0
  596. package/src/lib/design/system/see-through.js.map +1 -0
  597. package/src/lib/design/system/served-cache.d.ts +99 -0
  598. package/src/lib/design/system/served-cache.js +202 -0
  599. package/src/lib/design/system/served-cache.js.map +1 -0
  600. package/src/lib/design/system/settled-panes.d.ts +23 -0
  601. package/src/lib/design/system/settled-panes.js +71 -0
  602. package/src/lib/design/system/settled-panes.js.map +1 -0
  603. package/src/lib/design/system/sketch/after-merge.d.ts +11 -0
  604. package/src/lib/design/system/sketch/after-merge.js +51 -0
  605. package/src/lib/design/system/sketch/after-merge.js.map +1 -0
  606. package/src/lib/design/system/sketch/aktuell-placeholders.d.ts +30 -0
  607. package/src/lib/design/system/sketch/aktuell-placeholders.js +87 -0
  608. package/src/lib/design/system/sketch/aktuell-placeholders.js.map +1 -0
  609. package/src/lib/design/system/sketch/baseline.d.ts +36 -2
  610. package/src/lib/design/system/sketch/baseline.js +76 -13
  611. package/src/lib/design/system/sketch/baseline.js.map +1 -1
  612. package/src/lib/design/system/sketch/check-format.js +3 -9
  613. package/src/lib/design/system/sketch/check-format.js.map +1 -1
  614. package/src/lib/design/system/sketch/check-sketches.d.ts +10 -0
  615. package/src/lib/design/system/sketch/check-sketches.js +50 -4
  616. package/src/lib/design/system/sketch/check-sketches.js.map +1 -1
  617. package/src/lib/design/system/sketch/clean-copy.d.ts +18 -0
  618. package/src/lib/design/system/sketch/clean-copy.js +104 -0
  619. package/src/lib/design/system/sketch/clean-copy.js.map +1 -0
  620. package/src/lib/design/system/sketch/cli-args.d.ts +13 -3
  621. package/src/lib/design/system/sketch/cli-args.js +20 -5
  622. package/src/lib/design/system/sketch/cli-args.js.map +1 -1
  623. package/src/lib/design/system/sketch/covered-diffs.d.ts +40 -0
  624. package/src/lib/design/system/sketch/covered-diffs.js +106 -0
  625. package/src/lib/design/system/sketch/covered-diffs.js.map +1 -0
  626. package/src/lib/design/system/sketch/edit-sketch.d.ts +29 -0
  627. package/src/lib/design/system/sketch/edit-sketch.js +169 -0
  628. package/src/lib/design/system/sketch/edit-sketch.js.map +1 -0
  629. package/src/lib/design/system/sketch/frame-budget.d.ts +24 -0
  630. package/src/lib/design/system/sketch/frame-budget.js +23 -0
  631. package/src/lib/design/system/sketch/frame-budget.js.map +1 -0
  632. package/src/lib/design/system/sketch/identical-renders.d.ts +31 -0
  633. package/src/lib/design/system/sketch/identical-renders.js +143 -0
  634. package/src/lib/design/system/sketch/identical-renders.js.map +1 -0
  635. package/src/lib/design/system/sketch/merge-commit.d.ts +20 -0
  636. package/src/lib/design/system/sketch/merge-commit.js +72 -0
  637. package/src/lib/design/system/sketch/merge-commit.js.map +1 -0
  638. package/src/lib/design/system/sketch/merge-runner.d.ts +20 -0
  639. package/src/lib/design/system/sketch/merge-runner.js +73 -0
  640. package/src/lib/design/system/sketch/merge-runner.js.map +1 -0
  641. package/src/lib/design/system/sketch/merge-shared.d.ts +2 -0
  642. package/src/lib/design/system/sketch/merge-shared.js +7 -10
  643. package/src/lib/design/system/sketch/merge-shared.js.map +1 -1
  644. package/src/lib/design/system/sketch/merge-step.d.ts +47 -0
  645. package/src/lib/design/system/sketch/merge-step.js +110 -0
  646. package/src/lib/design/system/sketch/merge-step.js.map +1 -0
  647. package/src/lib/design/system/sketch/merge-worker.d.ts +1 -0
  648. package/src/lib/design/system/sketch/merge-worker.js +14 -0
  649. package/src/lib/design/system/sketch/merge-worker.js.map +1 -0
  650. package/src/lib/design/system/sketch/merge.d.ts +19 -5
  651. package/src/lib/design/system/sketch/merge.js +245 -82
  652. package/src/lib/design/system/sketch/merge.js.map +1 -1
  653. package/src/lib/design/system/sketch/merged-layout.d.ts +17 -0
  654. package/src/lib/design/system/sketch/merged-layout.js +57 -0
  655. package/src/lib/design/system/sketch/merged-layout.js.map +1 -0
  656. package/src/lib/design/system/sketch/merged-parts.d.ts +31 -30
  657. package/src/lib/design/system/sketch/merged-parts.js +99 -84
  658. package/src/lib/design/system/sketch/merged-parts.js.map +1 -1
  659. package/src/lib/design/system/sketch/no-visible-change.d.ts +10 -0
  660. package/src/lib/design/system/sketch/no-visible-change.js +16 -6
  661. package/src/lib/design/system/sketch/no-visible-change.js.map +1 -1
  662. package/src/lib/design/system/sketch/note-language.d.ts +7 -0
  663. package/src/lib/design/system/sketch/note-language.js +83 -0
  664. package/src/lib/design/system/sketch/note-language.js.map +1 -0
  665. package/src/lib/design/system/sketch/part-definition.d.ts +27 -1
  666. package/src/lib/design/system/sketch/part-definition.js +109 -17
  667. package/src/lib/design/system/sketch/part-definition.js.map +1 -1
  668. package/src/lib/design/system/sketch/rebase-port.d.ts +24 -0
  669. package/src/lib/design/system/sketch/rebase-port.js +215 -0
  670. package/src/lib/design/system/sketch/rebase-port.js.map +1 -0
  671. package/src/lib/design/system/sketch/sample-mark-drift.d.ts +33 -0
  672. package/src/lib/design/system/sketch/sample-mark-drift.js +88 -0
  673. package/src/lib/design/system/sketch/sample-mark-drift.js.map +1 -0
  674. package/src/lib/design/system/sketch/sketch-check-cache.d.ts +11 -0
  675. package/src/lib/design/system/sketch/sketch-check-cache.js +22 -0
  676. package/src/lib/design/system/sketch/sketch-check-cache.js.map +1 -0
  677. package/src/lib/design/system/sketch/sketch-check-worker.d.ts +1 -0
  678. package/src/lib/design/system/sketch/sketch-check-worker.js +32 -0
  679. package/src/lib/design/system/sketch/sketch-check-worker.js.map +1 -0
  680. package/src/lib/design/system/sketch/sketch-checker.d.ts +40 -0
  681. package/src/lib/design/system/sketch/sketch-checker.js +109 -0
  682. package/src/lib/design/system/sketch/sketch-checker.js.map +1 -0
  683. package/src/lib/design/system/sketch/sketch.d.ts +100 -8
  684. package/src/lib/design/system/sketch/sketch.js +279 -36
  685. package/src/lib/design/system/sketch/sketch.js.map +1 -1
  686. package/src/lib/design/system/sketch/stale-base.d.ts +22 -0
  687. package/src/lib/design/system/sketch/stale-base.js +56 -0
  688. package/src/lib/design/system/sketch/stale-base.js.map +1 -0
  689. package/src/lib/design/system/sketch/unchanged-states.d.ts +39 -3
  690. package/src/lib/design/system/sketch/unchanged-states.js +75 -23
  691. package/src/lib/design/system/sketch/unchanged-states.js.map +1 -1
  692. package/src/lib/design/system/sketch/unused-closure.js +16 -4
  693. package/src/lib/design/system/sketch/unused-closure.js.map +1 -1
  694. package/src/lib/design/system/sketch/viewed-shots.d.ts +32 -0
  695. package/src/lib/design/system/sketch/viewed-shots.js +54 -0
  696. package/src/lib/design/system/sketch/viewed-shots.js.map +1 -0
  697. package/src/lib/design/system/skip-classes.d.ts +3 -0
  698. package/src/lib/design/system/skip-classes.js +17 -0
  699. package/src/lib/design/system/skip-classes.js.map +1 -0
  700. package/src/lib/design/system/slot-hosts.d.ts +38 -0
  701. package/src/lib/design/system/slot-hosts.js +93 -0
  702. package/src/lib/design/system/slot-hosts.js.map +1 -0
  703. package/src/lib/design/system/slow-checks.d.ts +44 -0
  704. package/src/lib/design/system/slow-checks.js +250 -0
  705. package/src/lib/design/system/slow-checks.js.map +1 -0
  706. package/src/lib/design/system/slow-run.d.ts +67 -0
  707. package/src/lib/design/system/slow-run.js +312 -0
  708. package/src/lib/design/system/slow-run.js.map +1 -0
  709. package/src/lib/design/system/stale-design-mocks.d.ts +20 -0
  710. package/src/lib/design/system/stale-design-mocks.js +59 -0
  711. package/src/lib/design/system/stale-design-mocks.js.map +1 -0
  712. package/src/lib/design/system/stale-dist.d.ts +61 -0
  713. package/src/lib/design/system/stale-dist.js +141 -0
  714. package/src/lib/design/system/stale-dist.js.map +1 -0
  715. package/src/lib/design/system/stale-parts.d.ts +45 -0
  716. package/src/lib/design/system/stale-parts.js +168 -0
  717. package/src/lib/design/system/stale-parts.js.map +1 -0
  718. package/src/lib/design/system/surface-nesting.d.ts +11 -0
  719. package/src/lib/design/system/surface-nesting.js +86 -0
  720. package/src/lib/design/system/surface-nesting.js.map +1 -0
  721. package/src/lib/design/system/system-command.js +11 -9
  722. package/src/lib/design/system/system-command.js.map +1 -1
  723. package/src/lib/design/system/system-modules.d.ts +17 -2
  724. package/src/lib/design/system/system-modules.js +18 -2
  725. package/src/lib/design/system/system-modules.js.map +1 -1
  726. package/src/lib/design/system/system-tsconfig.d.ts +9 -2
  727. package/src/lib/design/system/system-tsconfig.js +73 -13
  728. package/src/lib/design/system/system-tsconfig.js.map +1 -1
  729. package/src/lib/design/system/task-command.d.ts +52 -0
  730. package/src/lib/design/system/task-command.js +271 -0
  731. package/src/lib/design/system/task-command.js.map +1 -0
  732. package/src/lib/design/system/theming-text.d.ts +2 -0
  733. package/src/lib/design/system/theming-text.js +6 -0
  734. package/src/lib/design/system/theming-text.js.map +1 -0
  735. package/src/lib/design/system/touched-parts.d.ts +16 -0
  736. package/src/lib/design/system/touched-parts.js +121 -0
  737. package/src/lib/design/system/touched-parts.js.map +1 -0
  738. package/src/lib/design/system/tracked-reads.d.ts +27 -0
  739. package/src/lib/design/system/tracked-reads.js +100 -0
  740. package/src/lib/design/system/tracked-reads.js.map +1 -0
  741. package/src/lib/design/system/ts-source.d.ts +2 -0
  742. package/src/lib/design/system/ts-source.js +15 -1
  743. package/src/lib/design/system/ts-source.js.map +1 -1
  744. package/src/lib/design/system/unchanged-rows.d.ts +24 -0
  745. package/src/lib/design/system/unchanged-rows.js +212 -0
  746. package/src/lib/design/system/unchanged-rows.js.map +1 -0
  747. package/src/lib/design/system/uncommitted-decisions.d.ts +4 -0
  748. package/src/lib/design/system/uncommitted-decisions.js +35 -0
  749. package/src/lib/design/system/uncommitted-decisions.js.map +1 -0
  750. package/src/lib/design/system/uncovered-regions.d.ts +61 -0
  751. package/src/lib/design/system/uncovered-regions.js +171 -0
  752. package/src/lib/design/system/uncovered-regions.js.map +1 -0
  753. package/src/lib/design/system/unused-base-parts.d.ts +7 -0
  754. package/src/lib/design/system/unused-base-parts.js +76 -0
  755. package/src/lib/design/system/unused-base-parts.js.map +1 -0
  756. package/src/lib/design/system/visible-change-command.d.ts +60 -0
  757. package/src/lib/design/system/visible-change-command.js +310 -0
  758. package/src/lib/design/system/visible-change-command.js.map +1 -0
  759. package/src/lib/design/system/visible-change-parts.d.ts +28 -0
  760. package/src/lib/design/system/visible-change-parts.js +96 -0
  761. package/src/lib/design/system/visible-change-parts.js.map +1 -0
  762. package/src/lib/design/system/visible-change.d.ts +82 -0
  763. package/src/lib/design/system/visible-change.js +149 -0
  764. package/src/lib/design/system/visible-change.js.map +1 -0
  765. package/src/lib/design/system/write-origin.d.ts +12 -0
  766. package/src/lib/design/system/write-origin.js +18 -0
  767. package/src/lib/design/system/write-origin.js.map +1 -0
  768. package/src/lib/design/system-use.js +4 -4
  769. package/src/lib/design/system-use.js.map +1 -1
  770. package/src/lib/design/thumb.d.ts +37 -4
  771. package/src/lib/design/thumb.js +118 -21
  772. package/src/lib/design/thumb.js.map +1 -1
  773. package/src/lib/design/timings-command.d.ts +22 -0
  774. package/src/lib/design/timings-command.js +175 -0
  775. package/src/lib/design/timings-command.js.map +1 -0
  776. package/src/lib/design/timings.d.ts +117 -0
  777. package/src/lib/design/timings.js +296 -0
  778. package/src/lib/design/timings.js.map +1 -0
  779. package/src/lib/design/typecheck.d.ts +1 -1
  780. package/src/lib/design/typecheck.js +5 -5
  781. package/src/lib/design/typecheck.js.map +1 -1
  782. package/src/lib/design/unstable-cells.d.ts +23 -0
  783. package/src/lib/design/unstable-cells.js +40 -0
  784. package/src/lib/design/unstable-cells.js.map +1 -0
  785. package/src/lib/design/variant-diff.js +1 -1
  786. package/src/lib/design/variant-diff.js.map +1 -1
  787. package/src/lib/design/vite-cache.d.ts +11 -0
  788. package/src/lib/design/vite-cache.js +61 -0
  789. package/src/lib/design/vite-cache.js.map +1 -0
  790. package/src/lib/design/wait.d.ts +15 -0
  791. package/src/lib/design/wait.js +30 -0
  792. package/src/lib/design/wait.js.map +1 -0
  793. package/src/lib/design/warm-draw.d.ts +33 -0
  794. package/src/lib/design/warm-draw.js +74 -0
  795. package/src/lib/design/warm-draw.js.map +1 -0
  796. package/src/lib/design/warm-pages.d.ts +10 -2
  797. package/src/lib/design/warm-pages.js +6 -2
  798. package/src/lib/design/warm-pages.js.map +1 -1
  799. package/src/lib/design/work-root.d.ts +2 -0
  800. package/src/lib/design/work-root.js +8 -0
  801. package/src/lib/design/work-root.js.map +1 -0
  802. package/src/lib/json-file.d.ts +11 -0
  803. package/src/lib/json-file.js +21 -0
  804. package/src/lib/json-file.js.map +1 -0
  805. package/src/lib/plain-output.d.ts +27 -0
  806. package/src/lib/plain-output.js +66 -0
  807. package/src/lib/plain-output.js.map +1 -0
  808. package/src/lib/release.js +11 -3
  809. package/src/lib/release.js.map +1 -1
  810. package/src/lib/source-hash.d.ts +7 -0
  811. package/src/lib/source-hash.js +62 -0
  812. package/src/lib/source-hash.js.map +1 -0
  813. package/src/lib/update/agent-setup.js +2 -1
  814. package/src/lib/update/agent-setup.js.map +1 -1
  815. package/src/lib/update/commits.js +2 -2
  816. package/src/lib/update/commits.js.map +1 -1
  817. package/src/lib/update/migration-manifest.d.ts +12 -0
  818. package/src/lib/update/migration-manifest.js +13 -0
  819. package/src/lib/update/migration-manifest.js.map +1 -1
  820. package/src/lib/update/migration-record.js +2 -1
  821. package/src/lib/update/migration-record.js.map +1 -1
  822. package/src/lib/update/packages.js +4 -2
  823. package/src/lib/update/packages.js.map +1 -1
  824. package/src/lib/update/pending.js +2 -1
  825. package/src/lib/update/pending.js.map +1 -1
  826. package/src/lib/update/run-migrations.d.ts +3 -2
  827. package/src/lib/update/run-migrations.js +38 -5
  828. package/src/lib/update/run-migrations.js.map +1 -1
  829. package/src/lib/update/scan.js +8 -2
  830. package/src/lib/update/scan.js.map +1 -1
  831. package/src/lib/update/tasks.js +2 -1
  832. package/src/lib/update/tasks.js.map +1 -1
  833. package/src/lib/design/paths.js +0 -138
  834. package/src/lib/design/paths.js.map +0 -1
  835. package/src/lib/design/system/accept-command.d.ts +0 -7
  836. package/src/lib/design/system/accept-command.js +0 -55
  837. package/src/lib/design/system/accept-command.js.map +0 -1
@@ -20,61 +20,93 @@ var __rest = (this && this.__rest) || function (s, e) {
20
20
  return t;
21
21
  };
22
22
  Object.defineProperty(exports, "__esModule", { value: true });
23
- exports.designSketch = exports.verdictLinesOf = exports.sketchFlagHelpOf = exports.SKETCH_USAGE = void 0;
23
+ exports.designSketch = exports.verdictLinesOf = exports.beforeLinesOf = exports.retriedHeldMerges = exports.sketchFlagHelpOf = exports.SKETCH_USAGE = void 0;
24
24
  const unused_closure_1 = require("./system/sketch/unused-closure");
25
+ const crypto_1 = require("crypto");
26
+ const fs_1 = require("fs");
27
+ const os_1 = require("os");
25
28
  const path_1 = require("path");
29
+ const phase_timing_1 = require("./phase-timing");
30
+ const write_origin_1 = require("./system/write-origin");
26
31
  const assets_1 = require("./system/assets");
27
32
  const comment_1 = require("./system/comments/comment");
28
33
  const product_1 = require("./system/product");
29
34
  const resolve_product_1 = require("./system/resolve-product");
30
35
  const check_format_1 = require("./system/sketch/check-format");
36
+ const frame_budget_1 = require("./system/sketch/frame-budget");
37
+ const note_language_1 = require("./system/sketch/note-language");
31
38
  const check_sketches_1 = require("./system/sketch/check-sketches");
32
39
  const cli_args_1 = require("./system/sketch/cli-args");
33
40
  const ready_shots_1 = require("./ready-shots");
41
+ const no_visible_change_1 = require("./system/sketch/no-visible-change");
42
+ const covered_diffs_1 = require("./system/sketch/covered-diffs");
43
+ const viewed_shots_1 = require("./system/sketch/viewed-shots");
44
+ const complete_1 = require("./system/complete");
34
45
  const merge_1 = require("./system/sketch/merge");
46
+ const merge_step_1 = require("./system/sketch/merge-step");
47
+ const check_system_1 = require("./system/check-system");
48
+ const stale_base_1 = require("./system/sketch/stale-base");
49
+ const invocation_1 = require("../invocation");
35
50
  const merged_parts_1 = require("./system/sketch/merged-parts");
51
+ const no_verdict_1 = require("./system/no-verdict");
36
52
  const render_check_1 = require("./system/render-check");
37
53
  const merge_preview_1 = require("./system/sketch/merge-preview");
38
54
  const open_points_1 = require("./system/open-points");
39
55
  const read_open_points_1 = require("./system/read-open-points");
40
56
  const overlay_1 = require("./system/sketch/overlay");
57
+ const system_modules_1 = require("./system/system-modules");
58
+ const unchanged_states_1 = require("./system/sketch/unchanged-states");
59
+ const rebase_port_1 = require("./system/sketch/rebase-port");
60
+ const theming_text_1 = require("./system/theming-text");
61
+ const warm_draw_1 = require("./warm-draw");
41
62
  const sketch_1 = require("./system/sketch/sketch");
63
+ const plain_output_1 = require("../plain-output");
64
+ const design_lint_1 = require("./design-lint");
42
65
  exports.SKETCH_USAGE = [
43
- 'sketch new <layer>/<name> [<layer>/<name>…] --variants a,b --by <model id> [--like <layer>/<name>[:<variant>]] [--round <title>] [--note <text>] [--variant-note <variant>=<text>]… [--override | --into-base] [--product <name>]',
66
+ 'sketch new <layer>/<name> [<layer>/<name>…] --variants a,b --by <model id> [--like <layer>/<name>[:<variant>]] [--name <sketch name>] [--round <title>] [--note <text>] [--variant-note <variant>=<text>]… [--override | --into-base] [--ready] [--product <name>]',
44
67
  'sketch variant <layer>/<name> <variant>[,<variant>…] --from <variant> --by <model id> [--round <title> --note <why the running round lost> [--round-note <what the new round shows>]] [--product <name>]',
45
68
  'sketch round <layer>/<name> <round> [--title <text>] [--note <text>] [--drops <state,state>] --by <model id> [--product <name>]',
46
- 'sketch note <layer>/<name> <variant> <text> --by <model id> [--product <name>]',
69
+ 'sketch covers <layer>/<name> [[<layer>/<name>:]<state>[@<x>,<y>,<w>,<h>]…] --by <model id> [--product <name>]',
70
+ 'sketch note <layer>/<name> [<variant>] <text> [--round <round>] --by <model id> [--product <name>]',
47
71
  'sketch target add <layer>/<name> <layer>/<name> --by <model id> [--product <name>]',
72
+ 'sketch target remove <layer>/<name> <layer>/<name> --by <model id> [--product <name>]',
48
73
  'sketch list [--product <name>] [--json]',
49
- 'sketch report <layer>/<name> --variant <key> --by <model id> (<text> | --done) [--product <name>]',
74
+ 'sketch report <layer>/<name> --variant <key> --by <model id> (<text> | --done) [--reopen] [--product <name>]',
50
75
  'sketch ready <layer>/<name> --by <model id> [--product <name>]',
51
76
  'sketch hold <layer>/<name> --until <what the change waits on> --by <model id> [--product <name>]',
52
77
  'sketch release <layer>/<name> --by <model id> [--product <name>]',
53
78
  'sketch check [<layer>/<name>] [--fix] [--product <name>]',
54
79
  'sketch preview <layer>/<name> <variant> [--product <name>] [--json]',
55
- 'sketch rebase <layer>/<name> --by <model id> [--product <name>]',
56
- 'sketch merge <layer>/<name> [--note <reason>] [--variant <key> --allowed-by <plan ref>] --by <model id> [--product <name>]',
80
+ 'sketch rebase <layer>/<name> [--ported] --by <model id> [--product <name>]',
81
+ 'sketch merge <layer>/<name> [--note <reason> [--replace-note]] [--variant <key> --allowed-by <plan ref>] [--decided-by <name>] --by <model id> [--product <name>]',
57
82
  'sketch discard <layer>/<name> --by <model id> [--product <name>]',
58
83
  'sketch reject <layer>/<name> --variant <key> [--reason <text>] --by <model id | designer> [--product <name>]',
59
84
  'sketch reopen <layer>/<name> --variant <key> [--reason <text>] --by <model id | designer> [--product <name>]',
85
+ 'sketch withdraw <layer>/<name> --variant <key> --by <model id> [--product <name>]',
60
86
  ];
61
87
  const FLAG_HELP = {
62
88
  '--variants': 'the variant folders to open, a comma list: a,b,c',
63
89
  '--variant-note': "the note of one variant, kept in sketch.json apart from the part's merged note; repeat it per variant: a=<text>",
64
90
  '--by': 'the exact model id the coordinator gave you, e.g. claude-opus-5-5',
91
+ '--name': 'a second sketch on a part that has one: it lives in its own folder and is addressed as <layer>/<name>@<sketch name>',
65
92
  '--like': 'start each variant from another part, or from a variant of the open sketch on it',
66
93
  '--override': 'on a base part: merge into a product copy that overrides the base, not into the base; on a product override: sketch that copy',
67
94
  '--into-base': 'on a part the product overrides: start from the product copy, merge into the base and remove the copy',
68
- '--round': 'the title of a new round',
95
+ '--ready': 'on new: run sketch ready (its gates are the check) right after opening the sketch; it fails when either refuses and the sketch stays in progress',
96
+ '--ported': 'on rebase: the conflicting files hold the product change already, ported by hand - keep them and rebase',
97
+ '--round': 'the title of a new round; on note: the key of the round whose note to rewrite',
69
98
  '--round-note': 'what the new round shows',
70
99
  '--from': 'the variant to copy',
71
100
  '--title': 'the new title of the round',
72
101
  '--drops': 'the states the round drops on purpose, a comma list',
73
102
  '--variant': 'the variant the command is about; on merge, the only live variant of a sketch with no pick',
74
- '--allowed-by': 'the plan entry that lets the merge go without a pick in Studio; logged in accepted.json, needs --variant',
103
+ '--allowed-by': 'the plan entry that lets the merge go without a pick in Studio; noted in merged.json, needs --variant',
104
+ '--decided-by': 'on merge: who picked the variant, as merged.json records it (default user); a name the designer gave you at this terminal, e.g. tom - not with --allowed-by',
105
+ '--replace-note': "on merge: also write --note over each target part's note",
75
106
  '--reason': 'why; on reject of a variant that is rejected already it sets the reason of that rejection; stored with who wrote it',
76
107
  '--until': 'what the pending change waits on: an open decision, a helper still to land',
77
108
  '--done': 'end the live report of the variant',
109
+ '--reopen': 'on report: move a ready sketch back to in progress',
78
110
  '--product': 'the product; needed only when config.json declares more than one and no other product has the sketch',
79
111
  '--json': 'print JSON',
80
112
  '--fix': "write the variants in the checkout's Prettier format first",
@@ -84,7 +116,7 @@ const NOTE_HELP = {
84
116
  new: 'what the first round shows',
85
117
  variant: 'why the running round lost; needed with --round',
86
118
  round: 'what the round shows',
87
- merge: 'why this variant',
119
+ merge: "why this variant; noted in merged.json, the part's note stays",
88
120
  };
89
121
  /** One line per flag the usage line names, for `sketch <command> --help`. */
90
122
  const sketchFlagHelpOf = (usage) => {
@@ -94,13 +126,14 @@ const sketchFlagHelpOf = (usage) => {
94
126
  return [...new Set((_b = usage.match(/--[a-z-]+/gu)) !== null && _b !== void 0 ? _b : [])].flatMap((flag) => help[flag] === undefined ? [] : [` ${flag.padEnd(16)}${help[flag]}`]);
95
127
  };
96
128
  exports.sketchFlagHelpOf = sketchFlagHelpOf;
97
- const VERDICTS = new Set(['reject', 'reopen']);
129
+ const VERDICTS = new Set(['reject', 'reopen', 'withdraw']);
98
130
  const WRITES = new Set([
99
131
  'new',
100
132
  'target',
101
133
  'variant',
102
134
  'round',
103
135
  'note',
136
+ 'covers',
104
137
  'report',
105
138
  'ready',
106
139
  'hold',
@@ -110,6 +143,11 @@ const WRITES = new Set([
110
143
  'discard',
111
144
  ...VERDICTS,
112
145
  ]);
146
+ const RETRIES = new Set([...WRITES, 'check']);
147
+ const staleBasesOf = (context, options) => {
148
+ var _a;
149
+ return (0, check_system_1.staleSketchBasesOf)(Object.assign(Object.assign({}, options), { invocation: (_a = context.invocation) !== null && _a !== void 0 ? _a : (0, invocation_1.repoInvocation)({ root: context.target, subcommand: 'design' }) }));
150
+ };
113
151
  const fail = (message) => {
114
152
  console.error(message);
115
153
  return 1;
@@ -168,7 +206,7 @@ const variantLineOf = (options) => {
168
206
  const files = sketch.targets.map((part) => partFileOf(Object.assign(Object.assign({}, options), { part }))).join(', ');
169
207
  return ` ${variant}: ${files} assets: ${(0, path_1.relative)(root, (0, path_1.resolve)(sketch.dir, variant, assets_1.ASSETS_FOLDER))}/`;
170
208
  };
171
- const created = (context) => {
209
+ const opened = (context) => {
172
210
  var _a, _b, _c, _d, _e;
173
211
  const { target, config, args } = context;
174
212
  const product = (0, cli_args_1.oneProductOf)({ target, config, asked: args.values['--product'] });
@@ -180,6 +218,10 @@ const created = (context) => {
180
218
  return fail(unknown);
181
219
  if (parsed === undefined || typeof parsed === 'string')
182
220
  return fail((_a = exports.SKETCH_USAGE[0]) !== null && _a !== void 0 ? _a : '');
221
+ const name = args.values['--name'];
222
+ const named = name === undefined ? parsed : (0, sketch_1.parseTarget)(`${parsed.layer}/${parsed.name}@${name}`);
223
+ if (typeof named === 'string')
224
+ return fail(named);
183
225
  const variants = ((_b = args.values['--variants']) !== null && _b !== void 0 ? _b : '').split(',').filter((variant) => variant !== '');
184
226
  const notes = variantNotesOf((_c = args.repeated['--variant-note']) !== null && _c !== void 0 ? _c : [], variants);
185
227
  if (typeof notes === 'string')
@@ -196,7 +238,7 @@ const created = (context) => {
196
238
  return fail('pass --override or --into-base, not both');
197
239
  const sketch = (0, sketch_1.createSketch)({
198
240
  product,
199
- sketch: parsed,
241
+ sketch: named,
200
242
  others: others.filter((entry) => typeof entry !== 'string'),
201
243
  variants,
202
244
  roundTitle: args.values['--round'],
@@ -217,25 +259,53 @@ const created = (context) => {
217
259
  console.log(` shared by every variant, imported as @shared/<path>; edit it here, not in a copy:`);
218
260
  shared.forEach((file) => console.log(` ${(0, path_1.relative)(target, file)}`));
219
261
  }
220
- nextStepsOf(sketch, product.name).forEach((line) => console.log(line));
262
+ nextStepsOf(sketch, product).forEach((line) => console.log(line));
221
263
  return 0;
222
264
  };
223
- const nextStepsOf = (sketch, product) => {
265
+ const created = (context) => __awaiter(void 0, void 0, void 0, function* () {
266
+ const code = opened(context);
267
+ if (code !== 0 || !context.args.flags.has('--ready'))
268
+ return code;
269
+ const found = productAndSketchOf(Object.assign(Object.assign({}, context), { args: Object.assign(Object.assign({}, context.args), { positional: [openedTargetOf(context)] }) }));
270
+ if (typeof found === 'string')
271
+ return fail(found);
272
+ const again = Object.assign(Object.assign({}, context), { args: Object.assign(Object.assign({}, context.args), { positional: [found.sketch.target] }) });
273
+ const readyCode = yield readied(again);
274
+ return readyCode === 0
275
+ ? 0
276
+ : fail(`${found.sketch.target} is still in progress: sketch ready refused - fix it, then run sketch ready`);
277
+ });
278
+ const openedTargetOf = ({ args }) => {
279
+ const [first] = args.positional;
280
+ const name = args.values['--name'];
281
+ return name === undefined ? (first !== null && first !== void 0 ? first : '') : `${first}@${name}`;
282
+ };
283
+ const noteLanguageLineOf = (product) => product.config.noteLanguage === undefined
284
+ ? []
285
+ : [
286
+ ` write every round and variant note in ${note_language_1.NOTE_LANGUAGE_NAMES[product.config.noteLanguage]}: that is the product's UI language`,
287
+ ];
288
+ const nextStepsOf = (sketch, productSource) => {
224
289
  var _a;
290
+ const product = productSource.name;
225
291
  const at = `${sketch.target} --product ${product}`;
226
292
  const first = (_a = sketch.variants[0]) !== null && _a !== void 0 ? _a : '<key>';
227
293
  const running = (0, sketch_1.runningRoundOf)(sketch);
228
294
  return [
229
295
  'Next:',
230
296
  ` sketch report ${at} --variant ${first} --by <model id> "<what you draw>" while you draw a variant`,
231
- ` sketch report ${at} --variant ${first} --by <model id> --done when you stop drawing it; no report runs yet, so none is needed now`,
232
297
  ...(running.note.trim() === ''
233
298
  ? [
234
299
  ` sketch round ${sketch.target} ${running.key} --product ${product} --note "<what the round shows>" --by <model id>`,
235
300
  ]
236
301
  : []),
237
302
  ` sketch check ${at}`,
303
+ ...noteLanguageLineOf(productSource),
304
+ ` shot ${sketch.targets[0]} --states --variants --product ${product} look at it: ready refuses a pixel diff without a viewed shot`,
238
305
  ` sketch ready ${at} --by <model id>`,
306
+ ` sketch report ${at} --variant ${first} --by <model id> --done after ready, once you stop drawing a variant; no report runs yet, so none is needed now`,
307
+ ` a shared JSON file ready wrote (merged.json): commit it with \`et design commit-hunks <file> --part ${sketch.targets[0]}\`, never as a whole file another session also edits`,
308
+ theming_text_1.THEMING_TEXT,
239
309
  ];
240
310
  };
241
311
  const variantNotesOf = (pairs, variants) => {
@@ -253,7 +323,7 @@ const VARIANT_USAGE = 'usage: sketch variant <layer>/<name> <variant>[,<variant>
253
323
  const varied = (context) => {
254
324
  var _a;
255
325
  return withSketch(Object.assign(Object.assign({}, context), { noSketchHint: ` - start one with: sketch new ${(_a = context.args.positional[0]) !== null && _a !== void 0 ? _a : '<layer>/<name>'} --variants a,b,c --round "<title>"` }), ({ sketch }) => {
256
- var _a, _b, _c, _d, _e;
326
+ var _a, _b, _c, _d, _e, _f;
257
327
  const { positional, values } = context.args;
258
328
  const variant = positional[1];
259
329
  const from = values['--from'];
@@ -300,6 +370,8 @@ const varied = (context) => {
300
370
  for (const name of variants) {
301
371
  console.log(`${added.target} in progress: variant ${name} from ${from} in round ${(_c = round === null || round === void 0 ? void 0 : round.key) !== null && _c !== void 0 ? _c : ''}`);
302
372
  console.log(variantLineOf({ root: context.target, sketch: added, variant: name }));
373
+ if (((_d = (0, sketch_1.rejectionOf)(added, from)) === null || _d === void 0 ? void 0 : _d.status) === 'withdrawn')
374
+ console.log(` ${name}: from withdrawn ${from}`);
303
375
  }
304
376
  if (title !== undefined && (round === null || round === void 0 ? void 0 : round.note) === '')
305
377
  console.log(`round ${round.key} has no note yet - sketch ready needs one: sketch round ${added.target} ${round.key} --note "<what the round shows>" --by <model id>`);
@@ -309,12 +381,12 @@ const varied = (context) => {
309
381
  sketch,
310
382
  variant: from,
311
383
  reason: 'round',
312
- author: (_d = (0, cli_args_1.authorOf)(context.args)) !== null && _d !== void 0 ? _d : undefined,
384
+ author: (_e = (0, cli_args_1.authorOf)(context.args)) !== null && _e !== void 0 ? _e : undefined,
313
385
  note: lostNote,
314
386
  round: round === null || round === void 0 ? void 0 : round.key,
315
387
  });
316
388
  if (addressed.length > 0)
317
- console.log(`addressed ${addressed.length} comment(s) on variant ${from} in round ${(_e = round === null || round === void 0 ? void 0 : round.key) !== null && _e !== void 0 ? _e : ''}: ${addressed.map(({ id }) => id).join(', ')}`);
389
+ console.log(`addressed ${addressed.length} comment(s) on variant ${from} in round ${(_f = round === null || round === void 0 ? void 0 : round.key) !== null && _f !== void 0 ? _f : ''}: ${addressed.map(({ id }) => id).join(', ')}`);
318
390
  return 0;
319
391
  });
320
392
  };
@@ -339,9 +411,10 @@ const listed = (context) => {
339
411
  ? `, picked ${sketch.decision.variant}`
340
412
  : ', discard asked'
341
413
  : '';
342
- const rejected = sketch.variants.filter((variant) => (0, sketch_1.rejectionOf)(sketch, variant));
414
+ const rejected = sketch.variants.filter((variant) => { var _a; return ((_a = (0, sketch_1.rejectionOf)(sketch, variant)) === null || _a === void 0 ? void 0 : _a.status) !== 'withdrawn' && (0, sketch_1.rejectionOf)(sketch, variant); });
415
+ const withdrawnKeys = sketch.variants.filter((variant) => { var _a; return ((_a = (0, sketch_1.rejectionOf)(sketch, variant)) === null || _a === void 0 ? void 0 : _a.status) === 'withdrawn'; });
343
416
  const extra = sketch.targets.slice(1);
344
- console.log(`${sketch.product} ${sketch.target}${extra.length > 0 ? ` (+ ${extra.join(', ')})` : ''} ${sketch.status} ${sketch.variants.join(', ')}${decided}${rejected.length > 0 ? `, rejected ${rejected.join(', ')}` : ''}${sketch.hold ? `, held until: ${sketch.hold.until}` : ''}`);
417
+ console.log(`${sketch.product} ${sketch.target}${extra.length > 0 ? ` (+ ${extra.join(', ')})` : ''} ${sketch.status} ${sketch.variants.join(', ')}${decided}${rejected.length > 0 ? `, rejected ${rejected.join(', ')}` : ''}${withdrawnKeys.length > 0 ? `, withdrawn ${withdrawnKeys.join(', ')}` : ''}${sketch.hold ? `, held until: ${sketch.hold.until}` : ''}`);
345
418
  for (const round of sketch.rounds) {
346
419
  const variants = sketch.variants.filter((variant) => { var _a; return ((_a = sketch.variantInfo[variant]) === null || _a === void 0 ? void 0 : _a.round) === round.key; });
347
420
  console.log(` ${round.key} ${round.title} ${variants.join(', ')}${round.note === '' ? '' : ` - ${round.note}`}${round.lost ? ` - lost: ${round.lost}` : ''}`);
@@ -358,13 +431,23 @@ const reported = (context) => withSketch(context, ({ sketch }) => {
358
431
  const author = (0, cli_args_1.authorOf)(context.args);
359
432
  const done = context.args.flags.has('--done');
360
433
  if ((message === '' && !done) || !variant || !author)
361
- return fail(`usage: sketch report <layer>/<name> --variant <key> --by <model id> (<text> | --done) [--product <name>] - --product is needed when config.json declares more than one product`);
434
+ return fail(`usage: sketch report <layer>/<name> --variant <key> --by <model id> (<text> | --done) [--reopen] [--product <name>] - --product is needed when config.json declares more than one product`);
362
435
  if (done) {
436
+ const notReady = roundNoteRefusalOf(sketch) === null ? roundNotReadyProblemOf(sketch) : null;
437
+ if (notReady !== null)
438
+ return fail(notReady);
363
439
  (0, sketch_1.finishSketchReport)({ checkout: context.target, sketch, variant });
364
440
  console.log(`${sketch.target} variant ${variant} marked done`);
365
441
  return 0;
366
442
  }
367
- const reported = (0, sketch_1.reportSketch)({ checkout: context.target, sketch, variant, author, message });
443
+ const reported = (0, sketch_1.reportSketch)({
444
+ checkout: context.target,
445
+ sketch,
446
+ variant,
447
+ author,
448
+ message,
449
+ reopen: context.args.flags.has('--reopen'),
450
+ });
368
451
  if (typeof reported === 'string')
369
452
  return fail(reported);
370
453
  console.log(`reported on ${sketch.target} variant ${variant}: ${message}${sketch.status === 'ready' ? ' - back in progress, mark it ready again when done' : ''}`);
@@ -391,6 +474,17 @@ const roundEdited = (context) => withSketch(context, ({ sketch }) => {
391
474
  return 0;
392
475
  });
393
476
  const noteEdited = (context) => withSketch(context, ({ sketch }) => {
477
+ const round = context.args.values['--round'];
478
+ if (round !== undefined) {
479
+ const roundNote = context.args.positional.slice(1).join(' ').trim();
480
+ if (roundNote === '')
481
+ return fail('usage: sketch note <layer>/<name> --round <round> <text> --by <model id>');
482
+ const reworded = (0, sketch_1.editRound)({ sketch, round, note: roundNote });
483
+ if (typeof reworded === 'string')
484
+ return fail(reworded);
485
+ console.log(`${reworded.target} round ${round}: ${roundNote}`);
486
+ return 0;
487
+ }
394
488
  const [, variant, ...words] = context.args.positional;
395
489
  const note = words.join(' ').trim();
396
490
  if (!variant || note === '')
@@ -401,10 +495,46 @@ const noteEdited = (context) => withSketch(context, ({ sketch }) => {
401
495
  console.log(`${edited.target} variant ${variant}: ${note}`);
402
496
  return 0;
403
497
  });
498
+ const coversEdited = (context) => withSketch(context, ({ sketch }) => {
499
+ var _a, _b;
500
+ const covers = context.args.positional.slice(1);
501
+ const partProblem = (0, covered_diffs_1.coverPartProblemOf)({ sketch, covers });
502
+ if (partProblem !== null) {
503
+ console.error(partProblem);
504
+ return 2;
505
+ }
506
+ const edited = (0, covered_diffs_1.editCovers)({ sketch, covers });
507
+ if (typeof edited === 'string')
508
+ return fail(edited);
509
+ console.log(((_a = edited.covers) !== null && _a !== void 0 ? _a : []).length === 0
510
+ ? `${edited.target} covers no compare DIFF`
511
+ : `${edited.target} covers the compare DIFFs of ${((_b = edited.covers) !== null && _b !== void 0 ? _b : []).join(', ')} while it is open (ADR 0222)`);
512
+ return 0;
513
+ });
514
+ const targetRemoved = (context) => {
515
+ const usage = `usage: ${exports.SKETCH_USAGE.find((line) => line.startsWith('sketch target remove'))}`;
516
+ const rest = context.args.positional.slice(1);
517
+ const [, part] = rest;
518
+ if (rest.length !== 2 || !part)
519
+ return fail(usage);
520
+ const parsed = (0, sketch_1.parseTarget)(part);
521
+ if (typeof parsed === 'string')
522
+ return fail(parsed);
523
+ return withSketch(Object.assign(Object.assign({}, context), { args: Object.assign(Object.assign({}, context.args), { positional: rest }) }), ({ sketch }) => {
524
+ const removed = (0, sketch_1.removeTarget)({ sketch, part: parsed });
525
+ if (typeof removed === 'string')
526
+ return fail(removed);
527
+ (0, check_format_1.formatSketch)({ target: context.target, sketch: removed, variants: removed.variants });
528
+ console.log(`${removed.target} now targets ${removed.targets.join(', ')}`);
529
+ return 0;
530
+ });
531
+ };
404
532
  const targetAdded = (context) => {
405
533
  const [action, ...rest] = context.args.positional;
406
534
  const [, part] = rest;
407
535
  const usage = `usage: ${exports.SKETCH_USAGE.find((line) => line.startsWith('sketch target '))}`;
536
+ if (action === 'remove')
537
+ return targetRemoved(context);
408
538
  if (action !== 'add' || rest.length !== 2 || !part)
409
539
  return fail(usage);
410
540
  const parsed = (0, sketch_1.parseTarget)(part);
@@ -420,6 +550,31 @@ const targetAdded = (context) => {
420
550
  return 0;
421
551
  });
422
552
  };
553
+ const readyLockOf = (sketch) => (0, path_1.resolve)((0, os_1.tmpdir)(), `et-sketch-ready-${(0, crypto_1.createHash)('sha256').update(sketch.dir).digest('hex').slice(0, 16)}.lock`);
554
+ const isRunning = (pid) => {
555
+ try {
556
+ process.kill(pid, 0);
557
+ return true;
558
+ }
559
+ catch (_a) {
560
+ return false;
561
+ }
562
+ };
563
+ const lockedReady = (sketch) => {
564
+ const lock = readyLockOf(sketch);
565
+ const holder = Number(contentOf(lock));
566
+ if (holder > 0 && isRunning(holder))
567
+ return null;
568
+ (0, fs_1.writeFileSync)(lock, String(process.pid));
569
+ return () => (0, fs_1.rmSync)(lock, { force: true });
570
+ };
571
+ const reportedReopen = (sketch) => {
572
+ const reopened = (0, sketch_1.reopenChangedReady)(sketch);
573
+ if (!reopened)
574
+ return sketch;
575
+ console.log(`${sketch.target} was ready; ${reopened.changed.join(', ')} changed since - back to in progress`);
576
+ return reopened.sketch;
577
+ };
423
578
  const readied = (context) => {
424
579
  const found = productAndSketchOf(context);
425
580
  if (typeof found === 'string')
@@ -427,39 +582,122 @@ const readied = (context) => {
427
582
  const hold = (0, sketch_1.heldProblemOf)(found.sketch);
428
583
  if (hold !== null)
429
584
  return fail(hold);
430
- const refused = readyRefusalOf(context, found);
585
+ const reopened = reportedReopen(found.sketch);
586
+ const current = { product: found.product, sketch: reopened };
587
+ const refused = (0, phase_timing_1.timedPhase)('gates', () => readyRefusalOf(context, current));
431
588
  if (refused !== null)
432
589
  return refused;
433
- return renderedAndReady(context, found);
590
+ const unlinted = (0, phase_timing_1.timedPhase)('lint', () => (0, design_lint_1.lintGateLinesOf)({
591
+ target: context.target,
592
+ productDir: current.product.dir,
593
+ files: (0, design_lint_1.variantLintFilesOf)(reopened, reopened.variants.filter((variant) => !(0, sketch_1.rejectionOf)(reopened, variant))),
594
+ }));
595
+ if (unlinted.length > 0)
596
+ return fail(`${unlinted.join('\n')}\n${reopened.target} adds lint warnings - fix them before ready`);
597
+ const unlock = lockedReady(reopened);
598
+ if (!unlock)
599
+ return fail(`another sketch ready run on ${reopened.target} is going - wait for it`);
600
+ const run = context.warm
601
+ ? { warm: Object.assign(Object.assign({}, context.warm), { perRun: true }), close: () => __awaiter(void 0, void 0, void 0, function* () { return undefined; }) }
602
+ : (0, warm_draw_1.createRunDraw)(context.target);
603
+ return renderedAndReady(Object.assign(Object.assign({}, context), { warm: run.warm }), current).finally(() => __awaiter(void 0, void 0, void 0, function* () {
604
+ unlock();
605
+ yield run.close();
606
+ }));
434
607
  };
435
608
  const renderedAndReady = (context, found) => __awaiter(void 0, void 0, void 0, function* () {
609
+ var _a;
436
610
  const { product, sketch } = found;
437
- const rendered = yield renderedVariantsOf({
611
+ const rendered = yield (0, phase_timing_1.timedPhase)('render-check', () => renderedVariantsOf({
438
612
  target: context.target,
439
613
  config: context.config,
440
614
  product,
441
- entries: sketch.variants.map((variant) => ({ sketch, variant })),
615
+ entries: sketch.variants
616
+ .filter((variant) => !(0, sketch_1.rejectionOf)(sketch, variant))
617
+ .map((variant) => ({ sketch, variant })),
442
618
  drawn: false,
443
- });
619
+ warm: context.warm,
620
+ }));
621
+ if ('issues' in rendered && rendered.noVerdict)
622
+ return 1;
444
623
  if ('issues' in rendered && rendered.issues.length > 0)
445
624
  return fail(`${sketch.target} has problems - fix them before ready`);
625
+ const busyAdded = 'issues' in rendered ? openPointLinesOf({ product, sketch, busy: (_a = rendered.busy) !== null && _a !== void 0 ? _a : [] }).added : [];
626
+ if (busyAdded.length > 0)
627
+ return fail(`${busyAdded.join('\n')}\n${sketch.target} adds open points - close them before ready`);
446
628
  return loadedAndReady(context, found);
447
629
  });
448
630
  const loadedAndReady = (context_1, _a) => __awaiter(void 0, [context_1, _a], void 0, function* (context, { product, sketch }) {
449
- var _b;
450
- const unloaded = yield (0, ready_shots_1.variantsThatDoNotLoad)({ target: context.target, config: context.config, product, sketch });
631
+ var _b, _c;
632
+ const unloaded = yield (0, phase_timing_1.timedPhase)('load', () => unloadedLinesOf({ target: context.target, config: context.config, product, sketch, warm: context.warm }));
451
633
  if (unloaded.length > 0)
452
- return fail(`${unloaded.map((line) => `${sketch.target} ${line}`).join('\n')}\n${sketch.target} does not load - fix it before ready`);
634
+ return fail(`${unloaded.join('\n')}\n${sketch.target} does not load - fix it before ready`);
635
+ const drifts = yield (0, phase_timing_1.timedPhase)('mark-drift', () => (0, ready_shots_1.sampleMarkDriftLines)({ target: context.target, config: context.config, product, sketch, warm: context.warm }));
636
+ if (drifts.length > 0)
637
+ return fail(`${drifts.join('\n')}\n${sketch.target} draws one sample with different marks - align them before ready`);
638
+ const identical = yield (0, phase_timing_1.timedPhase)('identical', () => (0, ready_shots_1.identicalRenderLines)({ target: context.target, config: context.config, product, sketch, warm: context.warm }));
639
+ if (identical.length > 0)
640
+ return fail(`${identical.join('\n')}\n${sketch.target} draws variants alike - fix them before ready`);
641
+ const undeclared = yield (0, phase_timing_1.timedPhase)('undeclared', () => undeclaredLinesOf({ target: context.target, config: context.config, product, sketch, warm: context.warm }));
642
+ if (typeof undeclared === 'string')
643
+ return fail(undeclared);
644
+ if (undeclared.length > 0)
645
+ return fail(`${undeclared.join('\n')}\n${sketch.target} draws controls no controls entry declares - declare them before ready`);
646
+ const changes = sketch.targets.every((key) => product.parts.some((part) => (0, resolve_product_1.partKeyOf)(part) === key))
647
+ ? yield (0, phase_timing_1.timedPhase)('changes-shot', () => (0, ready_shots_1.variantChangesShown)({ target: context.target, config: context.config, product, sketch, warm: context.warm }))
648
+ : null;
649
+ const unviewed = Array.isArray(changes)
650
+ ? (0, viewed_shots_1.unviewedShotLinesOf)({
651
+ target: context.target,
652
+ invocation: (_b = context.invocation) !== null && _b !== void 0 ? _b : (0, invocation_1.repoInvocation)({ root: context.target, subcommand: 'design' }),
653
+ sketch,
654
+ changes,
655
+ })
656
+ : [];
657
+ if (unviewed.length > 0)
658
+ return fail(`${unviewed.join('\n')}\n${sketch.target} draws a pixel diff - view its shot before ready`);
659
+ if (!(0, fs_1.existsSync)((0, path_1.resolve)(sketch.dir, sketch_1.SKETCH_FILE)))
660
+ return fail(`${sketch.target} is gone: another run merged or discarded it while this one checked it`);
453
661
  const ready = sketch.status === 'ready'
454
662
  ? sketch
455
- : (0, sketch_1.markSketchReady)({ checkout: context.target, sketch, author: (_b = (0, cli_args_1.authorOf)(context.args)) !== null && _b !== void 0 ? _b : undefined });
663
+ : (0, sketch_1.markSketchReady)({ checkout: context.target, sketch, author: (_c = (0, cli_args_1.authorOf)(context.args)) !== null && _c !== void 0 ? _c : undefined });
456
664
  if (typeof ready === 'string')
457
665
  return fail(ready);
458
- return autoMerged({ context, product, sketch: ready, again: sketch.status === 'ready' });
666
+ return (0, phase_timing_1.timedPhase)('auto-merge', () => autoMerged({ context, product, sketch: ready, again: sketch.status === 'ready', changes }));
459
667
  });
460
- const autoMerged = (options) => __awaiter(void 0, void 0, void 0, function* () {
461
- var _a, _b;
462
- const { context, product, sketch, again } = options;
668
+ const stillReady = (options) => {
669
+ (0, sketch_1.writeSketchFile)(Object.assign(Object.assign({}, options.sketch), { mergeHold: { reason: options.reason, at: new Date().toISOString() } }));
670
+ if (options.again)
671
+ console.log(`${options.sketch.target} is still ready`);
672
+ return 0;
673
+ };
674
+ const gitIn = (target, ...args) => (0, plain_output_1.spawnPlain)(['git', ...args], { cwd: target });
675
+ const mergeDirsOf = (product) => [product.dir, ...(product.base ? [product.base.dir] : [])];
676
+ const cleanBesideSketch = (options) => {
677
+ const status = gitIn(options.target, 'status', '--porcelain', '-z', '--untracked-files=all', '--', ...mergeDirsOf(options.product));
678
+ const root = gitIn(options.target, 'rev-parse', '--show-toplevel');
679
+ if (status.status !== 0 || root.status !== 0)
680
+ return false;
681
+ const top = root.stdout.trim();
682
+ const sketchDir = (0, fs_1.realpathSync)(options.sketch.dir);
683
+ return status.stdout
684
+ .split('\0')
685
+ .filter((entry) => /^.. /.test(entry))
686
+ .every((entry) => (0, path_1.resolve)(top, entry.slice(3)).startsWith(`${sketchDir}/`));
687
+ };
688
+ const committedMerge = (options) => {
689
+ const dirs = mergeDirsOf(options.product);
690
+ const added = gitIn(options.target, 'add', '--all', '--', ...dirs);
691
+ const committed = added.status === 0
692
+ ? gitIn(options.target, 'commit', '-m', `feat(repo): Merge ${options.sketch.target}, no visible change`, '--', ...dirs)
693
+ : added;
694
+ if (committed.status !== 0)
695
+ console.warn(`Could not commit the merge: ${(committed.stderr || committed.stdout).trim()}`);
696
+ return committed.status === 0;
697
+ };
698
+ const autoMerged = (options) => {
699
+ var _a;
700
+ const { context, product, sketch, again, changes } = options;
463
701
  if (!again)
464
702
  console.log(`${sketch.target} is ready`);
465
703
  for (const variant of sketch.variants.filter((candidate) => !(0, sketch_1.rejectionOf)(sketch, candidate))) {
@@ -467,70 +705,191 @@ const autoMerged = (options) => __awaiter(void 0, void 0, void 0, function* () {
467
705
  if (shared.length > 0)
468
706
  console.log(`variant ${variant}: a shared/ edit reaches ${shared.join(', ')}`);
469
707
  }
470
- if (!sketch.targets.every((key) => product.parts.some((part) => (0, resolve_product_1.partKeyOf)(part) === key))) {
471
- console.log('auto-merge skipped: new part, the user merges');
472
- return again ? fail(`${sketch.target} is ready, not in progress`) : 0;
473
- }
474
- const noChange = yield (0, ready_shots_1.shotsShowNoChange)({ target: context.target, config: context.config, product, sketch });
708
+ const noChange = changes === null ? 'new part, the user merges' : typeof changes === 'string' ? changes : (0, no_visible_change_1.noChangeOf)(changes);
475
709
  if (noChange !== true) {
476
710
  console.log(`auto-merge skipped: ${noChange}`);
477
- return again ? fail(`${sketch.target} is ready, not in progress`) : 0;
711
+ return stillReady({ sketch, again, reason: noChange });
478
712
  }
479
- const author = (_a = (0, cli_args_1.authorOf)(context.args)) !== null && _a !== void 0 ? _a : undefined;
480
- const variant = (_b = sketch.variants.find((candidate) => !(0, sketch_1.rejectionOf)(sketch, candidate))) !== null && _b !== void 0 ? _b : '';
481
- const decided = (0, sketch_1.decideSketch)({ sketch, decision: { kind: 'pick', variant } });
713
+ return mergedUnchanged({
714
+ target: context.target,
715
+ config: context.config,
716
+ author: (_a = (0, cli_args_1.authorOf)(context.args)) !== null && _a !== void 0 ? _a : undefined,
717
+ product,
718
+ sketch,
719
+ });
720
+ };
721
+ const mergedUnchanged = (options) => {
722
+ var _a;
723
+ const { target, config, author, product, sketch } = options;
724
+ const variant = (_a = sketch.variants.find((candidate) => !(0, sketch_1.rejectionOf)(sketch, candidate))) !== null && _a !== void 0 ? _a : '';
725
+ const commit = cleanBesideSketch({ target, product, sketch });
726
+ const decided = (0, sketch_1.decideSketch)({ sketch, decision: Object.assign({ kind: 'pick', variant }, (0, write_origin_1.originOf)(author !== null && author !== void 0 ? author : '')) });
482
727
  if (typeof decided === 'string')
483
728
  return fail(decided);
484
- const result = (0, merge_1.mergeSketch)({ target: context.target, config: context.config, product, sketch: decided, author });
729
+ const written = sharedFilesOf(product);
730
+ const before = written.map((file) => contentOf(file));
731
+ const result = (0, merge_1.mergeSketch)({
732
+ target,
733
+ config,
734
+ product,
735
+ sketch: decided,
736
+ author,
737
+ decidedBy: 'auto: no visible change',
738
+ });
485
739
  if (!Array.isArray(result)) {
740
+ (0, sketch_1.writeSketchFile)(Object.assign(Object.assign({}, sketch), { mergeHold: Object.assign({ reason: result.reason, at: new Date().toISOString() }, (result.dirty ? { dirty: result.dirty } : {})) }));
486
741
  console.warn(`${sketch.target} shows no visible change but did not merge: ${result.reason}`);
487
742
  return 0;
488
743
  }
489
- for (const part of sketch.targets)
490
- (0, merged_parts_1.recordAutoMerge)({ product, part, by: author !== null && author !== void 0 ? author : 'user' });
491
744
  console.log(`No visible change in any state: merged ${sketch.targets.join(', ')} automatically.`);
745
+ if (commit && committedMerge({ target, product, sketch })) {
746
+ console.log(`Committed: feat(repo): Merge ${sketch.target}, no visible change`);
747
+ return 0;
748
+ }
749
+ commitHunksLines({
750
+ target,
751
+ files: written.filter((file, index) => contentOf(file) !== before[index]),
752
+ parts: sketch.targets,
753
+ }).forEach((line) => console.log(line));
492
754
  return 0;
755
+ };
756
+ const stillDirtyOf = (options) => {
757
+ const status = gitIn(options.target, 'status', '--porcelain', '--untracked-files=all', '--', ...options.dirty);
758
+ return status.status !== 0 || status.stdout.trim() !== '';
759
+ };
760
+ /**
761
+ * Merges every ready sketch whose automatic merge uncommitted files refused, once those files are committed or
762
+ * reverted; `except` is a sketch target to leave alone.
763
+ */
764
+ const retriedHeldMerges = (options) => {
765
+ var _a;
766
+ const { target, config, author, except } = options;
767
+ for (const name of Object.keys((_a = config.products) !== null && _a !== void 0 ? _a : {})) {
768
+ const productDir = (0, product_1.productDirOf)({ target, product: name });
769
+ const held = (0, sketch_1.listSketches)({ productDir, product: name }).filter((sketch) => {
770
+ var _a;
771
+ return typeof sketch !== 'string' &&
772
+ sketch.status === 'ready' &&
773
+ !!((_a = sketch.mergeHold) === null || _a === void 0 ? void 0 : _a.dirty) &&
774
+ sketch.target !== except &&
775
+ !stillDirtyOf({ target, dirty: sketch.mergeHold.dirty });
776
+ });
777
+ if (held.length === 0)
778
+ continue;
779
+ const product = (0, cli_args_1.oneProductOf)({ target, config, asked: name });
780
+ if (typeof product === 'string')
781
+ continue;
782
+ for (const sketch of held) {
783
+ console.log(`${sketch.target}: the uncommitted edits that held its automatic merge are gone - merging it now`);
784
+ mergedUnchanged({ target, config, author, product, sketch });
785
+ }
786
+ }
787
+ };
788
+ exports.retriedHeldMerges = retriedHeldMerges;
789
+ const contentOf = (file) => ((0, fs_1.existsSync)(file) ? (0, fs_1.readFileSync)(file, 'utf8') : null);
790
+ const sharedFilesOf = (product) => [
791
+ (0, path_1.resolve)(product.dir, merged_parts_1.MERGED_FILE),
792
+ ...(product.base ? [(0, path_1.resolve)(product.base.dir, merged_parts_1.MERGED_FILE)] : []),
793
+ ];
794
+ const commitHunksLines = ({ target, files, parts }) => files.length === 0
795
+ ? []
796
+ : [
797
+ 'Shared files written; commit only the hunks of this sketch, never the whole file another session also edits:',
798
+ ...files.map((file) => ` et design commit-hunks ${(0, path_1.relative)(target, file)} ${parts.map((part) => `--part ${part}`).join(' ')}`),
799
+ ];
800
+ const noteProblemsBefore = ({ target, sketch, variant, before, }) => before.forEach((problem) => console.warn(`NOTE ${sketch.target} ${variant}: ${problem.rule} ${(0, path_1.relative)(target, problem.file)}: ${problem.message} (there before)`));
801
+ const variantGateProblemsOf = (options) => [...options.problems, ...(0, check_format_1.formatProblemsOf)(options), ...(0, unused_closure_1.unusedInVariantOf)(options)];
802
+ const busyOfVariant = (busy, sketch) => busy
803
+ .filter((entry) => { var _a; return ((_a = entry.sketch) === null || _a === void 0 ? void 0 : _a.target) === sketch.target && entry.sketch.variant === sketch.variant; })
804
+ .map(({ part, state }) => ({ part, state }));
805
+ const openPointLinesOf = ({ product, sketch, busy = [], }) => {
806
+ const pointLinesOf = (variant, list) => (0, open_points_1.openPointsText)(product.name, list)
807
+ .slice(1)
808
+ .map((line) => `${sketch.target} ${variant}: ${line.trim()}`);
809
+ const points = sketch.variants
810
+ .filter((variant) => !(0, sketch_1.rejectionOf)(sketch, variant))
811
+ .map((variant) => (Object.assign({ variant }, (0, read_open_points_1.sketchOpenPointsOf)({
812
+ merged: product,
813
+ variant: (0, overlay_1.overlaySketch)({ product, sketch, variant }),
814
+ targets: sketch.targets,
815
+ busy: { merged: [], variant: busyOfVariant(busy, { target: sketch.target, variant }) },
816
+ }))));
817
+ return {
818
+ added: points.flatMap(({ variant, added }) => pointLinesOf(variant, added)),
819
+ inherited: points.flatMap(({ variant, inherited }) => pointLinesOf(variant, inherited)),
820
+ };
821
+ };
822
+ const roundNoteRefusalOf = (sketch) => {
823
+ const running = (0, sketch_1.runningRoundOf)(sketch);
824
+ return running.note.trim() === ''
825
+ ? `${sketch.target} round ${running.key} has no note - set it with: sketch round ${sketch.target} ${running.key} --note "<what the round shows>" --by <model id>`
826
+ : null;
827
+ };
828
+ const roundNotReadyProblemOf = (sketch) => sketch.status === 'ready' || sketch.hold
829
+ ? null
830
+ : `ROUND-NOT-READY ${sketch.target}: round ${(0, sketch_1.runningRoundOf)(sketch).key} is drawn but still in progress - run \`design sketch ready ${sketch.target}\``;
831
+ const unloadedLinesOf = (options) => __awaiter(void 0, void 0, void 0, function* () { return (yield (0, ready_shots_1.variantsThatDoNotLoad)(options)).map((line) => `${options.sketch.target} ${line}`); });
832
+ const undeclaredLinesOf = (options) => __awaiter(void 0, void 0, void 0, function* () {
833
+ const { sketch } = options;
834
+ const lines = [];
835
+ for (const variant of sketch.variants.filter((name) => !(0, sketch_1.rejectionOf)(sketch, name))) {
836
+ const { changed } = (0, merge_preview_1.mergePreviewOf)({ product: options.product, sketch, variant });
837
+ const added = yield (0, complete_1.addedUndeclaredControlsOf)(Object.assign(Object.assign({}, options), { sketch: { target: sketch.target, variant }, parts: changed }));
838
+ if ('unavailable' in added)
839
+ return added.unavailable;
840
+ lines.push(...added.lines);
841
+ }
842
+ return lines;
493
843
  });
494
- const noteProblemsBefore = ({ sketch, variant, before }) => {
495
- if (before.length > 0)
496
- console.warn(`NOTE ${sketch.target} ${variant}: ${before.length} problem${before.length === 1 ? ' was' : 's were'} there before (design check lists them)`);
844
+ const baseCommitOf = (options) => {
845
+ var _a;
846
+ const { context, product, sketch } = options;
847
+ const dirs = ((_a = (0, stale_base_1.staleBaseOf)({ product, sketch })) !== null && _a !== void 0 ? _a : []).flatMap((key) => {
848
+ const part = product.parts.find((candidate) => (0, resolve_product_1.partKeyOf)(candidate) === key);
849
+ return part ? [(0, path_1.dirname)(part.file)] : [];
850
+ });
851
+ if (dirs.length === 0)
852
+ return null;
853
+ const log = (0, plain_output_1.spawnPlain)(['git', 'log', '-1', '--format=%h', '--', ...dirs], { cwd: context.target });
854
+ return log.status === 0 && log.stdout.trim() ? log.stdout.trim() : null;
497
855
  };
498
856
  const readyRefusalOf = (context, { product, sketch }) => {
499
857
  const lineOf = (variant, problem) => `${sketch.target} ${variant}: ${problem.rule} ${(0, path_1.relative)(context.target, problem.file)}: ${problem.message}`;
858
+ const stale = staleBasesOf(context, { product, targets: new Set([sketch.target]) });
859
+ if (stale.length > 0) {
860
+ const commit = baseCommitOf({ context, product, sketch });
861
+ return fail(`${stale.map((problem) => problem.line).join('\n')}\n${sketch.target} is stale${commit ? ` (base changed in ${commit})` : ''} - rebase it before ready`);
862
+ }
500
863
  const found = (0, check_sketches_1.variantProblemsOf)({ product, sketch });
501
- found.forEach(noteProblemsBefore);
502
- const problems = found.flatMap(({ variant, problems }) => [
503
- ...problems,
504
- ...(0, check_format_1.formatProblemsOf)({ target: context.target, sketch, variant }),
505
- ...((0, sketch_1.rejectionOf)(sketch, variant) ? [] : (0, unused_closure_1.unusedInVariantOf)({ product, sketch, variant })),
506
- ].map((problem) => lineOf(variant, problem)));
864
+ found.forEach((entry) => noteProblemsBefore(Object.assign({ target: context.target }, entry)));
865
+ const problems = found
866
+ .filter(({ variant }) => !(0, sketch_1.rejectionOf)(sketch, variant))
867
+ .flatMap(({ variant, problems }) => variantGateProblemsOf({ target: context.target, product, sketch, variant, problems }).map((problem) => lineOf(variant, problem)));
507
868
  sketch.variants.forEach((variant) => (0, check_sketches_1.variantWarningsOf)({ target: context.target, product, sketch, variant }).forEach((warning) => console.warn(`${sketch.target} ${variant}: ${warning}`)));
508
869
  if (problems.length > 0)
509
870
  return fail(`${problems.join('\n')}\n${sketch.target} has problems - fix them before ready`);
510
- const pointLinesOf = (variant, list) => (0, open_points_1.openPointsText)(product.name, list)
511
- .slice(1)
512
- .map((line) => `${sketch.target} ${variant}: ${line.trim()}`);
513
- const open = sketch.variants
871
+ const { added, inherited } = openPointLinesOf({ product, sketch });
872
+ inherited.forEach((line) => console.log(`NOTE ${line} (inherited from the merged part)`));
873
+ sketch.variants
514
874
  .filter((variant) => !(0, sketch_1.rejectionOf)(sketch, variant))
515
- .flatMap((variant) => {
516
- const { added, inherited } = (0, read_open_points_1.sketchOpenPointsOf)({
517
- merged: product,
518
- variant: (0, overlay_1.overlaySketch)({ product, sketch, variant }),
519
- targets: sketch.targets,
520
- });
521
- pointLinesOf(variant, inherited).forEach((line) => console.log(`NOTE ${line} (inherited from the merged part)`));
522
- return pointLinesOf(variant, added);
523
- });
524
- if (open.length > 0)
525
- return fail(`${open.join('\n')}\n${sketch.target} adds open points - close them before ready`);
526
- const running = (0, sketch_1.runningRoundOf)(sketch);
527
- if (running.note.trim() === '')
528
- return fail(`${sketch.target} round ${running.key} has no note - set it with: sketch round ${sketch.target} ${running.key} --note "<what the round shows>" --by <model id>`);
529
- return null;
875
+ .forEach((variant) => (0, read_open_points_1.instantLinesOf)((0, overlay_1.overlaySketch)({ product, sketch, variant }), sketch.targets).forEach((line) => console.log(`NOTE ${sketch.target} ${variant}: ${line}`)));
876
+ if (added.length > 0)
877
+ return fail(`${added.join('\n')}\n${sketch.target} adds open points - close them before ready`);
878
+ const noNote = roundNoteRefusalOf(sketch);
879
+ return noNote === null ? null : fail(noNote);
530
880
  };
531
881
  const rebased = (context) => withSketch(context, ({ product, sketch }) => {
882
+ const kept = context.args.flags.has('--ported');
883
+ const { ported, conflicts } = (0, rebase_port_1.portBaseChanges)({ target: context.target, product, sketch, keepConflicts: kept });
884
+ if (kept)
885
+ conflicts.forEach((line) => console.log(`KEPT ${line} (ported by hand)`));
886
+ else if (conflicts.length > 0)
887
+ return fail(`${conflicts.join('\n')}\n${sketch.target} not rebased - port these by hand, then run sketch rebase again`);
888
+ ported.forEach(({ variant, file, how }) => console.log(`PORTED ${variant}: ${file} (${how})`));
532
889
  (0, sketch_1.rebaseSketch)({ product, sketch });
533
890
  console.log(`${sketch.target} now compares with the product as it is`);
891
+ if (ported.length > 0 && sketch.status === 'ready')
892
+ console.log(`variants changed - run sketch ready ${sketch.target} to check them again`);
534
893
  return 0;
535
894
  });
536
895
  const held = (context) => withSketch(context, ({ sketch }) => {
@@ -552,19 +911,44 @@ const released = (context) => withSketch(context, ({ sketch }) => {
552
911
  console.log(`${freed.target} is no longer held - mark it ready once the change is in`);
553
912
  return 0;
554
913
  });
555
- const renderedVariantsOf = (_a) => __awaiter(void 0, [_a], void 0, function* ({ target, config, product, entries, drawn, }) {
556
- var _b, _c;
914
+ const beforeLinesOf = ({ sketches, before }) => [...new Set(sketches)].flatMap((sketch) => (0, render_check_1.groupedIssueLinesOf)(before
915
+ .filter((issue) => sketch.targets.includes(issue.part))
916
+ .map((issue) => (Object.assign(Object.assign({}, issue), { sketch: { target: sketch.target, variant: 'before' } })))));
917
+ exports.beforeLinesOf = beforeLinesOf;
918
+ const unchangedAffectedOf = (options) => (0, warm_draw_1.loadingOn)(options, (server) => __awaiter(void 0, void 0, void 0, function* () {
919
+ return Object.fromEntries(yield Promise.all(options.affected.map((part) => __awaiter(void 0, void 0, void 0, function* () {
920
+ return [
921
+ part,
922
+ yield (0, unchanged_states_1.unchangedStatesOf)(Object.assign(Object.assign({}, options), { part, load: ({ file, product, sketch }) => server.ssrLoadModule((0, system_modules_1.productModuleIdOf)({ file, product, sketch })) })),
923
+ ];
924
+ }))));
925
+ }));
926
+ const renderedVariantsOf = (_a) => __awaiter(void 0, [_a], void 0, function* ({ target, config, product, entries, drawn, warm, }) {
927
+ var _b, _c, _d;
928
+ const jobs = yield Promise.all(entries.map((_a) => __awaiter(void 0, [_a], void 0, function* ({ sketch, variant }) {
929
+ const preview = (0, merge_preview_1.mergePreviewOf)({ product, sketch, variant });
930
+ return {
931
+ product: product.name,
932
+ sketch: { target: sketch.target, variant },
933
+ parts: [...preview.changed, ...preview.affected],
934
+ unchanged: warm
935
+ ? yield unchangedAffectedOf({ target, config, warm, product, sketch, variant, affected: preview.affected })
936
+ : {},
937
+ };
938
+ })));
939
+ for (const { sketch, unchanged } of jobs)
940
+ for (const [part, states] of Object.entries(unchanged).filter(([, states]) => states.length > 0))
941
+ console.log(`NOTE ${sketch.target} ${sketch.variant}: ${part} draws ${states.length} state${states.length === 1 ? '' : 's'} as merged, not inspected`);
557
942
  const rendered = yield (0, render_check_1.renderIssuesOf)({
558
943
  target,
559
944
  config,
560
- jobs: entries.map(({ sketch, variant }) => {
561
- const preview = (0, merge_preview_1.mergePreviewOf)({ product, sketch, variant });
562
- return {
563
- product: product.name,
564
- sketch: { target: sketch.target, variant },
565
- parts: [...preview.changed, ...preview.affected],
566
- };
567
- }),
945
+ warm,
946
+ jobs,
947
+ onProgress: (line) => console.error(line),
948
+ before: [...new Set(entries.flatMap(({ sketch }) => sketch.targets))].map((part) => ({
949
+ product: product.name,
950
+ part,
951
+ })),
568
952
  });
569
953
  if ('unavailable' in rendered)
570
954
  console.log(`RENDER CHECK SKIPPED - ${rendered.unavailable}`);
@@ -587,36 +971,55 @@ const renderedVariantsOf = (_a) => __awaiter(void 0, [_a], void 0, function* ({
587
971
  if (drawn)
588
972
  rendered.grids.forEach(({ sketch, part, line }) => { var _a, _b; return console.log(`${(_a = sketch === null || sketch === void 0 ? void 0 : sketch.target) !== null && _a !== void 0 ? _a : ''} ${(_b = sketch === null || sketch === void 0 ? void 0 : sketch.variant) !== null && _b !== void 0 ? _b : ''}: ${part} ${line}`); });
589
973
  rendered.warnings.forEach((issue) => { var _a, _b, _c, _d; return console.warn(`${(_b = (_a = issue.sketch) === null || _a === void 0 ? void 0 : _a.target) !== null && _b !== void 0 ? _b : ''} ${(_d = (_c = issue.sketch) === null || _c === void 0 ? void 0 : _c.variant) !== null && _d !== void 0 ? _d : ''}: WARNING ${(0, render_check_1.renderIssueLineOf)(issue)}`); });
590
- (0, render_check_1.groupedIssueLinesOf)(rendered.issues).forEach((line) => console.error(line));
974
+ const { noVerdict } = rendered;
975
+ if (noVerdict)
976
+ [...new Set(entries.map((entry) => entry.sketch.target))].forEach((sketchTarget) => console.error((0, no_verdict_1.noVerdictLineOf)(sketchTarget, noVerdict)));
977
+ else
978
+ (0, render_check_1.groupedIssueLinesOf)(rendered.issues).forEach((line) => console.error(line));
979
+ (0, exports.beforeLinesOf)({ sketches: entries.map((entry) => entry.sketch), before: (_d = rendered.before) !== null && _d !== void 0 ? _d : [] }).forEach((line) => console.log(line));
591
980
  }
592
981
  return rendered;
593
982
  });
594
983
  const checked = (context) => __awaiter(void 0, void 0, void 0, function* () {
984
+ var _a, _b;
595
985
  const { target, config, args } = context;
596
986
  const product = sketchProductOf(context);
597
987
  if (typeof product === 'string')
598
988
  return fail(product);
599
989
  const asked = args.positional[0];
600
- const { unreadable, variants } = (0, check_sketches_1.openSketchProblemsOf)(product);
601
- const chosen = asked === undefined ? variants : variants.filter((entry) => entry.sketch.target === asked);
602
- if (asked !== undefined && chosen.length === 0)
990
+ const { unreadable, variants } = (0, phase_timing_1.timedPhase)('gates', () => (0, check_sketches_1.openSketchProblemsOf)(product));
991
+ const named = asked === undefined ? variants : variants.filter((entry) => entry.sketch.target === asked);
992
+ if (asked !== undefined && named.length === 0)
603
993
  return fail(`NO SKETCH on ${asked} in ${product.name}`);
994
+ const isSkipped = ({ sketch, variant }) => Boolean((0, sketch_1.rejectionOf)(sketch, variant));
995
+ const chosen = named.filter((entry) => !isSkipped(entry));
996
+ named
997
+ .filter(isSkipped)
998
+ .forEach(({ sketch, variant }) => {
999
+ var _a;
1000
+ return console.log(`NOTE ${sketch.target} ${variant}: ${((_a = (0, sketch_1.rejectionOf)(sketch, variant)) === null || _a === void 0 ? void 0 : _a.status) === 'withdrawn' ? 'withdrawn' : 'rejected'}, not checked`);
1001
+ });
604
1002
  if (args.flags.has('--fix'))
605
1003
  new Set(chosen.map((entry) => entry.sketch)).forEach((sketch) => (0, check_format_1.formatSketch)({ target, sketch, variants: sketch.variants }));
606
1004
  let failed = asked === undefined && unreadable.length > 0;
607
1005
  if (asked === undefined)
608
1006
  unreadable.forEach((problem) => console.error(`${problem.rule} ${(0, path_1.relative)(target, problem.file)}: ${problem.message}`));
609
1007
  new Set(chosen.map((entry) => entry.sketch)).forEach((sketch) => {
1008
+ reportedReopen(sketch);
1009
+ if (product.config.noteLanguage)
1010
+ (0, note_language_1.noteLanguageWarningsOf)(sketch, product.config.noteLanguage).forEach((warning) => console.warn(warning));
610
1011
  if (sketch.hold)
611
1012
  console.warn(`HELD ${sketch.target}: until ${sketch.hold.until}`);
612
1013
  });
1014
+ const stale = staleBasesOf(context, { product, targets: new Set(chosen.map((entry) => entry.sketch.target)) });
1015
+ stale.forEach((problem) => console.error(problem.line));
1016
+ failed || (failed = stale.length > 0);
613
1017
  for (const { sketch, variant, problems, before } of chosen) {
614
- const typed = (0, check_sketches_1.typecheckVariant)({ target, product, sketch, variant });
615
- noteProblemsBefore({ sketch, variant, before });
1018
+ const typed = (0, phase_timing_1.timedPhase)(`tsc ${variant}`, () => (0, check_sketches_1.typecheckVariant)({ target, product, sketch, variant }));
1019
+ noteProblemsBefore({ target, sketch, variant, before });
616
1020
  (0, check_sketches_1.variantWarningsOf)({ target, product, sketch, variant }).forEach((warning) => console.warn(`${sketch.target} ${variant}: ${warning}`));
617
1021
  const all = [
618
- ...problems,
619
- ...(0, check_format_1.formatProblemsOf)({ target, sketch, variant }),
1022
+ ...variantGateProblemsOf({ target, product, sketch, variant, problems }),
620
1023
  ...(typed.kind === 'failed' ? [{ rule: 'TYPE-ERROR', file: sketch.dir, message: `\n${typed.output}` }] : []),
621
1024
  ...(typed.kind === 'unavailable' ? [{ rule: 'NO-TYPE-CHECKER', file: sketch.dir, message: typed.message }] : []),
622
1025
  ];
@@ -625,18 +1028,68 @@ const checked = (context) => __awaiter(void 0, void 0, void 0, function* () {
625
1028
  }
626
1029
  failed || (failed = all.length > 0);
627
1030
  }
628
- if (failed)
1031
+ if (!failed)
1032
+ for (const sketch of new Set(chosen.map((entry) => entry.sketch)))
1033
+ (yield (0, phase_timing_1.timedPhase)('aktuell', () => (0, ready_shots_1.aktuellPlaceholderWarnings)({ target, config, product, sketch, warm: context.warm }))).forEach((warning) => console.warn(warning));
1034
+ const rendered = failed
1035
+ ? null
1036
+ : yield (0, phase_timing_1.timedPhase)('render-check', () => renderedVariantsOf({
1037
+ target,
1038
+ config,
1039
+ product,
1040
+ entries: chosen,
1041
+ drawn: true,
1042
+ warm: context.warm,
1043
+ }));
1044
+ const busy = rendered !== null && 'issues' in rendered ? ((_a = rendered.busy) !== null && _a !== void 0 ? _a : []) : [];
1045
+ if (rendered !== null && 'issues' in rendered)
1046
+ (0, frame_budget_1.frameBudgetWarningsOf)({
1047
+ drawn: rendered.drawn,
1048
+ targets: [...new Set(chosen.map((entry) => entry.sketch))].map((sketch) => {
1049
+ var _a;
1050
+ return ({
1051
+ target: sketch.target,
1052
+ part: (_a = sketch.targets[0]) !== null && _a !== void 0 ? _a : sketch.target,
1053
+ });
1054
+ }),
1055
+ }).forEach((warning) => console.warn(warning));
1056
+ let refused = 0;
1057
+ let notReady = false;
1058
+ const refuse = (lines) => {
1059
+ lines.forEach((line) => console.warn(`ready will refuse: ${line}`));
1060
+ refused += lines.length;
1061
+ };
1062
+ for (const sketch of new Set(chosen.map((entry) => entry.sketch))) {
1063
+ const unloaded = yield (0, phase_timing_1.timedPhase)('load', () => unloadedLinesOf({ target, config, product, sketch, warm: context.warm }));
1064
+ const before = refused;
1065
+ refuse([
1066
+ ...unloaded,
1067
+ ...openPointLinesOf({ product, sketch, busy }).added,
1068
+ ...[(_b = roundNoteRefusalOf(sketch)) !== null && _b !== void 0 ? _b : []].flat(),
1069
+ ]);
1070
+ if (!failed && unloaded.length === 0) {
1071
+ refuse(yield (0, phase_timing_1.timedPhase)('mark-drift', () => (0, ready_shots_1.sampleMarkDriftLines)({ target, config, product, sketch, warm: context.warm })));
1072
+ refuse(yield (0, phase_timing_1.timedPhase)('identical', () => (0, ready_shots_1.identicalRenderLines)({ target, config, product, sketch, warm: context.warm })));
1073
+ }
1074
+ if (!failed && refused === before) {
1075
+ const problem = roundNotReadyProblemOf(sketch);
1076
+ if (problem !== null) {
1077
+ console.error(problem);
1078
+ notReady = true;
1079
+ }
1080
+ }
1081
+ }
1082
+ const staleSince = rendered === null
1083
+ ? []
1084
+ : staleBasesOf(context, { product, targets: new Set(chosen.map((entry) => entry.sketch.target)) }).filter((problem) => !stale.some((before) => before.line === problem.line));
1085
+ staleSince.forEach((problem) => console.error(problem.line));
1086
+ if (failed || staleSince.length > 0)
629
1087
  return 1;
630
- const rendered = yield renderedVariantsOf({
631
- target,
632
- config,
633
- product,
634
- entries: chosen,
635
- drawn: true,
636
- });
637
- if ('issues' in rendered && rendered.issues.length > 0)
1088
+ if (rendered !== null && 'issues' in rendered && (rendered.noVerdict || rendered.issues.length > 0))
1089
+ return 1;
1090
+ if (notReady)
638
1091
  return 1;
639
- console.log('ok');
1092
+ console.log(refused > 0 ? `check ok - ready will refuse ${refused} (see above)` : 'ok');
640
1093
  return 0;
641
1094
  });
642
1095
  const previewed = (context) => withSketch(context, ({ product, sketch }) => {
@@ -655,39 +1108,36 @@ const previewed = (context) => withSketch(context, ({ product, sketch }) => {
655
1108
  }
656
1109
  return 0;
657
1110
  });
658
- const allowedMergeOf = (options) => {
659
- const { sketch, variant } = options;
660
- const live = sketch.variants.filter((candidate) => !(0, sketch_1.rejectionOf)(sketch, candidate));
661
- if (live.length !== 1 || live[0] !== variant)
662
- return `${sketch.target} has ${live.length} live variants (${live.join(', ') || 'none'}), not only "${variant}" - the user picks in Studio`;
663
- return (0, sketch_1.decideSketch)({ sketch, decision: { kind: 'pick', variant } });
664
- };
665
1111
  const merged = (context) => withSketch(context, ({ product, sketch }) => {
666
- var _a, _b, _c, _d;
667
- const { '--note': note, '--variant': flagVariant, '--allowed-by': planRef } = context.args.values;
1112
+ var _a, _b;
1113
+ const { '--note': note, '--variant': flagVariant, '--allowed-by': planRef, '--decided-by': decidedBy, } = context.args.values;
1114
+ const replaceNote = context.args.flags.has('--replace-note');
668
1115
  if (context.args.positional.length > 1)
669
1116
  return fail(`usage: sketch merge <layer>/<name> [--note <reason>] - it merges the variant the user picked`);
1117
+ if (replaceNote && (note !== null && note !== void 0 ? note : '').trim() === '')
1118
+ return fail('--replace-note needs --note <the new part note>');
670
1119
  if ((flagVariant === undefined) !== (planRef === undefined))
671
1120
  return fail('--variant and --allowed-by go together: name the only live variant and the plan that allows the merge');
672
- const allowed = flagVariant !== undefined && planRef !== undefined && ((_a = sketch.decision) === null || _a === void 0 ? void 0 : _a.kind) !== 'pick';
673
- const decidedSketch = allowed ? allowedMergeOf({ sketch, variant: flagVariant }) : sketch;
674
- if (typeof decidedSketch === 'string')
675
- return fail(decidedSketch);
676
- const result = (0, merge_1.mergeSketch)({
1121
+ if (decidedBy !== undefined && (decidedBy.trim() === '' || planRef !== undefined))
1122
+ return fail('--decided-by needs a name and does not go with --allowed-by, which records the plan');
1123
+ const by = (_a = (0, cli_args_1.authorOf)(context.args)) !== null && _a !== void 0 ? _a : undefined;
1124
+ const allowed = flagVariant !== undefined && planRef !== undefined && ((_b = sketch.decision) === null || _b === void 0 ? void 0 : _b.kind) !== 'pick'
1125
+ ? { variant: flagVariant, planRef, editRef: (0, merge_step_1.editRefOf)({ target: context.target, sketch, planRef }) }
1126
+ : undefined;
1127
+ const result = (0, phase_timing_1.timedPhase)('merge', () => (0, merge_step_1.mergeAndRecord)({
677
1128
  target: context.target,
678
1129
  config: context.config,
679
1130
  product,
680
- sketch: decidedSketch,
1131
+ sketch,
681
1132
  note,
682
- author: (_b = (0, cli_args_1.authorOf)(context.args)) !== null && _b !== void 0 ? _b : undefined,
683
- });
684
- if (!Array.isArray(result))
685
- return fail(result.reason);
686
- if (allowed)
687
- for (const part of sketch.targets)
688
- (0, merged_parts_1.recordAllowedMerge)({ product, part, by: (_c = (0, cli_args_1.authorOf)(context.args)) !== null && _c !== void 0 ? _c : 'user', planRef: planRef.trim() });
689
- const variant = ((_d = decidedSketch.decision) === null || _d === void 0 ? void 0 : _d.kind) === 'pick' ? decidedSketch.decision.variant : '';
690
- console.log(`merged ${sketch.target} variant ${variant} into ${product.name}: ${result.join(', ')}`);
1133
+ replaceNote,
1134
+ by,
1135
+ decidedBy: decidedBy === null || decidedBy === void 0 ? void 0 : decidedBy.trim(),
1136
+ allowed,
1137
+ }));
1138
+ if (typeof result === 'string')
1139
+ return fail(result);
1140
+ console.log(`merged ${sketch.target} variant ${result.variant} into ${product.name}: ${result.parts.join(', ')}`);
691
1141
  return 0;
692
1142
  });
693
1143
  const discarded = (context) => withSketch(context, ({ sketch }) => {
@@ -701,27 +1151,37 @@ const discarded = (context) => withSketch(context, ({ sketch }) => {
701
1151
  const verdictOriginOf = (by, of) => of && of !== by ? ` (reason by the ${of})` : '';
702
1152
  /** The verdicts a variant had, oldest first, and whether it is rejected now. */
703
1153
  const verdictLinesOf = (sketch, variant) => {
704
- var _a, _b;
1154
+ var _a, _b, _c;
705
1155
  const history = (_b = (_a = sketch.rejections) === null || _a === void 0 ? void 0 : _a[variant]) !== null && _b !== void 0 ? _b : [];
706
- const lines = history.flatMap((rejection) => [
707
- ` rejected by the ${rejection.by} at ${rejection.decidedAt}${verdictOriginOf(rejection.by, rejection.reasonBy)}${rejection.reason ? `: ${rejection.reason}` : ''}`,
708
- ...(rejection.reopened
709
- ? [
710
- ` reopened by the ${rejection.reopened.by} at ${rejection.reopened.decidedAt}${rejection.reopened.reason ? `: ${rejection.reopened.reason}` : ''}`,
711
- ]
712
- : []),
713
- ]);
714
- return [`${sketch.target} variant ${variant}: ${(0, sketch_1.rejectionOf)(sketch, variant) ? 'rejected' : 'live'}`, ...lines];
1156
+ const lines = history.flatMap((rejection) => {
1157
+ var _a;
1158
+ return [
1159
+ ` ${rejection.status === 'withdrawn' ? `withdrawn by ${(_a = rejection.withdrawnBy) !== null && _a !== void 0 ? _a : 'the agent'}` : `rejected by the ${rejection.by}`} at ${rejection.decidedAt}${verdictOriginOf(rejection.by, rejection.reasonBy)}${rejection.reason ? `: ${rejection.reason}` : ''}`,
1160
+ ...(rejection.reopened
1161
+ ? [
1162
+ ` reopened by the ${rejection.reopened.by} at ${rejection.reopened.decidedAt}${rejection.reopened.reason ? `: ${rejection.reopened.reason}` : ''}`,
1163
+ ]
1164
+ : []),
1165
+ ];
1166
+ });
1167
+ return [
1168
+ `${sketch.target} variant ${variant}: ${(0, sketch_1.rejectionOf)(sketch, variant) ? (((_c = (0, sketch_1.rejectionOf)(sketch, variant)) === null || _c === void 0 ? void 0 : _c.status) === 'withdrawn' ? 'withdrawn' : 'rejected') : 'live'}`,
1169
+ ...lines,
1170
+ ];
715
1171
  };
716
1172
  exports.verdictLinesOf = verdictLinesOf;
717
1173
  const judged = (kind) => (context) => withSketch(context, ({ sketch }) => {
718
- var _a;
1174
+ var _a, _b;
719
1175
  const { positional, values } = context.args;
720
1176
  const variant = values['--variant'];
721
1177
  const reason = ((_a = values['--reason']) === null || _a === void 0 ? void 0 : _a.trim()) || undefined;
722
- const by = (0, cli_args_1.authorOf)(context.args) === 'designer' ? 'designer' : 'agent';
1178
+ const author = (_b = (0, cli_args_1.authorOf)(context.args)) !== null && _b !== void 0 ? _b : '';
1179
+ const by = author === 'designer' ? 'designer' : 'agent';
723
1180
  if (positional.length !== 1 || !variant)
724
1181
  return fail(`usage: sketch ${kind} <layer>/<name> --variant <key> [--reason <text>] --by <model id | designer> [--product <name>]`);
1182
+ const invalid = (0, cli_args_1.verdictByProblemOf)(author);
1183
+ if (invalid)
1184
+ return fail(invalid);
725
1185
  const decision = kind === 'reject' && reason && (0, sketch_1.rejectionOf)(sketch, variant)
726
1186
  ? { kind: 'reason', variant, reason, by }
727
1187
  : Object.assign(Object.assign({ kind, variant }, (reason ? { reason } : {})), { by });
@@ -731,11 +1191,50 @@ const judged = (kind) => (context) => withSketch(context, ({ sketch }) => {
731
1191
  (0, exports.verdictLinesOf)(decided, variant).forEach((line) => console.log(line));
732
1192
  return 0;
733
1193
  });
1194
+ const withdrawn = (context) => {
1195
+ const found = productAndSketchOf(context);
1196
+ if (typeof found === 'string')
1197
+ return fail(found);
1198
+ return withdrawnVariant(context, found);
1199
+ };
1200
+ const withdrawnVariant = (context_1, _a) => __awaiter(void 0, [context_1, _a], void 0, function* (context, { product, sketch }) {
1201
+ var _b;
1202
+ const { positional, values } = context.args;
1203
+ const variant = values['--variant'];
1204
+ const by = (_b = (0, cli_args_1.authorOf)(context.args)) !== null && _b !== void 0 ? _b : '';
1205
+ if (positional.length !== 1 || !variant)
1206
+ return fail('usage: sketch withdraw <layer>/<name> --variant <key> --by <model id> [--product <name>]');
1207
+ if (by === 'designer')
1208
+ return fail('sketch withdraw is for the agent that drew the variant: --by must be a model id, not designer');
1209
+ const invalid = (0, cli_args_1.verdictByProblemOf)(by);
1210
+ if (invalid)
1211
+ return fail(invalid);
1212
+ if (!sketch.variants.includes(variant))
1213
+ return fail(`${sketch.target} has no variant "${variant}" - it has ${sketch.variants.join(', ')}`);
1214
+ if (!(0, sketch_1.authorsOf)(sketch, variant).includes(by))
1215
+ return fail(`${sketch.target} variant ${variant} was not drawn by ${by} - only the agent that drew it withdraws it`);
1216
+ const identical = yield (0, ready_shots_1.identicalRenders)({
1217
+ target: context.target,
1218
+ config: context.config,
1219
+ product,
1220
+ sketch,
1221
+ warm: context.warm,
1222
+ });
1223
+ const twin = identical.find((render) => render.variant === variant && render.sibling !== null);
1224
+ if (!twin)
1225
+ return fail(`${sketch.target} variant ${variant} does not draw the same pixels as a sibling variant in its first changed state - redraw it or ask for a reject`);
1226
+ const result = (0, sketch_1.withdrawVariant)({ sketch, variant, by, reason: `identisch mit ${twin.sibling}` });
1227
+ if (typeof result === 'string')
1228
+ return fail(result);
1229
+ console.log(`withdrew ${sketch.target} variant ${variant} (identisch mit ${twin.sibling})`);
1230
+ return 0;
1231
+ });
734
1232
  const COMMANDS = {
735
1233
  new: created,
736
1234
  variant: varied,
737
1235
  round: roundEdited,
738
1236
  note: noteEdited,
1237
+ covers: coversEdited,
739
1238
  list: listed,
740
1239
  report: reported,
741
1240
  ready: readied,
@@ -749,32 +1248,29 @@ const COMMANDS = {
749
1248
  target: targetAdded,
750
1249
  reject: judged('reject'),
751
1250
  reopen: judged('reopen'),
1251
+ withdraw: withdrawn,
1252
+ };
1253
+ /** The value flags and switches the usage line of a sketch command names. */
1254
+ const flagsOf = (command) => {
1255
+ var _a;
1256
+ const line = (_a = exports.SKETCH_USAGE.find((usage) => usage.startsWith(`sketch ${command} `))) !== null && _a !== void 0 ? _a : '';
1257
+ const named = [...line.matchAll(/(--[a-z-]+)( (?=[<a-z0-9]))?/gu)];
1258
+ const unique = (flags) => [...new Set(flags)];
1259
+ return {
1260
+ values: unique(named.filter(([, , value]) => value).map(([, flag]) => flag !== null && flag !== void 0 ? flag : '')),
1261
+ switches: unique(named.filter(([, , value]) => !value).map(([, flag]) => flag !== null && flag !== void 0 ? flag : '')),
1262
+ };
752
1263
  };
753
1264
  /**
754
1265
  * `et design sketch <command> …` opens, adds variants to, reports on, readies, checks, previews, rebases, merges and
755
- * discards sketches, and rejects and reopens their variants.
1266
+ * discards sketches, and rejects, reopens and withdraws their variants.
756
1267
  */
757
1268
  const designSketch = (options) => {
758
- const { target, argv, invocation } = options;
1269
+ var _a, _b;
1270
+ const { target, argv, invocation, warm } = options;
759
1271
  const [command = '', ...rest] = argv;
760
1272
  const run = COMMANDS[command];
761
- const args = (0, cli_args_1.argsOf)(rest, [
762
- '--product',
763
- '--variants',
764
- '--note',
765
- '--variant',
766
- '--by',
767
- '--from',
768
- '--round',
769
- '--round-note',
770
- '--title',
771
- '--like',
772
- '--drops',
773
- '--variant-note',
774
- '--reason',
775
- '--allowed-by',
776
- '--until',
777
- ]);
1273
+ const args = (0, cli_args_1.argsOf)(rest, flagsOf(command));
778
1274
  const unauthored = typeof args !== 'string' && WRITES.has(command) && (0, cli_args_1.authorOf)(args) === null;
779
1275
  if (!run || typeof args === 'string' || unauthored) {
780
1276
  if (typeof args === 'string')
@@ -789,7 +1285,16 @@ const designSketch = (options) => {
789
1285
  const config = (0, cli_args_1.configOf)(target);
790
1286
  if (typeof config === 'string')
791
1287
  return fail(config);
792
- return run({ target, config, args });
1288
+ if (RETRIES.has(command)) {
1289
+ const named = (0, sketch_1.parseTarget)((_a = args.positional[0]) !== null && _a !== void 0 ? _a : '');
1290
+ (0, exports.retriedHeldMerges)({
1291
+ target,
1292
+ config,
1293
+ author: (_b = (0, cli_args_1.authorOf)(args)) !== null && _b !== void 0 ? _b : undefined,
1294
+ except: typeof named === 'string' ? undefined : (0, resolve_product_1.partKeyOf)(named),
1295
+ });
1296
+ }
1297
+ return run({ target, config, args, invocation, warm });
793
1298
  };
794
1299
  exports.designSketch = designSketch;
795
1300
  //# sourceMappingURL=sketch-command.js.map