explico 0.14.0 → 0.15.0

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 (52) hide show
  1. package/CHANGELOG.md +112 -1
  2. package/dist/compiler/cli-main.d.ts +61 -4
  3. package/dist/compiler/cli-main.js +77 -36
  4. package/dist/compiler/cli-reference.d.ts +50 -0
  5. package/dist/compiler/cli-reference.js +213 -0
  6. package/dist/compiler/cli-verbs.d.ts +45 -0
  7. package/dist/compiler/cli-verbs.js +224 -0
  8. package/dist/compiler/cli-verify.d.ts +51 -0
  9. package/dist/compiler/cli-verify.js +151 -0
  10. package/dist/compiler/cli.d.ts +19 -50
  11. package/dist/compiler/cli.js +45 -6
  12. package/dist/compiler/content-release.d.ts +49 -0
  13. package/dist/compiler/content-release.js +63 -0
  14. package/dist/compiler/content-schemas.d.ts +2 -2
  15. package/dist/compiler/manifest.js +29 -24
  16. package/dist/compiler/page-versions.d.ts +25 -1
  17. package/dist/compiler/page-versions.js +19 -0
  18. package/dist/compiler/validate-content.js +2 -2
  19. package/dist/reference/consistency.js +7 -1
  20. package/dist/reference/diagram-fit.d.ts +5 -1
  21. package/dist/reference/diagram-fit.js +5 -1
  22. package/dist/rules/catalog.js +16 -0
  23. package/dist/rules/in-effect.d.ts +1 -1
  24. package/dist/rules/in-effect.js +5 -4
  25. package/dist/rules/rules.schema.json +21 -0
  26. package/docs/authoring/README.md +2 -0
  27. package/docs/authoring/agents.md +18 -11
  28. package/docs/authoring/cli-reference.json +2172 -0
  29. package/docs/authoring/cli.md +887 -0
  30. package/docs/authoring/deck.md +24 -0
  31. package/docs/authoring/migrating.md +168 -18
  32. package/docs/authoring/versioning.md +2 -1
  33. package/docs/course-agent/AGENTS.md +10 -7
  34. package/docs/course-agent/agents/rules-reviewer.md +2 -2
  35. package/docs/course-agent/skills/draft-lesson/SKILL.md +7 -6
  36. package/docs/course-agent/skills/migrate-course/SKILL.md +5 -4
  37. package/docs/course-agent/skills/release-content/SKILL.md +5 -3
  38. package/docs/diagram-scaling.md +2 -2
  39. package/package.json +1 -1
  40. package/src/compiler/cli-main.ts +135 -47
  41. package/src/compiler/cli-reference.ts +285 -0
  42. package/src/compiler/cli-verbs.ts +270 -0
  43. package/src/compiler/cli-verify.ts +241 -0
  44. package/src/compiler/cli.ts +77 -17
  45. package/src/compiler/content-release.ts +91 -0
  46. package/src/compiler/manifest.ts +34 -24
  47. package/src/compiler/page-versions.ts +42 -0
  48. package/src/compiler/validate-content.ts +5 -2
  49. package/src/reference/consistency.ts +13 -2
  50. package/src/reference/diagram-fit.ts +18 -4
  51. package/src/rules/catalog.ts +17 -0
  52. package/src/rules/in-effect.ts +5 -4
@@ -586,3 +586,27 @@ that says what the student can now do.
586
586
  _Enforcement._ Review-only: the engine writes both frames.
587
587
 
588
588
  _Exceptions._ None.
