@litfamily/litopencode 1.0.31 → 1.0.32

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 (267) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/README-Ko-KR.md +6 -6
  3. package/README.md +6 -6
  4. package/dist/activation-probe.js +1 -0
  5. package/dist/activation-prompt-utils.d.ts +1 -1
  6. package/dist/activation-reentry.d.ts +20 -0
  7. package/dist/activation-reentry.js +110 -1
  8. package/dist/activation-routing.d.ts +2 -1
  9. package/dist/activation-routing.js +100 -11
  10. package/dist/activation-workflow-prompts.d.ts +4 -0
  11. package/dist/activation-workflow-prompts.js +30 -0
  12. package/dist/activation.d.ts +1 -1
  13. package/dist/activation.js +44 -5
  14. package/dist/adhd-next.d.ts +51 -0
  15. package/dist/adhd-next.js +150 -0
  16. package/dist/cli/managed-skill-assets.d.ts +1 -1
  17. package/dist/cli/managed-skill-assets.js +7 -1
  18. package/dist/cli/native-skill-integrity.js +1 -1
  19. package/dist/cli.js +7 -1
  20. package/dist/commands.d.ts +28 -1
  21. package/dist/commands.js +48 -1
  22. package/dist/features.d.ts +80 -1
  23. package/dist/features.js +105 -1
  24. package/dist/ledger.js +12 -1
  25. package/dist/secret-shapes.js +5 -5
  26. package/dist/skills.d.ts +22 -1
  27. package/dist/skills.js +36 -0
  28. package/dist/start-work-typed.d.ts +34 -0
  29. package/dist/start-work-typed.js +156 -0
  30. package/dist/state.d.ts +2 -0
  31. package/dist/state.js +2 -0
  32. package/dist/tools.js +22 -2
  33. package/dist/tui/mission-band.d.ts +20 -1
  34. package/dist/tui/mission-band.js +73 -16
  35. package/dist/tui/mission-looks.d.ts +38 -0
  36. package/dist/tui/mission-looks.js +73 -0
  37. package/dist/tui/mission-model.d.ts +2 -0
  38. package/dist/tui/mission-model.js +3 -1
  39. package/dist/tui/mission-rainbow.d.ts +33 -0
  40. package/dist/tui/mission-rainbow.js +90 -0
  41. package/dist/tui/mission-source.d.ts +48 -0
  42. package/dist/tui/mission-source.js +184 -2
  43. package/dist/tui/mission-text.d.ts +2 -0
  44. package/dist/tui/mission-text.js +9 -1
  45. package/dist/tui/mission-threads.d.ts +50 -0
  46. package/dist/tui/mission-threads.js +119 -0
  47. package/dist/tui.js +84 -6
  48. package/dist/uiux-visual-catalog.js +8 -1
  49. package/dist/v2/session-hooks.js +38 -5
  50. package/dist/workflow-stack.d.ts +53 -0
  51. package/dist/workflow-stack.js +196 -0
  52. package/docs/assets/readme/badge-version.svg +1 -1
  53. package/docs/assets/skills/lit-schematic.webp +0 -0
  54. package/docs/reference-Ko-KR.md +30 -2
  55. package/docs/reference.md +34 -2
  56. package/package.json +1 -1
  57. package/skills/frontend-ui-ux/SKILL.md +3 -2
  58. package/skills/frontend-ui-ux/kit/components.css +414 -0
  59. package/skills/frontend-ui-ux/kit/fonts.json +22 -0
  60. package/skills/frontend-ui-ux/kit/layouts/landing.html +164 -0
  61. package/skills/frontend-ui-ux/kit/layouts/settings.html +114 -0
  62. package/skills/frontend-ui-ux/kit/layouts/workspace.html +115 -0
  63. package/skills/frontend-ui-ux/kit/styles/computational-brutalism.json +227 -0
  64. package/skills/frontend-ui-ux/kit/styles/field-notes.json +205 -0
  65. package/skills/frontend-ui-ux/kit/styles/graphite.json +200 -0
  66. package/skills/frontend-ui-ux/kit/styles/meadow.json +199 -0
  67. package/skills/frontend-ui-ux/kit/styles/neo-brutalism.json +222 -0
  68. package/skills/frontend-ui-ux/kit/ui.js +226 -0
  69. package/skills/frontend-ui-ux/references/brand-and-imagery.md +2 -2
  70. package/skills/frontend-ui-ux/references/complete-contract.md +2 -1
  71. package/skills/frontend-ui-ux/references/craft-floor.md +6 -2
  72. package/skills/frontend-ui-ux/references/default-editorial-pixel.json +3 -0
  73. package/skills/frontend-ui-ux/references/house-styles.md +236 -0
  74. package/skills/frontend-ui-ux/references/motion-guide.md +2 -2
  75. package/skills/frontend-ui-ux/references/production.md +3 -1
  76. package/skills/frontend-ui-ux/references/slop-register.md +4 -4
  77. package/skills/frontend-ui-ux/scripts/design-lock.mjs +400 -0
  78. package/skills/frontend-ui-ux/scripts/pixel-art.mjs +60 -0
  79. package/skills/frontend-ui-ux/scripts/probe-lock.mjs +235 -0
  80. package/skills/frontend-ui-ux/scripts/probe-page.mjs +34 -12
  81. package/skills/frontend-ui-ux/scripts/probe-static.mjs +16 -3
  82. package/skills/frontend-ui-ux/scripts/probe-thresholds.json +8 -2
  83. package/skills/frontend-ui-ux/scripts/probe.mjs +35 -7
  84. package/skills/lit-adhd/SKILL.md +208 -0
  85. package/skills/lit-adhd/references/brief-format.md +43 -0
  86. package/skills/lit-adhd/references/card-examples.md +82 -0
  87. package/skills/lit-adhd/references/status-taxonomy.md +29 -0
  88. package/skills/lit-adhd/scripts/rewind.mjs +835 -0
  89. package/skills/lit-diagram-drawer/SKILL.md +4 -3
  90. package/skills/lit-diagram-drawer/references/style-guide.md +20 -11
  91. package/skills/lit-diagram-drawer/references/type-architecture.md +3 -3
  92. package/skills/lit-diagram-drawer/references/type-dependency.md +1 -1
  93. package/skills/lit-diagram-drawer/references/type-tree.md +3 -3
  94. package/skills/lit-diagram-drawer/references/type-wardley.md +1 -1
  95. package/skills/lit-diagram-drawer/references/verifier-guide.md +1 -0
  96. package/skills/lit-diagram-drawer/scripts/craft-thresholds.json +1 -2
  97. package/skills/lit-diagram-drawer/scripts/visual-quality.mjs +1 -2
  98. package/skills/lit-docx/SKILL.md +2 -1
  99. package/skills/lit-handoff/SKILL.md +2 -0
  100. package/skills/lit-hijack/SKILL.md +422 -0
  101. package/skills/lit-hijack/references/capture-and-provenance.md +87 -0
  102. package/skills/lit-hijack/references/clean-room-build.md +111 -0
  103. package/skills/lit-hijack/references/distil-and-licence.md +100 -0
  104. package/skills/lit-hijack/references/gap-and-port-design.md +126 -0
  105. package/skills/lit-hijack/references/parity-and-report.md +110 -0
  106. package/skills/lit-hijack/scripts/hijack.mjs +993 -0
  107. package/skills/lit-plan/SKILL.md +2 -0
  108. package/skills/lit-pptx/SKILL.md +27 -11
  109. package/skills/lit-pptx/fonts/jetbrains-mono/JetBrainsMono-Bold.ttf +0 -0
  110. package/skills/lit-pptx/fonts/jetbrains-mono/JetBrainsMono-Regular.ttf +0 -0
  111. package/skills/lit-pptx/fonts/jetbrains-mono/OFL.txt +93 -0
  112. package/skills/lit-pptx/fonts/jetbrains-mono/SOURCE.md +17 -0
  113. package/skills/lit-pptx/references/density-and-fill.md +9 -3
  114. package/skills/lit-pptx/references/direction-step.md +21 -6
  115. package/skills/lit-pptx/references/examples/04-lecture-chalk-ko.md +3 -6
  116. package/skills/lit-pptx/references/examples/05-research-talk-paper-en.md +1 -5
  117. package/skills/lit-pptx/references/examples/08-reliability-keynote-night-en.md +0 -4
  118. package/skills/lit-pptx/references/examples/09-status-update-ledger-en.md +2 -2
  119. package/skills/lit-pptx/references/examples/11-forecast-review-night-ko.md +4 -7
  120. package/skills/lit-pptx/references/examples/13-engineering-review-computational-brutalism-ko.md +173 -0
  121. package/skills/lit-pptx/references/examples/14-launch-pitch-neo-brutalism-ko.md +154 -0
  122. package/skills/lit-pptx/references/examples/15-design-lecture-bauhaus-ko.md +139 -0
  123. package/skills/lit-pptx/references/examples/16-community-programme-riso-ko.md +158 -0
  124. package/skills/lit-pptx/references/examples/17-public-data-briefing-newsroom-ko.md +179 -0
  125. package/skills/lit-pptx/references/layout-families.md +65 -47
  126. package/skills/lit-pptx/references/title-treatments.md +83 -134
  127. package/skills/lit-pptx/references/tonalities/atlas.md +3 -3
  128. package/skills/lit-pptx/references/tonalities/bauhaus.md +140 -0
  129. package/skills/lit-pptx/references/tonalities/chalk.md +7 -6
  130. package/skills/lit-pptx/references/tonalities/computational-brutalism.md +150 -0
  131. package/skills/lit-pptx/references/tonalities/gazette.md +1 -1
  132. package/skills/lit-pptx/references/tonalities/ledger.md +1 -1
  133. package/skills/lit-pptx/references/tonalities/neo-brutalism.md +161 -0
  134. package/skills/lit-pptx/references/tonalities/newsroom.md +144 -0
  135. package/skills/lit-pptx/references/tonalities/night.md +1 -1
  136. package/skills/lit-pptx/references/tonalities/paper.md +2 -2
  137. package/skills/lit-pptx/references/tonalities/riso.md +137 -0
  138. package/skills/lit-pptx/references/tonalities/signal.md +3 -3
  139. package/skills/lit-pptx/references/tonalities/studio.md +7 -6
  140. package/skills/lit-pptx/run.mjs +2 -1
  141. package/skills/lit-pptx/scripts/compile-deck.js +1 -1
  142. package/skills/lit-pptx/scripts/craft-thresholds.json +4 -8
  143. package/skills/lit-pptx/scripts/craft_extras.py +56 -3
  144. package/skills/lit-pptx/scripts/deck_output.py +75 -90
  145. package/skills/lit-pptx/scripts/embed_fonts.py +13 -1
  146. package/skills/lit-pptx/scripts/layout_inventory.py +12 -5
  147. package/skills/lit-pptx/scripts/lib/grid-resolver.js +101 -110
  148. package/skills/lit-pptx/scripts/lib/layout-resolver.js +9 -15
  149. package/skills/lit-pptx/scripts/lib/render-pack.js +373 -566
  150. package/skills/lit-pptx/scripts/lib/slide-grid.js +104 -0
  151. package/skills/lit-pptx/scripts/lib/template-registry.js +57 -6
  152. package/skills/lit-pptx/scripts/qa_deck.py +10 -11
  153. package/skills/lit-pptx/scripts/render_pages.py +118 -0
  154. package/skills/lit-pptx/templates/tonalities/atlas/pack.yaml +1 -1
  155. package/skills/lit-pptx/templates/tonalities/bauhaus/pack.yaml +98 -0
  156. package/skills/lit-pptx/templates/tonalities/chalk/pack.yaml +1 -1
  157. package/skills/lit-pptx/templates/tonalities/computational-brutalism/pack.yaml +99 -0
  158. package/skills/lit-pptx/templates/tonalities/gazette/pack.yaml +1 -1
  159. package/skills/lit-pptx/templates/tonalities/ledger/pack.yaml +1 -1
  160. package/skills/lit-pptx/templates/tonalities/neo-brutalism/pack.yaml +107 -0
  161. package/skills/lit-pptx/templates/tonalities/newsroom/pack.yaml +99 -0
  162. package/skills/lit-pptx/templates/tonalities/night/pack.yaml +1 -1
  163. package/skills/lit-pptx/templates/tonalities/paper/pack.yaml +1 -1
  164. package/skills/lit-pptx/templates/tonalities/riso/pack.yaml +99 -0
  165. package/skills/lit-pptx/templates/tonalities/signal/pack.yaml +2 -2
  166. package/skills/lit-pptx/templates/tonalities/studio/pack.yaml +1 -1
  167. package/skills/lit-recap/SKILL.md +4 -0
  168. package/skills/lit-schematic/SKILL.md +118 -0
  169. package/skills/lit-schematic/examples/iso-heat-exchanger/build.mjs +38 -0
  170. package/skills/lit-schematic/examples/iso-heat-exchanger/scene.mjs +133 -0
  171. package/skills/lit-schematic/examples/journal-adsorption-rig/build.mjs +87 -0
  172. package/skills/lit-schematic/examples/pid-dosing-skid/build.mjs +85 -0
  173. package/skills/lit-schematic/references/cutaway-outputs.md +70 -0
  174. package/skills/lit-schematic/references/isometric-craft.md +101 -0
  175. package/skills/lit-schematic/references/journal-figures.md +72 -0
  176. package/skills/lit-schematic/references/kit-api.md +134 -0
  177. package/skills/lit-schematic/references/pfd-and-layout.md +53 -0
  178. package/skills/lit-schematic/references/pid-drafting.md +103 -0
  179. package/skills/lit-schematic/references/pid-symbols.md +163 -0
  180. package/skills/lit-schematic/references/verification.md +100 -0
  181. package/skills/lit-schematic/scripts/doctor.mjs +57 -0
  182. package/skills/lit-schematic/scripts/lib/figure.mjs +81 -0
  183. package/skills/lit-schematic/scripts/lib/fonts.mjs +25 -0
  184. package/skills/lit-schematic/scripts/lib/geom.mjs +113 -0
  185. package/skills/lit-schematic/scripts/lib/interactive.mjs +292 -0
  186. package/skills/lit-schematic/scripts/lib/isa.mjs +115 -0
  187. package/skills/lit-schematic/scripts/lib/iso.mjs +719 -0
  188. package/skills/lit-schematic/scripts/lib/legend-sheet.mjs +162 -0
  189. package/skills/lit-schematic/scripts/lib/pid.mjs +937 -0
  190. package/skills/lit-schematic/scripts/lib/png.mjs +132 -0
  191. package/skills/lit-schematic/scripts/lib/qa-core.mjs +658 -0
  192. package/skills/lit-schematic/scripts/lib/route.mjs +218 -0
  193. package/skills/lit-schematic/scripts/lib/sheet.mjs +890 -0
  194. package/skills/lit-schematic/scripts/lib/svg.mjs +82 -0
  195. package/skills/lit-schematic/scripts/lib/theme.mjs +115 -0
  196. package/skills/lit-schematic/scripts/motion.mjs +129 -0
  197. package/skills/lit-schematic/scripts/qa.mjs +92 -0
  198. package/skills/lit-schematic/scripts/render.mjs +233 -0
  199. package/skills/lit-schematic/scripts/scaffold.mjs +60 -0
  200. package/skills/lit-scientific-visualization/SKILL.md +27 -4
  201. package/skills/lit-typographic-motion/SKILL.md +19 -17
  202. package/skills/lit-typographic-motion/THIRD_PARTY_NOTICES +9 -0
  203. package/skills/lit-typographic-motion/engine/accents.mjs +6 -0
  204. package/skills/lit-typographic-motion/engine/assets.mjs +282 -0
  205. package/skills/lit-typographic-motion/engine/blender/runner.py +228 -0
  206. package/skills/lit-typographic-motion/engine/blender.mjs +126 -0
  207. package/skills/lit-typographic-motion/engine/board.mjs +138 -0
  208. package/skills/lit-typographic-motion/engine/cover/assets.mjs +11 -8
  209. package/skills/lit-typographic-motion/engine/cover/capture.mjs +6 -6
  210. package/skills/lit-typographic-motion/engine/cover/render.mjs +20 -7
  211. package/skills/lit-typographic-motion/engine/cover/treatment.mjs +30 -3
  212. package/skills/lit-typographic-motion/engine/fill.mjs +54 -0
  213. package/skills/lit-typographic-motion/engine/gallery.mjs +118 -0
  214. package/skills/lit-typographic-motion/engine/house.mjs +42 -0
  215. package/skills/lit-typographic-motion/engine/look.mjs +65 -8
  216. package/skills/lit-typographic-motion/engine/loudness.mjs +101 -0
  217. package/skills/lit-typographic-motion/engine/scaffold.mjs +219 -0
  218. package/skills/lit-typographic-motion/engine/score.mjs +594 -0
  219. package/skills/lit-typographic-motion/engine/sound.mjs +9 -57
  220. package/skills/lit-typographic-motion/engine/stage/capture.mjs +23 -9
  221. package/skills/lit-typographic-motion/engine/stage/clock.js +8 -2
  222. package/skills/lit-typographic-motion/engine/stage/cover-init.js +12 -1
  223. package/skills/lit-typographic-motion/engine/stage/frame-worker.mjs +15 -7
  224. package/skills/lit-typographic-motion/engine/stage/gate.mjs +48 -4
  225. package/skills/lit-typographic-motion/engine/stage/qa-page.js +16 -5
  226. package/skills/lit-typographic-motion/engine/stage/qa.mjs +148 -7
  227. package/skills/lit-typographic-motion/engine/stage/render.mjs +69 -7
  228. package/skills/lit-typographic-motion/engine/stage/scan.mjs +20 -1
  229. package/skills/lit-typographic-motion/engine/stage/stage-kit.js +85 -4
  230. package/skills/lit-typographic-motion/engine/stills.mjs +1 -1
  231. package/skills/lit-typographic-motion/engine/styles.mjs +221 -0
  232. package/skills/lit-typographic-motion/engine/text.mjs +1 -1
  233. package/skills/lit-typographic-motion/engine/treatment.mjs +190 -6
  234. package/skills/lit-typographic-motion/engine/vendor/three/LICENSE +21 -0
  235. package/skills/lit-typographic-motion/engine/vendor/three/addons/environments/RoomEnvironment.js +144 -0
  236. package/skills/lit-typographic-motion/engine/vendor/three/addons/geometries/RoundedBoxGeometry.js +155 -0
  237. package/skills/lit-typographic-motion/engine/vendor/three/three.module.js +54571 -0
  238. package/skills/lit-typographic-motion/gate.mjs +18 -2
  239. package/skills/lit-typographic-motion/probe.mjs +13 -1
  240. package/skills/lit-typographic-motion/recipes/hero-3d/expected.json +64 -0
  241. package/skills/lit-typographic-motion/recipes/hero-3d/index.html +132 -0
  242. package/skills/lit-typographic-motion/recipes/orbit-loop/expected.json +2 -0
  243. package/skills/lit-typographic-motion/recipes/painted-light/expected.json +2 -0
  244. package/skills/lit-typographic-motion/recipes/weight-tide/expected.json +2 -0
  245. package/skills/lit-typographic-motion/references/cover.md +56 -13
  246. package/skills/lit-typographic-motion/references/craft-loop.md +20 -7
  247. package/skills/lit-typographic-motion/references/depth.md +112 -0
  248. package/skills/lit-typographic-motion/references/runtime.md +21 -6
  249. package/skills/lit-typographic-motion/references/sound.md +76 -0
  250. package/skills/lit-typographic-motion/references/stage.md +50 -7
  251. package/skills/lit-typographic-motion/references/studio.md +162 -0
  252. package/skills/lit-typographic-motion/references/style-bibles.md +18 -0
  253. package/skills/lit-typographic-motion/references/treatment.md +108 -9
  254. package/skills/lit-typographic-motion/render.mjs +60 -3
  255. package/skills/lit-typographic-motion/styles/paper.json +185 -0
  256. package/skills/lit-typographic-motion/styles/swiss-signal.json +188 -0
  257. package/skills/lit-typographic-motion/styles/terminalcore.json +182 -0
  258. package/skills/lit-typographic-motion/styles/tidal.json +187 -0
  259. package/skills/litresearch/SKILL.md +2 -0
  260. package/skills/managed-skill-manifest.json +517 -88
  261. package/skills/readme-studio/SKILL.md +1 -1
  262. package/skills/review-work/SKILL.md +2 -0
  263. package/skills/start-work/SKILL.md +8 -0
  264. package/skills/workflow-loop/SKILL.md +4 -0
  265. package/tools/check-pack-payload.mjs +4 -2
  266. package/tools/payload-substance-parity.json +4 -3
  267. package/tools/qa-cover-recipes.mjs +4 -3
