create-pathfinder 4.2.0 → 4.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/CLAUDE.md +2 -0
  2. package/package.json +1 -1
  3. package/skills/learn-codebase/SKILL.md +188 -17
  4. package/skills/learn-feature/SKILL.md +136 -15
  5. package/skills/map-system/SKILL.md +293 -0
  6. package/skills/render-artifact/SKILL.md +187 -0
  7. package/skills/render-artifact/engine/bin/render.mjs +225 -0
  8. package/skills/render-artifact/engine/deliver.mjs +197 -0
  9. package/skills/render-artifact/engine/doctor.mjs +96 -0
  10. package/skills/render-artifact/engine/examples/diagram.json +223 -0
  11. package/skills/render-artifact/engine/examples/lesson.json +242 -0
  12. package/skills/render-artifact/engine/references/determinism.md +71 -0
  13. package/skills/render-artifact/engine/references/specification.md +149 -0
  14. package/skills/render-artifact/engine/references/validation.md +268 -0
  15. package/skills/render-artifact/engine/render/behavior.mjs +128 -0
  16. package/skills/render-artifact/engine/render/diagram.mjs +342 -0
  17. package/skills/render-artifact/engine/render/escape.mjs +34 -0
  18. package/skills/render-artifact/engine/render/graph/behavior.mjs +394 -0
  19. package/skills/render-artifact/engine/render/graph/draw.mjs +204 -0
  20. package/skills/render-artifact/engine/render/graph/interaction.mjs +174 -0
  21. package/skills/render-artifact/engine/render/graph/layout.mjs +698 -0
  22. package/skills/render-artifact/engine/render/graph/style.mjs +200 -0
  23. package/skills/render-artifact/engine/render/graph/width.mjs +204 -0
  24. package/skills/render-artifact/engine/render/index.mjs +50 -0
  25. package/skills/render-artifact/engine/render/lesson.mjs +294 -0
  26. package/skills/render-artifact/engine/render/shell.mjs +275 -0
  27. package/skills/render-artifact/engine/render/theme.mjs +592 -0
  28. package/skills/render-artifact/engine/schemas/common.schema.json +101 -0
  29. package/skills/render-artifact/engine/schemas/diagram.schema.json +176 -0
  30. package/skills/render-artifact/engine/schemas/lesson.schema.json +210 -0
  31. package/skills/render-artifact/engine/validate/composition.mjs +395 -0
  32. package/skills/render-artifact/engine/validate/diagnostics.mjs +83 -0
  33. package/skills/render-artifact/engine/validate/diagram-parts.mjs +68 -0
  34. package/skills/render-artifact/engine/validate/evidence.mjs +302 -0
  35. package/skills/render-artifact/engine/validate/index.mjs +132 -0
  36. package/skills/render-artifact/engine/validate/jsonschema.mjs +312 -0
  37. package/skills/render-artifact/engine/validate/structural.mjs +241 -0
  38. package/skills/render-artifact/engine/verification.mjs +76 -0
  39. package/skills/render-artifact/engine/version.mjs +24 -0
package/CLAUDE.md CHANGED
@@ -91,6 +91,8 @@ An adapter carries the canonical skill's frontmatter and a pointer to it, and no
91
91
  - `to-tickets` — decompose one approved Feature into blocker-linked tickets
92
92
  - `ticket` — run one action of the ticket delivery loop: `load`, `start`, `review`, `complete`
93
93
  - `debug-issue` — diagnose an observed failure to its root cause, apply the smallest justified fix, and verify it
94
+ - `render-artifact` — compile a typed specification into a deterministic, self-contained visual artifact
95
+ - `map-system` — turn a plain request about a system into a semantic diagram artifact
94
96
  - `learn-feature` — create an interactive lesson for a completed feature
95
97
  - `learn-codebase` — create a modular learning portal for the repository
96
98
  - `teach-feature` — teach the verified current feature from its spec, diff, tests, and implementation
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-pathfinder",
3
- "version": "4.2.0",
3
+ "version": "4.3.0",
4
4
  "description": "Install Pathfinder's ticket-first, human-in-the-loop workflow kit into a Git repository.",