589
+
590
+ ## D11
591
+
592
+ **A deck is flagged when its chapter changed, by rule C5’s version, after the deck itself last did.**
593
+
594
+ Two files mean the chapter and the deck can drift apart with nothing to notice
595
+ it: `deck-stale` is an info diagnostic naming a lesson's own deck whose
596
+ chapter's version (rule C5) is newer than the deck's.
597
+
598
+ _Rationale._ The deck recalls the chapter's results and follows its argument; a
599
+ chapter that moved on is easy to miss from inside the deck file, which never
600
+ changed itself.
601
+
602
+ _How to apply._ When `deck-stale` names a deck, read what changed in the
603
+ chapter since, and judge whether the deck's frames, notes or recalls need the
604
+ same update. A deck the lecturer knows is still correct needs nothing further;
605
+ there is no build failure to clear.
606
+
607
+ _Enforcement._ Build-enforced (`page-versions.ts`, `pnpm validate:content`):
608
+ `deck-stale`, info. Needs rule C5 on — it is what gives a chapter and a deck
609
+ each their own version to compare.
610
+
611
+ _Exceptions._ A part's deck, which covers more than one chapter: it has no
612
+ single chapter to compare against, so it is never flagged.
@@ -30,9 +30,11 @@ The pattern every time:
30
30
  4. Make every required course-side change named by those sections, including
31
31
  changes under `content/`, Astro/source configuration, and course scripts; do
32
32
  not stop after changing the dependency declaration.
33
- 5. `pnpm validate:content` (it passes on its first run: it rewrites
34
- `build/resolution/*` and fails only on a report git tracks that it had to
35
- rewrite), then `pnpm content check --changed`, then `astro check`, then
33
+ 5. `pnpm content verify` (0.15 and later), or by hand: `pnpm validate:content`
34
+ (it rewrites `build/resolution/*` and fails only on a report git tracks that
35
+ it had to rewrite: a course whose `build/` is git-ignored passes on the
36
+ first run, one that commits it commits the rewritten reports and runs it
37
+ again), then `pnpm content check --changed`, then `astro check`, then
36
38
  `astro build`.
37
39
  Each stage names what it doesn't like; fix and re-run.
38
40
 
@@ -41,6 +43,128 @@ required config block throws with the section of this file to read.
41
43
 
42
44
  ---
43
45
 