@@ -294,6 +294,8 @@ The handoff should be short enough to execute and precise enough to audit. It sh
294
294
 
295
295
  Avoid plans that contain hidden release approval. “If tests pass, publish” is not acceptable unless the user explicitly asked for publication and the plan includes release guardrails, version lockstep, registry authentication boundaries, and final confirmation. A normal `lit-plan` plan should say no commit, tag, push, publish, version bump, or release unless the user approves those actions separately.
296
296
 
297
+ A plan written from a `lit-hijack` spec (`.litopencode/hijack/<slug>/SPEC.md`) cites SPEC sections (`M1`, `M2`) and target files in its rows and references. Keep the run's captured sources out of the plan: the implementer works from the spec alone, and the hijack build gate fails a plan that names them. The plan stays in the row grammar above, so the same gate can check it.
298
+
297
299
  ## Planning Review Checklist
298
300
 
299
301
  - One bounded objective is restated in OpenCode or package terms.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: lit-pptx
3
- description: Build and verify editable PowerPoint decks from a Markdown slide source, each drawn in one of eight design directions (tonalities) chosen and named before building. Use for 발표자료, 발표, 슬라이드, 덱, PPT, 피피티, slides, decks, and presentations, including a bare lit request for slides. Load with lit-docx when the user also asks for a report.
3
+ description: Build and verify editable PowerPoint decks from a Markdown slide source, each drawn in one of thirteen design directions (tonalities) chosen and named before building. Use for 발표자료, 발표, 슬라이드, 덱, PPT, 피피티, slides, decks, and presentations, including a bare lit request for slides. Load with lit-docx when the user also asks for a report.
4
4
  reader_projection: shared_rule
