@antoneeo/course-creator 0.1.0-beta.14 → 0.1.0-beta.16

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.
@@ -1,37 +1,38 @@
1
- {
2
- "_comment": "Generated by shared_files.py --update. IDENTICAL in every distribution of the family: if two copies of this file differ, the spine has diverged. Never edit by hand.",
3
- "files": {
4
- "LICENSE": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30",
5
- "NOTICE": "8414f424f7c1db19d89d74286fd2d6b1acdd9eedde910fa57a16d6835602e4bd",
6
- "dispatch.md": "d127057198415f81b921c74e3234a47d5794a2af662eeadaf3dff3cc1739ebc8",
7
- "docs_site/app.js": "ce9ed4341f7d24b648dee7531700d09f4af07f7e9ffc4be90aff29ecc276f27f",
8
- "docs_site/index.html": "2b64167470f754e46fa4bb4e73a3d2c34ee632d91fe2f17705a58d18b5018af5",
9
- "docs_site/strings.js": "440c11830f87602152422766b6d5b84da904150c37b0b6347e2ad53a7fec62b8",
10
- "docs_site/style.css": "1cbd71eb2e62bb9251ecb62796fe4cecf6a78eecf2f9a7493703290ae55d1244",
11
- "guides.md": "8fd85ab176d01ad7fc4c72020afa062f37f3c2f6b380f064c20f114c0680b46b",
12
- "memory.md": "765c8cf34e9161143d6f8b982106251de0ac7f4f6f5d768336f3e4b4b150823e",
13
- "review.md": "c8564114171feaeaa149247d2202005c2880d4507feb0d3a51acf513964f738c",
14
- "routing.md": "5116e8dbd3b215919b897506f28917ac8f1c44cd91f8b64ec901048320e6c1f6",
15
- "scripts/docs_site.py": "bfc7a521142251b85b229e1873ccf2e375bb5c7f1990cef574e1a78ef14f0091",
16
- "scripts/entry_point.py": "4a560d4d41db989d3426182f1b24270cbb934b3db0f3246c700578a4ed93089b",
17
- "scripts/knowledge.py": "6047deb7a2be4cf9ef2949cbcf8a52a8ea61500f4e12d203f1c58076540d50ab",
18
- "scripts/sdlc_core.py": "099151cc45d295218df1fa83d893ebf4b095c4a633bc1f2018b7ea6faad3117c",
19
- "scripts/shared_files.py": "ebc3c6cf207ccd98ec70f7565a12cb7c54da5c8a1a759bae7e62bdb74cb5c6e2",
20
- "scripts/test_audit_refs.py": "5c207be46da566db47069b08373195e748fca19c047418f09cc2f78841dfd9a5",
21
- "scripts/test_chronology.py": "ef482ed2261822778c69ade5dae6c875eca97ae8ef4f47b60bc262ac857eb95c",
22
- "scripts/test_constraints.py": "4be3bbff7032e53b464de2f4e2eb18a824311adb2359c77fb9be065aded09239",
23
- "scripts/test_docs_root.py": "19753e0316c0df63ed321d24b411a9ff36eea2058421fd69fc57e507d75566d0",
24
- "scripts/test_docs_site.py": "391ec5c635c67f0fbefe458426e352b5b1ef626ae65c099b1e8e1db491d0a5f9",
25
- "scripts/test_domain_rules.py": "33542b5dc2bb77c05ece55cf0446065cc4226c763ef5e040aa77364f226937bb",
26
- "scripts/test_drift.py": "c7b7121a8a308b0f3fe12c0c0c346444e632b7aaeff47dc8818b621e5c20cb38",
27
- "scripts/test_guide_check.py": "19c7a6f009fa1b7f70b0beba059b97fa05e69255f6b2dec8829a87bd9fba283f",
28
- "scripts/test_merge_safety.py": "8b9241077bf7ecd6dd335907c640044ab38968ff4c9fdc464450e732cb77adf4",
29
- "scripts/test_migrate.py": "c129823bf4feb0614acd975351632a6ae62d7896a0ef32724419a8e9335e3110",
30
- "scripts/test_plan.py": "4c011a63aa834b55e9c5d13fb4ea76b131b742356001364b0a508435ba013e27",
31
- "scripts/test_project_memory.py": "2cb85cef01161d881a11d84cfe9ebb72915104e8d1822e4de739f7d00ae6cd59",
32
- "scripts/test_session_start.py": "723f748c0aef461d1051191dbd18f4ea5697a1e0467df73bccb0af8024d17f56",
33
- "scripts/test_skill_invariants.py": "47d116563a37a16b7d25b322020dd730eecac8cf4cfc7916b877df4e729f8373",
34
- "scripts/test_verdict.py": "8620be2f962f900e9fa0f979f80984671baa373de1ce3f29045104d813e71844",
35
- "vision.md": "a19a7d7d5044215b726b66f74e422c9cdedcc856c0a53151f20a6d9840b8f6c4"
36
- }
37
- }
1
+ {
2
+ "_comment": "Generated by shared_files.py --update. IDENTICAL in every distribution of the family: if two copies of this file differ, the spine has diverged. Never edit by hand.",
3
+ "files": {
4
+ "LICENSE": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30",
5
+ "NOTICE": "8414f424f7c1db19d89d74286fd2d6b1acdd9eedde910fa57a16d6835602e4bd",
6
+ "dispatch.md": "d127057198415f81b921c74e3234a47d5794a2af662eeadaf3dff3cc1739ebc8",
7
+ "docs_site/app.js": "ce9ed4341f7d24b648dee7531700d09f4af07f7e9ffc4be90aff29ecc276f27f",
8
+ "docs_site/index.html": "2b64167470f754e46fa4bb4e73a3d2c34ee632d91fe2f17705a58d18b5018af5",
9
+ "docs_site/strings.js": "440c11830f87602152422766b6d5b84da904150c37b0b6347e2ad53a7fec62b8",
10
+ "docs_site/style.css": "1cbd71eb2e62bb9251ecb62796fe4cecf6a78eecf2f9a7493703290ae55d1244",
11
+ "guides.md": "8fd85ab176d01ad7fc4c72020afa062f37f3c2f6b380f064c20f114c0680b46b",
12
+ "memory.md": "765c8cf34e9161143d6f8b982106251de0ac7f4f6f5d768336f3e4b4b150823e",
13
+ "review.md": "de1a2e083dc284c54283c9e55d1c3a1500f6f152a8948ca475664712a81577af",
14
+ "routing.md": "5116e8dbd3b215919b897506f28917ac8f1c44cd91f8b64ec901048320e6c1f6",
15
+ "scripts/docs_site.py": "bfc7a521142251b85b229e1873ccf2e375bb5c7f1990cef574e1a78ef14f0091",
16
+ "scripts/entry_point.py": "4a560d4d41db989d3426182f1b24270cbb934b3db0f3246c700578a4ed93089b",
17
+ "scripts/knowledge.py": "6047deb7a2be4cf9ef2949cbcf8a52a8ea61500f4e12d203f1c58076540d50ab",
18
+ "scripts/sdlc_core.py": "582eb73e1b9989bb952c72721bd80b5bd76447955bca85bfd789ea3e94a77afc",
19
+ "scripts/shared_files.py": "d360c6018c602788dd96194bcc0f8e8409b140671857ae50ec15acee882eb51e",
20
+ "scripts/test_audit_refs.py": "5c207be46da566db47069b08373195e748fca19c047418f09cc2f78841dfd9a5",
21
+ "scripts/test_chronology.py": "ef482ed2261822778c69ade5dae6c875eca97ae8ef4f47b60bc262ac857eb95c",
22
+ "scripts/test_constraints.py": "4be3bbff7032e53b464de2f4e2eb18a824311adb2359c77fb9be065aded09239",
23
+ "scripts/test_design_approval.py": "191856214cb0b4ab8606b57496cf54742568e3bb4bfa0d8f0c64889f2e2d1e63",
24
+ "scripts/test_docs_root.py": "19753e0316c0df63ed321d24b411a9ff36eea2058421fd69fc57e507d75566d0",
25
+ "scripts/test_docs_site.py": "391ec5c635c67f0fbefe458426e352b5b1ef626ae65c099b1e8e1db491d0a5f9",
26
+ "scripts/test_domain_rules.py": "33542b5dc2bb77c05ece55cf0446065cc4226c763ef5e040aa77364f226937bb",
27
+ "scripts/test_drift.py": "c7b7121a8a308b0f3fe12c0c0c346444e632b7aaeff47dc8818b621e5c20cb38",
28
+ "scripts/test_guide_check.py": "19c7a6f009fa1b7f70b0beba059b97fa05e69255f6b2dec8829a87bd9fba283f",
29
+ "scripts/test_merge_safety.py": "8b9241077bf7ecd6dd335907c640044ab38968ff4c9fdc464450e732cb77adf4",
30
+ "scripts/test_migrate.py": "c129823bf4feb0614acd975351632a6ae62d7896a0ef32724419a8e9335e3110",
31
+ "scripts/test_plan.py": "4c011a63aa834b55e9c5d13fb4ea76b131b742356001364b0a508435ba013e27",
32
+ "scripts/test_project_memory.py": "2cb85cef01161d881a11d84cfe9ebb72915104e8d1822e4de739f7d00ae6cd59",
33
+ "scripts/test_session_start.py": "723f748c0aef461d1051191dbd18f4ea5697a1e0467df73bccb0af8024d17f56",
34
+ "scripts/test_skill_invariants.py": "47d116563a37a16b7d25b322020dd730eecac8cf4cfc7916b877df4e729f8373",
35
+ "scripts/test_verdict.py": "8620be2f962f900e9fa0f979f80984671baa373de1ce3f29045104d813e71844",
36
+ "vision.md": "a19a7d7d5044215b726b66f74e422c9cdedcc856c0a53151f20a6d9840b8f6c4"
37
+ }
38
+ }
@@ -59,7 +59,7 @@ Value contribution: <why this step is needed for the module objective>
59
59
  - ai_docs/.../sources.md#claim-1