46
+ ## 0.14.0 → 0.15.0
47
+
48
+ **No course changes required.** This release adds verbs (`content help
49
+ <verb>`, `content verify`, `content release`, `content fix --all`), rule D11's
50
+ `deck-stale` info, and better messages; the manifest schema stays v37. Two
51
+ steps are conditional: a course that ran `content move --write` on 0.14.0
52
+ (step 4), and a course whose tests read the CLI's text output (step 6).
53
+
54
+ ### 1. Update the dependency
55
+
56
+ ```bash
57
+ pnpm add explico@<this version>
58
+ ```
59
+
60
+ pnpm 11 holds back a release younger than its `minimumReleaseAge`: either
61
+ `pnpm add` stops with `ERR_PNPM_NO_MATURE_MATCHING_VERSION`, or pnpm adds an
62
+ `explico@<version>` line to `minimumReleaseAgeExclude` in
63
+ `pnpm-workspace.yaml` itself. Add that line when it does not, and commit it.
64
+
65
+ ### 2. Rule D11: a deck whose chapter moved on — nothing to do
66
+
67
+ Rule D11 adds an info diagnostic, `deck-stale`, naming a lesson's own deck
68
+ whose chapter changed, by rule C5's version, after the deck itself last did. A
69
+ part's deck covers several chapters and is never flagged. Nothing to
70
+ configure; a course without decks sees nothing.
71
+
72
+ ### 3. Optional: let `pnpm content verify` be the course's verification
73
+
74
+ `pnpm content verify` runs `validate:content`, `content check --changed`,
75
+ `astro check`, the course's `test` script and `astro build` (with `--e2e`, its
76
+ `test:e2e` script too), and answers at once on a tree its last pass covered. It
77
+ reaches a course through the `scripts/content.ts` shim of 0.14.0 step 14 and
78
+ needs nothing else. Where the course's `AGENTS.md`, README or `package.json`
79
+ spells that sequence out by hand, it can say `pnpm content verify` instead; a
80
+ `verify` script becomes `"verify": "pnpm content verify"`. The pass record and
81
+ the logs go to `node_modules/.cache/explico/verify/`, never into the tree.
82
+ `astro check` is skipped, by name, when `@astrojs/check` is not installed.
83
+
84
+ ### 4. Only if you ran `content move --write` on 0.14.0: the card's placeholder body
85
+
86
+ 0.14.0's `content move` wrote every card it created a placeholder body,
87
+ "Promoted from `<lesson>`'s `notation.local`; the meaning above is what that
88
+ page said. Extend this body with what a glossary reader needs.", which the
89
+ glossary publishes. Find them:
90
+
91
+ ```bash
92
+ grep -rl "Extend this body with what a glossary reader needs" content/notation
93
+ ```
94
+
95
+ Replace each with what a reader needs beyond the meaning, or delete the body
96
+ (a card needs none). Check those cards' `domain:` too: 0.14.0 wrote `general`
97
+ for a key without a prefix. From this release `move` writes no body, takes the
98
+ domain the course's own cards use, and says what the author still owes.
99
+
100
+ ### 5. Rule N4's lints: better advice, and the run log counts them — nothing to do
101
+
102
+ `definition-repeated` on a local entry whose glyph a shared card already owns
103
+ no longer says "move one copy to `content/notation/`": the entry is a reused
104
+ letter (rule N4), and promoting it would put two shared cards on one glyph. It
105
+ says how to acknowledge the copies instead (`definition-repeated:<key> — <why>`
106
+ in `lint-ignore.yml`), and `content move` cautions before writing such a card.
107
+ `validate:content`'s run log records each consistency warning at WARNING now,
108
+ so the `Run log: (… warning(s))` line it prints matches `pnpm content status`
109
+ where it used to say 1; nothing fails on a warning.
110
+
111
+ The `explain-redundant` infos an upgrade to 0.14.0 left (a thousand, in one
112
+ course) clear in one plan: `pnpm content fix --all` shows the diff and
113
+ `--write` applies it. It edits lessons, so it is a content change: a bullet in
114
+ `content/CHANGELOG.md` (rule C1) and the version bump rule C2 asks for.
115
+
116
+ ### 6. Only if a course test reads the CLI's text output
117
+
118
+ The `--json` reports did not change; a test that reads them keeps passing, and
119
+ `pnpm content help <verb> --json` now prints each one's JSON Schema. The text
120
+ did change:
121
+
122
+ - `pnpm content help`: every usage line ends in `[--json]`; `release`,
123
+ `verify` and `help` are listed, and `fix` reads `<lesson>… | --all`.
124
+ - `content check`: a lesson's info is one line counted by code
125
+ (`+ 28 info (…)`); errors and warnings are listed as before.
126
+ - `content status`: at most six of the pages with unreleased changes, then
127
+ `… N more in --json`.
128
+ - `content context`: `diagnostics: N (M in <file>, K in the shared cards it
129
+ shows)` when some come from the cards.
130
+ - `content init-agent`: `new` or `differs from the engine's copy` where it
131
+ said `installed` or `refreshed from the engine`; after `--write` every edit
132
+ verb prints a `next:` line.
133
+ - `dia-too-wide` on `<CurriculumMap>`'s graph (rule V8) names the map's props.
134
+
135
+ Match the `--json` instead of the text.
136
+
137
+ ### 7. Optional: refresh the agent procedures; content releases with `content release`
138
+
139
+ `pnpm content release [major|minor|patch]` cuts a content release (rule C3):
140
+ `## [Unreleased]` in `content/CHANGELOG.md` becomes a dated `## [x.y.z]` and
141
+ `about.version` becomes `x.y.z`, as a diff that `--write` applies. With no
142
+ argument the bump is what the section's headings imply under rule C2
143
+ (`### Breaking` or `### Removed` a MAJOR, `### Added` a MINOR, else a PATCH);
144
+ check it against the rule. Then `pnpm validate:content` and commit the three
145
+ files together. 0.14.0's `release-content` skill called
146
+ `pnpm release:content`, a script only the playground had; a course that wrote
147
+ its own can make it `"release:content": "pnpm content release --write"`.
148
+
149
+ `pnpm content init-agent --write` refreshes the installed skills:
150
+ `draft-lesson` and `migrate-course` now end on `pnpm content verify`, and
151
+ `release-content` runs `pnpm content release`. It never edits an existing
152
+ `AGENTS.md`; the shipped baseline
153
+ (`node_modules/explico/docs/course-agent/AGENTS.md`) shows the two lines to
154
+ copy: `pnpm content verify` before handing back (step 3), and
155
+ `pnpm content help <verb>`, which prints a verb's flags and the shape of its
156
+ `--json` ([`cli.md`](cli.md) has every verb).
157
+
158
+ ### 8. Verify
159
+
160
+ ```bash
161
+ pnpm content verify # add --e2e when the course has browser tests
162
+ ```
163
+
164
+ The manifest schema did not move, so a course that commits
165
+ `build/resolution/` sees no rewritten report, and `content/versions.json`
166
+ changes only where step 4 or step 5 edited content.
167
+
44
168
  ## 0.13.1 → 0.14.0
