create-pathfinder 1.7.0 → 2.0.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 (45) hide show
  1. package/AGENTS.md +3 -1
  2. package/CLAUDE.md +22 -0
  3. package/README.md +383 -65
  4. package/context/ai-interaction.md +78 -38
  5. package/context/coding-standards.md +119 -60
  6. package/copy-list.json +1 -0
  7. package/package.json +2 -1
  8. package/roles/developer.md +37 -0
  9. package/roles/planner.md +38 -0
  10. package/roles/tester.md +40 -0
  11. package/skills/challenge-me/SKILL.md +11 -7
  12. package/skills/complete-feature/SKILL.md +16 -10
  13. package/skills/handoff/SKILL.md +24 -4
  14. package/skills/kickstart-pathfinder/SKILL.md +6 -1
  15. package/skills/learning-review/SKILL.md +9 -6
  16. package/skills/load-feature/SKILL.md +20 -9
  17. package/skills/prototype/SKILL.md +3 -1
  18. package/skills/quiz-me/SKILL.md +33 -7
  19. package/skills/review-feature/SKILL.md +19 -11
  20. package/skills/role/SKILL.md +33 -0
  21. package/skills/setup-tracker/SKILL.md +42 -0
  22. package/skills/start-feature/SKILL.md +19 -15
  23. package/skills/sync-tracker/SKILL.md +81 -0
  24. package/skills/teach-architecture/SKILL.md +6 -5
  25. package/skills/teach-feature/SKILL.md +11 -8
  26. package/skills/to-specs/SKILL.md +41 -25
  27. package/skills/whereami/SKILL.md +87 -0
  28. package/src/cli.mjs +2 -1
  29. package/src/detect.mjs +1 -1
  30. package/src/install.mjs +5 -1
  31. package/src/kickstart-prompt.mjs +1 -1
  32. package/src/kit.mjs +70 -1
  33. package/templates/CHANGELOG.template.md +2 -1
  34. package/templates/feature-spec.template.md +19 -75
  35. package/templates/history.template.md +12 -0
  36. package/templates/lesson.template.md +22 -51
  37. package/templates/project-overview.template.md +80 -145
  38. package/context/current-feature.md +0 -46
  39. package/context/features/example-feature-spec.md +0 -103
  40. package/context/history.md +0 -14
  41. package/context/learning/learner-profile.md +0 -35
  42. package/context/learning/lessons/.gitkeep +0 -0
  43. package/context/learning/progress.md +0 -28
  44. package/context/project-overview.md +0 -211
  45. package/templates/progress-entry.template.md +0 -23
package/src/install.mjs CHANGED
@@ -16,7 +16,7 @@
16
16
  import { copyFileSync, existsSync, mkdirSync, readFileSync, readdirSync, statSync, writeFileSync } from "node:fs";
17
17
  import { dirname, join, relative, sep } from "node:path";
18
18
 