60
60
  ```
61
61
 
62
- `Delivery mode` is `self-study` or `instructor-led`. `Role` is `orientation`, `explanation`, `check`, `solution` or `closing`. A check may cover several modules/objectives; do not force one separate exercise per module. A check adds `Solution: S04` (or U04); the referenced unit is a subsequent `solution` covering all the check’s module/objective pairs, and contains the actual answer, rationale and correction path in its authored content. Put fictional-case labels in learner-visible copy, not only in production notes. A necessary definition, inference or caveat cannot exist only in notes for a self-study course.
62
+ `Delivery mode` is `self-study` or `instructor-led`. In `instructor-led` the Complete explanation is the text to speak, but it is not enough to deliver the course: preparation, reserved material, what to do when a live step fails, clean-up and the list of delivered materials belong in `INSTRUCTOR_GUIDE.md` (`templates.md`). `Role` is `orientation`, `explanation`, `check`, `solution` or `closing`. A check may cover several modules/objectives; do not force one separate exercise per module. A check adds `Solution: S04` (or U04); the referenced unit is a subsequent `solution` covering all the check’s module/objective pairs, and contains the actual answer, rationale and correction path in its authored content. Put fictional-case labels in learner-visible copy, not only in production notes. A necessary definition, inference or caveat cannot exist only in notes for a self-study course.
63
63
 
64
64
  For a shared explanation or cumulative check, add optional `Covers: M2/O2; M3/O3` metadata listing the additional module/objective pairs beyond the primary `Module`/`Objective`. Every pair must match the plan. A shared unit may serve separate module rows for different profiles without duplicating content, provided its explanation is suitable for all those profiles. A cumulative solution covers every pair assessed by its check. Review the actual check and answer for every declared objective; a coverage label alone is not proof.
65
65
 
@@ -67,7 +67,7 @@ For a shared explanation or cumulative check, add optional `Covers: M2/O2; M3/O3
67
67
 