45
169
 
46
170
  **One course change is required, two are recommended, and a rare page needs
@@ -95,16 +219,24 @@ warning needs no course workaround.
95
219
 
96
220
  ### 1. Update the dependency
97
221
 
222
+ **A course on 0.13.0 or 0.13.1, first:** delete the downstream patch that
223
+ added `dist/components/float-name.js` to the installed package
224
+ (`patches/explico@0.13.1.patch`) and its `patchedDependencies` entry, in
225
+ `pnpm-workspace.yaml` or under `pnpm` in `package.json`, and any test that
226
+ pins the old path. This release compiles the module as
227
+ `dist/reference/float-name.js`, which the export serializers import, and
228
+ pnpm refuses the upgrade with `ERR_PNPM_UNUSED_PATCH` while an entry names a
229
+ patch for a version no longer installed. Then:
230
+
98
231
  ```bash
99
232
  pnpm add explico@<this version>
100
233
  ```
101
234
 
102
- **A course on 0.13.0 or 0.13.1** also stops needing the downstream patch that
103
- added `dist/components/float-name.js` to the installed package
104
- (`patches/explico@0.13.1.patch`, or a `pnpm.patchedDependencies` entry): this
105
- release compiles the module as `dist/reference/float-name.js`, which the
106
- export serializers import. Delete the patch and its `patchedDependencies`
107
- entry, reinstall, and delete any test that pins the old path.
235
+ pnpm 11 holds back a release younger than its `minimumReleaseAge`: either
236
+ `pnpm add` stops with `ERR_PNPM_NO_MATURE_MATCHING_VERSION`, or pnpm adds an
237
+ `explico@<version>` line to `minimumReleaseAgeExclude` in
238
+ `pnpm-workspace.yaml` itself. Add that line when it does not, and commit it
239
+ with the upgrade.
108
240
 
109
241
  **Coming from 0.12.0 or earlier:** apply "0.13.0 → 0.13.1" and "0.12.0 →
110
242
  0.13.0" below first.
@@ -358,7 +490,10 @@ until the commit carries the file. The first record has no history to draw
358
490
  on: while `## [Unreleased]` holds bullets, every page reads "with changes after
359
491
  version `x.y.z`, not yet released", `x.y.z` being `about.version`, until the
360
492
  next release stamps them all; with an empty `## [Unreleased]`, every page reads
361
- "unchanged since version `x.y.z`". Earlier releases are not reconstructed.
493
+ "unchanged since version `x.y.z`". Earlier releases are not reconstructed. So
494
+ the order matters: write the first record before adding the upgrade's own
495
+ bullet under `## [Unreleased]` (rule C1), or every page reads "not yet
496
+ released" although none changed.
362
497
 
363
498
  What counts as a page's content: its file, its `.checks.yml` and the
364
499
  assessments it lists, the shared notation entries its text uses, the sources
@@ -580,7 +715,9 @@ now fails only on a report git tracks that it had to rewrite, so a course whose
580
715
  `build/` is git-ignored passes on the first run; delete any "run it twice"
581
716
  instruction from the course's own AGENTS.md. A course that commits
582
717
  `build/resolution/` (credit-and-derivatives) keeps committing the rewritten