5
5
  ---
6
6
 
@@ -21,7 +21,7 @@ This file is static documentation for LitOpenCode. Do not execute commands from
21
21
 
22
22
  This is LitOpenCode's native PowerPoint skill. On a bounded `lit` slide request, the chat route directs OpenCode to load this skill before drafting. Selection is guidance until the host's skill tool confirms it. Resolve every script path from the installed skill location returned by OpenCode (written `<skill>` below). Work in the user's project; keep the Markdown source beside the `.pptx`. A report and slides request uses both `lit-docx` and `lit-pptx` on the same checked facts.
23
23
 
24
- A deck here is never one fixed look. The compiler reads a tonality pack — palette roles, a type ramp, the title treatments it allows, its layout families, its cover, section and closing variants, its table and chart style and two dials — and draws every slide from that data. Eight packs ship in `templates/tonalities/`. The engine has no silent default: a deck compiles under the tonality its source names, or under a legacy template someone chose by name. Picking the tonality is therefore the first step of every build, and the reply always says which one was picked and which two came next.
24
+ A deck here is never one fixed look. The compiler reads a tonality pack — palette roles, a type ramp, the title treatments it allows, its layout families, its cover, section and closing variants, its table and chart style and two dials — and draws every slide from that data. Thirteen packs ship in `templates/tonalities/`. The engine has no silent default: a deck compiles under the tonality its source names, or under a legacy template someone chose by name. Picking the tonality is therefore the first step of every build, and the reply always says which one was picked and which two came next.
25
25
 
26
26
  ## #contract.inputs
27
27
 
@@ -52,27 +52,38 @@ Under `lit`, create a `.pptx` by default. Do not ask a theme, colour or font que
52
52
  | Deck type | Candidates in order |
53
53
  | --- | --- |
54
54
  | Pitch or proposal (투자·제안) | signal · studio · atlas when the product is physical and photographed |
55
+ | Launch, demo day or campaign (런칭·데모데이) | neo-brutalism · signal · studio |
56
+ | Engineering or developer review (아키텍처·인프라 리뷰) | computational-brutalism · night · ledger |
55
57
  | Business review (경영·사업 실적) | ledger · gazette when read in Korean before the meeting · night on a stage screen |
56
58
  | Research talk (연구 발표) | paper · night for a dark auditorium · chalk for a tutorial |
57
59
  | Lecture or training (강의·교육) | chalk · paper · studio for a public lecture with pictures |
