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

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 (557) hide show
  1. package/CHANGELOG.md +328 -0
  2. package/build-info.json +1 -0
  3. package/design/define-call.ts +72 -30
  4. package/design/define-part.ts +37 -4
  5. package/design/icon-sheet.ts +1 -1
  6. package/design/interaction-rows.ts +13 -6
  7. package/design/mark-part.ts +51 -1
  8. package/design/token-sheet.ts +1 -1
  9. package/design/web/frame-fit.ts +7 -0
  10. package/design/web/frame-surfaces.ts +294 -0
  11. package/design/web/frame.ts +41 -15
  12. package/design/web/surface-interactive.css +42 -0
  13. package/design/with-action.ts +29 -0
  14. package/package.json +3 -1
  15. package/src/index.js +9 -1
  16. package/src/index.js.map +1 -1
  17. package/src/lib/design/asset-shot.js +2 -2
  18. package/src/lib/design/asset-shot.js.map +1 -1
  19. package/src/lib/design/build-watch.d.ts +26 -0
  20. package/src/lib/design/build-watch.js +138 -0
  21. package/src/lib/design/build-watch.js.map +1 -0
  22. package/src/lib/design/check.js +142 -16
  23. package/src/lib/design/check.js.map +1 -1
  24. package/src/lib/design/commit-hunks.d.ts +22 -0
  25. package/src/lib/design/commit-hunks.js +173 -0
  26. package/src/lib/design/commit-hunks.js.map +1 -0
  27. package/src/lib/design/design-command.d.ts +2 -0
  28. package/src/lib/design/design-command.js +160 -11
  29. package/src/lib/design/design-command.js.map +1 -1
  30. package/src/lib/design/force-interactions.d.ts +1 -1
  31. package/src/lib/design/force-interactions.js +4 -2
  32. package/src/lib/design/force-interactions.js.map +1 -1
  33. package/src/lib/design/inbox-command.js +9 -5
  34. package/src/lib/design/inbox-command.js.map +1 -1
  35. package/src/lib/design/mcp-command.d.ts +5 -1
  36. package/src/lib/design/mcp-command.js +29 -11
  37. package/src/lib/design/mcp-command.js.map +1 -1
  38. package/src/lib/design/merge-compare.d.ts +10 -2
  39. package/src/lib/design/merge-compare.js +63 -11
  40. package/src/lib/design/merge-compare.js.map +1 -1
  41. package/src/lib/design/motion-command.js +1 -1
  42. package/src/lib/design/motion-command.js.map +1 -1
  43. package/src/lib/design/motion-shot.js +3 -2
  44. package/src/lib/design/motion-shot.js.map +1 -1
  45. package/src/lib/design/new-call.js +19 -10
  46. package/src/lib/design/new-call.js.map +1 -1
  47. package/src/lib/design/part-marks.d.ts +3 -2
  48. package/src/lib/design/part-marks.js +13 -5
  49. package/src/lib/design/part-marks.js.map +1 -1
  50. package/src/lib/design/paths.d.ts +28 -0
  51. package/src/lib/design/paths.js.map +1 -1
  52. package/src/lib/design/product-command.d.ts +1 -1
  53. package/src/lib/design/product-command.js +12 -14
  54. package/src/lib/design/product-command.js.map +1 -1
  55. package/src/lib/design/ready-shots.d.ts +29 -3
  56. package/src/lib/design/ready-shots.js +105 -5
  57. package/src/lib/design/ready-shots.js.map +1 -1
  58. package/src/lib/design/render-packages.d.ts +4 -17
  59. package/src/lib/design/render-packages.js +20 -63
  60. package/src/lib/design/render-packages.js.map +1 -1
  61. package/src/lib/design/render-worker.js +1 -3
  62. package/src/lib/design/render-worker.js.map +1 -1
  63. package/src/lib/design/render.d.ts +2 -0
  64. package/src/lib/design/render.js +32 -7
  65. package/src/lib/design/render.js.map +1 -1
  66. package/src/lib/design/serve.d.ts +21 -1
  67. package/src/lib/design/serve.js +133 -19
  68. package/src/lib/design/serve.js.map +1 -1
  69. package/src/lib/design/server-identity.d.ts +36 -0
  70. package/src/lib/design/server-identity.js +68 -0
  71. package/src/lib/design/server-identity.js.map +1 -0
  72. package/src/lib/design/settle-frames.d.ts +4 -0
  73. package/src/lib/design/settle-frames.js +22 -0
  74. package/src/lib/design/settle-frames.js.map +1 -0
  75. package/src/lib/design/shot-command.d.ts +25 -4
  76. package/src/lib/design/shot-command.js +132 -46
  77. package/src/lib/design/shot-command.js.map +1 -1
  78. package/src/lib/design/shot.d.ts +50 -0
  79. package/src/lib/design/shot.js +143 -17
  80. package/src/lib/design/shot.js.map +1 -1
  81. package/src/lib/design/sketch-command.d.ts +6 -1
  82. package/src/lib/design/sketch-command.js +358 -126
  83. package/src/lib/design/sketch-command.js.map +1 -1
  84. package/src/lib/design/stale-cli-dist.d.ts +11 -0
  85. package/src/lib/design/stale-cli-dist.js +56 -0
  86. package/src/lib/design/stale-cli-dist.js.map +1 -0
  87. package/src/lib/design/stamp.d.ts +18 -1
  88. package/src/lib/design/stamp.js +53 -7
  89. package/src/lib/design/stamp.js.map +1 -1
  90. package/src/lib/design/started-by-studio.d.ts +1 -0
  91. package/src/lib/design/started-by-studio.js +6 -0
  92. package/src/lib/design/started-by-studio.js.map +1 -0
  93. package/src/lib/design/studio-api.d.ts +27 -8
  94. package/src/lib/design/studio-api.js +263 -58
  95. package/src/lib/design/studio-api.js.map +1 -1
  96. package/src/lib/design/system/accept-command.d.ts +39 -5
  97. package/src/lib/design/system/accept-command.js +109 -25
  98. package/src/lib/design/system/accept-command.js.map +1 -1
  99. package/src/lib/design/system/accepted-pictures.d.ts +83 -0
  100. package/src/lib/design/system/accepted-pictures.js +324 -0
  101. package/src/lib/design/system/accepted-pictures.js.map +1 -0
  102. package/src/lib/design/system/action-lost.d.ts +59 -0
  103. package/src/lib/design/system/action-lost.js +120 -0
  104. package/src/lib/design/system/action-lost.js.map +1 -0
  105. package/src/lib/design/system/action-press.d.ts +23 -0
  106. package/src/lib/design/system/action-press.js +76 -0
  107. package/src/lib/design/system/action-press.js.map +1 -0
  108. package/src/lib/design/system/action-undeclared.d.ts +34 -0
  109. package/src/lib/design/system/action-undeclared.js +81 -0
  110. package/src/lib/design/system/action-undeclared.js.map +1 -0
  111. package/src/lib/design/system/actions-command.d.ts +101 -0
  112. package/src/lib/design/system/actions-command.js +695 -0
  113. package/src/lib/design/system/actions-command.js.map +1 -0
  114. package/src/lib/design/system/actions.d.ts +158 -0
  115. package/src/lib/design/system/actions.js +295 -0
  116. package/src/lib/design/system/actions.js.map +1 -0
  117. package/src/lib/design/system/app-files.d.ts +10 -0
  118. package/src/lib/design/system/app-files.js +159 -0
  119. package/src/lib/design/system/app-files.js.map +1 -0
  120. package/src/lib/design/system/bespoke-controls.d.ts +30 -0
  121. package/src/lib/design/system/bespoke-controls.js +147 -0
  122. package/src/lib/design/system/bespoke-controls.js.map +1 -0
  123. package/src/lib/design/system/build-ready-contract.d.ts +27 -0
  124. package/src/lib/design/system/build-ready-contract.js +12 -0
  125. package/src/lib/design/system/build-ready-contract.js.map +1 -0
  126. package/src/lib/design/system/check-rules.d.ts +1 -0
  127. package/src/lib/design/system/check-rules.js +82 -0
  128. package/src/lib/design/system/check-rules.js.map +1 -0
  129. package/src/lib/design/system/check-system.d.ts +61 -6
  130. package/src/lib/design/system/check-system.js +479 -68
  131. package/src/lib/design/system/check-system.js.map +1 -1
  132. package/src/lib/design/system/comments/comment.d.ts +4 -1
  133. package/src/lib/design/system/comments/comment.js +13 -4
  134. package/src/lib/design/system/comments/comment.js.map +1 -1
  135. package/src/lib/design/system/comments/inbox.js +2 -2
  136. package/src/lib/design/system/comments/inbox.js.map +1 -1
  137. package/src/lib/design/system/compare-command.d.ts +119 -0
  138. package/src/lib/design/system/compare-command.js +558 -0
  139. package/src/lib/design/system/compare-command.js.map +1 -0
  140. package/src/lib/design/system/complete-command.js +1 -1
  141. package/src/lib/design/system/complete-command.js.map +1 -1
  142. package/src/lib/design/system/complete.d.ts +32 -1
  143. package/src/lib/design/system/complete.js +144 -48
  144. package/src/lib/design/system/complete.js.map +1 -1
  145. package/src/lib/design/system/component-outputs.d.ts +20 -0
  146. package/src/lib/design/system/component-outputs.js +86 -0
  147. package/src/lib/design/system/component-outputs.js.map +1 -0
  148. package/src/lib/design/system/contrast-check.d.ts +1 -1
  149. package/src/lib/design/system/contrast-check.js +14 -3
  150. package/src/lib/design/system/contrast-check.js.map +1 -1
  151. package/src/lib/design/system/demo-backdrop.d.ts +11 -0
  152. package/src/lib/design/system/demo-backdrop.js +41 -0
  153. package/src/lib/design/system/demo-backdrop.js.map +1 -0
  154. package/src/lib/design/system/design-hash.d.ts +31 -0
  155. package/src/lib/design/system/design-hash.js +73 -0
  156. package/src/lib/design/system/design-hash.js.map +1 -0
  157. package/src/lib/design/system/disabled-interaction.d.ts +8 -0
  158. package/src/lib/design/system/disabled-interaction.js +37 -0
  159. package/src/lib/design/system/disabled-interaction.js.map +1 -0
  160. package/src/lib/design/system/dom-command.d.ts +36 -0
  161. package/src/lib/design/system/dom-command.js +175 -0
  162. package/src/lib/design/system/dom-command.js.map +1 -0
  163. package/src/lib/design/system/drawn-open-points.d.ts +25 -3
  164. package/src/lib/design/system/drawn-open-points.js +65 -14
  165. package/src/lib/design/system/drawn-open-points.js.map +1 -1
  166. package/src/lib/design/system/dropped-props.d.ts +25 -0
  167. package/src/lib/design/system/dropped-props.js +159 -0
  168. package/src/lib/design/system/dropped-props.js.map +1 -0
  169. package/src/lib/design/system/embedded-actions.d.ts +21 -0
  170. package/src/lib/design/system/embedded-actions.js +37 -0
  171. package/src/lib/design/system/embedded-actions.js.map +1 -0
  172. package/src/lib/design/system/exceptions.js +2 -1
  173. package/src/lib/design/system/exceptions.js.map +1 -1
  174. package/src/lib/design/system/flows/flow.js +2 -1
  175. package/src/lib/design/system/flows/flow.js.map +1 -1
  176. package/src/lib/design/system/frozen-animations.d.ts +13 -0
  177. package/src/lib/design/system/frozen-animations.js +51 -0
  178. package/src/lib/design/system/frozen-animations.js.map +1 -0
  179. package/src/lib/design/system/go-batch.d.ts +24 -0
  180. package/src/lib/design/system/go-batch.js +110 -0
  181. package/src/lib/design/system/go-batch.js.map +1 -0
  182. package/src/lib/design/system/go-command.d.ts +4 -0
  183. package/src/lib/design/system/go-command.js +64 -0
  184. package/src/lib/design/system/go-command.js.map +1 -0
  185. package/src/lib/design/system/go-guard.d.ts +26 -0
  186. package/src/lib/design/system/go-guard.js +70 -0
  187. package/src/lib/design/system/go-guard.js.map +1 -0
  188. package/src/lib/design/system/go-step.d.ts +13 -0
  189. package/src/lib/design/system/go-step.js +84 -0
  190. package/src/lib/design/system/go-step.js.map +1 -0
  191. package/src/lib/design/system/handoff.js +2 -1
  192. package/src/lib/design/system/handoff.js.map +1 -1
  193. package/src/lib/design/system/harness-build-cache.d.ts +35 -0
  194. package/src/lib/design/system/harness-build-cache.js +175 -0
  195. package/src/lib/design/system/harness-build-cache.js.map +1 -0
  196. package/src/lib/design/system/harness-command.d.ts +7 -0
  197. package/src/lib/design/system/harness-command.js +51 -0
  198. package/src/lib/design/system/harness-command.js.map +1 -0
  199. package/src/lib/design/system/harness-config.d.ts +9 -0
  200. package/src/lib/design/system/harness-config.js +65 -0
  201. package/src/lib/design/system/harness-config.js.map +1 -0
  202. package/src/lib/design/system/harness-map.d.ts +44 -0
  203. package/src/lib/design/system/harness-map.js +126 -0
  204. package/src/lib/design/system/harness-map.js.map +1 -0
  205. package/src/lib/design/system/harness-samples.d.ts +20 -0
  206. package/src/lib/design/system/harness-samples.js +92 -0
  207. package/src/lib/design/system/harness-samples.js.map +1 -0
  208. package/src/lib/design/system/harness-server.d.ts +40 -0
  209. package/src/lib/design/system/harness-server.js +296 -0
  210. package/src/lib/design/system/harness-server.js.map +1 -0
  211. package/src/lib/design/system/imports.js +14 -1
  212. package/src/lib/design/system/imports.js.map +1 -1
  213. package/src/lib/design/system/in-order-at-once.d.ts +6 -0
  214. package/src/lib/design/system/in-order-at-once.js +28 -0
  215. package/src/lib/design/system/in-order-at-once.js.map +1 -0
  216. package/src/lib/design/system/inventory-approval.js +2 -1
  217. package/src/lib/design/system/inventory-approval.js.map +1 -1
  218. package/src/lib/design/system/inventory.d.ts +13 -4
  219. package/src/lib/design/system/inventory.js +36 -7
  220. package/src/lib/design/system/inventory.js.map +1 -1
  221. package/src/lib/design/system/list-system.d.ts +4 -0
  222. package/src/lib/design/system/list-system.js +12 -3
  223. package/src/lib/design/system/list-system.js.map +1 -1
  224. package/src/lib/design/system/live-actions.d.ts +121 -0
  225. package/src/lib/design/system/live-actions.js +665 -0
  226. package/src/lib/design/system/live-actions.js.map +1 -0
  227. package/src/lib/design/system/live-compare.d.ts +136 -0
  228. package/src/lib/design/system/live-compare.js +441 -0
  229. package/src/lib/design/system/live-compare.js.map +1 -0
  230. package/src/lib/design/system/live-uncovered.d.ts +40 -0
  231. package/src/lib/design/system/live-uncovered.js +123 -0
  232. package/src/lib/design/system/live-uncovered.js.map +1 -0
  233. package/src/lib/design/system/nested-scroll.d.ts +7 -0
  234. package/src/lib/design/system/nested-scroll.js +25 -0
  235. package/src/lib/design/system/nested-scroll.js.map +1 -0
  236. package/src/lib/design/system/notes/note.js +2 -1
  237. package/src/lib/design/system/notes/note.js.map +1 -1
  238. package/src/lib/design/system/occluded.d.ts +13 -0
  239. package/src/lib/design/system/occluded.js +111 -0
  240. package/src/lib/design/system/occluded.js.map +1 -0
  241. package/src/lib/design/system/open-points.d.ts +24 -6
  242. package/src/lib/design/system/open-points.js +59 -30
  243. package/src/lib/design/system/open-points.js.map +1 -1
  244. package/src/lib/design/system/part-build-ready.d.ts +39 -0
  245. package/src/lib/design/system/part-build-ready.js +107 -0
  246. package/src/lib/design/system/part-build-ready.js.map +1 -0
  247. package/src/lib/design/system/part-command.js +2 -9
  248. package/src/lib/design/system/part-command.js.map +1 -1
  249. package/src/lib/design/system/part-compare.d.ts +123 -0
  250. package/src/lib/design/system/part-compare.js +396 -0
  251. package/src/lib/design/system/part-compare.js.map +1 -0
  252. package/src/lib/design/system/part-go.d.ts +70 -0
  253. package/src/lib/design/system/part-go.js +94 -0
  254. package/src/lib/design/system/part-go.js.map +1 -0
  255. package/src/lib/design/system/part-ready.d.ts +44 -6
  256. package/src/lib/design/system/part-ready.js +88 -17
  257. package/src/lib/design/system/part-ready.js.map +1 -1
  258. package/src/lib/design/system/part-task.d.ts +147 -0
  259. package/src/lib/design/system/part-task.js +285 -0
  260. package/src/lib/design/system/part-task.js.map +1 -0
  261. package/src/lib/design/system/pointer-focus.d.ts +81 -0
  262. package/src/lib/design/system/pointer-focus.js +152 -0
  263. package/src/lib/design/system/pointer-focus.js.map +1 -0
  264. package/src/lib/design/system/prettier.d.ts +10 -0
  265. package/src/lib/design/system/prettier.js +36 -0
  266. package/src/lib/design/system/prettier.js.map +1 -0
  267. package/src/lib/design/system/reach.d.ts +12 -0
  268. package/src/lib/design/system/reach.js +186 -0
  269. package/src/lib/design/system/reach.js.map +1 -0
  270. package/src/lib/design/system/reachable-controls.d.ts +6 -0
  271. package/src/lib/design/system/reachable-controls.js +19 -0
  272. package/src/lib/design/system/reachable-controls.js.map +1 -0
  273. package/src/lib/design/system/reachable-files.d.ts +14 -0
  274. package/src/lib/design/system/reachable-files.js +101 -0
  275. package/src/lib/design/system/reachable-files.js.map +1 -0
  276. package/src/lib/design/system/reached-state.d.ts +23 -0
  277. package/src/lib/design/system/reached-state.js +53 -0
  278. package/src/lib/design/system/reached-state.js.map +1 -0
  279. package/src/lib/design/system/read-open-points.d.ts +9 -3
  280. package/src/lib/design/system/read-open-points.js +38 -9
  281. package/src/lib/design/system/read-open-points.js.map +1 -1
  282. package/src/lib/design/system/ready-command.d.ts +6 -2
  283. package/src/lib/design/system/ready-command.js +32 -15
  284. package/src/lib/design/system/ready-command.js.map +1 -1
  285. package/src/lib/design/system/render-check.d.ts +50 -0
  286. package/src/lib/design/system/render-check.js +341 -88
  287. package/src/lib/design/system/render-check.js.map +1 -1
  288. package/src/lib/design/system/resolve-product.js +5 -0
  289. package/src/lib/design/system/resolve-product.js.map +1 -1
  290. package/src/lib/design/system/rules/app-spec.d.ts +30 -0
  291. package/src/lib/design/system/rules/app-spec.js +87 -0
  292. package/src/lib/design/system/rules/app-spec.js.map +1 -0
  293. package/src/lib/design/system/rules/canonical-class.d.ts +2 -0
  294. package/src/lib/design/system/rules/canonical-class.js +36 -110
  295. package/src/lib/design/system/rules/canonical-class.js.map +1 -1
  296. package/src/lib/design/system/rules/capability-place.d.ts +44 -0
  297. package/src/lib/design/system/rules/capability-place.js +116 -0
  298. package/src/lib/design/system/rules/capability-place.js.map +1 -0
  299. package/src/lib/design/system/rules/denied-class.d.ts +9 -0
  300. package/src/lib/design/system/rules/denied-class.js +121 -0
  301. package/src/lib/design/system/rules/denied-class.js.map +1 -0
  302. package/src/lib/design/system/rules/exemptions.d.ts +18 -0
  303. package/src/lib/design/system/rules/exemptions.js +18 -0
  304. package/src/lib/design/system/rules/exemptions.js.map +1 -0
  305. package/src/lib/design/system/rules/flow.js +1 -1
  306. package/src/lib/design/system/rules/flow.js.map +1 -1
  307. package/src/lib/design/system/rules/glued-interpolation.d.ts +8 -0
  308. package/src/lib/design/system/rules/glued-interpolation.js +61 -0
  309. package/src/lib/design/system/rules/glued-interpolation.js.map +1 -0
  310. package/src/lib/design/system/rules/hard-coded-colour.js +2 -1
  311. package/src/lib/design/system/rules/hard-coded-colour.js.map +1 -1
  312. package/src/lib/design/system/rules/implemented-components.d.ts +22 -0
  313. package/src/lib/design/system/rules/implemented-components.js +45 -0
  314. package/src/lib/design/system/rules/implemented-components.js.map +1 -0
  315. package/src/lib/design/system/rules/implements.d.ts +2 -1
  316. package/src/lib/design/system/rules/implements.js +26 -21
  317. package/src/lib/design/system/rules/implements.js.map +1 -1
  318. package/src/lib/design/system/rules/inline-svg.js +4 -1
  319. package/src/lib/design/system/rules/inline-svg.js.map +1 -1
  320. package/src/lib/design/system/rules/inline-ui-in-page-open.d.ts +13 -0
  321. package/src/lib/design/system/rules/inline-ui-in-page-open.js +5 -0
  322. package/src/lib/design/system/rules/inline-ui-in-page-open.js.map +1 -0
  323. package/src/lib/design/system/rules/inline-ui-in-page.d.ts +18 -0
  324. package/src/lib/design/system/rules/inline-ui-in-page.js +123 -0
  325. package/src/lib/design/system/rules/inline-ui-in-page.js.map +1 -0
  326. package/src/lib/design/system/rules/inline-ui.d.ts +16 -0
  327. package/src/lib/design/system/rules/inline-ui.js +100 -0
  328. package/src/lib/design/system/rules/inline-ui.js.map +1 -0
  329. package/src/lib/design/system/rules/motion.d.ts +1 -1
  330. package/src/lib/design/system/rules/motion.js +25 -17
  331. package/src/lib/design/system/rules/motion.js.map +1 -1
  332. package/src/lib/design/system/rules/native-title.d.ts +7 -0
  333. package/src/lib/design/system/rules/native-title.js +64 -0
  334. package/src/lib/design/system/rules/native-title.js.map +1 -0
  335. package/src/lib/design/system/rules/orphan-endpoint-known.d.ts +12 -0
  336. package/src/lib/design/system/rules/orphan-endpoint-known.js +20 -0
  337. package/src/lib/design/system/rules/orphan-endpoint-known.js.map +1 -0
  338. package/src/lib/design/system/rules/orphan-endpoint.d.ts +23 -0
  339. package/src/lib/design/system/rules/orphan-endpoint.js +166 -0
  340. package/src/lib/design/system/rules/orphan-endpoint.js.map +1 -0
  341. package/src/lib/design/system/rules/part-rewrite.d.ts +13 -0
  342. package/src/lib/design/system/rules/part-rewrite.js +125 -0
  343. package/src/lib/design/system/rules/part-rewrite.js.map +1 -0
  344. package/src/lib/design/system/rules/sample-default-known.d.ts +5 -0
  345. package/src/lib/design/system/rules/sample-default-known.js +17 -0
  346. package/src/lib/design/system/rules/sample-default-known.js.map +1 -0
  347. package/src/lib/design/system/rules/sample-default.d.ts +22 -0
  348. package/src/lib/design/system/rules/sample-default.js +92 -0
  349. package/src/lib/design/system/rules/sample-default.js.map +1 -0
  350. package/src/lib/design/system/rules/stale-replace.js +4 -0
  351. package/src/lib/design/system/rules/stale-replace.js.map +1 -1
  352. package/src/lib/design/system/rules/state-in-component.d.ts +16 -0
  353. package/src/lib/design/system/rules/state-in-component.js +101 -0
  354. package/src/lib/design/system/rules/state-in-component.js.map +1 -0
  355. package/src/lib/design/system/rules/tailwind-classes.d.ts +51 -0
  356. package/src/lib/design/system/rules/tailwind-classes.js +232 -0
  357. package/src/lib/design/system/rules/tailwind-classes.js.map +1 -0
  358. package/src/lib/design/system/rules/top-level-await.d.ts +9 -0
  359. package/src/lib/design/system/rules/top-level-await.js +62 -0
  360. package/src/lib/design/system/rules/top-level-await.js.map +1 -0
  361. package/src/lib/design/system/rules/unbound-input-known.d.ts +5 -0
  362. package/src/lib/design/system/rules/unbound-input-known.js +47 -0
  363. package/src/lib/design/system/rules/unbound-input-known.js.map +1 -0
  364. package/src/lib/design/system/rules/unbound-input.d.ts +22 -0
  365. package/src/lib/design/system/rules/unbound-input.js +61 -0
  366. package/src/lib/design/system/rules/unbound-input.js.map +1 -0
  367. package/src/lib/design/system/rules/uncovered-region.d.ts +13 -0
  368. package/src/lib/design/system/rules/uncovered-region.js +36 -0
  369. package/src/lib/design/system/rules/uncovered-region.js.map +1 -0
  370. package/src/lib/design/system/rules/undefined-class.d.ts +9 -0
  371. package/src/lib/design/system/rules/undefined-class.js +32 -0
  372. package/src/lib/design/system/rules/undefined-class.js.map +1 -0
  373. package/src/lib/design/system/rules/undefined-token.d.ts +1 -1
  374. package/src/lib/design/system/rules/undefined-token.js +7 -61
  375. package/src/lib/design/system/rules/undefined-token.js.map +1 -1
  376. package/src/lib/design/system/rules/utility-css.d.ts +2 -1
  377. package/src/lib/design/system/rules/utility-css.js +29 -14
  378. package/src/lib/design/system/rules/utility-css.js.map +1 -1
  379. package/src/lib/design/system/rules/view-coverage.d.ts +8 -0
  380. package/src/lib/design/system/rules/view-coverage.js +51 -0
  381. package/src/lib/design/system/rules/view-coverage.js.map +1 -0
  382. package/src/lib/design/system/rules/visible-change.d.ts +20 -0
  383. package/src/lib/design/system/rules/visible-change.js +48 -0
  384. package/src/lib/design/system/rules/visible-change.js.map +1 -0
  385. package/src/lib/design/system/sdk-errors.d.ts +14 -0
  386. package/src/lib/design/system/sdk-errors.js +38 -0
  387. package/src/lib/design/system/sdk-errors.js.map +1 -0
  388. package/src/lib/design/system/see-through.d.ts +12 -0
  389. package/src/lib/design/system/see-through.js +112 -0
  390. package/src/lib/design/system/see-through.js.map +1 -0
  391. package/src/lib/design/system/settled-panes.d.ts +18 -0
  392. package/src/lib/design/system/settled-panes.js +70 -0
  393. package/src/lib/design/system/settled-panes.js.map +1 -0
  394. package/src/lib/design/system/sketch/after-merge.d.ts +11 -0
  395. package/src/lib/design/system/sketch/after-merge.js +51 -0
  396. package/src/lib/design/system/sketch/after-merge.js.map +1 -0
  397. package/src/lib/design/system/sketch/aktuell-placeholders.d.ts +30 -0
  398. package/src/lib/design/system/sketch/aktuell-placeholders.js +87 -0
  399. package/src/lib/design/system/sketch/aktuell-placeholders.js.map +1 -0
  400. package/src/lib/design/system/sketch/baseline.d.ts +19 -1
  401. package/src/lib/design/system/sketch/baseline.js +29 -7
  402. package/src/lib/design/system/sketch/baseline.js.map +1 -1
  403. package/src/lib/design/system/sketch/check-sketches.d.ts +10 -0
  404. package/src/lib/design/system/sketch/check-sketches.js +50 -4
  405. package/src/lib/design/system/sketch/check-sketches.js.map +1 -1
  406. package/src/lib/design/system/sketch/cli-args.d.ts +12 -2
  407. package/src/lib/design/system/sketch/cli-args.js +18 -3
  408. package/src/lib/design/system/sketch/cli-args.js.map +1 -1
  409. package/src/lib/design/system/sketch/edit-sketch.d.ts +21 -0
  410. package/src/lib/design/system/sketch/edit-sketch.js +117 -0
  411. package/src/lib/design/system/sketch/edit-sketch.js.map +1 -0
  412. package/src/lib/design/system/sketch/frame-budget.d.ts +24 -0
  413. package/src/lib/design/system/sketch/frame-budget.js +23 -0
  414. package/src/lib/design/system/sketch/frame-budget.js.map +1 -0
  415. package/src/lib/design/system/sketch/identical-renders.d.ts +31 -0
  416. package/src/lib/design/system/sketch/identical-renders.js +137 -0
  417. package/src/lib/design/system/sketch/identical-renders.js.map +1 -0
  418. package/src/lib/design/system/sketch/merge-shared.d.ts +2 -0
  419. package/src/lib/design/system/sketch/merge-shared.js +7 -10
  420. package/src/lib/design/system/sketch/merge-shared.js.map +1 -1
  421. package/src/lib/design/system/sketch/merge-step.d.ts +35 -0
  422. package/src/lib/design/system/sketch/merge-step.js +98 -0
  423. package/src/lib/design/system/sketch/merge-step.js.map +1 -0
  424. package/src/lib/design/system/sketch/merge.d.ts +10 -3
  425. package/src/lib/design/system/sketch/merge.js +103 -30
  426. package/src/lib/design/system/sketch/merge.js.map +1 -1
  427. package/src/lib/design/system/sketch/merged-layout.d.ts +17 -0
  428. package/src/lib/design/system/sketch/merged-layout.js +57 -0
  429. package/src/lib/design/system/sketch/merged-layout.js.map +1 -0
  430. package/src/lib/design/system/sketch/merged-parts.d.ts +40 -10
  431. package/src/lib/design/system/sketch/merged-parts.js +112 -49
  432. package/src/lib/design/system/sketch/merged-parts.js.map +1 -1
  433. package/src/lib/design/system/sketch/no-visible-change.d.ts +10 -0
  434. package/src/lib/design/system/sketch/no-visible-change.js +16 -6
  435. package/src/lib/design/system/sketch/no-visible-change.js.map +1 -1
  436. package/src/lib/design/system/sketch/part-definition.d.ts +21 -1
  437. package/src/lib/design/system/sketch/part-definition.js +79 -17
  438. package/src/lib/design/system/sketch/part-definition.js.map +1 -1
  439. package/src/lib/design/system/sketch/rebase-port.d.ts +24 -0
  440. package/src/lib/design/system/sketch/rebase-port.js +170 -0
  441. package/src/lib/design/system/sketch/rebase-port.js.map +1 -0
  442. package/src/lib/design/system/sketch/sample-mark-drift.d.ts +33 -0
  443. package/src/lib/design/system/sketch/sample-mark-drift.js +88 -0
  444. package/src/lib/design/system/sketch/sample-mark-drift.js.map +1 -0
  445. package/src/lib/design/system/sketch/sketch-check-worker.d.ts +1 -0
  446. package/src/lib/design/system/sketch/sketch-check-worker.js +27 -0
  447. package/src/lib/design/system/sketch/sketch-check-worker.js.map +1 -0
  448. package/src/lib/design/system/sketch/sketch-checker.d.ts +27 -0
  449. package/src/lib/design/system/sketch/sketch-checker.js +99 -0
  450. package/src/lib/design/system/sketch/sketch-checker.js.map +1 -0
  451. package/src/lib/design/system/sketch/sketch.d.ts +63 -2
  452. package/src/lib/design/system/sketch/sketch.js +185 -30
  453. package/src/lib/design/system/sketch/sketch.js.map +1 -1
  454. package/src/lib/design/system/sketch/stale-base.d.ts +22 -0
  455. package/src/lib/design/system/sketch/stale-base.js +56 -0
  456. package/src/lib/design/system/sketch/stale-base.js.map +1 -0
  457. package/src/lib/design/system/sketch/unchanged-states.d.ts +32 -0
  458. package/src/lib/design/system/sketch/unchanged-states.js +52 -13
  459. package/src/lib/design/system/sketch/unchanged-states.js.map +1 -1
  460. package/src/lib/design/system/sketch/unused-closure.js +16 -4
  461. package/src/lib/design/system/sketch/unused-closure.js.map +1 -1
  462. package/src/lib/design/system/sketch/viewed-shots.d.ts +24 -0
  463. package/src/lib/design/system/sketch/viewed-shots.js +61 -0
  464. package/src/lib/design/system/sketch/viewed-shots.js.map +1 -0
  465. package/src/lib/design/system/slow-checks.d.ts +40 -0
  466. package/src/lib/design/system/slow-checks.js +197 -0
  467. package/src/lib/design/system/slow-checks.js.map +1 -0
  468. package/src/lib/design/system/slow-run.d.ts +57 -0
  469. package/src/lib/design/system/slow-run.js +253 -0
  470. package/src/lib/design/system/slow-run.js.map +1 -0
  471. package/src/lib/design/system/stale-design-mocks.d.ts +20 -0
  472. package/src/lib/design/system/stale-design-mocks.js +59 -0
  473. package/src/lib/design/system/stale-design-mocks.js.map +1 -0
  474. package/src/lib/design/system/stale-dist.d.ts +25 -0
  475. package/src/lib/design/system/stale-dist.js +91 -0
  476. package/src/lib/design/system/stale-dist.js.map +1 -0
  477. package/src/lib/design/system/stale-parts.d.ts +30 -0
  478. package/src/lib/design/system/stale-parts.js +106 -0
  479. package/src/lib/design/system/stale-parts.js.map +1 -0
  480. package/src/lib/design/system/surface-nesting.d.ts +11 -0
  481. package/src/lib/design/system/surface-nesting.js +86 -0
  482. package/src/lib/design/system/surface-nesting.js.map +1 -0
  483. package/src/lib/design/system/system-command.js +8 -6
  484. package/src/lib/design/system/system-command.js.map +1 -1
  485. package/src/lib/design/system/system-modules.d.ts +16 -1
  486. package/src/lib/design/system/system-modules.js +18 -2
  487. package/src/lib/design/system/system-modules.js.map +1 -1
  488. package/src/lib/design/system/task-command.d.ts +51 -0
  489. package/src/lib/design/system/task-command.js +233 -0
  490. package/src/lib/design/system/task-command.js.map +1 -0
  491. package/src/lib/design/system/theming-text.d.ts +2 -0
  492. package/src/lib/design/system/theming-text.js +6 -0
  493. package/src/lib/design/system/theming-text.js.map +1 -0
  494. package/src/lib/design/system/tom-confirm.d.ts +40 -0
  495. package/src/lib/design/system/tom-confirm.js +55 -0
  496. package/src/lib/design/system/tom-confirm.js.map +1 -0
  497. package/src/lib/design/system/touched-parts.d.ts +16 -0
  498. package/src/lib/design/system/touched-parts.js +122 -0
  499. package/src/lib/design/system/touched-parts.js.map +1 -0
  500. package/src/lib/design/system/ts-source.d.ts +2 -0
  501. package/src/lib/design/system/ts-source.js +15 -1
  502. package/src/lib/design/system/ts-source.js.map +1 -1
  503. package/src/lib/design/system/unchanged-rows.d.ts +15 -0
  504. package/src/lib/design/system/unchanged-rows.js +134 -0
  505. package/src/lib/design/system/unchanged-rows.js.map +1 -0
  506. package/src/lib/design/system/uncommitted-decisions.d.ts +6 -0
  507. package/src/lib/design/system/uncommitted-decisions.js +38 -0
  508. package/src/lib/design/system/uncommitted-decisions.js.map +1 -0
  509. package/src/lib/design/system/uncovered-regions.d.ts +61 -0
  510. package/src/lib/design/system/uncovered-regions.js +171 -0
  511. package/src/lib/design/system/uncovered-regions.js.map +1 -0
  512. package/src/lib/design/system/unused-base-parts.d.ts +7 -0
  513. package/src/lib/design/system/unused-base-parts.js +76 -0
  514. package/src/lib/design/system/unused-base-parts.js.map +1 -0
  515. package/src/lib/design/system/visible-change-command.d.ts +48 -0
  516. package/src/lib/design/system/visible-change-command.js +308 -0
  517. package/src/lib/design/system/visible-change-command.js.map +1 -0
  518. package/src/lib/design/system/visible-change-parts.d.ts +28 -0
  519. package/src/lib/design/system/visible-change-parts.js +96 -0
  520. package/src/lib/design/system/visible-change-parts.js.map +1 -0
  521. package/src/lib/design/system/visible-change.d.ts +82 -0
  522. package/src/lib/design/system/visible-change.js +149 -0
  523. package/src/lib/design/system/visible-change.js.map +1 -0
  524. package/src/lib/design/thumb.d.ts +19 -2
  525. package/src/lib/design/thumb.js +50 -15
  526. package/src/lib/design/thumb.js.map +1 -1
  527. package/src/lib/design/typecheck.d.ts +1 -1
  528. package/src/lib/design/typecheck.js +3 -3
  529. package/src/lib/design/typecheck.js.map +1 -1
  530. package/src/lib/design/unstable-cells.d.ts +23 -0
  531. package/src/lib/design/unstable-cells.js +40 -0
  532. package/src/lib/design/unstable-cells.js.map +1 -0
  533. package/src/lib/design/variant-diff.js +1 -1
  534. package/src/lib/design/variant-diff.js.map +1 -1
  535. package/src/lib/design/wait.d.ts +15 -0
  536. package/src/lib/design/wait.js +30 -0
  537. package/src/lib/design/wait.js.map +1 -0
  538. package/src/lib/json-file.d.ts +11 -0
  539. package/src/lib/json-file.js +21 -0
  540. package/src/lib/json-file.js.map +1 -0
  541. package/src/lib/source-hash.d.ts +7 -0
  542. package/src/lib/source-hash.js +62 -0
  543. package/src/lib/source-hash.js.map +1 -0
  544. package/src/lib/update/agent-setup.js +2 -1
  545. package/src/lib/update/agent-setup.js.map +1 -1
  546. package/src/lib/update/migration-manifest.d.ts +12 -0
  547. package/src/lib/update/migration-manifest.js +13 -0
  548. package/src/lib/update/migration-manifest.js.map +1 -1
  549. package/src/lib/update/migration-record.js +2 -1
  550. package/src/lib/update/migration-record.js.map +1 -1
  551. package/src/lib/update/pending.js +2 -1
  552. package/src/lib/update/pending.js.map +1 -1
  553. package/src/lib/update/run-migrations.d.ts +3 -2
  554. package/src/lib/update/run-migrations.js +38 -5
  555. package/src/lib/update/run-migrations.js.map +1 -1
  556. package/src/lib/update/tasks.js +2 -1
  557. package/src/lib/update/tasks.js.map +1 -1