583
- files with the change, as before.
718
+ files with the change, as before — and this upgrade rewrites every one (the
719
+ schema version moved), so its first run fails with a `[resolution-report] …
720
+ out of date` line per report. Commit them; the next run passes.
584
721
 
585
722
  Optional, in `scripts/content.ts`: print diagnostics through
586
723
  `formatCliDiagnostic` (and `ownerTag` in the `check` case), both exported from
@@ -832,6 +969,10 @@ To write a part's deck:
832
969
  declared exception and is no longer reported, so every
833
970
  `glyph-unique-in-corpus:<glyph> — …` line in `lint-ignore.yml` that
834
971
  acknowledged a page-local reuse can be deleted (they are harmless if kept).
972
+ It can also report a pair 0.13.1 did not: two shared cards on one glyph
973
+ where one card is named only in the other's `formula:` (data-science-I's
974
+ `\pi`, a prior density and the circle constant). Give one a different glyph,
975
+ or acknowledge the pair.
835
976
  - `definition-repeated` (warning): one `notation.local` key declared in two
836
977
  or more chapters (a deck beside its chapter never counts). Run
837
978
  `pnpm content diagnostics warning --code definition-repeated`; each line
@@ -849,6 +990,14 @@ To write a part's deck:
849
990
  is for a compound or a colliding glyph. Optional to clear.
850
991
  - `gloss-wants-promoting` is gone; delete any `lint-ignore.yml` line for it.
851
992
 
993
+ Nothing reports a `lint-ignore.yml` line that no longer matches: search the
994
+ file for `glyph-unique-in-corpus` and `gloss-wants-promoting` yourself. A
995
+ course test that pins the list of consistency codes, or exercises
996
+ `gloss-wants-promoting`, needs the new list. And reread the course's own
997
+ notation guidance (its AGENTS.md, a style guide): advice such as "gloss
998
+ first", or a local entry as the default for a new symbol, now contradicts N4 —
999
+ one shared card per glyph, a local entry or a gloss only for a reused letter.
1000
+
852
1001
  ### 21. The glossary: nothing to do, unless your CSS or tests read it
853
1002
 
854
1003
  The glossary page gains a section "On one page only" (`.glossary-page-meanings`)
@@ -942,11 +1091,9 @@ editUrl: false
942
1091
 
943
1092
  import { LinkButton } from '@astrojs/starlight/components';
944
1093
 
945
- <div style="display: flex; justify-content: center;">
946
- <LinkButton href={import.meta.env.BASE_URL} icon="left-arrow" iconPlacement="start">
947
- Return to the course
948
- </LinkButton>
949
- </div>
1094
+ <LinkButton href={import.meta.env.BASE_URL} icon="left-arrow" iconPlacement="start">
1095
+ Return to the course
1096
+ </LinkButton>
950
1097
  ```
951
1098
 
952
1099
  `import.meta.env.BASE_URL` points home from the originally requested URL and
@@ -990,8 +1137,11 @@ shadow, a step lighter than the page in the dark theme (`appearance.slides:
990
1137
  darker than before, so it stays visible on the grey. The manifest schema is
991
1138
  now v37, with `appearance`.
992
1139
 
993
- No course change is required. To choose another look, add the block to
994
- `content/course.settings.json`:
1140
+ No course change is required, except in a browser test that compares a
1141
+ sidebar's background with the page's: they now differ by a step of grey (in
1142
+ the dark theme `rgb(32, 35, 42)` against `rgb(23, 24, 28)`), so the test reads
1143
+ the zone's own colour or the course sets `"zones": "none"`. To choose another
1144
+ look, add the block to `content/course.settings.json`:
995
1145
 