60
+ | Design or culture lecture (디자인·건축·전시) | bauhaus · studio · atlas |
58
61
  | Data-heavy review | night · ledger · paper for a written analysis |
59
62
  | Image-led (product, site, portfolio) | atlas · studio · signal for a launch |
60
63
  | Korean text briefing (보고서형 덱) | gazette · ledger |
61
64
  | Status update (주간·월간 보고) | ledger · gazette · night |
65
+ | Community, culture or education programme (커뮤니티·문화·교육 프로그램) | riso · studio · bauhaus for a design programme |
66
+ | Data story for the public (주민·독자 대상 데이터 브리핑) | newsroom · gazette when read alone · ledger |
62
67
 
63
68
  | Signal on the outline | Effect |
64
69
  | --- | --- |
65
70
  | The brief names a tonality or a legacy template | use it; the card still names two alternatives |
71
+ | The brief names a style: 네오 브루탈리즘 / neo-brutalism; 컴퓨테이셔널 브루탈리즘 / computational brutalism / 레트로 퓨처 / terminal; 바우하우스 / Bauhaus; 리소 / risograph / zine; 뉴스룸 / data journalism / explainer | that pack; a bare 브루탈리즘 / brutalist takes neo-brutalism for a pitch or launch and computational-brutalism for a technical deck |
66
72
  | The deck is read rather than presented | gazette (Korean) or ledger moves to the front |
67
73
  | A third or more of the slides carry a table / a chart / a picture | ledger or gazette / ledger, night or paper / atlas or studio move up one place |
68
74
  | Long slide bodies / short slide bodies | gazette or ledger up / signal or studio up |
69
75
  | Citations or a references slide / a definition or a three-step mechanism / a dark room | paper up / chalk or paper up / night up |
76
+ | Metrics with units, versions or identifiers (p99, rps, v3) / a young or consumer audience with a sign-up ask / works, makers and periods | computational-brutalism up / neo-brutalism up / bauhaus up |
77
+ | Participants, sessions and dates for a community / charts with one point each for readers outside the field | riso up / newsroom up |
78
+ | A board, finance, public-sector or sensitive topic | neo-brutalism, computational-brutalism, bauhaus and riso drop out |
70
79
  | A pack has no family or title treatment for one of the planned slides | that pack drops out |
71
80
 
72
81
  The first candidate after reordering wins; the next two are the alternatives. Ties keep the deck-type order, so one source always gets one choice.
82
+ - **Ask the user to pick the look before step 3.** Unless the prompt already names a tonality or a legacy template, or leaves the look to you ("you choose", "알아서", "아무거나"), call OpenCode's `question` tool once: one question, the winner first labelled `(Recommended)`, then the two alternatives (two to four options in all), each with its one-line character from the tonality table below. Build under the answer and write it on the card. When the session cannot ask (a non-interactive `opencode run`, no `question` tool, or the permission is denied), take the recommended option and say so in one line of the reply. Missing facts are never part of this question; they still get a labelled realistic example.
73
83
  - Write the card into the build log beside the source: deck type, reader, the tonality and two alternatives, a one-sentence reason tied to the signals that fired, the dials (density and variance, any move from the pack default; at most 2 per dial without asking), the title treatments by slide role, one layout family per slide, and the line that would make the choice wrong ("if the file is read alone before the meeting, gazette fits better"). Put the tonality in the source frontmatter (`tonality: ledger`).
74
84
  - Say it in the reply in two or three plain sentences: the tonality, why, and the two alternatives.
75
85
  - **Compare strip.** Only when the user asks to compare, or leaves the look open on purpose ("어떤 느낌이 좋을지 모르겠어", "show me options"): compile the first three slides under the chosen tonality and both alternatives, render and show the three rows, and finish under the one the user picks.
86
+ - **One slide grid.** Every tonality sets titles, headers and the body on the same zones (`scripts/lib/slide-grid.js`): a content title in columns 1-10 at y 36, the body from y 120 to 486, the footer at y 498, and fixed display and cover zones. A tonality and its treatments change how a zone looks (face, size, colour, rules, bands, fills), never where it is, so switching the tonality never moves the content. A bold register (`register: bold`) sets larger type inside the same zones.
76
87
  - **Legacy templates.** `AZURE-PRO`, `AZURE-A2Z`, `BOILERPLATE-PRETENDARD` and `BOILERPLATE-A2Z` keep their names and their single look. Use one only when the user names it or an existing source says `template:`; the reply still offers two tonalities.
77
88
 
78
89
  | Tonality | Character | Sheet |
@@ -85,8 +96,13 @@ Under `lit`, create a `.pptx` by default. Do not ask a theme, colour or font que
85
96
  | `gazette` | Korean briefing pages: header band, boxed summary, itemised evidence | `references/tonalities/gazette.md` |
86
97
  | `studio` | editorial grid, asymmetric splits, side titles, part numbers | `references/tonalities/studio.md` |
87
98
  | `night` | dark ground and light type for data and technical keynotes | `references/tonalities/night.md` |
99
+ | `computational-brutalism` | retro-futurist computing: mono titles and figures, grid marks and slide index, ruled tables, a terminal field | `references/tonalities/computational-brutalism.md` |
100
+ | `neo-brutalism` | loud on purpose: thick black borders, hard offset shadows, flat yellow, blue and pink fills | `references/tonalities/neo-brutalism.md` |
101
+ | `bauhaus` | elementary geometry on the cover and statements, quiet content pages in black and one red | `references/tonalities/bauhaus.md` |
102
+ | `riso` | two spot inks on warm paper: teal fields on display slides and data titles, pink for the one figure that matters | `references/tonalities/riso.md` |
103
+ | `newsroom` | a newspaper graphics desk: black masthead titles, grey charts with one orange series, a source under every figure | `references/tonalities/newsroom.md` |
88
104
 
89
- `node <skill>/run.mjs compile --list-tonalities` prints the eight beside the legacy templates; `node <skill>/run.mjs compile --list-layouts <tonality>` prints that pack's families with the title treatments each allows there, and its cover, section and closing variants.
105
+ `node <skill>/run.mjs compile --list-tonalities` prints the thirteen beside the legacy templates; `node <skill>/run.mjs compile --list-layouts <tonality>` prints that pack's families with the title treatments each allows there, and its cover, section and closing variants.
90
106
 
91
107
  3. **Outline before prose.** One message per slide. A slide title is a topic label that names subject, measure and period ("분기별 방문·대출 추이", "Conversion by feed rate, runs 1-12"), never a sentence ("방문은 늘었고 대출은 제자리다", "Revenue grew 12%") and never a bare "현황". The claim is the first line of the body. A cover title names the topic or product, never a slogan, and a cover subtitle is a label too. Typical shape: cover · where things stand · evidence · options compared · recommendation · next steps · closing; each deck type's sequence is in `references/direction-step.md`. Split a slide that needs more than four groups or about eight lines. Name one layout family per slide by the slide's job (`references/layout-families.md`), never by what the previous slide used; the treatment comes from the pack per slide role (`references/title-treatments.md`), and a per-slide `title:` key may pick another treatment the pack allows when a layout repeats too often.
92
108
 
@@ -94,15 +110,15 @@ Under `lit`, create a `.pptx` by default. Do not ask a theme, colour or font que
94
110
 
95
111
  5. **Write dense, sourced content.** Every pack defaults to density 10, the compact step: 24 pt margins, body 13 pt, table cells 11 pt, sources 9 pt, never below those floors. Each content slide carries its basis, a comparison, the period, and an implication or next action; data slides end with a `출처:` / `Source:` line (and a `주:` / `Note:` line where a definition matters), which the engine sets as a strip on the body floor. Write a real uncertainty once, as a fact about the data or method beside the number it affects; what the deck is not for goes in the reply. References run eight to ten entries. `references/density-and-fill.md` lists what each family needs to fill its body and what the fill policies do when it does not.
96
112
 