5
5
  "keywords": [
6
6
  "pathfinder",
@@ -5,29 +5,200 @@ description: Generate a modular, interactive learning portal that explains an en
5
5
 
6
6
  # Learn Codebase
7
7
 
8
- Use for onboarding, milestone review, handoff, or interview preparation—not after every feature.
8
+ Use for onboarding, milestone review, handoff, or interview preparation not
9
+ after every feature.
9
10
 
10
- ## Process
11
+ You write what is true about the repository. `render-artifact` turns it into the
12
+ page. Those are different jobs, and this skill only does the first one.
13
+
14
+ ## Read
15
+
16
+ - the repository's own map: entry points, packages, workspaces, build and CI
17
+ configuration
18
+ - architecture, major subsystems, and the boundaries between them
19
+ - domain concepts and the vocabulary the code already uses
20
+ - the flows that cross subsystems — a request, an install, a release, a build
21
+ - tests, and what they are actually protecting
22
+ - history and durable decisions, where they explain why the code is shaped this
23
+ way
11
24
 
12
- 1. Establish learning goals and audience.
13
- 2. Map the repository deliberately, excluding generated/vendor/build output.
14
- 3. Identify architecture, modules, domain concepts, major flows, tests, deployment, and durable decisions.
15
- 4. Generate modular lessons rather than one giant document.
16
- 5. Include navigable diagrams, demonstrations, exercises, and quizzes.
17
- 6. Cite source paths and distinguish current behavior from recommendations.
25
+ Exclude generated, vendored, and build output deliberately, and say so if the
26
+ exclusion is load-bearing.
18
27
 
19
- ## Default Output
28
+ Gather all of it **before** writing any specification. The specification is a
29
+ record of what you found, so finding has to finish first — a portal assembled
30
+ while still reading is a portal whose claims were chosen to fit the modules
31
+ already written.
32
+
33
+ ## Output
34
+
35
+ Two files, one repository:
20
36
 
21
37
  ```text
22
- learning/codebase/
23
- ├── index.html
24
- ├── modules/
25
- ├── assets/
26
- └── README.md
38
+ learning/codebase/lesson.json the semantic specification — yours
39
+ learning/codebase/lesson.html the rendered artifact — the renderer's
27
40
  ```
28
41
 
29
- Use self-contained HTML/CSS/JS by default; use an existing docs/MDX system when approved. Do not install a framework solely for the portal without approval.
42
+ The JSON is the reviewable source. A human can read it, disagree with a claim,
43
+ and see exactly what was asserted and what backs it. It is also what makes the
44
+ artifact reproducible: the same specification through the same renderer version
45
+ produces the same bytes.
46
+
47
+ One artifact, not a directory. There is no `index.html`, no `modules/` folder,
48
+ and no `assets/` — how a multi-module lesson is split, linked, and navigated is
49
+ a presentation decision, and presentation is the renderer's. You supply module
50
+ order and content; the renderer builds the navigation.
51
+
52
+ Do not author the HTML. Do not author CSS, presentation JavaScript, or MDX. Do
53
+ not stand up a docs system, a site generator, or a framework for this. There is
54
+ one visual-artifact path in Pathfinder and it runs through `render-artifact`.
55
+
56
+ ## Process
57
+
58
+ 1. **Gather the evidence** — the reading above.
59
+ 2. **Pick the commit.** `source.commit` is the milestone the portal is *about*.
60
+ Look it up and pin it; do not use whatever `HEAD` happens to be, which is
61
+ only the same thing by accident and stops being the same thing the moment
62
+ anything else merges. Evidence resolves against this commit and never against
63
+ the working tree, so a later refactor cannot silently change what the portal
64
+ claims.
65
+ 3. **Write the specification** to `lesson.json`. Read
66
+ `skills/render-artifact/engine/references/specification.md` for the fields
67
+ and `engine/examples/lesson.json` for the shape. Many modules: this skill
68
+ teaches a whole repository.
69
+ 4. **Validate.**
70
+
71
+ ```sh
72
+ node skills/render-artifact/engine/bin/render.mjs validate \
73
+ learning/codebase/lesson.json
74
+ ```
75
+
76
+ 5. **Deliver.**
77
+
78
+ ```sh
79
+ node skills/render-artifact/engine/bin/render.mjs deliver \
80
+ learning/codebase/lesson.json \
81
+ learning/codebase/lesson.html --json
82
+ ```
83
+
84
+ 6. **Report the receipt**, and report it honestly. See "What to say afterwards".
85
+
86
+ ## Modules
87
+
88
+ One module per subsystem or concern, ordered so a reader can start at the top
89
+ and keep going. Modules may include: orientation, architecture, domain and data
90
+ flow, interfaces, services and integrations, testing, deployment and operations,
91
+ security boundaries, extension exercises, and a cumulative quiz.
92
+
93
+ Use `requires` when a module genuinely builds on another. That is the learning
94
+ graph, and it is semantic: it says what a reader needs first, not where a box
95
+ sits on a page. Leave it out when the modules are independent — a flat list is a
96
+ legitimate shape, not a missing field.
97
+
98
+ Keep each module a unit someone can finish. A module that has become a second
99
+ portal is two modules.
100
+
101
+ ## Flows, not diagrams
102
+
103
+ Express a sequence, a relationship, or an architecture walkthrough as a `flow`
104
+ section. Its steps carry the order and the dependencies, which is the part that
105
+ teaches, and the renderer decides how that looks.
106
+
107
+ There is no diagram section, and this skill no longer promises navigable
108
+ diagrams. Do not hand-author SVG, do not describe coordinates or layout, and do
109
+ not reach for a drawing tool to fill the gap. A picture whose meaning is carried
110
+ by a `flow` loses nothing that teaches; a picture this skill draws itself is
111
+ presentation it does not own. Semantic diagram artifacts do exist — `map-system`
112
+ produces them, as a separate artifact of its own — and that is still not this
113
+ skill's output: a lesson gains no diagram section and references no diagram.
114
+
115
+ ## Evidence
116
+
117
+ Every claim about the source carries a citation, in the one shape the renderer
118
+ uses everywhere:
119
+
120
+ ```json
121
+ { "path": "packages/create-pathfinder/src/kit.mjs", "lines": [97, 105] }
122
+ ```
123
+
124
+ Every `concept` section must cite at least one. That is not a style preference:
125
+ a concept is an assertion about the code, and an uncited assertion is this skill
126
+ putting words in the renderer's mouth. Validation rejects it.
127
+
128
+ A repository-wide portal makes this easier to get wrong than a feature lesson
129
+ does, because the claims are broader. "The installer never ships tests" is a
130
+ claim about a specific list in a specific file — cite that list, not the package
131
+ it lives in. Breadth is not permission to cite loosely.
132
+
133
+ `lines` is optional and, when present, must lie inside that file at that commit.
134
+ Cite the range a reader should actually look at.
135
+
136
+ `source.generated_at` is yours to supply if you want a date on the page. The
137
+ renderer never reads a clock, so if no date appears in the specification, none
138
+ appears in the artifact.
139
+
140
+ ## Quiz
141
+
142
+ Questions are multiple choice: a prompt, two to eight distinct options, and the
143
+ index of the correct one. An explanation and evidence are worth adding.
144
+
145
+ That one shape covers more than it looks:
146
+
147
+ | To ask | Write |
148
+ | --- | --- |
149
+ | true/false | a question with two options |
150
+ | predict the output or the state | a `code` section, then a question about it |
151
+ | a debugging scenario | the symptom as the prompt, candidate causes as options |
152
+ | recall or discrimination | an ordinary multiple-choice question |
153
+
154
+ For something a reader should *do* rather than answer, use an `exercise`
155
+ section, with `hints` when a nudge helps more than a solution. A cumulative
156
+ quiz at the end works well; so does one per module.
157
+
158
+ ## What you cannot ask for
159
+
160
+ The specification carries no presentation. There is no field for a colour, a
161
+ class, a width, a layout, an icon, a theme, or a template, and the schema
162
+ rejects the attempt rather than ignoring it. Interface language — navigation
163
+ labels, theme controls, accessibility text, the evidence and citation UI — is
164
+ the renderer's, in its words.
165
+
166
+ Text is text. No field is Markdown and no field is HTML: every string you write
167
+ is escaped on the way out, so `<b>bold</b>` in a title renders as those nine
168
+ characters. Content that smuggles markup is this skill reaching for
169
+ presentation by another route.
170
+
171
+ There is also no field for whether the specification was validated or whether
172
+ its evidence checked out. Those are claims about work the engine performs, and
173
+ the engine is the only thing entitled to make them.
174
+
175
+ ## What to say afterwards
176
+
177
+ The receipt names the renderer version and the SHA-256 and byte count of both
178
+ the specification and the artifact. Report it. It supports one real claim: this
179
+ specification, compiled by this renderer, produced these bytes, and its evidence
180
+ resolved at the commit it names.
181
+
182
+ It says nothing about whether the portal reads well, teaches well, or looks
183
+ right. Nobody has looked at it. So report the validation result and say
184
+ separately that perceptual review has not happened. If a human then opens it,
185
+ that is their finding, in their words — and it is not evidence for the
186
+ validation result any more than the validation result is evidence for it.
187
+
188
+ ## When the renderer cannot run
189
+
190
+ Check with:
191
+
192
+ ```sh
193
+ node skills/render-artifact/engine/bin/render.mjs doctor
194
+ ```
30
195
 
31
- ## Modules May Include
196
+ If the engine is unavailable, or delivery fails, you may still explain the
197
+ codebase in conversation or in Markdown where that is useful. That answer is not
198
+ a Pathfinder visual artifact. Do not call it one, do not hand-author HTML or MDX
199
+ to stand in for one, and do not reach for a second way to produce a page. A
200
+ non-zero exit is never reported as success, and a failed delivery leaves any
201
+ previously delivered artifact exactly as it was.
32
202
 
33
- orientation, architecture, domain/data flow, UI or interfaces, services/integrations, testing, deployment/operations, security boundaries, extension exercises, and cumulative quiz.
203
+ This skill reads widely by design. For one completed feature, use
204
+ `learn-feature` instead.
@@ -7,6 +7,9 @@ description: Generate a rich, interactive, feature-scoped lesson and quiz from c
7
7
 
8
8
  Use after a feature is completed and accepted.
9
9
 
10
+ You write what is true about the feature. `render-artifact` turns it into the
11
+ page. Those are different jobs, and this skill only does the first one.
12
+
10
13
  ## Read
11
14
 
12
15
  - completed feature spec and history entry
@@ -14,17 +17,60 @@ Use after a feature is completed and accepted.
14
17
  - only the implemented files and direct dependencies needed to explain the feature
15
18
  - tests and durable decisions
16
19
 
17
- ## Output Format
20
+ Gather all of it **before** writing any specification. The specification is a
21
+ record of what you found, so finding has to finish first — a lesson assembled
22
+ while still reading is a lesson whose claims were chosen to fit the paragraphs
23
+ already written.
18
24
 
19
- Use the project's learning preference. Default to self-contained HTML/CSS/JS. Use MDX only when the repository already supports it or the human selects it.
25
+ ## Output
20
26
 
21
- Place output under:
27
+ Two files, one per feature:
22
28
 
23
29
  ```text
24
- learning/features/[feature-slug]/
30
+ learning/features/[feature-slug]/lesson.json the semantic specification — yours
31
+ learning/features/[feature-slug]/lesson.html the rendered artifact — the renderer's
25
32
  ```
26
33
 
27
- ## Lesson Content
34
+ The JSON is the reviewable source. A human can read it, disagree with a claim,
35
+ and see exactly what was asserted and what backs it. It is also what makes the
36
+ artifact reproducible: the same specification through the same renderer version
37
+ produces the same bytes, so the page can be delivered again after a renderer
38
+ release without re-deriving anything.
39
+
40
+ Do not author the HTML. Do not author CSS, presentation JavaScript, or MDX.
41
+ There is one visual-artifact path in Pathfinder and it runs through
42
+ `render-artifact`.
43
+
44
+ ## Process
45
+
46
+ 1. **Gather the evidence** — the reading above.
47
+ 2. **Pick the commit.** `source.commit` is the commit the lesson is *about*:
48
+ the one that landed the feature. Look it up; do not use whatever `HEAD`
49
+ happens to be, which is only the same thing by accident and stops being the
50
+ same thing the moment anything else merges. Evidence resolves against this
51
+ commit and never against the working tree.
52
+ 3. **Write the specification** to `lesson.json`. Read
53
+ `skills/render-artifact/engine/references/specification.md` for the fields
54
+ and `engine/examples/lesson.json` for the shape. One module: this skill
55
+ teaches one feature.
56
+ 4. **Validate.**
57
+
58
+ ```sh
59
+ node skills/render-artifact/engine/bin/render.mjs validate \
60
+ learning/features/[feature-slug]/lesson.json
61
+ ```
62
+
63
+ 5. **Deliver.**
64
+
65
+ ```sh
66
+ node skills/render-artifact/engine/bin/render.mjs deliver \
67
+ learning/features/[feature-slug]/lesson.json \
68
+ learning/features/[feature-slug]/lesson.html --json
69
+ ```
70
+
71
+ 6. **Report the receipt**, and report it honestly. See "What to say afterwards".
72
+
73
+ ## Lesson content
28
74
 
29
75
  - what changed and why
30
76
  - architecture and data/control flow
@@ -32,17 +78,92 @@ learning/features/[feature-slug]/
32
78
  - key implementation decisions and tradeoffs
33
79
  - tests and verification
34
80
  - common mistakes and safe extension points
35
- - visual diagrams or interactive demonstrations when useful
36
81
 
37
- ## Quiz Variety
82
+ Express a sequence or a set of relationships as a `flow` section — its steps
83
+ carry the order and the dependencies, which is the part that teaches. The
84
+ renderer decides how a flow looks.
85
+
86
+ ## Evidence
87
+
88
+ Every claim about the source carries a citation, in the one shape the renderer
89
+ uses everywhere:
90
+
91
+ ```json
92
+ { "path": "packages/create-pathfinder/src/kit.mjs", "lines": [97, 105] }
93
+ ```
94
+
95
+ Every `concept` section must cite at least one. That is not a style preference:
96
+ a concept is an assertion about the code, and an uncited assertion is this skill
97
+ putting words in the renderer's mouth. Validation rejects it.
98
+
99
+ `lines` is optional and, when present, must lie inside that file at that commit.
100
+ Cite the range a reader should actually look at.
101
+
102
+ `source.generated_at` is yours to supply if you want a date on the page. The
103
+ renderer never reads a clock, so if no date appears in the specification, none
104
+ appears in the artifact.
38
105
 
39
- Include a useful mix when appropriate:
106
+ ## Quiz
107
+
108
+ Questions are multiple choice: a prompt, two to eight distinct options, and the
109
+ index of the correct one. An explanation and evidence are worth adding.
110
+
111
+ That one shape covers more than it looks:
112
+
113
+ | To ask | Write |
114
+ | --- | --- |
115
+ | true/false | a question with two options |
116
+ | predict the output or the state | a `code` section, then a question about it |
117
+ | a debugging scenario | the symptom as the prompt, candidate causes as options |
118
+ | recall or discrimination | an ordinary multiple-choice question |
119
+
120
+ For something a reader should *do* rather than answer, use an `exercise`
121
+ section, with `hints` when a nudge helps more than a solution.
122
+
123
+ ## What you cannot ask for
124
+
125
+ The specification carries no presentation. There is no field for a colour, a
126
+ class, a width, a layout, an icon, a theme, or a template, and the schema
127
+ rejects the attempt rather than ignoring it. Interface language — navigation
128
+ labels, theme controls, accessibility text, the evidence and citation UI — is
129
+ the renderer's, in its words.
130
+
131
+ Text is text. No field is Markdown and no field is HTML: every string you write
132
+ is escaped on the way out, so `<b>bold</b>` in a title renders as those nine
133
+ characters. Content that smuggles markup is this skill reaching for
134
+ presentation by another route.
135
+
136
+ There is also no field for whether the specification was validated or whether
137
+ its evidence checked out. Those are claims about work the engine performs, and
138
+ the engine is the only thing entitled to make them.
139
+
140
+ ## What to say afterwards
141
+
142
+ The receipt names the renderer version and the SHA-256 and byte count of both
143
+ the specification and the artifact. Report it. It supports one real claim: this
144
+ specification, compiled by this renderer, produced these bytes, and its evidence
145
+ resolved at the commit it names.
146
+
147
+ It says nothing about whether the lesson reads well, teaches well, or looks
148
+ right. Nobody has looked at it. So report the validation result and say
149
+ separately that perceptual review has not happened. If a human then opens it,
150
+ that is their finding, in their words — and it is not evidence for the
151
+ validation result any more than the validation result is evidence for it.
152
+
153
+ ## When the renderer cannot run
154
+
155
+ Check with:
156
+
157
+ ```sh
158
+ node skills/render-artifact/engine/bin/render.mjs doctor
159
+ ```
40
160
 
41
- - multiple choice
42
- - true/false with explanation
43
- - ordering or matching
44
- - predict-the-output/state
45
- - debugging scenario
46
- - short reflection or implementation challenge
161
+ If the engine is unavailable, or delivery fails, you may still explain the
162
+ feature in conversation or in Markdown where that is useful. That answer is not
163
+ a Pathfinder visual artifact. Do not call it one, do not hand-author HTML or MDX
164
+ to stand in for one, and do not reach for a second way to produce a page. A
165
+ non-zero exit is never reported as success, and a failed delivery leaves any
166
+ previously delivered artifact exactly as it was.
47
167
 
48
- Provide immediate feedback and explanations. Keep the lesson scoped and avoid reading the whole repository.
168
+ Keep the lesson scoped, and avoid reading the whole repository — use
169
+ `learn-codebase` for that.