@litfamily/litclaude 1.0.20 → 1.0.21

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 (41) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/README.md +8 -8
  3. package/README_ko-KR.md +8 -8
  4. package/docs/assets/readme/badge-version.svg +1 -1
  5. package/package.json +1 -1
  6. package/plugins/litclaude/.claude-plugin/plugin.json +1 -1
  7. package/plugins/litclaude/bin/litclaude-mcp.js +1 -1
  8. package/plugins/litclaude/lib/canonical-skill-resources.mjs +33 -33
  9. package/plugins/litclaude/skills/lit-docx/references/page-composition.md +3 -3
  10. package/plugins/litclaude/skills/lit-docx/references/tonalities/brief.md +1 -1
  11. package/plugins/litclaude/skills/lit-docx/references/tonalities/journal.md +1 -1
  12. package/plugins/litclaude/skills/lit-docx/references/tonalities/manual.md +1 -1
  13. package/plugins/litclaude/skills/lit-docx/references/tonalities/memo.md +1 -1
  14. package/plugins/litclaude/skills/lit-docx/references/tonalities/proposal.md +1 -1
  15. package/plugins/litclaude/skills/lit-docx/references/tonalities/report.md +1 -1
  16. package/plugins/litclaude/skills/lit-docx/scripts/docx_design.py +1 -1
  17. package/plugins/litclaude/skills/lit-docx/templates/tonalities/brief.yaml +0 -1
  18. package/plugins/litclaude/skills/lit-docx/templates/tonalities/journal.yaml +0 -1
  19. package/plugins/litclaude/skills/lit-docx/templates/tonalities/manual.yaml +0 -1
  20. package/plugins/litclaude/skills/lit-docx/templates/tonalities/memo.yaml +0 -1
  21. package/plugins/litclaude/skills/lit-docx/templates/tonalities/proposal.yaml +0 -1
  22. package/plugins/litclaude/skills/lit-docx/templates/tonalities/report.yaml +0 -1
  23. package/plugins/litclaude/skills/lit-pptx/references/tonalities/atlas.md +2 -2
  24. package/plugins/litclaude/skills/lit-pptx/references/tonalities/chalk.md +1 -1
  25. package/plugins/litclaude/skills/lit-pptx/references/tonalities/gazette.md +1 -1
  26. package/plugins/litclaude/skills/lit-pptx/references/tonalities/ledger.md +1 -1
  27. package/plugins/litclaude/skills/lit-pptx/references/tonalities/night.md +2 -2
  28. package/plugins/litclaude/skills/lit-pptx/references/tonalities/paper.md +2 -2
  29. package/plugins/litclaude/skills/lit-pptx/references/tonalities/signal.md +1 -1
  30. package/plugins/litclaude/skills/lit-pptx/references/tonalities/studio.md +1 -1
  31. package/plugins/litclaude/skills/lit-pptx/scripts/craft_extras.py +1 -1
  32. package/plugins/litclaude/skills/lit-pptx/scripts/lib/template-registry.js +1 -1
  33. package/plugins/litclaude/skills/lit-pptx/scripts/validate_pptx.py +7 -4
  34. package/plugins/litclaude/skills/lit-pptx/templates/tonalities/atlas/pack.yaml +0 -13
  35. package/plugins/litclaude/skills/lit-pptx/templates/tonalities/chalk/pack.yaml +0 -13
  36. package/plugins/litclaude/skills/lit-pptx/templates/tonalities/gazette/pack.yaml +0 -13
  37. package/plugins/litclaude/skills/lit-pptx/templates/tonalities/ledger/pack.yaml +2 -15
  38. package/plugins/litclaude/skills/lit-pptx/templates/tonalities/night/pack.yaml +0 -13
  39. package/plugins/litclaude/skills/lit-pptx/templates/tonalities/paper/pack.yaml +0 -13
  40. package/plugins/litclaude/skills/lit-pptx/templates/tonalities/signal/pack.yaml +0 -13
  41. package/plugins/litclaude/skills/lit-pptx/templates/tonalities/studio/pack.yaml +0 -13
package/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.0.21 - 2026-10-09
4
+
5
+ - The deck and document looks no longer list settings that nothing applied. The eight deck looks carried entries for chart annotations, image cropping and bleed, letter case, tabular figures and table style names, and the six document looks carried page-fill targets, but the build never read any of them. Those entries are gone, and the reference pages for each look no longer promise them. Decks and documents come out exactly as before.
6
+ - The deck check now treats a one-word placeholder term such as "todo", "tbd", "fixme" or "placeholder" as a whole word. A slide that says "Mastodon" or "photodocument" no longer fails the check, while "TODO:", "TODOs" and "(TBD)" still do.
7
+
3
8
  ## 1.0.20 - 2026-10-08
4
9
 
5
10
  - `lit-pptx` now works out who will read a deck and how, then picks one of eight looks before it builds a slide. `ledger` is a dense, number-led review for reading at a desk, `signal` a short pitch with one hot accent, `atlas` a deck carried by pictures, `chalk` a lesson with numbered steps, `paper` a research talk with numbered figures and citations, `gazette` a Korean briefing page, `studio` an editorial grid, and `night` a dark style for a keynote screen. Each look brings its own colours, title positions and page layouts. The older AZURE and plain 4:3 templates still work when you ask for them by name.
package/README.md CHANGED
@@ -1,14 +1,14 @@
1
- <p align="center"><picture><source media="(prefers-reduced-motion: reduce)" srcset="https://cdn.jsdelivr.net/npm/@litfamily/litclaude@1.0.20/docs/assets/cover-motion-still.webp" /><img src="https://cdn.jsdelivr.net/npm/@litfamily/litclaude@1.0.20/docs/assets/cover-motion.webp" width="100%" alt="LitFamily motion cover: five armored robots power on one by one, the LitClaude robot wakes with glowing eyes and a lit frame, then LITFAMILY and KEEP THE WORK LIT. light up." /></picture></p>
1
+ <p align="center"><picture><source media="(prefers-reduced-motion: reduce)" srcset="https://cdn.jsdelivr.net/npm/@litfamily/litclaude@1.0.21/docs/assets/cover-motion-still.webp" /><img src="https://cdn.jsdelivr.net/npm/@litfamily/litclaude@1.0.21/docs/assets/cover-motion.webp" width="100%" alt="LitFamily motion cover: five armored robots power on one by one, the LitClaude robot wakes with glowing eyes and a lit frame, then LITFAMILY and KEEP THE WORK LIT. light up." /></picture></p>
2
2
 
3
3
  <h1 align="center">LitClaude</h1>
4
4
  <p align="center"><strong>Keep the work lit.</strong></p>
5
5
  <p align="center">Plan, build, and check your work in Claude Code. Leave the next session a place to begin.</p>
6
6
  <p align="center">
7
- <img src="https://cdn.jsdelivr.net/npm/@litfamily/litclaude@1.0.20/docs/assets/readme/badge-version.svg" alt="1.0.20" />
8
- <a href="https://cdn.jsdelivr.net/npm/@litfamily/litclaude@1.0.20/LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litclaude@1.0.20/docs/assets/readme/badge-license.svg" alt="MIT license" /></a>
7
+ <img src="https://cdn.jsdelivr.net/npm/@litfamily/litclaude@1.0.21/docs/assets/readme/badge-version.svg" alt="1.0.21" />
8
+ <a href="https://cdn.jsdelivr.net/npm/@litfamily/litclaude@1.0.21/LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litclaude@1.0.21/docs/assets/readme/badge-license.svg" alt="MIT license" /></a>
9
9
  </p>
10
10
  <p align="center">
11
- <a href="https://github.com/wjgoarxiv/litclaude#readme">Full guide and skills gallery on GitHub</a> · <a href="https://cdn.jsdelivr.net/npm/@litfamily/litclaude@1.0.20/README_ko-KR.md">한국어</a>
11
+ <a href="https://github.com/wjgoarxiv/litclaude#readme">Full guide and skills gallery on GitHub</a> · <a href="https://cdn.jsdelivr.net/npm/@litfamily/litclaude@1.0.21/README_ko-KR.md">한국어</a>
12
12
  </p>
13
13
 
14
14
  LitClaude is a Claude Code plugin. Add `lit` to a request and Claude pins the goal, writes a
@@ -131,7 +131,7 @@ changed by hand or doesn't look like one LitClaude made, it refuses to touch it.
131
131
  ## More
