qualia-framework 6.2.10 → 6.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 (58) hide show
  1. package/AGENTS.md +1 -0
  2. package/CLAUDE.md +1 -0
  3. package/README.md +16 -23
  4. package/bin/cli.js +49 -2
  5. package/bin/command-surface.js +71 -0
  6. package/bin/harness-eval.js +296 -0
  7. package/bin/install.js +17 -20
  8. package/bin/knowledge-flush.js +21 -10
  9. package/bin/knowledge.js +1 -1
  10. package/bin/project-snapshot.js +20 -0
  11. package/bin/report-payload.js +18 -0
  12. package/bin/runtime-manifest.js +3 -0
  13. package/bin/state.js +31 -0
  14. package/bin/trust-score.js +3 -11
  15. package/bin/work-packet.js +228 -0
  16. package/docs/erp-contract.md +81 -1
  17. package/docs/onboarding.html +0 -11
  18. package/guide.md +14 -15
  19. package/hooks/fawzi-approval-guard.js +143 -0
  20. package/hooks/pre-deploy-gate.js +74 -1
  21. package/hooks/session-start.js +29 -1
  22. package/package.json +1 -1
  23. package/qualia-design/frontend.md +2 -2
  24. package/rules/codex-goal.md +1 -1
  25. package/rules/one-opinion.md +2 -2
  26. package/rules/speed.md +0 -1
  27. package/skills/qualia/SKILL.md +4 -4
  28. package/skills/qualia-feature/SKILL.md +1 -1
  29. package/skills/qualia-fix/SKILL.md +4 -4
  30. package/skills/qualia-learn/SKILL.md +1 -1
  31. package/skills/qualia-polish/REFERENCE.md +1 -1
  32. package/skills/qualia-polish/SKILL.md +19 -4
  33. package/skills/{qualia-vibe/scripts/extract.mjs → qualia-polish/scripts/vibe-extract.mjs} +4 -4
  34. package/skills/{qualia-vibe/scripts/tokens.mjs → qualia-polish/scripts/vibe-tokens.mjs} +6 -6
  35. package/skills/qualia-road/SKILL.md +15 -20
  36. package/skills/qualia-ship/SKILL.md +12 -5
  37. package/skills/qualia-verify/SKILL.md +9 -1
  38. package/templates/help.html +1 -12
  39. package/tests/bin.test.sh +144 -72
  40. package/tests/hooks.test.sh +81 -1
  41. package/tests/install-smoke.test.sh +13 -3
  42. package/tests/lib.test.sh +145 -3
  43. package/tests/published-install-smoke.test.sh +4 -3
  44. package/tests/refs.test.sh +9 -4
  45. package/tests/runner.js +29 -28
  46. package/tests/state.test.sh +68 -0
  47. package/skills/qualia-debug/SKILL.md +0 -193
  48. package/skills/qualia-flush/SKILL.md +0 -198
  49. package/skills/qualia-help/SKILL.md +0 -74
  50. package/skills/qualia-hook-gen/SKILL.md +0 -206
  51. package/skills/qualia-idk/SKILL.md +0 -166
  52. package/skills/qualia-issues/SKILL.md +0 -151
  53. package/skills/qualia-pause/SKILL.md +0 -68
  54. package/skills/qualia-resume/SKILL.md +0 -52
  55. package/skills/qualia-skill-new/SKILL.md +0 -173
  56. package/skills/qualia-triage/SKILL.md +0 -152
  57. package/skills/qualia-vibe/SKILL.md +0 -229
  58. package/skills/qualia-zoom/SKILL.md +0 -51
