@panaversity/ksor 0.0.55 → 0.0.57
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 +208 -0
- package/README.md +9 -1
- package/package.json +1 -1
- package/templates/scaffold/.agents/skills/add-sources/SKILL.md +129 -84
- package/templates/scaffold/.agents/skills/add-sources/verify.mjs +45 -0
- package/templates/scaffold/.agents/skills/format-checker/SKILL.md +18 -46
- package/templates/scaffold/.agents/skills/intake-interview/SKILL.md +16 -8
- package/templates/scaffold/.claude/skills/add-sources/SKILL.md +129 -84
- package/templates/scaffold/.claude/skills/add-sources/verify.mjs +45 -0
- package/templates/scaffold/.claude/skills/format-checker/SKILL.md +18 -46
- package/templates/scaffold/.claude/skills/intake-interview/SKILL.md +16 -8
- package/templates/scaffold/AGENTS.md +12 -9
- package/templates/scaffold/README.md +22 -9
- package/templates/scaffold/.agents/skills/make-slides/SKILL.md +0 -162
- package/templates/scaffold/.agents/skills/make-summary/SKILL.md +0 -153
- package/templates/scaffold/.claude/skills/make-slides/SKILL.md +0 -162
- package/templates/scaffold/.claude/skills/make-summary/SKILL.md +0 -153
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: make-slides
|
|
3
|
-
description: Generate a presentation from one document and attach it, so it renders on that document's page. Use when the owner says "make slides for X", "turn this into a deck", "I need to present this", asks for a teaching aid or a slideshow, or when onboarding needs a session rather than a page.
|
|
4
|
-
metadata:
|
|
5
|
-
version: "2.0.0"
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Generating a presentation for a document
|
|
9
|
-
|
|
10
|
-
You write the slides. Not an outline for somebody else to build — the actual
|
|
11
|
-
deck, into `<doc>.slides.yaml`, which the site renders on that document's page.
|
|
12
|
-
No browser, no third-party tool, no step where a human takes over.
|
|
13
|
-
|
|
14
|
-
Run it end to end: read the document, write the deck, check every line back
|
|
15
|
-
against the document, verify it builds. **The check is not optional** — it is
|
|
16
|
-
the step that keeps the record's guarantee true.
|
|
17
|
-
|
|
18
|
-
## The one rule everything else serves
|
|
19
|
-
|
|
20
|
-
**A slide may only say what the document says.**
|
|
21
|
-
|
|
22
|
-
The deck is a way of presenting the record, never a second source. A slide
|
|
23
|
-
asserting a threshold the document does not contain is a claim nothing governs
|
|
24
|
-
and no agent can cite — and because the deck is an attachment, the record now
|
|
25
|
-
stands behind it. Every number, date, name and rule is copied from the
|
|
26
|
-
document exactly, units included.
|
|
27
|
-
|
|
28
|
-
If the document does not say something you want on a slide, there are two
|
|
29
|
-
honest options: leave it out, or tell the owner the document is missing it.
|
|
30
|
-
Never a third.
|
|
31
|
-
|
|
32
|
-
## 1 · Read the document whole, first
|
|
33
|
-
|
|
34
|
-
Read `<doc>.md` completely before writing anything. Note as you go:
|
|
35
|
-
|
|
36
|
-
- **the decision it settles** — the reason it exists
|
|
37
|
-
- **the rule, in its own words** — usually one or two sentences
|
|
38
|
-
- **the numbers** — thresholds, deadlines, limits, and their units
|
|
39
|
-
- **the cases** — what happens in each situation it names
|
|
40
|
-
- **the boundary** — what it explicitly does NOT cover
|
|
41
|
-
- **its governance** — `status`, `ksor.owner` and `ksor.effective_from` from
|
|
42
|
-
the frontmatter
|
|
43
|
-
|
|
44
|
-
If the document carries `<doc>.summary.md`, read that too: it is a reviewed
|
|
45
|
-
compression of the same thing, and it tells you what the author thought was
|
|
46
|
-
load-bearing.
|
|
47
|
-
|
|
48
|
-
## 2 · Write the deck
|
|
49
|
-
|
|
50
|
-
Write `<doc>.slides.yaml` beside the document:
|
|
51
|
-
|
|
52
|
-
```yaml
|
|
53
|
-
slides:
|
|
54
|
-
title: Expense approvals
|
|
55
|
-
description: The 15-minute version, for a room.
|
|
56
|
-
deck:
|
|
57
|
-
- heading: What this settles
|
|
58
|
-
lead: One sentence, in the document's own words.
|
|
59
|
-
note: What to say here. Spoken, never shown.
|
|
60
|
-
|
|
61
|
-
- heading: The rule
|
|
62
|
-
bullets:
|
|
63
|
-
- Two approvers above the threshold, always
|
|
64
|
-
- The threshold is per invoice, including tax
|
|
65
|
-
note: Pause here. This is the slide people remember wrong.
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
**Per slide:**
|
|
69
|
-
|
|
70
|
-
| Field | Use |
|
|
71
|
-
| --------- | ------------------------------------------------------------ |
|
|
72
|
-
| `heading` | required — a statement, not a label. "The rule", not "Rules" |
|
|
73
|
-
| `lead` | one sentence, for a slide making a single point |
|
|
74
|
-
| `bullets` | three to five. Six is the cap, and six is already too many |
|
|
75
|
-
| `note` | what the presenter SAYS — never a repeat of the slide |
|
|
76
|
-
|
|
77
|
-
**Per deck** — 8 to 14 slides for an ordinary policy document:
|
|
78
|
-
|
|
79
|
-
1. What this settles, and for whom
|
|
80
|
-
2. Why it exists — the decision behind it
|
|
81
|
-
3. The rule itself, stated once
|
|
82
|
-
4. One slide per case, with the real numbers
|
|
83
|
-
5. What people get wrong, and what is true instead
|
|
84
|
-
6. The boundary — what this document does not cover
|
|
85
|
-
7. Where to find it: the route, the owner, the effective date
|
|
86
|
-
|
|
87
|
-
**Habits that decide whether it is any good:**
|
|
88
|
-
|
|
89
|
-
- **A heading is a claim.** "Recency is not authority" teaches; "Authority"
|
|
90
|
-
does not.
|
|
91
|
-
- **A bullet is one thought.** If it needs a comma splice, it is two bullets.
|
|
92
|
-
- **The note carries the argument.** The slide holds the shape; the presenter
|
|
93
|
-
holds the reasoning. A note repeating the bullets is a wasted field.
|
|
94
|
-
- **Do not pad to a target.** Five slides of substance beat twelve with three
|
|
95
|
-
that exist to reach twelve.
|
|
96
|
-
|
|
97
|
-
## 3 · Check every line against the document
|
|
98
|
-
|
|
99
|
-
Go back through slide by slide with the document open. For each:
|
|
100
|
-
|
|
101
|
-
- Is every claim in the document? Name where.
|
|
102
|
-
- Is every number identical, same units, same rounding?
|
|
103
|
-
- Does any slide imply a rule the document does not state?
|
|
104
|
-
- Does the boundary slide match what the document actually excludes?
|
|
105
|
-
|
|
106
|
-
This pass finds real errors, reliably. A transcription slip in a deck outlives
|
|
107
|
-
the session it was made for, because the next presenter trusts it.
|
|
108
|
-
|
|
109
|
-
## 4 · Verify it
|
|
110
|
-
|
|
111
|
-
```sh
|
|
112
|
-
pnpm check # refuses an orphan deck
|
|
113
|
-
pnpm dev # look at the page — the deck renders after the introduction,
|
|
114
|
-
# immediately before the first `##` section
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
`pnpm build` refuses — the deck's own shape is checked in the site build, not
|
|
118
|
-
by `pnpm check`:
|
|
119
|
-
|
|
120
|
-
- `ksor-slides-empty` — neither `deck:` nor `slides.url:`; nothing to show
|
|
121
|
-
- `ksor-slides-two-sources` — both, so nothing says which one governs
|
|
122
|
-
- `ksor-attachment-orphan` — no `<doc>.md` beside it
|
|
123
|
-
|
|
124
|
-
## 5 · Tell the owner what you did
|
|
125
|
-
|
|
126
|
-
Which document, how many slides, and **anything you left out because the
|
|
127
|
-
document did not support it**. That last part is the useful half: it is how an
|
|
128
|
-
owner finds out their document has a gap.
|
|
129
|
-
|
|
130
|
-
## Embedding a deck made elsewhere
|
|
131
|
-
|
|
132
|
-
If the owner already has a deck in Google Slides, Canva or SlideShare, use the
|
|
133
|
-
linked mode — `slides.url:` and no `deck:`:
|
|
134
|
-
|
|
135
|
-
```yaml
|
|
136
|
-
slides:
|
|
137
|
-
title: Expense approvals
|
|
138
|
-
url: https://docs.google.com/presentation/d/<id>/edit?usp=sharing
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
The embed url is derived for those three providers; for anything else add
|
|
142
|
-
`embed:` explicitly or it renders as a link. `url` must be https — a browser
|
|
143
|
-
blocks a mixed-content frame silently, so an http one publishes a panel that
|
|
144
|
-
never loads.
|
|
145
|
-
|
|
146
|
-
**Prefer the record-owned deck.** A linked deck is not reviewed in a pull
|
|
147
|
-
request, not versioned with its document, not withdrawn when the document is,
|
|
148
|
-
and can rot to a dead link with nothing going red. Use the link when the deck
|
|
149
|
-
already exists and somebody else maintains it — not as the default.
|
|
150
|
-
|
|
151
|
-
## What NOT to do
|
|
152
|
-
|
|
153
|
-
- **Do not put the deck in the document.** No `<iframe>`, no raw HTML.
|
|
154
|
-
`knowledge/` is CommonMark and must read cleanly in any markdown viewer.
|
|
155
|
-
- **Do not write a slide the document cannot support**, even a true one. If it
|
|
156
|
-
is not in the record, the record cannot stand behind it.
|
|
157
|
-
- **Do not make one deck for several documents.** A deck belongs to one
|
|
158
|
-
document, the way a summary does. A deck spanning five policies has no
|
|
159
|
-
document to be governed by and nothing to be withdrawn with.
|
|
160
|
-
- **Do not patch a stale deck.** When the document changes materially,
|
|
161
|
-
regenerate from it. Patching is how a deck and its document drift, and a
|
|
162
|
-
deck that drifts starts winning arguments it should lose.
|
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: make-summary
|
|
3
|
-
description: Write the summary of a document and attach it, so it renders as a second tab on that document's page. Use when the owner says "summarise X", "make a summary for this", "add summaries to the record", "give me the short version", or asks for a TL;DR, an abstract or a précis of a governed document.
|
|
4
|
-
metadata:
|
|
5
|
-
version: "1.1.0"
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Writing the summary of a document
|
|
9
|
-
|
|
10
|
-
You write the summary. Not an outline for somebody else to finish — the actual
|
|
11
|
-
file, `<doc>.summary.md`, which the site renders as a **Summary** tab beside
|
|
12
|
-
the document's own words.
|
|
13
|
-
|
|
14
|
-
Run it end to end: read the document, write the summary, check every line back
|
|
15
|
-
against the document, verify it builds. **The check is not optional** — it is
|
|
16
|
-
what keeps a summary from becoming a second, unreviewed copy of the record.
|
|
17
|
-
|
|
18
|
-
## The one rule everything else serves
|
|
19
|
-
|
|
20
|
-
**A summary may only say what the document says.**
|
|
21
|
-
|
|
22
|
-
It is a compression of the record, never a second source. A summary asserting a
|
|
23
|
-
threshold the document does not contain is a claim nothing governs — and
|
|
24
|
-
because the summary is an attachment, the record now stands behind it. Every
|
|
25
|
-
number, date, name and rule is copied exactly, units included.
|
|
26
|
-
|
|
27
|
-
If the document does not say something the summary seems to need, there are two
|
|
28
|
-
honest options: leave it out, or tell the owner the document is missing it.
|
|
29
|
-
Never a third.
|
|
30
|
-
|
|
31
|
-
## The second rule: cover every section
|
|
32
|
-
|
|
33
|
-
**Every `##` section of the document is represented in the summary.**
|
|
34
|
-
|
|
35
|
-
A summary that covers the opening and trails off is worse than none: a reader
|
|
36
|
-
who used it believes they have the whole document. Walk the headings in order
|
|
37
|
-
and check each one has landed somewhere in the summary before you call it done.
|
|
38
|
-
|
|
39
|
-
A `###` subsection does not need its own line — fold it into its parent's,
|
|
40
|
-
unless it carries a rule or a number of its own, in which case it does.
|
|
41
|
-
|
|
42
|
-
## 1 · Read the document whole, first
|
|
43
|
-
|
|
44
|
-
Read `<doc>.md` completely before writing anything. Note as you go:
|
|
45
|
-
|
|
46
|
-
- **the decision it settles** — the reason it exists, usually one sentence
|
|
47
|
-
- **the rule, in its own words**
|
|
48
|
-
- **the numbers** — thresholds, deadlines, limits, and their units
|
|
49
|
-
- **each `##` section** — and the one thing it is there to say
|
|
50
|
-
- **the boundary** — what the document explicitly does NOT cover
|
|
51
|
-
- **its governance** — `status`, `ksor.owner` and `ksor.effective_from` from
|
|
52
|
-
the frontmatter
|
|
53
|
-
|
|
54
|
-
If the document already carries `<doc>.slides.yaml`, read it: it is a reviewed
|
|
55
|
-
compression of the same thing, and the two must not disagree.
|
|
56
|
-
|
|
57
|
-
## 2 · Write the summary
|
|
58
|
-
|
|
59
|
-
Write `<doc>.summary.md` beside the document. Its frontmatter is exactly one
|
|
60
|
-
key and the checker refuses any other — a summary inherits its parent's
|
|
61
|
-
audience, status and takedown, and a second key there would claim governance a
|
|
62
|
-
non-document cannot carry:
|
|
63
|
-
|
|
64
|
-
```markdown
|
|
65
|
-
---
|
|
66
|
-
type: Summary
|
|
67
|
-
---
|
|
68
|
-
|
|
69
|
-
The lead: what this document settles, in one or two sentences, in the
|
|
70
|
-
document's own words. **Bold the thing a reader must not misremember.**
|
|
71
|
-
|
|
72
|
-
- One line per `##` section, in the document's order.
|
|
73
|
-
- Numbers exactly as the document states them, units included.
|
|
74
|
-
- What the document explicitly does **not** cover.
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
**Shape:**
|
|
78
|
-
|
|
79
|
-
| Part | Use |
|
|
80
|
-
| --------- | -------------------------------------------------------- |
|
|
81
|
-
| lead | one or two sentences — the decision the document settles |
|
|
82
|
-
| bullets | one per `##` section, in the document's own order |
|
|
83
|
-
| last line | the boundary: what this document does not settle |
|
|
84
|
-
|
|
85
|
-
**Length:** aim for a fifth of the document, and never more than a quarter. If
|
|
86
|
-
the summary approaches the document's length, it has stopped being a summary
|
|
87
|
-
— cut the elaboration, keep the rules.
|
|
88
|
-
|
|
89
|
-
**Habits that decide whether it is any good:**
|
|
90
|
-
|
|
91
|
-
- **Lead with the decision, not the definition.** A reader opening the Summary
|
|
92
|
-
tab wants what this settles, not what the topic is.
|
|
93
|
-
- **Keep the document's own words for anything load-bearing.** Paraphrase the
|
|
94
|
-
explanation; copy the rule.
|
|
95
|
-
- **A bullet is one thought.** If it needs a comma splice, it is two bullets.
|
|
96
|
-
- **Say what is excluded.** The boundary is the half a compression loses first
|
|
97
|
-
and the half a reader is most likely to get wrong.
|
|
98
|
-
- **Do not add.** No context, no advice, no "note that" — the document is one
|
|
99
|
-
click away.
|
|
100
|
-
|
|
101
|
-
## 3 · Check every line against the document
|
|
102
|
-
|
|
103
|
-
Go back through the summary with the document open. For each line:
|
|
104
|
-
|
|
105
|
-
- Is the claim in the document? Name where.
|
|
106
|
-
- Is every number identical, same units, same rounding?
|
|
107
|
-
- Does any line imply a rule the document does not state?
|
|
108
|
-
- Walk the `##` headings in order: is each one represented?
|
|
109
|
-
- Would a reader who read ONLY this be wrong about anything?
|
|
110
|
-
|
|
111
|
-
That last question is the one that matters. A summary is used instead of the
|
|
112
|
-
document, not before it.
|
|
113
|
-
|
|
114
|
-
## 4 · Verify it
|
|
115
|
-
|
|
116
|
-
```sh
|
|
117
|
-
pnpm check # refuses an orphan, or frontmatter that is not exactly `type: Summary`
|
|
118
|
-
pnpm dev # open the page — a Summary tab appears beside Document
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
The build refuses:
|
|
122
|
-
|
|
123
|
-
- `ksor-attachment-orphan` — no `<doc>.md` beside it
|
|
124
|
-
- `ksor-attachment-frontmatter` — anything but exactly `type: Summary`
|
|
125
|
-
|
|
126
|
-
If no Summary tab appears, the file name is wrong: it must be exactly
|
|
127
|
-
`<doc>.summary.md`, matching the document's own name.
|
|
128
|
-
|
|
129
|
-
## 5 · Tell the owner what you did
|
|
130
|
-
|
|
131
|
-
Which document, how long the summary is against the document, and **anything
|
|
132
|
-
you left out because the document did not support it**. That last part is the
|
|
133
|
-
useful half: it is how an owner finds out their document has a gap.
|
|
134
|
-
|
|
135
|
-
Summarising several documents at once? Report them as a list with the same
|
|
136
|
-
three facts each, and name any document you did NOT summarise and why — a
|
|
137
|
-
document too short to compress does not need one, and saying so is the answer.
|
|
138
|
-
|
|
139
|
-
## What NOT to do
|
|
140
|
-
|
|
141
|
-
- **Do not summarise a document you have not read whole.** A summary written
|
|
142
|
-
from the first screen is confidently wrong about the rest.
|
|
143
|
-
- **Do not write a line the document cannot support**, even a true one. If it
|
|
144
|
-
is not in the record, the record cannot stand behind it.
|
|
145
|
-
- **Do not give a short document a summary.** Under roughly two screens there
|
|
146
|
-
is nothing to compress, and a Summary tab that restates the page teaches a
|
|
147
|
-
reader that the tab is not worth opening.
|
|
148
|
-
- **Do not make one summary for several documents.** A summary belongs to one
|
|
149
|
-
document. One spanning five policies has no document to be governed by and
|
|
150
|
-
nothing to be withdrawn with.
|
|
151
|
-
- **Do not patch a stale summary.** When the document changes materially,
|
|
152
|
-
rewrite from it. Patching is how a summary and its document drift, and a
|
|
153
|
-
reader on the Summary tab has no way to see that it happened.
|
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: make-slides
|
|
3
|
-
description: Generate a presentation from one document and attach it, so it renders on that document's page. Use when the owner says "make slides for X", "turn this into a deck", "I need to present this", asks for a teaching aid or a slideshow, or when onboarding needs a session rather than a page.
|
|
4
|
-
metadata:
|
|
5
|
-
version: "2.0.0"
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Generating a presentation for a document
|
|
9
|
-
|
|
10
|
-
You write the slides. Not an outline for somebody else to build — the actual
|
|
11
|
-
deck, into `<doc>.slides.yaml`, which the site renders on that document's page.
|
|
12
|
-
No browser, no third-party tool, no step where a human takes over.
|
|
13
|
-
|
|
14
|
-
Run it end to end: read the document, write the deck, check every line back
|
|
15
|
-
against the document, verify it builds. **The check is not optional** — it is
|
|
16
|
-
the step that keeps the record's guarantee true.
|
|
17
|
-
|
|
18
|
-
## The one rule everything else serves
|
|
19
|
-
|
|
20
|
-
**A slide may only say what the document says.**
|
|
21
|
-
|
|
22
|
-
The deck is a way of presenting the record, never a second source. A slide
|
|
23
|
-
asserting a threshold the document does not contain is a claim nothing governs
|
|
24
|
-
and no agent can cite — and because the deck is an attachment, the record now
|
|
25
|
-
stands behind it. Every number, date, name and rule is copied from the
|
|
26
|
-
document exactly, units included.
|
|
27
|
-
|
|
28
|
-
If the document does not say something you want on a slide, there are two
|
|
29
|
-
honest options: leave it out, or tell the owner the document is missing it.
|
|
30
|
-
Never a third.
|
|
31
|
-
|
|
32
|
-
## 1 · Read the document whole, first
|
|
33
|
-
|
|
34
|
-
Read `<doc>.md` completely before writing anything. Note as you go:
|
|
35
|
-
|
|
36
|
-
- **the decision it settles** — the reason it exists
|
|
37
|
-
- **the rule, in its own words** — usually one or two sentences
|
|
38
|
-
- **the numbers** — thresholds, deadlines, limits, and their units
|
|
39
|
-
- **the cases** — what happens in each situation it names
|
|
40
|
-
- **the boundary** — what it explicitly does NOT cover
|
|
41
|
-
- **its governance** — `status`, `ksor.owner` and `ksor.effective_from` from
|
|
42
|
-
the frontmatter
|
|
43
|
-
|
|
44
|
-
If the document carries `<doc>.summary.md`, read that too: it is a reviewed
|
|
45
|
-
compression of the same thing, and it tells you what the author thought was
|
|
46
|
-
load-bearing.
|
|
47
|
-
|
|
48
|
-
## 2 · Write the deck
|
|
49
|
-
|
|
50
|
-
Write `<doc>.slides.yaml` beside the document:
|
|
51
|
-
|
|
52
|
-
```yaml
|
|
53
|
-
slides:
|
|
54
|
-
title: Expense approvals
|
|
55
|
-
description: The 15-minute version, for a room.
|
|
56
|
-
deck:
|
|
57
|
-
- heading: What this settles
|
|
58
|
-
lead: One sentence, in the document's own words.
|
|
59
|
-
note: What to say here. Spoken, never shown.
|
|
60
|
-
|
|
61
|
-
- heading: The rule
|
|
62
|
-
bullets:
|
|
63
|
-
- Two approvers above the threshold, always
|
|
64
|
-
- The threshold is per invoice, including tax
|
|
65
|
-
note: Pause here. This is the slide people remember wrong.
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
**Per slide:**
|
|
69
|
-
|
|
70
|
-
| Field | Use |
|
|
71
|
-
| --------- | ------------------------------------------------------------ |
|
|
72
|
-
| `heading` | required — a statement, not a label. "The rule", not "Rules" |
|
|
73
|
-
| `lead` | one sentence, for a slide making a single point |
|
|
74
|
-
| `bullets` | three to five. Six is the cap, and six is already too many |
|
|
75
|
-
| `note` | what the presenter SAYS — never a repeat of the slide |
|
|
76
|
-
|
|
77
|
-
**Per deck** — 8 to 14 slides for an ordinary policy document:
|
|
78
|
-
|
|
79
|
-
1. What this settles, and for whom
|
|
80
|
-
2. Why it exists — the decision behind it
|
|
81
|
-
3. The rule itself, stated once
|
|
82
|
-
4. One slide per case, with the real numbers
|
|
83
|
-
5. What people get wrong, and what is true instead
|
|
84
|
-
6. The boundary — what this document does not cover
|
|
85
|
-
7. Where to find it: the route, the owner, the effective date
|
|
86
|
-
|
|
87
|
-
**Habits that decide whether it is any good:**
|
|
88
|
-
|
|
89
|
-
- **A heading is a claim.** "Recency is not authority" teaches; "Authority"
|
|
90
|
-
does not.
|
|
91
|
-
- **A bullet is one thought.** If it needs a comma splice, it is two bullets.
|
|
92
|
-
- **The note carries the argument.** The slide holds the shape; the presenter
|
|
93
|
-
holds the reasoning. A note repeating the bullets is a wasted field.
|
|
94
|
-
- **Do not pad to a target.** Five slides of substance beat twelve with three
|
|
95
|
-
that exist to reach twelve.
|
|
96
|
-
|
|
97
|
-
## 3 · Check every line against the document
|
|
98
|
-
|
|
99
|
-
Go back through slide by slide with the document open. For each:
|
|
100
|
-
|
|
101
|
-
- Is every claim in the document? Name where.
|
|
102
|
-
- Is every number identical, same units, same rounding?
|
|
103
|
-
- Does any slide imply a rule the document does not state?
|
|
104
|
-
- Does the boundary slide match what the document actually excludes?
|
|
105
|
-
|
|
106
|
-
This pass finds real errors, reliably. A transcription slip in a deck outlives
|
|
107
|
-
the session it was made for, because the next presenter trusts it.
|
|
108
|
-
|
|
109
|
-
## 4 · Verify it
|
|
110
|
-
|
|
111
|
-
```sh
|
|
112
|
-
pnpm check # refuses an orphan deck
|
|
113
|
-
pnpm dev # look at the page — the deck renders after the introduction,
|
|
114
|
-
# immediately before the first `##` section
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
`pnpm build` refuses — the deck's own shape is checked in the site build, not
|
|
118
|
-
by `pnpm check`:
|
|
119
|
-
|
|
120
|
-
- `ksor-slides-empty` — neither `deck:` nor `slides.url:`; nothing to show
|
|
121
|
-
- `ksor-slides-two-sources` — both, so nothing says which one governs
|
|
122
|
-
- `ksor-attachment-orphan` — no `<doc>.md` beside it
|
|
123
|
-
|
|
124
|
-
## 5 · Tell the owner what you did
|
|
125
|
-
|
|
126
|
-
Which document, how many slides, and **anything you left out because the
|
|
127
|
-
document did not support it**. That last part is the useful half: it is how an
|
|
128
|
-
owner finds out their document has a gap.
|
|
129
|
-
|
|
130
|
-
## Embedding a deck made elsewhere
|
|
131
|
-
|
|
132
|
-
If the owner already has a deck in Google Slides, Canva or SlideShare, use the
|
|
133
|
-
linked mode — `slides.url:` and no `deck:`:
|
|
134
|
-
|
|
135
|
-
```yaml
|
|
136
|
-
slides:
|
|
137
|
-
title: Expense approvals
|
|
138
|
-
url: https://docs.google.com/presentation/d/<id>/edit?usp=sharing
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
The embed url is derived for those three providers; for anything else add
|
|
142
|
-
`embed:` explicitly or it renders as a link. `url` must be https — a browser
|
|
143
|
-
blocks a mixed-content frame silently, so an http one publishes a panel that
|
|
144
|
-
never loads.
|
|
145
|
-
|
|
146
|
-
**Prefer the record-owned deck.** A linked deck is not reviewed in a pull
|
|
147
|
-
request, not versioned with its document, not withdrawn when the document is,
|
|
148
|
-
and can rot to a dead link with nothing going red. Use the link when the deck
|
|
149
|
-
already exists and somebody else maintains it — not as the default.
|
|
150
|
-
|
|
151
|
-
## What NOT to do
|
|
152
|
-
|
|
153
|
-
- **Do not put the deck in the document.** No `<iframe>`, no raw HTML.
|
|
154
|
-
`knowledge/` is CommonMark and must read cleanly in any markdown viewer.
|
|
155
|
-
- **Do not write a slide the document cannot support**, even a true one. If it
|
|
156
|
-
is not in the record, the record cannot stand behind it.
|
|
157
|
-
- **Do not make one deck for several documents.** A deck belongs to one
|
|
158
|
-
document, the way a summary does. A deck spanning five policies has no
|
|
159
|
-
document to be governed by and nothing to be withdrawn with.
|
|
160
|
-
- **Do not patch a stale deck.** When the document changes materially,
|
|
161
|
-
regenerate from it. Patching is how a deck and its document drift, and a
|
|
162
|
-
deck that drifts starts winning arguments it should lose.
|
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: make-summary
|
|
3
|
-
description: Write the summary of a document and attach it, so it renders as a second tab on that document's page. Use when the owner says "summarise X", "make a summary for this", "add summaries to the record", "give me the short version", or asks for a TL;DR, an abstract or a précis of a governed document.
|
|
4
|
-
metadata:
|
|
5
|
-
version: "1.1.0"
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Writing the summary of a document
|
|
9
|
-
|
|
10
|
-
You write the summary. Not an outline for somebody else to finish — the actual
|
|
11
|
-
file, `<doc>.summary.md`, which the site renders as a **Summary** tab beside
|
|
12
|
-
the document's own words.
|
|
13
|
-
|
|
14
|
-
Run it end to end: read the document, write the summary, check every line back
|
|
15
|
-
against the document, verify it builds. **The check is not optional** — it is
|
|
16
|
-
what keeps a summary from becoming a second, unreviewed copy of the record.
|
|
17
|
-
|
|
18
|
-
## The one rule everything else serves
|
|
19
|
-
|
|
20
|
-
**A summary may only say what the document says.**
|
|
21
|
-
|
|
22
|
-
It is a compression of the record, never a second source. A summary asserting a
|
|
23
|
-
threshold the document does not contain is a claim nothing governs — and
|
|
24
|
-
because the summary is an attachment, the record now stands behind it. Every
|
|
25
|
-
number, date, name and rule is copied exactly, units included.
|
|
26
|
-
|
|
27
|
-
If the document does not say something the summary seems to need, there are two
|
|
28
|
-
honest options: leave it out, or tell the owner the document is missing it.
|
|
29
|
-
Never a third.
|
|
30
|
-
|
|
31
|
-
## The second rule: cover every section
|
|
32
|
-
|
|
33
|
-
**Every `##` section of the document is represented in the summary.**
|
|
34
|
-
|
|
35
|
-
A summary that covers the opening and trails off is worse than none: a reader
|
|
36
|
-
who used it believes they have the whole document. Walk the headings in order
|
|
37
|
-
and check each one has landed somewhere in the summary before you call it done.
|
|
38
|
-
|
|
39
|
-
A `###` subsection does not need its own line — fold it into its parent's,
|
|
40
|
-
unless it carries a rule or a number of its own, in which case it does.
|
|
41
|
-
|
|
42
|
-
## 1 · Read the document whole, first
|
|
43
|
-
|
|
44
|
-
Read `<doc>.md` completely before writing anything. Note as you go:
|
|
45
|
-
|
|
46
|
-
- **the decision it settles** — the reason it exists, usually one sentence
|
|
47
|
-
- **the rule, in its own words**
|
|
48
|
-
- **the numbers** — thresholds, deadlines, limits, and their units
|
|
49
|
-
- **each `##` section** — and the one thing it is there to say
|
|
50
|
-
- **the boundary** — what the document explicitly does NOT cover
|
|
51
|
-
- **its governance** — `status`, `ksor.owner` and `ksor.effective_from` from
|
|
52
|
-
the frontmatter
|
|
53
|
-
|
|
54
|
-
If the document already carries `<doc>.slides.yaml`, read it: it is a reviewed
|
|
55
|
-
compression of the same thing, and the two must not disagree.
|
|
56
|
-
|
|
57
|
-
## 2 · Write the summary
|
|
58
|
-
|
|
59
|
-
Write `<doc>.summary.md` beside the document. Its frontmatter is exactly one
|
|
60
|
-
key and the checker refuses any other — a summary inherits its parent's
|
|
61
|
-
audience, status and takedown, and a second key there would claim governance a
|
|
62
|
-
non-document cannot carry:
|
|
63
|
-
|
|
64
|
-
```markdown
|
|
65
|
-
---
|
|
66
|
-
type: Summary
|
|
67
|
-
---
|
|
68
|
-
|
|
69
|
-
The lead: what this document settles, in one or two sentences, in the
|
|
70
|
-
document's own words. **Bold the thing a reader must not misremember.**
|
|
71
|
-
|
|
72
|
-
- One line per `##` section, in the document's order.
|
|
73
|
-
- Numbers exactly as the document states them, units included.
|
|
74
|
-
- What the document explicitly does **not** cover.
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
**Shape:**
|
|
78
|
-
|
|
79
|
-
| Part | Use |
|
|
80
|
-
| --------- | -------------------------------------------------------- |
|
|
81
|
-
| lead | one or two sentences — the decision the document settles |
|
|
82
|
-
| bullets | one per `##` section, in the document's own order |
|
|
83
|
-
| last line | the boundary: what this document does not settle |
|
|
84
|
-
|
|
85
|
-
**Length:** aim for a fifth of the document, and never more than a quarter. If
|
|
86
|
-
the summary approaches the document's length, it has stopped being a summary
|
|
87
|
-
— cut the elaboration, keep the rules.
|
|
88
|
-
|
|
89
|
-
**Habits that decide whether it is any good:**
|
|
90
|
-
|
|
91
|
-
- **Lead with the decision, not the definition.** A reader opening the Summary
|
|
92
|
-
tab wants what this settles, not what the topic is.
|
|
93
|
-
- **Keep the document's own words for anything load-bearing.** Paraphrase the
|
|
94
|
-
explanation; copy the rule.
|
|
95
|
-
- **A bullet is one thought.** If it needs a comma splice, it is two bullets.
|
|
96
|
-
- **Say what is excluded.** The boundary is the half a compression loses first
|
|
97
|
-
and the half a reader is most likely to get wrong.
|
|
98
|
-
- **Do not add.** No context, no advice, no "note that" — the document is one
|
|
99
|
-
click away.
|
|
100
|
-
|
|
101
|
-
## 3 · Check every line against the document
|
|
102
|
-
|
|
103
|
-
Go back through the summary with the document open. For each line:
|
|
104
|
-
|
|
105
|
-
- Is the claim in the document? Name where.
|
|
106
|
-
- Is every number identical, same units, same rounding?
|
|
107
|
-
- Does any line imply a rule the document does not state?
|
|
108
|
-
- Walk the `##` headings in order: is each one represented?
|
|
109
|
-
- Would a reader who read ONLY this be wrong about anything?
|
|
110
|
-
|
|
111
|
-
That last question is the one that matters. A summary is used instead of the
|
|
112
|
-
document, not before it.
|
|
113
|
-
|
|
114
|
-
## 4 · Verify it
|
|
115
|
-
|
|
116
|
-
```sh
|
|
117
|
-
pnpm check # refuses an orphan, or frontmatter that is not exactly `type: Summary`
|
|
118
|
-
pnpm dev # open the page — a Summary tab appears beside Document
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
The build refuses:
|
|
122
|
-
|
|
123
|
-
- `ksor-attachment-orphan` — no `<doc>.md` beside it
|
|
124
|
-
- `ksor-attachment-frontmatter` — anything but exactly `type: Summary`
|
|
125
|
-
|
|
126
|
-
If no Summary tab appears, the file name is wrong: it must be exactly
|
|
127
|
-
`<doc>.summary.md`, matching the document's own name.
|
|
128
|
-
|
|
129
|
-
## 5 · Tell the owner what you did
|
|
130
|
-
|
|
131
|
-
Which document, how long the summary is against the document, and **anything
|
|
132
|
-
you left out because the document did not support it**. That last part is the
|
|
133
|
-
useful half: it is how an owner finds out their document has a gap.
|
|
134
|
-
|
|
135
|
-
Summarising several documents at once? Report them as a list with the same
|
|
136
|
-
three facts each, and name any document you did NOT summarise and why — a
|
|
137
|
-
document too short to compress does not need one, and saying so is the answer.
|
|
138
|
-
|
|
139
|
-
## What NOT to do
|
|
140
|
-
|
|
141
|
-
- **Do not summarise a document you have not read whole.** A summary written
|
|
142
|
-
from the first screen is confidently wrong about the rest.
|
|
143
|
-
- **Do not write a line the document cannot support**, even a true one. If it
|
|
144
|
-
is not in the record, the record cannot stand behind it.
|
|
145
|
-
- **Do not give a short document a summary.** Under roughly two screens there
|
|
146
|
-
is nothing to compress, and a Summary tab that restates the page teaches a
|
|
147
|
-
reader that the tab is not worth opening.
|
|
148
|
-
- **Do not make one summary for several documents.** A summary belongs to one
|
|
149
|
-
document. One spanning five policies has no document to be governed by and
|
|
150
|
-
nothing to be withdrawn with.
|
|
151
|
-
- **Do not patch a stale summary.** When the document changes materially,
|
|
152
|
-
rewrite from it. Patching is how a summary and its document drift, and a
|
|
153
|
-
reader on the Summary tab has no way to see that it happened.
|