@@ -20,61 +20,76 @@ 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.sketchFlagHelpOf = exports.SKETCH_USAGE = void 0;
24
24
  const unused_closure_1 = require("./system/sketch/unused-closure");
25
+ const fs_1 = require("fs");
25
26
  const path_1 = require("path");
26
27
  const assets_1 = require("./system/assets");
27
28
  const comment_1 = require("./system/comments/comment");
28
29
  const product_1 = require("./system/product");
29
30
  const resolve_product_1 = require("./system/resolve-product");
30
31
  const check_format_1 = require("./system/sketch/check-format");
32
+ const frame_budget_1 = require("./system/sketch/frame-budget");
31
33
  const check_sketches_1 = require("./system/sketch/check-sketches");
32
34
  const cli_args_1 = require("./system/sketch/cli-args");
33
35
  const ready_shots_1 = require("./ready-shots");
36
+ const no_visible_change_1 = require("./system/sketch/no-visible-change");
37
+ const viewed_shots_1 = require("./system/sketch/viewed-shots");
34
38
  const merge_1 = require("./system/sketch/merge");
39
+ const merge_step_1 = require("./system/sketch/merge-step");
40
+ const check_system_1 = require("./system/check-system");
41
+ const invocation_1 = require("../invocation");
35
42
  const merged_parts_1 = require("./system/sketch/merged-parts");