@@ -1,152 +0,0 @@
1
- ---
2
- name: qualia-triage
3
- description: "State machine over open GH issues — labels each as needs-triage, needs-info, ready-for-agent, ready-for-human, or wontfix. Optionally routes ready-for-agent issues into an autonomous /qualia-build run. Pairs with /qualia-issues to enable the autonomous Ralph-Wiggum loop where agents pull work from the queue without human-in-loop. Use when user says 'triage', 'qualia-triage', 'route the queue', 'pull next from backlog', 'what's ready for the agent'. Hard dependency: requires .planning/agents/labels.md — run /qualia-map first if missing."
4
- allowed-tools:
5
- - Bash
6
- - Read
7
- - Write
8
- - Edit
9
- - Grep
10
- - Glob
11
- - AskUserQuestion
12
- ---
13
-
14
- # /qualia-triage — Issue Queue State Machine
15
-
16
- Walks the open issue queue, applies state labels, optionally routes `ready-for-agent` issues into autonomous build runs.
17
-
18
- ## The state machine
19
-
20
- Every issue carries exactly one **category** label and exactly one **state** label.
21
-
22
- **Category labels** (mutually exclusive):
23
- - `bug` — something is broken
24
- - `enhancement` — new feature or improvement
25
-
26
- **State labels** (exactly one per issue):
27
- - `needs-triage` — initial state, awaiting maintainer evaluation
28
- - `needs-info` — clarification needed from reporter
29
- - `ready-for-agent` — fully specified, autonomous build can pull this
30
- - `ready-for-human` — requires human implementation (judgment, sensitive area, scope unclear)
31
- - `wontfix` — rejected
32
-
33
- **Flow:**
34
-
35
- ```
36
- unlabeled → needs-triage → ┬→ needs-info → (response) → needs-triage
37
- ├→ ready-for-agent → (autonomous build) → closed
38
- ├→ ready-for-human → (human picks up) → closed
39
- └→ wontfix → closed
40
- ```
41
-
42
- ## Hard dependencies
43
-
44
- This skill cannot work meaningfully without:
45
- - `.planning/agents/labels.md` — canonical-role-to-existing-label mapping
46
- - `.planning/agents/tracker.md` — tells it where the queue lives
47
- - `gh` CLI authenticated (if tracker is GitHub)
48
-
49
- If missing, halt: "Run `/qualia-map` first to scan your repo and write the adapter config."
50
-
51
- ## Process
52
-
53
- ### 1. Load substrate
54
-
55
- ```bash
56
- cat .planning/agents/labels.md
57
- cat .planning/agents/tracker.md
58
- cat .planning/CONTEXT.md 2>/dev/null
59
- ```
60
-
61
- If labels are missing in the tracker, create them per the canonical mapping.
62
-
63
- ### 2. List the queue
64
-
65
- ```bash
66
- gh issue list --state open --limit 50 --json number,title,body,labels --jq '.'
67
- ```
68
-
69
- ### 3. Classify each unlabeled / needs-triage issue
70
-
71
- For each issue:
72
-
73
- **Read the body. Then assign one state per these criteria:**
74
-
75
- | State | Criteria |
76
- |---|---|
77
- | `ready-for-agent` | Acceptance criteria are explicit + observable. Touches files Qualia knows. No business-judgment calls. No security-sensitive areas without explicit ADR backing. |
78
- | `ready-for-human` | Requires judgment Qualia shouldn't make. Touches security/auth/payments without ADR. Scope is fuzzy. Risk is high. |
79
- | `needs-info` | Reporter left out reproduction steps, expected behavior, or scope is too vague to act on. |
80
- | `wontfix` | Out of project scope per PROJECT.md. Already implemented. Duplicate of #N. Conflicts with locked ADR. |
81
-
82
- For each issue, also assign category (`bug` if behavior is broken vs spec, `enhancement` otherwise).
83
-
84
- ### 4. Apply labels
85
-
86
- ```bash
87
- gh issue edit {N} --add-label "{state},{category}" --remove-label "needs-triage"
88
- ```
89
-
90
- For `needs-info`, also post a comment with the specific questions. Use `--body-file` (never heredoc-interpolate) — issue text is user-controlled and could contain shell metacharacters or a rogue `EOF`:
91
-
92
- ```bash
93
- COMMENT_FILE=$(mktemp -t qualia-triage.XXXXXX.md)
94
- cat > "$COMMENT_FILE" <<EOF_TEMPLATE
95
- Need a few more details to triage this:
96
-
97
- 1. {specific question 1}
98
- 2. {specific question 2}
99
-
100
- Once these are answered I'll re-triage.
101
- EOF_TEMPLATE
102
-
103
- gh issue comment {N} --body-file "$COMMENT_FILE"
104
- rm -f "$COMMENT_FILE"
105
- ```
106
-
107
- ### 5. Show the queue snapshot
108
-
109
- ```
110
- Triaged {N} issues:
111
-
112
- ready-for-agent: {count} ─ #123, #124, #126
113
- ready-for-human: {count} ─ #125, #127
114
- needs-info: {count} ─ #128
115
- wontfix: {count} ─ #129
116
- ```
117
-
118
- ### 6. Optional autonomous loop
119
-
120
- ```
121
- {N} issues ready-for-agent. Pull the next one into autonomous build?
122
- ```
123
-
124
- `AskUserQuestion`:
125
- - header: "Auto-pull?"
126
- - question: "Pull #{first ready-for-agent} into autonomous /qualia-build?"
127
- - options:
128
- - "Pull it" — feed the issue into a fresh /qualia-build run, then re-triage when done
129
- - "Pause" — stop here, user picks up manually
130
-
131
- If "Pull it":
132
- 1. Read the issue body fully
133
- 2. Spawn `/qualia-build` with the issue body as task input
134
- 3. After build completes and verifies green, comment the closing PR/commit on the issue and `gh issue close {N}`
135
- 4. Loop back to step 6 (next ready-for-agent issue)
136
-
137
- The loop continues until the queue empties or the user pauses.
138
-
139
- ### 7. Final report
140
-
141
- ```bash
142
- node ${QUALIA_BIN}/qualia-ui.js end "QUEUE TRIAGED" "/qualia or /qualia-build {next}"
143
- ```
144
-
145
- ## Rules
146
-
147
- 1. **One category, one state — always.** No issue without both labels (after triage). No issue with two of either.
148
- 2. **`ready-for-agent` is conservative.** When in doubt, `ready-for-human`. Wrong agent-pull is more expensive than a human picking it up.
149
- 3. **`needs-info` posts a comment.** Don't just label and walk away — the reporter must know what's blocking.
150
- 4. **`wontfix` cites a reason.** Body or comment must say WHY (out of scope per PROJECT.md, conflicts with ADR-NNNN, duplicate of #N).
151
- 5. **Autonomous loop is opt-in per session.** Don't auto-loop without the user pressing "Pull it" each cycle (until they explicitly ask for a continuous run).
152
- 6. **Re-triage on response.** When `needs-info` issues get a reply, they return to `needs-triage` for re-evaluation.
@@ -1,229 +0,0 @@
1
- ---
2
- name: qualia-vibe
3
- description: "Fast aesthetic-token pivot — swap the design vibe (color, typography, motion, depth) without touching component structure, layout, routes, or behavior. Default mode proposes ONE direction (per rules/one-opinion.md). Sub-modes: --variants for A/B/C menu, --extract URL to reverse-engineer DESIGN.md, --sync to back-sync code → DESIGN.md. Triggers: 'different vibe', 'change the look', 'swap the aesthetic', 'try something bolder', 'match this site', 'sync the design file'. Route structural redesign to /qualia-polish --redesign and broken UI behavior to /qualia-fix."
4
- disable-model-invocation: false
5
- allowed-tools:
6
- - Bash
7
- - Read
8
- - Write
9
- - Edit
10
- - Glob
11
- - Grep
12
- - AskUserQuestion
13
- ---
14
-
15
- # /qualia-vibe — Fast Aesthetic Pivot
16
-
17
- Swap the **vibe** without redoing the **app**. Tokens only: color, typography, depth, motion, brand accents. Component structure, routing, data flow, and layout grid stay exactly where they were. This is the difference between `/qualia-vibe` (~3 min) and `/qualia-polish --redesign` (~30 min).
18
-
19
- ## When to use
20
-
21
- - Client said "I want a different vibe" / "make it look bolder" / "this feels too startup-y" → `/qualia-vibe`
22
- - You want to test if a different aesthetic is right BEFORE committing the redesign → `/qualia-vibe`
23
- - You want to match a reference site's design system → `/qualia-vibe --extract https://example.com`
24
- - Someone changed CSS vars or Tailwind config directly and DESIGN.md is out of sync → `/qualia-vibe --sync`
25
- - You want to enumerate options (rare — see `rules/one-opinion.md`) → `/qualia-vibe --variants 3`
26
-
27
- ## When NOT to use
28
-
29
- - The complaint is "this component is broken" as behavior → `/qualia-fix`.
30
- - The complaint is "the spacing is wrong" or "this looks rough" → `/qualia-polish` (component or section scope).
31
- - The site has no DESIGN.md yet → run `/qualia-new` first; vibe is a PIVOT, not a cold start.
32
- - You want a structural redesign (layout, navigation, information architecture) → `/qualia-polish --redesign` (~30 min ground-up).
33
-
34
- ## Layout-preservation contract
35
-
36
- `/qualia-vibe` ONLY changes:
37
-
38
- - Color tokens (CSS vars / Tailwind palette / brand accents).
39
- - Typography (font-family, scale, weights, italic accents).
40
- - Depth tokens (shadow elevations, border treatments).
41
- - Motion tokens (easing, duration, signature interactions).
42
- - The "Aesthetic direction" line in DESIGN.md §1.
43
-
44
- It does NOT touch:
45
-
46
- - Component structure (`return (…)` JSX is preserved).
47
- - Routing, data fetching, business logic.
48
- - Layout grid (responsive breakpoints, container widths).
49
- - Information architecture or copy.
50
-
51
- If the user actually wants structural change, route to `/qualia-polish --redesign`.
52
-
53
- ## Modes
54
-
55
- ### Default — propose one pivot, apply it
56
-
57
- Per `rules/one-opinion.md`. Read PRODUCT.md register + anti-references + scene sentence. Propose ONE concrete direction with one-paragraph justification. Ask one yes/no: "Ship this, or pivot?" If user pivots, ask what they didn't like, propose ONE alternative. Never widen.
58
-
59
- ### `--variants N`
60
-
61
- The opt-in menu. Generate N concrete direction briefs (each 4 lines: direction / color / typography / motion). Use `AskUserQuestion` to let the user pick. Default N=3, max 5.
62
-
63
- ### `--extract <URL or image path>`
64
-
65
- Reverse-engineer a DESIGN.md draft from a reference. Captures a screenshot at 1440 (via `scripts/playwright-capture.mjs`), runs an extract-mode vision prompt (NOT score-mode), outputs structured tokens matching DESIGN.md sections 1-7. User reviews + edits the draft before applying.
66
-
67
- ### `--sync`
68
-
69
- Back-sync. Reads the codebase's actual CSS vars, Tailwind config, and font imports. Diffs against DESIGN.md. Outputs (a) tokens in code not in DESIGN.md ("undocumented"), (b) tokens in DESIGN.md not in code ("orphaned"), (c) tokens that drifted in value. With `--sync --write`, patches DESIGN.md to match code.
70
-
71
- ## Process
72
-
73
- ### 0. Pre-flight gates
74
-
75
- ```bash
76
- node ${QUALIA_BIN}/qualia-ui.js banner vibe 2>/dev/null
77
-
78
- # DESIGN.md must exist
79
- test -f .planning/DESIGN.md || {
80
- echo "DESIGN.md not found. Run /qualia-new (or /qualia-polish --redesign for a ground-up redesign) first."
81
- exit 1
82
- }
83
-
84
- # PRODUCT.md should exist (for register + anti-references context)
85
- test -f .planning/PRODUCT.md || echo "Warning: PRODUCT.md missing — vibe proposals will be less anchored. Consider /qualia-new first."
86
- ```
87
-
88
- ### 1. Parse the mode
89
-
90
- - `--extract <url-or-path>` → go to Extract flow.
91
- - `--sync` (with optional `--write`) → go to Sync flow.
92
- - `--variants [N]` → go to Variants flow.
93
- - Direction explicitly named on command line (e.g. `/qualia-vibe brutalist`) → skip proposal, jump to Apply.
94
- - Otherwise → Default (propose one).
95
-
96
- ### 2. Default flow (propose one)
97
-
98
- Read substrate:
99
- - `.planning/PRODUCT.md` (register, anti-references, scene sentence)
100
- - `.planning/DESIGN.md` (current direction, current token set)
101
- - `qualia-design/design-laws.md` (banned patterns)
102
- - `qualia-design/design-brand.md` OR `qualia-design/design-product.md` (matching register)
103
-
104
- Propose ONE direction. Output format:
105
-
106
- ```
107
- Current: {DESIGN.md §1 direction line}
108
- Proposed: {ONE new direction, concrete — e.g. "editorial broadsheet, ivory ground, deep navy ink, italic Cormorant accents"}
109
- Why: {1-2 sentences citing PRODUCT.md register, anti-refs, scene sentence}
110
- Token deltas: {3-7 bullet token changes the pivot implies}
111
- Cost: ~3 min to apply, layout preserved.
112
- ```
113
-
114
- Use `AskUserQuestion` with two options: `Ship this pivot` / `Different direction`.
115
-
116
- If "Different direction": ask one follow-up — "What about the proposal didn't fit?" — then propose ONE new direction with the rejection incorporated. Never enumerate alternatives.
117
-
118
- ### 3. Apply
119
-
120
- Once user approves a direction:
121
-
122
- 1. Update DESIGN.md §1 (Aesthetic direction).
123
- 2. Update DESIGN.md §2 (Color — OKLCH token set).
124
- 3. Update DESIGN.md §3 (Typography — font-family, scale).
125
- 4. Update DESIGN.md §6 (Depth — shadow elevations).
126
- 5. Update DESIGN.md §7 (Motion — easing, duration).
127
- 6. Apply the same token changes to code:
128
- - CSS vars in `app/globals.css` or `src/styles/globals.css` (whichever exists)
129
- - `tailwind.config.{ts,js,mjs}` colors / fonts / spacing extensions
130
- - Font imports (`@import url(...)` in CSS, or `<link>` in `app/layout.tsx`, or `next/font/google` calls)
131
- 7. Run `node ${QUALIA_BIN}/slop-detect.mjs` on changed files. Block on critical findings (no banned fonts in the new vibe).
132
- 8. Capture one screenshot at desktop (1440) for visual diff:
133
- ```bash
134
- mkdir -p .planning/assets/vibe
135
- node ${QUALIA_SKILLS}/qualia-polish/scripts/playwright-capture.mjs \
136
- --url ${URL:-http://localhost:3000} \
137
- --out .planning/assets/vibe/vibe-after.png \
138
- --width 1440
139
- ```
140
- 9. Commit:
141
- ```bash
142
- git -c user.name="Qualia Vibe" -c user.email="vibe@qualia.solutions" \
143
- commit -m "vibe(pivot): {old direction} → {new direction}"
144
- ```
145
-
146
- If the commit fails (no dev server, no slop-detect, network error), surface the exact failure — do NOT silently swallow.
147
-
148
- ### 4. Variants flow
149
-
150
- ```bash
151
- node ${QUALIA_SKILLS}/qualia-vibe/scripts/tokens.mjs propose-variants \
152
- --product .planning/PRODUCT.md \
153
- --design .planning/DESIGN.md \
154
- --count ${N:-3}
155
- ```
156
-
157
- Output N briefs side-by-side. `AskUserQuestion` with N options (one per variant) plus "None of these — propose something else". User picks one → continue to Apply (step 3).
158
-
159
- ### 5. Extract flow
160
-
161
- ```bash
162
- mkdir -p .planning/design
163
- node ${QUALIA_SKILLS}/qualia-vibe/scripts/extract.mjs \
164
- --source ${URL_OR_IMAGE} \
165
- --out .planning/design/DESIGN-extracted.md
166
- ```
167
-
168
- The script:
169
- 1. If source is a URL, capture screenshot via `playwright-capture.mjs`.
170
- 2. Sends screenshot + extract-mode prompt to visual-evaluator agent.
171
- 3. Visual evaluator returns a JSON token bundle (color OKLCH, font families, scale, depth, motion).
172
- 4. Script renders the bundle into a DESIGN.md draft.
173
-
174
- Present the draft. Diff against current DESIGN.md. User can: `Apply as new vibe`, `Save draft only`, or `Cancel`. If apply → Apply flow (step 3) using the extracted tokens.
175
-
176
- ### 6. Sync flow
177
-
178
- ```bash
179
- node ${QUALIA_SKILLS}/qualia-vibe/scripts/tokens.mjs sync \
180
- --design .planning/DESIGN.md \
181
- ${WRITE:+--write}
182
- ```
183
-
184
- The script:
185
- 1. Greps CSS for `:root { --token: value; }` declarations.
186
- 2. Reads `tailwind.config.*` for colors / fonts / spacing extensions.
187
- 3. Parses font imports.
188
- 4. Diffs against DESIGN.md token sections.
189
- 5. Prints three sections: `Undocumented (in code, not in DESIGN.md)`, `Orphaned (in DESIGN.md, not in code)`, `Drifted (different values)`.
190
- 6. If `--write`, patches DESIGN.md to match code; commits with `vibe(sync): align DESIGN.md to code`.
191
-
192
- ## Output contracts
193
-
194
- Vibe always writes ONE of these as its final line:
195
-
196
- - `DONE — vibe pivot: {old direction} → {new direction} ({sha})`
197
- - `DONE — vibe extract: draft saved to {path}`
198
- - `DONE — vibe sync: {N} drift findings ({sha if --write})`
199
- - `CANCELLED — user declined all proposed pivots`
200
- - `BLOCKED — {reason}` (DESIGN.md missing, slop-detect critical, etc.)
201
-
202
- ## Rules
203
-
204
- 1. **One opinion by default.** Per `rules/one-opinion.md`. Menus require explicit `--variants`.
205
- 2. **Layout never changes.** If the proposal would require touching JSX structure, route to `/qualia-polish --redesign` and stop.
206
- 3. **DESIGN.md and code stay in sync.** Every apply writes BOTH. Sync mode exists to recover from drift, not to normalize it.
207
- 4. **slop-detect is the brake.** A pivot that introduces a banned font / gradient / hex-in-jsx is rejected. The new vibe must pass the same gates as the old one.
208
- 5. **One screenshot, not three.** Vibe is fast by design. The full 3-viewport check belongs in `/qualia-polish --loop` after the vibe lands.
209
- 6. **Commit identity is local.** Vibe sets git user inline so it works on fresh clones without global config.
210
-
211
- ## Anti-patterns
212
-
213
- - ❌ Presenting "Here are 5 directions: pick one" when the user said "change the vibe". → Use `rules/one-opinion.md`: propose ONE.
214
- - ❌ Touching `return (…)` JSX. → If the pivot needs structural change, stop and route to `--redesign`.
215
- - ❌ Skipping slop-detect because "the user is in a hurry". → The vibe pivot is exactly when banned fonts/gradients sneak in.
216
- - ❌ Auto-running `--sync --write` without surfacing the diff first. → Always show drift before patching DESIGN.md.
217
- - ❌ Treating `--extract` output as ground truth. → It's a DRAFT. User must approve before apply.
218
-
219
- ## Examples
220
-
221
- ```
222
- /qualia-vibe # propose one pivot, apply on approval
223
- /qualia-vibe brutalist # explicit pivot to named direction
224
- /qualia-vibe --variants 3 # generate 3 options (use sparingly)
225
- /qualia-vibe --extract https://stripe.com
226
- /qualia-vibe --extract ./refs/inspo.png
227
- /qualia-vibe --sync # show drift between code and DESIGN.md
228
- /qualia-vibe --sync --write # patch DESIGN.md to match code, commit
229
- ```
@@ -1,51 +0,0 @@
1
- ---
2
- name: qualia-zoom
3
- description: "Zoom out and map an unfamiliar code area in domain-glossary terms — list the modules, who calls them, what they hide, and the smallest safe edit window. User-fired only (never auto). Use when you don't know an area of code well, before editing an unfamiliar file, or when the user says 'zoom out', 'map this area', 'show me the bigger picture', 'I don't know this code'."
4
- disable-model-invocation: true
5
- allowed-tools:
6
- - Read
7
- - Grep
8
- - Glob
9
- ---
10
-
11
- # /qualia-zoom — Map an Unfamiliar Area
12
-
13
- I don't know this area of code well. Go up a layer of abstraction.
14
-
15
- Give me a map of:
16
-
17
- 1. **Modules** in this area — what they expose, what they hide
18
- 2. **Callers** — who uses these modules and from where
19
- 3. **Dependencies** — what these modules pull in
20
- 4. **Domain terms involved** — quoted from `.planning/CONTEXT.md` if it exists
21
-
22
- Use the **vocabulary in `.planning/CONTEXT.md`** wherever applicable. If a term in this code conflicts with the glossary, flag it for `/qualia-discuss` (which now grills + updates CONTEXT.md inline).
23
-
24
- ## Output format
25
-
26
- ```
27
- ## Where you are
28
- {file or path being zoomed out from}
29
-
30
- ## Module map
31
- - {module/file} — exposes: {x} — hides: {y}
32
- - ...
33
-
34
- ## Caller map
35
- - {caller} → {module} (used for {purpose})
36
- - ...
37
-
38
- ## Domain terms
39
- - {term from glossary} — appears in {files}
40
- - {term NOT in glossary but present in code} — flag for /qualia-discuss
41
-
42
- ## Smallest safe edit window
43
- {which files form the natural unit for this change}
44
- ```
45
-
46
- ## Rules
47
-
48
- - Keep the report under **50 lines**. Orient, don't refactor.
49
- - **Don't propose changes** — that's the next skill's job.
50
- - Read `.planning/CONTEXT.md` first if it exists. Use its language.
51
- - If the area is huge, pick the entry point the user named and zoom from there.