68
68
  ## Release review and rendering handoff
69
69
 
70
- Review the actual learner surface: self-study uses Learner content plus visible transitions and captions; guided delivery additionally uses the authored spoken explanation. Separate solutions from the learner test packet. Give a renderer enough detail to construct every unit without writing new teaching material. If splitting a dense slide is necessary, update the canonical units/IDs first. Return semantic changes to this source before regenerating a deck.
70
+ Review the actual learner surface: self-study uses Learner content plus visible transitions and captions; guided delivery additionally uses the authored spoken explanation, and is handed over with `INSTRUCTOR_GUIDE.md` and every material it lists. Separate solutions from the learner test packet. Give a renderer enough detail to construct every unit without writing new teaching material. If splitting a dense slide is necessary, update the canonical units/IDs first. Return semantic changes to this source before regenerating a deck.
71
71
 
72
72
  Apply the clarity-review handoff in `SKILL.md` §4 to this learner surface, using the course's declared audience rather than the author's familiarity with the subject.
73
73
 
@@ -71,6 +71,9 @@ Context (agent): "the question it answered, quoted"
71
71
  entered only as `[NOT VERBATIM — from <source>]`, never as a quote.
72
72
  - **Unattended**: R1 quotes the trigger that started the unit, labelled as such.
73
73
  Declared assumptions are not owner statements and never enter the record.
