@litfamily/litopencode 1.0.16 → 1.0.17
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.
- package/CHANGELOG.md +7 -0
- package/README-Ko-KR.md +11 -11
- package/README.md +11 -11
- package/dist/activation-routing.js +1 -1
- package/dist/features.js +2 -2
- package/dist/skills.js +6 -4
- package/docs/assets/readme/badge-version.svg +1 -1
- package/docs/reference-Ko-KR.md +1 -1
- package/package.json +1 -1
- package/skills/frontend-ui-ux/data/THIRD-PARTY-NOTICE.txt +1 -3
- package/skills/lit-docx/SKILL.md +80 -19
- package/skills/lit-docx/references/components.md +253 -0
- package/skills/lit-docx/references/direction-step.md +234 -0
- package/skills/lit-docx/references/examples/01-report-ko.md +160 -0
- package/skills/lit-docx/references/examples/02-brief-ko.md +58 -0
- package/skills/lit-docx/references/examples/03-manual-ko.md +107 -0
- package/skills/lit-docx/references/examples/04-proposal-ko.md +93 -0
- package/skills/lit-docx/references/examples/05-memo-ko.md +42 -0
- package/skills/lit-docx/references/examples/06-journal-en.md +84 -0
- package/skills/lit-docx/references/examples/07-report-en.md +137 -0
- package/skills/lit-docx/references/examples/08-journal-ko.md +93 -0
- package/skills/lit-docx/references/examples/09-brief-en.md +64 -0
- package/skills/lit-docx/references/page-composition.md +306 -0
- package/skills/lit-docx/references/tonalities/brief.md +104 -0
- package/skills/lit-docx/references/tonalities/journal.md +101 -0
- package/skills/lit-docx/references/tonalities/manual.md +111 -0
- package/skills/lit-docx/references/tonalities/memo.md +105 -0
- package/skills/lit-docx/references/tonalities/proposal.md +101 -0
- package/skills/lit-docx/references/tonalities/report.md +126 -0
- package/skills/lit-docx/run.py +2 -1
- package/skills/lit-docx/scripts/convert_md_to_docx.py +384 -67
- package/skills/lit-docx/scripts/craft_docx.py +204 -1
- package/skills/lit-docx/scripts/docx_design.py +2445 -0
- package/skills/lit-docx/scripts/docx_layout.py +959 -0
- package/skills/lit-docx/scripts/slop_lint.py +23 -6
- package/skills/lit-docx/templates/tonalities/brief.yaml +29 -0
- package/skills/lit-docx/templates/tonalities/journal.yaml +26 -0
- package/skills/lit-docx/templates/tonalities/manual.yaml +27 -0
- package/skills/lit-docx/templates/tonalities/memo.yaml +27 -0
- package/skills/lit-docx/templates/tonalities/proposal.yaml +27 -0
- package/skills/lit-docx/templates/tonalities/report.yaml +27 -0
- package/skills/lit-pptx/NOTICE.md +1 -1
- package/skills/lit-pptx/SKILL.md +108 -19
- package/skills/lit-pptx/pretendard-font/public/static/Pretendard-Bold.otf +0 -0
- package/skills/lit-pptx/pretendard-font/public/static/Pretendard-Regular.otf +0 -0
- package/skills/lit-pptx/references/density-and-fill.md +283 -0
- package/skills/lit-pptx/references/direction-step.md +249 -0
- package/skills/lit-pptx/references/examples/01-ops-review-ledger-ko.md +173 -0
- package/skills/lit-pptx/references/examples/02-launch-pitch-signal-en.md +153 -0
- package/skills/lit-pptx/references/examples/03-field-survey-atlas-ko.md +120 -0
- package/skills/lit-pptx/references/examples/04-lecture-chalk-ko.md +132 -0
- package/skills/lit-pptx/references/examples/05-research-talk-paper-en.md +162 -0
- package/skills/lit-pptx/references/examples/06-policy-briefing-gazette-ko.md +176 -0
- package/skills/lit-pptx/references/examples/07-annual-story-studio-en.md +131 -0
- package/skills/lit-pptx/references/examples/08-reliability-keynote-night-en.md +182 -0
- package/skills/lit-pptx/references/examples/09-status-update-ledger-en.md +147 -0
- package/skills/lit-pptx/references/examples/10-investor-pitch-signal-ko.md +136 -0
- package/skills/lit-pptx/references/examples/11-forecast-review-night-ko.md +177 -0
- package/skills/lit-pptx/references/examples/12-exhibition-proposal-studio-ko.md +149 -0
- package/skills/lit-pptx/references/layout-families.md +470 -0
- package/skills/lit-pptx/references/title-treatments.md +271 -0
- package/skills/lit-pptx/references/tonalities/atlas.md +132 -0
- package/skills/lit-pptx/references/tonalities/chalk.md +132 -0
- package/skills/lit-pptx/references/tonalities/gazette.md +137 -0
- package/skills/lit-pptx/references/tonalities/ledger.md +151 -0
- package/skills/lit-pptx/references/tonalities/night.md +148 -0
- package/skills/lit-pptx/references/tonalities/paper.md +136 -0
- package/skills/lit-pptx/references/tonalities/signal.md +148 -0
- package/skills/lit-pptx/references/tonalities/studio.md +149 -0
- package/skills/lit-pptx/scripts/compile-deck.js +68 -21
- package/skills/lit-pptx/scripts/craft-thresholds.json +45 -1
- package/skills/lit-pptx/scripts/craft_extras.py +37 -8
- package/skills/lit-pptx/scripts/deck_output.py +654 -0
- package/skills/lit-pptx/scripts/embed_fonts.py +2 -2
- package/skills/lit-pptx/scripts/layout_inventory.py +35 -2
- package/skills/lit-pptx/scripts/lib/directive-parser.js +2 -2
- package/skills/lit-pptx/scripts/lib/font-map.js +4 -4
- package/skills/lit-pptx/scripts/lib/grid-resolver.js +521 -0
- package/skills/lit-pptx/scripts/lib/layout-resolver.js +403 -21
- package/skills/lit-pptx/scripts/lib/markdown-loader.js +6 -4
- package/skills/lit-pptx/scripts/lib/render-adapter-html.js +3 -9
- package/skills/lit-pptx/scripts/lib/render-adapter-pptx.js +500 -113
- package/skills/lit-pptx/scripts/lib/render-pack.js +3558 -0
- package/skills/lit-pptx/scripts/lib/slide-ast.js +55 -24
- package/skills/lit-pptx/scripts/lib/spec-validator.js +2 -2
- package/skills/lit-pptx/scripts/lib/template-registry.js +335 -11
- package/skills/lit-pptx/scripts/qa_deck.py +48 -13
- package/skills/lit-pptx/scripts/validate_pptx.py +17 -5
- package/skills/lit-pptx/specs/template-enrollment-contract.md +4 -4
- package/skills/lit-pptx/templates/boilerplate_professional.css +13 -13
- package/skills/lit-pptx/templates/enrolled/AZURE-A2Z/layout-mapping.yaml +1 -1
- package/skills/lit-pptx/templates/enrolled/AZURE-A2Z/template.yaml +5 -2
- package/skills/lit-pptx/templates/enrolled/AZURE-PRO/capabilities.yaml +20 -20
- package/skills/lit-pptx/templates/enrolled/AZURE-PRO/layout-mapping.yaml +1 -11
- package/skills/lit-pptx/templates/enrolled/AZURE-PRO/template.yaml +10 -7
- package/skills/lit-pptx/templates/enrolled/BOILERPLATE-PRETENDARD/capabilities.yaml +17 -17
- package/skills/lit-pptx/templates/enrolled/BOILERPLATE-PRETENDARD/template.yaml +8 -8
- package/skills/lit-pptx/templates/tonalities/atlas/pack.yaml +105 -0
- package/skills/lit-pptx/templates/tonalities/chalk/pack.yaml +110 -0
- package/skills/lit-pptx/templates/tonalities/gazette/pack.yaml +106 -0
- package/skills/lit-pptx/templates/tonalities/ledger/pack.yaml +107 -0
- package/skills/lit-pptx/templates/tonalities/night/pack.yaml +106 -0
- package/skills/lit-pptx/templates/tonalities/paper/pack.yaml +111 -0
- package/skills/lit-pptx/templates/tonalities/signal/pack.yaml +107 -0
- package/skills/lit-pptx/templates/tonalities/studio/pack.yaml +105 -0
- package/skills/lit-typographic-motion/THIRD_PARTY_NOTICES +1 -1
- package/skills/lit-typographic-motion/engine/stage/capture.mjs +2 -2
- package/skills/lit-typographic-motion/engine/treatment.mjs +1 -1
- package/skills/lit-typographic-motion/fonts/pins.json +2 -2
- package/skills/lit-typographic-motion/gate.mjs +1 -1
- package/skills/lit-typographic-motion/references/stage.md +1 -1
- package/skills/lit-typographic-motion/references/style-bibles.md +2 -2
- package/skills/lit-typographic-motion/references/treatment.md +1 -1
- package/skills/lit-typographic-motion/references/type-craft.md +3 -3
- package/skills/managed-skill-manifest.json +288 -44
- package/skills/lit-pptx/pretendard-font/public/static/LitOpenCodeSans-Bold.otf +0 -0
- package/skills/lit-pptx/pretendard-font/public/static/LitOpenCodeSans-Regular.otf +0 -0
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# Manual
|
|
2
|
+
|
|
3
|
+
Pack: `templates/tonalities/manual.yaml` · dials density 9, variance 6 · accent #2E4A66 on the callout
|
|
4
|
+
rules and the sidebar rule.
|
|
5
|
+
|
|
6
|
+
## Purpose
|
|
7
|
+
|
|
8
|
+
A Manual is used, not read through: an operating procedure, a maintenance guide, an onboarding guide, a
|
|
9
|
+
safety procedure, a work instruction. The reader has a task in front of them and looks for the section
|
|
10
|
+
that covers it, follows numbered steps, stops at warnings and checks values in reference tables. Korean
|
|
11
|
+
절차서, 운영 지침, 작업 표준 and 매뉴얼 belong here.
|
|
12
|
+
|
|
13
|
+
## Wrong for
|
|
14
|
+
|
|
15
|
+
- A document reporting what happened rather than what to do: use a Report.
|
|
16
|
+
- A one-page instruction with three steps: use a Memo, with the steps as a numbered list.
|
|
17
|
+
- A policy or decision paper: use a Brief.
|
|
18
|
+
|
|
19
|
+
## Structure
|
|
20
|
+
|
|
21
|
+
| Feature | What the pack sets |
|
|
22
|
+
|---|---|
|
|
23
|
+
| Page 1 | title and subtitle over a document-control block between two hairlines: document (`short_title` or `title`), owner (`author`), organisation (`organization`), issued (`date`); the notice under it |
|
|
24
|
+
| Summary | prose; most manuals open with scope and responsibilities instead of a summary |
|
|
25
|
+
| Numbering | 1 / 1.1 / 1.1.1, so steps and sections can be cited ("see 3.2") |
|
|
26
|
+
| Components | callout (one style for every warning), sidebar, columns |
|
|
27
|
+
| Running head | header: short title; footer: folio right; none on page 1 |
|
|
28
|
+
| Contents | a short list of h1 headings with page numbers, when the source is long enough for about five pages |
|
|
29
|
+
|
|
30
|
+
The control block labels are 문서 / 작성 부서 / 기관 / 시행일 in Korean and Document / Owner /
|
|
31
|
+
Organisation / Issued in English. The block counts as a component kind for the gate's
|
|
32
|
+
`component.variety` check.
|
|
33
|
+
|
|
34
|
+
## Type scale
|
|
35
|
+
|
|
36
|
+
Body 10.5 pt, h1 14 pt, h2 12 pt, h3 10.5 pt bold, title 26.5 pt, table text 9.5 pt; sidebar text at table
|
|
37
|
+
size. Ragged right in both languages, which keeps step text from stretching. Decimal heading numbers sit
|
|
38
|
+
in a hanging indent wide enough for the widest number, so the heading texts of a level start on one line.
|
|
39
|
+
|
|
40
|
+
## Components
|
|
41
|
+
|
|
42
|
+
- **Callout, `kind=warning`.** A hazard, an irreversible step, a forbidden combination. Place it directly
|
|
43
|
+
before the step it protects, not at the end of the section. All warnings share one style; there is no
|
|
44
|
+
separate danger or caution colour. The budget is about one box per four pages, so a short manual gets
|
|
45
|
+
one; the converter keeps warnings ahead of notes when it chooses. Write the most serious one as the box
|
|
46
|
+
and fold the others into the step text.
|
|
47
|
+
- **Sidebar.** Definitions, contact numbers or reference values the reader looks up while following the
|
|
48
|
+
text. Floats right at a third of the width by default. Needs two or three paragraphs after it before
|
|
49
|
+
the next heading, or it stands full width.
|
|
50
|
+
- **Columns.** Two balanced blocks, such as the same check on two machine types.
|
|
51
|
+
|
|
52
|
+
## Writing the source
|
|
53
|
+
|
|
54
|
+
- Do not use a `::: cover` directive unless you want a kicker line above the title; the control block
|
|
55
|
+
comes from the frontmatter.
|
|
56
|
+
- Open with scope and responsibilities: what the manual covers, what it does not, who does what.
|
|
57
|
+
- Write each procedure as a Markdown numbered list (`1.`, `2.`, …), one action per step, in the
|
|
58
|
+
imperative. Each new list restarts at 1.
|
|
59
|
+
- Put conditions and values in tables (inspection items with their limits and the action when a limit is
|
|
60
|
+
missed).
|
|
61
|
+
- Keep warnings short: what not to do, what happens if you do, what to do instead.
|
|
62
|
+
- End with the emergency or exception procedure, also as numbered steps.
|
|
63
|
+
|
|
64
|
+
## Source fragment
|
|
65
|
+
|
|
66
|
+
```markdown
|
|
67
|
+
---
|
|
68
|
+
title: Walk-in freezer daily check procedure
|
|
69
|
+
subtitle: Opening checks, temperature logging and alarm response for kitchen staff
|
|
70
|
+
author: Facilities Team
|
|
71
|
+
organization: Example catering site
|
|
72
|
+
date: 2026-11-20
|
|
73
|
+
short_title: Freezer daily checks
|
|
74
|
+
notice: Sample procedure. Equipment, limits and contacts are invented examples.
|
|
75
|
+
tonality: Manual
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
# Opening checks
|
|
79
|
+
|
|
80
|
+
Complete these checks before the first delivery is put away. They take about five minutes.
|
|
81
|
+
|
|
82
|
+
1. Read the display temperature and write it in the log with the time.
|
|
83
|
+
2. Check that the door closes fully and the seal shows no ice build-up.
|
|
84
|
+
3. Check the floor for water near the evaporator drain.
|
|
85
|
+
|
|
86
|
+
::: callout kind=warning title="Door left open"
|
|
87
|
+
Do not prop the door open during deliveries. The evaporator ices over within twenty minutes and the
|
|
88
|
+
freezer may take two hours to recover. Close the door between trolley loads.
|
|
89
|
+
:::
|
|
90
|
+
|
|
91
|
+
## Temperature limits
|
|
92
|
+
|
|
93
|
+
Table 1. Freezer temperature limits
|
|
94
|
+
|
|
95
|
+
| Reading | Status | Action |
|
|
96
|
+
|---|---|---|
|
|
97
|
+
| -18 °C or colder | Normal | Log and continue |
|
|
98
|
+
| -17 to -15 °C | Warning | Recheck in 30 minutes |
|
|
99
|
+
| Warmer than -15 °C | Alarm | Follow section 3 |
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
The h1 prints as `1 Opening checks` and the h2 as `1.1 Temperature limits`; the control block on page 1
|
|
103
|
+
lists Freezer daily checks, Facilities Team, Example catering site and 20 November 2026.
|
|
104
|
+
|
|
105
|
+
## Before delivery
|
|
106
|
+
|
|
107
|
+
- Every step is one action and starts with a verb.
|
|
108
|
+
- Every warning stands before the step it protects.
|
|
109
|
+
- Cross-references use the printed section numbers, which the converter assigns in order; check them
|
|
110
|
+
after any section is added or removed.
|
|
111
|
+
- Reference tables give a value, a status and an action in every row.
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# Memo
|
|
2
|
+
|
|
3
|
+
Pack: `templates/tonalities/memo.yaml` · dials density 9, variance 2 · no accent.
|
|
4
|
+
|
|
5
|
+
## Purpose
|
|
6
|
+
|
|
7
|
+
A Memo tells a group of people something they need to know or do, in one or two pages: a notice of works
|
|
8
|
+
or a schedule change, an internal memo, a request for cooperation, a short letter, a decision already
|
|
9
|
+
taken and now announced. Korean 안내문, 공지, 협조 요청 and 업무 연락 fit here. The reader wants the
|
|
10
|
+
subject, what changes, what they must do and whom to ask, and stops reading there.
|
|
11
|
+
|
|
12
|
+
## Wrong for
|
|
13
|
+
|
|
14
|
+
- A request that someone approve something: use a Brief, which puts the decision box first.
|
|
15
|
+
- More than two pages, or more than two tables: use a Report or a Manual.
|
|
16
|
+
- A procedure with warnings: use a Manual.
|
|
17
|
+
|
|
18
|
+
## Structure
|
|
19
|
+
|
|
20
|
+
| Feature | What the pack sets |
|
|
21
|
+
|---|---|
|
|
22
|
+
| Page 1 | no cover and no masthead: a small label (the kicker, default 메모 / Memo), the subject as the title at 1.8 times the body size, then rows of To / From / Date / Subject between two hairlines, then the notice |
|
|
23
|
+
| Summary | none; the first section says what happens |
|
|
24
|
+
| Numbering | none |
|
|
25
|
+
| Components | none; a callout or other directive is set as its bold title and plain text |
|
|
26
|
+
| Running head | footer: folio right, from page 2 |
|
|
27
|
+
| Contents | never |
|
|
28
|
+
|
|
29
|
+
The rows come from the lines of the `::: cover` body that start with `To:`, `From:`, `Date:`, `Subject:`,
|
|
30
|
+
`Cc:` or the Korean `받는 사람:`, `보내는 사람:`, `날짜:`, `제목:`, `참조:`. Several pairs may share a line
|
|
31
|
+
when separated by ` · `. When no date row is written, the frontmatter date is inserted after the sender,
|
|
32
|
+
formatted for the language (2026. 10. 12. or 12 October 2026). English values are capitalised. The block
|
|
33
|
+
counts as a component kind for the gate.
|
|
34
|
+
|
|
35
|
+
## Type scale
|
|
36
|
+
|
|
37
|
+
Korean body 10.5 pt, h1 12.5 pt, h2 11.5 pt, title 19 pt. English body 11 pt, h1 13 pt, h2 12 pt, title
|
|
38
|
+
20 pt. The smallest heading steps of any pack: in a memo the headings are signposts, not chapters.
|
|
39
|
+
Korean justified.
|
|
40
|
+
|
|
41
|
+
The pack sets `spacing: tight`, so a memo whose content allows stays on one page: line pitch at the low
|
|
42
|
+
end (Hangul 165 %, Latin 120 %), heading space of 12/5, 10/4, 9/3 and 8/3 pt before and after, table cells
|
|
43
|
+
2 pt top and bottom. A run-in head (a callout's bold title) keeps 12 pt above it, so it starts a block, and
|
|
44
|
+
a paragraph after a list stands 6 pt clear of the list's last item.
|
|
45
|
+
|
|
46
|
+
## Components
|
|
47
|
+
|
|
48
|
+
None. The memo's single structural device is its header block. A point that seems to need a box is
|
|
49
|
+
better written as the first sentence of its section. If the source holds a callout anyway, the converter
|
|
50
|
+
prints its title as a bold line and the body as plain paragraphs.
|
|
51
|
+
|
|
52
|
+
## Writing the source
|
|
53
|
+
|
|
54
|
+
- Put the To / From lines in the cover directive and give it a kicker that names the kind of memo (안내,
|
|
55
|
+
공지, 협조 요청, Notice, Request).
|
|
56
|
+
- The title is the subject line: what, where, when ("본관 승강기 교체 공사 기간 이용 안내", "Car park
|
|
57
|
+
closure, 3 to 7 November").
|
|
58
|
+
- Three to five short sections: what changes, what readers should do, any exceptions, whom to contact.
|
|
59
|
+
- One small table at most, for a schedule or a before-and-after comparison, with a caption.
|
|
60
|
+
- Polite address (합니다체) is normal in a Korean notice addressed to staff; keep it consistent through the
|
|
61
|
+
memo.
|
|
62
|
+
- Give a named contact with an extension or address in the last section.
|
|
63
|
+
|
|
64
|
+
## Source fragment
|
|
65
|
+
|
|
66
|
+
```markdown
|
|
67
|
+
---
|
|
68
|
+
title: Car park closure for resurfacing, 3 to 7 November
|
|
69
|
+
author: Estates Office
|
|
70
|
+
organization: Example college
|
|
71
|
+
date: 2026-10-21
|
|
72
|
+
notice: Sample memo. Names, dates and locations are invented examples.
|
|
73
|
+
tonality: Memo
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
::: cover kicker="Notice"
|
|
77
|
+
To: All staff and students · From: Estates Office · Cc: Security desk
|
|
78
|
+
:::
|
|
79
|
+
|
|
80
|
+
# Closed area and dates
|
|
81
|
+
|
|
82
|
+
The main car park on Mill Lane will be closed from 07:00 on Monday 3 November until 18:00 on Friday
|
|
83
|
+
7 November while the surface is replaced. Blue-badge bays by the library entrance stay open.
|
|
84
|
+
|
|
85
|
+
# Where to park instead
|
|
86
|
+
|
|
87
|
+
Staff permits are valid at the Riverside overflow car park for the week. A shuttle minibus runs from
|
|
88
|
+
Riverside to the main entrance every fifteen minutes between 07:30 and 09:30 and between 16:00 and 18:30.
|
|
89
|
+
|
|
90
|
+
# Questions
|
|
91
|
+
|
|
92
|
+
Contact the Estates Office on extension 2210 or at estates@example.org.
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
The header block reads To, From, Date (21 October 2026, inserted after From) and Cc, with "Notice" above
|
|
96
|
+
the title.
|
|
97
|
+
|
|
98
|
+
## Before delivery
|
|
99
|
+
|
|
100
|
+
- The rendered memo is two pages or fewer; page 1 carries no folio. A memo that runs onto a second page
|
|
101
|
+
and fills less than a quarter of it fails `memo.fit` (`qa --layout`): tighten the prose by the lines
|
|
102
|
+
that spill; a memo that needs a real second page keeps it.
|
|
103
|
+
- The subject, the date of the change and the action required are on page 1.
|
|
104
|
+
- No component box appears; the qa output shows only the memo block.
|
|
105
|
+
- Contact details are real for the organisation or clearly marked as examples by the notice.
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# Proposal
|
|
2
|
+
|
|
3
|
+
Pack: `templates/tonalities/proposal.yaml` · dials density 8, variance 6 · accent #6E2639 on the cover
|
|
4
|
+
rule and the callout rules.
|
|
5
|
+
|
|
6
|
+
## Purpose
|
|
7
|
+
|
|
8
|
+
A Proposal asks for approval and money for something that does not exist yet: an investment, a pilot, a
|
|
9
|
+
new service, a funding application, a project plan. Its reader is a decision maker or a panel who wants to
|
|
10
|
+
know what will be done, what it costs, when it happens, what it returns and what could go wrong. Korean
|
|
11
|
+
제안서, 기획서, 사업 계획서 and 투자 품의 fit here.
|
|
12
|
+
|
|
13
|
+
## Wrong for
|
|
14
|
+
|
|
15
|
+
- Reporting results of something already running: use a Report.
|
|
16
|
+
- A decision on an existing arrangement, such as a rule change, that fits on two pages: use a Brief.
|
|
17
|
+
- A proposal of one page with no budget table: use a Memo or a Brief.
|
|
18
|
+
|
|
19
|
+
## Structure
|
|
20
|
+
|
|
21
|
+
| Feature | What the pack sets |
|
|
22
|
+
|---|---|
|
|
23
|
+
| Page 1 | a typographic cover page: kicker, the title left-aligned in the upper third, one short rule in the accent, the subtitle and the lead; byline, date and notice at the foot; no picture, no colour block |
|
|
24
|
+
| Summary | prose under the first h1, with one key-figure strip after its first paragraph |
|
|
25
|
+
| Numbering | none |
|
|
26
|
+
| Components | keyfigures, callout (one box), columns |
|
|
27
|
+
| Running head | footer: folio centred; the cover has none and the folio starts at 1 on the first body page |
|
|
28
|
+
| Contents | never |
|
|
29
|
+
|
|
30
|
+
The cover is its own section. The title is broken between words in at most three lines over ten of
|
|
31
|
+
twelve grid columns; the rule under it is 36 mm long and 1 pt thick.
|
|
32
|
+
|
|
33
|
+
## Type scale
|
|
34
|
+
|
|
35
|
+
Korean body 10.5 pt, h1 14.5 pt, h2 12.5 pt, title 28.5 pt. English body 11 pt, h1 15.5 pt, h2 13 pt,
|
|
36
|
+
title 29.5 pt. Figures may take up to 60 % of the frame height, the most of any pack, because proposals
|
|
37
|
+
often carry a site plan or a schematic. Korean justified.
|
|
38
|
+
|
|
39
|
+
## Components
|
|
40
|
+
|
|
41
|
+
- **Key figures.** One strip in the summary with the three numbers a decision maker weighs: output or
|
|
42
|
+
benefit, annual saving or revenue, payback or cost per unit. Each basis line states the assumption
|
|
43
|
+
behind the number. Never on the cover: a strip placed inside the cover directive is moved to the
|
|
44
|
+
summary.
|
|
45
|
+
- **Callout.** One `kind=key` box with the decision request, normally at the end. The pack caps callouts
|
|
46
|
+
at one.
|
|
47
|
+
- **Columns.** Two balanced option blocks, when the proposal compares a recommended option with an
|
|
48
|
+
alternative.
|
|
49
|
+
|
|
50
|
+
## Writing the source
|
|
51
|
+
|
|
52
|
+
- Start with a `::: cover kicker="…"` directive whose body is one or two sentences saying what is
|
|
53
|
+
proposed. That lead is the only text on the cover besides the title block.
|
|
54
|
+
- First h1: the summary. One paragraph on what is proposed and its scale, the strip, one paragraph on cost
|
|
55
|
+
and timing.
|
|
56
|
+
- Then background (why now), what will be built or done, budget, schedule, benefits and risks, and the
|
|
57
|
+
decision request.
|
|
58
|
+
- The budget table lists items with amounts in the header unit, a share column and a total row. The
|
|
59
|
+
schedule table lists stages with dates written the reader's way (`2026년 11월`, `November 2026`).
|
|
60
|
+
- State each risk with its effect on the numbers in the strip ("payback rises to 6.7 years").
|
|
61
|
+
|
|
62
|
+
## Source fragment
|
|
63
|
+
|
|
64
|
+
```markdown
|
|
65
|
+
---
|
|
66
|
+
title: 본사 구내 어린이집 정원 확대 제안
|
|
67
|
+
subtitle: 정원 49명에서 79명으로, 2027년 9월 개원
|
|
68
|
+
author: 예시 은행 인사부
|
|
69
|
+
organization: 예시 은행(가상 기업)
|
|
70
|
+
date: 2026-12-01
|
|
71
|
+
notice: 예시 데이터. 회사, 정원, 금액은 모두 가정이다.
|
|
72
|
+
tonality: Proposal
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
::: cover kicker="복리후생 사업 제안"
|
|
76
|
+
본사 별관 1층을 리모델링해 직장 어린이집 정원을 30명 늘리는 계획이다.
|
|
77
|
+
:::
|
|
78
|
+
|
|
79
|
+
# 요약
|
|
80
|
+
|
|
81
|
+
별관 1층 사무 공간 410m²를 보육실 4개와 놀이실로 바꿔 정원을 49명에서 79명으로 늘리자고 제안한다.
|
|
82
|
+
현재 대기 아동은 61명이다.
|
|
83
|
+
|
|
84
|
+
::: keyfigures
|
|
85
|
+
- **30명** 정원 증가
|
|
86
|
+
- 만 1~4세, 보육실 4개 기준
|
|
87
|
+
- **6억 8,000만 원** 리모델링·설비 비용
|
|
88
|
+
- 업체 견적 3건의 중간값
|
|
89
|
+
- **49%** 대기 아동 해소율
|
|
90
|
+
- 대기 61명 중 30명
|
|
91
|
+
:::
|
|
92
|
+
|
|
93
|
+
공사는 2027년 3월부터 5개월 동안 진행하고 9월에 새 반을 연다.
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Before delivery
|
|
97
|
+
|
|
98
|
+
- The cover holds the kicker, title, rule, subtitle, one lead sentence and the foot lines, nothing else.
|
|
99
|
+
- The strip's numbers appear again in the budget table or the text, identical.
|
|
100
|
+
- The decision callout states the amount, the budget line and the first step after approval.
|
|
101
|
+
- The budget table's shares add to 100.0 and its rows add to the total.
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# Report
|
|
2
|
+
|
|
3
|
+
Pack: `templates/tonalities/report.yaml` · dials density 9, variance 5 · accent #1F3A5F on the title rule
|
|
4
|
+
and callout rules.
|
|
5
|
+
|
|
6
|
+
## Purpose
|
|
7
|
+
|
|
8
|
+
A Report carries results and the evidence for them: a periodic operating report, a project close-out, an
|
|
9
|
+
analysis of a programme, a quarterly review. It runs from about four to thirty pages, its readers are
|
|
10
|
+
managers who read the summary closely and the rest selectively, and its tables do most of the arguing.
|
|
11
|
+
|
|
12
|
+
The Korean default follows the manner of a research institute's issue paper: continuous prose in the
|
|
13
|
+
plain declarative style (-다), sections numbered Ⅰ. / 1. / 가., tables with `<표 n>` captions, unit lines
|
|
14
|
+
and source lines. The government 개조식 style (□ ○ - lines ending in -함, -임) is a variant the user must
|
|
15
|
+
ask for; it is not the default.
|
|
16
|
+
|
|
17
|
+
## Wrong for
|
|
18
|
+
|
|
19
|
+
- A document that asks for one decision and has fewer than three supporting tables: that is a Brief.
|
|
20
|
+
- A procedure the reader follows step by step: that is a Manual.
|
|
21
|
+
- A request for money or approval of a new project with a budget and schedule: that is a Proposal.
|
|
22
|
+
- One or two pages of notice: that is a Memo.
|
|
23
|
+
- A long argument with few tables, written to be read through: that is a Journal.
|
|
24
|
+
|
|
25
|
+
## Structure
|
|
26
|
+
|
|
27
|
+
| Feature | What the pack sets |
|
|
28
|
+
|---|---|
|
|
29
|
+
| Page 1 | masthead title block: series line (kicker left, date right), title, subtitle, byline, one rule in the accent, the notice |
|
|
30
|
+
| Summary | prose under the first h1, with an optional key-figure strip after its first paragraph |
|
|
31
|
+
| Numbering | Korean Ⅰ. / 1. / 가.; English 1 / 1.1 / 1.1.1 |
|
|
32
|
+
| Components | keyfigures, callout, columns (three kinds at most, as always) |
|
|
33
|
+
| Running head | footer: short title left, folio right; none on page 1 |
|
|
34
|
+
| Contents | a short list of h1 headings with page numbers after the title block, when the source is long enough for about five pages |
|
|
35
|
+
|
|
36
|
+
The contents list is generated from the h1 headings; do not write one in the source. The page estimate is
|
|
37
|
+
about 1,500 Korean or 3,300 English characters per page, plus a line for every table row.
|
|
38
|
+
|
|
39
|
+
## Type scale
|
|
40
|
+
|
|
41
|
+
Body 10.5 pt Pretendard, h1 14.5 pt, h2 12.5 pt, h3 10.5 pt bold, title 26.5 pt, table text 9.5 pt,
|
|
42
|
+
note lines 9 pt. Korean body justified, English ragged right. Line pitch 175 % (Korean) and 133 %
|
|
43
|
+
(English) at density 9.
|
|
44
|
+
|
|
45
|
+
## Components
|
|
46
|
+
|
|
47
|
+
- **Key figures.** One strip in the summary with three or four results of the period, each with a basis
|
|
48
|
+
line. Good: trips carried, availability against target, cost per trip. Poor: the number of sites, the
|
|
49
|
+
project start date.
|
|
50
|
+
- **Callout.** Usually one `kind=key` box for the decision the report asks for, at the end. A report long
|
|
51
|
+
enough for a second callout (about eight pages) may add one `kind=warning` for a risk that needs action
|
|
52
|
+
before the next report.
|
|
53
|
+
- **Columns.** Rarely needed. Use for two parallel blocks of similar length, such as two sites or two
|
|
54
|
+
options, inside a section.
|
|
55
|
+
|
|
56
|
+
A Report of four pages or more needs two component kinds to pass `component.variety`, because the
|
|
57
|
+
masthead does not count as one. Key figures in the summary and a decision callout are the usual pair.
|
|
58
|
+
|
|
59
|
+
## Writing the source
|
|
60
|
+
|
|
61
|
+
- Open with a `::: cover kicker="…"` directive when the report belongs to a series ("운영 보고 2026-4호",
|
|
62
|
+
"Half-year operating report"); leave it out otherwise.
|
|
63
|
+
- Make the first h1 the summary (요약 / Summary). Its first paragraph states the main result with its
|
|
64
|
+
number; the strip follows; the next paragraphs give the main problem and what is proposed.
|
|
65
|
+
- Give every following h1 an opening paragraph before its first h2.
|
|
66
|
+
- Put the evidence in tables with captions, a unit line where the header allows it, and `주:` / `자료:`
|
|
67
|
+
lines. Discuss each table in the text: the sentence before it says what to look for, the sentence after
|
|
68
|
+
it says what follows from it.
|
|
69
|
+
- End with the plan or decision section; a closing `kind=key` callout states exactly what is asked.
|
|
70
|
+
- Set `short_title:` for the footer.
|
|
71
|
+
|
|
72
|
+
## Source fragment
|
|
73
|
+
|
|
74
|
+
```markdown
|
|
75
|
+
---
|
|
76
|
+
title: 2026년 상반기 고객 상담 센터 운영 실적
|
|
77
|
+
subtitle: 응답 시간, 상담 건수, 인력 운영
|
|
78
|
+
author: 예시 서비스 고객지원팀
|
|
79
|
+
organization: 예시 서비스(가상 기업)
|
|
80
|
+
date: 2026-07-10
|
|
81
|
+
short_title: 상반기 상담 센터 실적
|
|
82
|
+
notice: 예시 데이터. 회사와 수치는 모두 가정이다.
|
|
83
|
+
tonality: Report
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
::: cover kicker="반기 운영 보고"
|
|
87
|
+
:::
|
|
88
|
+
|
|
89
|
+
# 요약
|
|
90
|
+
|
|
91
|
+
상반기 상담 건수는 18만 4,200건으로 작년 같은 기간보다 9% 늘었다. 평균 응답 시간은 2분 40초로
|
|
92
|
+
목표 3분 안에 들었지만, 3월 요금 개편 직후 두 주 동안은 6분을 넘었다.
|
|
93
|
+
|
|
94
|
+
::: keyfigures
|
|
95
|
+
- **18만 4,200건** 상반기 상담 건수
|
|
96
|
+
- 2026. 1.~6., 전화·채팅 합계
|
|
97
|
+
- **2분 40초** 평균 응답 시간
|
|
98
|
+
- 목표 3분, 상담 시스템 기록
|
|
99
|
+
- **87%** 1회 해결률
|
|
100
|
+
- 재문의 7일 기준
|
|
101
|
+
:::
|
|
102
|
+
|
|
103
|
+
# 상담 건수
|
|
104
|
+
|
|
105
|
+
상담 건수는 요금 개편이 있었던 3월에 가장 많았다.
|
|
106
|
+
|
|
107
|
+
표 1. 1분기 월별 상담 건수
|
|
108
|
+
|
|
109
|
+
| 구분 | 1월 (건) | 2월 (건) | 3월 (건) |
|
|
110
|
+
|---|---:|---:|---:|
|
|
111
|
+
| 전화 | 18,400 | 17,900 | 26,100 |
|
|
112
|
+
| 채팅 | 9,800 | 10,200 | 14,600 |
|
|
113
|
+
|
|
114
|
+
자료: 상담 시스템 월간 집계(예시)
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
The three header cells after the first end in the same unit, so the converter writes `(단위: 건)` above
|
|
118
|
+
the table and the headers read 1월, 2월, 3월. The h1 headings print as Ⅰ. 요약 and Ⅱ. 상담 건수.
|
|
119
|
+
|
|
120
|
+
## Before delivery
|
|
121
|
+
|
|
122
|
+
- Every number in the summary and the strip matches the table that carries the same quantity, with the
|
|
123
|
+
same rounding.
|
|
124
|
+
- Headings are noun phrases; no heading ends in -다 or -음.
|
|
125
|
+
- No ISO date outside the frontmatter `date:`.
|
|
126
|
+
- The qa run passes; with `--layout`, no page under 0.35 fill, no stranded heading, no split table.
|
package/skills/lit-docx/run.py
CHANGED
|
@@ -20,6 +20,7 @@ COMMANDS = {
|
|
|
20
20
|
"pdf-to-md": "convert_pdf.py",
|
|
21
21
|
"edit": "edit_docx.py",
|
|
22
22
|
"lint": "slop_lint.py",
|
|
23
|
+
"qa": "craft_docx.py",
|
|
23
24
|
"audit": "visual_audit.py",
|
|
24
25
|
"clean-md": "clean_markdown.py",
|
|
25
26
|
"embed-images": "embed_images.py",
|
|
@@ -48,7 +49,7 @@ def prepare():
|
|
|
48
49
|
|
|
49
50
|
def main():
|
|
50
51
|
if len(sys.argv) < 2:
|
|
51
|
-
raise SystemExit("Usage: python3 run.py <md-to-docx|md-to-pdf|pdf-to-md|edit|lint|audit|clean-md|embed-images|templates|doctor> [arguments]")
|
|
52
|
+
raise SystemExit("Usage: python3 run.py <md-to-docx|md-to-pdf|pdf-to-md|edit|lint|qa|audit|clean-md|embed-images|templates|doctor> [arguments]")
|
|
52
53
|
command, *args = sys.argv[1:]
|
|
53
54
|
if command == "doctor":
|
|
54
55
|
print(json.dumps({"pythonReady": ready()}))
|