@antoneeo/course-creator 0.1.0-beta.6 → 0.1.0-beta.8
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 +16 -0
- package/gemini-extension.json +1 -1
- package/package.json +1 -1
- package/scripts/init.js +1 -1
- package/skills/course-creator/SKILL.md +3 -3
- package/skills/course-creator/elicitation.md +16 -5
- package/skills/course-creator/scripts/shared_manifest.json +3 -3
- package/skills/course-creator/templates.md +8 -4
- package/skills/course-creator/vision.md +69 -6
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.1.0-beta.8] - 2026-10-18
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
- F-072 (field run): the `SKILL.md` line that announces the docs site now reads `scripts/docs_site.py --root <project> --open` and says to use it to show the project state. Asked for the state, an agent had opened the site in its own client pane, where it renders blank, and improvised a local server; `--open` opens it in the user's browser, where it works offline.
|
|
7
|
+
|
|
8
|
+
## [0.1.0-beta.7] - 2026-10-18
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- F-074: every Vision is born from an owner interview. Before any Vision text is written (project, feature, the course Vision, and the devPNT M-VISION), the agent asks the owner six questions in order, re-asking an answer that has the wrong form: the problem as one concrete case, the benefit as a result for someone, the actors including who takes the initiative, a success signal with its starting value, the boundaries, and the known constraints with where each comes from. Then the owner approves a one- or two-sentence north star in their own words; without it no Vision is written, not even a draft. The blind check still tests that the rules hold; the approved north star shows they are the owner's. `vision.md` §The owner interview.
|
|
12
|
+
|
|
13
|
+
### Changed
|
|
14
|
+
- `elicitation.md`: the skip path never covers a Vision; the interview is a planned occasion like the round.
|
|
15
|
+
- Bootstrap no longer writes a Vision reconstructed by the agent: the installer seeds `ai_docs/vision/project_vision.md` as a stub awaiting the interview (an existing file is never overwritten).
|
|
16
|
+
- A Non-Goal now bounds scope. It rejects a proposal that pursues what it names; it is not a ban on behaviour that already exists and creates no obligation. A behaviour that must never happen is an Invariant or a constraint with its source.
|
|
17
|
+
- The course Vision template gains North Star and Problem, learners with the initiative, signals with starting values, Non-Goals as scope, and the source of every constraint.
|
|
18
|
+
|
|
3
19
|
## [0.1.0-beta.6] - 2026-10-18
|
|
4
20
|
|
|
5
21
|
### Added
|
package/gemini-extension.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "course-creator",
|
|
3
|
-
"version": "0.1.0-beta.
|
|
3
|
+
"version": "0.1.0-beta.8",
|
|
4
4
|
"description": "Course creation for defined learners, with progressive explanations, sourced facts and diagnostic independent testing.",
|
|
5
5
|
"author": "Antonio Pinto (https://github.com/Antoneeo)"
|
|
6
6
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@antoneeo/course-creator",
|
|
3
|
-
"version": "0.1.0-beta.
|
|
3
|
+
"version": "0.1.0-beta.8",
|
|
4
4
|
"description": "Design sourced, progressive courses for a defined learner with Agentic SDLC governance and diagnostic learner simulations.",
|
|
5
5
|
"keywords": ["claude-code", "gemini-cli", "codex", "course-design", "skill", "ai-agent"],
|
|
6
6
|
"author": "Antonio Pinto (https://github.com/Antoneeo)",
|
package/scripts/init.js
CHANGED
|
@@ -9,7 +9,7 @@ const { SKILL_SOURCE, INSTALLED_SKILL_NAME, SELF_LENS, SIBLING_LENSES,
|
|
|
9
9
|
const root = process.cwd();
|
|
10
10
|
const seed = new Map([
|
|
11
11
|
['ai_docs/README.md', `---\ndefault_domain: course\n---\n# Project knowledge and course work\n\nRead vision/project_vision.md, INDEX.md and reference/INDEX.md first.\n`],
|
|
12
|
-
['ai_docs/vision/project_vision.md', `---\ndescription: Project benefit and boundaries.\nstatus: DRAFT\n---\n# Project Vision\nStatus: DRAFT\n
|
|
12
|
+
['ai_docs/vision/project_vision.md', `---\ndescription: Project benefit and boundaries.\nstatus: DRAFT\n---\n# Project Vision\nStatus: DRAFT\n<!-- STUB: awaiting the owner interview (vision.md §The owner interview). Not a\n Vision: no artifact traces to it. -->\n`],
|
|
13
13
|
['ai_docs/vision/roadmap.md', `---\ndescription: Project learning and delivery roadmap.\nstatus: DRAFT\n---\n# Roadmap\nStatus: DRAFT\n`],
|
|
14
14
|
['ai_docs/vision/principles.md', `---\ndescription: Decisions that constrain project work.\nstatus: DRAFT\n---\n# Principles\nStatus: DRAFT\n`],
|
|
15
15
|
['ai_docs/strategic/architecture.md', `---\ndescription: Verified component inventory.\nstatus: CURRENT\n---\n# Architecture\n\n## Component Map\n| Component | Capability it owns | Contract | Where |\n|---|---|---|---|\n\n## Architectural Patterns\n<Add only verified patterns.>\n`],
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: course-creator
|
|
3
|
-
version: 0.1.0-beta.
|
|
3
|
+
version: 0.1.0-beta.8
|
|
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,7 +13,7 @@ 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
|
|
16
|
+
`scripts/docs_site.py --root <project> --open`: opens in the user's browser a read-only site of what the agent reads; use it to show the project state.
|
|
17
17
|
|
|
18
18
|
## Rule Zero: Triage and route
|
|
19
19
|
|
|
@@ -61,7 +61,7 @@ Read `ai_docs/README.md`, `ai_docs/INDEX.md`, and `ai_docs/reference/INDEX.md` (
|
|
|
61
61
|
|
|
62
62
|
### 2. Vision Gate
|
|
63
63
|
|
|
64
|
-
Draft from the request as recorded in `audit/requests/REQUEST_course_<slug>.md`, not from a paraphrase of it.
|
|
64
|
+
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**.
|
|
65
65
|
|
|
66
66
|
### 3. Course Design
|
|
67
67
|
|
|
@@ -10,10 +10,20 @@ Skip path: if the spec is already complete — an approved Vision or explicit
|
|
|
10
10
|
user requirements already answer goal, scope, and constraints — skip the
|
|
11
11
|
round and add a one-line note in the analysis stating why it was skipped.
|
|
12
12
|
Do not run the round as a formality when the answers are already on record.
|
|
13
|
+
The skip path never covers a Vision (next paragraph).
|
|
14
|
+
|
|
15
|
+
Vision path: when the unit writes or amends a Vision — any kind, the M-VISION
|
|
16
|
+
included — the owner interview in `vision.md` §The owner interview runs instead
|
|
17
|
+
of this round for the Vision's own content, and it has **no skip path**: one
|
|
18
|
+
sentence from the user plus a spike never makes a Vision's spec complete. The
|
|
19
|
+
round then covers only what the interview did not (the unit's own scope and
|
|
20
|
+
acceptance), deriving from the interview's answers. The interview is a planned
|
|
21
|
+
occasion like the round (§Ask before the write): its questions go in one numbered
|
|
22
|
+
set, and only an answer in the wrong form is asked again.
|
|
13
23
|
|
|
14
24
|
Unattended path: when the user is not reachable (a scheduled or autonomous run,
|
|
15
|
-
and a bootstrap Vision is
|
|
16
|
-
apply on a project's first L3) and a real doubt remains, do not stall and do not
|
|
25
|
+
and a bootstrap Vision is a stub awaiting the owner interview, so the skip
|
|
26
|
+
path above cannot apply on a project's first L3) and a real doubt remains, do not stall and do not
|
|
17
27
|
invent consensus. Write it as a **declared assumption** (§Ask before the write)
|
|
18
28
|
in the artifact it touches. At L3, mark the ANALYSIS `BLOCKED on the user` and
|
|
19
29
|
stop before implementation; below L3, proceed and list the assumption in the
|
|
@@ -24,9 +34,10 @@ design is not.
|
|
|
24
34
|
|
|
25
35
|
A doubt kept silent is decided by the agent alone and reaches the documents
|
|
26
36
|
looking settled; a useless question wastes the practitioner's attention. This
|
|
27
|
-
section rules on both. The process *plans* questions in
|
|
28
|
-
below,
|
|
29
|
-
a
|
|
37
|
+
section rules on both. The process *plans* questions in three places — the round
|
|
38
|
+
below, the owner interview for a Vision (`vision.md` §The owner interview), and the
|
|
39
|
+
Capture Moment sweep at a user-signed closing (`SKILL.md`) — each a planned
|
|
40
|
+
occasion that keeps its own form.
|
|
30
41
|
|
|
31
42
|
### When a doubt emerges
|
|
32
43
|
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"scripts/test_audit_refs.py": "a6f06e73f4c9469dd64bed283024b6b37294e6c26f171d8cbdbdfd03771a6884",
|
|
21
21
|
"scripts/test_chronology.py": "5cffc2711282452fe1148a95e46b0b31940809aed3a63950329d9b3e868d0cda",
|
|
22
22
|
"scripts/test_docs_root.py": "19753e0316c0df63ed321d24b411a9ff36eea2058421fd69fc57e507d75566d0",
|
|
23
|
-
"scripts/test_docs_site.py": "
|
|
23
|
+
"scripts/test_docs_site.py": "22e906a311d4a5a40abcb9707b08bcd6f5e71a2429708b31345cbd27690de195",
|
|
24
24
|
"scripts/test_domain_rules.py": "33542b5dc2bb77c05ece55cf0446065cc4226c763ef5e040aa77364f226937bb",
|
|
25
25
|
"scripts/test_drift.py": "c7b7121a8a308b0f3fe12c0c0c346444e632b7aaeff47dc8818b621e5c20cb38",
|
|
26
26
|
"scripts/test_merge_safety.py": "8b9241077bf7ecd6dd335907c640044ab38968ff4c9fdc464450e732cb77adf4",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"scripts/test_plan.py": "4c011a63aa834b55e9c5d13fb4ea76b131b742356001364b0a508435ba013e27",
|
|
29
29
|
"scripts/test_project_memory.py": "2cb85cef01161d881a11d84cfe9ebb72915104e8d1822e4de739f7d00ae6cd59",
|
|
30
30
|
"scripts/test_session_start.py": "203fa72b87fb263663ce7fcd737460530b75fd5e76e883f25cd849e6cca98275",
|
|
31
|
-
"scripts/test_skill_invariants.py": "
|
|
32
|
-
"vision.md": "
|
|
31
|
+
"scripts/test_skill_invariants.py": "17dbccaac688b75e04c44eaaf0ee5b78e85ce2aa4697fc7a52041f3175fe0735",
|
|
32
|
+
"vision.md": "a19a7d7d5044215b726b66f74e422c9cdedcc856c0a53151f20a6d9840b8f6c4"
|
|
33
33
|
}
|
|
34
34
|
}
|
|
@@ -4,7 +4,7 @@ These are starting shapes, not substitute explanations. Keep one authority for e
|
|
|
4
4
|
|
|
5
5
|
## Course Vision — `vision/features/VISION_course_<slug>.md`
|
|
6
6
|
|
|
7
|
-
Read `vision.md` and use its blind check before APPROVED. The person approves benefit and scope, not the agent.
|
|
7
|
+
Written only after the owner interview (`vision.md` §The owner interview), with its north star approved first. Read `vision.md` and use its blind check before APPROVED. The person approves benefit and scope, not the agent.
|
|
8
8
|
|
|
9
9
|
```markdown
|
|
10
10
|
---
|
|
@@ -15,16 +15,20 @@ domain: course
|
|
|
15
15
|
# Course Vision: <title>
|
|
16
16
|
Status: DRAFT
|
|
17
17
|
|
|
18
|
+
## North Star
|
|
19
|
+
<One or two sentences in the person's words, approved before the rest: REQUEST_course_<slug>.md#R<n>.>
|
|
20
|
+
## Problem
|
|
21
|
+
<One concrete case that today does not get the expected result, with its example.>
|
|
18
22
|
## Expected Benefit
|
|
19
23
|
<Why the learner needs the knowledge and what becomes possible.>
|
|
20
24
|
## Learners and Starting Point
|
|
21
|
-
<Who, context of use, what is known with evidence, what remains uncertain.>
|
|
25
|
+
<Who, context of use, what is known with evidence, what remains uncertain; who receives the benefit, who acts, who has the initiative.>
|
|
22
26
|
## Promised Understanding and Ability
|
|
23
27
|
<Knowledge and usable capability, not a list of slides.>
|
|
24
28
|
## Success Signals
|
|
25
|
-
<Observable understanding or use; distinguish simulated diagnosis from real evidence.>
|
|
29
|
+
<Observable understanding or use, each with its starting value; distinguish simulated diagnosis from real evidence.>
|
|
26
30
|
## Scope and Non-Goals
|
|
27
|
-
<
|
|
31
|
+
<Scope this course does not pursue (not a ban on existing behaviour); delivery constraints and facts outside this course, each with its provenance: owner REQUEST_course_<slug>.md#R<n>, a higher Vision quoted, or an inference the person confirmed.>
|
|
28
32
|
```
|
|
29
33
|
|
|
30
34
|
Approval changes both `status:` and `Status:` to `APPROVED`.
|
|
@@ -47,14 +47,67 @@ Four consequences, each operational:
|
|
|
47
47
|
|
|
48
48
|
Extracting the benefit from a discussion is real work: a discourse arrives with
|
|
49
49
|
solutions, preferences and constraints tangled together, and the Vision is the
|
|
50
|
-
distilled benefit only. The
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
actor obtains.
|
|
50
|
+
distilled benefit only. The owner interview below asks for it — and a mechanism
|
|
51
|
+
("a dashboard") is not an acceptable answer to a benefit question ("never lose
|
|
52
|
+
the thread"); ask again until the answer names what the actor obtains.
|
|
54
53
|
|
|
55
54
|
The deletion test decides **which** rules exist. Everything below decides **how**
|
|
56
55
|
to write a rule so it holds once you know it must exist.
|
|
57
56
|
|
|
57
|
+
## The owner interview (before any Vision text)
|
|
58
|
+
|
|
59
|
+
A Vision is the **owner's** statement of what is to be obtained. Nothing in this
|
|
60
|
+
file after this section can detect a Vision the author wrote alone: the blind
|
|
61
|
+
check (§6) tests whether the rules survive a hostile reader, never whether they
|
|
62
|
+
are the owner's. So every Vision is born from an interview of the owner, and its
|
|
63
|
+
north star is approved **before** a line of it is drafted.
|
|
64
|
+
|
|
65
|
+
**Scope — every Vision, in every mode:** `project_vision.md`, a feature
|
|
66
|
+
`VISION_*.md`, a lens Vision (course, marketing), and the devPNT M-VISION in
|
|
67
|
+
Hybrid; also an ANALYSIS `## Feature Vision` that states a benefit no existing
|
|
68
|
+
Vision names (one that cites an approved Vision's benefit is alignment, not a
|
|
69
|
+
Vision). An amendment re-runs the questions whose answers it changes, and Gate 1
|
|
70
|
+
again when the north star changes. **There is no skip path**: one sentence from
|
|
71
|
+
the user plus a spike is not a complete spec — that exact shortcut produced a
|
|
72
|
+
Vision with an imported prohibition, no north star and a missing actor, and four
|
|
73
|
+
downstream artifacts built on it (field case, 2026-10). A reply already on record
|
|
74
|
+
in the owner's words is read back for confirmation, never re-asked as an open
|
|
75
|
+
question; an answer the author derived (from a spike, the code, another Vision)
|
|
76
|
+
is never an answer — it is a proposal the owner confirms or rejects.
|
|
77
|
+
|
|
78
|
+
**The questions, in this order.** Each is repeated until its answer has the form
|
|
79
|
+
stated; the wrong form is named so it can be recognized and asked again.
|
|
80
|
+
|
|
81
|
+
| # | Question | Right form | Wrong form — ask again |
|
|
82
|
+
|---|---|---|---|
|
|
83
|
+
| 1 | **Problem** — which concrete case today does not get the expected result? | one real case, with an example | a missing feature ("there is no drawing tool") |
|
|
84
|
+
| 2 | **Benefit** — once solved, who obtains what? | a result for a named actor | a function or mechanism ("a renderer") |
|
|
85
|
+
| 3 | **Actors** — who receives the benefit, who acts, who has the initiative? | all three named, initiative included | only the one who asks — the actor who acts unprompted goes missing |
|
|
86
|
+
| 4 | **Success** — what observable signal shows the benefit arrived? | a signal with its starting value | a feeling, or a signal with no baseline |
|
|
87
|
+
| 5 | **Boundaries** — what does this NOT pursue? | scope excluded from this work | a ban on behaviour ("X must never happen") — that is a constraint (6) or an obligation (2, 4) |
|
|
88
|
+
| 6 | **Known constraints** — each with its provenance: owner, a quoted line of a higher Vision, or author inference | every constraint sourced; every inference asked here | a constraint written in silently, or imported from a higher Vision without asking whether it applies here |
|
|
89
|
+
|
|
90
|
+
A **Non-Goal bounds scope**: it rejects a proposal that pursues what it names; it
|
|
91
|
+
is not a ban on behaviour that already exists, and it creates no obligation.
|
|
92
|
+
Obligations come from the Benefit and the Success Signals.
|
|
93
|
+
|
|
94
|
+
**Gate 1 — north star.** One or two sentences, in the owner's words, explicitly
|
|
95
|
+
approved by the owner. The author may compose a wording from the answers; the
|
|
96
|
+
approval is of that exact text, recorded verbatim in the request record
|
|
97
|
+
(`audit/requests/REQUEST_[unit].md`; a Vision written outside any unit, such as
|
|
98
|
+
the project Vision after bootstrap, records its interview in
|
|
99
|
+
`audit/requests/REQUEST_project_vision.md`). **Without it no Vision text is written** —
|
|
100
|
+
not a DRAFT, not a reconstruction: bootstrap writes a stub awaiting the
|
|
101
|
+
interview, and what the agent observed goes to `strategic/`.
|
|
102
|
+
Unattended, the unit is `BLOCKED on the user` (`elicitation.md` Unattended path).
|
|
103
|
+
|
|
104
|
+
**Gate 2 — the full Vision**, written from the answers. Every section traces to
|
|
105
|
+
an answer or a stated provenance (`REQUEST_[unit].md#R<n>`); every rule carries
|
|
106
|
+
its provenance; an author inference the owner did not confirm is not in it. The
|
|
107
|
+
blind check (§6) verifies that it holds; the approved north star verifies that it
|
|
108
|
+
is the owner's. Promotion to APPROVED still needs the owner's explicit
|
|
109
|
+
confirmation — Gate 2 is that confirmation, given on the written text.
|
|
110
|
+
|
|
58
111
|
## 0. The one-line test
|
|
59
112
|
|
|
60
113
|
> Could a reader who has never seen this project rule ACCEPT or REJECT on a
|
|
@@ -138,7 +191,14 @@ rule that survived and the same rule leaking.
|
|
|
138
191
|
This is the most common structural failure and it is invisible from the inside.
|
|
139
192
|
|
|
140
193
|
- **A Goal cannot reject anything.** If the admission test says "advances a Goal
|
|
141
|
-
and violates no Non-Goal", then rejection power lives *only* in the Non-Goals
|
|
194
|
+
and violates no Non-Goal", then rejection power lives *only* in the Non-Goals
|
|
195
|
+
(and the Invariants, where the Vision has them).
|
|
196
|
+
- **A Non-Goal rejects scope, not behaviour.** It turns away a proposal that
|
|
197
|
+
pursues what it names; it never forbids a behaviour the product already has, and
|
|
198
|
+
it never creates an obligation — obligations come from the Benefit and the
|
|
199
|
+
Success Signals. A behaviour the product must never have is an Invariant, or a
|
|
200
|
+
constraint with its provenance (§The owner interview, question 6). Written as a
|
|
201
|
+
Non-Goal, it reads as a ban the owner never stated.
|
|
142
202
|
A Goal that says "scale cost to risk in both directions" cannot stop cost
|
|
143
203
|
inflation — you need a prohibition for that.
|
|
144
204
|
- **A prohibition scoped to one rung of your own scale protects only that rung.**
|
|
@@ -204,7 +264,10 @@ it.
|
|
|
204
264
|
## 6. The blind check (procedure)
|
|
205
265
|
|
|
206
266
|
Run this **before promoting any Vision to APPROVED, and before any amendment of an
|
|
207
|
-
approved one**.
|
|
267
|
+
approved one**. It runs on a Vision that already passed Gate 1 (§The owner
|
|
268
|
+
interview): it tests whether the rules hold against a hostile reader, and it
|
|
269
|
+
cannot see whether they are the owner's — a Vision the author wrote alone passes
|
|
270
|
+
it cleanly. Not for DRAFT edits — promotion is when authority is granted, and
|
|
208
271
|
it is rare, so the cost lands where it buys most.
|
|
209
272
|
|
|
210
273
|
1. **Give the reviewer the document text and nothing else.** Not a path — the
|