996
1146
  ```json
997
1147
  "appearance": { "zones": "paper", "slides": "edge" }
@@ -97,7 +97,8 @@ one commit:
97
97
  `content/versions.json`, where every page changed since the last release
98
98
  takes `x.y.z` ([C5](#c5)); commit it in the same commit.
99
99
 
100
- `pnpm release:content` does steps 2 and 3 for you.
100
+ `pnpm content release [major|minor|patch]` does steps 2 and 3 for you: it
101
+ shows the diff, and `--write` applies it.
101
102
 
102
103
  _Enforcement._ Build-enforced (Tier-3, `knowledge-version.ts`
103
104
  `resolveKnowledgeVersion`). `pnpm validate:content` emits
@@ -10,15 +10,18 @@ https://danieltuzes.github.io/explico/start/ ([`sources.json`](https://danieltuz
10
10
 
11
11
  ## The loop
12
12
 
13
- - `pnpm content help` lists the CLI. Start every task there, not with a file
14
- hunt: `content context <lesson>` for a lesson's scope, `content rules
15
- [--element …]` for the rules this course has on, `content rule <ID>` for one
16
- of them whole, `content symbol <latex>` before declaring any notation.
13
+ - `pnpm content help` lists the CLI, and `pnpm content help <verb>` gives one
14
+ verb's flags and the shape of its `--json`. Start every task there, not with
15
+ a file hunt: `content context <lesson>` for a lesson's scope,
16
+ `content rules [--element …]` for the rules this course has on,
17
+ `content rule <ID>` for one of them whole, `content symbol <latex>` before
18
+ declaring any notation.
17
19
  - While writing math: `content equation "<latex>" --lesson <id>`; after:
18
20
  `content bindings <lesson>` and `content check <lesson>`.
19
- - Before handing back: `pnpm validate:content` (passes on its first run; commit
20
- `content/versions.json` if it changed), `pnpm content check --changed`,
21
- `astro check`, `astro build`.
21
+ - Before handing back: `pnpm content verify` — `validate:content`,
22
+ `content check --changed`, `astro check`, the course's tests, `astro build`;
23
+ `--e2e` adds the browser tests. A rerun on an unchanged tree answers at once. Commit
24
+ `content/versions.json` if `validate:content` changed it.
22
25
  - Every content change adds a bullet under `## [Unreleased]` in
23
26
  `content/CHANGELOG.md` (rule C1).
24
27
  - Upgrading `explico`: `pnpm content migrate` prints exactly the sections to
@@ -22,8 +22,8 @@ with `pnpm -s content …`.
22
22
  read the lesson file (`content/docs/<slug>.mdx`) with line numbers.
23
23
  3. `pnpm -s content rules --enforcement guide` lists the rules this course has
24
24
  on that no script checks, by element, each with a one-line summary. Apply
25
- only those; a rule absent from the list is off. Open `pnpm -s content rule
26
- <ID>` only when a summary does not settle a doubt.
25
+ only those; a rule absent from the list is off. Open
26
+ `pnpm -s content rule <ID>` only when a summary does not settle a doubt.
27
27
  4. Read the lesson once, rule list beside it, and note each place a guide-only
28
28
  rule is not followed: the rule id, the line, what you saw, the fix in one
29
29
  clause. A JSX prop string (`caption="…"`) is not prose for the math rules.
@@ -13,9 +13,9 @@ whose `package.json` has the `content` script); `pnpm content help` lists them.
13
13
  notation, references, assumptions and sources (a new lesson:
14
14
  `pnpm content new lesson <id>` scaffolds it).
15
15
  2. **Rules.** `pnpm content rules --element <prose,table,…>` lists only the
16
- rules this course has on, with enforcement and codes; `pnpm content rule
17
- <ID>` prints one whole, example included. A rule absent from the list is
18
- off: neither apply it nor flag it.
16
+ rules this course has on, with enforcement and codes;
17
+ `pnpm content rule <ID>` prints one whole, example included. A rule absent
18
+ from the list is off: neither apply it nor flag it.
19
19
  3. **Notation, one question per symbol: is it already defined?**
20
20
  `pnpm content symbol <latex>`. A card with this meaning exists → reference
21
21
  it: `[[key]]` once in prose, bare math after; `\explain{key}{…}` only for a
@@ -32,6 +32,7 @@ whose `package.json` has the `content` script); `pnpm content help` lists them.
32
32
  for the rest; the counts come first, the lines on request.
