@litfamily/litopencode 1.0.7 → 1.0.9

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 (723) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README-Ko-KR.md +314 -31
  3. package/README.md +312 -29
  4. package/dist/activation-primary-prompts.d.ts +1 -0
  5. package/dist/activation-primary-prompts.js +16 -0
  6. package/dist/activation-probe.js +4 -1
  7. package/dist/activation-prompt-utils.d.ts +1 -1
  8. package/dist/activation-routing.d.ts +6 -1
  9. package/dist/activation-routing.js +174 -16
  10. package/dist/activation-workflow-prompts.d.ts +1 -1
  11. package/dist/activation-workflow-prompts.js +18 -17
  12. package/dist/activation.d.ts +3 -2
  13. package/dist/activation.js +6 -6
  14. package/dist/agents/defaults.js +14 -6
  15. package/dist/cli/command-aliases.js +24 -22
  16. package/dist/cli/doctor.js +3 -0
  17. package/dist/cli/install-report.d.ts +1 -0
  18. package/dist/cli/install-report.js +4 -0
  19. package/dist/cli/install.js +7 -4
  20. package/dist/cli/managed-skill-assets.d.ts +1 -1
  21. package/dist/cli/managed-skill-assets.js +15 -5
  22. package/dist/cli/motion-runtime.d.ts +6 -0
  23. package/dist/cli/motion-runtime.js +46 -0
  24. package/dist/cli/native-skill-install.js +32 -9
  25. package/dist/cli/native-skill-integrity.js +1 -0
  26. package/dist/cli/native-skills.d.ts +2 -0
  27. package/dist/cli/native-skills.js +2 -1
  28. package/dist/cli/office-dependencies.d.ts +14 -0
  29. package/dist/cli/office-dependencies.js +24 -0
  30. package/dist/cli.js +13 -3
  31. package/dist/commands.d.ts +2 -11
  32. package/dist/commands.js +9 -17
  33. package/dist/deliverable-hedge-guard.d.ts +20 -21
  34. package/dist/deliverable-hedge-guard.js +234 -275
  35. package/dist/features.d.ts +81 -2
  36. package/dist/features.js +80 -13
  37. package/dist/hooks.d.ts +3 -2
  38. package/dist/hooks.js +4 -4
  39. package/dist/ignition.d.ts +1 -1
  40. package/dist/ignition.js +15 -4
  41. package/dist/index.d.ts +1 -1
  42. package/dist/index.js +1 -1
  43. package/dist/interface-handoff.d.ts +1 -0
  44. package/dist/interface-handoff.js +1 -0
  45. package/dist/motion-image-reads.d.ts +6 -0
  46. package/dist/motion-image-reads.js +46 -0
  47. package/dist/server.js +13 -11
  48. package/dist/skill-renames.d.ts +4 -2
  49. package/dist/skill-renames.js +12 -4
  50. package/dist/skills.d.ts +31 -3
  51. package/dist/skills.js +53 -9
  52. package/dist/tools.js +4 -4
  53. package/docs/ab/S11/baseline-desktop.webp +0 -0
  54. package/docs/ab/S11/baseline-phone.webp +0 -0
  55. package/docs/ab/S11/lit-desktop.webp +0 -0
  56. package/docs/ab/S11/lit-phone.webp +0 -0
  57. package/docs/ab/S3/baseline-desktop.webp +0 -0
  58. package/docs/ab/S3/baseline-phone.webp +0 -0
  59. package/docs/ab/S3/lit-desktop.webp +0 -0
  60. package/docs/ab/S3/lit-phone.webp +0 -0
  61. package/docs/ab/S4/baseline-desktop.webp +0 -0
  62. package/docs/ab/S4/baseline-phone.webp +0 -0
  63. package/docs/ab/S4/lit-desktop.webp +0 -0
  64. package/docs/ab/S4/lit-phone.webp +0 -0
  65. package/docs/ab/S5/lit-slides.webp +0 -0
  66. package/docs/ab/S7/lit-diagram.webp +0 -0
  67. package/docs/ab/S8/baseline-slides.webp +0 -0
  68. package/docs/ab/S8/lit-slides.webp +0 -0
  69. package/docs/ab/S9/lit-pages.webp +0 -0
  70. package/docs/assets/cover-motion-still.webp +0 -0
  71. package/docs/assets/cover-motion.webp +0 -0
  72. package/docs/assets/readme/badge-version.svg +1 -1
  73. package/docs/assets/skills/autoconference.webp +0 -0
  74. package/docs/assets/skills/automatic-guards.webp +0 -0
  75. package/docs/assets/skills/autoresearch.webp +0 -0
  76. package/docs/assets/skills/browser-drive.webp +0 -0
  77. package/docs/assets/skills/debugging.webp +0 -0
  78. package/docs/assets/skills/deep-interview.webp +0 -0
  79. package/docs/assets/skills/doctor-installer.webp +0 -0
  80. package/docs/assets/skills/durable-litgoal.webp +0 -0
  81. package/docs/assets/skills/frontend-ui-ux.webp +0 -0
  82. package/docs/assets/skills/lit-burnoff-file.webp +0 -0
  83. package/docs/assets/skills/lit-burnoff.webp +0 -0
  84. package/docs/assets/skills/lit-code.webp +0 -0
  85. package/docs/assets/skills/lit-commit.webp +0 -0
  86. package/docs/assets/skills/lit-comprehend.webp +0 -0
  87. package/docs/assets/skills/lit-crucible.webp +0 -0
  88. package/docs/assets/skills/lit-diagram-drawer.webp +0 -0
  89. package/docs/assets/skills/lit-docx.webp +0 -0
  90. package/docs/assets/skills/lit-fetch.webp +0 -0
  91. package/docs/assets/skills/lit-handoff.webp +0 -0
  92. package/docs/assets/skills/lit-humanizer.webp +0 -0
  93. package/docs/assets/skills/lit-init.webp +0 -0
  94. package/docs/assets/skills/lit-plan.webp +0 -0
  95. package/docs/assets/skills/lit-pptx.webp +0 -0
  96. package/docs/assets/skills/lit-recap.webp +0 -0
  97. package/docs/assets/skills/lit-scientific-visualization.webp +0 -0
  98. package/docs/assets/skills/lit-typographic-motion.webp +0 -0
  99. package/docs/assets/skills/litresearch.webp +0 -0
  100. package/docs/assets/skills/litwork.webp +0 -0
  101. package/docs/assets/skills/lsp-setup.webp +0 -0
  102. package/docs/assets/skills/lsp.webp +0 -0
  103. package/docs/assets/skills/readme-studio.webp +0 -0
  104. package/docs/assets/skills/refactor.webp +0 -0
  105. package/docs/assets/skills/review-work.webp +0 -0
  106. package/docs/assets/skills/rules.webp +0 -0
  107. package/docs/assets/skills/start-work.webp +0 -0
  108. package/docs/assets/skills/structural-search.webp +0 -0
  109. package/docs/assets/skills/visual-qa.webp +0 -0
  110. package/docs/assets/skills/wikify.webp +0 -0
  111. package/docs/reference-Ko-KR.md +5 -1
  112. package/docs/reference.md +6 -2
  113. package/package.json +1 -1
  114. package/rules/bundled-rules/lit-humanizer.md +12 -0
  115. package/skills/autoconference/SKILL.md +1 -1
  116. package/skills/autoconference/assets/report_template.md +1 -1
  117. package/skills/autoresearch/references/type-checklists.md +1 -1
  118. package/skills/browser-drive/SKILL.md +19 -5
  119. package/skills/browser-drive/scripts/capability-probe.mjs +26 -5
  120. package/skills/frontend-ui-ux/SKILL.md +10 -15
  121. package/skills/frontend-ui-ux/data/THIRD-PARTY-NOTICE.txt +10 -0
  122. package/skills/frontend-ui-ux/references/adaptive-layout.md +3 -11
  123. package/skills/frontend-ui-ux/references/brand-and-imagery.md +6 -11
  124. package/skills/frontend-ui-ux/references/complete-contract.md +10 -3
  125. package/skills/frontend-ui-ux/references/composition.md +1 -7
  126. package/skills/frontend-ui-ux/references/craft-floor.md +94 -0
  127. package/skills/frontend-ui-ux/references/creative-directions.md +1 -7
  128. package/skills/frontend-ui-ux/references/evidence-review.md +2 -12
  129. package/skills/frontend-ui-ux/references/implementation-platforms.md +1 -4
  130. package/skills/frontend-ui-ux/references/inclusive-interface.md +1 -3
  131. package/skills/frontend-ui-ux/references/interaction-motion.md +1 -7
  132. package/skills/frontend-ui-ux/references/motion-guide.md +125 -0
  133. package/skills/frontend-ui-ux/references/operating-lanes.md +2 -8
  134. package/skills/frontend-ui-ux/references/product-direction.md +1 -6
  135. package/skills/frontend-ui-ux/references/production.md +12 -5
  136. package/skills/frontend-ui-ux/references/redesign-playbook.md +1 -7
  137. package/skills/frontend-ui-ux/references/slop-register.md +103 -0
  138. package/skills/frontend-ui-ux/references/system-foundations.md +1 -8
  139. package/skills/frontend-ui-ux/references/taste-direction.md +4 -11
  140. package/skills/frontend-ui-ux/references/visual-language.md +1 -6
  141. package/skills/frontend-ui-ux/references/visual-reconstruction.md +2 -7
  142. package/skills/frontend-ui-ux/scripts/probe-page.mjs +326 -0
  143. package/skills/frontend-ui-ux/scripts/probe-server.mjs +24 -0
  144. package/skills/frontend-ui-ux/scripts/probe-static.mjs +42 -0
  145. package/skills/frontend-ui-ux/scripts/probe-thresholds.json +86 -0
  146. package/skills/frontend-ui-ux/scripts/probe.mjs +183 -0
  147. package/skills/lit-comprehend/SKILL.md +10 -11
  148. package/skills/lit-comprehend/references/artifact-template.md +2 -18
  149. package/skills/lit-comprehend/scripts/verify-explainer.ts +0 -14
  150. package/skills/lit-diagram-drawer/NOTICE.md +33 -0
  151. package/skills/lit-diagram-drawer/SKILL.md +101 -0
  152. package/skills/lit-diagram-drawer/assets/examples/type-architecture-dark.html +1 -0
  153. package/skills/lit-diagram-drawer/assets/examples/type-architecture-full.html +1 -0
  154. package/skills/lit-diagram-drawer/assets/examples/type-architecture-light.html +1 -0
  155. package/skills/lit-diagram-drawer/assets/examples/type-bar-dark.html +1 -0
  156. package/skills/lit-diagram-drawer/assets/examples/type-bar-full.html +1 -0
  157. package/skills/lit-diagram-drawer/assets/examples/type-bar-light.html +1 -0
  158. package/skills/lit-diagram-drawer/assets/examples/type-beeswarm-dark.html +1 -0
  159. package/skills/lit-diagram-drawer/assets/examples/type-beeswarm-full.html +1 -0
  160. package/skills/lit-diagram-drawer/assets/examples/type-beeswarm-light.html +1 -0
  161. package/skills/lit-diagram-drawer/assets/examples/type-bubble-dark.html +1 -0
  162. package/skills/lit-diagram-drawer/assets/examples/type-bubble-full.html +1 -0
  163. package/skills/lit-diagram-drawer/assets/examples/type-bubble-light.html +1 -0
  164. package/skills/lit-diagram-drawer/assets/examples/type-bump-dark.html +1 -0
  165. package/skills/lit-diagram-drawer/assets/examples/type-bump-full.html +1 -0
  166. package/skills/lit-diagram-drawer/assets/examples/type-bump-light.html +1 -0
  167. package/skills/lit-diagram-drawer/assets/examples/type-data-flow-dark.html +1 -0
  168. package/skills/lit-diagram-drawer/assets/examples/type-data-flow-full.html +1 -0
  169. package/skills/lit-diagram-drawer/assets/examples/type-data-flow-light.html +1 -0
  170. package/skills/lit-diagram-drawer/assets/examples/type-datalake-dark.html +1 -0
  171. package/skills/lit-diagram-drawer/assets/examples/type-datalake-full.html +1 -0
  172. package/skills/lit-diagram-drawer/assets/examples/type-datalake-light.html +1 -0
  173. package/skills/lit-diagram-drawer/assets/examples/type-db-schema-dark.html +1 -0
  174. package/skills/lit-diagram-drawer/assets/examples/type-db-schema-full.html +1 -0
  175. package/skills/lit-diagram-drawer/assets/examples/type-db-schema-light.html +1 -0
  176. package/skills/lit-diagram-drawer/assets/examples/type-dependency-dark.html +1 -0
  177. package/skills/lit-diagram-drawer/assets/examples/type-dependency-full.html +1 -0
  178. package/skills/lit-diagram-drawer/assets/examples/type-dependency-light.html +1 -0
  179. package/skills/lit-diagram-drawer/assets/examples/type-deployment-dark.html +1 -0
  180. package/skills/lit-diagram-drawer/assets/examples/type-deployment-full.html +1 -0
  181. package/skills/lit-diagram-drawer/assets/examples/type-deployment-light.html +1 -0
  182. package/skills/lit-diagram-drawer/assets/examples/type-dp-integration-dark.html +1 -0
  183. package/skills/lit-diagram-drawer/assets/examples/type-dp-integration-full.html +1 -0
  184. package/skills/lit-diagram-drawer/assets/examples/type-dp-integration-light.html +1 -0
  185. package/skills/lit-diagram-drawer/assets/examples/type-dp-security-matrix-dark.html +1 -0
  186. package/skills/lit-diagram-drawer/assets/examples/type-dp-security-matrix-full.html +1 -0
  187. package/skills/lit-diagram-drawer/assets/examples/type-dp-security-matrix-light.html +1 -0
  188. package/skills/lit-diagram-drawer/assets/examples/type-er-dark.html +1 -0
  189. package/skills/lit-diagram-drawer/assets/examples/type-er-full.html +1 -0
  190. package/skills/lit-diagram-drawer/assets/examples/type-er-light.html +1 -0
  191. package/skills/lit-diagram-drawer/assets/examples/type-fishbone-dark.html +1 -0
  192. package/skills/lit-diagram-drawer/assets/examples/type-fishbone-full.html +1 -0
  193. package/skills/lit-diagram-drawer/assets/examples/type-fishbone-light.html +1 -0
  194. package/skills/lit-diagram-drawer/assets/examples/type-flowchart-dark.html +1 -0
  195. package/skills/lit-diagram-drawer/assets/examples/type-flowchart-full.html +1 -0
  196. package/skills/lit-diagram-drawer/assets/examples/type-flowchart-light.html +1 -0
  197. package/skills/lit-diagram-drawer/assets/examples/type-gantt-dark.html +1 -0
  198. package/skills/lit-diagram-drawer/assets/examples/type-gantt-full.html +1 -0
  199. package/skills/lit-diagram-drawer/assets/examples/type-gantt-light.html +1 -0
  200. package/skills/lit-diagram-drawer/assets/examples/type-heatmap-dark.html +1 -0
  201. package/skills/lit-diagram-drawer/assets/examples/type-heatmap-full.html +1 -0
  202. package/skills/lit-diagram-drawer/assets/examples/type-heatmap-light.html +1 -0
  203. package/skills/lit-diagram-drawer/assets/examples/type-high-level-dark.html +1 -0
  204. package/skills/lit-diagram-drawer/assets/examples/type-high-level-full.html +1 -0
  205. package/skills/lit-diagram-drawer/assets/examples/type-high-level-light.html +1 -0
  206. package/skills/lit-diagram-drawer/assets/examples/type-high-level-vertical-dark.html +1 -0
  207. package/skills/lit-diagram-drawer/assets/examples/type-high-level-vertical-full.html +1 -0
  208. package/skills/lit-diagram-drawer/assets/examples/type-high-level-vertical-light.html +1 -0
  209. package/skills/lit-diagram-drawer/assets/examples/type-import-drawio-dark.html +1 -0
  210. package/skills/lit-diagram-drawer/assets/examples/type-import-drawio-full.html +1 -0
  211. package/skills/lit-diagram-drawer/assets/examples/type-import-drawio-light.html +1 -0
  212. package/skills/lit-diagram-drawer/assets/examples/type-import-excalidraw-dark.html +1 -0
  213. package/skills/lit-diagram-drawer/assets/examples/type-import-excalidraw-full.html +1 -0
  214. package/skills/lit-diagram-drawer/assets/examples/type-import-excalidraw-light.html +1 -0
  215. package/skills/lit-diagram-drawer/assets/examples/type-import-mermaid-dark.html +1 -0
  216. package/skills/lit-diagram-drawer/assets/examples/type-import-mermaid-full.html +1 -0
  217. package/skills/lit-diagram-drawer/assets/examples/type-import-mermaid-light.html +1 -0
  218. package/skills/lit-diagram-drawer/assets/examples/type-it-state-dark.html +1 -0
  219. package/skills/lit-diagram-drawer/assets/examples/type-it-state-full.html +1 -0
  220. package/skills/lit-diagram-drawer/assets/examples/type-it-state-light.html +1 -0
  221. package/skills/lit-diagram-drawer/assets/examples/type-journey-dark.html +1 -0
  222. package/skills/lit-diagram-drawer/assets/examples/type-journey-full.html +1 -0
  223. package/skills/lit-diagram-drawer/assets/examples/type-journey-light.html +1 -0
  224. package/skills/lit-diagram-drawer/assets/examples/type-kanban-dark.html +1 -0
  225. package/skills/lit-diagram-drawer/assets/examples/type-kanban-full.html +1 -0
  226. package/skills/lit-diagram-drawer/assets/examples/type-kanban-light.html +1 -0
  227. package/skills/lit-diagram-drawer/assets/examples/type-layers-dark.html +1 -0
  228. package/skills/lit-diagram-drawer/assets/examples/type-layers-full.html +1 -0
  229. package/skills/lit-diagram-drawer/assets/examples/type-layers-light.html +1 -0
  230. package/skills/lit-diagram-drawer/assets/examples/type-line-dark.html +1 -0
  231. package/skills/lit-diagram-drawer/assets/examples/type-line-full.html +1 -0
  232. package/skills/lit-diagram-drawer/assets/examples/type-line-light.html +1 -0
  233. package/skills/lit-diagram-drawer/assets/examples/type-loop-dark.html +1 -0
  234. package/skills/lit-diagram-drawer/assets/examples/type-loop-full.html +1 -0
  235. package/skills/lit-diagram-drawer/assets/examples/type-loop-light.html +1 -0
  236. package/skills/lit-diagram-drawer/assets/examples/type-loop-terminal-dark.html +1 -0
  237. package/skills/lit-diagram-drawer/assets/examples/type-loop-terminal-full.html +1 -0
  238. package/skills/lit-diagram-drawer/assets/examples/type-loop-terminal-light.html +1 -0
  239. package/skills/lit-diagram-drawer/assets/examples/type-marimekko-dark.html +1 -0
  240. package/skills/lit-diagram-drawer/assets/examples/type-marimekko-full.html +1 -0
  241. package/skills/lit-diagram-drawer/assets/examples/type-marimekko-light.html +1 -0
  242. package/skills/lit-diagram-drawer/assets/examples/type-medallion-dark.html +1 -0
  243. package/skills/lit-diagram-drawer/assets/examples/type-medallion-full.html +1 -0
  244. package/skills/lit-diagram-drawer/assets/examples/type-medallion-light.html +1 -0
  245. package/skills/lit-diagram-drawer/assets/examples/type-nested-dark.html +1 -0
  246. package/skills/lit-diagram-drawer/assets/examples/type-nested-full.html +1 -0
  247. package/skills/lit-diagram-drawer/assets/examples/type-nested-light.html +1 -0
  248. package/skills/lit-diagram-drawer/assets/examples/type-org-chart-dark.html +1 -0
  249. package/skills/lit-diagram-drawer/assets/examples/type-org-chart-full.html +1 -0
  250. package/skills/lit-diagram-drawer/assets/examples/type-org-chart-light.html +1 -0
  251. package/skills/lit-diagram-drawer/assets/examples/type-paved-road-animated-dark.html +1 -0
  252. package/skills/lit-diagram-drawer/assets/examples/type-paved-road-animated-full.html +1 -0
  253. package/skills/lit-diagram-drawer/assets/examples/type-paved-road-animated-light.html +1 -0
  254. package/skills/lit-diagram-drawer/assets/examples/type-polar-dark.html +1 -0
  255. package/skills/lit-diagram-drawer/assets/examples/type-polar-full.html +1 -0
  256. package/skills/lit-diagram-drawer/assets/examples/type-polar-light.html +1 -0
  257. package/skills/lit-diagram-drawer/assets/examples/type-policy-trace-animated-dark.html +1 -0
  258. package/skills/lit-diagram-drawer/assets/examples/type-policy-trace-animated-full.html +1 -0
  259. package/skills/lit-diagram-drawer/assets/examples/type-policy-trace-animated-light.html +1 -0
  260. package/skills/lit-diagram-drawer/assets/examples/type-process-dark.html +1 -0
  261. package/skills/lit-diagram-drawer/assets/examples/type-process-full.html +1 -0
  262. package/skills/lit-diagram-drawer/assets/examples/type-process-light.html +1 -0
  263. package/skills/lit-diagram-drawer/assets/examples/type-pyramid-dark.html +1 -0
  264. package/skills/lit-diagram-drawer/assets/examples/type-pyramid-full.html +1 -0
  265. package/skills/lit-diagram-drawer/assets/examples/type-pyramid-light.html +1 -0
  266. package/skills/lit-diagram-drawer/assets/examples/type-quadrant-consultant-dark.html +1 -0
  267. package/skills/lit-diagram-drawer/assets/examples/type-quadrant-consultant-full.html +1 -0
  268. package/skills/lit-diagram-drawer/assets/examples/type-quadrant-consultant-light.html +1 -0
  269. package/skills/lit-diagram-drawer/assets/examples/type-quadrant-dark.html +1 -0
  270. package/skills/lit-diagram-drawer/assets/examples/type-quadrant-full.html +1 -0
  271. package/skills/lit-diagram-drawer/assets/examples/type-quadrant-light.html +1 -0
  272. package/skills/lit-diagram-drawer/assets/examples/type-queue-animated-dark.html +1 -0
  273. package/skills/lit-diagram-drawer/assets/examples/type-queue-animated-full.html +1 -0
  274. package/skills/lit-diagram-drawer/assets/examples/type-queue-animated-light.html +1 -0
  275. package/skills/lit-diagram-drawer/assets/examples/type-radar-dark.html +1 -0
  276. package/skills/lit-diagram-drawer/assets/examples/type-radar-full.html +1 -0
  277. package/skills/lit-diagram-drawer/assets/examples/type-radar-light.html +1 -0
  278. package/skills/lit-diagram-drawer/assets/examples/type-ridgeline-dark.html +1 -0
  279. package/skills/lit-diagram-drawer/assets/examples/type-ridgeline-full.html +1 -0
  280. package/skills/lit-diagram-drawer/assets/examples/type-ridgeline-light.html +1 -0
  281. package/skills/lit-diagram-drawer/assets/examples/type-sankey-dark.html +1 -0
  282. package/skills/lit-diagram-drawer/assets/examples/type-sankey-full.html +1 -0
  283. package/skills/lit-diagram-drawer/assets/examples/type-sankey-light.html +1 -0
  284. package/skills/lit-diagram-drawer/assets/examples/type-scatter-dark.html +1 -0
  285. package/skills/lit-diagram-drawer/assets/examples/type-scatter-full.html +1 -0
  286. package/skills/lit-diagram-drawer/assets/examples/type-scatter-light.html +1 -0
  287. package/skills/lit-diagram-drawer/assets/examples/type-sequence-dark.html +1 -0
  288. package/skills/lit-diagram-drawer/assets/examples/type-sequence-full.html +1 -0
  289. package/skills/lit-diagram-drawer/assets/examples/type-sequence-light.html +1 -0
  290. package/skills/lit-diagram-drawer/assets/examples/type-sequence-oauth-dark.html +1 -0
  291. package/skills/lit-diagram-drawer/assets/examples/type-sequence-oauth-full.html +1 -0
  292. package/skills/lit-diagram-drawer/assets/examples/type-sequence-oauth-light.html +1 -0
  293. package/skills/lit-diagram-drawer/assets/examples/type-slopegraph-dark.html +1 -0
  294. package/skills/lit-diagram-drawer/assets/examples/type-slopegraph-full.html +1 -0
  295. package/skills/lit-diagram-drawer/assets/examples/type-slopegraph-light.html +1 -0
  296. package/skills/lit-diagram-drawer/assets/examples/type-state-dark.html +1 -0
  297. package/skills/lit-diagram-drawer/assets/examples/type-state-full.html +1 -0
  298. package/skills/lit-diagram-drawer/assets/examples/type-state-lifecycle-dark.html +1 -0
  299. package/skills/lit-diagram-drawer/assets/examples/type-state-lifecycle-full.html +1 -0
  300. package/skills/lit-diagram-drawer/assets/examples/type-state-lifecycle-light.html +1 -0
  301. package/skills/lit-diagram-drawer/assets/examples/type-state-light.html +1 -0
  302. package/skills/lit-diagram-drawer/assets/examples/type-story-map-dark.html +1 -0
  303. package/skills/lit-diagram-drawer/assets/examples/type-story-map-full.html +1 -0
  304. package/skills/lit-diagram-drawer/assets/examples/type-story-map-light.html +1 -0
  305. package/skills/lit-diagram-drawer/assets/examples/type-streamgraph-dark.html +1 -0
  306. package/skills/lit-diagram-drawer/assets/examples/type-streamgraph-full.html +1 -0
  307. package/skills/lit-diagram-drawer/assets/examples/type-streamgraph-light.html +1 -0
  308. package/skills/lit-diagram-drawer/assets/examples/type-swimlane-dark.html +1 -0
  309. package/skills/lit-diagram-drawer/assets/examples/type-swimlane-full.html +1 -0
  310. package/skills/lit-diagram-drawer/assets/examples/type-swimlane-light.html +1 -0
  311. package/skills/lit-diagram-drawer/assets/examples/type-timeline-dark.html +1 -0
  312. package/skills/lit-diagram-drawer/assets/examples/type-timeline-full.html +1 -0
  313. package/skills/lit-diagram-drawer/assets/examples/type-timeline-light.html +1 -0
  314. package/skills/lit-diagram-drawer/assets/examples/type-tree-block-decomposition-dark.html +1 -0
  315. package/skills/lit-diagram-drawer/assets/examples/type-tree-block-decomposition-full.html +1 -0
  316. package/skills/lit-diagram-drawer/assets/examples/type-tree-block-decomposition-light.html +1 -0
  317. package/skills/lit-diagram-drawer/assets/examples/type-tree-dark.html +1 -0
  318. package/skills/lit-diagram-drawer/assets/examples/type-tree-full.html +1 -0
  319. package/skills/lit-diagram-drawer/assets/examples/type-tree-light.html +1 -0
  320. package/skills/lit-diagram-drawer/assets/examples/type-treemap-dark.html +1 -0
  321. package/skills/lit-diagram-drawer/assets/examples/type-treemap-full.html +1 -0
  322. package/skills/lit-diagram-drawer/assets/examples/type-treemap-light.html +1 -0
  323. package/skills/lit-diagram-drawer/assets/examples/type-uml-class-dark.html +1 -0
  324. package/skills/lit-diagram-drawer/assets/examples/type-uml-class-full.html +1 -0
  325. package/skills/lit-diagram-drawer/assets/examples/type-uml-class-light.html +1 -0
  326. package/skills/lit-diagram-drawer/assets/examples/type-venn-dark.html +1 -0
  327. package/skills/lit-diagram-drawer/assets/examples/type-venn-full.html +1 -0
  328. package/skills/lit-diagram-drawer/assets/examples/type-venn-light.html +1 -0
  329. package/skills/lit-diagram-drawer/assets/examples/type-wardley-dark.html +1 -0
  330. package/skills/lit-diagram-drawer/assets/examples/type-wardley-full.html +1 -0
  331. package/skills/lit-diagram-drawer/assets/examples/type-wardley-light.html +1 -0
  332. package/skills/lit-diagram-drawer/assets/examples/type-waterfall-dark.html +1 -0
  333. package/skills/lit-diagram-drawer/assets/examples/type-waterfall-full.html +1 -0
  334. package/skills/lit-diagram-drawer/assets/examples/type-waterfall-light.html +1 -0
  335. package/skills/lit-diagram-drawer/assets/fonts/OFL.txt +94 -0
  336. package/skills/lit-diagram-drawer/assets/fonts/PretendardVariable.woff2 +0 -0
  337. package/skills/lit-diagram-drawer/assets/fonts/provenance.json +23 -0
  338. package/skills/lit-diagram-drawer/assets/icons.html +231 -0
  339. package/skills/lit-diagram-drawer/assets/licenses/devicon-MIT.txt +20 -0
  340. package/skills/lit-diagram-drawer/assets/licenses/diagram-design-MIT.txt +21 -0
  341. package/skills/lit-diagram-drawer/assets/licenses/log-z-MIT.txt +21 -0
  342. package/skills/lit-diagram-drawer/assets/licenses/simple-icons-CC0.md +30 -0
  343. package/skills/lit-diagram-drawer/assets/licenses/tabler-MIT.txt +21 -0
  344. package/skills/lit-diagram-drawer/examples/01-service-architecture/after.html +1 -0
  345. package/skills/lit-diagram-drawer/examples/01-service-architecture/brief.md +33 -0
  346. package/skills/lit-diagram-drawer/examples/02-release-decision/after.html +1 -0
  347. package/skills/lit-diagram-drawer/examples/02-release-decision/brief.md +18 -0
  348. package/skills/lit-diagram-drawer/examples/03-data-retention/after.html +1 -0
  349. package/skills/lit-diagram-drawer/examples/03-data-retention/brief.md +19 -0
  350. package/skills/lit-diagram-drawer/examples/04-oauth-sequence/after.html +1 -0
  351. package/skills/lit-diagram-drawer/examples/04-oauth-sequence/brief.md +17 -0
  352. package/skills/lit-diagram-drawer/examples/05-review-lanes/after.html +1 -0
  353. package/skills/lit-diagram-drawer/examples/05-review-lanes/brief.md +17 -0
  354. package/skills/lit-diagram-drawer/examples/06-rollout-gates/after.html +1 -0
  355. package/skills/lit-diagram-drawer/examples/06-rollout-gates/brief.md +17 -0
  356. package/skills/lit-diagram-drawer/examples/07-deployment-boundary/after.html +1 -0
  357. package/skills/lit-diagram-drawer/examples/07-deployment-boundary/brief.md +19 -0
  358. package/skills/lit-diagram-drawer/examples/08-policy-traces/after.html +1 -0
  359. package/skills/lit-diagram-drawer/examples/08-policy-traces/brief.md +20 -0
  360. package/skills/lit-diagram-drawer/references/accessibility.md +37 -0
  361. package/skills/lit-diagram-drawer/references/export.md +17 -0
  362. package/skills/lit-diagram-drawer/references/import-drawio.md +13 -0
  363. package/skills/lit-diagram-drawer/references/import-excalidraw.md +11 -0
  364. package/skills/lit-diagram-drawer/references/import-mermaid.md +12 -0
  365. package/skills/lit-diagram-drawer/references/import-schema.md +28 -0
  366. package/skills/lit-diagram-drawer/references/korean-typography.md +34 -0
  367. package/skills/lit-diagram-drawer/references/motion.md +29 -0
  368. package/skills/lit-diagram-drawer/references/office-pptx-docx.md +28 -0
  369. package/skills/lit-diagram-drawer/references/output-spec.md +48 -0
  370. package/skills/lit-diagram-drawer/references/primitive-annotation.md +12 -0
  371. package/skills/lit-diagram-drawer/references/primitive-icons.md +21 -0
  372. package/skills/lit-diagram-drawer/references/primitive-sketchy.md +11 -0
  373. package/skills/lit-diagram-drawer/references/primitive-terminal.md +11 -0
  374. package/skills/lit-diagram-drawer/references/profiles.md +24 -0
  375. package/skills/lit-diagram-drawer/references/semantic-patterns.md +27 -0
  376. package/skills/lit-diagram-drawer/references/style-guide.md +67 -0
  377. package/skills/lit-diagram-drawer/references/type-architecture.md +51 -0
  378. package/skills/lit-diagram-drawer/references/type-bar.md +51 -0
  379. package/skills/lit-diagram-drawer/references/type-beeswarm.md +49 -0
  380. package/skills/lit-diagram-drawer/references/type-bubble.md +49 -0
  381. package/skills/lit-diagram-drawer/references/type-bump.md +49 -0
  382. package/skills/lit-diagram-drawer/references/type-catalog.json +1433 -0
  383. package/skills/lit-diagram-drawer/references/type-data-flow.md +51 -0
  384. package/skills/lit-diagram-drawer/references/type-datalake.md +49 -0
  385. package/skills/lit-diagram-drawer/references/type-db-schema.md +49 -0
  386. package/skills/lit-diagram-drawer/references/type-dependency.md +49 -0
  387. package/skills/lit-diagram-drawer/references/type-deployment.md +49 -0
  388. package/skills/lit-diagram-drawer/references/type-dp-integration.md +49 -0
  389. package/skills/lit-diagram-drawer/references/type-dp-security-matrix.md +49 -0
  390. package/skills/lit-diagram-drawer/references/type-er.md +49 -0
  391. package/skills/lit-diagram-drawer/references/type-fishbone.md +49 -0
  392. package/skills/lit-diagram-drawer/references/type-flowchart.md +49 -0
  393. package/skills/lit-diagram-drawer/references/type-gantt.md +49 -0
  394. package/skills/lit-diagram-drawer/references/type-heatmap.md +53 -0
  395. package/skills/lit-diagram-drawer/references/type-high-level-vertical.md +53 -0
  396. package/skills/lit-diagram-drawer/references/type-high-level.md +53 -0
  397. package/skills/lit-diagram-drawer/references/type-import-drawio.md +53 -0
  398. package/skills/lit-diagram-drawer/references/type-import-excalidraw.md +53 -0
  399. package/skills/lit-diagram-drawer/references/type-import-mermaid.md +53 -0
  400. package/skills/lit-diagram-drawer/references/type-it-state.md +54 -0
  401. package/skills/lit-diagram-drawer/references/type-journey.md +54 -0
  402. package/skills/lit-diagram-drawer/references/type-kanban.md +54 -0
  403. package/skills/lit-diagram-drawer/references/type-layers.md +54 -0
  404. package/skills/lit-diagram-drawer/references/type-line.md +54 -0
  405. package/skills/lit-diagram-drawer/references/type-loop-terminal.md +53 -0
  406. package/skills/lit-diagram-drawer/references/type-loop.md +54 -0
  407. package/skills/lit-diagram-drawer/references/type-marimekko.md +54 -0
  408. package/skills/lit-diagram-drawer/references/type-medallion.md +54 -0
  409. package/skills/lit-diagram-drawer/references/type-nested.md +59 -0
  410. package/skills/lit-diagram-drawer/references/type-org-chart.md +58 -0
  411. package/skills/lit-diagram-drawer/references/type-paved-road-animated.md +72 -0
  412. package/skills/lit-diagram-drawer/references/type-polar.md +67 -0
  413. package/skills/lit-diagram-drawer/references/type-policy-trace-animated.md +69 -0
  414. package/skills/lit-diagram-drawer/references/type-process.md +58 -0
  415. package/skills/lit-diagram-drawer/references/type-pyramid.md +59 -0
  416. package/skills/lit-diagram-drawer/references/type-quadrant-consultant.md +60 -0
  417. package/skills/lit-diagram-drawer/references/type-quadrant.md +57 -0
  418. package/skills/lit-diagram-drawer/references/type-queue-animated.md +63 -0
  419. package/skills/lit-diagram-drawer/references/type-radar.md +57 -0
  420. package/skills/lit-diagram-drawer/references/type-ridgeline.md +63 -0
  421. package/skills/lit-diagram-drawer/references/type-sankey.md +68 -0
  422. package/skills/lit-diagram-drawer/references/type-scatter.md +60 -0
  423. package/skills/lit-diagram-drawer/references/type-sequence-oauth.md +66 -0
  424. package/skills/lit-diagram-drawer/references/type-sequence.md +63 -0
  425. package/skills/lit-diagram-drawer/references/type-slopegraph.md +65 -0
  426. package/skills/lit-diagram-drawer/references/type-state-lifecycle.md +53 -0
  427. package/skills/lit-diagram-drawer/references/type-state.md +59 -0
  428. package/skills/lit-diagram-drawer/references/type-story-map.md +52 -0
  429. package/skills/lit-diagram-drawer/references/type-streamgraph.md +53 -0
  430. package/skills/lit-diagram-drawer/references/type-swimlane.md +52 -0
  431. package/skills/lit-diagram-drawer/references/type-timeline.md +52 -0
  432. package/skills/lit-diagram-drawer/references/type-tree-block-decomposition.md +57 -0
  433. package/skills/lit-diagram-drawer/references/type-tree.md +54 -0
  434. package/skills/lit-diagram-drawer/references/type-treemap.md +54 -0
  435. package/skills/lit-diagram-drawer/references/type-uml-class.md +52 -0
  436. package/skills/lit-diagram-drawer/references/type-venn.md +51 -0
  437. package/skills/lit-diagram-drawer/references/type-wardley.md +52 -0
  438. package/skills/lit-diagram-drawer/references/type-waterfall.md +54 -0
  439. package/skills/lit-diagram-drawer/references/verifier-guide.md +59 -0
  440. package/skills/lit-diagram-drawer/scripts/block-registry.mjs +43 -0
  441. package/skills/lit-diagram-drawer/scripts/brief-contract.mjs +94 -0
  442. package/skills/lit-diagram-drawer/scripts/capability-probe.mjs +132 -0
  443. package/skills/lit-diagram-drawer/scripts/check-visible-text.mjs +15 -0
  444. package/skills/lit-diagram-drawer/scripts/craft-thresholds.json +15 -0
  445. package/skills/lit-diagram-drawer/scripts/diagram-metrics.mjs +216 -0
  446. package/skills/lit-diagram-drawer/scripts/doctor.mjs +8 -0
  447. package/skills/lit-diagram-drawer/scripts/drawio-extract.mjs +214 -0
  448. package/skills/lit-diagram-drawer/scripts/excalidraw-extract.mjs +151 -0
  449. package/skills/lit-diagram-drawer/scripts/export.mjs +133 -0
  450. package/skills/lit-diagram-drawer/scripts/import-shared.mjs +130 -0
  451. package/skills/lit-diagram-drawer/scripts/mermaid-extract.mjs +173 -0
  452. package/skills/lit-diagram-drawer/scripts/office-safety.mjs +120 -0
  453. package/skills/lit-diagram-drawer/scripts/renderer-safety.mjs +46 -0
  454. package/skills/lit-diagram-drawer/scripts/test-block-registry.mjs +20 -0
  455. package/skills/lit-diagram-drawer/scripts/test-brief-contract.mjs +27 -0
  456. package/skills/lit-diagram-drawer/scripts/test-importers.mjs +119 -0
  457. package/skills/lit-diagram-drawer/scripts/test-office-safety.mjs +67 -0
  458. package/skills/lit-diagram-drawer/scripts/test-sequence-verifier.mjs +28 -0
  459. package/skills/lit-diagram-drawer/scripts/test-visual-quality.mjs +68 -0
  460. package/skills/lit-diagram-drawer/scripts/verify-all.mjs +74 -0
  461. package/skills/lit-diagram-drawer/scripts/verify-brief.mjs +47 -0
  462. package/skills/lit-diagram-drawer/scripts/verify-coverage.mjs +56 -0
  463. package/skills/lit-diagram-drawer/scripts/verify-diagram.mjs +26 -0
  464. package/skills/lit-diagram-drawer/scripts/verify-motion.mjs +12 -0
  465. package/skills/lit-diagram-drawer/scripts/verify-type.mjs +48 -0
  466. package/skills/lit-diagram-drawer/scripts/visual-quality.mjs +363 -0
  467. package/skills/lit-docx/LICENSE-MIT.txt +21 -0
  468. package/skills/lit-docx/SKILL.md +78 -0
  469. package/skills/lit-docx/references/frontmatter_schema.md +42 -0
  470. package/skills/lit-docx/references/journal_style_spec.md +17 -0
  471. package/skills/lit-docx/references/markdown_quality_checklist.md +37 -0
  472. package/skills/lit-docx/references/slop_phrase_list.yaml +58 -0
  473. package/skills/lit-docx/references/slop_rules.md +35 -0
  474. package/skills/lit-docx/requirements.in +5 -0
  475. package/skills/lit-docx/requirements.lock +289 -0
  476. package/skills/lit-docx/run.py +64 -0
  477. package/skills/lit-docx/scripts/clean_markdown.py +95 -0
  478. package/skills/lit-docx/scripts/convert_md_to_docx.py +1047 -0
  479. package/skills/lit-docx/scripts/convert_md_to_pdf.py +281 -0
  480. package/skills/lit-docx/scripts/convert_pdf.py +130 -0
  481. package/skills/lit-docx/scripts/craft-thresholds.json +11 -0
  482. package/skills/lit-docx/scripts/craft_docx.py +83 -0
  483. package/skills/lit-docx/scripts/edit_docx.py +297 -0
  484. package/skills/lit-docx/scripts/embed_images.py +78 -0
  485. package/skills/lit-docx/scripts/generate_docx_templates.py +491 -0
  486. package/skills/lit-docx/scripts/slop_lint.py +485 -0
  487. package/skills/lit-docx/scripts/visual_audit.py +41 -0
  488. package/skills/lit-docx/templates/docx/acs.docx +0 -0
  489. package/skills/lit-docx/templates/docx/elsevier.docx +0 -0
  490. package/skills/lit-docx/templates/docx/ieee.docx +0 -0
  491. package/skills/lit-docx/templates/docx/korean-generic.docx +0 -0
  492. package/skills/lit-docx/templates/docx/nature.docx +0 -0
  493. package/skills/lit-docx/templates/latex/acs/README.md +5 -0
  494. package/skills/lit-docx/templates/latex/acs/template.tex +37 -0
  495. package/skills/lit-docx/templates/latex/elsevier/README.md +5 -0
  496. package/skills/lit-docx/templates/latex/elsevier/template.tex +38 -0
  497. package/skills/lit-docx/templates/latex/ieee/README.md +5 -0
  498. package/skills/lit-docx/templates/latex/ieee/template.tex +37 -0
  499. package/skills/lit-docx/templates/latex/korean-generic/README.md +5 -0
  500. package/skills/lit-docx/templates/latex/korean-generic/template.tex +37 -0
  501. package/skills/lit-docx/templates/latex/nature/README.md +5 -0
  502. package/skills/lit-docx/templates/latex/nature/template.tex +37 -0
  503. package/skills/lit-docx/templates/registry.yaml +1366 -0
  504. package/skills/lit-humanizer/NOTICE +160 -0
  505. package/skills/lit-humanizer/SKILL.md +122 -0
  506. package/skills/lit-humanizer/assets/always-on-rule.md +9 -0
  507. package/skills/lit-humanizer/assets/report-skeleton.md +25 -0
  508. package/skills/lit-humanizer/assets/slide-text-skeleton.md +28 -0
  509. package/skills/lit-humanizer/examples/accessibility-note/after.md +7 -0
  510. package/skills/lit-humanizer/examples/accessibility-note/before.md +7 -0
  511. package/skills/lit-humanizer/examples/api-reference/after.md +9 -0
  512. package/skills/lit-humanizer/examples/api-reference/before.md +15 -0
  513. package/skills/lit-humanizer/examples/changelog/after.md +5 -0
  514. package/skills/lit-humanizer/examples/changelog/before.md +12 -0
  515. package/skills/lit-humanizer/examples/code-comments/after.md +10 -0
  516. package/skills/lit-humanizer/examples/code-comments/before.md +19 -0
  517. package/skills/lit-humanizer/examples/commit/after.md +5 -0
  518. package/skills/lit-humanizer/examples/commit/before.md +7 -0
  519. package/skills/lit-humanizer/examples/data-release/after.md +7 -0
  520. package/skills/lit-humanizer/examples/data-release/before.md +9 -0
  521. package/skills/lit-humanizer/examples/english-essay/after.md +5 -0
  522. package/skills/lit-humanizer/examples/english-essay/before.md +5 -0
  523. package/skills/lit-humanizer/examples/incident-update/after.md +7 -0
  524. package/skills/lit-humanizer/examples/incident-update/before.md +7 -0
  525. package/skills/lit-humanizer/examples/ko-essay/after.md +7 -0
  526. package/skills/lit-humanizer/examples/ko-essay/before.md +9 -0
  527. package/skills/lit-humanizer/examples/ko-report/after.md +9 -0
  528. package/skills/lit-humanizer/examples/ko-report/before.md +13 -0
  529. package/skills/lit-humanizer/examples/ko-slide/after.md +19 -0
  530. package/skills/lit-humanizer/examples/ko-slide/before.md +21 -0
  531. package/skills/lit-humanizer/examples/meeting-brief/after.md +9 -0
  532. package/skills/lit-humanizer/examples/meeting-brief/before.md +11 -0
  533. package/skills/lit-humanizer/examples/policy-faq/after.md +9 -0
  534. package/skills/lit-humanizer/examples/policy-faq/before.md +9 -0
  535. package/skills/lit-humanizer/examples/pr/after.md +15 -0
  536. package/skills/lit-humanizer/examples/pr/before.md +17 -0
  537. package/skills/lit-humanizer/examples/project-update/after.md +7 -0
  538. package/skills/lit-humanizer/examples/project-update/before.md +9 -0
  539. package/skills/lit-humanizer/examples/readme/after.md +12 -0
  540. package/skills/lit-humanizer/examples/readme/before.md +14 -0
  541. package/skills/lit-humanizer/examples/report/after.md +13 -0
  542. package/skills/lit-humanizer/examples/report/before.md +11 -0
  543. package/skills/lit-humanizer/examples/research-abstract/after.md +5 -0
  544. package/skills/lit-humanizer/examples/research-abstract/before.md +5 -0
  545. package/skills/lit-humanizer/examples/slides/after.md +19 -0
  546. package/skills/lit-humanizer/examples/slides/before.md +19 -0
  547. package/skills/lit-humanizer/examples/troubleshooting/after.md +11 -0
  548. package/skills/lit-humanizer/examples/troubleshooting/before.md +11 -0
  549. package/skills/lit-humanizer/fixtures/ko-metrics-golden.json +49 -0
  550. package/skills/lit-humanizer/fixtures/office/minimal.docx +0 -0
  551. package/skills/lit-humanizer/fixtures/office/minimal.pptx +0 -0
  552. package/skills/lit-humanizer/fixtures/pos-real.txt +26 -0
  553. package/skills/lit-humanizer/fixtures/rule-cases.json +306 -0
  554. package/skills/lit-humanizer/references/code-patterns.md +468 -0
  555. package/skills/lit-humanizer/references/deliverable-channels.md +111 -0
  556. package/skills/lit-humanizer/references/en-patterns-checklist.md +43 -0
  557. package/skills/lit-humanizer/references/en-patterns-content.md +243 -0
  558. package/skills/lit-humanizer/references/en-patterns-structure.md +375 -0
  559. package/skills/lit-humanizer/references/en-patterns.md +57 -0
  560. package/skills/lit-humanizer/references/ko-metrics.md +33 -0
  561. package/skills/lit-humanizer/references/ko-patterns-a-d.md +659 -0
  562. package/skills/lit-humanizer/references/ko-patterns-e-j.md +387 -0
  563. package/skills/lit-humanizer/references/ko-patterns.md +31 -0
  564. package/skills/lit-humanizer/references/rewrite-playbook.md +54 -0
  565. package/skills/lit-humanizer/references/taxonomy.md +153 -0
  566. package/skills/lit-humanizer/rules.json +884 -0
  567. package/skills/lit-humanizer/scripts/core.mjs +208 -0
  568. package/skills/lit-humanizer/scripts/detect.mjs +91 -0
  569. package/skills/lit-humanizer/scripts/extract_office_text.py +89 -0
  570. package/skills/lit-humanizer/scripts/guard-scan.mjs +36 -0
  571. package/skills/lit-humanizer/scripts/ko-metrics.mjs +124 -0
  572. package/skills/lit-humanizer/scripts/test-fixtures.mjs +54 -0
  573. package/skills/lit-humanizer/scripts/test-ko-metrics.mjs +27 -0
  574. package/skills/lit-pptx/FORBIDDEN_TERMS.json +55 -0
  575. package/skills/lit-pptx/NOTICE.md +3 -0
  576. package/skills/lit-pptx/SKILL.md +76 -0
  577. package/skills/lit-pptx/agents/analyst.md +49 -0
  578. package/skills/lit-pptx/agents/antithesis.md +59 -0
  579. package/skills/lit-pptx/agents/architect.md +44 -0
  580. package/skills/lit-pptx/agents/critic.md +42 -0
  581. package/skills/lit-pptx/agents/synthesizer.md +47 -0
  582. package/skills/lit-pptx/agents/thesis.md +33 -0
  583. package/skills/lit-pptx/assets/azure/circle-lg.png +0 -0
  584. package/skills/lit-pptx/assets/azure/circle-md.png +0 -0
  585. package/skills/lit-pptx/assets/azure/circle-sm.png +0 -0
  586. package/skills/lit-pptx/fonts/a2z-font/A2Z-Black.otf +0 -0
  587. package/skills/lit-pptx/fonts/a2z-font/A2Z-Bold.otf +0 -0
  588. package/skills/lit-pptx/fonts/a2z-font/A2Z-Light.otf +0 -0
  589. package/skills/lit-pptx/fonts/a2z-font/A2Z-Medium.otf +0 -0
  590. package/skills/lit-pptx/fonts/a2z-font/A2Z-Regular.otf +0 -0
  591. package/skills/lit-pptx/fonts/a2z-font/OFL.txt +94 -0
  592. package/skills/lit-pptx/fonts/a2z-font/SOURCE.md +29 -0
  593. package/skills/lit-pptx/package-lock.json +747 -0
  594. package/skills/lit-pptx/package.json +13 -0
  595. package/skills/lit-pptx/pretendard-font/LICENSE.txt +94 -0
  596. package/skills/lit-pptx/pretendard-font/public/static/LitOpenCodeSans-Bold.otf +0 -0
  597. package/skills/lit-pptx/pretendard-font/public/static/LitOpenCodeSans-Regular.otf +0 -0
  598. package/skills/lit-pptx/requirements.in +2 -0
  599. package/skills/lit-pptx/requirements.lock +285 -0
  600. package/skills/lit-pptx/run.mjs +71 -0
  601. package/skills/lit-pptx/scripts/check_ooxml.py +47 -0
  602. package/skills/lit-pptx/scripts/compile-deck.js +447 -0
  603. package/skills/lit-pptx/scripts/craft-thresholds.json +26 -0
  604. package/skills/lit-pptx/scripts/craft_extras.py +224 -0
  605. package/skills/lit-pptx/scripts/embed_fonts.py +204 -0
  606. package/skills/lit-pptx/scripts/layout_inventory.py +70 -0
  607. package/skills/lit-pptx/scripts/learn_template.py +433 -0
  608. package/skills/lit-pptx/scripts/lib/derive-palette.js +176 -0
  609. package/skills/lit-pptx/scripts/lib/directive-parser.js +244 -0
  610. package/skills/lit-pptx/scripts/lib/font-map.js +79 -0
  611. package/skills/lit-pptx/scripts/lib/gen-bg.js +85 -0
  612. package/skills/lit-pptx/scripts/lib/gen-gradient-assets.js +36 -0
  613. package/skills/lit-pptx/scripts/lib/layout-resolver.js +737 -0
  614. package/skills/lit-pptx/scripts/lib/markdown-loader.js +136 -0
  615. package/skills/lit-pptx/scripts/lib/render-adapter-html.js +364 -0
  616. package/skills/lit-pptx/scripts/lib/render-adapter-pptx.js +1848 -0
  617. package/skills/lit-pptx/scripts/lib/slide-ast.js +534 -0
  618. package/skills/lit-pptx/scripts/lib/spec-validator.js +94 -0
  619. package/skills/lit-pptx/scripts/lib/template-registry.js +355 -0
  620. package/skills/lit-pptx/scripts/qa_deck.py +773 -0
  621. package/skills/lit-pptx/scripts/validate_pptx.py +206 -0
  622. package/skills/lit-pptx/specs/markdown-slide-spec-v1.md +251 -0
  623. package/skills/lit-pptx/specs/markdown-slide-spec-v2.md +223 -0
  624. package/skills/lit-pptx/specs/slide-ast-v1.schema.json +229 -0
  625. package/skills/lit-pptx/specs/slide-ast-v2.schema.json +144 -0
  626. package/skills/lit-pptx/specs/template-enrollment-contract.md +379 -0
  627. package/skills/lit-pptx/templates/bauhaus_light.css +4 -0
  628. package/skills/lit-pptx/templates/boilerplate_professional.css +508 -0
  629. package/skills/lit-pptx/templates/enrolled/AZURE-A2Z/capabilities.yaml +146 -0
  630. package/skills/lit-pptx/templates/enrolled/AZURE-A2Z/layout-mapping.yaml +454 -0
  631. package/skills/lit-pptx/templates/enrolled/AZURE-A2Z/template.yaml +37 -0
  632. package/skills/lit-pptx/templates/enrolled/AZURE-PRO/capabilities.yaml +154 -0
  633. package/skills/lit-pptx/templates/enrolled/AZURE-PRO/layout-mapping.yaml +483 -0
  634. package/skills/lit-pptx/templates/enrolled/AZURE-PRO/template.yaml +37 -0
  635. package/skills/lit-pptx/templates/enrolled/BOILERPLATE-A2Z/capabilities.yaml +179 -0
  636. package/skills/lit-pptx/templates/enrolled/BOILERPLATE-A2Z/layout-mapping.yaml +299 -0
  637. package/skills/lit-pptx/templates/enrolled/BOILERPLATE-A2Z/template.yaml +45 -0
  638. package/skills/lit-pptx/templates/enrolled/BOILERPLATE-PRETENDARD/capabilities.yaml +181 -0
  639. package/skills/lit-pptx/templates/enrolled/BOILERPLATE-PRETENDARD/layout-mapping.yaml +299 -0
  640. package/skills/lit-pptx/templates/enrolled/BOILERPLATE-PRETENDARD/template.yaml +44 -0
  641. package/skills/lit-scientific-visualization/SKILL.md +2 -0
  642. package/skills/lit-typographic-motion/NOTICE +23 -0
  643. package/skills/lit-typographic-motion/SKILL.md +77 -0
  644. package/skills/lit-typographic-motion/THIRD_PARTY_NOTICES +25 -0
  645. package/skills/lit-typographic-motion/audio-analysis.py +52 -0
  646. package/skills/lit-typographic-motion/engine/browser.mjs +83 -0
  647. package/skills/lit-typographic-motion/engine/constants.mjs +177 -0
  648. package/skills/lit-typographic-motion/engine/contrast.mjs +101 -0
  649. package/skills/lit-typographic-motion/engine/encode.mjs +46 -0
  650. package/skills/lit-typographic-motion/engine/flash.mjs +216 -0
  651. package/skills/lit-typographic-motion/engine/look.mjs +166 -0
  652. package/skills/lit-typographic-motion/engine/page/common.js +105 -0
  653. package/skills/lit-typographic-motion/engine/page/engine.js +451 -0
  654. package/skills/lit-typographic-motion/engine/page/gl.js +213 -0
  655. package/skills/lit-typographic-motion/engine/page/lines.js +88 -0
  656. package/skills/lit-typographic-motion/engine/page/passes.js +144 -0
  657. package/skills/lit-typographic-motion/engine/page/post.js +119 -0
  658. package/skills/lit-typographic-motion/engine/page/scenes.js +187 -0
  659. package/skills/lit-typographic-motion/engine/page/type.js +321 -0
  660. package/skills/lit-typographic-motion/engine/png.mjs +139 -0
  661. package/skills/lit-typographic-motion/engine/sound.mjs +291 -0
  662. package/skills/lit-typographic-motion/engine/stage/capture.mjs +133 -0
  663. package/skills/lit-typographic-motion/engine/stage/clock.js +171 -0
  664. package/skills/lit-typographic-motion/engine/stage/frame-worker.mjs +47 -0
  665. package/skills/lit-typographic-motion/engine/stage/gate.mjs +119 -0
  666. package/skills/lit-typographic-motion/engine/stage/qa-page.js +158 -0
  667. package/skills/lit-typographic-motion/engine/stage/qa.mjs +208 -0
  668. package/skills/lit-typographic-motion/engine/stage/render.mjs +418 -0
  669. package/skills/lit-typographic-motion/engine/stage/scan.mjs +162 -0
  670. package/skills/lit-typographic-motion/engine/stage/stage-kit.js +310 -0
  671. package/skills/lit-typographic-motion/engine/stills.mjs +60 -0
  672. package/skills/lit-typographic-motion/engine/text.mjs +126 -0
  673. package/skills/lit-typographic-motion/engine/timing.mjs +289 -0
  674. package/skills/lit-typographic-motion/engine/treatment.mjs +254 -0
  675. package/skills/lit-typographic-motion/fonts/Archivo-100-400.ttf +0 -0
  676. package/skills/lit-typographic-motion/fonts/Archivo-100-700.ttf +0 -0
  677. package/skills/lit-typographic-motion/fonts/Archivo-100-900.ttf +0 -0
  678. package/skills/lit-typographic-motion/fonts/Archivo-125-400.ttf +0 -0
  679. package/skills/lit-typographic-motion/fonts/Archivo-125-700.ttf +0 -0
  680. package/skills/lit-typographic-motion/fonts/Archivo-125-900.ttf +0 -0
  681. package/skills/lit-typographic-motion/fonts/Archivo-75-400.ttf +0 -0
  682. package/skills/lit-typographic-motion/fonts/Archivo-75-700.ttf +0 -0
  683. package/skills/lit-typographic-motion/fonts/Archivo-75-900.ttf +0 -0
  684. package/skills/lit-typographic-motion/fonts/Archivo-OFL.txt +93 -0
  685. package/skills/lit-typographic-motion/fonts/Silkscreen-Bold.ttf +0 -0
  686. package/skills/lit-typographic-motion/fonts/Silkscreen-OFL.txt +93 -0
  687. package/skills/lit-typographic-motion/fonts/Silkscreen-Regular.ttf +0 -0
  688. package/skills/lit-typographic-motion/fonts/VT323-OFL.txt +93 -0
  689. package/skills/lit-typographic-motion/fonts/VT323-Regular.ttf +0 -0
  690. package/skills/lit-typographic-motion/fonts/pins.json +44 -0
  691. package/skills/lit-typographic-motion/fonts/stroke/CREDITS +52 -0
  692. package/skills/lit-typographic-motion/fonts/stroke/EMSAllure.svg +216 -0
  693. package/skills/lit-typographic-motion/fonts/stroke/EMSFelix.svg +216 -0
  694. package/skills/lit-typographic-motion/fonts/stroke/EMSOsmotron.svg +216 -0
  695. package/skills/lit-typographic-motion/fonts/stroke/EMSReadability.svg +216 -0
  696. package/skills/lit-typographic-motion/fonts/stroke/EMSTech.svg +217 -0
  697. package/skills/lit-typographic-motion/fonts/stroke/OFL.txt +85 -0
  698. package/skills/lit-typographic-motion/gate.mjs +593 -0
  699. package/skills/lit-typographic-motion/package-lock.json +78 -0
  700. package/skills/lit-typographic-motion/package.json +11 -0
  701. package/skills/lit-typographic-motion/probe.mjs +74 -0
  702. package/skills/lit-typographic-motion/references/authoring.md +110 -0
  703. package/skills/lit-typographic-motion/references/craft-loop.md +110 -0
  704. package/skills/lit-typographic-motion/references/runtime.md +88 -0
  705. package/skills/lit-typographic-motion/references/stage.md +164 -0
  706. package/skills/lit-typographic-motion/references/style-bibles.md +88 -0
  707. package/skills/lit-typographic-motion/references/treatment.md +143 -0
  708. package/skills/lit-typographic-motion/references/type-craft.md +55 -0
  709. package/skills/lit-typographic-motion/render.mjs +654 -0
  710. package/skills/lit-typographic-motion/requirements-audio.in +1 -0
  711. package/skills/lit-typographic-motion/requirements-audio.txt +790 -0
  712. package/skills/lit-typographic-motion/runtime.mjs +259 -0
  713. package/skills/lit-typographic-motion/word-timing-models.json +25 -0
  714. package/skills/litresearch/SKILL.md +41 -12
  715. package/skills/managed-skill-manifest.json +2367 -63
  716. package/skills/skill-rename-aliases.json +6 -1
  717. package/tools/check-pack-payload.mjs +22 -1
  718. package/tools/check-payload-substance.mjs +2 -2
  719. package/tools/payload-reference-exemptions.json +4 -0
  720. package/tools/payload-substance-allowlist.json +2 -3
  721. package/tools/payload-substance-parity.json +7 -7
  722. package/tools/version-manifests.json +4 -4
  723. package/skills/lit-korean/SKILL.md +0 -231