19
- import { COPY_LIST, isExcluded } from "./kit.mjs";
19
+ import { COPY_LIST, isExcluded, neverShips } from "./kit.mjs";
20
20
  import {
21
21
  ADAPTER_STATE,
22
22
  adapterPath,
@@ -43,6 +43,10 @@ export function planInstall(kitRoot, targetRoot, { force = false } = {}) {
43
43
  for (const entry of COPY_LIST) {
44
44
  for (const source of walkFiles(join(kitRoot, entry))) {
45
45
  const relativePath = relative(kitRoot, source).split(sep).join("/");
46
+ // Filtered here rather than in walkFiles, which sees basenames only and
47
+ // would have to guess whether a `tracker.md` is *the* one.
48
+ if (neverShips(relativePath)) continue;
49
+
46
50
  const destination = join(targetRoot, relativePath);
47
51
  const exists = existsSync(destination);
48
52
 
@@ -4,7 +4,7 @@
4
4
  * This used to be one hardcoded string naming a file path, and that was right
5
5
  * for exactly as long as Pathfinder configured nothing. Once a run can generate
6
6
  * native adapters, the path form is no longer the best answer for someone who
7
- * just watched twenty skills be installed into their harness — it is the answer
7
+ * just watched the whole kit be installed into their harness — it is the answer
8
8
  * for someone whose tool cannot discover them.
9
9
  *
10
10
  * A pure function of the selection, deliberately: no filesystem, no detection,
package/src/kit.mjs CHANGED
@@ -8,7 +8,7 @@
8
8
  */
9
9
 
10
10
  import { existsSync, readFileSync } from "node:fs";
11
- import { dirname, join, resolve } from "node:path";
11
+ import { dirname, join, relative, resolve, sep } from "node:path";
12
12
  import { fileURLToPath } from "node:url";
13
13
 
14
14
  const HERE = dirname(fileURLToPath(import.meta.url));
@@ -49,6 +49,75 @@ export function isExcluded(basename) {
49
49
  return EXCLUDED.has(basename) || basename.startsWith("._");
50
50
  }
51
51
 
52
+ /**
53
+ * Kit files that are deliberately not part of the kit, by kit-relative path.
54
+ *
55
+ * A different idea from EXCLUDED above, and kept separate for that reason.
56
+ * Those are OS and editor droppings that were never anybody's file. These are
57
+ * real, hand-written files that live inside a copy-list directory and must
58
+ * still never reach a destination project.
59
+ *
60
+ * All three are this repository's own working state, and every one of them
61
+ * would be actively wrong in somebody else's project.
62
+ *
63
+ * `context/tracker.md` is the original case. Work Tracking's off switch is the
64
+ * *absence* of that file in a destination project, so shipping this
65
+ * repository's own copy would hand every new project a configuration naming a
66
+ * tracker it does not own, pointing at a spec directory it does not have, with
67
+ * the off switch already defeated on first install.
68
+ *
69
+ * `context/current-feature.md` and `context/handoff.md` are transient session
70
+ * state, and they are here for the same reason one step further on: the kit
71
+ * stopped shipping a blank `current-feature.md` stencil, because `load-feature`
72
+ * writes the real one on first use and a placeholder is just a file a reader
73
+ * has to recognise as empty. Having stopped shipping the blank one, the thing
74
+ * to guard against is shipping a *filled-in* one — a destination project
75
+ * opening its first session to a note about whichever feature a Pathfinder
76
+ * maintainer had loaded on the day of the release.
77
+ *
78
+ * `context` is a *directory* entry in the copy list, so anything placed beneath
79
+ * it ships by default. Making the invariant enforced rather than intended is
80
+ * the same move `check_no_junk_tracked` made: an ignore rule is advisory, one
81
+ * `git add -f` defeats it, and `stage-kit.mjs` copies from the working tree
82
+ * without consulting it at all.
83
+ *
84
+ * Matched on the kit-relative path, never the basename — a project's own
85
+ * `tracker.md` somewhere else is not this file and must not be caught by it.
86
+ */
87
+ const NEVER_SHIPS = new Set([
88
+ "context/tracker.md",
89
+ "context/current-feature.md",
90
+ "context/handoff.md",
91
+ ]);
92
+
93
+ /**
94
+ * Is this kit-relative path one the kit must never hand over?
95
+ *
96
+ * @param {string} relativePath forward-slashed, relative to the kit root
97
+ */
98
+ export function neverShips(relativePath) {
99
+ return NEVER_SHIPS.has(relativePath);
100
+ }
101
+
102
+ /**
103
+ * A `cpSync` filter that drops never-ships files from a recursive copy.
104
+ *
105
+ * Lives here rather than inline in `stage-kit.mjs` so the staging path and its
106
+ * test run the same code. A test that rebuilds the predicate proves only that
107
+ * `cpSync` honours `filter`; it cannot catch the path arithmetic below going
108
+ * wrong, which is the part with anything to get wrong in it.
109
+ *
110
+ * `cpSync` hands the filter absolute paths and calls it for the copy root
111
+ * itself, so the root resolves to `""` and is kept — filtering a directory out
112
+ * would take its whole subtree with it.
113
+ *
114
+ * @param {string} rootDir absolute path the kit-relative paths are relative to
115
+ * @returns {(source: string) => boolean} true to copy, false to skip
116
+ */
117
+ export function neverShipsFilter(rootDir) {
118
+ return (source) => !neverShips(relative(rootDir, source).split(sep).join("/"));
119
+ }
120
+
52
121
  const PACKAGE_ROOT = resolve(HERE, "..");
53
122
 
54
123
  /**
@@ -1,6 +1,7 @@
1
1
  # Changelog
2
2
 
3
- Use this file only when the destination project adopts a changelog.
3
+ Use only when the project adopts a changelog.
4
+ Record user-facing changes, not implementation history.
4
5
 
5
6
  ## [Unreleased]
6
7
 
@@ -2,98 +2,42 @@
2
2
 
3
3
  ## Status
4
4
 
5
- Not Started
6
-
7
- ## Overview
8
-
9
- Describe the smallest coherent outcome, where it fits, and why it matters.
10
-
11
- ## Problem
12
-
13
- - What is missing, risky, confusing, inaccessible, unreliable, or inefficient?
14
- - Who or what is affected?
15
- - Why does this matter now?
5
+ Proposed
16
6
 
17
7
  ## Goal
18
8
 
19
- State one user-visible or system-verifiable outcome.
9
+ [One clear user-visible or system-verifiable outcome.]
10
+
11
+ ## Context
20
12
 
21
- ## Dependencies
13
+ Include only what materially helps someone implement this Feature.
22
14
 
23
- - Earlier feature, system, decision, prototype, or `None`.
15
+ - Read: `[specific files, sections, or systems]`
16
+ - Relevant area: `[path or component]`
17
+ - Avoid: `[unrelated area, if useful]`
24
18
 
25
19
  ## Requirements
26
20
 
27
- - Requirement 1
28
- - Requirement 2
29
- - Requirement 3
30
- - Include relevant failure, permission, loading, empty, retry, responsive, accessibility, operational, or compatibility states only when applicable.
21
+ - `[required behavior]`
22
+ - `[important constraint]`
23
+ - `[relevant edge or failure behavior, when applicable]`
31
24
 
32
25
  ## Out of Scope
33
26
 
34
- - Explicit exclusion
35
- - Later feature, if known
36
- - Unrelated refactors, dependencies, or polish
37
-
38
- ## Experience or Operational Notes — When Applicable
39
-
40
- - User interaction, system behavior, responsive behavior, accessibility, observability, performance, security, or operational expectations.
41
-
42
- ## Technical Notes
43
-
44
- Likely areas:
45
-
46
- - `[specific path or bounded area]`
47
-
48
- Implementation constraints:
49
-
50
- - Follow project context and approved prototype direction.
51
- - Do not silently resolve open architecture decisions.
52
- - Keep prototype and production code boundaries explicit.
53
-
54
- ## Context Boundary
55
-
56
- Read:
57
-
58
- - `[specific context and code]`
59
-
60
- Avoid loading:
61
-
62
- - `[unrelated systems, old specs, generated output]`
63
-
64
- Split this feature further if its required context is not focused enough for reliable implementation and verification.
27
+ - `[explicit exclusion]`
65
28
 
66
29
  ## Delivery Chunks
67
30
 
68
- 1. `[stable, verifiable increment]`
69
- 2. `[stable, verifiable increment]`
70
- 3. `[optional stable increment]`
31
+ 1. `[small, stable, verifiable increment]`
32
+ 2. `[next increment, if needed]`
71
33
 
72
- Each chunk should leave the project stable.
34
+ Use one chunk when the Feature is already small.
73
35
 
74
36
  ## Acceptance Criteria
75
37
 
76
- - The defined outcome works end to end within scope.
77
- - Relevant failure and edge behavior is handled.
78
- - Applicable quality requirements are met.
79
- - Required automated/manual checks pass.
80
- - The work can be reviewed independently.
81
-
82
- ## Verification
83
-
84
- - Manual or operational checks:
85
- - Automated checks:
86
- - Edge cases:
87
- - Quality checks:
88
-
89
- ## Learning Targets
90
-
91
- - Concepts worth explaining after completion:
92
- - Diagram or demonstration opportunity:
93
- - Quiz ideas:
38
+ - `[observable result proving the Feature works]`
39
+ - `[important verification result]`
94
40
 
95
- ## Suggested Delivery Metadata
41
+ ## Notes / Decisions
96
42
 
97
- - Git action: `[follow project workflow]`
98
- - Suggested branch, when applicable: `[project naming convention]`
99
- - Suggested commit, when applicable: `[project convention]`
43
+ - `[Feature-specific dependency, approved decision, constraint, or None]`
@@ -0,0 +1,12 @@
1
+ # Project History
2
+
3
+ Compact record of completed work.
4
+
5
+ ## Completed
6
+
7
+ ### [YYYY-MM-DD] — [Feature or milestone]
8
+
9
+ - Outcome: `[what changed for the project/user]`
10
+ - Verification: `[brief result or evidence pointer]`
11
+ - Commit/PR: `[sha, PR, or release reference]`
12
+ - Follow-up: `[only if something remains, otherwise none]`
@@ -1,71 +1,42 @@
1
1
  # Lesson — [Feature Name]
2
2
 
3
3
  - Date:
4
- - Branch:
5
- - Feature spec:
6
- - Commit or diff range:
7
- - Difficulty:
8
- - Estimated review time:
4
+ - Feature:
5
+ - Commit/diff:
9
6
 
10
- ## 1. Feature in One Minute
7
+ ## What Changed
11
8
 
12
- What changed, why it exists, and the user or system value it creates.
9
+ Explain what was implemented and why it matters.
13
10
 
14
- ## 2. Mental Model
11
+ ## Mental Model
15
12
 
16
- Explain the feature through one clear model. Include a small Mermaid diagram when useful.
13
+ Explain the simplest useful way to understand the Feature.
17
14
 
18
- ## 3. Execution and Data Flow
15
+ Include a small diagram only when it helps.
19
16
 
20
- Trace one representative interaction from input to visible result.
17
+ ## How It Works
21
18
 
22
- ## 4. Important Files
19
+ Trace one representative flow through the implementation.
23
20
 
24
- | File | Responsibility | Why it matters |
25
- | --- | --- | --- |
21
+ ## Important Files
26
22
 
27
- ## 5. Key Decisions and Tradeoffs
23
+ | File | Responsibility |
24
+ | --- | --- |
28
25
 
29
- For each meaningful decision:
26
+ Include only files that materially help understanding.
30
27
 
31
- - Decision
32
- - Evidence in the repository
33
- - Benefit
34
- - Cost
35
- - Credible alternative
36
- - When the alternative would be better
28
+ ## Key Decisions
37
29
 
38
- ## 6. Concepts Worth Retaining
30
+ - `[important decision and why it was made]`
39
31
 
40
- Limit this to the most transferable concepts.
32
+ Include only decisions worth remembering.
41
33
 
42
- ## 7. Quality Lens
34
+ ## Concepts to Retain
43
35
 
44
- ### Testing
36
+ - `[transferable concept]`
45
37
 
46
- ### Accessibility
38
+ ## Check Your Understanding
47
39
 
48
- ### Performance
49
-
50
- ### Maintainability
51
-
52
- ### Error and edge states
53
-
54
- ## 8. Production-Scale Gap
55
-
56
- What would need to change for higher traffic, larger datasets, multiple teams, stricter security, or real-time collaboration?
57
-
58
- ## 9. Interview Preparation
59
-
60
- - Likely question:
61
- - Strong answer outline:
62
- - Follow-up question:
63
- - Vocabulary to use carefully:
64
-
65
- ## 10. Check Your Understanding
66
-
67
- Three short retrieval questions. Do not include answers here.
68
-
69
- ## 11. Suggested Next Action
70
-
71
- Choose one: quiz, challenge, architecture lesson, spaced review, or no further work.
40
+ 1. `[question]`
41
+ 2. `[question]`
42
+ 3. `[question]`
@@ -1,129 +1,108 @@
1
1
  # Project Overview
2
2
 
3
- > Describe the product, audience, intended feeling, and reason it should exist.
3
+ Durable, project-wide context.
4
4
 
5
- ## Status
5
+ Keep this concise. Feature scope, active work, history, and temporary
6
+ planning belong elsewhere.
6
7
 
7
- - Project: `[Project Name]`
8
- - Stage: `[idea / prototype / MVP / production / maintenance]`
9
- - Repo type: `[new / existing / application / library / service / monorepo / other]`
10
- - Primary goal: `[success definition]`
11
- - Prototype status: `[not required / recommended / in progress / approved / rejected / TBD]`
8
+ Two words keep an unmade decision visible:
12
9
 
13
- ## Decision States
10
+ - `TBD` — a human decision is still required
11
+ - `None` — considered and intentionally excluded
14
12
 
15
- These four words describe a decision:
13
+ Leave nothing blank. A blank field is indistinguishable from an abandoned one.
16
14
 
17
- - `TBD` — human decision required
18
- - `None` — intentionally excluded
19
- - `N/A` — not applicable
20
- - `Deferred` — intentionally postponed
15
+ ## Project
21
16
 
22
- ## Record Status
17
+ - Name: `[Project Name]`
18
+ - Stage: `[idea / prototype / MVP / production / maintenance]`
19
+ - Repo type: `[application / library / service / monorepo / other]`
20
+ - Primary goal: `[what success means]`
23
21
 
24
- A `Status` column describes the record, not the decision:
22
+ ## Product
25
23
 
26
- - `proposed` written down, not yet approved by the human
27
- - `accepted` approved by the human
28
- - `superseded` replaced by a later decision, kept for history
24
+ - Problem: `[problem being solved]`
25
+ - Primary user: `[who it is for]`
26
+ - First useful outcome: `[smallest meaningful result]`
27
+ - Distinctive quality: `[what should make it good or different]`
28
+ - Avoid becoming: `[important anti-goal]`
29
29
 
30
- The two answer different questions. `TBD` says nobody has decided yet. `proposed` says something was recorded for the human to approve. A recorded proposal is not an approved decision.
30
+ ## Scope
31
31
 
32
- ## Product Vision
32
+ ### In
33
33
 
34
- - Problem:
35
- - Primary user:
36
- - First useful outcome:
37
- - Distinctive quality:
38
- - What this must avoid becoming:
34
+ - `[core outcome]`
39
35
 
40
- ## MVP Boundary
36
+ ### Out
41
37
 
42
- ### In scope
38
+ - `[explicit non-goal]`
43
39
 
44
- - `[essential outcome]`
40
+ ## Requirements and Open Decisions
45
41
 
46
- ### Out of scope
42
+ Record only what constrains the work. An open decision stays `TBD` until a
43
+ human resolves it.
47
44
 
48
- - `[deferred outcome]`
45
+ | Type | Item | Notes |
46
+ | --- | --- | --- |
47
+ | Requirement | `[must be true]` | |
48
+ | Preference | `[desired but negotiable]` | |
49
+ | Constraint | `[limit or external obligation]` | |
50
+ | Open decision | `TBD` | |
51
+
52
+ ## System
49
53
 
50
- ### Success signals
54
+ Record only important project-wide architecture and constraints.
51
55
 
52
- - `[observable user, business, system, or learning signal]`
56
+ - Architecture: `[short description or TBD]`
57
+ - Main components: `[components or TBD]`
58
+ - Constraints: `[important constraint or None]`
53
59
 
54
- ## Core Experience or System Flow
60
+ Optional flow:
55
61
 
56
62
  ```text
57
- starting state -> action/process -> useful result -> reason to return or continue
63
+ [input] -> [component] -> [result]
58
64
  ```
59
65
 
60
- ## Requirements, Preferences, Constraints, and Open Decisions
66
+ ## Technology
61
67
 
62
- | Type | Item | Notes |
68
+ The stack an agent must follow rather than choose. Keep the rows this project
69
+ actually has.
70
+
71
+ | Layer | Choice | Reason |
63
72
  | --- | --- | --- |
64
- | Requirement | `[must be true]` | |
65
- | Preference | `[desired but negotiable]` | |
66
- | Constraint | `[limit or external obligation]` | |
67
- | Open decision | `[TBD]` | |
68
-
69
- ## Recommended and Approved Technology
70
-
71
- Recommended and approved choices both live here. `debate-me` and `kickstart-pathfinder` may record a choice before the human approves it; that row is marked `proposed` in `Status` and stays that way until it is `accepted`. Leave `Status` empty while the choice is still `TBD`.
72
-
73
- | Layer | Choice | Reason | Status |
74
- | --- | --- | --- | --- |
75
- | Platform/runtime | `TBD` | | |
76
- | Language(s) | `TBD` | | |
77
- | UI/presentation | `TBD / N/A` | | |
78
- | Backend/application layer | `TBD / None` | | |
79
- | Data storage | `TBD / None` | | |
80
- | Data access/ORM | `TBD / None` | | |
81
- | Authentication | `TBD / None` | | |
82
- | Authorization | `TBD / None` | | |
83
- | API/integration style | `TBD / None` | | |
84
- | State management | `TBD / N/A` | | |
85
- | Testing | `TBD` | | |
86
- | Build/package tooling | `TBD` | | |
87
- | Deployment/runtime environment | `TBD` | | |
88
- | Observability | `TBD / Deferred` | | |
89
- | AI providers/models | `TBD / None` | | |
90
-
91
- ## Architecture
92
-
93
- - Architecture style: `TBD`
94
- - Repository shape: `TBD`
95
- - Main boundaries/modules:
96
- - Data/control flow:
97
- - Important tradeoffs:
73
+ | Platform/runtime | `TBD` | |
74
+ | Language(s) | `TBD` | |
75
+ | UI/presentation | `TBD / None` | |
76
+ | Backend/application | `TBD / None` | |
77
+ | Data storage and access | `TBD / None` | |
78
+ | Auth | `TBD / None` | |
79
+ | Testing | `TBD` | |
80
+ | Build and package tooling | `TBD` | |
98
81
 
99
- ```text
100
- [path or module] # purpose
101
- [path or module] # purpose
102
- ```
82
+ ## Commands
103
83
 
104
- ## Prototype Direction
84
+ The commands an agent runs to verify its own work.
105
85
 
106
- - Prototype needed: `[yes / no / TBD]`
107
- - Type: `[experience / technical / diagram / mixed / N/A]`
108
- - Assumption being validated:
109
- - Output location:
110
- - Review criteria:
111
- - Approved direction:
112
- - Elements explicitly not adopted into production:
86
+ ```text
87
+ install: TBD
88
+ run/dev: TBD
89
+ test: TBD
90
+ lint/static analysis: TBD
91
+ build/package: TBD
92
+ ```
113
93
 
114
94
  ## Delivery Workflow
115
95
 
116
96
  | Area | Choice |
117
97
  | --- | --- |
118
98
  | Git workflow | `TBD` |
119
- | Default/stable branch | `TBD` |
120
- | Branch naming | `TBD / N/A` |
99
+ | Default branch | `TBD` |
100
+ | Branch naming | `TBD / None` |
121
101
  | Commit convention | `TBD / None` |
122
- | Pull request policy | `TBD` |
102
+ | Review policy | `TBD` |
123
103
  | Merge strategy | `TBD` |
124
104
  | CI/CD | `TBD / None` |
125
- | Versioning | `TBD / None` |
126
- | Changelog | `TBD / None` |
105
+ | Versioning and changelog | `TBD / None` |
127
106
  | Release process | `TBD / None` |
128
107
 
129
108
  ## Environments and Integrations
@@ -133,14 +112,12 @@ Recommended and approved choices both live here. `debate-me` and `kickstart-path
133
112
  | Local development | `TBD` | |
134
113
  | Preview/staging | `TBD / None` | |
135
114
  | Production | `TBD / None` | |
136
- | Environment configuration | `TBD` | |
137
- | Secrets management | `TBD / N/A` | |
138
- | External APIs/services | `TBD / None` | |
139
- | Rate/cost limits | `TBD / N/A` | |
115
+ | Configuration and secrets | `TBD` | |
116
+ | External services/APIs | `TBD / None` | |
140
117
 
141
118
  ## Quality Priorities
142
119
 
143
- Rank only what matters for this project.
120
+ Rank only what matters for this project, highest first.
144
121
 
145
122
  1. `[priority]`
146
123
  2. `[priority]`
@@ -149,63 +126,21 @@ Rank only what matters for this project.
149
126
  | Concern | Target or decision |
150
127
  | --- | --- |
151
128
  | Correctness/reliability | `TBD` |
152
- | Security/privacy | `TBD / N/A` |
153
- | Accessibility | `TBD / N/A` |
154
- | Performance | `TBD / N/A` |
155
- | Browser/platform support | `TBD / N/A` |
156
- | Localization | `TBD / None` |
157
- | Offline behavior | `TBD / N/A` |
158
-
159
- ## Core Domain Concepts
160
-
161
- Describe durable concepts without assuming a language:
162
-
163
- ```text
164
- Entity/Concept: Example
165
- Required fields: id, name
166
- Important states: draft, active, archived
167
- Relationships: belongs to / contains / references
168
- ```
169
-
170
- ## Build, Test, and Run Commands
129
+ | Security/privacy | `TBD / None` |
130
+ | Accessibility | `TBD / None` |
131
+ | Performance | `TBD / None` |
132
+ | Supported platforms | `TBD / None` |
171
133
 
172
- ```text
173
- install: TBD
174
- run/dev: TBD
175
- test: TBD
176
- lint/static analysis: TBD
177
- build/package: TBD
178
- other verification: TBD
179
- ```
134
+ ## Durable Decisions
180
135
 
181
- ## Build Phases
136
+ Decisions that outlive a Feature, including approved prototype direction and
137
+ anything a prototype proved must not reach production.
182
138
 
183
- | Phase | Goal | Visible or verifiable win |
139
+ | Date | Decision | Reason |
184
140
  | --- | --- | --- |
185
- | 1 | Foundation | `[result]` |
186
- | 2 | Core experience/system | `[result]` |
187
- | 3 | Real data/integration | `[result]` |
188
- | 4 | Quality and release readiness | `[result]` |
141
+ | `[YYYY-MM-DD]` | `[decision]` | `[reason]` |
189
142
 
190
- ## Learning Goals
143
+ ## Learning
191
144
 
192
- - What the human wants to understand:
145
+ - What the human wants to understand: `[topics or None]`
193
146
  - Preferred lesson format: `[HTML / MDX / Markdown / existing docs system / TBD]`
194
- - Quiz preferences:
195
- - Topics to emphasize:
196
- - Topics to avoid over-explaining:
197
-
198
- ## Durable Decisions
199
-
200
- | Date | Decision | Reason | Status |
201
- | --- | --- | --- | --- |
202
- | `[YYYY-MM-DD]` | `[decision]` | `[reason]` | `[proposed / accepted / superseded]` |
203
-
204
- ## Things To Avoid
205
-
206
- - Building before critical decisions are understood.
207
- - Treating recommendations as approval.
208
- - Silently resolving `TBD` items.
209
- - Turning prototype shortcuts into production defaults.
210
- - Over-documenting temporary implementation detail.
211
- - Creating feature specs too large for a focused LLM context window.