@antoneeo/course-creator 0.1.0-beta.1 → 0.1.0-beta.13

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.
@@ -47,8 +47,8 @@ The consolidated view is `sdlc_check.py stale` (the overlay intercepts
47
47
  the spine command, preserves its output, flags and exit code --
48
48
  `--hybrid` included -- and appends `## claims` only when nonempty). The
49
49
  orient append prints one count line at session start, only when dirty
50
- and always fail-open. Event-driven by design: reconciliation §2 runs
51
- `stale` after recording a supersession; nothing polls per turn.
50
+ and always fail-open. Event-driven by design: reconciliation §2 runs `stale` at the unit's
51
+ closure, once for every supersession since the last one; nothing polls per turn.
52
52
 
53
53
  ## 2. Check in CI (recommended for teams)
54
54
 
@@ -104,9 +104,21 @@ Semantics: exit code 2 + message on stderr ⇒ the write is blocked and the mess
104
104
  - The hook assumes the working directory is the project root (standard behavior of Claude Code hooks).
105
105
  - **Hybrid/devPNT projects**: add `--hybrid` to the gate command. Governed designs live in the devPNT DB, so the gate also unlocks when an approved E-TDD shadow (`ai_docs/solutions/SHADOW_*tdd*.md`, exported before implementation — in this package that clause is the whole statement of the duty; the sibling lenses keep it in their `hybrid.md`, which kb does not have) is present. Without the flag the gate would block legitimate governed work. The flag is deliberately explicit: never auto-detected.
106
106
 
107
+ ### Verdict check: `verdict` (PreToolUse -- manual for this lens)
108
+
109
+ `sdlc_check.py verdict --hook` refuses an Edit, Write, MultiEdit or NotebookEdit when the
110
+ session transcript shows no guide-router verdict (`router: …`, or a level-1 declaration)
111
+ or a guide the verdict names was never read; it is silent in projects without guides and
112
+ whenever it cannot tell. The code package (`agentic-sdlc`) wires it machine-wide on
113
+ Claude Code; this package does not. To wire it by hand, add a `PreToolUse` entry with
114
+ matcher `Edit|Write|MultiEdit|NotebookEdit` and command
115
+ `python "<skills dir>/course-creator/scripts/sdlc_check.py" verdict --hook; exit 0` — the `; exit 0`
116
+ keeps a missing or older validator from exiting 2, which would block every edit. Cost
117
+ and residuals: `ai_docs/vision/rulings.md` r34.
118
+
107
119
  ## 4. SessionStart hook (orientation, recommended default)
108
120
 
109
- Emits the `ai_docs/` orientation — reading guide (`README.md`), manifest (`INDEX.md`), guide router (`reference/INDEX.md`) and last `handoff.md` — plus the Rule-Zero triage reminder to stdout at session start, so the agent begins already oriented instead of reading them only if it remembers to. It is **fail-open**: a missing, unreadable or oversized doc is skipped, the output is size-capped, and it always exits 0 — a broken or empty `ai_docs/` never blocks the session. It is **zero-execution** (it reads and prints, never runs anything).
121
+ Emits the `ai_docs/` orientation to stdout at session start, in the order an arriving agent needs it: the Rule-Zero triage line, the lens choice when sibling lenses are installed, the guide router (`reference/INDEX.md`, one line per guide), the workstream registry (`audit/handoff.md`, one line per workstream, then the project-wide notes), the reading guide (`README.md`), then pointers to the manifest (`INDEX.md`) and to the full files — so the agent begins already oriented instead of reading them only if it remembers to. The whole output stays under 9,500 characters: Claude Code injects a hook's output up to 10,000 and, above that, only a 2,000-character preview, which is how the router once never reached a session (F-075). A section that does not fit is cut at a line with a pointer to its file, and a note says when one client runs the hook from two settings entries. It is **fail-open**: a missing or unreadable doc is skipped, and it always exits 0 — a broken or empty `ai_docs/` never blocks the session. It is **zero-execution** (it reads and prints, never runs anything).
110
122
 
111
123
  **Wire it on every project that has `ai_docs/` and a Python interpreter.** It was opt-in until v1.16.0 and the field result was the defect this level exists to prevent: the guide router stayed unread unless the user asked for it by hand, so guides were written and never consulted. Prompt-level placement (Rule Zero declares the router verdict; Phase 1 reads the router) carries the process on its own — this hook is the backstop that survives long contexts, compaction and a session that never enters Phase 1 explicitly. Skip it only where Python is unavailable, and know what you are trading.
112
124
 
@@ -211,13 +223,13 @@ a release ran against a `GUIDE_release.md` the session never consulted, because
211
223
  ONE constant line at every prompt, and its first duty is that one: decide whether the