132
132
 
133
133
  - [Full guide and skills gallery on GitHub](https://github.com/wjgoarxiv/litclaude#readme)
134
- - [Privacy and network behavior](https://cdn.jsdelivr.net/npm/@litfamily/litclaude@1.0.20/docs/privacy.md)
135
- - [Migration and ownership conflicts](https://cdn.jsdelivr.net/npm/@litfamily/litclaude@1.0.20/docs/migration.md)
136
- - [Release history](https://cdn.jsdelivr.net/npm/@litfamily/litclaude@1.0.20/CHANGELOG.md)
137
- - [MIT license](https://cdn.jsdelivr.net/npm/@litfamily/litclaude@1.0.20/LICENSE)
134
+ - [Privacy and network behavior](https://cdn.jsdelivr.net/npm/@litfamily/litclaude@1.0.21/docs/privacy.md)
135
+ - [Migration and ownership conflicts](https://cdn.jsdelivr.net/npm/@litfamily/litclaude@1.0.21/docs/migration.md)
136
+ - [Release history](https://cdn.jsdelivr.net/npm/@litfamily/litclaude@1.0.21/CHANGELOG.md)
137
+ - [MIT license](https://cdn.jsdelivr.net/npm/@litfamily/litclaude@1.0.21/LICENSE)
package/README_ko-KR.md CHANGED
@@ -1,14 +1,14 @@
1
- <p align="center"><picture><source media="(prefers-reduced-motion: reduce)" srcset="https://cdn.jsdelivr.net/npm/@litfamily/litclaude@1.0.20/docs/assets/cover-motion-still.webp" /><img src="https://cdn.jsdelivr.net/npm/@litfamily/litclaude@1.0.20/docs/assets/cover-motion.webp" width="100%" alt="LitFamily 모션 커버: 다섯 로봇 패널이 차례로 켜지고, LitClaude 로봇의 눈과 테두리가 빛난 뒤 LITFAMILY와 KEEP THE WORK LIT. 문구가 밝아지는 영상" /></picture></p>
1
+ <p align="center"><picture><source media="(prefers-reduced-motion: reduce)" srcset="https://cdn.jsdelivr.net/npm/@litfamily/litclaude@1.0.21/docs/assets/cover-motion-still.webp" /><img src="https://cdn.jsdelivr.net/npm/@litfamily/litclaude@1.0.21/docs/assets/cover-motion.webp" width="100%" alt="LitFamily 모션 커버: 다섯 로봇 패널이 차례로 켜지고, LitClaude 로봇의 눈과 테두리가 빛난 뒤 LITFAMILY와 KEEP THE WORK LIT. 문구가 밝아지는 영상" /></picture></p>
2
2
 
3
3
  <h1 align="center">LitClaude</h1>
4
4
  <p align="center"><strong>Keep the work lit.</strong></p>
5
5
  <p align="center">Claude Code에서 계획하고, 만들고, 확인한 일을 다음 세션으로 이어가세요.</p>
6
6
  <p align="center">
7
- <img src="https://cdn.jsdelivr.net/npm/@litfamily/litclaude@1.0.20/docs/assets/readme/badge-version.svg" alt="1.0.20" />
8
- <a href="https://cdn.jsdelivr.net/npm/@litfamily/litclaude@1.0.20/LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litclaude@1.0.20/docs/assets/readme/badge-license.svg" alt="MIT license" /></a>
7
+ <img src="https://cdn.jsdelivr.net/npm/@litfamily/litclaude@1.0.21/docs/assets/readme/badge-version.svg" alt="1.0.21" />
8
+ <a href="https://cdn.jsdelivr.net/npm/@litfamily/litclaude@1.0.21/LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litclaude@1.0.21/docs/assets/readme/badge-license.svg" alt="MIT license" /></a>
9
9
  </p>
10
10
  <p align="center">
11
- <a href="https://github.com/wjgoarxiv/litclaude/blob/main/README_ko-KR.md">전체 안내와 스킬 갤러리는 GitHub에서</a> · <a href="https://cdn.jsdelivr.net/npm/@litfamily/litclaude@1.0.20/README.md">English</a>
11
+ <a href="https://github.com/wjgoarxiv/litclaude/blob/main/README_ko-KR.md">전체 안내와 스킬 갤러리는 GitHub에서</a> · <a href="https://cdn.jsdelivr.net/npm/@litfamily/litclaude@1.0.21/README.md">English</a>
12
12
  </p>
13
13
 
14
14
  LitClaude는 Claude Code 플러그인입니다. 요청 끝에 `lit`을 붙이면 Claude가 목표를 먼저
@@ -124,7 +124,7 @@ npm exec --yes --package @litfamily/litclaude@latest -- litclaude uninstall
124
124
  ## 더 보기
125
125
 
126
126
  - [전체 안내와 스킬 갤러리 (GitHub)](https://github.com/wjgoarxiv/litclaude/blob/main/README_ko-KR.md)
127
- - [개인정보와 네트워크](https://cdn.jsdelivr.net/npm/@litfamily/litclaude@1.0.20/docs/privacy.md)
128
- - [이전 안내와 소유권 충돌](https://cdn.jsdelivr.net/npm/@litfamily/litclaude@1.0.20/docs/migration.md)
129
- - [Release history](https://cdn.jsdelivr.net/npm/@litfamily/litclaude@1.0.20/CHANGELOG.md)
130
- - [MIT 라이선스](https://cdn.jsdelivr.net/npm/@litfamily/litclaude@1.0.20/LICENSE)
127
+ - [개인정보와 네트워크](https://cdn.jsdelivr.net/npm/@litfamily/litclaude@1.0.21/docs/privacy.md)
128
+ - [이전 안내와 소유권 충돌](https://cdn.jsdelivr.net/npm/@litfamily/litclaude@1.0.21/docs/migration.md)
129
+ - [Release history](https://cdn.jsdelivr.net/npm/@litfamily/litclaude@1.0.21/CHANGELOG.md)
130
+ - [MIT 라이선스](https://cdn.jsdelivr.net/npm/@litfamily/litclaude@1.0.21/LICENSE)
@@ -1 +1 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="146" height="20" role="img" aria-label="release: 1.0.20"><title>release: 1.0.20</title><g shape-rendering="crispEdges"><rect width="49" height="20" fill="#080d14"/><rect x="49" width="97" height="20" fill="#ff6337"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text x="255" y="140" textLength="390" transform="scale(.1)">release</text><text x="965" y="140" textLength="870" transform="scale(.1)" fill="#080D14">1.0.20</text></g></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="146" height="20" role="img" aria-label="release: 1.0.21"><title>release: 1.0.21</title><g shape-rendering="crispEdges"><rect width="49" height="20" fill="#080d14"/><rect x="49" width="97" height="20" fill="#ff6337"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text x="255" y="140" textLength="390" transform="scale(.1)">release</text><text x="965" y="140" textLength="870" transform="scale(.1)" fill="#080D14">1.0.21</text></g></svg>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@litfamily/litclaude",
3
- "version": "1.0.20",
3
+ "version": "1.0.21",
4
4
  "description": "Claude Code-native workflow distribution.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "litclaude",
3
3
  "description": "Claude Code-native workflow plugin with a bounded-authority start-work lifecycle.",
4
- "version": "1.0.20",
4
+ "version": "1.0.21",
5
5
  "author": {
6
6
  "name": "LitClaude contributors"
7
7
  },
@@ -9,7 +9,7 @@ import {
9
9
  } from "../lib/wikify-knowledge.mjs";
10
10
 
11
11
  const protocolVersion = "2024-11-05";
12
- const serverVersion = "1.0.20";
12
+ const serverVersion = "1.0.21";
13
13
 
14
14
  const publicSourceReadTool = {
15
15
  name: "public_source_read",
@@ -513,20 +513,20 @@ export const canonicalSkillResourceManifest = Object.freeze(
513
513
  ["skills/lit-docx/references/frontmatter_schema.md", "30200cc4bf9bf633cf4cfbe077c394d01e9bb40dc580d651c0bb5c0f12ef12ee"],
514
514
  ["skills/lit-docx/references/journal_style_spec.md", "758fca79cc7da20e828a15baaf630085406d18b4f7f511db0dc0e86224ec9ad2"],
515
515
  ["skills/lit-docx/references/markdown_quality_checklist.md", "3e1f9242927f16f7085824d6cd7082cc10662e6120ceb3e1f14ee29d6b7dbf26"],
516
- ["skills/lit-docx/references/page-composition.md", "caf1e8ccb0cf751f59c76dd64c84334a7df54037ba5ce8d7a4fe771bf1a8ebb1"],
516
+ ["skills/lit-docx/references/page-composition.md", "9b836398aa20d0869f746abbc1ee3b5cec1b4ac01fe105a1dbb6c3a6ed6e19fd"],
517
517
  ["skills/lit-docx/references/slop_phrase_list.yaml", "b4cb5dc858b2ea44b5558e8be4cb51199af40de53b901fb563b53c5416c50bdc"],
518
518
  ["skills/lit-docx/references/slop_rules.md", "3d182b85a5643e42411ab6552d23e76e963854ec9e88e8953c20bf8df8614a57"],
519
- ["skills/lit-docx/references/tonalities/brief.md", "3eb533c38280d0957aac54930b5405710704fcfdb770fbb1a7590681cb19d1d0"],
520
- ["skills/lit-docx/references/tonalities/journal.md", "2998ec31db1c77b51374c36665a470900d2adcf5fc26b49c666d770b512d2d68"],
521
- ["skills/lit-docx/references/tonalities/manual.md", "2997866500e030dd8ac1b18025157b10fc774b188d21930a9fb8750abf19551f"],
522
- ["skills/lit-docx/references/tonalities/memo.md", "ccd0642d2439b3a2ab348ec827937e289a5a70ca14b7dee1756537f241458fd2"],
523
- ["skills/lit-docx/references/tonalities/proposal.md", "d732d35be75b525d212808ff79844a3982180077398a2ed9f050933b2951b563"],
524
- ["skills/lit-docx/references/tonalities/report.md", "416491a17f03148a18487173ad211018453ca41c8f42aff1f57af288e2f23719"],
519
+ ["skills/lit-docx/references/tonalities/brief.md", "5a0571cb7c0cc31391f3d707803aba415d7bb80b57826787f924ab535435f08a"],
520
+ ["skills/lit-docx/references/tonalities/journal.md", "45871c10611346a2a0d81b3e7db14c8762c75daeeee3cea30e6e8edfc7066807"],
521
+ ["skills/lit-docx/references/tonalities/manual.md", "b192101743c6b908095635c27a9bb6c7ee922a05f3139851c57b9566ba8848cb"],
522
+ ["skills/lit-docx/references/tonalities/memo.md", "0e6863b3a5cf29a8e5a773f6bab8a3e65c4ecee3a63ff1b49bb194326ea291e1"],
523
+ ["skills/lit-docx/references/tonalities/proposal.md", "904324ce21411e1942624a3ce8d4dd308eba0f8df2fdb5b88220cbc46e28b469"],
524
+ ["skills/lit-docx/references/tonalities/report.md", "9f398eac6fca2ad042a3a795b272d4323150584cb274adccd888b8b7e6a0868e"],
525
525
  ["skills/lit-docx/scripts/clean_markdown.py", "d9116e22d26f4334c07e952443d9ceb8d8fc0f5d3c992d4fa3407a891187e225"],
526
526
  ["skills/lit-docx/scripts/convert_md_to_docx.py", "eb28c70f9d147aabc47aed7101af3270f06ee1a8f672070f5e4b68fb435994ef"],
527
527
  ["skills/lit-docx/scripts/convert_md_to_pdf.py", "2a9a6df79f1375952f2c4038514ea9fc8f0f6f6673a94f3fd55c8bc0168cf1fd"],
528
528
  ["skills/lit-docx/scripts/convert_pdf.py", "0ed22e0305d0d0a49d365e0b62462f5377ef765d5835b2a2d8cd9ede98bff31c"],
529
- ["skills/lit-docx/scripts/docx_design.py", "525a7d46bbb77e79a8bc5318f0c4f723315df8b5104b403c3984d6a83553d0a0"],
529
+ ["skills/lit-docx/scripts/docx_design.py", "2db6d86b1adda1f70a74dcf67e28dbd7fc2a5cffc158b76070e592e0063318f6"],
530
530
  ["skills/lit-docx/scripts/docx_layout.py", "4bd326b28df5b7b665dcca87a6ba0b9f8a0f7fc88473b1b75145538809894925"],
531
531
  ["skills/lit-docx/scripts/edit_docx.py", "65dbd4823f5ead1474a52a10688817ae7abc34933e4ea4a110914a0b00aac009"],
532
532
  ["skills/lit-docx/scripts/embed_images.py", "481f2bb54a6f4a1d3fae7c66f3d6b1f56676a30030154131ffe866e23ea68db1"],
@@ -550,12 +550,12 @@ export const canonicalSkillResourceManifest = Object.freeze(
550
550
  ["skills/lit-docx/templates/latex/nature/README.md", "b0ff9e258e3aabc9c9bed8c26d7c9373b4bca83a85c54c5bd9c937132a829cbb"],
551
551
  ["skills/lit-docx/templates/latex/nature/template.tex", "74437009d7fe894b8e2c8c256f300181081195e1f9831e922e20af6606704265"],
552
552
  ["skills/lit-docx/templates/registry.yaml", "950c0adf003f773c84756e73df352bc29c771a8399f91c8ee93c14c39b6b9c7d"],
553
- ["skills/lit-docx/templates/tonalities/brief.yaml", "73a466263bad4f876671de0121b117223f0659f896d99cabde76e8d6a86385f5"],
554
- ["skills/lit-docx/templates/tonalities/journal.yaml", "aae647c0d62e6b801923651df754933e92c3db8c07c0fe7e12977e1c8473e028"],
555
- ["skills/lit-docx/templates/tonalities/manual.yaml", "de31b0bfa3dc46d172b84af6d60ade9ac1411ba0fb34bb2e402e3a0f80486c67"],
556
- ["skills/lit-docx/templates/tonalities/memo.yaml", "72ea02f34bfe876c7b8c84d48cc7ef3de021b660ed6c234eae8e5c445675e45f"],
557
- ["skills/lit-docx/templates/tonalities/proposal.yaml", "7cf710c09ae8d30a208f59167e9b47f0222a2184231a68047aa596f2c7e135d4"],
558
- ["skills/lit-docx/templates/tonalities/report.yaml", "ad8312bba2752e142ef40b560c13339f5411be73acb0f01634a4e744b215e5d8"],
553
+ ["skills/lit-docx/templates/tonalities/brief.yaml", "41bf481cd799b28ee53538a3cf88a58c4b2f9db365d1ca1ee10b3adfcad1ab8e"],
554
+ ["skills/lit-docx/templates/tonalities/journal.yaml", "0a7ae34ccd6e91f289c472bfeb8bcfd6736005f15c55a63dd4cc43e55606ec57"],
555
+ ["skills/lit-docx/templates/tonalities/manual.yaml", "cc965f5523c7cbaa4c1d0bc06e5260641dfc8113b77f2c252862a397eb97ce84"],
556
+ ["skills/lit-docx/templates/tonalities/memo.yaml", "5d850aba7cfd3173b2a1af6d46268cdad73d037f70a4606f6c5f3df9278bee51"],
557
+ ["skills/lit-docx/templates/tonalities/proposal.yaml", "b1b7f4875a89208939ca82d69e6cfb30c35b64ea91d67d5aecc98fe04bde3bfc"],
558
+ ["skills/lit-docx/templates/tonalities/report.yaml", "23ac1d24f8936c6d522e19354d5948f0d00dce6d60c34fa42e37adafcc68cb8c"],
559
559
  ["skills/lit-humanizer/NOTICE", "c2608d2bc42cac22e77ac64eb137f8fc40d8f9a0b08ae7d7a8a75cf11d9289be"],
560
560
  ["skills/lit-humanizer/SKILL.md", "673864584ac4ca8d054be6adb8460a45e19c950456cd26ba7b2f41923f40ac6b"],
561
561
  ["skills/lit-humanizer/assets/always-on-rule.md", "1c0e1d9724f012f05142c69d06e8a8cc89596556cba2c8ff1438e99c7848a5cf"],
@@ -672,16 +672,16 @@ export const canonicalSkillResourceManifest = Object.freeze(
672
672
  ["skills/lit-pptx/references/stages/interview.md", "1d57f85cf1914019784c0f0eb827a0fd6f2d707ce11a87a93ed09c16832e8651"],
673
673
  ["skills/lit-pptx/references/stages/plan.md", "401e2f176020ee15de84e43a625605f7294ff2e351e86e3325a5657a85082023"],
674
674
  ["skills/lit-pptx/references/title-treatments.md", "d8c28a6c68736264d656cb22240a4f769418ec692b5d15bfe9d9b9ee62e03778"],
675
- ["skills/lit-pptx/references/tonalities/atlas.md", "06e4c9e356e76c2301692bc355d8d8c9dfd07bb73a4e2085fdafe5f9fa0f9405"],
676
- ["skills/lit-pptx/references/tonalities/chalk.md", "a5496d9687c0dbc48c5f4183e6a8f64a16b424b344a925480492a2e24c117ad2"],
677
- ["skills/lit-pptx/references/tonalities/gazette.md", "7c4d0cbe6244fcfc9e4c8926d88b36af7ef3e7817860b6835bcf5b31ad35637e"],
678
- ["skills/lit-pptx/references/tonalities/ledger.md", "db5027060b54076f2d31efc74b8ee1bb6b36e2ad257bd52ef5a2ff302bb860d0"],
679
- ["skills/lit-pptx/references/tonalities/night.md", "bac54c46afe6ff18449a0c927e05f6c0aa87bc588e52d94b9a4fc86f6da6508c"],
680
- ["skills/lit-pptx/references/tonalities/paper.md", "feaf1e60bb9e06380a98b33e76f9a6ce399eac68e0b6500f36d084621a3c3514"],
681
- ["skills/lit-pptx/references/tonalities/signal.md", "dedbfb9731588c6a5c3a8d17089bbcb099e2281a0db0e42e3cf19a482814bb73"],
682
- ["skills/lit-pptx/references/tonalities/studio.md", "f958c966d38f66a4fbe64f0349c723135bcc4c2bcddf236ea5f7cc221107f889"],
675
+ ["skills/lit-pptx/references/tonalities/atlas.md", "b1c70c2913db2a47952001717928529a37ee4b950be1ca73c4d1b35638667fa4"],
676
+ ["skills/lit-pptx/references/tonalities/chalk.md", "73177a7a675a8db32271cbd396d4e9518e951be9c51af4825845ea5a4294de34"],
677
+ ["skills/lit-pptx/references/tonalities/gazette.md", "ff2e459c982cba824c29355bb6229802a90bb100675cd27d41ce446b130fae64"],
678
+ ["skills/lit-pptx/references/tonalities/ledger.md", "84b8c5dd66b829c45e2c43536e92179ae260fbe466568f7e12f4baae9ead5309"],
679
+ ["skills/lit-pptx/references/tonalities/night.md", "c26b005e0ab430037d07cfeb4a64913716b91087dda05e398768de465b413f3e"],
680
+ ["skills/lit-pptx/references/tonalities/paper.md", "3cf05a6a19714b3b18b9c3f3ac40d65f56175f94faf046d4e02b9b333975152e"],
681
+ ["skills/lit-pptx/references/tonalities/signal.md", "48277d1165183e93343afb03aeaca6c39d4d249cfed178945a9f9a0e619e9bbc"],
682
+ ["skills/lit-pptx/references/tonalities/studio.md", "c699df3fc2647e25c2d07f0cb5ad5face5a58903f06b3000d2a04dc653be2369"],
683
683
  ["skills/lit-pptx/scripts/compile-deck.js", "50d3f6663446f31c5ebc9e2773efd880ead396d368c2871b1d479f637fd5cb80"],
684
- ["skills/lit-pptx/scripts/craft_extras.py", "9d56901b87f8f9e4c591acac227a23b41beca3958e7789fdaec351f0bbe44b46"],
684
+ ["skills/lit-pptx/scripts/craft_extras.py", "dfb5ced20a87ae6d8f9d620bf8006b3bdb6bba07216950dbe555a8e957fe7eeb"],
685
685
  ["skills/lit-pptx/scripts/deck_craft.py", "7963d1b4df1ecf77b48584d7c5464e8b4dad3c2816c26db17af4839ef638a0e4"],
686
686
  ["skills/lit-pptx/scripts/embed_fonts.py", "4f54c28e05fb205f3f0a48a60fd0adb4e4edb16505aa2e0c36d918dda6c6884c"],
687
687
  ["skills/lit-pptx/scripts/forbidden-terms.json", "8ef78f42a519c513c9291d8145dedd6180d4130e31553d1036821f1afd61cc81"],
@@ -701,10 +701,10 @@ export const canonicalSkillResourceManifest = Object.freeze(
701
701
  ["skills/lit-pptx/scripts/lib/runtime-require.js", "0dd3480d6aa9192928f9fc750779b96f4192c0dec67ba040c9b3a6fa7d7ecb78"],
702
702
  ["skills/lit-pptx/scripts/lib/slide-ast.js", "a4fca91df696b43e5dcffa1b4f6116c8dfe7f8fc13de8c804dda8fbddf1ede9c"],
703
703
  ["skills/lit-pptx/scripts/lib/spec-validator.js", "0869ff328654de5c8c6eb36a22e9865683ba667b11eba6a85bd3e5428a3fccf3"],
704
- ["skills/lit-pptx/scripts/lib/template-registry.js", "5c2a86e15a319afd8cc2635521802c508a400bc27390fedb6ec0a61f3f3498e9"],
704
+ ["skills/lit-pptx/scripts/lib/template-registry.js", "a90ef33bc2ff0821bc62a49ac6724a6ebee0761de7d95b764c42b73bf82b740f"],
705
705
  ["skills/lit-pptx/scripts/package.json", "a51bff776fdd53226e2e67d8f654d17dadfe3decc8bf8bf869cba3aff9813826"],
706
706
  ["skills/lit-pptx/scripts/qa_deck.py", "9186cdb81846b6e3e10a1cdad015a81e08d0bd9cf2294fbcbfff7234431ba98c"],
707
- ["skills/lit-pptx/scripts/validate_pptx.py", "165b62ca1aadc3e33d55a4aa153a67d7d362119b096e8ce31d6bf165f33dbc7b"],
707
+ ["skills/lit-pptx/scripts/validate_pptx.py", "152b4ec92054dd49a71cd112d336a02b92299efa2d5d74eafb44ba68ff64d7b8"],
708
708
  ["skills/lit-pptx/specs/markdown-slide-spec-v1.md", "000089052be5f6fae073f4378dba296b23951e5e3e1ebcee51934d84594f132a"],
709
709
  ["skills/lit-pptx/specs/markdown-slide-spec-v2.md", "c2f417ef458f4960eaee50befd12565636ace50d3aa07666be8fa14b6041c91b"],
710
710
  ["skills/lit-pptx/specs/slide-ast-v1.schema.json", "d5d03fab6569dc00484eca268601b6ac4dce496dfb586c3153693049f8376f1e"],
@@ -722,14 +722,14 @@ export const canonicalSkillResourceManifest = Object.freeze(
722
722
  ["skills/lit-pptx/templates/enrolled/BOILERPLATE-PRETENDARD/capabilities.yaml", "fa601f72a8561ffb56b8c006ffab200a86d56b7978b616542fd2d5a551a989b0"],
723
723
  ["skills/lit-pptx/templates/enrolled/BOILERPLATE-PRETENDARD/layout-mapping.yaml", "550f1d4d88c3a222648d69cdbef93e09050062c80d544003128b63d8e50a2cde"],
724
724
  ["skills/lit-pptx/templates/enrolled/BOILERPLATE-PRETENDARD/template.yaml", "92cb5ac639dde5208ed777954b2207752a85a676ea8f280b3db21ce9be537e57"],
725
- ["skills/lit-pptx/templates/tonalities/atlas/pack.yaml", "1a55367348e8304266e6038a34ec1c84060e3667c9f42c1707e2818c01b535da"],
726
- ["skills/lit-pptx/templates/tonalities/chalk/pack.yaml", "5d9ceecd8a87536a7ca483ebabf525a627f5fac6eaf8e3d4e4d0979ff08c6ea6"],
727
- ["skills/lit-pptx/templates/tonalities/gazette/pack.yaml", "b9f58d62e14bd18d004a928210e01678db923895c8d117f8f93d06286c31ce6c"],
728
- ["skills/lit-pptx/templates/tonalities/ledger/pack.yaml", "67a4a4fa8ecd9d98c0780d3a49610ccc83993d4f20ee7a875d1fe3c32f3da369"],
729
- ["skills/lit-pptx/templates/tonalities/night/pack.yaml", "631c84ee1388b8d69673bf392b704d4d4061433b12957a29c16c37dd5875eb33"],
730
- ["skills/lit-pptx/templates/tonalities/paper/pack.yaml", "b1c3b1e5512328b56c6059263d01235bdd460910d00f8dd44f59dec99c60802a"],
731
- ["skills/lit-pptx/templates/tonalities/signal/pack.yaml", "db5d0acb28b845ec3049afb84678f1d03d4670e0a607a1aeb9e7141e3fcbb9eb"],
732
- ["skills/lit-pptx/templates/tonalities/studio/pack.yaml", "9743bb77fd14e8847c830f4905c2aff6d672585c3797bc96ee422c471aa6fdfa"],
725
+ ["skills/lit-pptx/templates/tonalities/atlas/pack.yaml", "9eb26f4796425816ec2691270c6d7a566482b148234bef0e259192726d5ee1a3"],
726
+ ["skills/lit-pptx/templates/tonalities/chalk/pack.yaml", "63bf81cb70fa3d7da05611851b998f2db442b6c9119aa338da14115ff635273f"],
727
+ ["skills/lit-pptx/templates/tonalities/gazette/pack.yaml", "1c210b4e537b4233647d40c34f9d42cd3564838180f32a964c453a0f8f2ee6b1"],
728
+ ["skills/lit-pptx/templates/tonalities/ledger/pack.yaml", "cffb8040e3bf52b115ba03112978fd4a70f4afa873282f0dbf1d06846b51b79e"],
729
+ ["skills/lit-pptx/templates/tonalities/night/pack.yaml", "7142a4695e245056a1a38243028c502580b7b075c3c31e78a5512700e2cbf760"],
730
+ ["skills/lit-pptx/templates/tonalities/paper/pack.yaml", "81394c9c964e2488f9e3c4c043ec4040efe6c2fde7a468ea7d1c9838b8e373bf"],
731
+ ["skills/lit-pptx/templates/tonalities/signal/pack.yaml", "c4c92302e739b1a9f4fde25b2961272207a56a943cb8dde94cbd3a401b05a7d8"],
732
+ ["skills/lit-pptx/templates/tonalities/studio/pack.yaml", "ac3164e0333a51282c7c612eccaffbd3144e65e878731304c06f9c5b3cf1da60"],
733
733
  ["skills/lit-team/SKILL.md", "6d4ca726d1240db7692ccc95802ab6abfd45588147ec663dafa1b3b233a08a13"],
734
734
  ["skills/lit-team/scripts/team.mjs", "a0be61f09cc1c10989b12709135ac4b99260496f840dcf58514478082e239fe7"],
735
735
  ["skills/lit-typographic-motion/SKILL.md", "df3fcd7e8c91b9d617cebf0a466ee169f1155d5544984bbfc753f20322491a52"],
@@ -12,8 +12,8 @@ type, squeezing leading or loosening a gate threshold is never the fix.
12
12
 
13
13
  The user's standing preference is high density: pages carry information to the bottom and there are
14
14
  no airy layouts unless the user asks for one. Every pack's default density is between 8 and 9 (Report
15
- 9, Brief 9, Manual 9, Proposal 8, Memo 9, Journal 9), and the median body-page fill target is 0.80
16
- (Proposal 0.75, because a proposal may give a page to a figure). The skill may move density by up to 2
15
+ 9, Brief 9, Manual 9, Proposal 8, Memo 9, Journal 9), and body pages aim at a median fill of 0.80
16
+ (0.75 in a Proposal, because a proposal may give a page to a figure). The skill may move density by up to 2
17
17
  from the pack default without asking and writes the move on the direction card; going below 7 needs
18
18
  the user's word.
19
19
 
@@ -133,7 +133,7 @@ the gate on a tonality document:
133
133
  | `component.variety` | a document of four or more pages built with a tonality uses at least two component kinds (a cover or title-block directive counts) |
134
134
  | `heading.declarative` | headings, the title and the subtitle are noun-phrase labels, not sentences (structural; runs without `--layout` too) |
135
135
 
136
- The median fill is reported against the pack's target, not failed. A page found by a check is named
136
+ The median fill is reported (`fill_median`), not failed. A page found by a check is named
137
137
  with its number; open that page before changing anything.
138
138
 
139
139
  ### The restraint checks (A4.11)
@@ -72,7 +72,7 @@ Values at the pack default (density 9, variance 3), from `templates/tonalities/b
72
72
  | Running head | folio only, footer right, 8.5 pt muted |
73
73
  | Components | callout (one at most), columns |
74
74
  | Figures | at most 0.40 of the frame height |
75
- | Fill | no body page under 0.35 except the last; median target 0.80 |
75
+ | Fill | no body page under 0.35 except the last (`fill.page`) |
76
76
 
77
77
  **Dials.** Density 9 is the pack's working point. Density 10 closes the top margin to 24 mm, which buys
78
78
  a few lines for a brief that spills onto an extra page; cutting a sentence is usually better. Density 7
@@ -71,7 +71,7 @@ has no accent: `accent_on` is empty, so the title rule and the callout rule are
71
71
  | Running head | header: short title left, folio right, 8.5 pt muted |
72
72
  | Components | callout only |
73
73
  | Figures | at most 0.40 of the frame height, sized to the column width |
74
- | Fill | no body page under 0.35; median target 0.80 |
74
+ | Fill | no body page under 0.35 (`fill.page`) |
75
75
 
76
76
  **Dials.** Density 7 opens the margins to 27/29/27/27 mm and the pitch to 137 % Latin and 180 % Hangul,
77
77
  for a white paper meant to be printed; the columns get narrower, so check that three-column tables
@@ -76,7 +76,7 @@ Values at the pack default (density 9, variance 6), from `templates/tonalities/m
76
76
  | Running head | header: short title left; footer: folio right; 8.5 pt muted |
77
77
  | Components | callout, sidebar, columns (three kinds at most) |
78
78
  | Figures | at most 0.45 of the frame height |
79
- | Fill | no body page under 0.35; median target 0.80 |
79
+ | Fill | no body page under 0.35 (`fill.page`) |
80
80
 
81
81
  **Dials.** Density 7 opens the margins to 27/29/27/27 mm and the Hangul pitch to 180 %: for a guide used
82
82
  at a bench, where a looser line helps the reader find their place again. Density 10 closes the top
@@ -71,7 +71,7 @@ no accent: the palette is ink, muted ink and a grey rule only.
71
71
  | Running head | folio from page 2, footer right, muted |
72
72
  | Components | none |
73
73
  | Figures | at most 0.40 of the frame height |
74
- | Fill | no page under 0.35 except the last; median target 0.80; a memo never spills onto a second page it fills under a quarter of the frame (`memo.fit`) |
74
+ | Fill | no page under 0.35 except the last (`fill.page`); a memo never spills onto a second page it fills under a quarter of the frame (`memo.fit`) |
75
75
 
76
76
  A memo stays on one page when its content allows: the pack's `spacing: tight` sets the tokens above,
77
77
  and the page check `memo.fit` (qa_docx.py --layout) fails a memo that spills less than a quarter of a
@@ -66,7 +66,7 @@ Values at the pack default (density 8, variance 6), from `templates/tonalities/p
66
66
  | Running head | folio centred at the foot, 8.5 / 9 pt muted; none on the cover |
67
67
  | Components | keyfigures, callout (one at most), columns |
68
68
  | Figures | at most 0.60 of the frame height |
69
- | Fill | no body page under 0.35; median target 0.75 |
69
+ | Fill | no body page under 0.35 (`fill.page`) |
70
70
 
71
71
  **Dials.** Density 6 or 7 opens the margins to 27/29/27/27 mm and the Hangul pitch to 180 %, for a
72
72
  printed proposal handed over in a meeting. Density 10 closes them to 24/26/25/25 mm for a proposal held
@@ -82,7 +82,7 @@ Values at the pack default (density 9, variance 5), read from `templates/tonalit
82
82
  | Running head | footer: short title left, folio right, 8.5 pt muted |
83
83
  | Components | keyfigures, callout, columns (three kinds at most) |
84
84
  | Figures | at most 0.45 of the text-frame height |
85
- | Fill | no body page under 0.35; median target 0.80 |
85
+ | Fill | no body page under 0.35 (`fill.page`) |
86
86
 
87
87
  **Dials.** Density moves margins and leading together: density 10 closes the margins to 24/26/25/25 mm
88
88
  for a report a page over its limit; density 7 opens them to 27/29/27/27 mm with a Hangul pitch of 180 %.
@@ -59,7 +59,7 @@ LABELS = {
59
59
  }
60
60
  PACK_KEYS = {"schema_version", "tonality", "summary", "dials", "docx", "design"}
61
61
  DESIGN_KEYS = {"ramp", "numbering", "h1_rule", "title_block", "contents", "summary_form", "conclusion_first", "running_head", "justify",
62
- "palette", "accent_on", "page_geometry", "components", "figure_style", "fill", "spacing"}
62
+ "palette", "accent_on", "page_geometry", "components", "figure_style", "spacing"}
63
63
  ACCENT_PLACES = ("title_rule", "callout_rule", "sidebar_rule")
64
64
  DIRECTIVE_KEYS = {
65
65
  "cover": {"variant", "image", "kicker"},
@@ -26,4 +26,3 @@ design:
26
26
  allowed: [callout, columns]
27
27
  callout_max: 1
28
28
  figure_style: {max_height_ratio: 0.40}
29
- fill: {min_page_fill: 0.35, target_median_fill: 0.80}
@@ -23,4 +23,3 @@ design:
23
23
  components:
24
24
  allowed: [callout]
25
25
  figure_style: {max_height_ratio: 0.40}
26
- fill: {min_page_fill: 0.35, target_median_fill: 0.80}
@@ -24,4 +24,3 @@ design:
24
24
  allowed: [callout, sidebar, columns]
25
25
  sidebar: {default_width: third, float: right}
26
26
  figure_style: {max_height_ratio: 0.45}
27
- fill: {min_page_fill: 0.35, target_median_fill: 0.80}
@@ -22,6 +22,5 @@ design:
22
22
  components:
23
23
  allowed: []
24
24
  figure_style: {max_height_ratio: 0.40}
25
- fill: {min_page_fill: 0.35, target_median_fill: 0.80}
26
25
  # A memo stays on one page when its content allows: the low end of the line pitch, tighter heading space.
27
26
  spacing: tight
@@ -24,4 +24,3 @@ design:
24
24
  callout_max: 1
25
25
  keyfigures: {per_row: 3}
26
26
  figure_style: {max_height_ratio: 0.60}
27
- fill: {min_page_fill: 0.35, target_median_fill: 0.75}
@@ -24,4 +24,3 @@ design:
24
24
  allowed: [keyfigures, callout, columns]
25
25
  keyfigures: {per_row: 3}
26
26
  figure_style: {max_height_ratio: 0.45}
27
- fill: {min_page_fill: 0.35, target_median_fill: 0.80}
@@ -41,8 +41,8 @@ These values are read from the pack file `pack.yaml` of the `atlas` tonality.
41
41
  | density / variance | 10 / 7 |
42
42
  | radius / edge | 0 / fill |
43
43
  | table | light grid: no header fill, bold ink header, hairline rows, no banding, numbers right-aligned, totals bold |
44
- | chart | hairline gridlines, direct labels, accent on the item that matters, no annotation |
45
- | image | bleed and crop allowed, no frame |
44
+ | chart | hairline gridlines, direct labels, accent on the item that matters |
45
+ | image | no frame |
46
46
  | decoration | caption band, hairline rule, colour field |
47
47
 
48
48
  ## Treatments by slide role
@@ -41,7 +41,7 @@ These values are read from the pack file `pack.yaml` of the `chalk` tonality.
41
41
  | radius / edge | 6 / fill |
42
42
  | rail | the side rail is a field-coloured fill |
43
43
  | table | header row in the accent tint with deep-accent bold text, hairline rules between rows, no banding, numbers right-aligned, totals bold |
44
- | chart | hairline gridlines, direct labels, accent on the item that matters and muted colours on the rest, annotation on |
44
+ | chart | hairline gridlines, direct labels, accent on the item that matters and muted colours on the rest |
45
45
  | decoration | accent rule, marked term underline, rail fill, numeral |
46
46
 
47
47
  The marked-term underline is listed in the pack but the engine does not draw it yet, so mark the
@@ -41,7 +41,7 @@ Read from the pack file; these are the values the engine draws.
41
41
  | density / variance | 10 / 4 |
42
42
  | radius / edge | 0 / fill and border |
43
43
  | table | header-fill style, field header with on-field text, a grid on every cell, the first column shaded, bold totals |
44
- | chart | hairline gridlines, direct labels, accent on the highlighted series, no annotation |
44
+ | chart | hairline gridlines, direct labels, accent on the highlighted series |
45
45
 
46
46
  Density 10 is the compact step every pack now starts from: 24 pt side margins, body 13 pt with no
47
47
  step-up, table rows from 18 pt and up to 22 lines per text column, titles close over the body. Variance 4 allows exactly three title treatments in a deck. That is deliberate: a briefing repeats
@@ -40,7 +40,7 @@ Read from the pack file; these are the values the engine draws.
40
40
  | density / variance | 10 / 5 |
41
41
  | radius / edge | 0 / fill |
42
42
  | table | ledger style, header in the field colour with on-field text, rules under the header and above totals, bold totals |
43
- | chart | hairline gridlines, direct labels, accent on the highlighted series over muted ones, annotation on |
43
+ | chart | hairline gridlines, direct labels, accent on the highlighted series over muted ones |
44
44
 
45
45
  Density 10 puts the deck on the compact grid (24 pt side margins) and the compact ramp: body 13 pt,
46
46
  table cells and captions 11 pt, sources 9 pt, rows from 18 pt, up to 22 lines in a text column, no
@@ -39,8 +39,8 @@ These values are read from the pack file `pack.yaml` of the `night` tonality.
39
39
  | ramp / hero | compact (body 13 pt, labels 11, sources 9) / not allowed, figures at most title size |
40
40
  | density / variance | 10 / 6 |
41
41
  | radius / edge | 6 / fill |
42
- | table | header row on the surface colour with bold ink, hairline rows, no banding, numbers right-aligned in tabular figures, totals bold, the row the title names in the accent tint |
43
- | chart | hairline gridlines, direct labels, accent on the item that matters and muted colours on the rest, annotation on |
42
+ | table | header row on the surface colour with bold ink, hairline rows, no banding, numbers right-aligned, totals bold, the row the title names in the accent tint |
43
+ | chart | hairline gridlines, direct labels, accent on the item that matters and muted colours on the rest |
44
44
  | decoration | header band, hairline rule, numeral, rail fill |
45
45
 
46
46
  ## Treatments by slide role
@@ -39,8 +39,8 @@ These values are read from the pack file `pack.yaml` of the `paper` tonality.
39
39
  | ramp / hero | compact (body 13 pt, labels 11, sources 9) / no hero step, figures at most title size |
40
40
  | density / variance | 10 / 5 |
41
41
  | radius / edge | 0 / border |
42
- | table | booktabs: heavy rule over the header, light rule under it, heavy rule at the end; no fill, no banding; numbers right-aligned in tabular figures; totals bold |
43
- | chart | hairline gridlines, direct labels, series in order (the proposed method takes the accent, baselines take ink and muted ink), no annotation |
42
+ | table | booktabs: heavy rule over the header, light rule under it, heavy rule at the end; no fill, no banding; numbers right-aligned; totals bold |
43
+ | chart | hairline gridlines, direct labels, series in order (the proposed method takes the accent, baselines take ink and muted ink) |
44
44
  | decoration | hairline rule, box outline |
45
45
 
46
46
  Negative values share the muted ink on purpose: a drop is shown with a sign and a glyph, never with
@@ -39,7 +39,7 @@ The values below come from the pack file and are what the engine draws.
39
39
  | density / variance | 10 / 6 |
40
40
  | radius / edge | 0 / fill |
41
41
  | table | open style, no header fill, rules at top and bottom, protagonist row in accent-tint, bold totals |
42
- | chart | no gridlines, direct labels, accent on the highlighted bar over muted bars, annotation on |
42
+ | chart | no gridlines, direct labels, accent on the highlighted bar over muted bars |
43
43
 
44
44
  Density 10 sets the pitch on the compact grid (24 pt side margins), body 13 pt and no step-up: a
45
45
  pitch read after the meeting carries its basis and sources on every slide. Lower it to 8 (body 14 pt,
@@ -38,7 +38,7 @@ Read from the pack file; these are the values the engine draws.
38
38
  | density / variance | 10 / 8 |
39
39
  | radius / edge | 0 / fill |
40
40
  | table | open style, no header fill, a 2 pt ink rule under the header, no row rules, bold totals |
41
- | chart | no gridlines, direct labels, accent on the highlighted series over muted ones, annotation on |
41
+ | chart | no gridlines, direct labels, accent on the highlighted series over muted ones |
42
42
 
43
43
  Density 10 puts the deck on the compact grid with body 13 pt. Variance 8 lets one deck mix up to five
44
44
  title treatments, which is the point of this direction.
@@ -370,7 +370,7 @@ ZONE_OF = {"top-rule": "top", "top-plain-large": "top", "kicker-numeral": "top",
370
370
  OUTPUT = {
371
371
  "tol": 2.0, "size_tol": 0.5,
372
372
  "min_slides": 8, "min_treatments": 3,
373
- "variety_share": 0.6, "variety_cap": 5, "max_share": 0.40,
373
+ "variety_cap": 5, "max_share": 0.40,
374
374
  "band_floor": 486.0, "footer_top": 492.0, "band_deck_max": 0.20,
375
375
  # Per-slide band caps by density (1-2, 3-4, 5-6, 7-8, 9-10); a slide over its cap is MEDIUM.
376
376
  "band_caps": ((2, 0.28), (4, 0.24), (6, 0.20), (8, 0.16), (10, 0.12)),
@@ -470,7 +470,7 @@ function validatePack(pack, file) {
470
470
  need(typeof pack.intent === "string" && pack.intent.length > 0, "intent is missing");
471
471
  need(isList(pack.canvas) && pack.canvas.length > 0 && pack.canvas.every((c) => grid.CANVAS[c]), "canvas must list 16:9 and/or 4:3");
472
472
  // `faces` is the deck's default and is Pretendard only; `faces-a2z` applies when the source asks.
473
- for (const key of ["faces", "faces-pretendard-only", "faces-a2z"]) {
473
+ for (const key of ["faces", "faces-a2z"]) {
474
474
  if (key === "faces-a2z" && pack[key] == null) continue;
475
475
  const faces = pack[key] || {};
476
476
  for (const role of FACE_KEYS) {
@@ -61,13 +61,16 @@ def _load_terms() -> tuple[list[str], list[str], bool, bool]:
61
61
  )
62
62
 
63
63
 
64
- def _build_regex(terms: list[str], case_insensitive: bool, whole_word: bool) -> re.Pattern[str] | None:
64
+ def _build_regex(terms: list[str], case_insensitive: bool, whole_word: bool, single_words: bool = False) -> re.Pattern[str] | None:
65
65
  if not terms:
66
66
  return None
67
67
  # An acronym (RAM, FTO) is a word in capitals: matched as that word, so "diagram" or "program"
68
- # does not contain it. Every other term keeps the file's case and word settings.
68
+ # does not contain it. With single_words a term that is one Latin word (todo, tbd) is matched as
69
+ # that word or its plural (TODOs), so "Mastodon" or "photodocument" does not contain it. Every
70
+ # other term keeps the file's case and word settings.
69
71
  acronyms = [term for term in terms if re.fullmatch(r"[A-Z]{2,5}", term)]
70
- escaped = [re.escape(term) for term in terms if term not in acronyms]
72
+ escaped = [rf"(?<![A-Za-z]){re.escape(term)}s?(?![A-Za-z])" if single_words and re.fullmatch(r"[A-Za-z]+", term) else re.escape(term)
73
+ for term in terms if term not in acronyms]
71
74
  pattern = "|".join(escaped)
72
75
  if whole_word and pattern:
73
76
  pattern = rf"(?:(?<=\W)|^)(?:{pattern})(?:(?=\W)|$)"
@@ -147,7 +150,7 @@ def _slide_has_title(slide, slide_height: int | None) -> bool:
147
150
  def lint(path: str | Path) -> dict[str, Any]:
148
151
  prs = Presentation(str(path))
149
152
  hard_terms, soft_terms, case_insensitive, whole_word = _load_terms()
150
- hard_re = _build_regex(hard_terms, case_insensitive, whole_word)
153
+ hard_re = _build_regex(hard_terms, case_insensitive, whole_word, single_words=True)
151
154
  soft_re = _build_regex(soft_terms, case_insensitive, whole_word)
152
155
 
153
156
  missing_titles: list[int] = []
@@ -14,12 +14,6 @@ faces:
14
14
  body: Pretendard Regular
15
15
  label: Pretendard Regular
16
16
  numeral: Pretendard Regular
17
- faces-pretendard-only:
18
- display: Pretendard Regular
19
- title: Pretendard Bold
20
- body: Pretendard Regular
21
- label: Pretendard Regular
22
- numeral: Pretendard Regular
23
17
  faces-a2z:
24
18
  display: A2Z Light
25
19
  title: Pretendard Bold
@@ -47,8 +41,6 @@ hero: false
47
41
  type-voice:
48
42
  title-tracking: 0
49
43
  display-tracking: -1
50
- latin-case: sentence
51
- figures: proportional
52
44
 
53
45
  density: 10
54
46
  variance: 7
@@ -80,21 +72,16 @@ sections: [section-image, section-field]
80
72
  closings: [closing-contact-split, closing-ask]
81
73
 
82
74
  table:
83
- style: light-grid
84
75
  header: none
85
76
  header-ink: ink
86
77
  rules: rows
87
78
  banding: none
88
- numbers: right-tabular
89
79
  totals: bold
90
80
  chart:
91
81
  gridlines: hairline
92
82
  labels: direct
93
83
  highlight: accent-on-muted
94
- annotation: off
95
84
  image:
96
- bleed: allowed
97
- crop: allowed
98
85
  frame: none
99
86
 
100
87
  fill-order: [anchor-visual, change-family, distribute, step-up]
@@ -14,12 +14,6 @@ faces:
14
14
  body: Pretendard Regular
15
15
  label: Pretendard Regular
16
16
  numeral: Pretendard Bold
17
- faces-pretendard-only:
18
- display: Pretendard Bold
19
- title: Pretendard Bold
20
- body: Pretendard Regular
21
- label: Pretendard Regular
22
- numeral: Pretendard Bold
23
17
  faces-a2z:
24
18
  display: A2Z Bold
25
19
  title: A2Z Bold
@@ -47,8 +41,6 @@ hero: false
47
41
  type-voice:
48
42
  title-tracking: -1
49
43
  display-tracking: -1
50
- latin-case: sentence
51
- figures: proportional
52
44
 
53
45
  density: 10
54
46
  variance: 6
@@ -86,21 +78,16 @@ sections: [section-numeral, section-rail]
86
78
  closings: [closing-summary-list, closing-ask]
87
79
 
88
80
  table:
89
- style: header-fill
90
81
  header: accent-tint
91
82
  header-ink: accent-deep
92
83
  rules: rows
93
84
  banding: none
94
- numbers: right-tabular
95
85
  totals: bold
96
86
  chart:
97
87
  gridlines: hairline
98
88
  labels: direct
99
89
  highlight: accent-on-muted
100
- annotation: on
101
90
  image:
102
- bleed: side-only
103
- crop: none
104
91
  frame: none
105
92
 
106
93
  fill-order: [distribute, step-up, change-family, anchor-visual]
@@ -15,12 +15,6 @@ faces:
15
15
  body: Pretendard Regular
16
16
  label: Pretendard Regular
17
17
  numeral: Pretendard Bold
18
- faces-pretendard-only:
19
- display: Pretendard Bold
20
- title: Pretendard Bold
21
- body: Pretendard Regular
22
- label: Pretendard Regular
23
- numeral: Pretendard Bold
24
18
  faces-a2z:
25
19
  display: A2Z Bold
26
20
  title: Pretendard Bold
@@ -48,8 +42,6 @@ hero: false
48
42
  type-voice:
49
43
  title-tracking: -1
50
44
  display-tracking: -1
51
- latin-case: sentence
52
- figures: tabular
53
45
 
54
46
  density: 10
55
47
  variance: 4
@@ -81,21 +73,16 @@ sections: [section-band, section-rule]
81
73
  closings: [closing-decision-box, closing-ask]
82
74
 
83
75
  table:
84
- style: header-fill
85
76
  header: field
86
77
  header-ink: on-field
87
78
  rules: grid
88
79
  banding: surface
89
- numbers: right-tabular
90
80
  totals: bold
91
81
  chart:
92
82
  gridlines: hairline
93
83
  labels: direct
94
84
  highlight: accent-on-muted
95
- annotation: off
96
85
  image:
97
- bleed: none
98
- crop: none
99
86
  frame: hairline
100
87
 
101
88
  fill-order: [step-up, distribute, change-family, anchor-visual]
@@ -1,5 +1,5 @@
1
- # Ledger: a set of accounts made readable. Small, exact type, numbers in tabular
2
- # figures, tables and KPI rows doing most of the talking; colour marks only "this
1
+ # Ledger: a set of accounts made readable. Small, exact type, right-aligned
2
+ # numbers, tables and KPI rows doing most of the talking; colour marks only "this
3
3
  # period" and the one figure that matters. Wrong for a live pitch with little data
4
4
  # or for a briefing that is read as prose.
5
5
  id: ledger
@@ -15,12 +15,6 @@ faces:
15
15
  body: Pretendard Regular
16
16
  label: Pretendard Regular
17
17
  numeral: Pretendard Bold
18
- faces-pretendard-only:
19
- display: Pretendard Bold
20
- title: Pretendard Bold
21
- body: Pretendard Regular
22
- label: Pretendard Regular
23
- numeral: Pretendard Bold
24
18
  faces-a2z:
25
19
  display: A2Z Bold
26
20
  title: Pretendard Bold
@@ -48,8 +42,6 @@ hero: false
48
42
  type-voice:
49
43
  title-tracking: -1
50
44
  display-tracking: -1
51
- latin-case: sentence
52
- figures: tabular
53
45
 
54
46
  density: 10
55
47
  variance: 5
@@ -81,22 +73,17 @@ sections: [section-rule, section-numeral]
81
73
  closings: [closing-decision-box, closing-ask]
82
74
 
83
75
  table:
84
- style: ledger
85
76
  # The header row is the ledger's one dark mass: deep field, white labels.
86
77
  header: field
87
78
  header-ink: on-field
88
79
  rules: header-and-totals
89
80
  banding: none
90
- numbers: right-tabular
91
81
  totals: bold
92
82
  chart:
93
83
  gridlines: hairline
94
84
  labels: direct
95
85
  highlight: accent-on-muted
96
- annotation: on
97
86
  image:
98
- bleed: side-only
99
- crop: none
100
87
  frame: hairline
101
88
 
102
89
  fill-order: [step-up, distribute, anchor-visual, change-family]
@@ -14,12 +14,6 @@ faces:
14
14
  body: Pretendard Regular
15
15
  label: Pretendard Regular
16
16
  numeral: Pretendard Regular
17
- faces-pretendard-only:
18
- display: Pretendard Bold
19
- title: Pretendard Bold
20
- body: Pretendard Regular
21
- label: Pretendard Regular
22
- numeral: Pretendard Regular
23
17
  faces-a2z:
24
18
  display: Pretendard Bold
25
19
  title: Pretendard Bold
@@ -47,8 +41,6 @@ hero: false
47
41
  type-voice:
48
42
  title-tracking: -1
49
43
  display-tracking: -2
50
- latin-case: sentence
51
- figures: tabular
52
44
 
53
45
  density: 10
54
46
  variance: 6
@@ -80,22 +72,17 @@ sections: [section-numeral, section-field]
80
72
  closings: [closing-statement, closing-decision-box]
81
73
 
82
74
  table:
83
- style: header-fill
84
75
  header: surface
85
76
  header-ink: ink
86
77
  rules: rows
87
78
  banding: none
88
- numbers: right-tabular
89
79
  totals: bold
90
80
  protagonist: accent-tint
91
81
  chart:
92
82
  gridlines: hairline
93
83
  labels: direct
94
84
  highlight: accent-on-muted
95
- annotation: on
96
85
  image:
97
- bleed: side-only
98
- crop: allowed
99
86
  frame: none
100
87
 
101
88
  fill-order: [anchor-visual, step-up, distribute, change-family]
@@ -14,12 +14,6 @@ faces:
14
14
  body: Pretendard Regular
15
15
  label: Pretendard Regular
16
16
  numeral: Pretendard Regular
17
- faces-pretendard-only:
18
- display: Pretendard Bold
19
- title: Pretendard Bold
20
- body: Pretendard Regular
21
- label: Pretendard Regular
22
- numeral: Pretendard Regular
23
17
  faces-a2z:
24
18
  display: Pretendard Bold
25
19
  title: Pretendard Bold
@@ -47,8 +41,6 @@ hero: false
47
41
  type-voice:
48
42
  title-tracking: 0
49
43
  display-tracking: -1
50
- latin-case: sentence
51
- figures: tabular
52
44
 
53
45
  density: 10
54
46
  variance: 5
@@ -86,21 +78,16 @@ sections: [section-rule, section-field]
86
78
  closings: [closing-summary-list, closing-ask]
87
79
 
88
80
  table:
89
- style: booktabs
90
81
  header: none
91
82
  header-ink: ink
92
83
  rules: booktabs
93
84
  banding: none
94
- numbers: right-tabular
95
85
  totals: bold
96
86
  chart:
97
87
  gridlines: hairline
98
88
  labels: direct
99
89
  highlight: series-order
100
- annotation: off
101
90
  image:
102
- bleed: none
103
- crop: none
104
91
  frame: none
105
92
 
106
93
  fill-order: [anchor-visual, distribute, step-up, change-family]
@@ -14,12 +14,6 @@ faces:
14
14
  body: Pretendard Regular
15
15
  label: Pretendard Regular
16
16
  numeral: Pretendard Bold
17
- faces-pretendard-only:
18
- display: Pretendard Bold
19
- title: Pretendard Bold
20
- body: Pretendard Regular
21
- label: Pretendard Regular
22
- numeral: Pretendard Bold
23
17
  faces-a2z:
24
18
  display: A2Z Black
25
19
  title: A2Z Bold
@@ -48,8 +42,6 @@ hero: false
48
42
  type-voice:
49
43
  title-tracking: -1
50
44
  display-tracking: -2
51
- latin-case: sentence
52
- figures: proportional
53
45
 
54
46
  density: 10
55
47
  variance: 6
@@ -81,22 +73,17 @@ sections: [section-field, section-numeral]
81
73
  closings: [closing-statement, closing-ask]
82
74
 
83
75
  table:
84
- style: open
85
76
  header: none
86
77
  header-ink: ink
87
78
  rules: top-bottom
88
79
  banding: none
89
- numbers: right-tabular
90
80
  totals: bold
91
81
  protagonist: accent-tint
92
82
  chart:
93
83
  gridlines: none
94
84
  labels: direct
95
85
  highlight: accent-on-muted
96
- annotation: on
97
86
  image:
98
- bleed: allowed
99
- crop: allowed
100
87
  frame: none
101
88
 
102
89
  fill-order: [step-up, change-family, anchor-visual, distribute]
@@ -14,12 +14,6 @@ faces:
14
14
  body: Pretendard Regular
15
15
  label: Pretendard Regular
16
16
  numeral: Pretendard Bold
17
- faces-pretendard-only:
18
- display: Pretendard Bold
19
- title: Pretendard Bold
20
- body: Pretendard Regular
21
- label: Pretendard Regular
22
- numeral: Pretendard Bold
23
17
  faces-a2z:
24
18
  display: A2Z Black
25
19
  title: A2Z Medium
@@ -47,8 +41,6 @@ hero: false
47
41
  type-voice:
48
42
  title-tracking: -1
49
43
  display-tracking: -2
50
- latin-case: sentence
51
- figures: proportional
52
44
 
53
45
  density: 10
54
46
  variance: 8
@@ -80,21 +72,16 @@ sections: [section-numeral, section-rail]
80
72
  closings: [closing-contact-split, closing-summary-list]
81
73
 
82
74
  table:
83
- style: open
84
75
  header: none
85
76
  header-ink: ink
86
77
  rules: header-rule
87
78
  banding: none
88
- numbers: right-tabular
89
79
  totals: bold
90
80
  chart:
91
81
  gridlines: none
92
82
  labels: direct
93
83
  highlight: accent-on-muted
94
- annotation: on
95
84
  image:
96
- bleed: allowed
97
- crop: allowed
98
85
  frame: none
99
86
 
100
87
  fill-order: [change-family, step-up, anchor-visual, distribute]