@@ -0,0 +1,78 @@
1
+ {
2
+ "name": "litopencode-motion-runtime",
3
+ "version": "1.0.0",
4
+ "lockfileVersion": 3,
5
+ "requires": true,
6
+ "packages": {
7
+ "": {
8
+ "name": "litopencode-motion-runtime",
9
+ "version": "1.0.0",
10
+ "dependencies": {
11
+ "opentype.js": "1.3.4",
12
+ "playwright-core": "1.55.1",
13
+ "ws": "8.18.3"
14
+ }
15
+ },
16
+ "node_modules/opentype.js": {
17
+ "version": "1.3.4",
18
+ "resolved": "https://registry.npmjs.org/opentype.js/-/opentype.js-1.3.4.tgz",
19
+ "integrity": "sha512-d2JE9RP/6uagpQAVtJoF0pJJA/fgai89Cc50Yp0EJHk+eLp6QQ7gBoblsnubRULNY132I0J1QKMJ+JTbMqz4sw==",
20
+ "license": "MIT",
21
+ "dependencies": {
22
+ "string.prototype.codepointat": "^0.2.1",
23
+ "tiny-inflate": "^1.0.3"
24
+ },
25
+ "bin": {
26
+ "ot": "bin/ot"
27
+ },
28
+ "engines": {
29
+ "node": ">= 8.0.0"
30
+ }
31
+ },
32
+ "node_modules/playwright-core": {
33
+ "version": "1.55.1",
34
+ "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.55.1.tgz",
35
+ "integrity": "sha512-Z6Mh9mkwX+zxSlHqdr5AOcJnfp+xUWLCt9uKV18fhzA8eyxUd8NUWzAjxUh55RZKSYwDGX0cfaySdhZJGMoJ+w==",
36
+ "license": "Apache-2.0",
37
+ "bin": {
38
+ "playwright-core": "cli.js"
39
+ },
40
+ "engines": {
41
+ "node": ">=18"
42
+ }
43
+ },
44
+ "node_modules/string.prototype.codepointat": {
45
+ "version": "0.2.1",
46
+ "resolved": "https://registry.npmjs.org/string.prototype.codepointat/-/string.prototype.codepointat-0.2.1.tgz",
47
+ "integrity": "sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==",
48
+ "license": "MIT"
49
+ },
50
+ "node_modules/tiny-inflate": {
51
+ "version": "1.0.3",
52
+ "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz",
53
+ "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==",
54
+ "license": "MIT"
55
+ },
56
+ "node_modules/ws": {
57
+ "version": "8.18.3",
58
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz",
59
+ "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==",
60
+ "license": "MIT",
61
+ "engines": {
62
+ "node": ">=10.0.0"
63
+ },
64
+ "peerDependencies": {
65
+ "bufferutil": "^4.0.1",
66
+ "utf-8-validate": ">=5.0.2"
67
+ },
68
+ "peerDependenciesMeta": {
69
+ "bufferutil": {
70
+ "optional": true
71
+ },
72
+ "utf-8-validate": {
73
+ "optional": true
74
+ }
75
+ }
76
+ }
77
+ }
78
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "name": "litopencode-motion-runtime",
3
+ "version": "1.0.0",
4
+ "private": true,
5
+ "type": "module",
6
+ "dependencies": {
7
+ "opentype.js": "1.3.4",
8
+ "playwright-core": "1.55.1",
9
+ "ws": "8.18.3"
10
+ }
11
+ }
@@ -0,0 +1,74 @@
1
+ #!/usr/bin/env node
2
+ // The five MO-A-44 probes, reported on every doctor/status run: Chrome, ffmpeg (with the preview
3
+ // encoder rung), the WebGL2 renderer string from a real headless probe, the software-GL warning, and
4
+ // pre-warm state naming what is missing and the command that fixes it.
5
+ import { spawnSync } from "node:child_process";
6
+ import { existsSync, mkdtempSync, realpathSync, rmSync } from "node:fs";
7
+ import os from "node:os";
8
+ import path from "node:path";
9
+ import { fileURLToPath } from "node:url";
10
+ import { isSoftwareRenderer, unknownRenderer } from "./engine/constants.mjs";
11
+ import { chromeVersion, findChrome, launchLadder, loadPlaywright, which } from "./engine/browser.mjs";
12
+ import { inspectWarmState } from "./runtime.mjs";
13
+
14
+ export function previewEncoderRung(ffmpeg, env = process.env) {
15
+ if (ffmpeg) {
16
+ const encoders = spawnSync(ffmpeg, ["-hide_banner", "-encoders"], { encoding: "utf8", timeout: 15000 }).stdout ?? "";
17
+ if (/\blibwebp_anim\b/u.test(encoders)) return "libwebp_anim";
18
+ }
19
+ if (which("img2webp", env)) return "img2webp";
20
+ return ffmpeg ? "gif" : "none";
21
+ }
22
+
23
+ export async function probe(env = process.env) {
24
+ const prewarm = inspectWarmState(env);
25
+ const chrome = findChrome(env);
26
+ const ffmpeg = which("ffmpeg", env);
27
+ const report = {
28
+ chrome: chrome.path ? { ok: true, path: chrome.path, version: chromeVersion(chrome.path) } : { ok: false, detail: `${chrome.missing} (not found on PATH / not installed)` },
29
+ ffmpeg: ffmpeg ? { ok: true, path: ffmpeg, version: (spawnSync(ffmpeg, ["-version"], { encoding: "utf8", timeout: 15000 }).stdout ?? "").split("\n")[0], previewEncoder: previewEncoderRung(ffmpeg, env) }
30
+ : { ok: false, detail: "ffmpeg not found on PATH", previewEncoder: previewEncoderRung(undefined, env) },
31
+ webgl2: { ok: false, renderer: null, flags: [], detail: "" },
32
+ softwareWarning: null,
33
+ prewarm
34
+ };
35
+ if (!chrome.path) report.webgl2.detail = "not probed: Chrome is missing";
36
+ else if (prewarm.deps.length) report.webgl2.detail = `not probed: the pinned driver is not pre-warmed; run ${prewarm.fix}`;
37
+ else {
38
+ const scratch = mkdtempSync(path.join(os.tmpdir(), "ltm-probe-"));
39
+ try {
40
+ const chromium = await loadPlaywright(prewarm.nodeDir);
41
+ const launched = await launchLadder(chromium, chrome.path, scratch, { timeout: 20000 });
42
+ report.webgl2 = { ok: true, renderer: launched.renderer, flags: launched.rung.flags, rung: launched.rung.name };
43
+ await launched.context.close();
44
+ } catch (error) {
45
+ report.webgl2.detail = `no WebGL2 context obtainable (not even software): ${error.message}`;
46
+ } finally {
47
+ rmSync(scratch, { recursive: true, force: true });
48
+ }
49
+ }
50
+ const renderer = report.webgl2.renderer;
51
+ report.softwareWarning = !renderer ? `renderer not probed (${report.webgl2.detail})`
52
+ : renderer === unknownRenderer ? "renderer type unknown — debug-info extension unavailable"
53
+ : isSoftwareRenderer(renderer) ? `software GL detected (${renderer}); renders will be slower, --samples lowered automatically`
54
+ : "none (hardware renderer)";
55
+ return report;
56
+ }
57
+
58
+ export function formatProbe(report) {
59
+ const p = report.prewarm;
60
+ const missing = [...p.deps, ...p.missingFonts, ...p.mismatchedFonts.map((name) => `${name} (hash mismatch)`)];
61
+ return [
62
+ `motion chrome: ${report.chrome.ok ? `${report.chrome.path} — ${report.chrome.version}` : report.chrome.detail}`,
63
+ `motion ffmpeg: ${report.ffmpeg.ok ? `${report.ffmpeg.path} — ${report.ffmpeg.version}` : report.ffmpeg.detail}; preview encoder rung: ${report.ffmpeg.previewEncoder}`,
64
+ `motion webgl2: ${report.webgl2.ok ? `${report.webgl2.renderer} (rung ${report.webgl2.rung}: ${report.webgl2.flags.join(" ")})` : report.webgl2.detail}`,
65
+ `motion software-gl: ${report.softwareWarning}`,
66
+ `motion prewarm: ${p.ready ? `ready in ${p.cache} (Hangul body: ${p.hangul})` : `missing ${missing.join(", ")}; run ${p.fix}`}; audio: ${p.audio.ready ? "ready" : p.audio.reason}; word timing: ${p.wordTiming.reason}`
67
+ ].join("\n");
68
+ }
69
+
70
+ if (process.argv[1] && existsSync(process.argv[1]) && realpathSync(process.argv[1]) === realpathSync(fileURLToPath(import.meta.url))) {
71
+ const json = process.argv.includes("--json");
72
+ if (process.argv.includes("--help")) console.log("lit-typographic-motion probe\nUsage: node probe.mjs [--json]");
73
+ else probe().then((report) => console.log(json ? JSON.stringify(report, null, 2) : formatProbe(report)));
74
+ }
@@ -0,0 +1,110 @@
1
+ # Authoring: brief schema and the scene/engine contract
2
+
3
+ ## The brief (`motion-brief.json`)
4
+
5
+ On the type path the brief lays out the scenes; it comes after the treatment (`treatment.md`), which
6
+ fixes the copy, the length, the sound and the beats. Everything else is derived from the two files,
7
+ deterministically.
8
+
9
+ ```json
10
+ {
11
+ "title": "<the film's own name, printed only when it is also a copy line>",
12
+ "description": "<one line about the film, used for the preset keyword check>",
13
+ "preset": "<swiss-signal, terminalcore or tidal; omit to let MO-B-00 pick>",
14
+ "bpm": "<40-240>",
15
+ "seed": "<integer>",
16
+ "audio": "<optional path to a supplied track>",
17
+ "scenes": [
18
+ { "scene": "title-slam", "text": "<copy line>" },
19
+ { "scene": "karaoke", "text": "<copy line>" },
20
+ { "scene": "kinetic-list", "heading": "<copy line>", "items": ["<item>", "<item>"] },
21
+ { "scene": "counter", "from": "<number>", "to": "<number>", "label": "<copy line>" },
22
+ { "scene": "signature", "text": "<Latin copy line>", "font": "<EMS stroke font>" },
23
+ { "scene": "end-card", "text": "<copy line>", "sub": "<copy line>", "paragraph": "<optional credit block>" }
24
+ ]
25
+ }
26
+ ```
27
+
28
+ The values are placeholders that only show each field's shape; the render refuses a brief that still
29
+ holds one. The copy comes from the treatment's `copy.lines`: the user's words when they gave words,
30
+ otherwise lines written from the treatment's subject. The treatment's `durationSec` sets the length:
31
+ every hold scales up by the same factor (never below its reading floor), and when the floors force a
32
+ longer film the report says so.
33
+
34
+ | Field | Rule |
35
+ | --- | --- |
36
+ | `scenes` | Ordered shots. Omit it to give `lines` instead (first line = title slam, middle lines = karaoke, last = end-card sub line). |
37
+ | `preset` / `style` | An explicit style. Leave both out to let MO-B-00 pick. The report says "user-specified" only when the request names the preset; otherwise "agent default". |
38
+ | `bpm` | Tier-1 grid, 40..240; default 100 (MO-A-14). Ignored when an audio file yields a beat grid. |
39
+ | `seed` | Run seed for every pass seed (`fnv1a32(runSeed:sceneId:shotIndex:pass)`, MO-SH-01). |
40
+ | `audio` | Tier 2: analysed once, offline, by the pre-warmed librosa venv; absent or failed analysis falls back to Tier 1 with a warning (MO-A-19). |
41
+ | `minDurationSec` | Stretches the last shot so the film is at least this long (never shorter than 3 s); the treatment's `durationSec` is the usual target. |
42
+
43
+ Scene kinds: `title-slam` (one line, display voice), `karaoke` (one line revealed one 어절 at a
44
+ time, wrapped at word boundaries when long), `kinetic-list` (two or more items appearing one per
45
+ step), `counter` (a number counting from `from` to `to`, with an optional label), `signature`
46
+ (Latin text written by a single-stroke EMS pen; `font` is one of EMSAllure, EMSFelix, EMSOsmotron,
47
+ EMSReadability, EMSTech) and `end-card` (title, optional sub line and optional paragraph).
48
+ Give each repeated scene its own `sceneId` only if you need to address it; repeats become shot 1,
49
+ shot 2 of the same scene id.
50
+
51
+ ## Timeline (Phase 1)
52
+
53
+ - Tier 1 (default): each shot holds `1.25 x` its reading floor (MO-A-09/10), at least two beats
54
+ (MO-A-16), and every start is a grid beat, so every cut lands within one frame of a beat
55
+ (MO-A-15). Reveal steps are at least 0.35 s (MO-A-12) and land on beats too.
56
+ - Reading floor, one function (MO-C-07/08): `line`/`scene` = max(0.9 s Latin or 1.0 s with Hangul,
57
+ 0.2 s per Hangul syllable + words / 3.3); `word` = max(0.5, same rate); `reveal` = 0.35 s. A
58
+ line/scene must also stay under 17 Latin characters per second. These numbers are provisional.
59
+ - Tier 2: the beat grid replaces the fixed BPM; the same rules apply against it.
60
+ - Tier 3 (`--word-timing`) is opt-in only and fails closed in this build (see runtime.md).
61
+
62
+ The render refuses to start (exit 13, pre-flight) if the generated timeline breaks any of these,
63
+ or if any character of the brief is missing from the font it resolves to (MO-D-04).
64
+
65
+ ## What the engine does with a scene
66
+
67
+ A scene is a pure function of the frame: `f.t` (film seconds), `f.lt`/`f.p` (time and 0..1 progress
68
+ inside its own window), its timeline entry and its reveal units. Every beat inside a scene is a
69
+ function of `f.lt` or `f.p`, never a frame number (MO-A-06). The engine then:
70
+
71
+ 1. renders the pinned sub-sample times `t_n + (shutter/fps)((i + 0.5)/N - 0.5)` (MO-A-28; master
72
+ `--samples 4 --shutter 0.5`, stills and previews one sample);
73
+ 2. composites each sample in linear HDR: the preset's layout passes, the type layer (glyphs from
74
+ real font outlines), then the filter passes;
75
+ 3. averages the samples, runs the post chain once with the centre sample's overrides, in the fixed
76
+ order bloom and halation, chromatic aberration, tone shoulder, grain, vignette, flash,
77
+ shake/zoom, invert (§A7), and applies sRGB exactly once;
78
+ 4. reads the 8-bit frame back and sends the same bytes to the frame hash, the flash audit and ffmpeg.
79
+
80
+ Post overrides a scene may return, with their neutral values (MO-A-58): `exposure` 1, `bloom` 0,
81
+ `bloomThreshold` 0.85, `bloomKnee` 0, `bloomRadius` 0, `halation` 0, `ca` 0, `grain` 0, `vignette` 0,
82
+ `fade` 1, `flash` 0, `shake` [0,0], `zoom` 1, `invert` false. `invert` may change only on a cut and
83
+ must then hold two beats; every rise of `flash` above 0.1 and every `invert` change counts as an
84
+ event, and a shot allows at most two events in any one-second window (MO-SH-03).
85
+
86
+ A scene that carries state across frames is `stateful`: CRT phosphor persistence reads the three
87
+ previous frames' pre-CRT images, so on a seek the engine re-renders those frames first (preroll).
88
+ This keeps a seeked still byte-identical to the same frame of a sequential video (MO-A-25).
89
+
90
+ ## Frame log (`render.jsonl`)
91
+
92
+ One line per pass per frame (`{"frame", "pass", "draws", "uniforms"}`) written by the single
93
+ uniform setter, and one frame line (`"pass": null`) with `rgbaSha256`, `sampleTimes`, `textBoxes`
94
+ (each drawn text's bbox, font, size, weight, voice and script runs), `graphics` (non-glyph element
95
+ boxes), `fills`, the effective post values, the flash transitions and the glyph-ink pixel count.
96
+ The gate reads these records; it never re-detects text from pixels.
97
+
98
+ ## Starter scene craft notes
99
+
100
+ - Title slam: largest size that fits 1440 px, placed low-left on the grid; enters in 180 ms from a
101
+ scale of 1.04 (never from collapsed) with Latin width stepping from 125 to 100; tracking stays at
102
+ -0.035em or looser.
103
+ - Karaoke: glyph positions come from the whole line's layout, so revealed words never shift.
104
+ - Kinetic list: items step in 24 px from the left on their beat; line height 1.5 (Latin) or 1.6
105
+ (Hangul).
106
+ - Counter: the value steps at 15 updates per second and the digit block stays small so changing
107
+ digits never fill a quarter of a 10-degree window.
108
+ - Signature: pen travel is distributed over each character's own time window.
109
+ - End card: title, sub line and an optional 60-75 character paragraph; the one accent mark lives
110
+ here when the preset has an accent and the card is at most 10% of the film.
@@ -0,0 +1,110 @@
1
+ # Look rounds, done and the reply
2
+
3
+ A film is not done when a command exits 0. It is done when a gate PASS, a valid treatment and at
4
+ least two recorded look rounds agree, and the last round looked at the final render's own frames.
5
+
6
+ ## The stills set
7
+
8
+ Every render, `--stills-only` or full, writes the same set:
9
+
10
+ - `stills/beat-NN-mid.png`: the frame at each treatment beat's midpoint;
11
+ - `stills/cut-NN-strip.png`: a strip of three frames around every cut (-6, 0, +6 frames);
12
+ - `sheet/contact.png`: a 12-frame contact sheet across the whole film;
13
+ - `stills/stills.json`: the round, each file's SHA-256 and what each beat should show.
14
+
15
+ A full render adds `poster.png`. Open these files with OpenCode's read tool; only images passed to the
16
+ read tool count as viewed (LitOpenCode records each read of a film's stills). OCR or pixel statistics
17
+ may go in `aids` but never count as looking.
18
+
19
+ ## The nine questions
20
+
21
+ Answer each against a frame you opened. `observed` is at least one sentence naming a concrete
22
+ visible detail in that frame; a bare yes or no is refused.
23
+
24
+ 1. "A stranger would say this film is for: <…>". Ask a fresh subagent that gets only the contact sheet
25
+ and the beat stills, never the request or the treatment, and record its sentence verbatim with
26
+ `by: "blind"`; without a subagent, answer it yourself with `by: "self"`. `verdict: "yes"` when that
27
+ reading matches the treatment's subject.
28
+ 2. Does every beat show its `onScreen` plan?
29
+ 3. Is the craft at the level `ambition` asks for (transitions, rhythm, depth, hierarchy)?
30
+ 4. Is any request text, meta label, placeholder, file name or internal term on screen?
31
+ 5. Does the ending land?
32
+ 6. Does the sound follow the cuts? Answer from `sound-cues.json`.
33
+ 7. Name one thing a skilled motion designer, given only the request, would have shown that this film
34
+ does not. `verdict: "yes"` when you can name one; then revise.
35
+ 8. Is any element on screen without a job in its beat?
36
+ 9. Could every copy line be pasted unchanged into a film about a different subject? If yes, rewrite
37
+ the copy from `subject.specifics`.
38
+
39
+ Another round is required after a "no" on 1, 2, 3, 5 or 6, a "yes" on 4, 8 or 9, or a nameable Q7.
40
+
41
+ ## Recording a round
42
+
43
+ ```sh
44
+ node render.mjs look --out <d> --round N --answers <answers.json>
45
+ ```
46
+
47
+ ```json
48
+ {
49
+ "viewed": ["stills/beat-01-mid.png", "sheet/contact.png"],
50
+ "weakestBeat": "<beat index and why>",
51
+ "change": "<the change you will make before the next render>",
52
+ "answers": [
53
+ { "q": 1, "verdict": "<yes or no>", "frame": "sheet/contact.png", "observed": "<a sentence>", "by": "<blind or self>" }
54
+ ]
55
+ }
56
+ ```
57
+
58
+ - Rounds share one counter with renders (1-3): `look --round N` belongs to the stills set rendered
59
+ with `--round N`, and each round is the previous one plus one.
60
+ - `look` refuses a frame that is not in the latest stills set, and stamps the round with the SHA-256
61
+ of the current manifest (`stills/stills.json` after a stills round, `manifest.json` after a full
62
+ render) and of each listed frame.
63
+ - Round 1 is always a stills round before the first full render; it must name the weakest beat and
64
+ the change.
65
+ - The last round must view the poster, the contact sheet, every beat midpoint and every transition
66
+ strip of the final render.
67
+ - If no image tool is reachable, record `"blocked": "no-vision-tool"`; the done check then ends with
68
+ `DONE_UNVIEWED`, and the reply says in plain words that nobody viewed the frames.
69
+ - At most 3 rounds. After round 3, deliver with every open item stated plainly.
70
+
71
+ ## Done
72
+
73
+ `node gate.mjs --done <d>` exits:
74
+
75
+ | Exit | Status | Meaning |
76
+ | --- | --- | --- |
77
+ | 0 | `DONE` | gate PASS, a valid treatment, 2+ look rounds (round 1 on stills with a change, the last on the final render's manifest and all its frames), no round still asking for another, and, under OpenCode, every viewed frame read with the read tool |
78
+ | 1 | `NOT DONE` | something above is missing; the reason names it |
79
+ | 2 | `DONE_WITH_OPEN_ITEMS` | round 3 is spent; deliver and state each open gate rule or look item |
80
+ | 3 | `DONE_UNVIEWED` | everything else holds, but the frames were not viewed |
81
+
82
+ The done check also compares the final treatment with the first valid one and prints `downgraded:`
83
+ for a length cut of more than 20 %, fewer subject beats, sound switched to none without a user
84
+ request, or a stage film moved to the type path. Never downgrade to pass: fix the cause (a scrim,
85
+ size, placement, timing or seeded randomness) or deliver with the failure stated.
86
+
87
+ ## The reply
88
+
89
+ - Keep the product's activation line where it is; below it, no second banner and no emoji.
90
+ - Plain words, no internal names (no rule ids, no path or preset jargon).
91
+ - One line on the defaults chosen.
92
+ - A label on every invention (subject, name, facts, copy) and on generated sound.
93
+ - One plain line on what was checked: flash safety, legibility, and the frames looked at.
94
+ - Where the copy lives (the `COPY` object in `stage/index.html`, or the brief) and the one command
95
+ that re-renders.
96
+ - Any `downgraded` item and any open look item or failed rule.
97
+
98
+ ## Gate rows (both paths)
99
+
100
+ | Check | Path | Rule |
101
+ | --- | --- | --- |
102
+ | Flash (WCAG 2.3.1) | both | at most 3 general and 3 red flashes in any 1 s window, master and looping preview; the grid and window transpose for 9:16; a failure withholds every export |
103
+ | Size, fps, length | both | stage: exactly the format size, 60 or 30 fps, within ±10 % of `durationSec`; type: 1920x1080 at 60 fps |
104
+ | File sizes | both | preview at most 3 MB, poster at most 1 MB |
105
+ | Reduced-motion still | both | present; on the stage it is the final beat's midpoint |
106
+ | Near-black runs | both | no near-black stretch longer than twice the minimum hold |
107
+ | Sound | both, unless `none` | a stream within ±0.1 s of the video, sample peak at most -0.5 dBFS; a generated bed has no stretch below -50 dBFS RMS longer than 1.5 s in the first 3 s |
108
+ | Determinism | both | stage: 8-16 sample frames replayed from 0 in a fresh browser; type: the cut frames re-rendered and compared |
109
+ | Text | stage | copy found, contrast, title-safe, reading floor, fonts; decor limits; meta labels |
110
+ | Type rules | type | GLSL presence, contrast, reading time, tracking, Hangul, leading, measure, hue clusters, frame time, glyph coverage |
@@ -0,0 +1,88 @@
1
+ # Runtime, pre-warm and BLOCKED codes
2
+
3
+ ## Pre-warm once, read-only afterwards
4
+
5
+ `litopencode motion-runtime install` runs outside any sandboxed session. It installs, into
6
+ `${XDG_CACHE_HOME:-~/.cache}/litopencode/motion-runtime/`:
7
+
8
+ - the engine's pinned JavaScript packages (`playwright-core`, `opentype.js`, `ws`) with
9
+ `npm ci --omit=dev --ignore-scripts` from the lockfile inside this skill, plus a lockfile receipt;
10
+ - the fetched fonts and their licence files, each checked against its pinned sha256 (`fonts/pins.json`):
11
+ Galmuri9 with its OFL text, MesloLGS NF with the Apache-2.0 notice, the Apache-2.0 text and the
12
+ Vera/Arev notices; the official Pretendard Regular only if the lit-pptx Hangul pair is missing;
13
+ - with `--audio`, a Python venv holding the hash-pinned librosa set from `requirements-audio.txt`
14
+ (`pip install --require-hashes --only-binary=:all:`).
15
+
16
+ `litopencode install` attempts the same pre-warm and prints one receipt line; a failure never fails
17
+ the install. A render never installs, fetches or repairs anything: it checks hashes and receipts and
18
+ stops with a named state.
19
+
20
+ `litopencode motion-runtime status` and `litopencode doctor` report five probes on every run:
21
+ Chrome (path and version), ffmpeg (version and the preview encoder rung: `libwebp_anim`, `img2webp`
22
+ or GIF), the WebGL2 renderer string from a real headless probe, the software-GL or unknown-renderer
23
+ warning, and the pre-warm state naming what is missing and the command that fixes it.
24
+
25
+ ## Exit codes
26
+
27
+ | Exit | Name | Meaning | Fix |
28
+ | --- | --- | --- | --- |
29
+ | 0 | OK | the requested mode finished; for `film`, the gate passed | none |
30
+ | 10 | BLOCKED_NO_CHROME | Chrome is missing or failed to start headless; the message carries its first error line | install Chrome or set `CHROME_PATH` |
31
+ | 11 | BLOCKED_NO_WEBGL2 | Chrome ran but no rung produced a WebGL2 context | check GPU drivers; the SwiftShader rung is already tried |
32
+ | 12 | BLOCKED_NO_FFMPEG_FOR_VIDEO | a film was requested without ffmpeg | install ffmpeg; `--stills-only`, `stills` and `sheet` still work |
33
+ | 13 | GATE_FAIL_QA | pre-flight or the full gate failed; the report names the rules | fix and rerun the next round |
34
+ | 14 | BLOCKED_DEPS_NOT_PREWARMED | the pinned packages are absent (or Tier-3 models are requested) | `litopencode motion-runtime install` outside the session |
35
+ | 15 | BLOCKED_FONT_FETCH | a required font is missing or its bytes do not match the pin | `litopencode motion-runtime install`; a mismatch is never accepted |
36
+ | 16 | BLOCKED_TREATMENT_INVALID | `treatment.json` is missing or a field breaks its rule; the message names the field | fix that field (`treatment.md`) |
37
+ | 17 | STAGE_CONTRACT_ERROR | the stage page broke its contract: no `LitStage.define`, a wrong size, a forbidden element or API, a flipbook or animated raster, a path outside `stage/`, or a copy line never found on screen | fix the page (`stage.md`) |
38
+ | 18 | STAGE_NONDETERMINISTIC | a sample frame differs between the master and a fresh replay from 0; the message names the frame and the first region | remove the clock or random source the renderer does not drive |
39
+ | 19 | STAGE_NETWORK_REQUEST | the page requested something outside the stage origin, or a stage file names an external URL | make the asset local |
40
+ | 20 | SOUND_INVALID | the planned track is missing from the film, too long or short, too loud, or a generated bed starts silent | fix the track or its plan |
41
+
42
+ ## Chrome, egress and the sandbox
43
+
44
+ - Launch ladder (MO-A-51), first rung that yields a real `getContext('webgl2')` in the page wins and
45
+ is recorded as `chromeFlags`: the platform GPU rung (macOS `--use-angle=metal`, Linux
46
+ `--use-angle=gl`, Windows `--use-angle=d3d11`), then `--use-angle=swiftshader
47
+ --enable-unsafe-swiftshader`. The anti-throttling flags are always appended. The Chrome profile
48
+ lives in `<out>/.run/` and is removed on exit; Chrome is driven over a pipe, so no control port.
49
+ - Frame egress: a WebSocket on `127.0.0.1:0`. If the sandbox refuses to listen, each frame's
50
+ readback buffer is pulled over CDP instead. Either way the hash, the flash audit and ffmpeg see
51
+ the same bytes.
52
+ - A software renderer (SwiftShader, llvmpipe, softpipe, lavapipe, Apple Software Renderer,
53
+ Microsoft Basic Render Driver) is allowed and labelled: one sample per frame, tidal octaves
54
+ halved (at least 3), CRT persistence off, affected pass ranges marked `downgraded`.
55
+
56
+ ## The stage renderer
57
+
58
+ - The stage path always uses the software rung (SwiftShader, CPU raster) with the compositor, image
59
+ and animation flags that keep capture deterministic, `--mute-audio`, `--force-color-profile=srgb`,
60
+ `--force-device-scale-factor=1`, the window at the format size, and the mock-keychain flags.
61
+ - The page is served from the synthetic origin `http://lit.stage/` through request interception, so
62
+ nothing listens on a port; every other request fails and is recorded (exit 19), and a host
63
+ resolver rule maps every other host to nothing as a backstop.
64
+ - Three browsers run side by side: the master capture, a fresh replay for the determinism samples and
65
+ a separate QA replay that hides text to measure ink. The master never changes a style.
66
+ - Fonts come from this skill and the pre-warmed cache; an unwarmed cache stops with exit 14.
67
+
68
+ ## Sound
69
+
70
+ - Generated (the default under bare `lit`, on both paths): a deterministic bed from the treatment,
71
+ built in code with no network or model weights: tempo, pulse and a chord pad, plus the accents the
72
+ beats ask for. 48 kHz 16-bit stereo, exactly the film's length, peaks at most -2 dBFS, integrated
73
+ loudness about -16 LUFS (ITU-R BS.1770-4, measured in this code). `sound-cues.json` lists every cue
74
+ against its cut. `node render.mjs sound --out <d>` builds it on its own.
75
+ - Supplied or authored tracks are always muxed, whatever the audio-analysis tier's state, padded or
76
+ trimmed to the film with a 50 ms fade. AAC at 256 kb/s.
77
+
78
+ ## Audio analysis tiers (the type path's cut grid)
79
+
80
+ - Tier 1 (default): text reading time and a BPM grid.
81
+ - Tier 2: a supplied audio file is analysed once by the pre-warmed venv into a beat grid for this
82
+ run only. An absent venv, a venv that no longer matches its pins, or a failed analysis falls back
83
+ to Tier 1 with a warning; the venv is never repaired in the session.
84
+ - Tier 3 (`--word-timing`, opt-in only): `motion-runtime install --word-timing` states the download
85
+ size and every model pin before downloading and fails closed unless each model has a pinned id,
86
+ revision and a verified licence that allows commercial use. This build pins no licence-verified
87
+ Korean alignment model, so the install fails closed and a render with `--word-timing` exits 14.
88
+ MMS_FA and madmom weights, aubio and essentia are never used at any tier.
@@ -0,0 +1,164 @@
1
+ # Stage path: authoring a page the renderer films
2
+
3
+ Load this after the treatment says `path: stage`. On the stage path you are the illustrator, the
4
+ animator and the editor: you write one page that draws the film as a function of time, and the
5
+ renderer captures it frame by frame, deterministically, then gates, checks and encodes it. The page
6
+ is yours; the kit gives motion primitives, never ready-made scenes, objects or layouts.
7
+
8
+ ## Files
9
+
10
+ - `<out>/treatment.json`: the treatment (see `treatment.md`).
11
+ - `<out>/stage/index.html`: the page. Put its own SVG, PNG, JPG, WebP, JS, CSS and WAV files beside
12
+ it under `stage/`. Write everything yourself; never install, download or copy a third-party library
13
+ into the stage directory.
14
+ - Rasters are textures and stills, never a frame sequence: at most 24 raster files and 8 MB in total.
15
+ Ten or more rasters of one size (a flipbook), or any animated GIF, APNG or WebP, stops the render
16
+ with exit 17.
17
+
18
+ ## The page contract
19
+
20
+ ```html
21
+ <!doctype html>
22
+ <meta charset="utf-8">
23
+ <link rel="stylesheet" href="/lit/fonts.css">
24
+ <script src="/lit/stage-kit.js"></script>
25
+ <body>…your SVG, DOM and canvases…</body>
26
+ <script>
27
+ const COPY = { /* every on-screen line, in one place, so copy is easy to edit */ };
28
+ LitStage.define({ width: 1920, height: 1080, fps: 60, duration: 16, render(t) { /* draw frame t */ } });
29
+ </script>
30
+ ```
31
+
32
+ - `LitStage.define({ width, height, fps, duration, render })` (or `window.litStage = { … }`). The size
33
+ must match the treatment's `format`: 1920x1080 for 16:9, 1080x1920 for 9:16. `fps` is 60, or 30 when
34
+ the treatment says so. `duration` in seconds must land within ±10 % of `durationSec`.
35
+ - `render(t)` draws the frame at time `t` in seconds. Make it a pure function of `t` where you can;
36
+ that keeps every frame seekable and deterministic.
37
+ - You may also use CSS animations and transitions, the Web Animations API, SVG SMIL, and
38
+ `requestAnimationFrame` with Canvas2D or WebGL. The renderer drives all of them from a virtual
39
+ clock: `Date`, `performance.now`, timers, `requestAnimationFrame`, `requestIdleCallback`,
40
+ `document.timeline` and `Math.random` (seeded from the treatment's `seed`) all read film time.
41
+ - The page is served from `http://lit.stage/` with no listening socket. Only files inside `stage/`,
42
+ the kit and the fonts are served; `..` and symlinks that leave the directory are refused.
43
+ - Fonts: `/lit/fonts.css` declares the product's faces with `font-display: block`: `Archivo` (widths
44
+ 75 %, 100 %, 125 %; weights 400, 700, 900), `LitOpenCode Sans` (400, 700; Hangul), `VT323`,
45
+ `Silkscreen` (400, 700), `MesloLGS NF` and `Galmuri9`. Use only these; the QA checks the platform
46
+ font behind every copy line.
47
+
48
+ ## Forbidden (the render stops)
49
+
50
+ | Stops with | What |
51
+ | --- | --- |
52
+ | 17 `STAGE_CONTRACT_ERROR` | `<video>`, `<audio>`, `<iframe>`, `<object>`, `<embed>`, `<frame>`; `new Audio()`, `AudioContext`, `OfflineAudioContext`; `Worker`, `SharedWorker`, service workers; no `LitStage.define`; a wrong size; a flipbook or animated raster; a copy line never found on screen |
53
+ | 18 `STAGE_NONDETERMINISTIC` | a frame that differs between two fresh replays: wall-clock reads such as `performance.timeOrigin`, `crypto.getRandomValues`, or state that depends on how fast frames arrive |
54
+ | 19 `STAGE_NETWORK_REQUEST` | any request outside the stage origin; an absolute `http(s)://` or `//host` URL in a stage file (W3C namespace URIs such as `http://www.w3.org/2000/svg` are fine); `preconnect`, `dns-prefetch`, `prefetch` or `prerender` links; `WebSocket`, `WebTransport`, `RTCPeerConnection` |
55
+
56
+ A page that asks for a WebGL context and gets none stops with exit 11.
57
+
58
+ ## Kit reference (`/lit/stage-kit.js`, global `LitStage`)
59
+
60
+ Easing. Named curves plus `bezier()`:
61
+
62
+ ```js
63
+ const e = LitStage.ease.snap(0.4); // also linear, in/out/inOut Quad..Quint, Sine, Expo, Circ, Back, glide, settle, exit, anticipate
64
+ const custom = LitStage.bezier(0.2, 0.9, 0.1, 1)(p);
65
+ ```
66
+
67
+ Spring (closed form, exact at any `t`):
68
+
69
+ ```js
70
+ const y = LitStage.spring({ stiffness: 180, damping: 14, from: 80, to: 0 })(t - 1.2);
71
+ ```
72
+
73
+ Keyframes over numbers, arrays or colours:
74
+
75
+ ```js
76
+ const x = LitStage.kf(t, [{ t: 0, v: -200 }, { t: 1.4, v: 0, ease: "settle" }, { t: 3, v: 40, ease: "glide" }]);
77
+ ```
78
+
79
+ Timing windows, staggers and sequences:
80
+
81
+ ```js
82
+ const p = LitStage.at(t, 2.0, 0.8, "snap"); // 0..1 inside [2.0, 2.8]
83
+ const delay = LitStage.stagger(i, { each: 0.06, from: "center", n: items.length });
84
+ const s = LitStage.seq([["enter", 0.6], ["hold", 2.4], ["leave", 0.5]], 4); s.hold.progress(t);
85
+ ```
86
+
87
+ Seeded random (the treatment's `seed` by default):
88
+
89
+ ```js
90
+ const r = LitStage.rand(); const jitter = r.range(-4, 4); const pick = r.pick(list);
91
+ ```
92
+
93
+ Text splitting, grapheme- and 어절-aware:
94
+
95
+ ```js
96
+ const parts = LitStage.splitText(el, { by: "grapheme" }); // or "word" (a Hangul 어절 stays whole) or "line"
97
+ ```
98
+
99
+ SVG path drawing and a single-subpath morph (multi-subpath morphs are unsupported; morph each
100
+ subpath on its own):
101
+
102
+ ```js
103
+ LitStage.drawPath(pathEl, LitStage.at(t, 0.5, 1.5, "glide"));
104
+ const shape = LitStage.morph(fromD, toD); pathEl.setAttribute("d", shape(p));
105
+ ```
106
+
107
+ Masks, clips and colour:
108
+
109
+ ```js
110
+ LitStage.clip.circle(el, p, { cx: 30, cy: 60 }); LitStage.clip.wipe(el, p, "left"); LitStage.clip.iris(el, p);
111
+ LitStage.mask.linear(el, p, { angle: 120, soft: 10 }); LitStage.mask.radial(el, p);
112
+ el.style.fill = LitStage.mix("#1b3a4b", "#e0a458", p); // mixed in linear light
113
+ ```
114
+
115
+ Text registration for the QA:
116
+
117
+ ```js
118
+ LitStage.text(titleEl); // one reading run
119
+ LitStage.text(signEl, { decor: true }); // illustrative text inside a drawn subject
120
+ LitStage.text({ content: "…", x, y, w, h }); // canvas or WebGL text, every frame it is drawn
121
+ ```
122
+
123
+ ## How the QA reads the stage
124
+
125
+ - Every `copy.lines` entry must appear on screen at some beat; a missing line stops the render with
126
+ exit 17 and quotes it. Keep copy in DOM or SVG text where you can; canvas copy is found through its
127
+ registration, but its contrast is not measured (a WARN).
128
+ - Copy runs FAIL on contrast (3.0 for large type, 4.5 for body; large means at least 3 % of the
129
+ frame's short side), on leaving the central 90 % title-safe area and on a hold shorter than the
130
+ reading floor. Decor runs only WARN on contrast, are exempt from title-safe and the reading floor,
131
+ may not carry a copy line, and may cover at most 25 % of the visible text area.
132
+ - A run equal to or containing the request, the idea, a file name or a word such as path, preset,
133
+ gate, beat or treatment is a WARN the look must answer.
134
+ - Canvas text drawn without registration is not measured (a WARN the look must answer).
135
+ - The subject must be drawn: when every word is hidden, at least half of the beat midpoints still
136
+ carry visible structure outside the text boxes.
137
+
138
+ ## Determinism
139
+
140
+ - The renderer replays the clock from 0 in a fresh browser and compares 8-16 sample frames by the
141
+ SHA-256 of their pixels. A mismatch stops with exit 18, naming the frame and the first region.
142
+ - Filters (`blur()`, `backdrop-filter`, `mix-blend-mode`, `box-shadow`, SVG `feGaussianBlur`, Canvas2D
143
+ `shadowBlur`) and WebGL shaders are deterministic on the software renderer the stage uses.
144
+ - Seed every random choice from `LitStage.rand()` or `Math.random()` (both seeded); never read
145
+ `crypto.getRandomValues` or `performance.timeOrigin`.
146
+
147
+ ## Rendering
148
+
149
+ - Stills round: `node render.mjs stage --out <d> --stills-only --round 1` (about 20 s): the beat
150
+ midpoints, a strip around every cut and a 12-frame contact sheet, no encode.
151
+ - Film: `node render.mjs stage --out <d> --round N`. Give the command a timeout of at least 600 s; a
152
+ 15 s 1080x1920 film with its checks takes a few minutes. Never shorten the film to save render time.
153
+ Progress is written to `<d>/.run/progress.json`. When the host's command timeout is shorter, add
154
+ `--detach`: the render continues in the background, and `<d>/.run/render-exit.json` holds its exit
155
+ code when it ends (the log is `<d>/.run/render.log`).
156
+ - Outputs: `film.mp4` (H.264, BT.709, sound muxed), `preview.webp` or `.gif`, `poster.png`,
157
+ `reduced-motion.png` (the final beat's midpoint), `manifest.json`, `gate-report.txt`, `stills/`,
158
+ `sheet/` and `sound-cues.json`.
159
+
160
+ ## Sound on the stage
161
+
162
+ The default is the generated bed (`sound.mode: generated`). To score the film yourself, write a WAV
163
+ into `stage/` and set `sound: { mode: "authored", file: "stage/<name>.wav", plan }`. The page itself
164
+ never plays audio: audio elements and audio contexts are forbidden, and the renderer muxes the track.