212
224
  skill governs the work in front of you and, if it does, load it once.
213
225
 
214
- Cost: 443 characters, ~75 tokens per prompt, paid on every turn including
226
+ Cost: 393 characters, ~66 tokens per prompt, paid on every turn including
215
227
  trivial ones. That is admissible only because the owner accepted it explicitly
216
228
  (`ai_docs/vision/rulings.md` r19, the "no ceremony ratchet" Non-Goal's second door) --
217
229
  and the acceptance was for a FLAT cost. Hence the contract, guarded by
218
230
  `scripts/test_remind.py`: the line is **constant and reads nothing** (so nothing repo-
219
231
  or session-controlled rides into the agent's context through it, and the cost cannot
220
- grow with the session), it is **one line under 500 characters**, and it **can never
232
+ grow with the session), it is **one line under 600 characters** (r32 raised r19's 500 to carry the lens choice), and it **can never
221
233
  break a prompt** (argv ignored whole, always exit 0). A trivial turn pays a yes/no
222
234
  judgement, never a load.
223
235
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: course-creator
3
- version: 0.1.0-beta.1
3
+ version: 0.1.0-beta.13
4
4
  description: Design and improve courses that teach a defined learner through sourced, progressive explanations. Use when the deliverable is instruction or a learning path; route corpus intake to kb-agentic and persuasive campaigns to marketing-agentic.
5
5
  author: Antonio Pinto (https://github.com/Antoneeo)
6
6
  copyright: (c) 2026 Antonio Pinto
@@ -13,6 +13,9 @@ Create a course that helps a specific learner understand and use something. The
13
13
 
14
14
  This is the course lens of the Agentic SDLC family. It shares `vision.md`, `review.md`, `guides.md`, `routing.md`, `dispatch.md`, `memory.md`, `scripts/sdlc_core.py`, and `scripts/knowledge.py` with the other lenses. It adds `slide_content.md`, `templates.md`, `learning_design.md`, `source_check.md`, `simulation.md`, `feedback.md`, `elicitation.md`, `ENFORCEMENT.md`, `scripts/sdlc_check.py` and `scripts/course_check.py`. Read a support file when its phase needs it.
15
15
 
16
+ `scripts/docs_site.py --root <project> --open` (`--zip <file>` to share): opens in the user's browser a read-only site of what the agent reads; use it to show the project state.
17
+ It is what users mean by "docs site", "minisito", "documentation site" or "project site": run it, never build a page by hand.
18
+
16
19
  ## Rule Zero: Triage and route
17
20
 
18
21
  If `agentic-sdlc`, `kb-agentic`, or `mkt-agentic-sdlc` is installed alongside this skill, consult `routing.md` for the owner of the **deliverable**, then declare the lens. L1 never reaches it. A course from supplied documents is course work; ingestion and verification of the corpus is a separate knowledge unit. A commercial campaign is marketing work. If the request contains distinct deliverables, split them before choosing a lens.
@@ -38,6 +41,7 @@ Before authoring a governed artifact, know which tier is authoring and follow `r
38
41
 
39
42
  | When | Write or update |
40
43
  |---|---|
44
+ | New L3 unit, the moment the level is declared | `audit/requests/REQUEST_course_<slug>.md`: R1 quotes the requester's opening words verbatim, before the Vision Gate and the first question; every later statement of theirs that settles something (answer, approval, cost, ruling) is appended before acting on it. Append-only, never deleted; artifacts cite its entries. |
41
45
  | New L3 course | `vision/features/VISION_course_<slug>.md` with explicit `domain: course`; approve it before design. |
42
46
  | Approved Vision and a design need | `solutions/ANALYSIS_course_<slug>.md` with course risks; `D-UC.md`, `D-IC.md`, `P-TM.md`, graph and plan detail its IDs. |
43
47
  | New production or substantial revision | Deliver the complete textual source in `slide_content.md`; declare its versioned content contract in COURSE_PLAN. |
@@ -45,7 +49,7 @@ Before authoring a governed artifact, know which tier is authoring and follow `r
45
49
  | A course is tested | `SIMULATION_REPORT.md` names both independent attempts, control, material version and limitations; no simulated PASS changes efficacy status. |
46
50
  | Real feedback arrives | `FEEDBACK_REPORT.md` identifies course/version/module and evidence; propose a course correction or a method improvement. |
47
51
  | L3 design or closure review | Append a `REVIEW_LOG.md` row with findings, tier, reviewer and verdict before claiming the gate passed. |
48
- | Concurrent work | Write `audit/HANDOFF_[course].md` with resume logistics; `audit/handoff.md` is the generated workstream registry rebuilt by `index`. |
52
+ | Concurrent work | Write `audit/HANDOFF_[course].md` with resume logistics; `audit/handoff.md` is the generated workstream registry rebuilt by `index`. Its `next:` is the next concrete step in one sentence; what happened, and the state of the work, go to the Diary as a dated entry. |
49
53
  | A repeatable lesson from source or work | PROPOSE distilling a guide with provenance under `reference/`; Propose proactively when the knowledge would otherwise be lost. |
50
54
 
51
55
  An operative guide is not a dumping ground. Follow `guides.md`: source provenance and section-level fidelity make a guide useful in a later session.
@@ -58,7 +62,7 @@ Read `ai_docs/README.md`, `ai_docs/INDEX.md`, and `ai_docs/reference/INDEX.md` (
58
62
 
59
63
  ### 2. Vision Gate
60
64
 
61
- Draft the course Vision with benefit, named learner groups, what they should be able to understand and do, and signals that would count as useful learning. Read `vision.md`, run its blind check, and obtain the person's approval before writing the course design. Project Vision remains above the course Vision. A course may be delivered before human evaluation, visibly labeled **efficacy not verified**.
65
+ Draft from the request as recorded in `audit/requests/REQUEST_course_<slug>.md`, not from a paraphrase of it. Run the owner interview in `vision.md` §The owner interview first and obtain the north star in the person's words before drafting. Then draft the course Vision from the answers, with benefit, named learner groups, what they should be able to understand and do, and signals that would count as useful learning. Read `vision.md`, run its blind check, and obtain the person's approval before writing the course design. Project Vision remains above the course Vision. A course may be delivered before human evaluation, visibly labeled **efficacy not verified**.
62
66
 
63
67
  ### 3. Course Design
64
68
 
@@ -88,7 +92,7 @@ Run `python <skill_dir>/scripts/sdlc_check.py course <slug> --root <project_root
88
92
 
89
93
  Read `feedback.md` when real learner feedback or observed use arrives. A single reproducible defect may justify correcting the course or proposing a skill guide or change. It does not prove effectiveness. Human effectiveness needs comparable learners, observable criteria, results including contrary cases and stated limits; a formal pilot is optional. Keep **efficacy not verified** until that evidence supports a different claim.
90
94
 
91
- Run `sdlc_check.py index` then `sdlc_check.py check`; include course material, Vision, ANALYSIS and documentation in the same change. Close with an independent diff review against the approved design, tests, and a truthful efficacy label. Isolate the work on its own branch/worktree for L3. Branch/worktree hygiene follows the project owner’s integration choice; do not discard unmerged work without authorization.
95
+ Run `sdlc_check.py index` then `sdlc_check.py check`; include course material, Vision, ANALYSIS and documentation in the same change. Close with an independent diff review against the approved design, tests, and a truthful efficacy label. Isolate the work on its own branch/worktree for L3. A session that may run while another session uses the same checkout works in its **own git worktree**, and never switches branch, stashes, resets or runs `index` in a checkout another session may be using. Parallel work also shares ids: choose a new unit's id **after fetching**, as the first id free on every branch and tag the checkout can see (`check` names a collision while the unit is open). Branch/worktree hygiene follows the project owner’s integration choice; do not discard unmerged work without authorization.
92
96
 
93
97
  ## Operative Guides and memory
94
98
 
@@ -99,8 +99,8 @@ Exactly three review touches per task, never a loop:
99
99
 
100
100
  1. Inline self-review by the implementer subagent before it reports done
101
101
  (the standard critical-review pass, not a separate call).
102
- 2. One reviewer pass per task (Hybrid: reuse the devPNT code-review gate;
103
- Standalone: the `review.md` discipline).
102
+ 2. One reviewer pass per task, under the `review.md` discipline in both modes
103
+ (Hybrid: against the accepted E-TDD).
104
104
  3. One broad final pass over the whole plan at closure, after all tasks are
105
105
  DONE — catches cross-task drift a per-task review cannot see.
106
106
 
@@ -135,6 +135,6 @@ have added.
135
135
  ## Hybrid note
136
136
 
137
137
  The plan's `derived-from` points at the accepted E-TDD document key. Per-task
138
- review reuses the devPNT independent reviewers (§4.6 code review gate) rather
139
- than restating review doctrine — see `review.md` for the single definition
140
- both modes share.
138
+ review is the closure review of `review.md` against that E-TDD, run by the
139
+ client's agent (devPNT doctrine §4.6 invokes the same review) — `review.md` is
140
+ the single definition both modes share.