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.
- package/CHANGELOG.md +112 -1
- package/dist/compiler/cli-main.d.ts +61 -4
- package/dist/compiler/cli-main.js +77 -36
- package/dist/compiler/cli-reference.d.ts +50 -0
- package/dist/compiler/cli-reference.js +213 -0
- package/dist/compiler/cli-verbs.d.ts +45 -0
- package/dist/compiler/cli-verbs.js +224 -0
- package/dist/compiler/cli-verify.d.ts +51 -0
- package/dist/compiler/cli-verify.js +151 -0
- package/dist/compiler/cli.d.ts +19 -50
- package/dist/compiler/cli.js +45 -6
- package/dist/compiler/content-release.d.ts +49 -0
- package/dist/compiler/content-release.js +63 -0
- package/dist/compiler/content-schemas.d.ts +2 -2
- package/dist/compiler/manifest.js +29 -24
- package/dist/compiler/page-versions.d.ts +25 -1
- package/dist/compiler/page-versions.js +19 -0
- package/dist/compiler/validate-content.js +2 -2
- package/dist/reference/consistency.js +7 -1
- package/dist/reference/diagram-fit.d.ts +5 -1
- package/dist/reference/diagram-fit.js +5 -1
- package/dist/rules/catalog.js +16 -0
- package/dist/rules/in-effect.d.ts +1 -1
- package/dist/rules/in-effect.js +5 -4
- package/dist/rules/rules.schema.json +21 -0
- package/docs/authoring/README.md +2 -0
- package/docs/authoring/agents.md +18 -11
- package/docs/authoring/cli-reference.json +2172 -0
- package/docs/authoring/cli.md +887 -0
- package/docs/authoring/deck.md +24 -0
- package/docs/authoring/migrating.md +168 -18
- package/docs/authoring/versioning.md +2 -1
- package/docs/course-agent/AGENTS.md +10 -7
- package/docs/course-agent/agents/rules-reviewer.md +2 -2
- package/docs/course-agent/skills/draft-lesson/SKILL.md +7 -6
- package/docs/course-agent/skills/migrate-course/SKILL.md +5 -4
- package/docs/course-agent/skills/release-content/SKILL.md +5 -3
- package/docs/diagram-scaling.md +2 -2
- package/package.json +1 -1
- package/src/compiler/cli-main.ts +135 -47
- package/src/compiler/cli-reference.ts +285 -0
- package/src/compiler/cli-verbs.ts +270 -0
- package/src/compiler/cli-verify.ts +241 -0
- package/src/compiler/cli.ts +77 -17
- package/src/compiler/content-release.ts +91 -0
- package/src/compiler/manifest.ts +34 -24
- package/src/compiler/page-versions.ts +42 -0
- package/src/compiler/validate-content.ts +5 -2
- package/src/reference/consistency.ts +13 -2
- package/src/reference/diagram-fit.ts +18 -4
- package/src/rules/catalog.ts +17 -0
- package/src/rules/in-effect.ts +5 -4
|
@@ -0,0 +1,2172 @@
|
|
|
1
|
+
{
|
|
2
|
+
"generatedBy": "scripts/agent/gen-cli.mjs from src/compiler/cli-verbs.ts and the types its rows name — do not edit",
|
|
3
|
+
"verbs": [
|
|
4
|
+
{
|
|
5
|
+
"verb": "status",
|
|
6
|
+
"args": "",
|
|
7
|
+
"when": "how the course stands",
|
|
8
|
+
"prints": "counts, diagnostic totals, the knowledge and page versions, the agent surfaces' sizes, whether the course's AGENTS.md points at the engine's guide and the procedures are installed",
|
|
9
|
+
"flags": [],
|
|
10
|
+
"writes": "nothing",
|
|
11
|
+
"json": "StatusReport"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"verb": "diagnostics",
|
|
15
|
+
"args": "[info|warning|error] [--all | --code <c> | --lesson <id> | --changed]",
|
|
16
|
+
"when": "what is wrong, where",
|
|
17
|
+
"prints": "counts by code (with each code's rule) and by file, at the given severity or higher (info by default); a filter or --all lists the lines instead. --json always prints the lines",
|
|
18
|
+
"flags": [
|
|
19
|
+
{
|
|
20
|
+
"flag": "--all",
|
|
21
|
+
"description": "list every diagnostic instead of the counts"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"flag": "--code <c>",
|
|
25
|
+
"description": "only that diagnostic code"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"flag": "--lesson <id>",
|
|
29
|
+
"description": "only that lesson's file"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"flag": "--changed",
|
|
33
|
+
"description": "only lessons whose .mdx or .checks.yml differs from git HEAD, tracked or not"
|
|
34
|
+
}
|
|
35
|
+
],
|
|
36
|
+
"writes": "nothing",
|
|
37
|
+
"json": "DiagnosticsReport"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"verb": "warnings",
|
|
41
|
+
"args": "",
|
|
42
|
+
"when": "the warnings alone",
|
|
43
|
+
"prints": "every warning, one line each with its rule, then the count",
|
|
44
|
+
"flags": [],
|
|
45
|
+
"writes": "nothing",
|
|
46
|
+
"json": "WarningsReport"
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"verb": "context",
|
|
50
|
+
"args": "<lesson>",
|
|
51
|
+
"when": "what a lesson draws on",
|
|
52
|
+
"prints": "its outcomes, notation, sources, diagnostics and token counts; --json adds the body, the floats it can reference, its sections and domain signatures",
|
|
53
|
+
"flags": [],
|
|
54
|
+
"writes": "nothing",
|
|
55
|
+
"json": "ContextReport"
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"verb": "equation",
|
|
59
|
+
"args": "\"<latex>\" [--lesson <id>]",
|
|
60
|
+
"when": "will this expression build",
|
|
61
|
+
"prints": "each glyph's card, unresolved glyphs with where they are defined",
|
|
62
|
+
"flags": [
|
|
63
|
+
{
|
|
64
|
+
"flag": "--lesson <id>",
|
|
65
|
+
"description": "resolve against that lesson's local notation as well as the shared cards"
|
|
66
|
+
}
|
|
67
|
+
],
|
|
68
|
+
"writes": "nothing",
|
|
69
|
+
"exit": "when the build would refuse the expression",
|
|
70
|
+
"json": "EquationReport"
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"verb": "bindings",
|
|
74
|
+
"args": "<lesson>",
|
|
75
|
+
"when": "what a lesson's math binds",
|
|
76
|
+
"prints": "every math span: its bindings, unresolved glyphs, redundant \\explain wraps",
|
|
77
|
+
"flags": [],
|
|
78
|
+
"writes": "nothing",
|
|
79
|
+
"json": "BindingsReport"
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"verb": "symbol",
|
|
83
|
+
"args": "<latex | key>",
|
|
84
|
+
"when": "is this symbol defined already",
|
|
85
|
+
"prints": "the shared card, each local entry with its lesson, each gloss with its card, near misses",
|
|
86
|
+
"flags": [],
|
|
87
|
+
"writes": "nothing",
|
|
88
|
+
"json": "SymbolReport"
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"verb": "check",
|
|
92
|
+
"args": "<lesson | deck>… [--changed]",
|
|
93
|
+
"when": "does it render",
|
|
94
|
+
"prints": "ok or FAIL per lesson: schema, references, MDX → KaTeX; each error and warning with its rule, the info counted by code",
|
|
95
|
+
"flags": [
|
|
96
|
+
{
|
|
97
|
+
"flag": "--changed",
|
|
98
|
+
"description": "the lessons whose .mdx or .checks.yml differs from git HEAD, tracked or not"
|
|
99
|
+
}
|
|
100
|
+
],
|
|
101
|
+
"writes": "nothing",
|
|
102
|
+
"exit": "when a lesson has an error",
|
|
103
|
+
"json": "CheckReport"
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"verb": "rule",
|
|
107
|
+
"args": "<ID>",
|
|
108
|
+
"when": "one rule, whole",
|
|
109
|
+
"prints": "the entry as this course has it (enforcement, codes, settings in effect) and the rule page's section, example included",
|
|
110
|
+
"flags": [],
|
|
111
|
+
"writes": "nothing",
|
|
112
|
+
"exit": "for an ID the catalog and the course rules do not know",
|
|
113
|
+
"json": "RuleReport"
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"verb": "migrate",
|
|
117
|
+
"args": "[--from <version>] [--to <version>]",
|
|
118
|
+
"when": "what an upgrade needs",
|
|
119
|
+
"prints": "the migration guide's sections between the version package.json pins at git HEAD and the one installed, oldest first",
|
|
120
|
+
"flags": [
|
|
121
|
+
{
|
|
122
|
+
"flag": "--from <version>",
|
|
123
|
+
"description": "start here instead of the version pinned at HEAD"
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
"flag": "--to <version>",
|
|
127
|
+
"description": "stop here instead of the installed version"
|
|
128
|
+
}
|
|
129
|
+
],
|
|
130
|
+
"writes": "nothing",
|
|
131
|
+
"exit": "when a section between the two versions is missing",
|
|
132
|
+
"json": "MigrateReport"
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"verb": "rules",
|
|
136
|
+
"args": "[--element <e>[,<e>]] [--enforcement script|partial|guide|locked] [--edition chapter|deck]",
|
|
137
|
+
"when": "which rules apply",
|
|
138
|
+
"prints": "the rules this course has on, by element, with enforcement, codes, settings in effect and a one-line summary",
|
|
139
|
+
"flags": [
|
|
140
|
+
{
|
|
141
|
+
"flag": "--element <e>[,<e>]",
|
|
142
|
+
"description": "only rules about these elements (prose, table, notation, …)"
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
"flag": "--enforcement <kind>",
|
|
146
|
+
"description": "only script, partial, guide or locked rules"
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
"flag": "--edition <edition>",
|
|
150
|
+
"description": "chapter (the default) or deck: the rules for that edition's pages"
|
|
151
|
+
}
|
|
152
|
+
],
|
|
153
|
+
"writes": "nothing",
|
|
154
|
+
"json": "RulesJson"
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
"verb": "move",
|
|
158
|
+
"args": "<lesson>:<key> [--to <key>] [--write]",
|
|
159
|
+
"when": "a local entry becomes shared",
|
|
160
|
+
"prints": "the new card and every copy and reference that changes, as a diff",
|
|
161
|
+
"flags": [
|
|
162
|
+
{
|
|
163
|
+
"flag": "--to <key>",
|
|
164
|
+
"description": "the shared card's key, when it differs from the local one"
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
"flag": "--write",
|
|
168
|
+
"description": "apply the edits; without it the diff is printed and nothing changes"
|
|
169
|
+
}
|
|
170
|
+
],
|
|
171
|
+
"writes": "only with --write",
|
|
172
|
+
"json": "EditPlanJson"
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
"verb": "rename",
|
|
176
|
+
"args": "<old> <new> [--write]",
|
|
177
|
+
"when": "rename a shared card",
|
|
178
|
+
"prints": "the card file and every reference, as a diff",
|
|
179
|
+
"flags": [
|
|
180
|
+
{
|
|
181
|
+
"flag": "--write",
|
|
182
|
+
"description": "apply the edits; without it the diff is printed and nothing changes"
|
|
183
|
+
}
|
|
184
|
+
],
|
|
185
|
+
"writes": "only with --write",
|
|
186
|
+
"json": "EditPlanJson"
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
"verb": "fix",
|
|
190
|
+
"args": "<lesson>… | --all [--write]",
|
|
191
|
+
"when": "the mechanical repairs",
|
|
192
|
+
"prints": "redundant \\explain wraps unwrapped, as a diff",
|
|
193
|
+
"flags": [
|
|
194
|
+
{
|
|
195
|
+
"flag": "--all",
|
|
196
|
+
"description": "every lesson; the ones with nothing to fix are counted"
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
"flag": "--write",
|
|
200
|
+
"description": "apply the edits; without it the diff is printed and nothing changes"
|
|
201
|
+
}
|
|
202
|
+
],
|
|
203
|
+
"writes": "only with --write",
|
|
204
|
+
"json": "EditPlanJson"
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
"verb": "new lesson",
|
|
208
|
+
"args": "<id>",
|
|
209
|
+
"when": "a chapter to start from",
|
|
210
|
+
"prints": "the files it created: the .mdx and its .checks.yml",
|
|
211
|
+
"flags": [],
|
|
212
|
+
"writes": "new files; never overwrites",
|
|
213
|
+
"json": "NewJson"
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
"verb": "new deck",
|
|
217
|
+
"args": "<lesson | part>",
|
|
218
|
+
"when": "slides to start from",
|
|
219
|
+
"prints": "the deck it drafted from the chapter (or the part's chapters)",
|
|
220
|
+
"flags": [],
|
|
221
|
+
"writes": "new files; never overwrites",
|
|
222
|
+
"json": "NewJson"
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
"verb": "new term",
|
|
226
|
+
"args": "<key>",
|
|
227
|
+
"when": "a shared notation card to start from",
|
|
228
|
+
"prints": "the card file it created",
|
|
229
|
+
"flags": [],
|
|
230
|
+
"writes": "new files; never overwrites",
|
|
231
|
+
"json": "NewJson"
|
|
232
|
+
},
|
|
233
|
+
{
|
|
234
|
+
"verb": "init-agent",
|
|
235
|
+
"args": "[--write]",
|
|
236
|
+
"when": "install the agent procedures",
|
|
237
|
+
"prints": "the skills and the rules-reviewer agent it would copy into .claude/, and a baseline AGENTS.md when the course has none; rerun after an upgrade",
|
|
238
|
+
"flags": [
|
|
239
|
+
{
|
|
240
|
+
"flag": "--write",
|
|
241
|
+
"description": "apply the edits; without it the diff is printed and nothing changes"
|
|
242
|
+
}
|
|
243
|
+
],
|
|
244
|
+
"writes": "only with --write",
|
|
245
|
+
"json": "EditPlanJson"
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
"verb": "release",
|
|
249
|
+
"args": "[major|minor|patch] [--write]",
|
|
250
|
+
"when": "cut a content release (rule C3)",
|
|
251
|
+
"prints": "## [Unreleased] in content/CHANGELOG.md becoming a dated ## [x.y.z] heading and about.version becoming x.y.z, as a diff; the bump defaults to what the section's headings imply (Breaking or Removed → major, Added → minor, else patch)",
|
|
252
|
+
"flags": [
|
|
253
|
+
{
|
|
254
|
+
"flag": "--write",
|
|
255
|
+
"description": "apply the edits; without it the diff is printed and nothing changes"
|
|
256
|
+
}
|
|
257
|
+
],
|
|
258
|
+
"writes": "only with --write",
|
|
259
|
+
"json": "EditPlanJson"
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
"verb": "verify",
|
|
263
|
+
"args": "[--e2e] [--force]",
|
|
264
|
+
"when": "is it ready to hand back",
|
|
265
|
+
"prints": "one line per step — validate:content, check --changed, astro check, the course's tests, astro build, and with --e2e the browser tests — and the tail of each failed step's log; a rerun on an unchanged tree answers from the last pass",
|
|
266
|
+
"flags": [
|
|
267
|
+
{
|
|
268
|
+
"flag": "--e2e",
|
|
269
|
+
"description": "also run the browser tests (the course's test:e2e script, or playwright test when it has a config)"
|
|
270
|
+
},
|
|
271
|
+
{
|
|
272
|
+
"flag": "--force",
|
|
273
|
+
"description": "run even when nothing changed since the last pass"
|
|
274
|
+
}
|
|
275
|
+
],
|
|
276
|
+
"writes": "what validate:content and astro build write; logs and the pass record under node_modules/.cache/explico/verify/",
|
|
277
|
+
"exit": "when a step fails",
|
|
278
|
+
"json": "VerifyReport"
|
|
279
|
+
},
|
|
280
|
+
{
|
|
281
|
+
"verb": "help",
|
|
282
|
+
"args": "[<verb>]",
|
|
283
|
+
"when": "a verb's flags and its --json shape",
|
|
284
|
+
"prints": "the usage; with a verb, its flags, what it writes, its exit code and the shape of its --json",
|
|
285
|
+
"flags": [],
|
|
286
|
+
"writes": "nothing",
|
|
287
|
+
"exit": "for an unknown verb",
|
|
288
|
+
"json": "HelpJson"
|
|
289
|
+
}
|
|
290
|
+
],
|
|
291
|
+
"error": "ErrorJson",
|
|
292
|
+
"$defs": {
|
|
293
|
+
"BindingsReport": {
|
|
294
|
+
"type": "object",
|
|
295
|
+
"properties": {
|
|
296
|
+
"lesson": {
|
|
297
|
+
"type": "string"
|
|
298
|
+
},
|
|
299
|
+
"file": {
|
|
300
|
+
"type": "string"
|
|
301
|
+
},
|
|
302
|
+
"scope": {
|
|
303
|
+
"type": "array",
|
|
304
|
+
"items": {
|
|
305
|
+
"type": "object",
|
|
306
|
+
"properties": {
|
|
307
|
+
"key": {
|
|
308
|
+
"type": "string"
|
|
309
|
+
},
|
|
310
|
+
"notation": {
|
|
311
|
+
"type": "string"
|
|
312
|
+
},
|
|
313
|
+
"scope": {
|
|
314
|
+
"enum": [
|
|
315
|
+
"shared",
|
|
316
|
+
"local"
|
|
317
|
+
]
|
|
318
|
+
}
|
|
319
|
+
},
|
|
320
|
+
"required": [
|
|
321
|
+
"key",
|
|
322
|
+
"notation",
|
|
323
|
+
"scope"
|
|
324
|
+
],
|
|
325
|
+
"additionalProperties": false
|
|
326
|
+
}
|
|
327
|
+
},
|
|
328
|
+
"spans": {
|
|
329
|
+
"type": "array",
|
|
330
|
+
"items": {
|
|
331
|
+
"$ref": "#/$defs/BindingsSpan"
|
|
332
|
+
}
|
|
333
|
+
},
|
|
334
|
+
"counts": {
|
|
335
|
+
"type": "object",
|
|
336
|
+
"properties": {
|
|
337
|
+
"spans": {
|
|
338
|
+
"type": "number"
|
|
339
|
+
},
|
|
340
|
+
"bindings": {
|
|
341
|
+
"type": "number"
|
|
342
|
+
},
|
|
343
|
+
"unresolved": {
|
|
344
|
+
"type": "number"
|
|
345
|
+
},
|
|
346
|
+
"wraps": {
|
|
347
|
+
"type": "number"
|
|
348
|
+
},
|
|
349
|
+
"redundantWraps": {
|
|
350
|
+
"type": "number"
|
|
351
|
+
},
|
|
352
|
+
"errors": {
|
|
353
|
+
"type": "number"
|
|
354
|
+
}
|
|
355
|
+
},
|
|
356
|
+
"required": [
|
|
357
|
+
"spans",
|
|
358
|
+
"bindings",
|
|
359
|
+
"unresolved",
|
|
360
|
+
"wraps",
|
|
361
|
+
"redundantWraps",
|
|
362
|
+
"errors"
|
|
363
|
+
],
|
|
364
|
+
"additionalProperties": false
|
|
365
|
+
}
|
|
366
|
+
},
|
|
367
|
+
"required": [
|
|
368
|
+
"lesson",
|
|
369
|
+
"file",
|
|
370
|
+
"scope",
|
|
371
|
+
"spans",
|
|
372
|
+
"counts"
|
|
373
|
+
],
|
|
374
|
+
"additionalProperties": false
|
|
375
|
+
},
|
|
376
|
+
"BindingsSpan": {
|
|
377
|
+
"type": "object",
|
|
378
|
+
"properties": {
|
|
379
|
+
"line": {
|
|
380
|
+
"type": "number"
|
|
381
|
+
},
|
|
382
|
+
"column": {
|
|
383
|
+
"type": "number"
|
|
384
|
+
},
|
|
385
|
+
"display": {
|
|
386
|
+
"type": "boolean"
|
|
387
|
+
},
|
|
388
|
+
"latex": {
|
|
389
|
+
"type": "string"
|
|
390
|
+
},
|
|
391
|
+
"unresolved": {
|
|
392
|
+
"type": "array",
|
|
393
|
+
"items": {
|
|
394
|
+
"$ref": "#/$defs/UnresolvedGlyph"
|
|
395
|
+
}
|
|
396
|
+
},
|
|
397
|
+
"error": {
|
|
398
|
+
"type": "string",
|
|
399
|
+
"description": "The resolver rejected the span (a KaTeX parse error or a rule it enforces, N13 say); its message."
|
|
400
|
+
},
|
|
401
|
+
"bindings": {
|
|
402
|
+
"type": "array",
|
|
403
|
+
"items": {
|
|
404
|
+
"$ref": "#/$defs/SpanBinding"
|
|
405
|
+
}
|
|
406
|
+
},
|
|
407
|
+
"wraps": {
|
|
408
|
+
"type": "array",
|
|
409
|
+
"items": {
|
|
410
|
+
"$ref": "#/$defs/ExplicitWrap"
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
},
|
|
414
|
+
"required": [
|
|
415
|
+
"line",
|
|
416
|
+
"column",
|
|
417
|
+
"display",
|
|
418
|
+
"latex",
|
|
419
|
+
"unresolved",
|
|
420
|
+
"bindings",
|
|
421
|
+
"wraps"
|
|
422
|
+
],
|
|
423
|
+
"additionalProperties": false
|
|
424
|
+
},
|
|
425
|
+
"CheckLessonResult": {
|
|
426
|
+
"type": "object",
|
|
427
|
+
"properties": {
|
|
428
|
+
"lesson": {
|
|
429
|
+
"type": "string"
|
|
430
|
+
},
|
|
431
|
+
"file": {
|
|
432
|
+
"type": "string"
|
|
433
|
+
},
|
|
434
|
+
"ok": {
|
|
435
|
+
"type": "boolean"
|
|
436
|
+
},
|
|
437
|
+
"rendered": {
|
|
438
|
+
"type": "boolean"
|
|
439
|
+
},
|
|
440
|
+
"diagnostics": {
|
|
441
|
+
"type": "array",
|
|
442
|
+
"items": {
|
|
443
|
+
"$ref": "#/$defs/CliDiagnostic"
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
},
|
|
447
|
+
"required": [
|
|
448
|
+
"lesson",
|
|
449
|
+
"file",
|
|
450
|
+
"ok",
|
|
451
|
+
"rendered",
|
|
452
|
+
"diagnostics"
|
|
453
|
+
],
|
|
454
|
+
"additionalProperties": false
|
|
455
|
+
},
|
|
456
|
+
"CheckReport": {
|
|
457
|
+
"type": "object",
|
|
458
|
+
"properties": {
|
|
459
|
+
"ok": {
|
|
460
|
+
"type": "boolean"
|
|
461
|
+
},
|
|
462
|
+
"lessons": {
|
|
463
|
+
"type": "array",
|
|
464
|
+
"items": {
|
|
465
|
+
"$ref": "#/$defs/CheckLessonResult"
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
},
|
|
469
|
+
"required": [
|
|
470
|
+
"ok",
|
|
471
|
+
"lessons"
|
|
472
|
+
],
|
|
473
|
+
"additionalProperties": false
|
|
474
|
+
},
|
|
475
|
+
"CliDiagnostic": {
|
|
476
|
+
"description": "One normalized diagnostic. `code` is `<source>:<kind>` and always stable.",
|
|
477
|
+
"type": "object",
|
|
478
|
+
"properties": {
|
|
479
|
+
"code": {
|
|
480
|
+
"type": "string"
|
|
481
|
+
},
|
|
482
|
+
"rule": {
|
|
483
|
+
"type": "string",
|
|
484
|
+
"description": "The catalog entry that owns the code — a rule ID (`N9`) or an invariant\nslug (`keyed-floats`). Absent only for a code the catalog does not know,\nwhich `tests/rules/catalog.test.ts` treats as a bug."
|
|
485
|
+
},
|
|
486
|
+
"doc": {
|
|
487
|
+
"type": "string",
|
|
488
|
+
"description": "The owner's page and anchor under `docs/authoring/`, `notation.md#n4`."
|
|
489
|
+
},
|
|
490
|
+
"severity": {
|
|
491
|
+
"$ref": "#/$defs/DiagnosticSeverity"
|
|
492
|
+
},
|
|
493
|
+
"message": {
|
|
494
|
+
"type": "string"
|
|
495
|
+
},
|
|
496
|
+
"file": {
|
|
497
|
+
"type": "string"
|
|
498
|
+
},
|
|
499
|
+
"line": {
|
|
500
|
+
"type": "number"
|
|
501
|
+
},
|
|
502
|
+
"column": {
|
|
503
|
+
"type": "number"
|
|
504
|
+
},
|
|
505
|
+
"equation": {
|
|
506
|
+
"$ref": "#/$defs/EquationLink",
|
|
507
|
+
"description": "The keyed equation the finding sits in, when the math carries a\n`\\label{eq:…}` — `{ key, href }`, the href being the anchor on the\nrendered page. A size-only finding inside a long `aligned` block is\notherwise anonymous."
|
|
508
|
+
}
|
|
509
|
+
},
|
|
510
|
+
"required": [
|
|
511
|
+
"code",
|
|
512
|
+
"severity",
|
|
513
|
+
"message"
|
|
514
|
+
],
|
|
515
|
+
"additionalProperties": false
|
|
516
|
+
},
|
|
517
|
+
"CliReference": {
|
|
518
|
+
"description": "`docs/authoring/cli-reference.json`, whole: what `content help --json` prints.",
|
|
519
|
+
"type": "object",
|
|
520
|
+
"properties": {
|
|
521
|
+
"generatedBy": {
|
|
522
|
+
"type": "string",
|
|
523
|
+
"description": "Where it came from, and that it is generated."
|
|
524
|
+
},
|
|
525
|
+
"verbs": {
|
|
526
|
+
"type": "array",
|
|
527
|
+
"items": {
|
|
528
|
+
"$ref": "#/$defs/ContentVerb"
|
|
529
|
+
}
|
|
530
|
+
},
|
|
531
|
+
"error": {
|
|
532
|
+
"type": "string",
|
|
533
|
+
"description": "The type every verb's `--json` prints when the run fails: a stable code and a message, never a stack."
|
|
534
|
+
},
|
|
535
|
+
"$defs": {
|
|
536
|
+
"type": "object",
|
|
537
|
+
"additionalProperties": {
|
|
538
|
+
"type": "object",
|
|
539
|
+
"additionalProperties": {}
|
|
540
|
+
},
|
|
541
|
+
"description": "A JSON Schema of every type a verb's `--json` prints, and of every named type inside one, by name."
|
|
542
|
+
}
|
|
543
|
+
},
|
|
544
|
+
"required": [
|
|
545
|
+
"generatedBy",
|
|
546
|
+
"verbs",
|
|
547
|
+
"error",
|
|
548
|
+
"$defs"
|
|
549
|
+
],
|
|
550
|
+
"additionalProperties": false
|
|
551
|
+
},
|
|
552
|
+
"ContentVerb": {
|
|
553
|
+
"description": "One verb's row.",
|
|
554
|
+
"type": "object",
|
|
555
|
+
"properties": {
|
|
556
|
+
"verb": {
|
|
557
|
+
"type": "string",
|
|
558
|
+
"description": "The command word(s): `symbol`, `new lesson`."
|
|
559
|
+
},
|
|
560
|
+
"args": {
|
|
561
|
+
"type": "string",
|
|
562
|
+
"description": "What follows the verb on the usage line, `--json` left out (every verb takes it)."
|
|
563
|
+
},
|
|
564
|
+
"when": {
|
|
565
|
+
"type": "string",
|
|
566
|
+
"description": "What you want to know or do when you reach for it."
|
|
567
|
+
},
|
|
568
|
+
"prints": {
|
|
569
|
+
"type": "string",
|
|
570
|
+
"description": "What it prints as text."
|
|
571
|
+
},
|
|
572
|
+
"flags": {
|
|
573
|
+
"type": "array",
|
|
574
|
+
"items": {
|
|
575
|
+
"$ref": "#/$defs/ContentVerbFlag"
|
|
576
|
+
},
|
|
577
|
+
"description": "The flags, each once; a positional argument is described in `prints` or `when`."
|
|
578
|
+
},
|
|
579
|
+
"writes": {
|
|
580
|
+
"type": "string",
|
|
581
|
+
"description": "What it changes on disk."
|
|
582
|
+
},
|
|
583
|
+
"exit": {
|
|
584
|
+
"type": "string",
|
|
585
|
+
"description": "When it exits 1, beyond a usage error."
|
|
586
|
+
},
|
|
587
|
+
"json": {
|
|
588
|
+
"type": "string",
|
|
589
|
+
"description": "The type its `--json` prints, by its exported name in `explico/compiler/cli`, `cli-main` or `cli-verify`."
|
|
590
|
+
}
|
|
591
|
+
},
|
|
592
|
+
"required": [
|
|
593
|
+
"verb",
|
|
594
|
+
"args",
|
|
595
|
+
"when",
|
|
596
|
+
"prints",
|
|
597
|
+
"flags",
|
|
598
|
+
"writes",
|
|
599
|
+
"json"
|
|
600
|
+
],
|
|
601
|
+
"additionalProperties": false
|
|
602
|
+
},
|
|
603
|
+
"ContentVerbFlag": {
|
|
604
|
+
"description": "One flag a verb takes.",
|
|
605
|
+
"type": "object",
|
|
606
|
+
"properties": {
|
|
607
|
+
"flag": {
|
|
608
|
+
"type": "string",
|
|
609
|
+
"description": "As typed: `--lesson <id>`, `--write`."
|
|
610
|
+
},
|
|
611
|
+
"description": {
|
|
612
|
+
"type": "string"
|
|
613
|
+
}
|
|
614
|
+
},
|
|
615
|
+
"required": [
|
|
616
|
+
"flag",
|
|
617
|
+
"description"
|
|
618
|
+
],
|
|
619
|
+
"additionalProperties": false
|
|
620
|
+
},
|
|
621
|
+
"ContextReport": {
|
|
622
|
+
"type": "object",
|
|
623
|
+
"properties": {
|
|
624
|
+
"lesson": {
|
|
625
|
+
"type": "object",
|
|
626
|
+
"properties": {
|
|
627
|
+
"id": {
|
|
628
|
+
"type": "string"
|
|
629
|
+
},
|
|
630
|
+
"slug": {
|
|
631
|
+
"type": "string"
|
|
632
|
+
},
|
|
633
|
+
"file": {
|
|
634
|
+
"type": "string"
|
|
635
|
+
},
|
|
636
|
+
"title": {
|
|
637
|
+
"type": "string"
|
|
638
|
+
},
|
|
639
|
+
"description": {
|
|
640
|
+
"type": "string"
|
|
641
|
+
},
|
|
642
|
+
"teaches": {
|
|
643
|
+
"type": "array",
|
|
644
|
+
"items": {
|
|
645
|
+
"type": "string"
|
|
646
|
+
}
|
|
647
|
+
},
|
|
648
|
+
"requires": {
|
|
649
|
+
"type": "array",
|
|
650
|
+
"items": {
|
|
651
|
+
"type": "string"
|
|
652
|
+
}
|
|
653
|
+
},
|
|
654
|
+
"assumptions": {
|
|
655
|
+
"type": "array",
|
|
656
|
+
"items": {
|
|
657
|
+
"type": "string"
|
|
658
|
+
}
|
|
659
|
+
},
|
|
660
|
+
"since": {
|
|
661
|
+
"anyOf": [
|
|
662
|
+
{
|
|
663
|
+
"type": "null"
|
|
664
|
+
},
|
|
665
|
+
{
|
|
666
|
+
"type": "string"
|
|
667
|
+
}
|
|
668
|
+
],
|
|
669
|
+
"description": "The version the page's content last changed in; `null` for a change not yet released (rule C5)."
|
|
670
|
+
},
|
|
671
|
+
"notationLocal": {},
|
|
672
|
+
"body": {
|
|
673
|
+
"type": "string"
|
|
674
|
+
}
|
|
675
|
+
},
|
|
676
|
+
"required": [
|
|
677
|
+
"id",
|
|
678
|
+
"slug",
|
|
679
|
+
"file",
|
|
680
|
+
"title",
|
|
681
|
+
"description",
|
|
682
|
+
"teaches",
|
|
683
|
+
"requires",
|
|
684
|
+
"assumptions",
|
|
685
|
+
"since",
|
|
686
|
+
"notationLocal",
|
|
687
|
+
"body"
|
|
688
|
+
],
|
|
689
|
+
"additionalProperties": false
|
|
690
|
+
},
|
|
691
|
+
"taughtOutcomes": {
|
|
692
|
+
"type": "array",
|
|
693
|
+
"items": {
|
|
694
|
+
"type": "object",
|
|
695
|
+
"properties": {
|
|
696
|
+
"id": {
|
|
697
|
+
"type": "string"
|
|
698
|
+
},
|
|
699
|
+
"outcome": {
|
|
700
|
+
"type": "string"
|
|
701
|
+
}
|
|
702
|
+
},
|
|
703
|
+
"required": [
|
|
704
|
+
"id",
|
|
705
|
+
"outcome"
|
|
706
|
+
],
|
|
707
|
+
"additionalProperties": false
|
|
708
|
+
}
|
|
709
|
+
},
|
|
710
|
+
"prerequisiteOutcomes": {
|
|
711
|
+
"type": "array",
|
|
712
|
+
"items": {
|
|
713
|
+
"type": "object",
|
|
714
|
+
"properties": {
|
|
715
|
+
"id": {
|
|
716
|
+
"type": "string"
|
|
717
|
+
},
|
|
718
|
+
"outcome": {
|
|
719
|
+
"type": "string"
|
|
720
|
+
}
|
|
721
|
+
},
|
|
722
|
+
"required": [
|
|
723
|
+
"id",
|
|
724
|
+
"outcome"
|
|
725
|
+
],
|
|
726
|
+
"additionalProperties": false
|
|
727
|
+
}
|
|
728
|
+
},
|
|
729
|
+
"notation": {
|
|
730
|
+
"type": "array",
|
|
731
|
+
"items": {
|
|
732
|
+
"type": "object",
|
|
733
|
+
"properties": {
|
|
734
|
+
"key": {
|
|
735
|
+
"type": "string"
|
|
736
|
+
},
|
|
737
|
+
"latex": {
|
|
738
|
+
"type": "string"
|
|
739
|
+
},
|
|
740
|
+
"meaning": {
|
|
741
|
+
"type": "string"
|
|
742
|
+
},
|
|
743
|
+
"scope": {
|
|
744
|
+
"type": "string"
|
|
745
|
+
},
|
|
746
|
+
"units": {
|
|
747
|
+
"type": "string"
|
|
748
|
+
},
|
|
749
|
+
"formula": {
|
|
750
|
+
"type": "string"
|
|
751
|
+
}
|
|
752
|
+
},
|
|
753
|
+
"required": [
|
|
754
|
+
"key",
|
|
755
|
+
"latex",
|
|
756
|
+
"meaning",
|
|
757
|
+
"scope"
|
|
758
|
+
],
|
|
759
|
+
"additionalProperties": false
|
|
760
|
+
}
|
|
761
|
+
},
|
|
762
|
+
"equations": {
|
|
763
|
+
"type": "array",
|
|
764
|
+
"items": {
|
|
765
|
+
"$ref": "#/$defs/ManifestLessonFloat"
|
|
766
|
+
}
|
|
767
|
+
},
|
|
768
|
+
"tables": {
|
|
769
|
+
"type": "array",
|
|
770
|
+
"items": {
|
|
771
|
+
"$ref": "#/$defs/ManifestLessonFloat"
|
|
772
|
+
}
|
|
773
|
+
},
|
|
774
|
+
"figures": {
|
|
775
|
+
"type": "array",
|
|
776
|
+
"items": {
|
|
777
|
+
"$ref": "#/$defs/ManifestLessonFloat"
|
|
778
|
+
}
|
|
779
|
+
},
|
|
780
|
+
"diagrams": {
|
|
781
|
+
"type": "array",
|
|
782
|
+
"items": {
|
|
783
|
+
"$ref": "#/$defs/ManifestLessonFloat"
|
|
784
|
+
}
|
|
785
|
+
},
|
|
786
|
+
"examples": {
|
|
787
|
+
"type": "array",
|
|
788
|
+
"items": {
|
|
789
|
+
"type": "object",
|
|
790
|
+
"properties": {
|
|
791
|
+
"key": {
|
|
792
|
+
"type": "string"
|
|
793
|
+
},
|
|
794
|
+
"number": {
|
|
795
|
+
"type": "string"
|
|
796
|
+
},
|
|
797
|
+
"short": {
|
|
798
|
+
"type": "string"
|
|
799
|
+
}
|
|
800
|
+
},
|
|
801
|
+
"required": [
|
|
802
|
+
"key",
|
|
803
|
+
"number"
|
|
804
|
+
],
|
|
805
|
+
"additionalProperties": false
|
|
806
|
+
},
|
|
807
|
+
"description": "Worked-example sets: `short` is the title `[[ex-key]]` names."
|
|
808
|
+
},
|
|
809
|
+
"knowledgeChecks": {
|
|
810
|
+
"type": "array",
|
|
811
|
+
"items": {
|
|
812
|
+
"type": "object",
|
|
813
|
+
"properties": {
|
|
814
|
+
"key": {
|
|
815
|
+
"type": "string"
|
|
816
|
+
},
|
|
817
|
+
"number": {
|
|
818
|
+
"type": "string"
|
|
819
|
+
},
|
|
820
|
+
"title": {
|
|
821
|
+
"type": "string"
|
|
822
|
+
}
|
|
823
|
+
},
|
|
824
|
+
"required": [
|
|
825
|
+
"key",
|
|
826
|
+
"number"
|
|
827
|
+
],
|
|
828
|
+
"additionalProperties": false
|
|
829
|
+
}
|
|
830
|
+
},
|
|
831
|
+
"sections": {
|
|
832
|
+
"type": "array",
|
|
833
|
+
"items": {
|
|
834
|
+
"type": "object",
|
|
835
|
+
"properties": {
|
|
836
|
+
"slug": {
|
|
837
|
+
"type": "string"
|
|
838
|
+
},
|
|
839
|
+
"text": {
|
|
840
|
+
"type": "string"
|
|
841
|
+
},
|
|
842
|
+
"level": {
|
|
843
|
+
"type": "number"
|
|
844
|
+
},
|
|
845
|
+
"number": {
|
|
846
|
+
"type": "string"
|
|
847
|
+
}
|
|
848
|
+
},
|
|
849
|
+
"required": [
|
|
850
|
+
"slug",
|
|
851
|
+
"text",
|
|
852
|
+
"level"
|
|
853
|
+
],
|
|
854
|
+
"additionalProperties": false
|
|
855
|
+
},
|
|
856
|
+
"description": "The top-level headings: `slug` is what `[[sec-slug]]` names."
|
|
857
|
+
},
|
|
858
|
+
"sources": {
|
|
859
|
+
"type": "array",
|
|
860
|
+
"items": {
|
|
861
|
+
"type": "object",
|
|
862
|
+
"properties": {
|
|
863
|
+
"id": {
|
|
864
|
+
"type": "string"
|
|
865
|
+
},
|
|
866
|
+
"title": {
|
|
867
|
+
"type": "string"
|
|
868
|
+
},
|
|
869
|
+
"type": {
|
|
870
|
+
"type": "string"
|
|
871
|
+
},
|
|
872
|
+
"recordLocator": {
|
|
873
|
+
"type": "string"
|
|
874
|
+
},
|
|
875
|
+
"citedLocators": {
|
|
876
|
+
"type": "array",
|
|
877
|
+
"items": {
|
|
878
|
+
"type": "string"
|
|
879
|
+
}
|
|
880
|
+
}
|
|
881
|
+
},
|
|
882
|
+
"required": [
|
|
883
|
+
"id",
|
|
884
|
+
"title",
|
|
885
|
+
"type",
|
|
886
|
+
"citedLocators"
|
|
887
|
+
],
|
|
888
|
+
"additionalProperties": false
|
|
889
|
+
}
|
|
890
|
+
},
|
|
891
|
+
"domainSignatures": {
|
|
892
|
+
"type": "array",
|
|
893
|
+
"items": {
|
|
894
|
+
"$ref": "#/$defs/DomainFileSignatures"
|
|
895
|
+
}
|
|
896
|
+
},
|
|
897
|
+
"diagnostics": {
|
|
898
|
+
"type": "array",
|
|
899
|
+
"items": {
|
|
900
|
+
"$ref": "#/$defs/CliDiagnostic"
|
|
901
|
+
}
|
|
902
|
+
},
|
|
903
|
+
"tokens": {
|
|
904
|
+
"$ref": "#/$defs/TokenCounts"
|
|
905
|
+
}
|
|
906
|
+
},
|
|
907
|
+
"required": [
|
|
908
|
+
"lesson",
|
|
909
|
+
"taughtOutcomes",
|
|
910
|
+
"prerequisiteOutcomes",
|
|
911
|
+
"notation",
|
|
912
|
+
"equations",
|
|
913
|
+
"tables",
|
|
914
|
+
"figures",
|
|
915
|
+
"diagrams",
|
|
916
|
+
"examples",
|
|
917
|
+
"knowledgeChecks",
|
|
918
|
+
"sections",
|
|
919
|
+
"sources",
|
|
920
|
+
"domainSignatures",
|
|
921
|
+
"diagnostics",
|
|
922
|
+
"tokens"
|
|
923
|
+
],
|
|
924
|
+
"additionalProperties": false
|
|
925
|
+
},
|
|
926
|
+
"DiagnosticSeverity": {
|
|
927
|
+
"enum": [
|
|
928
|
+
"error",
|
|
929
|
+
"warning",
|
|
930
|
+
"info"
|
|
931
|
+
]
|
|
932
|
+
},
|
|
933
|
+
"DiagnosticsReport": {
|
|
934
|
+
"type": "object",
|
|
935
|
+
"properties": {
|
|
936
|
+
"minimumSeverity": {
|
|
937
|
+
"$ref": "#/$defs/DiagnosticSeverity"
|
|
938
|
+
},
|
|
939
|
+
"count": {
|
|
940
|
+
"type": "number"
|
|
941
|
+
},
|
|
942
|
+
"diagnostics": {
|
|
943
|
+
"type": "array",
|
|
944
|
+
"items": {
|
|
945
|
+
"$ref": "#/$defs/CliDiagnostic"
|
|
946
|
+
}
|
|
947
|
+
}
|
|
948
|
+
},
|
|
949
|
+
"required": [
|
|
950
|
+
"minimumSeverity",
|
|
951
|
+
"count",
|
|
952
|
+
"diagnostics"
|
|
953
|
+
],
|
|
954
|
+
"additionalProperties": false
|
|
955
|
+
},
|
|
956
|
+
"DomainFileSignatures": {
|
|
957
|
+
"type": "object",
|
|
958
|
+
"properties": {
|
|
959
|
+
"file": {
|
|
960
|
+
"type": "string"
|
|
961
|
+
},
|
|
962
|
+
"signatures": {
|
|
963
|
+
"type": "array",
|
|
964
|
+
"items": {
|
|
965
|
+
"type": "string"
|
|
966
|
+
}
|
|
967
|
+
}
|
|
968
|
+
},
|
|
969
|
+
"required": [
|
|
970
|
+
"file",
|
|
971
|
+
"signatures"
|
|
972
|
+
],
|
|
973
|
+
"additionalProperties": false
|
|
974
|
+
},
|
|
975
|
+
"EditPlanJson": {
|
|
976
|
+
"description": "`--json` of `move`, `rename`, `fix` and `init-agent`: the plan, and whether `--write` applied it.",
|
|
977
|
+
"type": "object",
|
|
978
|
+
"properties": {
|
|
979
|
+
"summary": {
|
|
980
|
+
"type": "array",
|
|
981
|
+
"items": {
|
|
982
|
+
"type": "string"
|
|
983
|
+
}
|
|
984
|
+
},
|
|
985
|
+
"edits": {
|
|
986
|
+
"type": "array",
|
|
987
|
+
"items": {
|
|
988
|
+
"$ref": "#/$defs/FileEdit"
|
|
989
|
+
}
|
|
990
|
+
},
|
|
991
|
+
"next": {
|
|
992
|
+
"type": "array",
|
|
993
|
+
"items": {
|
|
994
|
+
"type": "string"
|
|
995
|
+
},
|
|
996
|
+
"description": "What to run after writing."
|
|
997
|
+
},
|
|
998
|
+
"written": {
|
|
999
|
+
"type": "boolean",
|
|
1000
|
+
"description": "True when `--write` applied the edits; false for a dry run."
|
|
1001
|
+
}
|
|
1002
|
+
},
|
|
1003
|
+
"required": [
|
|
1004
|
+
"summary",
|
|
1005
|
+
"edits",
|
|
1006
|
+
"next",
|
|
1007
|
+
"written"
|
|
1008
|
+
],
|
|
1009
|
+
"additionalProperties": false
|
|
1010
|
+
},
|
|
1011
|
+
"Editions": {
|
|
1012
|
+
"enum": [
|
|
1013
|
+
"chapter",
|
|
1014
|
+
"deck",
|
|
1015
|
+
"both"
|
|
1016
|
+
]
|
|
1017
|
+
},
|
|
1018
|
+
"Element": {
|
|
1019
|
+
"description": "The part of a page a rule is about. The first tag on an entry is primary.",
|
|
1020
|
+
"enum": [
|
|
1021
|
+
"slide",
|
|
1022
|
+
"prose",
|
|
1023
|
+
"math",
|
|
1024
|
+
"equation",
|
|
1025
|
+
"notation",
|
|
1026
|
+
"heading",
|
|
1027
|
+
"part-page",
|
|
1028
|
+
"plot",
|
|
1029
|
+
"diagram",
|
|
1030
|
+
"table",
|
|
1031
|
+
"assessment",
|
|
1032
|
+
"source",
|
|
1033
|
+
"changelog"
|
|
1034
|
+
]
|
|
1035
|
+
},
|
|
1036
|
+
"EquationLink": {
|
|
1037
|
+
"description": "The equation a finding sits in, when its math carries a `\\label{eq:…}`.\n\nA location tells you where to edit; this tells you *what you are looking\nat*. A size-only N17 finding inside a six-line `aligned` block is otherwise\nanonymous — the message names delimiters, not the result they belong to —\nso the key and the rendered page's anchor both travel with the diagnostic.",
|
|
1038
|
+
"type": "object",
|
|
1039
|
+
"properties": {
|
|
1040
|
+
"key": {
|
|
1041
|
+
"type": "string",
|
|
1042
|
+
"description": "The label's key, without the `eq:` prefix."
|
|
1043
|
+
},
|
|
1044
|
+
"href": {
|
|
1045
|
+
"type": "string",
|
|
1046
|
+
"description": "Where the reader sees it, e.g. `/l1-ar/ar1-basics/#eq-ar1-variance`."
|
|
1047
|
+
}
|
|
1048
|
+
},
|
|
1049
|
+
"required": [
|
|
1050
|
+
"key",
|
|
1051
|
+
"href"
|
|
1052
|
+
],
|
|
1053
|
+
"additionalProperties": false
|
|
1054
|
+
},
|
|
1055
|
+
"EquationReport": {
|
|
1056
|
+
"description": "One LaTeX string, resolved the way the gate will: against a lesson's\nscope, or against every shared card when no lesson is named (the table a\nnotation entry's body and formula use). The inner loop while drafting:\na few lines out, non-zero exit when the build would refuse the span.",
|
|
1057
|
+
"type": "object",
|
|
1058
|
+
"properties": {
|
|
1059
|
+
"latex": {
|
|
1060
|
+
"type": "string"
|
|
1061
|
+
},
|
|
1062
|
+
"against": {
|
|
1063
|
+
"anyOf": [
|
|
1064
|
+
{
|
|
1065
|
+
"type": "object",
|
|
1066
|
+
"properties": {
|
|
1067
|
+
"kind": {
|
|
1068
|
+
"const": "lesson"
|
|
1069
|
+
},
|
|
1070
|
+
"lesson": {
|
|
1071
|
+
"type": "string"
|
|
1072
|
+
},
|
|
1073
|
+
"cards": {
|
|
1074
|
+
"type": "number"
|
|
1075
|
+
}
|
|
1076
|
+
},
|
|
1077
|
+
"required": [
|
|
1078
|
+
"kind",
|
|
1079
|
+
"lesson",
|
|
1080
|
+
"cards"
|
|
1081
|
+
],
|
|
1082
|
+
"additionalProperties": false
|
|
1083
|
+
},
|
|
1084
|
+
{
|
|
1085
|
+
"type": "object",
|
|
1086
|
+
"properties": {
|
|
1087
|
+
"kind": {
|
|
1088
|
+
"const": "shared"
|
|
1089
|
+
},
|
|
1090
|
+
"cards": {
|
|
1091
|
+
"type": "number"
|
|
1092
|
+
}
|
|
1093
|
+
},
|
|
1094
|
+
"required": [
|
|
1095
|
+
"kind",
|
|
1096
|
+
"cards"
|
|
1097
|
+
],
|
|
1098
|
+
"additionalProperties": false
|
|
1099
|
+
}
|
|
1100
|
+
]
|
|
1101
|
+
},
|
|
1102
|
+
"unresolved": {
|
|
1103
|
+
"type": "array",
|
|
1104
|
+
"items": {
|
|
1105
|
+
"$ref": "#/$defs/UnresolvedGlyph"
|
|
1106
|
+
}
|
|
1107
|
+
},
|
|
1108
|
+
"ok": {
|
|
1109
|
+
"type": "boolean"
|
|
1110
|
+
},
|
|
1111
|
+
"error": {
|
|
1112
|
+
"type": "string",
|
|
1113
|
+
"description": "The resolver rejected the span (a KaTeX parse error or a rule it enforces, N13 say); its message."
|
|
1114
|
+
},
|
|
1115
|
+
"bindings": {
|
|
1116
|
+
"type": "array",
|
|
1117
|
+
"items": {
|
|
1118
|
+
"$ref": "#/$defs/SpanBinding"
|
|
1119
|
+
}
|
|
1120
|
+
},
|
|
1121
|
+
"wraps": {
|
|
1122
|
+
"type": "array",
|
|
1123
|
+
"items": {
|
|
1124
|
+
"$ref": "#/$defs/ExplicitWrap"
|
|
1125
|
+
}
|
|
1126
|
+
}
|
|
1127
|
+
},
|
|
1128
|
+
"required": [
|
|
1129
|
+
"latex",
|
|
1130
|
+
"against",
|
|
1131
|
+
"unresolved",
|
|
1132
|
+
"ok",
|
|
1133
|
+
"bindings",
|
|
1134
|
+
"wraps"
|
|
1135
|
+
],
|
|
1136
|
+
"additionalProperties": false
|
|
1137
|
+
},
|
|
1138
|
+
"ErrorJson": {
|
|
1139
|
+
"description": "`--json` of any verb whose run failed: a stable code and a message, never a stack.",
|
|
1140
|
+
"type": "object",
|
|
1141
|
+
"properties": {
|
|
1142
|
+
"ok": {
|
|
1143
|
+
"const": false
|
|
1144
|
+
},
|
|
1145
|
+
"error": {
|
|
1146
|
+
"type": "object",
|
|
1147
|
+
"properties": {
|
|
1148
|
+
"code": {
|
|
1149
|
+
"enum": [
|
|
1150
|
+
"unknown-command",
|
|
1151
|
+
"usage",
|
|
1152
|
+
"unknown-lesson",
|
|
1153
|
+
"unknown-kind",
|
|
1154
|
+
"invalid-id",
|
|
1155
|
+
"exists",
|
|
1156
|
+
"not-a-lesson",
|
|
1157
|
+
"no-git",
|
|
1158
|
+
"unknown-version",
|
|
1159
|
+
"migration-gap",
|
|
1160
|
+
"unknown-key",
|
|
1161
|
+
"no-changelog",
|
|
1162
|
+
"internal"
|
|
1163
|
+
],
|
|
1164
|
+
"description": "`internal` for an unexpected throw; every other code is stable."
|
|
1165
|
+
},
|
|
1166
|
+
"message": {
|
|
1167
|
+
"type": "string"
|
|
1168
|
+
}
|
|
1169
|
+
},
|
|
1170
|
+
"required": [
|
|
1171
|
+
"code",
|
|
1172
|
+
"message"
|
|
1173
|
+
],
|
|
1174
|
+
"additionalProperties": false
|
|
1175
|
+
}
|
|
1176
|
+
},
|
|
1177
|
+
"required": [
|
|
1178
|
+
"ok",
|
|
1179
|
+
"error"
|
|
1180
|
+
],
|
|
1181
|
+
"additionalProperties": false
|
|
1182
|
+
},
|
|
1183
|
+
"ExplicitWrap": {
|
|
1184
|
+
"type": "object",
|
|
1185
|
+
"properties": {
|
|
1186
|
+
"key": {
|
|
1187
|
+
"type": "string"
|
|
1188
|
+
},
|
|
1189
|
+
"inner": {
|
|
1190
|
+
"type": "string"
|
|
1191
|
+
},
|
|
1192
|
+
"redundant": {
|
|
1193
|
+
"type": "boolean",
|
|
1194
|
+
"description": "The bare `inner` resolves to exactly this card: the wrap costs tokens and binds nothing new."
|
|
1195
|
+
}
|
|
1196
|
+
},
|
|
1197
|
+
"required": [
|
|
1198
|
+
"key",
|
|
1199
|
+
"inner",
|
|
1200
|
+
"redundant"
|
|
1201
|
+
],
|
|
1202
|
+
"additionalProperties": false
|
|
1203
|
+
},
|
|
1204
|
+
"FileEdit": {
|
|
1205
|
+
"type": "object",
|
|
1206
|
+
"properties": {
|
|
1207
|
+
"file": {
|
|
1208
|
+
"type": "string",
|
|
1209
|
+
"description": "Course-relative path."
|
|
1210
|
+
},
|
|
1211
|
+
"before": {
|
|
1212
|
+
"anyOf": [
|
|
1213
|
+
{
|
|
1214
|
+
"type": "null"
|
|
1215
|
+
},
|
|
1216
|
+
{
|
|
1217
|
+
"type": "string"
|
|
1218
|
+
}
|
|
1219
|
+
],
|
|
1220
|
+
"description": "`null` when the file is created."
|
|
1221
|
+
},
|
|
1222
|
+
"after": {
|
|
1223
|
+
"anyOf": [
|
|
1224
|
+
{
|
|
1225
|
+
"type": "null"
|
|
1226
|
+
},
|
|
1227
|
+
{
|
|
1228
|
+
"type": "string"
|
|
1229
|
+
}
|
|
1230
|
+
],
|
|
1231
|
+
"description": "`null` when the file is deleted."
|
|
1232
|
+
}
|
|
1233
|
+
},
|
|
1234
|
+
"required": [
|
|
1235
|
+
"file",
|
|
1236
|
+
"before",
|
|
1237
|
+
"after"
|
|
1238
|
+
],
|
|
1239
|
+
"additionalProperties": false
|
|
1240
|
+
},
|
|
1241
|
+
"HelpJson": {
|
|
1242
|
+
"description": "`content help --json` prints the whole reference; `content help <verb> --json` that verb's rows.",
|
|
1243
|
+
"anyOf": [
|
|
1244
|
+
{
|
|
1245
|
+
"$ref": "#/$defs/CliReference"
|
|
1246
|
+
},
|
|
1247
|
+
{
|
|
1248
|
+
"$ref": "#/$defs/VerbHelpJson"
|
|
1249
|
+
}
|
|
1250
|
+
]
|
|
1251
|
+
},
|
|
1252
|
+
"ManifestLessonFloat": {
|
|
1253
|
+
"description": "One keyed float of a lesson (v21): its key and number, and its caption pair\n— `short` (an equation's `\\caption{…}`, or the `short` prop) and, for a\n`<Table>` / `<Figure>` / `<Diagram>`, the long `caption`. Each is present\nonly when the source states it as a literal.",
|
|
1254
|
+
"type": "object",
|
|
1255
|
+
"properties": {
|
|
1256
|
+
"key": {
|
|
1257
|
+
"type": "string"
|
|
1258
|
+
},
|
|
1259
|
+
"number": {
|
|
1260
|
+
"type": "string"
|
|
1261
|
+
},
|
|
1262
|
+
"short": {
|
|
1263
|
+
"type": "string"
|
|
1264
|
+
},
|
|
1265
|
+
"caption": {
|
|
1266
|
+
"type": "string"
|
|
1267
|
+
}
|
|
1268
|
+
},
|
|
1269
|
+
"required": [
|
|
1270
|
+
"key",
|
|
1271
|
+
"number"
|
|
1272
|
+
],
|
|
1273
|
+
"additionalProperties": false
|
|
1274
|
+
},
|
|
1275
|
+
"MigrateReport": {
|
|
1276
|
+
"type": "object",
|
|
1277
|
+
"properties": {
|
|
1278
|
+
"from": {
|
|
1279
|
+
"type": "string"
|
|
1280
|
+
},
|
|
1281
|
+
"to": {
|
|
1282
|
+
"type": "string"
|
|
1283
|
+
},
|
|
1284
|
+
"file": {
|
|
1285
|
+
"type": "string"
|
|
1286
|
+
},
|
|
1287
|
+
"sections": {
|
|
1288
|
+
"type": "array",
|
|
1289
|
+
"items": {
|
|
1290
|
+
"$ref": "#/$defs/MigrationSection"
|
|
1291
|
+
}
|
|
1292
|
+
},
|
|
1293
|
+
"tokens": {
|
|
1294
|
+
"type": "number"
|
|
1295
|
+
}
|
|
1296
|
+
},
|
|
1297
|
+
"required": [
|
|
1298
|
+
"from",
|
|
1299
|
+
"to",
|
|
1300
|
+
"file",
|
|
1301
|
+
"sections",
|
|
1302
|
+
"tokens"
|
|
1303
|
+
],
|
|
1304
|
+
"additionalProperties": false
|
|
1305
|
+
},
|
|
1306
|
+
"MigrationSection": {
|
|
1307
|
+
"type": "object",
|
|
1308
|
+
"properties": {
|
|
1309
|
+
"from": {
|
|
1310
|
+
"type": "string"
|
|
1311
|
+
},
|
|
1312
|
+
"to": {
|
|
1313
|
+
"type": "string"
|
|
1314
|
+
},
|
|
1315
|
+
"heading": {
|
|
1316
|
+
"type": "string"
|
|
1317
|
+
},
|
|
1318
|
+
"markdown": {
|
|
1319
|
+
"type": "string"
|
|
1320
|
+
},
|
|
1321
|
+
"tokens": {
|
|
1322
|
+
"type": "number"
|
|
1323
|
+
}
|
|
1324
|
+
},
|
|
1325
|
+
"required": [
|
|
1326
|
+
"from",
|
|
1327
|
+
"to",
|
|
1328
|
+
"heading",
|
|
1329
|
+
"markdown",
|
|
1330
|
+
"tokens"
|
|
1331
|
+
],
|
|
1332
|
+
"additionalProperties": false
|
|
1333
|
+
},
|
|
1334
|
+
"NewJson": {
|
|
1335
|
+
"description": "`--json` of `new lesson`, `new deck` and `new term`.",
|
|
1336
|
+
"type": "object",
|
|
1337
|
+
"properties": {
|
|
1338
|
+
"ok": {
|
|
1339
|
+
"const": true
|
|
1340
|
+
},
|
|
1341
|
+
"created": {
|
|
1342
|
+
"type": "array",
|
|
1343
|
+
"items": {
|
|
1344
|
+
"type": "string"
|
|
1345
|
+
},
|
|
1346
|
+
"description": "Course-relative paths of the files it created."
|
|
1347
|
+
}
|
|
1348
|
+
},
|
|
1349
|
+
"required": [
|
|
1350
|
+
"ok",
|
|
1351
|
+
"created"
|
|
1352
|
+
],
|
|
1353
|
+
"additionalProperties": false
|
|
1354
|
+
},
|
|
1355
|
+
"RetiredRule": {
|
|
1356
|
+
"description": "A rule that is no longer in force. It keeps its ID forever — an old commit\nmessage, review comment or waiver naming `N3` must stay unambiguous — but it\nis deliberately *not* a {@link RuleEntry}: nothing iterates it as a rule, it\nhas no page in `docs/authoring/`, it is absent from the settings schema and\nfrom `build/rules-in-effect.md`, and an agent never reads it while drafting.\nThe one place it is written out is the generated table in\n`docs/authoring/retired.md`, which is where a migration guide links.",
|
|
1357
|
+
"type": "object",
|
|
1358
|
+
"properties": {
|
|
1359
|
+
"id": {
|
|
1360
|
+
"anyOf": [
|
|
1361
|
+
{},
|
|
1362
|
+
{},
|
|
1363
|
+
{},
|
|
1364
|
+
{},
|
|
1365
|
+
{},
|
|
1366
|
+
{},
|
|
1367
|
+
{}
|
|
1368
|
+
]
|
|
1369
|
+
},
|
|
1370
|
+
"title": {
|
|
1371
|
+
"type": "string",
|
|
1372
|
+
"description": "The sentence the rule had, so an old reference to it still resolves."
|
|
1373
|
+
},
|
|
1374
|
+
"date": {
|
|
1375
|
+
"type": "string",
|
|
1376
|
+
"description": "`YYYY-MM-DD`."
|
|
1377
|
+
},
|
|
1378
|
+
"into": {
|
|
1379
|
+
"anyOf": [
|
|
1380
|
+
{},
|
|
1381
|
+
{},
|
|
1382
|
+
{},
|
|
1383
|
+
{},
|
|
1384
|
+
{},
|
|
1385
|
+
{},
|
|
1386
|
+
{}
|
|
1387
|
+
],
|
|
1388
|
+
"description": "The rule it was folded into, when it was folded into one."
|
|
1389
|
+
},
|
|
1390
|
+
"why": {
|
|
1391
|
+
"type": "string",
|
|
1392
|
+
"description": "Why, and what changed for an author — one or two sentences."
|
|
1393
|
+
}
|
|
1394
|
+
},
|
|
1395
|
+
"required": [
|
|
1396
|
+
"id",
|
|
1397
|
+
"title",
|
|
1398
|
+
"date",
|
|
1399
|
+
"why"
|
|
1400
|
+
],
|
|
1401
|
+
"additionalProperties": false
|
|
1402
|
+
},
|
|
1403
|
+
"RuleInEffect": {
|
|
1404
|
+
"description": "One rule as `content rules --json` reports it.",
|
|
1405
|
+
"type": "object",
|
|
1406
|
+
"properties": {
|
|
1407
|
+
"id": {
|
|
1408
|
+
"type": "string"
|
|
1409
|
+
},
|
|
1410
|
+
"kind": {
|
|
1411
|
+
"enum": [
|
|
1412
|
+
"rule",
|
|
1413
|
+
"invariant"
|
|
1414
|
+
]
|
|
1415
|
+
},
|
|
1416
|
+
"source": {
|
|
1417
|
+
"enum": [
|
|
1418
|
+
"engine",
|
|
1419
|
+
"course"
|
|
1420
|
+
],
|
|
1421
|
+
"description": "`course` for one of this course's own `X` rules; `engine` for the rest."
|
|
1422
|
+
},
|
|
1423
|
+
"title": {
|
|
1424
|
+
"type": "string"
|
|
1425
|
+
},
|
|
1426
|
+
"elements": {
|
|
1427
|
+
"type": "array",
|
|
1428
|
+
"items": {
|
|
1429
|
+
"$ref": "#/$defs/Element"
|
|
1430
|
+
}
|
|
1431
|
+
},
|
|
1432
|
+
"enforcement": {
|
|
1433
|
+
"enum": [
|
|
1434
|
+
"script",
|
|
1435
|
+
"partial",
|
|
1436
|
+
"guide",
|
|
1437
|
+
"locked"
|
|
1438
|
+
]
|
|
1439
|
+
},
|
|
1440
|
+
"enabled": {
|
|
1441
|
+
"type": "boolean"
|
|
1442
|
+
},
|
|
1443
|
+
"waivable": {
|
|
1444
|
+
"type": "boolean",
|
|
1445
|
+
"description": "May be waived at one place with `{/* explico-allow <ID>: reason *\\/}`."
|
|
1446
|
+
},
|
|
1447
|
+
"codes": {
|
|
1448
|
+
"type": "array",
|
|
1449
|
+
"items": {
|
|
1450
|
+
"type": "string"
|
|
1451
|
+
}
|
|
1452
|
+
},
|
|
1453
|
+
"settings": {
|
|
1454
|
+
"type": "object",
|
|
1455
|
+
"additionalProperties": {}
|
|
1456
|
+
},
|
|
1457
|
+
"summary": {
|
|
1458
|
+
"type": "string"
|
|
1459
|
+
},
|
|
1460
|
+
"doc": {
|
|
1461
|
+
"type": "string"
|
|
1462
|
+
},
|
|
1463
|
+
"editions": {
|
|
1464
|
+
"$ref": "#/$defs/Editions",
|
|
1465
|
+
"description": "The edition it is about: `chapter`, `deck`, or `both`."
|
|
1466
|
+
}
|
|
1467
|
+
},
|
|
1468
|
+
"required": [
|
|
1469
|
+
"id",
|
|
1470
|
+
"kind",
|
|
1471
|
+
"source",
|
|
1472
|
+
"title",
|
|
1473
|
+
"elements",
|
|
1474
|
+
"enforcement",
|
|
1475
|
+
"enabled",
|
|
1476
|
+
"waivable",
|
|
1477
|
+
"codes",
|
|
1478
|
+
"settings",
|
|
1479
|
+
"summary",
|
|
1480
|
+
"doc",
|
|
1481
|
+
"editions"
|
|
1482
|
+
],
|
|
1483
|
+
"additionalProperties": false
|
|
1484
|
+
},
|
|
1485
|
+
"RuleReport": {
|
|
1486
|
+
"description": "One rule, whole: the catalog entry as this course has it (enforcement,\ncodes, settings in effect, whether it is on) and the rule page's own\nsection, example included. About half a thousand tokens where opening the\npage costs twenty thousand.",
|
|
1487
|
+
"type": "object",
|
|
1488
|
+
"properties": {
|
|
1489
|
+
"id": {
|
|
1490
|
+
"type": "string"
|
|
1491
|
+
},
|
|
1492
|
+
"status": {
|
|
1493
|
+
"enum": [
|
|
1494
|
+
"in-effect",
|
|
1495
|
+
"retired",
|
|
1496
|
+
"unknown"
|
|
1497
|
+
]
|
|
1498
|
+
},
|
|
1499
|
+
"rule": {
|
|
1500
|
+
"$ref": "#/$defs/RuleInEffect"
|
|
1501
|
+
},
|
|
1502
|
+
"retired": {
|
|
1503
|
+
"$ref": "#/$defs/RetiredRule"
|
|
1504
|
+
},
|
|
1505
|
+
"section": {
|
|
1506
|
+
"type": "object",
|
|
1507
|
+
"properties": {
|
|
1508
|
+
"file": {
|
|
1509
|
+
"type": "string"
|
|
1510
|
+
},
|
|
1511
|
+
"markdown": {
|
|
1512
|
+
"type": "string"
|
|
1513
|
+
},
|
|
1514
|
+
"tokens": {
|
|
1515
|
+
"type": "number"
|
|
1516
|
+
}
|
|
1517
|
+
},
|
|
1518
|
+
"required": [
|
|
1519
|
+
"file",
|
|
1520
|
+
"markdown",
|
|
1521
|
+
"tokens"
|
|
1522
|
+
],
|
|
1523
|
+
"additionalProperties": false,
|
|
1524
|
+
"description": "The rule page's section for this rule, when the page is at hand."
|
|
1525
|
+
},
|
|
1526
|
+
"known": {
|
|
1527
|
+
"type": "array",
|
|
1528
|
+
"items": {
|
|
1529
|
+
"type": "string"
|
|
1530
|
+
},
|
|
1531
|
+
"description": "For `unknown`: the IDs this course has, so the caller can pick one."
|
|
1532
|
+
}
|
|
1533
|
+
},
|
|
1534
|
+
"required": [
|
|
1535
|
+
"id",
|
|
1536
|
+
"status",
|
|
1537
|
+
"known"
|
|
1538
|
+
],
|
|
1539
|
+
"additionalProperties": false
|
|
1540
|
+
},
|
|
1541
|
+
"RulesFilter": {
|
|
1542
|
+
"type": "object",
|
|
1543
|
+
"properties": {
|
|
1544
|
+
"elements": {
|
|
1545
|
+
"type": "array",
|
|
1546
|
+
"items": {
|
|
1547
|
+
"$ref": "#/$defs/Element"
|
|
1548
|
+
},
|
|
1549
|
+
"description": "Keep a rule whose elements (any, not just primary) include one of these."
|
|
1550
|
+
},
|
|
1551
|
+
"enforcement": {
|
|
1552
|
+
"enum": [
|
|
1553
|
+
"script",
|
|
1554
|
+
"partial",
|
|
1555
|
+
"guide",
|
|
1556
|
+
"locked"
|
|
1557
|
+
]
|
|
1558
|
+
},
|
|
1559
|
+
"edition": {
|
|
1560
|
+
"enum": [
|
|
1561
|
+
"chapter",
|
|
1562
|
+
"deck"
|
|
1563
|
+
],
|
|
1564
|
+
"description": "The edition the page is for: `chapter` (the default) or `deck`."
|
|
1565
|
+
}
|
|
1566
|
+
},
|
|
1567
|
+
"additionalProperties": false
|
|
1568
|
+
},
|
|
1569
|
+
"RulesJson": {
|
|
1570
|
+
"description": "`--json` of `rules`: the report without its Markdown page.",
|
|
1571
|
+
"type": "object",
|
|
1572
|
+
"properties": {
|
|
1573
|
+
"filter": {
|
|
1574
|
+
"$ref": "#/$defs/RulesFilter"
|
|
1575
|
+
},
|
|
1576
|
+
"count": {
|
|
1577
|
+
"type": "number"
|
|
1578
|
+
},
|
|
1579
|
+
"rules": {
|
|
1580
|
+
"type": "array",
|
|
1581
|
+
"items": {
|
|
1582
|
+
"$ref": "#/$defs/RuleInEffect"
|
|
1583
|
+
}
|
|
1584
|
+
}
|
|
1585
|
+
},
|
|
1586
|
+
"required": [
|
|
1587
|
+
"filter",
|
|
1588
|
+
"count",
|
|
1589
|
+
"rules"
|
|
1590
|
+
],
|
|
1591
|
+
"additionalProperties": false
|
|
1592
|
+
},
|
|
1593
|
+
"SpanBinding": {
|
|
1594
|
+
"type": "object",
|
|
1595
|
+
"properties": {
|
|
1596
|
+
"token": {
|
|
1597
|
+
"type": "string"
|
|
1598
|
+
},
|
|
1599
|
+
"key": {
|
|
1600
|
+
"type": "string"
|
|
1601
|
+
},
|
|
1602
|
+
"how": {
|
|
1603
|
+
"type": "string",
|
|
1604
|
+
"description": "The resolver's match kind; `explicit` for an `\\explain` wrap."
|
|
1605
|
+
}
|
|
1606
|
+
},
|
|
1607
|
+
"required": [
|
|
1608
|
+
"token",
|
|
1609
|
+
"key",
|
|
1610
|
+
"how"
|
|
1611
|
+
],
|
|
1612
|
+
"additionalProperties": false
|
|
1613
|
+
},
|
|
1614
|
+
"StatusReport": {
|
|
1615
|
+
"type": "object",
|
|
1616
|
+
"properties": {
|
|
1617
|
+
"knowledgeVersion": {
|
|
1618
|
+
"type": "string",
|
|
1619
|
+
"description": "The course's published knowledge version (`about.version`)."
|
|
1620
|
+
},
|
|
1621
|
+
"agentSurfaces": {
|
|
1622
|
+
"type": "array",
|
|
1623
|
+
"items": {
|
|
1624
|
+
"type": "object",
|
|
1625
|
+
"properties": {
|
|
1626
|
+
"name": {
|
|
1627
|
+
"type": "string"
|
|
1628
|
+
},
|
|
1629
|
+
"tokens": {
|
|
1630
|
+
"type": "number"
|
|
1631
|
+
}
|
|
1632
|
+
},
|
|
1633
|
+
"required": [
|
|
1634
|
+
"name",
|
|
1635
|
+
"tokens"
|
|
1636
|
+
],
|
|
1637
|
+
"additionalProperties": false
|
|
1638
|
+
},
|
|
1639
|
+
"description": "What an agent is told to read before working, in estimated tokens: the\ncourse's `AGENTS.md`, the repository's one level up when the course is a\nworkspace package, and the rules-in-effect page. A budget to watch; the\nestimate is bytes over four."
|
|
1640
|
+
},
|
|
1641
|
+
"agentGuide": {
|
|
1642
|
+
"type": "object",
|
|
1643
|
+
"properties": {
|
|
1644
|
+
"agentsFile": {
|
|
1645
|
+
"anyOf": [
|
|
1646
|
+
{
|
|
1647
|
+
"type": "null"
|
|
1648
|
+
},
|
|
1649
|
+
{
|
|
1650
|
+
"type": "string"
|
|
1651
|
+
}
|
|
1652
|
+
]
|
|
1653
|
+
},
|
|
1654
|
+
"linksGuide": {
|
|
1655
|
+
"type": "boolean"
|
|
1656
|
+
},
|
|
1657
|
+
"skillsInstalled": {
|
|
1658
|
+
"type": "boolean"
|
|
1659
|
+
}
|
|
1660
|
+
},
|
|
1661
|
+
"required": [
|
|
1662
|
+
"agentsFile",
|
|
1663
|
+
"linksGuide",
|
|
1664
|
+
"skillsInstalled"
|
|
1665
|
+
],
|
|
1666
|
+
"additionalProperties": false,
|
|
1667
|
+
"description": "Whether the course's own `AGENTS.md` points an agent at the engine's\nguide (`docs/authoring/agents.md`), and whether the procedures\n`content init-agent` installs are in `.claude/`."
|
|
1668
|
+
},
|
|
1669
|
+
"pageVersions": {
|
|
1670
|
+
"type": "object",
|
|
1671
|
+
"properties": {
|
|
1672
|
+
"tracked": {
|
|
1673
|
+
"type": "number"
|
|
1674
|
+
},
|
|
1675
|
+
"unreleased": {
|
|
1676
|
+
"type": "array",
|
|
1677
|
+
"items": {
|
|
1678
|
+
"type": "string"
|
|
1679
|
+
}
|
|
1680
|
+
}
|
|
1681
|
+
},
|
|
1682
|
+
"required": [
|
|
1683
|
+
"tracked",
|
|
1684
|
+
"unreleased"
|
|
1685
|
+
],
|
|
1686
|
+
"additionalProperties": false,
|
|
1687
|
+
"description": "Rule C5: how many chapters and part pages carry a version of their own,\nand the slugs of those with a change `## [Unreleased]` has not released."
|
|
1688
|
+
},
|
|
1689
|
+
"counts": {
|
|
1690
|
+
"type": "object",
|
|
1691
|
+
"properties": {
|
|
1692
|
+
"lessons": {
|
|
1693
|
+
"type": "number"
|
|
1694
|
+
},
|
|
1695
|
+
"competencies": {
|
|
1696
|
+
"type": "number"
|
|
1697
|
+
},
|
|
1698
|
+
"assessments": {
|
|
1699
|
+
"type": "number"
|
|
1700
|
+
},
|
|
1701
|
+
"sources": {
|
|
1702
|
+
"type": "number"
|
|
1703
|
+
},
|
|
1704
|
+
"tracks": {
|
|
1705
|
+
"type": "number"
|
|
1706
|
+
},
|
|
1707
|
+
"notationDefinitions": {
|
|
1708
|
+
"type": "number"
|
|
1709
|
+
},
|
|
1710
|
+
"keyedEquations": {
|
|
1711
|
+
"type": "number"
|
|
1712
|
+
},
|
|
1713
|
+
"keyedTables": {
|
|
1714
|
+
"type": "number"
|
|
1715
|
+
},
|
|
1716
|
+
"keyedFigures": {
|
|
1717
|
+
"type": "number"
|
|
1718
|
+
},
|
|
1719
|
+
"keyedDiagrams": {
|
|
1720
|
+
"type": "number"
|
|
1721
|
+
},
|
|
1722
|
+
"keyedExamples": {
|
|
1723
|
+
"type": "number"
|
|
1724
|
+
}
|
|
1725
|
+
},
|
|
1726
|
+
"required": [
|
|
1727
|
+
"lessons",
|
|
1728
|
+
"competencies",
|
|
1729
|
+
"assessments",
|
|
1730
|
+
"sources",
|
|
1731
|
+
"tracks",
|
|
1732
|
+
"notationDefinitions",
|
|
1733
|
+
"keyedEquations",
|
|
1734
|
+
"keyedTables",
|
|
1735
|
+
"keyedFigures",
|
|
1736
|
+
"keyedDiagrams",
|
|
1737
|
+
"keyedExamples"
|
|
1738
|
+
],
|
|
1739
|
+
"additionalProperties": false
|
|
1740
|
+
},
|
|
1741
|
+
"orphans": {
|
|
1742
|
+
"type": "array",
|
|
1743
|
+
"items": {
|
|
1744
|
+
"$ref": "#/$defs/CliDiagnostic"
|
|
1745
|
+
}
|
|
1746
|
+
},
|
|
1747
|
+
"diagnostics": {
|
|
1748
|
+
"type": "object",
|
|
1749
|
+
"properties": {
|
|
1750
|
+
"errors": {
|
|
1751
|
+
"type": "number"
|
|
1752
|
+
},
|
|
1753
|
+
"warnings": {
|
|
1754
|
+
"type": "number"
|
|
1755
|
+
},
|
|
1756
|
+
"infos": {
|
|
1757
|
+
"type": "number"
|
|
1758
|
+
}
|
|
1759
|
+
},
|
|
1760
|
+
"required": [
|
|
1761
|
+
"errors",
|
|
1762
|
+
"warnings",
|
|
1763
|
+
"infos"
|
|
1764
|
+
],
|
|
1765
|
+
"additionalProperties": false
|
|
1766
|
+
}
|
|
1767
|
+
},
|
|
1768
|
+
"required": [
|
|
1769
|
+
"knowledgeVersion",
|
|
1770
|
+
"agentSurfaces",
|
|
1771
|
+
"agentGuide",
|
|
1772
|
+
"pageVersions",
|
|
1773
|
+
"counts",
|
|
1774
|
+
"orphans",
|
|
1775
|
+
"diagnostics"
|
|
1776
|
+
],
|
|
1777
|
+
"additionalProperties": false
|
|
1778
|
+
},
|
|
1779
|
+
"SymbolHit": {
|
|
1780
|
+
"type": "object",
|
|
1781
|
+
"properties": {
|
|
1782
|
+
"tier": {
|
|
1783
|
+
"$ref": "#/$defs/SymbolTier"
|
|
1784
|
+
},
|
|
1785
|
+
"key": {
|
|
1786
|
+
"type": "string"
|
|
1787
|
+
},
|
|
1788
|
+
"latex": {
|
|
1789
|
+
"type": "string"
|
|
1790
|
+
},
|
|
1791
|
+
"label": {
|
|
1792
|
+
"type": "string"
|
|
1793
|
+
},
|
|
1794
|
+
"meaning": {
|
|
1795
|
+
"type": "string"
|
|
1796
|
+
},
|
|
1797
|
+
"units": {
|
|
1798
|
+
"type": "string"
|
|
1799
|
+
},
|
|
1800
|
+
"matchedBy": {
|
|
1801
|
+
"enum": [
|
|
1802
|
+
"latex",
|
|
1803
|
+
"alias",
|
|
1804
|
+
"key"
|
|
1805
|
+
],
|
|
1806
|
+
"description": "How the query matched: the latex as written, an alias, or the key."
|
|
1807
|
+
},
|
|
1808
|
+
"where": {
|
|
1809
|
+
"type": "string",
|
|
1810
|
+
"description": "shared: the entry file; local: the lesson id; gloss: the owning card."
|
|
1811
|
+
},
|
|
1812
|
+
"boundIn": {
|
|
1813
|
+
"type": "array",
|
|
1814
|
+
"items": {
|
|
1815
|
+
"type": "string"
|
|
1816
|
+
},
|
|
1817
|
+
"description": "shared only: the pages (lessons and overview pages) whose bundle binds the card."
|
|
1818
|
+
}
|
|
1819
|
+
},
|
|
1820
|
+
"required": [
|
|
1821
|
+
"tier",
|
|
1822
|
+
"key",
|
|
1823
|
+
"latex",
|
|
1824
|
+
"label",
|
|
1825
|
+
"matchedBy",
|
|
1826
|
+
"where"
|
|
1827
|
+
],
|
|
1828
|
+
"additionalProperties": false
|
|
1829
|
+
},
|
|
1830
|
+
"SymbolReport": {
|
|
1831
|
+
"type": "object",
|
|
1832
|
+
"properties": {
|
|
1833
|
+
"query": {
|
|
1834
|
+
"type": "string"
|
|
1835
|
+
},
|
|
1836
|
+
"shared": {
|
|
1837
|
+
"type": "array",
|
|
1838
|
+
"items": {
|
|
1839
|
+
"$ref": "#/$defs/SymbolHit"
|
|
1840
|
+
}
|
|
1841
|
+
},
|
|
1842
|
+
"local": {
|
|
1843
|
+
"type": "array",
|
|
1844
|
+
"items": {
|
|
1845
|
+
"$ref": "#/$defs/SymbolHit"
|
|
1846
|
+
}
|
|
1847
|
+
},
|
|
1848
|
+
"glosses": {
|
|
1849
|
+
"type": "array",
|
|
1850
|
+
"items": {
|
|
1851
|
+
"$ref": "#/$defs/SymbolHit"
|
|
1852
|
+
}
|
|
1853
|
+
},
|
|
1854
|
+
"contains": {
|
|
1855
|
+
"type": "array",
|
|
1856
|
+
"items": {
|
|
1857
|
+
"$ref": "#/$defs/SymbolHit"
|
|
1858
|
+
},
|
|
1859
|
+
"description": "Entries whose latex contains the query as a glyph, not matched above."
|
|
1860
|
+
},
|
|
1861
|
+
"containsTotal": {
|
|
1862
|
+
"type": "number",
|
|
1863
|
+
"description": "How many `contains` candidates there were before the list was capped."
|
|
1864
|
+
}
|
|
1865
|
+
},
|
|
1866
|
+
"required": [
|
|
1867
|
+
"query",
|
|
1868
|
+
"shared",
|
|
1869
|
+
"local",
|
|
1870
|
+
"glosses",
|
|
1871
|
+
"contains",
|
|
1872
|
+
"containsTotal"
|
|
1873
|
+
],
|
|
1874
|
+
"additionalProperties": false
|
|
1875
|
+
},
|
|
1876
|
+
"SymbolTier": {
|
|
1877
|
+
"description": "Where a hit is defined: a shared card, a lesson's `notation.local`, or a card's gloss.",
|
|
1878
|
+
"enum": [
|
|
1879
|
+
"shared",
|
|
1880
|
+
"local",
|
|
1881
|
+
"gloss"
|
|
1882
|
+
]
|
|
1883
|
+
},
|
|
1884
|
+
"TokenCounts": {
|
|
1885
|
+
"type": "object",
|
|
1886
|
+
"properties": {
|
|
1887
|
+
"context": {
|
|
1888
|
+
"type": "number",
|
|
1889
|
+
"description": "Tokens in the serialized `content context` payload."
|
|
1890
|
+
},
|
|
1891
|
+
"docSet": {
|
|
1892
|
+
"type": "number",
|
|
1893
|
+
"description": "`README.md` + `AGENTS.md` + `docs/architecture.md`."
|
|
1894
|
+
},
|
|
1895
|
+
"corpus": {
|
|
1896
|
+
"type": "number",
|
|
1897
|
+
"description": "Every file under `content/`."
|
|
1898
|
+
},
|
|
1899
|
+
"ratio": {
|
|
1900
|
+
"type": "number",
|
|
1901
|
+
"description": "`context / (docSet + corpus)`, rounded to 4 dp."
|
|
1902
|
+
}
|
|
1903
|
+
},
|
|
1904
|
+
"required": [
|
|
1905
|
+
"context",
|
|
1906
|
+
"docSet",
|
|
1907
|
+
"corpus",
|
|
1908
|
+
"ratio"
|
|
1909
|
+
],
|
|
1910
|
+
"additionalProperties": false
|
|
1911
|
+
},
|
|
1912
|
+
"UnresolvedGlyph": {
|
|
1913
|
+
"type": "object",
|
|
1914
|
+
"properties": {
|
|
1915
|
+
"token": {
|
|
1916
|
+
"type": "string"
|
|
1917
|
+
},
|
|
1918
|
+
"suspended": {
|
|
1919
|
+
"type": "string"
|
|
1920
|
+
},
|
|
1921
|
+
"lenders": {
|
|
1922
|
+
"type": "array",
|
|
1923
|
+
"items": {
|
|
1924
|
+
"type": "string"
|
|
1925
|
+
},
|
|
1926
|
+
"description": "Rule N23: indexed entries whose base this bare letter is; none lends it a card."
|
|
1927
|
+
},
|
|
1928
|
+
"defined": {
|
|
1929
|
+
"type": "array",
|
|
1930
|
+
"items": {
|
|
1931
|
+
"type": "object",
|
|
1932
|
+
"properties": {
|
|
1933
|
+
"tier": {
|
|
1934
|
+
"$ref": "#/$defs/SymbolTier"
|
|
1935
|
+
},
|
|
1936
|
+
"key": {
|
|
1937
|
+
"type": "string"
|
|
1938
|
+
},
|
|
1939
|
+
"where": {
|
|
1940
|
+
"type": "string"
|
|
1941
|
+
}
|
|
1942
|
+
},
|
|
1943
|
+
"required": [
|
|
1944
|
+
"tier",
|
|
1945
|
+
"key",
|
|
1946
|
+
"where"
|
|
1947
|
+
],
|
|
1948
|
+
"additionalProperties": false
|
|
1949
|
+
},
|
|
1950
|
+
"description": "Where `content symbol` finds the token defined: exact hits, then near misses."
|
|
1951
|
+
},
|
|
1952
|
+
"near": {
|
|
1953
|
+
"type": "array",
|
|
1954
|
+
"items": {
|
|
1955
|
+
"type": "object",
|
|
1956
|
+
"properties": {
|
|
1957
|
+
"latex": {
|
|
1958
|
+
"type": "string"
|
|
1959
|
+
},
|
|
1960
|
+
"key": {
|
|
1961
|
+
"type": "string"
|
|
1962
|
+
}
|
|
1963
|
+
},
|
|
1964
|
+
"required": [
|
|
1965
|
+
"latex",
|
|
1966
|
+
"key"
|
|
1967
|
+
],
|
|
1968
|
+
"additionalProperties": false
|
|
1969
|
+
}
|
|
1970
|
+
}
|
|
1971
|
+
},
|
|
1972
|
+
"required": [
|
|
1973
|
+
"token",
|
|
1974
|
+
"defined",
|
|
1975
|
+
"near"
|
|
1976
|
+
],
|
|
1977
|
+
"additionalProperties": false
|
|
1978
|
+
},
|
|
1979
|
+
"VerbHelp": {
|
|
1980
|
+
"description": "One verb's row, its usage line, and a self-contained JSON Schema of its `--json`.",
|
|
1981
|
+
"type": "object",
|
|
1982
|
+
"properties": {
|
|
1983
|
+
"usage": {
|
|
1984
|
+
"type": "string"
|
|
1985
|
+
},
|
|
1986
|
+
"schema": {
|
|
1987
|
+
"type": "object",
|
|
1988
|
+
"additionalProperties": {}
|
|
1989
|
+
},
|
|
1990
|
+
"verb": {
|
|
1991
|
+
"type": "string",
|
|
1992
|
+
"description": "The command word(s): `symbol`, `new lesson`."
|
|
1993
|
+
},
|
|
1994
|
+
"args": {
|
|
1995
|
+
"type": "string",
|
|
1996
|
+
"description": "What follows the verb on the usage line, `--json` left out (every verb takes it)."
|
|
1997
|
+
},
|
|
1998
|
+
"when": {
|
|
1999
|
+
"type": "string",
|
|
2000
|
+
"description": "What you want to know or do when you reach for it."
|
|
2001
|
+
},
|
|
2002
|
+
"prints": {
|
|
2003
|
+
"type": "string",
|
|
2004
|
+
"description": "What it prints as text."
|
|
2005
|
+
},
|
|
2006
|
+
"flags": {
|
|
2007
|
+
"type": "array",
|
|
2008
|
+
"items": {
|
|
2009
|
+
"$ref": "#/$defs/ContentVerbFlag"
|
|
2010
|
+
},
|
|
2011
|
+
"description": "The flags, each once; a positional argument is described in `prints` or `when`."
|
|
2012
|
+
},
|
|
2013
|
+
"writes": {
|
|
2014
|
+
"type": "string",
|
|
2015
|
+
"description": "What it changes on disk."
|
|
2016
|
+
},
|
|
2017
|
+
"exit": {
|
|
2018
|
+
"type": "string",
|
|
2019
|
+
"description": "When it exits 1, beyond a usage error."
|
|
2020
|
+
},
|
|
2021
|
+
"json": {
|
|
2022
|
+
"type": "string",
|
|
2023
|
+
"description": "The type its `--json` prints, by its exported name in `explico/compiler/cli`, `cli-main` or `cli-verify`."
|
|
2024
|
+
}
|
|
2025
|
+
},
|
|
2026
|
+
"required": [
|
|
2027
|
+
"usage",
|
|
2028
|
+
"schema",
|
|
2029
|
+
"verb",
|
|
2030
|
+
"args",
|
|
2031
|
+
"when",
|
|
2032
|
+
"prints",
|
|
2033
|
+
"flags",
|
|
2034
|
+
"writes",
|
|
2035
|
+
"json"
|
|
2036
|
+
],
|
|
2037
|
+
"additionalProperties": false
|
|
2038
|
+
},
|
|
2039
|
+
"VerbHelpJson": {
|
|
2040
|
+
"description": "What `content help <verb> --json` prints: every verb the word names (`new` names three).",
|
|
2041
|
+
"type": "object",
|
|
2042
|
+
"properties": {
|
|
2043
|
+
"verbs": {
|
|
2044
|
+
"type": "array",
|
|
2045
|
+
"items": {
|
|
2046
|
+
"$ref": "#/$defs/VerbHelp"
|
|
2047
|
+
}
|
|
2048
|
+
}
|
|
2049
|
+
},
|
|
2050
|
+
"required": [
|
|
2051
|
+
"verbs"
|
|
2052
|
+
],
|
|
2053
|
+
"additionalProperties": false
|
|
2054
|
+
},
|
|
2055
|
+
"VerifyReport": {
|
|
2056
|
+
"type": "object",
|
|
2057
|
+
"properties": {
|
|
2058
|
+
"ok": {
|
|
2059
|
+
"type": "boolean"
|
|
2060
|
+
},
|
|
2061
|
+
"cached": {
|
|
2062
|
+
"type": "boolean",
|
|
2063
|
+
"description": "True when the tree is unchanged since a pass that covered as much: nothing ran, `steps` are that pass's."
|
|
2064
|
+
},
|
|
2065
|
+
"since": {
|
|
2066
|
+
"type": "string",
|
|
2067
|
+
"description": "When the recorded pass ran, for a cached answer (ISO 8601)."
|
|
2068
|
+
},
|
|
2069
|
+
"tree": {
|
|
2070
|
+
"anyOf": [
|
|
2071
|
+
{
|
|
2072
|
+
"type": "null"
|
|
2073
|
+
},
|
|
2074
|
+
{
|
|
2075
|
+
"type": "string"
|
|
2076
|
+
}
|
|
2077
|
+
],
|
|
2078
|
+
"description": "The hash of the tree the run left, or `null` outside a git repository (then nothing is recorded)."
|
|
2079
|
+
},
|
|
2080
|
+
"e2e": {
|
|
2081
|
+
"type": "boolean",
|
|
2082
|
+
"description": "Whether the browser tests were part of the run."
|
|
2083
|
+
},
|
|
2084
|
+
"steps": {
|
|
2085
|
+
"type": "array",
|
|
2086
|
+
"items": {
|
|
2087
|
+
"$ref": "#/$defs/VerifyStep"
|
|
2088
|
+
}
|
|
2089
|
+
}
|
|
2090
|
+
},
|
|
2091
|
+
"required": [
|
|
2092
|
+
"ok",
|
|
2093
|
+
"cached",
|
|
2094
|
+
"tree",
|
|
2095
|
+
"e2e",
|
|
2096
|
+
"steps"
|
|
2097
|
+
],
|
|
2098
|
+
"additionalProperties": false
|
|
2099
|
+
},
|
|
2100
|
+
"VerifyStep": {
|
|
2101
|
+
"type": "object",
|
|
2102
|
+
"properties": {
|
|
2103
|
+
"name": {
|
|
2104
|
+
"$ref": "#/$defs/VerifyStepName"
|
|
2105
|
+
},
|
|
2106
|
+
"status": {
|
|
2107
|
+
"enum": [
|
|
2108
|
+
"pass",
|
|
2109
|
+
"fail",
|
|
2110
|
+
"skipped"
|
|
2111
|
+
]
|
|
2112
|
+
},
|
|
2113
|
+
"command": {
|
|
2114
|
+
"type": "string",
|
|
2115
|
+
"description": "The command it ran, as it would be typed; absent for a skipped step."
|
|
2116
|
+
},
|
|
2117
|
+
"reason": {
|
|
2118
|
+
"type": "string",
|
|
2119
|
+
"description": "Why it was skipped, or why it could not start."
|
|
2120
|
+
},
|
|
2121
|
+
"seconds": {
|
|
2122
|
+
"type": "number"
|
|
2123
|
+
},
|
|
2124
|
+
"log": {
|
|
2125
|
+
"type": "string",
|
|
2126
|
+
"description": "Course-relative path of its whole output."
|
|
2127
|
+
},
|
|
2128
|
+
"tail": {
|
|
2129
|
+
"type": "array",
|
|
2130
|
+
"items": {
|
|
2131
|
+
"type": "string"
|
|
2132
|
+
},
|
|
2133
|
+
"description": "The last lines of the output of a failed step."
|
|
2134
|
+
}
|
|
2135
|
+
},
|
|
2136
|
+
"required": [
|
|
2137
|
+
"name",
|
|
2138
|
+
"status"
|
|
2139
|
+
],
|
|
2140
|
+
"additionalProperties": false
|
|
2141
|
+
},
|
|
2142
|
+
"VerifyStepName": {
|
|
2143
|
+
"enum": [
|
|
2144
|
+
"validate:content",
|
|
2145
|
+
"check --changed",
|
|
2146
|
+
"astro check",
|
|
2147
|
+
"tests",
|
|
2148
|
+
"astro build",
|
|
2149
|
+
"e2e"
|
|
2150
|
+
]
|
|
2151
|
+
},
|
|
2152
|
+
"WarningsReport": {
|
|
2153
|
+
"type": "object",
|
|
2154
|
+
"properties": {
|
|
2155
|
+
"count": {
|
|
2156
|
+
"type": "number"
|
|
2157
|
+
},
|
|
2158
|
+
"warnings": {
|
|
2159
|
+
"type": "array",
|
|
2160
|
+
"items": {
|
|
2161
|
+
"$ref": "#/$defs/CliDiagnostic"
|
|
2162
|
+
}
|
|
2163
|
+
}
|
|
2164
|
+
},
|
|
2165
|
+
"required": [
|
|
2166
|
+
"count",
|
|
2167
|
+
"warnings"
|
|
2168
|
+
],
|
|
2169
|
+
"additionalProperties": false
|
|
2170
|
+
}
|
|
2171
|
+
}
|
|
2172
|
+
}
|