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.
- package/AGENTS.md +1 -0
- package/CLAUDE.md +1 -0
- package/README.md +16 -23
- package/bin/cli.js +49 -2
- package/bin/command-surface.js +71 -0
- package/bin/harness-eval.js +296 -0
- package/bin/install.js +17 -20
- package/bin/knowledge-flush.js +21 -10
- package/bin/knowledge.js +1 -1
- package/bin/project-snapshot.js +20 -0
- package/bin/report-payload.js +18 -0
- package/bin/runtime-manifest.js +3 -0
- package/bin/state.js +31 -0
- package/bin/trust-score.js +3 -11
- package/bin/work-packet.js +228 -0
- package/docs/erp-contract.md +81 -1
- package/docs/onboarding.html +0 -11
- package/guide.md +14 -15
- package/hooks/fawzi-approval-guard.js +143 -0
- package/hooks/pre-deploy-gate.js +74 -1
- package/hooks/session-start.js +29 -1
- package/package.json +1 -1
- package/qualia-design/frontend.md +2 -2
- package/rules/codex-goal.md +1 -1
- package/rules/one-opinion.md +2 -2
- package/rules/speed.md +0 -1
- package/skills/qualia/SKILL.md +4 -4
- package/skills/qualia-feature/SKILL.md +1 -1
- package/skills/qualia-fix/SKILL.md +4 -4
- package/skills/qualia-learn/SKILL.md +1 -1
- package/skills/qualia-polish/REFERENCE.md +1 -1
- package/skills/qualia-polish/SKILL.md +19 -4
- package/skills/{qualia-vibe/scripts/extract.mjs → qualia-polish/scripts/vibe-extract.mjs} +4 -4
- package/skills/{qualia-vibe/scripts/tokens.mjs → qualia-polish/scripts/vibe-tokens.mjs} +6 -6
- package/skills/qualia-road/SKILL.md +15 -20
- package/skills/qualia-ship/SKILL.md +12 -5
- package/skills/qualia-verify/SKILL.md +9 -1
- package/templates/help.html +1 -12
- package/tests/bin.test.sh +144 -72
- package/tests/hooks.test.sh +81 -1
- package/tests/install-smoke.test.sh +13 -3
- package/tests/lib.test.sh +145 -3
- package/tests/published-install-smoke.test.sh +4 -3
- package/tests/refs.test.sh +9 -4
- package/tests/runner.js +29 -28
- package/tests/state.test.sh +68 -0
- package/skills/qualia-debug/SKILL.md +0 -193
- package/skills/qualia-flush/SKILL.md +0 -198
- package/skills/qualia-help/SKILL.md +0 -74
- package/skills/qualia-hook-gen/SKILL.md +0 -206
- package/skills/qualia-idk/SKILL.md +0 -166
- package/skills/qualia-issues/SKILL.md +0 -151
- package/skills/qualia-pause/SKILL.md +0 -68
- package/skills/qualia-resume/SKILL.md +0 -52
- package/skills/qualia-skill-new/SKILL.md +0 -173
- package/skills/qualia-triage/SKILL.md +0 -152
- package/skills/qualia-vibe/SKILL.md +0 -229
- 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.
|