97
- 6. **Write the Markdown source** as `<name>.md` beside the output, with `tonality:`, `title:` and, for sample content, `notice:` in its frontmatter. `specs/markdown-slide-spec-v2.md` is the dialect contract; open the worked example in `references/examples/` closest to the job before writing. Twelve examples cover all eight tonalities in Korean and English and each compiles and passes the gate as shipped. Pictures are referenced by path from the source folder; the skill ships no images. For a chart or diagram picture on a dark tonality, put its dark variant beside it (`flow.png` and `flow.dark.png`); a dark ground draws the variant. Korean text runs and charts with Korean labels are written as ko-KR, so a renderer applies Korean spacing rules.
113
+ 6. **Write the Markdown source** as `<name>.md` beside the output, with `tonality:`, `title:` and, for sample content, `notice:` in its frontmatter. `specs/markdown-slide-spec-v2.md` is the dialect contract; open the worked example in `references/examples/` closest to the job before writing. Seventeen examples cover all thirteen tonalities and the deck types in Korean and English, and each compiles and passes the gate as shipped. The five newest (13 to 17) are Korean decks for the hard-edge and editorial packs. Pictures are referenced by path from the source folder; the skill ships no images. For a chart or diagram picture on a dark tonality, put its dark variant beside it (`flow.png` and `flow.dark.png`); a dark ground draws the variant. Korean text runs and charts with Korean labels are written as ko-KR, so a renderer applies Korean spacing rules.
98
114
 
99
115
  7. **Compile.** `node <skill>/run.mjs compile deck.md --pptx deck.pptx` (the tonality comes from the frontmatter; `--tonality <id>` overrides it, `--faces a2z` or `faces: a2z` swaps in the bundled A2Z display faces). The log prints the tonality and the treatment chosen for each slide. Faces default to the bundled official Pretendard Regular and Bold; hierarchy comes from size, weight, colour and placement.
100
116
 