33
33
  6. **Record.** A bullet under `## [Unreleased]` in `content/CHANGELOG.md`
34
34
  (rule C1); `pnpm validate:content` rewrites `content/versions.json`, which
35
- is committed with the change (rule C5). Guide-only rules (`enforcement
36
- guide`) have no check: before handing back, have the `rules-reviewer`
37
- agent review the lesson, or review the draft against them yourself.
35
+ is committed with the change (rule C5). Guide-only rules
36
+ (`enforcement guide`) have no check: before handing back, have the
37
+ `rules-reviewer` agent review the lesson, or review the draft against them
38
+ yourself, and run `pnpm content verify`.
@@ -23,9 +23,10 @@ work or says no course changes are required.
23
23
  whose `scripts/content.ts` predates the shim), read the sections from
24
24
  `node_modules/explico/docs/authoring/migrating.md`; the section that
25
25
  introduced the shim says how to switch to it.
26
- 4. The checks each section ends with, then: `pnpm validate:content` (passes on
27
- its first run; commit `content/versions.json` if it changed),
28
- `pnpm content check --changed`, `astro check`, `astro build`, and the
29
- course's browser tests if it has any.
26
+ 4. The checks each section ends with, then `pnpm content verify --e2e`:
27
+ `validate:content` (passes on its first run; commit `content/versions.json`
28
+ if it changed), `content check --changed`, `astro check`, the course's
29
+ tests, `astro build` and its browser tests. An engine older than the
30
+ `verify` verb: run those by hand.
30
31
  5. Commit the dependency change, the migration edits and the generated files
31
32
  together, naming the versions in the message.
@@ -15,9 +15,11 @@ each page's own version in `content/versions.json` (rule C5).
15
15
  2. Pick the bump (rule C2): MAJOR when a lesson, competency or notation key
16
16
  was removed or renamed or a stated outcome changed; MINOR for something
17
17
  new; PATCH for a fix or clarification.
18
- 3. From the course package: `pnpm release:content [major|minor|patch]`. It
19
- moves `[Unreleased]` to a dated `## [x.y.z]` heading and sets
20
- `about.version` to match in the same change (rule C3).
18
+ 3. From the course package: `pnpm content release [major|minor|patch]` shows
19
+ the release as a diff: `[Unreleased]` moved to a dated `## [x.y.z]`
20
+ heading and `about.version` set to match, in one change (rule C3). With no
21
+ bump it takes the one the section's headings imply; check that it agrees
22
+ with step 2. Add `--write` to apply it.
21
23
  4. `pnpm validate:content`: no `knowledge-*` warning; it rewrites
22
24
  `content/versions.json` — commit that file with the release, never edit it
23
25
  by hand.
@@ -1,11 +1,11 @@
1
1
  # Diagram scaling on touch screens
2
2
 
3
- > **Status.** In `[Unreleased]` (see [`CHANGELOG.md`](../CHANGELOG.md)).
3
+ > **Status.** Released in [0.14.0](../CHANGELOG.md).
4
4
  > Checked in Chromium, in the end-to-end suite and by measurement. **Not
5
5
  > checked in WebKit** (Safari, every iOS browser): no WebKit build is available
6
6
  > to the agent sessions that wrote it. It uses the technique the print path
7
7
  > already uses for WebKit, but a person should look at a diagram on an iPhone
8
- > before a release ([Checking it](#checking-it)).
8
+ > to confirm it ([Checking it](#checking-it)).
9
9
 
10
10
  A diagram is drawn in px at build time. On a phone, the reader's own text-size
11
11
  menu shrinks the whole drawing, boxes and text together, so that a wide diagram
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "explico",
3
- "version": "0.14.0",
3
+ "version": "0.15.0",
4
4
  "description": "Build-time engine for prerequisite-aware, notation-rigorous course content: one validated content model, a semantic notation/citation/equation system with a completeness gate, and a deterministic JSON manifest.",
5
5
  "type": "module",
6
6
  "license": "UNLICENSED",