36
43
  const render_check_1 = require("./system/render-check");
37
44
  const merge_preview_1 = require("./system/sketch/merge-preview");
38
45
  const open_points_1 = require("./system/open-points");
39
46
  const read_open_points_1 = require("./system/read-open-points");
40
47
  const overlay_1 = require("./system/sketch/overlay");
48
+ const rebase_port_1 = require("./system/sketch/rebase-port");
49
+ const theming_text_1 = require("./system/theming-text");
41
50
  const sketch_1 = require("./system/sketch/sketch");
42
51
  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>]',
52
+ '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] [--product <name>]',
44
53
  '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
54
  'sketch round <layer>/<name> <round> [--title <text>] [--note <text>] [--drops <state,state>] --by <model id> [--product <name>]',
46
55
  'sketch note <layer>/<name> <variant> <text> --by <model id> [--product <name>]',
47
56
  'sketch target add <layer>/<name> <layer>/<name> --by <model id> [--product <name>]',
57
+ 'sketch target remove <layer>/<name> <layer>/<name> --by <model id> [--product <name>]',
48
58
  'sketch list [--product <name>] [--json]',
49
- 'sketch report <layer>/<name> --variant <key> --by <model id> (<text> | --done) [--product <name>]',
59
+ 'sketch report <layer>/<name> --variant <key> --by <model id> (<text> | --done) [--reopen] [--product <name>]',
50
60
  'sketch ready <layer>/<name> --by <model id> [--product <name>]',