101
- 8. **Gate.** `node <skill>/run.mjs qa deck.pptx` must exit 0. It reads everything from the OOXML: the layout inventory (text measured with the bundled Pretendard faces against its frame, objects off the canvas), WCAG contrast on the real fill and slide ground (body 4.5:1, large 3:1), overlaps and occlusion, composition (an empty outlined box, a thin body, a table-only deck), anti-slop terms, evidence captions, OOXML integrity, and the craft floor. `scripts/craft_extras.py` checks each slide for one accent colour, a readable measure, right-aligned numeric columns, concentric nested frames, card spacing, gradient text, glow, emoji bullets and empty bands (OF-101 to OF-109). `scripts/deck_output.py` checks the deck as a whole: at least three title treatments on eight or more slides, each drawn as it is named (OF-110); composition variety across content slides (OF-111); the body used, with a deck median empty band of at most 0.20 (OF-112); one title frame per treatment, a bottom title keeping its bottom edge (OF-113); titles and the cover subtitle written as labels, not sentences (OF-114); no region left empty beside a full one, so a bottom title ends on the body floor, a side rail carries the slide's criteria, takeaways or source, a takeaway column runs as long as the visual beside it, no text or picture column of a two-column body leaves more than 40 % of the body empty inside it beside a longer column (a source strip at its foot does not hide the band above it), a title panel is as tall as its text and no plate leaves the page above it open (OF-115); no mostly-white figure picture on a dark ground (OF-117); no bold run-in label running into its sentence without a separator (OF-118; the compiler adds the colon, so a finding means a label set by hand); no count numeral beside an agenda title (OF-119). When two tonalities of one source are offered, run `node <skill>/run.mjs qa deck.pptx --sibling other.pptx`: their skeletons (title zone and column partition per content slide) must differ on at least two content slides, one on a deck of fewer than four (OF-116). HIGH findings fail the gate; MEDIUM findings are advisory; on a legacy template the variety checks are advisory. Every deck-level finding carries a hint. Fix the Markdown source and recompile; never edit a generated deck only to evade the gate. A checker pass is not a visual verdict.
117
+ 8. **Gate.** `node <skill>/run.mjs qa deck.pptx` must exit 0. It reads everything from the OOXML: the layout inventory (text measured with the bundled Pretendard faces against its frame, objects off the canvas), WCAG contrast on the real fill and slide ground (body 4.5:1, large 3:1), overlaps and occlusion, composition (an empty outlined box, a thin body, a table-only deck), anti-slop terms, evidence captions, OOXML integrity, and the craft floor. `scripts/craft_extras.py` checks each slide for accent colours (up to four hue families pass, five fail; a pack's `qa:` allowance only widens that), a readable measure, right-aligned numeric columns, concentric nested frames, card spacing, gradient text, glow, emoji bullets and empty bands (OF-101 to OF-109), and that a hard offset shadow appears only in a pack that draws one, never beside soft ones (OF-120). `scripts/deck_output.py` checks the deck as a whole: at least three title treatments on eight or more slides, each drawn as it is named (OF-110); composition variety across content slides (OF-111); the body used, with a deck median empty band of at most 0.20 (OF-112); one title frame for every content title and one for every display title, whatever the treatment (OF-113); titles and the cover subtitle written as labels, not sentences (OF-114); no region left empty beside a full one, so a takeaway column runs as long as the visual beside it, no text or picture column of a two-column body leaves more than 40 % of the body empty inside it beside a longer column (a source strip at its foot does not hide the band above it), a title panel is as tall as its text and no plate leaves the page above it open (OF-115); no mostly-white figure picture on a dark ground (OF-117); no bold run-in label running into its sentence without a separator (OF-118; the compiler adds the colon, so a finding means a label set by hand); no count numeral beside an agenda title (OF-119). When two tonalities of one source are offered, run `node <skill>/run.mjs qa deck.pptx --sibling other.pptx`: both must set every title frame and the body's top-left corner in the same place on every slide (OF-116), because a tonality changes the look, never the place. HIGH findings fail the gate; MEDIUM findings are advisory; on a legacy template the variety checks are advisory. Every deck-level finding carries a hint. Fix the Markdown source and recompile; never edit a generated deck only to evade the gate. A checker pass is not a visual verdict.
102
118
 
103
119
  9. **Fonts for travel.** When the deck must open on machines without Pretendard, run `node <skill>/run.mjs embed deck.pptx` and rerun the gate. The post-embedding integrity check reopens the deck and verifies ZIP data, content types and relationship targets.
104
120
 
105
- 10. **Look at the pages.** Render with LibreOffice when available: `soffice -env:UserInstallation=file:///tmp/<unique-profile> --headless --convert-to pdf --outdir <output-dir> deck.pptx`, convert the PDF to PNG, and open every slide at presentation size. Check hierarchy, Hangul line breaks, numbers against the source, cramped or hollow areas, and whether each treatment suits its slide. Check the card's "wrong if" line: if it came true, rebuild under the alternative and update the card and reply. Three full compile → gate → look rounds is the budget; a defect that survives is named in the reply, not written onto a slide. Without soffice, report that structural QA ran and visual preview was unavailable; never claim render verification.
121
+ 10. **Look at the pages.** Render with `node <skill>/run.mjs render deck.pptx --out-dir <output-dir>` when LibreOffice is available: it converts in a private profile, installs the faces the deck embeds (LibreOffice ignores embedded font parts, so JetBrains Mono and Pretendard show only when the helper places them), and writes `<output-dir>/deck.pdf` and `page-01.png` onward when `pdftoppm` is on PATH. Open every slide at presentation size. Check hierarchy, Hangul line breaks, numbers against the source, cramped or hollow areas, and whether each treatment suits its slide. Check the card's "wrong if" line: if it came true, rebuild under the alternative and update the card and reply. Three full compile → gate → look rounds is the budget; a defect that survives is named in the reply, not written onto a slide. Without soffice, report that structural QA ran and visual preview was unavailable; never claim render verification.
106
122
 
107
123
  11. **Deliver.** The `.pptx`, its Markdown source, the build log with the direction card and, when useful, the rendered PNGs sit in the user's project. The reply names the tonality and the two alternatives. Never leave generated files inside the skill.
108
124
 
@@ -114,16 +130,16 @@ For a deck that matters, iterate once before the final compile. The guidance in
114
130
 
115
131
  ### Design laws for every tonality and template
116
132
 
117
- - One accent colour per slide; a second only when it carries a real pair (a delta, a status).
133
+ - Build a rich slide from the pack's own roles: its accent, series and field colours, a hero step on cover and statement titles that fit, and the pack's decoration. Up to four accent hue families per slide pass and five fail (OF-101); one colour keeps one meaning across the deck. `hero: false` in the front matter is the calm opt-out, and `decoration: numeral, column-hairlines` adds kinds from the shared set.
118
134
  - Titles and subtitles are labels; claims live in the body.
119
- - No hero numerals and no exaggerated figures; every number has its basis and period.
120
- - Pretendard unless the user asks otherwise; at most the two bundled weights, plus A2Z on request.
135
+ - No exaggerated figures; every number has its basis and period. Only a bold pack (`register: bold`, today neo-brutalism) sets presented type and big figures, inside the same zones; every other figure sits at title size at most.
136
+ - Pretendard unless the user asks otherwise; at most the two bundled weights, plus A2Z on request. computational-brutalism adds the bundled JetBrains Mono for titles, figures and labels (Latin only, Pretendard stays the Korean face, and a mono body face is refused).
121
137
  - Text never below the readable floors; nothing outside the safe margins; pictures cropped, never stretched.
122
138
  - Variety comes from the slide's job: a deck that repeats one composition on most of its content slides is unfinished.
123
139
 
124
140
  ## #contract.runtime
125
141
 
126
- The skill ships `package-lock.json` and `requirements.lock` with pinned Node and Python dependencies. `run.mjs` installs on first use under the configured user cache directory (`XDG_CACHE_HOME/litopencode/office` or the normal user cache), never globally or in the OpenCode config. The Python side creates a product-owned venv for `python-pptx`, `defusedxml` and Pillow; the Node side installs `pptxgenjs` and `sharp`. The tonality packs, layout families and treatments are data under `templates/tonalities/`; the renderer is one engine (`scripts/lib/render-pack.js` on the grid of `scripts/lib/grid-resolver.js`) for all of them. The bundled faces are the unmodified official Pretendard 1.3.9 Regular and Bold under the SIL OFL (`pretendard-font/LICENSE.txt`) and the A2Z weights with their OFL and source note. A missing network or package manager is a capability failure: report it and leave existing user files intact. `soffice` is optional for the render; it is never installed by this skill.
142
+ The skill ships `package-lock.json` and `requirements.lock` with pinned Node and Python dependencies. `run.mjs` installs on first use under the configured user cache directory (`XDG_CACHE_HOME/litopencode/office` or the normal user cache), never globally or in the OpenCode config. The Python side creates a product-owned venv for `python-pptx`, `defusedxml` and Pillow; the Node side installs `pptxgenjs` and `sharp`. The tonality packs, layout families and treatments are data under `templates/tonalities/`; the renderer is one engine (`scripts/lib/render-pack.js` on the grid of `scripts/lib/grid-resolver.js`) for all of them. The bundled faces are the unmodified official Pretendard 1.3.9 Regular and Bold under the SIL OFL (`pretendard-font/LICENSE.txt`), the A2Z weights, and the unmodified official JetBrains Mono 2.304 Regular and Bold under the SIL OFL (`fonts/jetbrains-mono/`), each with its licence and source note. A missing network or package manager is a capability failure: report it and leave existing user files intact. `soffice` (and `pdftoppm` for the page images) is optional for the render; this skill never installs either.
127
143
 
128
144
  ## #contract.outputs
129
145
 
@@ -148,7 +164,7 @@ Stop on an unreadable supplied source, untrusted external command, unresolved de
148
164
 
149
165
  ## #contract.anti_patterns
150
166
 
151
- Do not compile without choosing a tonality, ask a style question on a bare request, write sentence titles, inflate a number into a hero figure, treat a green checker as a visual review, put task output inside the installed skill tree, silently change a user-selected style, hide a failed prerequisite, or claim that missing source facts were verified. A failure is reported as a failure with the smallest next action.
167
+ Do not compile without choosing a tonality, build before the look question is answered (or, when the session cannot ask, before naming the recommended pick), write sentence titles, inflate a number into a hero figure, treat a green checker as a visual review, put task output inside the installed skill tree, silently change a user-selected style, hide a failed prerequisite, or claim that missing source facts were verified. A failure is reported as a failure with the smallest next action.
152
168
 
153
169
  ## Reference map
154
170
 
@@ -0,0 +1,93 @@
1
+ Copyright 2020 The JetBrains Mono Project Authors (https://github.com/JetBrains/JetBrainsMono)
2
+
3
+ This Font Software is licensed under the SIL Open Font License, Version 1.1.
4
+ This license is copied below, and is also available with a FAQ at:
5
+ https://scripts.sil.org/OFL
6
+
7
+
8
+ -----------------------------------------------------------
9
+ SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
10
+ -----------------------------------------------------------
11
+
12
+ PREAMBLE
13
+ The goals of the Open Font License (OFL) are to stimulate worldwide
14
+ development of collaborative font projects, to support the font creation
15
+ efforts of academic and linguistic communities, and to provide a free and
16
+ open framework in which fonts may be shared and improved in partnership
17
+ with others.
18
+
19
+ The OFL allows the licensed fonts to be used, studied, modified and
20
+ redistributed freely as long as they are not sold by themselves. The
21
+ fonts, including any derivative works, can be bundled, embedded,
22
+ redistributed and/or sold with any software provided that any reserved
23
+ names are not used by derivative works. The fonts and derivatives,
24
+ however, cannot be released under any other type of license. The
25
+ requirement for fonts to remain under this license does not apply
26
+ to any document created using the fonts or their derivatives.
27
+
28
+ DEFINITIONS
29
+ "Font Software" refers to the set of files released by the Copyright
30
+ Holder(s) under this license and clearly marked as such. This may
31
+ include source files, build scripts and documentation.
32
+
33
+ "Reserved Font Name" refers to any names specified as such after the
34
+ copyright statement(s).
35
+
36
+ "Original Version" refers to the collection of Font Software components as
37
+ distributed by the Copyright Holder(s).
38
+
39
+ "Modified Version" refers to any derivative made by adding to, deleting,
40
+ or substituting -- in part or in whole -- any of the components of the
41
+ Original Version, by changing formats or by porting the Font Software to a
42
+ new environment.
43
+
44
+ "Author" refers to any designer, engineer, programmer, technical
45
+ writer or other person who contributed to the Font Software.
46
+
47
+ PERMISSION & CONDITIONS
48
+ Permission is hereby granted, free of charge, to any person obtaining
49
+ a copy of the Font Software, to use, study, copy, merge, embed, modify,
50
+ redistribute, and sell modified and unmodified copies of the Font
51
+ Software, subject to the following conditions:
52
+
53
+ 1) Neither the Font Software nor any of its individual components,
54
+ in Original or Modified Versions, may be sold by itself.
55
+
56
+ 2) Original or Modified Versions of the Font Software may be bundled,
57
+ redistributed and/or sold with any software, provided that each copy
58
+ contains the above copyright notice and this license. These can be
59
+ included either as stand-alone text files, human-readable headers or
60
+ in the appropriate machine-readable metadata fields within text or
61
+ binary files as long as those fields can be easily viewed by the user.
62
+
63
+ 3) No Modified Version of the Font Software may use the Reserved Font
64
+ Name(s) unless explicit written permission is granted by the corresponding
65
+ Copyright Holder. This restriction only applies to the primary font name as
66
+ presented to the users.
67
+
68
+ 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
69
+ Software shall not be used to promote, endorse or advertise any
70
+ Modified Version, except to acknowledge the contribution(s) of the
71
+ Copyright Holder(s) and the Author(s) or with their explicit written
72
+ permission.
73
+
74
+ 5) The Font Software, modified or unmodified, in part or in whole,
75
+ must be distributed entirely under this license, and must not be
76
+ distributed under any other license. The requirement for fonts to
77
+ remain under this license does not apply to any document created
78
+ using the Font Software.
79
+
80
+ TERMINATION
81
+ This license becomes null and void if any of the above conditions are
82
+ not met.
83
+
84
+ DISCLAIMER
85
+ THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
86
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
87
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
88
+ OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
89
+ COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
90
+ INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
91
+ DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
92
+ FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
93
+ OTHER DEALINGS IN THE FONT SOFTWARE.
@@ -0,0 +1,17 @@
1
+ # JetBrains Mono: bundled font source
2
+
3
+ - Face: JetBrains Mono, Regular 400 and Bold 700, used by the computational-brutalism tonality for Latin text only.
4
+ - Release: v2.304 (official release archive, files shipped unmodified).
5
+ - Repository: https://github.com/JetBrains/JetBrainsMono
6
+ - Release asset: https://github.com/JetBrains/JetBrainsMono/releases/download/v2.304/JetBrainsMono-2.304.zip
7
+ - Archive sha256: `6f6376c6ed2960ea8a963cd7387ec9d76e3f629125bc33d1fdcd7eb7012f7bbf`
8
+ - License: SIL Open Font License 1.1, no Reserved Font Name (`OFL.txt` is the upstream file).
9
+
10
+ | File | bytes | sha256 |
11
+ |---|---|---|
12
+ | `JetBrainsMono-Regular.ttf` | 273900 | `a0bf60ef0f83c5ed4d7a75d45838548b1f6873372dfac88f71804491898d138f` |
13
+ | `JetBrainsMono-Bold.ttf` | 277828 | `5590990c82e097397517f275f430af4546e1c45cff408bde4255dad142479dcb` |
14
+ | `OFL.txt` | 4399 | `30f0c136e3c88e422d0791acd97238870f9054a9729bc34cf2ff0d4ed8cac4ad` |
15
+
16
+ The face carries no Hangul. Every mono run is written with `<a:ea typeface="Pretendard">`, so Hangul inside a mono run is set in the
17
+ bundled Pretendard (never subset), and a pack whose `faces.body` is mono is refused by the pack loader.
@@ -121,6 +121,12 @@ The second line is the important one. It means the slide is short because the so
121
121
  no policy can help. Add the facts the slide is missing (next section) or move the content to a