74
+ - **Design approval** (L3): the owner's approval of the design is an entry whose
75
+ label begins `design approved`; a no or a correction takes its own label
76
+ (`review.md` §When a review is due).
74
77
 
75
78
  ## Canonical analysis — `solutions/ANALYSIS_course_<slug>.md`
76
79
 
@@ -206,7 +209,65 @@ Before drafting units, use `learning_design.md` to define evidence for the promi
206
209
  | O1: <observable comprehension/decision and conditions; for a course on a tool or agent, the learner's act and, where one exists, the tool output it acts on or the request it formulates (learning_design.md §1)> | <task + what distinguishes an adequate answer> | <passage explaining the connection, not its topic name> | <case/changed condition and locator> | <appropriate guidance, rationale, likely error and recovery locator> |
207
210
  ```
208
211
 
209
- The module material itself names course/version/module, explains the concept for that profile, gives a useful example and transition, and points to IC1 or says feedback is unavailable.
212
+ The module material itself names course/version/module, explains the concept for that profile, gives a useful example and transition, and points to IC1 or says feedback is unavailable. A line that names the course (the word course/corso, the folder slug or the full `# ` title) and mentions a dotted version (`versione 1.0`, `version v1.2-draft`) must carry the declared `Course version` exactly: in a course with a content contract `course_check` flags any other dotted value, so feedback reaches the version it describes. A bare number (`versione 2`) is not checked.
213
+
214
+ ### `INSTRUCTOR_GUIDE.md`
215
+
216
+ Required before delivery when the content source declares `Delivery mode: instructor-led`; checked whenever present. The spoken text stays in the Complete explanation of each unit; this file gives the person who delivers the course everything else, so they never reconstruct it from the author's conversation or from scattered files. Each fact keeps one authority: cite COURSE_PLAN, D-IC, P-TM and units by ID instead of copying them.
217
+
218
+ The package is everything handed to the instructor: the teaching material, the delivery material and these instructions. List every file or folder the delivery needs in `## Materials`, with who may see it, as a path relative to the project root. The path may point anywhere in the project: the course folder, demo projects, the generated slide deck. Keep a demo project that has its own `.git` or `ai_docs/` outside `ai_docs/`, because project memory indexes everything under `ai_docs/` and would present the demo's documents as this project's (`course_check` warns). In the text, cite material as an `ai_docs/...` path; that path must be inside the course folder or under a path listed in `## Materials`.
219
+
220
+ Language: keep the header field names, the `## ` headings and the table headers exactly as in the template, because `course_check` looks for them verbatim. Write the text and the table cells in the learners' language, as in the content source, except the values the check compares exactly: `Seen by` (`instructor` or `learners`), Risk IDs, module IDs, unit IDs, paths and `-`.
221
+
222
+ Boundary: delivery material and instructions cover how to deliver the course. They contain no session dates or places, enrolments, attendance, participant lists or data about participants, not even for a single edition. Room and equipment requirements are allowed, and so are in-class checks that keep nothing individual.
223
+
224
+ ```markdown
225
+ # Instructor guide: <course title>
226
+ Course version: 1.0
227
+ Feedback flow: IC1
228
+
229
+ ## Before the course
230
+ <What to prepare and verify: accesses, environments, demo runs, copies to share. The feedback channel is IC1 in D-IC; do not redefine it.>
231
+
232
+ ## Schedule
233
+ | Session | Duration | Modules |
234
+ |---|---|---|
235
+ | 1 | 90 min | M1, M2 |
236
+ | Break | 15 min | - |
237
+ | Closing | 10 min | - |
238
+
239
+ <Instructor cues during the units, one line per unit ID: "S07: give two minutes, then have one answer read aloud". The rows add up to the whole course duration.>
240
+
241
+ ## Reserved material
242
+ <Every solution unit by ID (e.g. S04) and every file the learners must not see, with when it may be revealed.>
243
+
244
+ ## When something deviates
245
+ | Risk ID | In class it looks like | Instructor action | Fallback material |
246
+ |---|---|---|---|
247
+ | C-1 | <what the instructor observes> | <what to do> | demo/FALLBACK.md |
248
+
249
+ <`course_check` verifies that each Risk ID exists in P-TM, not that it is the risk this deviation belongs to: choose the row's risk by reading P-TM.>
250
+
251
+ ## After the course
252
+ <What to clean up, which shared copies to remove, how to collect feedback through IC1.>
253
+
254
+ ## Materials
255
+ | Material | Path | Seen by | Used in |
256
+ |---|---|---|---|
257
+ | <demo project> | demo/TH-01/ | instructor | S12 |
258
+ | <fallback transcript> | demo/FALLBACK.md | instructor | S12 |
259
+ | <slide deck> | decks/<slug>.dc.html | learners | S01-S38 |
260
+ ```
261
+
262
+ `course_check` verifies structure only:
263
+ - the header equals COURSE_PLAN, and each section is present once with content;
264
+ - every `Materials` path is relative to the project root, stays inside the project and exists. It ends with `/` exactly when it is a folder, and `Seen by` is `instructor` or `learners`. A listed folder inside `ai_docs/` that holds its own `.git` or `ai_docs/` is a warning;
265
+ - every `ai_docs/...` path cited anywhere in the guide exists and is inside the course folder or under a listed material;
266
+ - every `Role: solution` unit is named in `## Reserved material`;
267
+ - there is at least one deviation row. Each `Risk ID` is defined in P-TM, and `Fallback material` is either `-` or comma-separated paths listed in `## Materials`;
268
+ - there is at least one schedule row. Each row has a name, a duration, and either comma-separated modules present in COURSE_PLAN or `-` for a break or closing.
269
+
270
+ These remain a review judgement: whether the instructions are sufficient, whether each deviation names the right risk, and whether material the delivery needs is missing without being cited.
210
271
 
211
272
  ## Review log and project architecture
212
273