51
61
  'sketch hold <layer>/<name> --until <what the change waits on> --by <model id> [--product <name>]',
52
62
  'sketch release <layer>/<name> --by <model id> [--product <name>]',
53
63
  'sketch check [<layer>/<name>] [--fix] [--product <name>]',
54
64
  '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>]',
65
+ 'sketch rebase <layer>/<name> [--ported] --by <model id> [--product <name>]',
66
+ 'sketch merge <layer>/<name> [--note <reason> [--replace-note]] [--variant <key> --allowed-by <plan ref>] --by <model id> [--product <name>]',
57
67
  'sketch discard <layer>/<name> --by <model id> [--product <name>]',
58
68
  'sketch reject <layer>/<name> --variant <key> [--reason <text>] --by <model id | designer> [--product <name>]',
59
69
  'sketch reopen <layer>/<name> --variant <key> [--reason <text>] --by <model id | designer> [--product <name>]',
70
+ 'sketch withdraw <layer>/<name> --variant <key> --by <model id> [--product <name>]',
60
71
  ];
61
72
  const FLAG_HELP = {
62
73
  '--variants': 'the variant folders to open, a comma list: a,b,c',
63
74
  '--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
75
  '--by': 'the exact model id the coordinator gave you, e.g. claude-opus-5-5',
76
+ '--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
77
  '--like': 'start each variant from another part, or from a variant of the open sketch on it',
66
78
  '--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
79
  '--into-base': 'on a part the product overrides: start from the product copy, merge into the base and remove the copy',
80
+ '--ported': 'on rebase: the conflicting files hold the product change already, ported by hand - keep them and rebase',
68
81
  '--round': 'the title of a new round',
69
82
  '--round-note': 'what the new round shows',
70
83
  '--from': 'the variant to copy',
71
84
  '--title': 'the new title of the round',
72
85
  '--drops': 'the states the round drops on purpose, a comma list',
73
86
  '--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',
87
+ '--allowed-by': 'the plan entry that lets the merge go without a pick in Studio; noted in merged.json, needs --variant',
88
+ '--replace-note': "on merge: also write --note over each target part's note",
75
89
  '--reason': 'why; on reject of a variant that is rejected already it sets the reason of that rejection; stored with who wrote it',
76
90
  '--until': 'what the pending change waits on: an open decision, a helper still to land',
77
91
  '--done': 'end the live report of the variant',
92
+ '--reopen': 'on report: move a ready sketch back to in progress',
78
93
  '--product': 'the product; needed only when config.json declares more than one and no other product has the sketch',
79
94
  '--json': 'print JSON',
80
95
  '--fix': "write the variants in the checkout's Prettier format first",
@@ -84,7 +99,7 @@ const NOTE_HELP = {
84
99
  new: 'what the first round shows',
85
100
  variant: 'why the running round lost; needed with --round',
86
101
  round: 'what the round shows',
87
- merge: 'why this variant',
102
+ merge: "why this variant; noted in merged.json, the part's note stays",
88
103
  };
89
104
  /** One line per flag the usage line names, for `sketch <command> --help`. */
90
105
  const sketchFlagHelpOf = (usage) => {
@@ -94,7 +109,7 @@ const sketchFlagHelpOf = (usage) => {
94
109
  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
110
  };
96
111
  exports.sketchFlagHelpOf = sketchFlagHelpOf;
97
- const VERDICTS = new Set(['reject', 'reopen']);
112
+ const VERDICTS = new Set(['reject', 'reopen', 'withdraw']);
98
113
  const WRITES = new Set([
99
114
  'new',
100
115
  'target',
@@ -180,6 +195,10 @@ const created = (context) => {
180
195
  return fail(unknown);
181
196
  if (parsed === undefined || typeof parsed === 'string')
182
197
  return fail((_a = exports.SKETCH_USAGE[0]) !== null && _a !== void 0 ? _a : '');
198
+ const name = args.values['--name'];
199
+ const named = name === undefined ? parsed : (0, sketch_1.parseTarget)(`${parsed.layer}/${parsed.name}@${name}`);
200
+ if (typeof named === 'string')
201
+ return fail(named);
183
202
  const variants = ((_b = args.values['--variants']) !== null && _b !== void 0 ? _b : '').split(',').filter((variant) => variant !== '');
184
203
  const notes = variantNotesOf((_c = args.repeated['--variant-note']) !== null && _c !== void 0 ? _c : [], variants);
185
204
  if (typeof notes === 'string')
@@ -196,7 +215,7 @@ const created = (context) => {
196
215
  return fail('pass --override or --into-base, not both');
197
216
  const sketch = (0, sketch_1.createSketch)({
198
217
  product,
199
- sketch: parsed,
218
+ sketch: named,
200
219
  others: others.filter((entry) => typeof entry !== 'string'),
201
220
  variants,
202
221
  roundTitle: args.values['--round'],
@@ -228,14 +247,17 @@ const nextStepsOf = (sketch, product) => {
228
247
  return [
229
248
  'Next:',
230
249
  ` 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
250
  ...(running.note.trim() === ''
233
251
  ? [
234
252
  ` sketch round ${sketch.target} ${running.key} --product ${product} --note "<what the round shows>" --by <model id>`,
235
253
  ]
236
254
  : []),
237
255
  ` sketch check ${at}`,
256
+ ` shot ${sketch.targets[0]} --states --variants --product ${product} look at it: ready refuses a pixel diff without a viewed shot`,
238
257
  ` sketch ready ${at} --by <model id>`,
258
+ ` 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`,
259
+ ` a shared JSON file ready wrote (merged.json, go.json): commit it with \`et design commit-hunks <file> --part ${sketch.targets[0]}\`, never as a whole file another session also edits`,
260
+ theming_text_1.THEMING_TEXT,
239
261
  ];
240
262
  };
241
263
  const variantNotesOf = (pairs, variants) => {
@@ -339,9 +361,10 @@ const listed = (context) => {
339
361
  ? `, picked ${sketch.decision.variant}`
340
362
  : ', discard asked'
341
363
  : '';
342
- const rejected = sketch.variants.filter((variant) => (0, sketch_1.rejectionOf)(sketch, variant));
364
+ 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); });
365
+ 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
366
  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}` : ''}`);
367
+ 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
368
  for (const round of sketch.rounds) {
346
369
  const variants = sketch.variants.filter((variant) => { var _a; return ((_a = sketch.variantInfo[variant]) === null || _a === void 0 ? void 0 : _a.round) === round.key; });
347
370
  console.log(` ${round.key} ${round.title} ${variants.join(', ')}${round.note === '' ? '' : ` - ${round.note}`}${round.lost ? ` - lost: ${round.lost}` : ''}`);
@@ -358,13 +381,23 @@ const reported = (context) => withSketch(context, ({ sketch }) => {
358
381
  const author = (0, cli_args_1.authorOf)(context.args);
359
382
  const done = context.args.flags.has('--done');
360
383
  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`);
384
+ 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
385
  if (done) {
386
+ const notReady = roundNoteRefusalOf(sketch) === null ? roundNotReadyProblemOf(sketch) : null;
387
+ if (notReady !== null)
388
+ return fail(notReady);
363
389
  (0, sketch_1.finishSketchReport)({ checkout: context.target, sketch, variant });
364
390
  console.log(`${sketch.target} variant ${variant} marked done`);
365
391
  return 0;
366
392
  }
367
- const reported = (0, sketch_1.reportSketch)({ checkout: context.target, sketch, variant, author, message });
393
+ const reported = (0, sketch_1.reportSketch)({
394
+ checkout: context.target,
395
+ sketch,
396
+ variant,
397
+ author,
398
+ message,
399
+ reopen: context.args.flags.has('--reopen'),
400
+ });
368
401
  if (typeof reported === 'string')
369
402
  return fail(reported);
370
403
  console.log(`reported on ${sketch.target} variant ${variant}: ${message}${sketch.status === 'ready' ? ' - back in progress, mark it ready again when done' : ''}`);
@@ -401,10 +434,30 @@ const noteEdited = (context) => withSketch(context, ({ sketch }) => {
401
434
  console.log(`${edited.target} variant ${variant}: ${note}`);
402
435
  return 0;
403
436
  });
437
+ const targetRemoved = (context) => {
438
+ const usage = `usage: ${exports.SKETCH_USAGE.find((line) => line.startsWith('sketch target remove'))}`;
439
+ const rest = context.args.positional.slice(1);
440
+ const [, part] = rest;
441
+ if (rest.length !== 2 || !part)
442
+ return fail(usage);
443
+ const parsed = (0, sketch_1.parseTarget)(part);
444
+ if (typeof parsed === 'string')
445
+ return fail(parsed);
446
+ return withSketch(Object.assign(Object.assign({}, context), { args: Object.assign(Object.assign({}, context.args), { positional: rest }) }), ({ sketch }) => {
447
+ const removed = (0, sketch_1.removeTarget)({ sketch, part: parsed });
448
+ if (typeof removed === 'string')
449
+ return fail(removed);
450
+ (0, check_format_1.formatSketch)({ target: context.target, sketch: removed, variants: removed.variants });
451
+ console.log(`${removed.target} now targets ${removed.targets.join(', ')}`);
452
+ return 0;
453
+ });
454
+ };
404
455
  const targetAdded = (context) => {
405
456
  const [action, ...rest] = context.args.positional;
406
457
  const [, part] = rest;
407
458
  const usage = `usage: ${exports.SKETCH_USAGE.find((line) => line.startsWith('sketch target '))}`;
459
+ if (action === 'remove')
460
+ return targetRemoved(context);
408
461
  if (action !== 'add' || rest.length !== 2 || !part)
409
462
  return fail(usage);
410
463
  const parsed = (0, sketch_1.parseTarget)(part);
@@ -433,33 +486,61 @@ const readied = (context) => {
433
486
  return renderedAndReady(context, found);
434
487
  };
435
488
  const renderedAndReady = (context, found) => __awaiter(void 0, void 0, void 0, function* () {
489
+ var _a;
436
490
  const { product, sketch } = found;
437
491
  const rendered = yield renderedVariantsOf({
438
492
  target: context.target,
439
493
  config: context.config,
440
494
  product,
441
- entries: sketch.variants.map((variant) => ({ sketch, variant })),
495
+ entries: sketch.variants.filter((variant) => !(0, sketch_1.rejectionOf)(sketch, variant)).map((variant) => ({ sketch, variant })),
442
496
  drawn: false,
443
497
  });
444
498
  if ('issues' in rendered && rendered.issues.length > 0)
445
499
  return fail(`${sketch.target} has problems - fix them before ready`);
500
+ const busyAdded = 'issues' in rendered ? openPointLinesOf({ product, sketch, busy: (_a = rendered.busy) !== null && _a !== void 0 ? _a : [] }).added : [];
501
+ if (busyAdded.length > 0)
502
+ return fail(`${busyAdded.join('\n')}\n${sketch.target} adds open points - close them before ready`);
446
503
  return loadedAndReady(context, found);
447
504
  });
448
505
  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 });
506
+ var _b, _c;
507
+ const unloaded = yield unloadedLinesOf({ target: context.target, config: context.config, product, sketch });
451
508
  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`);
509
+ return fail(`${unloaded.join('\n')}\n${sketch.target} does not load - fix it before ready`);
510
+ const drifts = yield (0, ready_shots_1.sampleMarkDriftLines)({ target: context.target, config: context.config, product, sketch });
511
+ if (drifts.length > 0)
512
+ return fail(`${drifts.join('\n')}\n${sketch.target} draws one sample with different marks - align them before ready`);
513
+ const identical = yield (0, ready_shots_1.identicalRenderLines)({ target: context.target, config: context.config, product, sketch });
514
+ if (identical.length > 0)
515
+ return fail(`${identical.join('\n')}\n${sketch.target} draws variants alike - fix them before ready`);
516
+ const changes = sketch.targets.every((key) => product.parts.some((part) => (0, resolve_product_1.partKeyOf)(part) === key))
517
+ ? yield (0, ready_shots_1.variantChangesShown)({ target: context.target, config: context.config, product, sketch })
518
+ : null;
519
+ const unviewed = Array.isArray(changes)
520
+ ? (0, viewed_shots_1.unviewedShotLinesOf)({
521
+ target: context.target,
522
+ invocation: (_b = context.invocation) !== null && _b !== void 0 ? _b : (0, invocation_1.repoInvocation)({ root: context.target, subcommand: 'design' }),
523
+ sketch,
524
+ changes,
525
+ })
526
+ : [];
527
+ if (unviewed.length > 0)
528
+ return fail(`${unviewed.join('\n')}\n${sketch.target} draws a pixel diff - view its shot before ready`);
453
529
  const ready = sketch.status === 'ready'
454
530
  ? 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 });
531
+ : (0, sketch_1.markSketchReady)({ checkout: context.target, sketch, author: (_c = (0, cli_args_1.authorOf)(context.args)) !== null && _c !== void 0 ? _c : undefined });
456
532
  if (typeof ready === 'string')
457
533
  return fail(ready);
458
- return autoMerged({ context, product, sketch: ready, again: sketch.status === 'ready' });
534
+ return autoMerged({ context, product, sketch: ready, again: sketch.status === 'ready', changes });
459
535
  });
460
- const autoMerged = (options) => __awaiter(void 0, void 0, void 0, function* () {
536
+ const stillReady = (options) => {
537
+ if (options.again)
538
+ console.log(`${options.sketch.target} is still ready`);
539
+ return 0;
540
+ };
541
+ const autoMerged = (options) => {
461
542
  var _a, _b;
462
- const { context, product, sketch, again } = options;
543
+ const { context, product, sketch, again, changes } = options;
463
544
  if (!again)
464
545
  console.log(`${sketch.target} is ready`);
465
546
  for (const variant of sketch.variants.filter((candidate) => !(0, sketch_1.rejectionOf)(sketch, candidate))) {
@@ -467,70 +548,120 @@ const autoMerged = (options) => __awaiter(void 0, void 0, void 0, function* () {
467
548
  if (shared.length > 0)
468
549
  console.log(`variant ${variant}: a shared/ edit reaches ${shared.join(', ')}`);
469
550
  }
470
- if (!sketch.targets.every((key) => product.parts.some((part) => (0, resolve_product_1.partKeyOf)(part) === key))) {
551
+ if (changes === null) {
471
552
  console.log('auto-merge skipped: new part, the user merges');
472
- return again ? fail(`${sketch.target} is ready, not in progress`) : 0;
553
+ return stillReady({ sketch, again });
473
554
  }
474
- const noChange = yield (0, ready_shots_1.shotsShowNoChange)({ target: context.target, config: context.config, product, sketch });
555
+ const noChange = typeof changes === 'string' ? changes : (0, no_visible_change_1.noChangeOf)(changes);
475
556
  if (noChange !== true) {
476
557
  console.log(`auto-merge skipped: ${noChange}`);
477
- return again ? fail(`${sketch.target} is ready, not in progress`) : 0;
558
+ return stillReady({ sketch, again });
478
559
  }
479
560
  const author = (_a = (0, cli_args_1.authorOf)(context.args)) !== null && _a !== void 0 ? _a : undefined;
480
561
  const variant = (_b = sketch.variants.find((candidate) => !(0, sketch_1.rejectionOf)(sketch, candidate))) !== null && _b !== void 0 ? _b : '';
562
+ const sketchFile = (0, path_1.resolve)(sketch.dir, sketch_1.SKETCH_FILE);
563
+ const undecided = (0, fs_1.readFileSync)(sketchFile, 'utf8');
481
564
  const decided = (0, sketch_1.decideSketch)({ sketch, decision: { kind: 'pick', variant } });
482
565
  if (typeof decided === 'string')
483
566
  return fail(decided);
484
- const result = (0, merge_1.mergeSketch)({ target: context.target, config: context.config, product, sketch: decided, author });
567
+ const written = sharedFilesOf(product);
568
+ const before = written.map((file) => contentOf(file));
569
+ const result = (0, merge_1.mergeSketch)({
570
+ target: context.target,
571
+ config: context.config,
572
+ product,
573
+ sketch: decided,
574
+ author,
575
+ decidedBy: 'auto: no visible change',
576
+ });
485
577
  if (!Array.isArray(result)) {
578
+ (0, fs_1.writeFileSync)(sketchFile, undecided);
486
579
  console.warn(`${sketch.target} shows no visible change but did not merge: ${result.reason}`);
487
580
  return 0;
488
581
  }
489
- for (const part of sketch.targets)
490
- (0, merged_parts_1.recordAutoMerge)({ product, part, by: author !== null && author !== void 0 ? author : 'user' });
491
582
  console.log(`No visible change in any state: merged ${sketch.targets.join(', ')} automatically.`);
583
+ commitHunksLines({
584
+ target: context.target,
585
+ files: written.filter((file, index) => contentOf(file) !== before[index]),
586
+ parts: sketch.targets,
587
+ }).forEach((line) => console.log(line));
492
588
  return 0;
493
- });
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)`);
497
589
  };
590
+ const contentOf = (file) => ((0, fs_1.existsSync)(file) ? (0, fs_1.readFileSync)(file, 'utf8') : null);
591
+ const sharedFilesOf = (product) => [
592
+ (0, path_1.resolve)(product.dir, merged_parts_1.MERGED_FILE),
593
+ ...(product.base ? [(0, path_1.resolve)(product.base.dir, merged_parts_1.MERGED_FILE)] : []),
594
+ ];
595
+ const commitHunksLines = ({ target, files, parts }) => files.length === 0
596
+ ? []
597
+ : [
598
+ 'Shared files written; commit only the hunks of this sketch, never the whole file another session also edits:',
599
+ ...files.map((file) => ` et design commit-hunks ${(0, path_1.relative)(target, file)} ${parts.map((part) => `--part ${part}`).join(' ')}`),
600
+ ];
601
+ 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)`));
602
+ const variantGateProblemsOf = (options) => [...options.problems, ...(0, check_format_1.formatProblemsOf)(options), ...(0, unused_closure_1.unusedInVariantOf)(options)];
603
+ const busyOfVariant = (busy, sketch) => busy
604
+ .filter((entry) => { var _a; return ((_a = entry.sketch) === null || _a === void 0 ? void 0 : _a.target) === sketch.target && entry.sketch.variant === sketch.variant; })
605
+ .map(({ part, state }) => ({ part, state }));
606
+ const openPointLinesOf = ({ product, sketch, busy = [], }) => {
607
+ const pointLinesOf = (variant, list) => (0, open_points_1.openPointsText)(product.name, list)
608
+ .slice(1)
609
+ .map((line) => `${sketch.target} ${variant}: ${line.trim()}`);
610
+ const points = sketch.variants
611
+ .filter((variant) => !(0, sketch_1.rejectionOf)(sketch, variant))
612
+ .map((variant) => (Object.assign({ variant }, (0, read_open_points_1.sketchOpenPointsOf)({
613
+ merged: product,
614
+ variant: (0, overlay_1.overlaySketch)({ product, sketch, variant }),
615
+ targets: sketch.targets,
616
+ busy: { merged: [], variant: busyOfVariant(busy, { target: sketch.target, variant }) },
617
+ }))));
618
+ return {
619
+ added: points.flatMap(({ variant, added }) => pointLinesOf(variant, added)),
620
+ inherited: points.flatMap(({ variant, inherited }) => pointLinesOf(variant, inherited)),
621
+ };
622
+ };
623
+ const roundNoteRefusalOf = (sketch) => {
624
+ const running = (0, sketch_1.runningRoundOf)(sketch);
625
+ return running.note.trim() === ''
626
+ ? `${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>`
627
+ : null;
628
+ };
629
+ const roundNotReadyProblemOf = (sketch) => sketch.status === 'ready' || sketch.hold
630
+ ? null
631
+ : `ROUND-NOT-READY ${sketch.target}: round ${(0, sketch_1.runningRoundOf)(sketch).key} is drawn but still in progress - run \`design sketch ready ${sketch.target}\``;
632
+ 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}`); });
498
633
  const readyRefusalOf = (context, { product, sketch }) => {
499
634
  const lineOf = (variant, problem) => `${sketch.target} ${variant}: ${problem.rule} ${(0, path_1.relative)(context.target, problem.file)}: ${problem.message}`;
500
635
  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)));
636
+ found.forEach((entry) => noteProblemsBefore(Object.assign({ target: context.target }, entry)));
637
+ const problems = found
638
+ .filter(({ variant }) => !(0, sketch_1.rejectionOf)(sketch, variant))
639
+ .flatMap(({ variant, problems }) => variantGateProblemsOf({ target: context.target, product, sketch, variant, problems }).map((problem) => lineOf(variant, problem)));
507
640
  sketch.variants.forEach((variant) => (0, check_sketches_1.variantWarningsOf)({ target: context.target, product, sketch, variant }).forEach((warning) => console.warn(`${sketch.target} ${variant}: ${warning}`)));
508
641
  if (problems.length > 0)
509
642
  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
643
+ const { added, inherited } = openPointLinesOf({ product, sketch });
644
+ inherited.forEach((line) => console.log(`NOTE ${line} (inherited from the merged part)`));
645
+ sketch.variants
514
646
  .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;
647
+ .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}`)));
648
+ if (added.length > 0)
649
+ return fail(`${added.join('\n')}\n${sketch.target} adds open points - close them before ready`);
650
+ const noNote = roundNoteRefusalOf(sketch);
651
+ return noNote === null ? null : fail(noNote);
530
652
  };