122
122
  family that suits its amount; `layout-families.md` lists what each family expects.
123
123
 
124
+ The title treatment never buys the body room: every treatment draws in the slide grid's one title
125
+ zone over the same body (y 120-486), so a short body is filled by its own layout, never by moving the
126
+ title. The engine never pads cards with filler. Decoration (the pack's list plus the deck's
127
+ `decoration:` kinds) adds texture and structure to a full slide; it never stands in for missing
128
+ content.
129
+
124
130
  Some families also spread on their own when the body is short: headed points become rows, agenda
125
131
  rows spread down to the floor, timeline room is shared above and below the axis, table takeaways
126
132
  move under the table, references spread with rules. These moves never add words.
@@ -231,9 +237,9 @@ takeaway is a bare claim (`늘었음`) with no figure.
231
237
 
232
238
  ### Numbers stay honest
233
239
 
234
- - No hero numerals. The engine caps every number it sets (KPI values, big-number panels, cover
235
- figures, closing keys, section numerals) at the title size of the ramp; do not try to get around
236
- that with a `box` or `shape`.
240
+ - No hero numerals. The hero step belongs to cover, section and statement titles that fit it. The engine
241
+ caps every number it sets (KPI values, big-number panels, cover figures, closing keys, section
242
+ numerals) at the title size of the ramp; do not try to get around that with a `box` or `shape`.
237
243
  - A figure is never larger than the title, and a figure without a basis is not a KPI.
238
244
  - Signed deltas carry their sign and unit (`+4.1%`, `−3.6%`, `+0.5%p`, `▲ 12%`). In signal, where
239
245
  the accent is red, losses keep the ink colour and rely on the `▼` sign.
@@ -2,7 +2,7 @@
2
2
 
3
3
  A LitOpenCode deck is drawn from a tonality pack: palette roles, a type ramp, the title treatments
4
4
  the pack allows, the layout families it lists, its cover, section and closing variants, and two
5
- dials. Eight packs ship in `templates/tonalities/`. The engine never guesses a look on its own, so
5
+ dials. Thirteen packs ship in `templates/tonalities/`. The engine never guesses a look on its own, so
6
6
  the first decision of every build is which pack to compile under. This file is the procedure for
7
7
  making that decision quickly, recording it, and telling the user what was chosen.
8
8
 
@@ -42,7 +42,7 @@ can correct it later.
42
42
 
43
43
  | Fact | What to settle | Why it matters |
44
44
  |---|---|---|
45
- | Deck type | One of the eight types below, or the nearest one | Gives the starting candidate order |
45
+ | Deck type | One of the thirteen types below, or the nearest one | Gives the starting candidate order |
46
46
  | Delivery | Spoken in a room, sent ahead and read alone, or both | Read decks favour Gazette and Ledger; stage decks favour Signal and Night |
47
47
  | Room | Lit office, screen share, dark hall, printed handout | A dark hall pulls Night forward; print rules Night out |
48
48
  | Language | Korean, English or mixed | Korean glyphs take about twice the width of Latin letters, which tightens title budgets |
@@ -50,18 +50,23 @@ can correct it later.
50
50
  ## Step 2: start from the deck type
51
51
 
52
52
  Each deck type has an ordered shortlist. The first entry wins when no signal in step 3 moves it.
53
- All eight packs default to density 10; the variance shown is each pack's own default.
53
+ All thirteen packs default to density 10; the variance shown is each pack's own default.
54
54
 
55
55
  | Deck type | First choice | Second | Third |
56
56
  |---|---|---|---|
57
57
  | Pitch or proposal (투자·제안) | signal (v6) | studio (v8) | atlas (v7) when the product is physical and photographed |
58
+ | Launch, demo day or campaign (런칭·데모데이·캠페인) | neo-brutalism (v7) | signal (v6) | studio (v7) |
59
+ | Engineering or developer review (아키텍처·인프라·장애 리뷰) | computational-brutalism (v7) | night (v6) for a stage | ledger (v5) when it is read alone |
58
60
  | Management review (경영·사업 실적) | ledger (v5) | gazette (v4) when circulated in Korean before the meeting | night (v6) when presented on a stage screen |
59
61
  | Research talk (연구 발표) | paper (v5) | night (v6) for a large dark auditorium | chalk (v6) for a tutorial-style talk |
60
62
  | Lecture or training (강의·교육) | chalk (v6) | paper (v5) | studio (v8) for a public lecture with images |
63
+ | Design or culture lecture (디자인·건축·전시·워크숍) | bauhaus (v7) | studio (v8) | atlas (v7) when the works are the deck |
61
64
  | Data review (데이터·지표 리뷰) | night (v6) | ledger (v5) | paper (v5) when the review is a written analysis |
62
65
  | Image-led showcase (제품·현장·포트폴리오) | atlas (v7) | studio (v8) | signal (v6) for a launch moment |
63
66
  | Korean reading brief (보고서형 덱) | gazette (v4) | ledger (v5) | none |
64
67
  | Status update (주간·월간 보고) | ledger (v5) | gazette (v4) | night (v6) |
68
+ | Community, culture or education programme (커뮤니티·문화·교육 프로그램) | riso (v7) | studio (v7) | bauhaus (v7) for a design programme |
69
+ | Data story for the public (주민·독자 대상 데이터 브리핑) | newsroom (v6) | gazette (v4) when it is read alone | ledger (v5) |
65
70
 
66
71
  A request that fits none of these takes the nearest type, and the card says "other, treated as
67
72
  status update" or similar.
@@ -75,6 +80,7 @@ in this order; ties keep the deck-type order, so the same source always lands on
75
80
  | Rule | Fires when | Move |
76
81
  |---|---|---|
77
82
  | Named by the user | The brief or an earlier turn names a tonality | Use it. Still write the card and still name two alternatives |
83
+ | Named by style | 네오 브루탈리즘, neo-brutalism; 컴퓨테이셔널 브루탈리즘, computational brutalism, 레트로 퓨처, terminal look; 바우하우스, Bauhaus; 리소, risograph, zine; 뉴스룸, data journalism, explainer | That pack, as if named. A bare 브루탈리즘 or brutalist takes neo-brutalism for a pitch or launch and computational-brutalism for a technical deck, and the card says which reading it took |
78
84
  | Legacy template named | The brief names AZURE-PRO, AZURE-A2Z, BOILERPLATE-PRETENDARD or BOILERPLATE-A2Z | Compile with `--template` as named; offer two tonalities as alternatives |
79
85
  | Read, not presented | "미리 배포", "보고서", "sent ahead", "for the board pack" | gazette to the front for Korean, ledger otherwise |
80
86
  | Table-heavy | 30 % or more of slides hold a table | ledger or gazette up one place |
@@ -85,6 +91,12 @@ in this order; ties keep the deck-type order, so the same source always lands on
85
91
  | Citations | numbered references, DOIs, a references slide | paper up one place |
86
92
  | Teaching shape | definitions, equations, or a how-it-works sequence of three or more steps | chalk or paper up one place |
87
93
  | Dark room | keynote hall, demo day, stage | night up one place |