531
653
  const rebased = (context) => withSketch(context, ({ product, sketch }) => {
654
+ const kept = context.args.flags.has('--ported');
655
+ const { ported, conflicts } = (0, rebase_port_1.portBaseChanges)({ target: context.target, product, sketch, keepConflicts: kept });
656
+ if (kept)
657
+ conflicts.forEach((line) => console.log(`KEPT ${line} (ported by hand)`));
658
+ else if (conflicts.length > 0)
659
+ return fail(`${conflicts.join('\n')}\n${sketch.target} not rebased - port these by hand, then run sketch rebase again`);
660
+ ported.forEach(({ variant, file, how }) => console.log(`PORTED ${variant}: ${file} (${how})`));
532
661
  (0, sketch_1.rebaseSketch)({ product, sketch });
533
662
  console.log(`${sketch.target} now compares with the product as it is`);
663
+ if (ported.length > 0 && sketch.status === 'ready')
664
+ console.log(`variants changed - run sketch ready ${sketch.target} to check them again`);
534
665
  return 0;
535
666
  });
536
667
  const held = (context) => withSketch(context, ({ sketch }) => {
@@ -552,8 +683,12 @@ const released = (context) => withSketch(context, ({ sketch }) => {
552
683
  console.log(`${freed.target} is no longer held - mark it ready once the change is in`);
553
684
  return 0;
554
685
  });
686
+ const beforeLinesOf = ({ sketches, before }) => [...new Set(sketches)].flatMap((sketch) => (0, render_check_1.groupedIssueLinesOf)(before
687
+ .filter((issue) => sketch.targets.includes(issue.part))
688
+ .map((issue) => (Object.assign(Object.assign({}, issue), { sketch: { target: sketch.target, variant: 'before' } })))));
689
+ exports.beforeLinesOf = beforeLinesOf;
555
690
  const renderedVariantsOf = (_a) => __awaiter(void 0, [_a], void 0, function* ({ target, config, product, entries, drawn, }) {
556
- var _b, _c;
691
+ var _b, _c, _d;
557
692
  const rendered = yield (0, render_check_1.renderIssuesOf)({
558
693
  target,
559
694
  config,
@@ -565,6 +700,10 @@ const renderedVariantsOf = (_a) => __awaiter(void 0, [_a], void 0, function* ({
565
700
  parts: [...preview.changed, ...preview.affected],
566
701
  };
567
702
  }),
703
+ before: [...new Set(entries.flatMap(({ sketch }) => sketch.targets))].map((part) => ({
704
+ product: product.name,
705
+ part,
706
+ })),
568
707
  });
569
708
  if ('unavailable' in rendered)
570
709
  console.log(`RENDER CHECK SKIPPED - ${rendered.unavailable}`);
@@ -588,19 +727,29 @@ const renderedVariantsOf = (_a) => __awaiter(void 0, [_a], void 0, function* ({
588
727
  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
728
  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
729
  (0, render_check_1.groupedIssueLinesOf)(rendered.issues).forEach((line) => console.error(line));
730
+ (0, exports.beforeLinesOf)({ sketches: entries.map((entry) => entry.sketch), before: (_d = rendered.before) !== null && _d !== void 0 ? _d : [] }).forEach((line) => console.log(line));
591
731
  }
592
732
  return rendered;
593
733
  });
594
734
  const checked = (context) => __awaiter(void 0, void 0, void 0, function* () {
735
+ var _a, _b, _c;
595
736
  const { target, config, args } = context;
596
737
  const product = sketchProductOf(context);
597
738
  if (typeof product === 'string')
598
739
  return fail(product);
599
740
  const asked = args.positional[0];
600
741
  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)
742
+ const named = asked === undefined ? variants : variants.filter((entry) => entry.sketch.target === asked);
743
+ if (asked !== undefined && named.length === 0)
603
744
  return fail(`NO SKETCH on ${asked} in ${product.name}`);
745
+ const isSkipped = ({ sketch, variant }) => Boolean((0, sketch_1.rejectionOf)(sketch, variant));
746
+ const chosen = named.filter((entry) => !isSkipped(entry));
747
+ named
748
+ .filter(isSkipped)
749
+ .forEach(({ sketch, variant }) => {
750
+ var _a;
751
+ 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`);
752
+ });
604
753
  if (args.flags.has('--fix'))
605
754
  new Set(chosen.map((entry) => entry.sketch)).forEach((sketch) => (0, check_format_1.formatSketch)({ target, sketch, variants: sketch.variants }));
606
755
  let failed = asked === undefined && unreadable.length > 0;
@@ -610,13 +759,19 @@ const checked = (context) => __awaiter(void 0, void 0, void 0, function* () {
610
759
  if (sketch.hold)
611
760
  console.warn(`HELD ${sketch.target}: until ${sketch.hold.until}`);
612
761
  });
762
+ const stale = (0, check_system_1.staleSketchBasesOf)({
763
+ product,
764
+ invocation: (_a = context.invocation) !== null && _a !== void 0 ? _a : (0, invocation_1.repoInvocation)({ root: target, subcommand: 'design' }),
765
+ targets: new Set(chosen.map((entry) => entry.sketch.target)),
766
+ });
767
+ stale.forEach((problem) => console.error(problem.line));
768
+ failed || (failed = stale.length > 0);
613
769
  for (const { sketch, variant, problems, before } of chosen) {
614
770
  const typed = (0, check_sketches_1.typecheckVariant)({ target, product, sketch, variant });
615
- noteProblemsBefore({ sketch, variant, before });
771
+ noteProblemsBefore({ target, sketch, variant, before });
616
772
  (0, check_sketches_1.variantWarningsOf)({ target, product, sketch, variant }).forEach((warning) => console.warn(`${sketch.target} ${variant}: ${warning}`));
617
773
  const all = [
618
- ...problems,
619
- ...(0, check_format_1.formatProblemsOf)({ target, sketch, variant }),
774
+ ...variantGateProblemsOf({ target, product, sketch, variant, problems }),
620
775
  ...(typed.kind === 'failed' ? [{ rule: 'TYPE-ERROR', file: sketch.dir, message: `\n${typed.output}` }] : []),
621
776
  ...(typed.kind === 'unavailable' ? [{ rule: 'NO-TYPE-CHECKER', file: sketch.dir, message: typed.message }] : []),
622
777
  ];
@@ -625,18 +780,63 @@ const checked = (context) => __awaiter(void 0, void 0, void 0, function* () {
625
780
  }
626
781
  failed || (failed = all.length > 0);
627
782
  }
783
+ if (!failed)
784
+ for (const sketch of new Set(chosen.map((entry) => entry.sketch)))
785
+ (yield (0, ready_shots_1.aktuellPlaceholderWarnings)({ target, config, product, sketch })).forEach((warning) => console.warn(warning));
786
+ const rendered = failed
787
+ ? null
788
+ : yield renderedVariantsOf({
789
+ target,
790
+ config,
791
+ product,
792
+ entries: chosen,
793
+ drawn: true,
794
+ });
795
+ const busy = rendered !== null && 'issues' in rendered ? ((_b = rendered.busy) !== null && _b !== void 0 ? _b : []) : [];
796
+ if (rendered !== null && 'issues' in rendered)
797
+ (0, frame_budget_1.frameBudgetWarningsOf)({
798
+ drawn: rendered.drawn,
799
+ targets: [...new Set(chosen.map((entry) => entry.sketch))].map((sketch) => {
800
+ var _a;
801
+ return ({
802
+ target: sketch.target,
803
+ part: (_a = sketch.targets[0]) !== null && _a !== void 0 ? _a : sketch.target,
804
+ });
805
+ }),
806
+ }).forEach((warning) => console.warn(warning));
807
+ let refused = 0;
808
+ let notReady = false;
809
+ const refuse = (lines) => {
810
+ lines.forEach((line) => console.warn(`ready will refuse: ${line}`));
811
+ refused += lines.length;
812
+ };
813
+ for (const sketch of new Set(chosen.map((entry) => entry.sketch))) {
814
+ const unloaded = yield unloadedLinesOf({ target, config, product, sketch });
815
+ const before = refused;
816
+ refuse([
817
+ ...unloaded,
818
+ ...openPointLinesOf({ product, sketch, busy }).added,
819
+ ...[(_c = roundNoteRefusalOf(sketch)) !== null && _c !== void 0 ? _c : []].flat(),
820
+ ]);
821
+ if (!failed && unloaded.length === 0) {
822
+ refuse(yield (0, ready_shots_1.sampleMarkDriftLines)({ target, config, product, sketch }));
823
+ refuse(yield (0, ready_shots_1.identicalRenderLines)({ target, config, product, sketch }));
824
+ }
825
+ if (!failed && refused === before) {
826
+ const problem = roundNotReadyProblemOf(sketch);
827
+ if (problem !== null) {
828
+ console.error(problem);
829
+ notReady = true;
830
+ }
831
+ }
832
+ }
628
833
  if (failed)
629
834
  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)
835
+ if (rendered !== null && 'issues' in rendered && rendered.issues.length > 0)
836
+ return 1;
837
+ if (notReady)
638
838
  return 1;
639
- console.log('ok');
839
+ console.log(refused > 0 ? `check ok - ready will refuse ${refused} (see above)` : 'ok');
640
840
  return 0;
641
841
  });
642
842
  const previewed = (context) => withSketch(context, ({ product, sketch }) => {
@@ -655,39 +855,33 @@ const previewed = (context) => withSketch(context, ({ product, sketch }) => {
655
855
  }
656
856
  return 0;
657
857
  });
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
858
  const merged = (context) => withSketch(context, ({ product, sketch }) => {
666
- var _a, _b, _c, _d;
859
+ var _a, _b;
667
860
  const { '--note': note, '--variant': flagVariant, '--allowed-by': planRef } = context.args.values;
861
+ const replaceNote = context.args.flags.has('--replace-note');
668
862
  if (context.args.positional.length > 1)
669
863
  return fail(`usage: sketch merge <layer>/<name> [--note <reason>] - it merges the variant the user picked`);
864
+ if (replaceNote && (note !== null && note !== void 0 ? note : '').trim() === '')
865
+ return fail('--replace-note needs --note <the new part note>');
670
866
  if ((flagVariant === undefined) !== (planRef === undefined))
671
867
  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)({
868
+ const by = (_a = (0, cli_args_1.authorOf)(context.args)) !== null && _a !== void 0 ? _a : undefined;
869
+ const allowed = flagVariant !== undefined && planRef !== undefined && ((_b = sketch.decision) === null || _b === void 0 ? void 0 : _b.kind) !== 'pick'
870
+ ? { variant: flagVariant, planRef }
871
+ : undefined;
872
+ const result = (0, merge_step_1.mergeAndRecord)({
677
873
  target: context.target,
678
874
  config: context.config,
679
875
  product,
680
- sketch: decidedSketch,
876
+ sketch,
681
877
  note,
682
- author: (_b = (0, cli_args_1.authorOf)(context.args)) !== null && _b !== void 0 ? _b : undefined,
878
+ replaceNote,
879
+ by,
880
+ allowed,
683
881
  });
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(', ')}`);
882
+ if (typeof result === 'string')
883
+ return fail(result);
884
+ console.log(`merged ${sketch.target} variant ${result.variant} into ${product.name}: ${result.parts.join(', ')}`);
691
885
  return 0;
692
886
  });
693
887
  const discarded = (context) => withSketch(context, ({ sketch }) => {
@@ -701,27 +895,37 @@ const discarded = (context) => withSketch(context, ({ sketch }) => {
701
895
  const verdictOriginOf = (by, of) => of && of !== by ? ` (reason by the ${of})` : '';
702
896
  /** The verdicts a variant had, oldest first, and whether it is rejected now. */
703
897
  const verdictLinesOf = (sketch, variant) => {
704
- var _a, _b;
898
+ var _a, _b, _c;
705
899
  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];
900
+ const lines = history.flatMap((rejection) => {
901
+ var _a;
902
+ return [
903
+ ` ${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}` : ''}`,
904
+ ...(rejection.reopened
905
+ ? [
906
+ ` reopened by the ${rejection.reopened.by} at ${rejection.reopened.decidedAt}${rejection.reopened.reason ? `: ${rejection.reopened.reason}` : ''}`,
907
+ ]
908
+ : []),
909
+ ];
910
+ });
911
+ return [
912
+ `${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'}`,
913
+ ...lines,
914
+ ];
715
915
  };
716
916
  exports.verdictLinesOf = verdictLinesOf;
717
917
  const judged = (kind) => (context) => withSketch(context, ({ sketch }) => {
718
- var _a;
918
+ var _a, _b;
719
919
  const { positional, values } = context.args;
720
920
  const variant = values['--variant'];
721
921
  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';
922
+ const author = (_b = (0, cli_args_1.authorOf)(context.args)) !== null && _b !== void 0 ? _b : '';
923
+ const by = author === 'designer' ? 'designer' : 'agent';
723
924
  if (positional.length !== 1 || !variant)
724
925
  return fail(`usage: sketch ${kind} <layer>/<name> --variant <key> [--reason <text>] --by <model id | designer> [--product <name>]`);
926
+ const invalid = (0, cli_args_1.verdictByProblemOf)(author);
927
+ if (invalid)
928
+ return fail(invalid);
725
929
  const decision = kind === 'reject' && reason && (0, sketch_1.rejectionOf)(sketch, variant)
726
930
  ? { kind: 'reason', variant, reason, by }
727
931
  : Object.assign(Object.assign({ kind, variant }, (reason ? { reason } : {})), { by });
@@ -731,6 +935,38 @@ const judged = (kind) => (context) => withSketch(context, ({ sketch }) => {
731
935
  (0, exports.verdictLinesOf)(decided, variant).forEach((line) => console.log(line));
732
936
  return 0;
733
937
  });
938
+ const withdrawn = (context) => {
939
+ const found = productAndSketchOf(context);
940
+ if (typeof found === 'string')
941
+ return fail(found);
942
+ return withdrawnVariant(context, found);
943
+ };
944
+ const withdrawnVariant = (context_1, _a) => __awaiter(void 0, [context_1, _a], void 0, function* (context, { product, sketch }) {
945
+ var _b;
946
+ const { positional, values } = context.args;
947
+ const variant = values['--variant'];
948
+ const by = (_b = (0, cli_args_1.authorOf)(context.args)) !== null && _b !== void 0 ? _b : '';
949
+ if (positional.length !== 1 || !variant)
950
+ return fail('usage: sketch withdraw <layer>/<name> --variant <key> --by <model id> [--product <name>]');
951
+ if (by === 'designer')
952
+ return fail('sketch withdraw is for the agent that drew the variant: --by must be a model id, not designer');
953
+ const invalid = (0, cli_args_1.verdictByProblemOf)(by);
954
+ if (invalid)
955
+ return fail(invalid);
956
+ if (!sketch.variants.includes(variant))
957
+ return fail(`${sketch.target} has no variant "${variant}" - it has ${sketch.variants.join(', ')}`);
958
+ if (!(0, sketch_1.authorsOf)(sketch, variant).includes(by))
959
+ return fail(`${sketch.target} variant ${variant} was not drawn by ${by} - only the agent that drew it withdraws it`);
960
+ const identical = yield (0, ready_shots_1.identicalRenders)({ target: context.target, config: context.config, product, sketch });
961
+ const twin = identical.find((render) => render.variant === variant && render.sibling !== null);
962
+ if (!twin)
963
+ 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`);
964
+ const result = (0, sketch_1.withdrawVariant)({ sketch, variant, by, reason: `identisch mit ${twin.sibling}` });
965
+ if (typeof result === 'string')
966
+ return fail(result);
967
+ console.log(`withdrew ${sketch.target} variant ${variant} (identisch mit ${twin.sibling})`);
968
+ return 0;
969
+ });
734
970
  const COMMANDS = {
735
971
  new: created,
736
972
  variant: varied,
@@ -749,32 +985,28 @@ const COMMANDS = {
749
985
  target: targetAdded,
750
986
  reject: judged('reject'),
751
987
  reopen: judged('reopen'),
988
+ withdraw: withdrawn,
989
+ };
990
+ /** The value flags and switches the usage line of a sketch command names. */
991
+ const flagsOf = (command) => {
992
+ var _a;
993
+ const line = (_a = exports.SKETCH_USAGE.find((usage) => usage.startsWith(`sketch ${command} `))) !== null && _a !== void 0 ? _a : '';
994
+ const named = [...line.matchAll(/(--[a-z-]+)( (?=[<a-z0-9]))?/gu)];
995
+ const unique = (flags) => [...new Set(flags)];
996
+ return {
997
+ values: unique(named.filter(([, , value]) => value).map(([, flag]) => flag !== null && flag !== void 0 ? flag : '')),
998
+ switches: unique(named.filter(([, , value]) => !value).map(([, flag]) => flag !== null && flag !== void 0 ? flag : '')),
999
+ };
752
1000
  };
753
1001
  /**
754
1002
  * `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.
1003
+ * discards sketches, and rejects, reopens and withdraws their variants.
756
1004
  */
757
1005
  const designSketch = (options) => {
758
1006
  const { target, argv, invocation } = options;
759
1007
  const [command = '', ...rest] = argv;
760
1008
  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
- ]);
1009
+ const args = (0, cli_args_1.argsOf)(rest, flagsOf(command));
778
1010
  const unauthored = typeof args !== 'string' && WRITES.has(command) && (0, cli_args_1.authorOf)(args) === null;
779
1011
  if (!run || typeof args === 'string' || unauthored) {
780
1012
  if (typeof args === 'string')
@@ -789,7 +1021,7 @@ const designSketch = (options) => {
789
1021
  const config = (0, cli_args_1.configOf)(target);
790
1022
  if (typeof config === 'string')
791
1023
  return fail(config);
792
- return run({ target, config, args });
1024
+ return run({ target, config, args, invocation });
793
1025
  };
794
1026
  exports.designSketch = designSketch;
795
1027
  //# sourceMappingURL=sketch-command.js.map