94
+ | Technical metrics | units, versions or identifiers (p99, rps, v3, endpoint names) on a third of the content slides | computational-brutalism up one place |
95
+ | Young or consumer audience | stated in the brief, or a sign-up or launch ask | neo-brutalism up one place |
96
+ | Works and makers | works, makers, periods or schools as the subject, on a third of the content slides | bauhaus up one place |
97
+ | Programme facts | participants, sessions, dates and places for a community or a class, on a third of the content slides | riso up one place |
98
+ | Readers outside the field | charts with one point each for residents, members or the press | newsroom up one place |
99
+ | Sensitive reader | a board, investor committee, finance or public-sector reader, or a topic such as loss, safety or HR | neo-brutalism, computational-brutalism, bauhaus and riso drop out |
88
100
  | Missing carrier | the pack has no family or title that can carry a planned slide | drop that pack from the shortlist |
89
101
 
90
102
  The last rule overrides taste. The packs differ in what they can draw:
@@ -186,7 +198,7 @@ word. `node <skill>/run.mjs compile` prints the dials it used on its first line
186
198
 
187
199
  Two neighbouring keys are not dials but belong to the same decision:
188
200
 
189
- - `canvas: 4:3` switches every pack to its 4:3 grid (all eight list both canvases);
201
+ - `canvas: 4:3` switches every pack to its 4:3 grid (all thirteen list both canvases);
190
202
  - `faces: a2z` (or `--faces a2z`) switches the display and numeral faces to A2Z. Pretendard is the
191
203
  default in every pack, and A2Z is used only when the user asks for it.
192
204
 
@@ -245,5 +257,8 @@ reply still names two tonalities as alternatives.
245
257
  - `layout-families.md`: what each family holds and what the source must contain for it.
246
258
  - `density-and-fill.md`: the density steps, readable floors, fill policies and what to write per
247
259
  slide so the gate passes on substance rather than padding.
248
- - `examples/`: twelve compiled decks across all eight packs, each passing
249
- `node <skill>/run.mjs qa`.
260
+ - `examples/`: seventeen compiled decks across all thirteen packs, each passing
261
+ `node <skill>/run.mjs qa`. The newest five are Korean decks: `13-engineering-review-computational-brutalism-ko.md`
262
+ (alternatives night, ledger), `14-launch-pitch-neo-brutalism-ko.md` (signal, studio),
263
+ `15-design-lecture-bauhaus-ko.md` (studio, atlas), `16-community-programme-riso-ko.md` (studio,
264
+ bauhaus) and `17-public-data-briefing-newsroom-ko.md` (gazette, ledger).
@@ -49,17 +49,14 @@ layout: method
49
49
  ΔT = K · W / (M · (100 − W))
50
50
 
51
51
  - **ΔT** 하이드레이트 생성 온도가 내려가는 폭, 단위 °C
52
- (1) 무억제 생성 온도에서 운전 온도를 뺀 값에 안전 여유 2~3°C를 더함
52
+ (1) 무억제 생성 온도에서 운전 온도를 뺀 값에 여유 2~3°C를 더함
53
53
  (2) 예: 생성 14°C, 운전 4°C, 여유 0°C이면 ΔT는 10°C
54
54
  - **K** 억제제 상수
55
- (1) 메탄올과 글라이콜 모두 1,297을 흔히 사용
56
- (2) 교재에 따라 1,228~2,335까지 다른 값을 쓰므로 출처를 함께 적음
55
+ (1) 메탄올과 글라이콜 모두 1,297을 흔히 사용, 출처를 함께 적음
57
56
  - **W** 수용액 속 억제제 질량 백분율, 단위 wt%
58
- (1) 수상 기준 값이며 기상으로 날아가는 양은 포함하지 않음
59
- (2) 약 25wt% 이하에서 오차 10% 안쪽
57
+ (1) 수상 기준 값이며 약 25wt% 이하에서 오차 10% 안쪽
60
58
  - **M** 억제제 분자량
61
59
  (1) 메탄올 32.04, MEG 62.07, DEG 106.12
62
- (2) 분자량이 클수록 같은 ΔT에 더 높은 농도가 필요
63
60
  - **적용 한계** 식이 맞는 범위
64
61
  (1) 농도 25wt% 이하, 압력 20MPa 이하의 메탄 위주 가스
65
62
  (2) 염분이 섞인 생산수는 염의 효과를 따로 더해야 함
@@ -33,17 +33,13 @@ layout: method
33
33
  r = k · p_CO2^a · p_H2^b / (1 + K_H2O · p_H2O)
34
34
 
35
35
  - **r** CO2 consumption rate
36
- (1) mol per gram of surface Ni per second
37
- (2) measured below 10% conversion so the bed stays differential
36
+ (1) mol per gram of surface Ni per second, below 10% conversion
38
37
  - **k** rate constant
39
38
  (1) Arrhenius form, k = A · exp(−Ea / RT)
40
- (2) apparent Ea compared across the five catalysts
41
39
  - **a, b** reaction orders in CO2 and H2
42
40
  (1) a between 0.21 and 0.34, b between 0.48 and 0.62
43
- (2) fitted at fixed temperature, varying one partial pressure at a time
44
41
  - **K_H2O** water adsorption term
45
42
  (1) accounts for product inhibition above 220 °C
46
- (2) held at one value per catalyst across temperatures
47
43
  - **Fit** least squares over 42 runs at 180-260 °C
48
44
  (1) R² = 0.97, residuals without trend in temperature
49
45
  - Note: rates are normalised by surface Ni from H2 chemisorption
@@ -114,16 +114,12 @@ budget = (1 − SLO) × total requests in the window
114
114
 
115
115
  - **SLO** service level objective
116
116
  (1) 99.95% of checkout requests succeed over a rolling 28 days
117
- (2) a request fails on a 5xx response or a response slower than 3 s
118
117
  - **Window** rolling 28 days
119
118
  (1) about 410M checkout requests at current volume
120
- (2) recomputed every five minutes from the request log
121
119
  - **Budget** failed requests the window may hold
122
120
  (1) 0.05% of 410M, about 205,000 requests
123
- (2) the May incident alone used 31% of one window
124
121
  - **Burn rate** speed of spending the budget
125
122
  (1) failed requests per hour divided by the hourly budget
126
- (2) a burn rate of 1 spends the budget exactly at the window's end
127
123
  - **Alert** paging rule
128
124
  (1) page when the 1-hour burn rate exceeds 14 or the 6-hour rate exceeds 6
129
125
  - Source: Example Commerce SLO policy v3, February 2026
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  tonality: ledger
3
- title: Finance system migration, week 40 status
3
+ title: Finance migration, week 40 status
4
4
  subtitle: Cutover readiness, open defects and budget to date
5
5
  date: 2026-10-06
6
6
  department: Example Manufacturing finance programme
@@ -9,7 +9,7 @@ notice: Sample data for illustration only
9
9
  ---
10
10
  layout: cover-typographic
11
11
 
12
- # Finance system migration, week 40 status
12
+ # Finance migration, week 40 status
13
13
  ---
14
14
  layout: kpi-row
15
15
 
@@ -99,21 +99,18 @@ layout: big-number
99
99
  - 출처: 예시 전력거래 분석팀 사후 분석 보고(2026년 7월 28일)
100
100
  ---
101
101
  layout: method
102
- title: band
102
+ title: side-rail
103
103
 
104
104
  ## 앙상블 가중치 산정 방식
105
105
 
106
106
  ŷ = w1 · 기온회귀 + w2 · 부스팅 + w3 · 신경망
107
107
 
108
108
  - **기온회귀** 기온·습도·요일 변수 회귀
109
- (1) 폭염과 한파 구간에서 안정적이지만 평상시 정밀도가 낮음
110
- (2) 가중치 0.2~0.5
109
+ (1) 폭염과 한파 구간에서 안정적, 가중치 0.2~0.5
111
110
  - **부스팅** 그래디언트 부스팅 모델
112
- (1) 평일 평상 기온에서 오차가 가장 작음
113
- (2) 가중치 0.3~0.6
111
+ (1) 평일 평상 기온에서 오차가 가장 작음, 가중치 0.3~0.6
114
112
  - **신경망** 순환 신경망 모델
115
- (1) 공휴일 전후 패턴 학습에 강점
116
- (2) 가중치 0.1~0.3
113
+ (1) 공휴일 전후 패턴 학습에 강점, 가중치 0.1~0.3
117
114
  - **가중치 갱신** 최근 28일 오차로 매주 월요일 재계산
118
115
  (1) 가중치 합은 항상 1, 한 번에 0.1 이상 바꾸지 않음
119
116
  (2) 폭염 특보가 있는 날은 기온회귀 가중치를 0.5로 고정