learnship 1.9.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/.claude-plugin/plugin.json +26 -0
- package/.cursor-plugin/plugin.json +26 -0
- package/LICENSE +21 -0
- package/README.md +791 -0
- package/SKILL.md +86 -0
- package/agents/debugger.md +102 -0
- package/agents/executor.md +115 -0
- package/agents/learnship-debugger.md +146 -0
- package/agents/learnship-executor.md +155 -0
- package/agents/learnship-phase-researcher.md +128 -0
- package/agents/learnship-plan-checker.md +119 -0
- package/agents/learnship-planner.md +146 -0
- package/agents/learnship-verifier.md +157 -0
- package/agents/planner.md +109 -0
- package/agents/researcher.md +80 -0
- package/agents/verifier.md +114 -0
- package/bin/install.js +1242 -0
- package/bin/learnship.js +56 -0
- package/commands/learnship/add-phase.md +22 -0
- package/commands/learnship/add-tests.md +24 -0
- package/commands/learnship/add-todo.md +21 -0
- package/commands/learnship/audit-milestone.md +21 -0
- package/commands/learnship/check-todos.md +22 -0
- package/commands/learnship/cleanup.md +22 -0
- package/commands/learnship/complete-milestone.md +22 -0
- package/commands/learnship/debug.md +27 -0
- package/commands/learnship/decision-log.md +22 -0
- package/commands/learnship/diagnose-issues.md +23 -0
- package/commands/learnship/discovery-phase.md +24 -0
- package/commands/learnship/discuss-milestone.md +23 -0
- package/commands/learnship/discuss-phase.md +23 -0
- package/commands/learnship/execute-phase.md +27 -0
- package/commands/learnship/execute-plan.md +26 -0
- package/commands/learnship/health.md +20 -0
- package/commands/learnship/help.md +19 -0
- package/commands/learnship/insert-phase.md +22 -0
- package/commands/learnship/knowledge-base.md +21 -0
- package/commands/learnship/list-phase-assumptions.md +21 -0
- package/commands/learnship/ls.md +20 -0
- package/commands/learnship/map-codebase.md +23 -0
- package/commands/learnship/milestone-retrospective.md +21 -0
- package/commands/learnship/new-milestone.md +23 -0
- package/commands/learnship/new-project.md +24 -0
- package/commands/learnship/next.md +22 -0
- package/commands/learnship/pause-work.md +21 -0
- package/commands/learnship/plan-milestone-gaps.md +22 -0
- package/commands/learnship/plan-phase.md +24 -0
- package/commands/learnship/progress.md +20 -0
- package/commands/learnship/quick.md +27 -0
- package/commands/learnship/reapply-patches.md +21 -0
- package/commands/learnship/release.md +21 -0
- package/commands/learnship/remove-phase.md +23 -0
- package/commands/learnship/research-phase.md +23 -0
- package/commands/learnship/resume-work.md +21 -0
- package/commands/learnship/set-profile.md +21 -0
- package/commands/learnship/settings.md +21 -0
- package/commands/learnship/transition.md +21 -0
- package/commands/learnship/update.md +21 -0
- package/commands/learnship/validate-phase.md +22 -0
- package/commands/learnship/verify-work.md +23 -0
- package/cursor-rules/learnship.mdc +60 -0
- package/gemini-extension.json +10 -0
- package/hooks/hooks-claude.json +15 -0
- package/hooks/hooks-cursor.json +10 -0
- package/hooks/session-start +43 -0
- package/install.sh +254 -0
- package/learnship/references/design-commands.md +119 -0
- package/learnship/references/git-integration.md +249 -0
- package/learnship/references/learning-design.md +142 -0
- package/learnship/references/model-profiles.md +90 -0
- package/learnship/references/planning-config.md +184 -0
- package/learnship/references/questioning.md +162 -0
- package/learnship/references/ui-brand.md +160 -0
- package/learnship/references/verification-patterns.md +608 -0
- package/learnship/templates/agents.md +166 -0
- package/learnship/templates/context.md +72 -0
- package/learnship/templates/plan.md +202 -0
- package/learnship/templates/project.md +184 -0
- package/learnship/templates/requirements.md +231 -0
- package/learnship/templates/state.md +176 -0
- package/learnship/templates/uat.md +80 -0
- package/learnship/workflows/add-phase.md +84 -0
- package/learnship/workflows/add-tests.md +191 -0
- package/learnship/workflows/add-todo.md +108 -0
- package/learnship/workflows/audit-milestone.md +178 -0
- package/learnship/workflows/check-todos.md +138 -0
- package/learnship/workflows/cleanup.md +107 -0
- package/learnship/workflows/complete-milestone.md +191 -0
- package/learnship/workflows/debug.md +245 -0
- package/learnship/workflows/decision-log.md +131 -0
- package/learnship/workflows/diagnose-issues.md +145 -0
- package/learnship/workflows/discovery-phase.md +183 -0
- package/learnship/workflows/discuss-milestone.md +136 -0
- package/learnship/workflows/discuss-phase.md +244 -0
- package/learnship/workflows/execute-phase.md +345 -0
- package/learnship/workflows/execute-plan.md +149 -0
- package/learnship/workflows/health.md +171 -0
- package/learnship/workflows/help.md +153 -0
- package/learnship/workflows/insert-phase.md +106 -0
- package/learnship/workflows/knowledge-base.md +168 -0
- package/learnship/workflows/list-phase-assumptions.md +129 -0
- package/learnship/workflows/ls.md +145 -0
- package/learnship/workflows/map-codebase.md +142 -0
- package/learnship/workflows/milestone-retrospective.md +178 -0
- package/learnship/workflows/new-milestone.md +200 -0
- package/learnship/workflows/new-project.md +340 -0
- package/learnship/workflows/next.md +100 -0
- package/learnship/workflows/pause-work.md +122 -0
- package/learnship/workflows/plan-milestone-gaps.md +160 -0
- package/learnship/workflows/plan-phase.md +288 -0
- package/learnship/workflows/progress.md +118 -0
- package/learnship/workflows/quick.md +256 -0
- package/learnship/workflows/reapply-patches.md +130 -0
- package/learnship/workflows/release.md +217 -0
- package/learnship/workflows/remove-phase.md +128 -0
- package/learnship/workflows/research-phase.md +137 -0
- package/learnship/workflows/resume-work.md +162 -0
- package/learnship/workflows/set-profile.md +78 -0
- package/learnship/workflows/settings.md +204 -0
- package/learnship/workflows/sync-upstream-skills.md +269 -0
- package/learnship/workflows/transition.md +165 -0
- package/learnship/workflows/update.md +166 -0
- package/learnship/workflows/validate-phase.md +174 -0
- package/learnship/workflows/verify-work.md +264 -0
- package/package.json +62 -0
- package/references/design-commands.md +119 -0
- package/references/git-integration.md +249 -0
- package/references/learning-design.md +142 -0
- package/references/model-profiles.md +90 -0
- package/references/planning-config.md +184 -0
- package/references/questioning.md +162 -0
- package/references/ui-brand.md +160 -0
- package/references/verification-patterns.md +608 -0
- package/skills/agentic-learning/SKILL.md +373 -0
- package/skills/agentic-learning/references/either-or-format.md +161 -0
- package/skills/agentic-learning/references/learning-science.md +190 -0
- package/skills/agentic-learning/references/struggle-ladder.md +140 -0
- package/skills/impeccable/SKILL.md +125 -0
- package/skills/impeccable/adapt/SKILL.md +199 -0
- package/skills/impeccable/animate/SKILL.md +190 -0
- package/skills/impeccable/audit/SKILL.md +129 -0
- package/skills/impeccable/bolder/SKILL.md +132 -0
- package/skills/impeccable/clarify/SKILL.md +180 -0
- package/skills/impeccable/colorize/SKILL.md +158 -0
- package/skills/impeccable/critique/SKILL.md +118 -0
- package/skills/impeccable/delight/SKILL.md +317 -0
- package/skills/impeccable/distill/SKILL.md +137 -0
- package/skills/impeccable/extract/SKILL.md +95 -0
- package/skills/impeccable/frontend-design/SKILL.md +127 -0
- package/skills/impeccable/frontend-design/reference/color-and-contrast.md +132 -0
- package/skills/impeccable/frontend-design/reference/interaction-design.md +123 -0
- package/skills/impeccable/frontend-design/reference/motion-design.md +99 -0
- package/skills/impeccable/frontend-design/reference/responsive-design.md +114 -0
- package/skills/impeccable/frontend-design/reference/spatial-design.md +100 -0
- package/skills/impeccable/frontend-design/reference/typography.md +131 -0
- package/skills/impeccable/frontend-design/reference/ux-writing.md +107 -0
- package/skills/impeccable/harden/SKILL.md +358 -0
- package/skills/impeccable/normalize/SKILL.md +67 -0
- package/skills/impeccable/onboard/SKILL.md +243 -0
- package/skills/impeccable/optimize/SKILL.md +269 -0
- package/skills/impeccable/polish/SKILL.md +202 -0
- package/skills/impeccable/quieter/SKILL.md +118 -0
- package/skills/impeccable/teach-impeccable/SKILL.md +69 -0
- package/templates/agents.md +166 -0
- package/templates/config.json +22 -0
- package/templates/context.md +72 -0
- package/templates/plan.md +202 -0
- package/templates/project.md +184 -0
- package/templates/requirements.md +231 -0
- package/templates/state.md +176 -0
- package/templates/uat.md +80 -0
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Retroactive test coverage audit for a completed phase — fill validation gaps without modifying implementation
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Validate Phase
|
|
6
|
+
|
|
7
|
+
Retroactively audit and fill test coverage gaps for a completed phase. Useful after hotfixes, for phases executed before test infrastructure was set up, or when `audit-milestone` surfaces validation gaps.
|
|
8
|
+
|
|
9
|
+
**Usage:** `validate-phase [N]`
|
|
10
|
+
|
|
11
|
+
**Rule:** Never modifies implementation files — only writes test files and updates VALIDATION.md.
|
|
12
|
+
|
|
13
|
+
## Step 1: Check Config
|
|
14
|
+
|
|
15
|
+
Read `.planning/config.json`:
|
|
16
|
+
```bash
|
|
17
|
+
cat .planning/config.json | grep "nyquist_validation"
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
If `nyquist_validation: false`: stop — "Validation is disabled. Enable it in `/settings` to use this workflow."
|
|
21
|
+
|
|
22
|
+
## Step 2: Validate Phase
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
test -f .planning/ROADMAP.md && grep -E "Phase [N]:" .planning/ROADMAP.md
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Determine the phase directory:
|
|
29
|
+
```bash
|
|
30
|
+
ls .planning/phases/ | grep -E "^0*[N]-"
|
|
31
|
+
PHASE_DIR=".planning/phases/[matched dir]"
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Step 3: Detect State
|
|
35
|
+
|
|
36
|
+
Check what exists:
|
|
37
|
+
```bash
|
|
38
|
+
ls "$PHASE_DIR"/*.md 2>/dev/null
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
- **State A** — VALIDATION.md exists: run audit on existing file, fill gaps
|
|
42
|
+
- **State B** — SUMMARY.md exists, no VALIDATION.md: build validation from execution artifacts
|
|
43
|
+
- **State C** — no SUMMARY.md: phase not executed yet — stop: "Run `execute-phase [N]` first."
|
|
44
|
+
|
|
45
|
+
## Step 4: Read Phase Artifacts
|
|
46
|
+
|
|
47
|
+
Read all PLAN.md and SUMMARY.md files for phase `[N]`:
|
|
48
|
+
```bash
|
|
49
|
+
cat "$PHASE_DIR"/*-PLAN.md
|
|
50
|
+
cat "$PHASE_DIR"/*-SUMMARY.md
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Extract:
|
|
54
|
+
- Task names and `<verify>` commands
|
|
55
|
+
- Requirement IDs covered by each task
|
|
56
|
+
- Key files created or modified
|
|
57
|
+
|
|
58
|
+
## Step 5: Detect Test Infrastructure
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
find . \( -name "jest.config.*" -o -name "vitest.config.*" -o -name "pytest.ini" -o -name "pyproject.toml" \) -not -path "*/node_modules/*" 2>/dev/null
|
|
62
|
+
|
|
63
|
+
find . \( -name "*.test.*" -o -name "*.spec.*" -o -name "test_*.py" \) -not -path "*/node_modules/*" 2>/dev/null | head -20
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Identify: test framework, how to run tests, existing test file patterns.
|
|
67
|
+
|
|
68
|
+
## Step 6: Map Requirements to Tests
|
|
69
|
+
|
|
70
|
+
For each requirement ID assigned to this phase:
|
|
71
|
+
|
|
72
|
+
1. Look for existing tests that cover this behavior (by filename, describe block, test name)
|
|
73
|
+
2. Classify:
|
|
74
|
+
- **COVERED** — test exists, targets the behavior, runs green
|
|
75
|
+
- **PARTIAL** — test exists but incomplete or failing
|
|
76
|
+
- **MISSING** — no test found
|
|
77
|
+
|
|
78
|
+
If no gaps (all COVERED): proceed directly to step 8 with `nyquist_compliant: true`.
|
|
79
|
+
|
|
80
|
+
## Step 7: Present Gap Plan and Fill
|
|
81
|
+
|
|
82
|
+
Show gap table:
|
|
83
|
+
```
|
|
84
|
+
Phase [N] Validation Gaps
|
|
85
|
+
|
|
86
|
+
| Requirement | Status | Suggested test |
|
|
87
|
+
|-------------|--------|----------------|
|
|
88
|
+
| REQ-AUTH-01 | MISSING | src/__tests__/auth.test.ts |
|
|
89
|
+
| REQ-DASH-02 | PARTIAL | src/__tests__/dashboard.test.ts |
|
|
90
|
+
|
|
91
|
+
Options:
|
|
92
|
+
1. Fill all gaps — I'll write the missing tests
|
|
93
|
+
2. Mark as manual-only — skip automation, verify manually
|
|
94
|
+
3. Cancel
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Wait for choice.
|
|
98
|
+
|
|
99
|
+
**If "Fill all gaps":** Write the missing test files. Rules:
|
|
100
|
+
- Never touch implementation files
|
|
101
|
+
- Match the existing test framework and style
|
|
102
|
+
- Write tests that actually run (import real modules, not mocks of the implementation)
|
|
103
|
+
- If a test reveals an implementation bug, log it as an escalation — don't fix the implementation
|
|
104
|
+
|
|
105
|
+
Run tests to verify they pass:
|
|
106
|
+
```bash
|
|
107
|
+
[test command for framework] [test file]
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Up to 3 debug attempts if tests fail. If still failing after 3, move to manual-only and note why.
|
|
111
|
+
|
|
112
|
+
## Step 8: Write/Update VALIDATION.md
|
|
113
|
+
|
|
114
|
+
**State B (create new):**
|
|
115
|
+
|
|
116
|
+
Write `$PHASE_DIR/[padded_phase]-VALIDATION.md`:
|
|
117
|
+
|
|
118
|
+
```markdown
|
|
119
|
+
---
|
|
120
|
+
nyquist_compliant: true | false
|
|
121
|
+
wave_0_complete: true | false
|
|
122
|
+
phase: [N]
|
|
123
|
+
validated: [date]
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
# Phase [N] Validation
|
|
127
|
+
|
|
128
|
+
## Test Infrastructure
|
|
129
|
+
| Tool | Version | Run command |
|
|
130
|
+
|------|---------|-------------|
|
|
131
|
+
| [framework] | [version] | [command] |
|
|
132
|
+
|
|
133
|
+
## Per-Requirement Coverage
|
|
134
|
+
|
|
135
|
+
| Requirement | Task | Test file | Status |
|
|
136
|
+
|-------------|------|-----------|--------|
|
|
137
|
+
| REQ-XX-01 | [task name] | [test file path] | ✓ automated |
|
|
138
|
+
|
|
139
|
+
## Manual-Only Items
|
|
140
|
+
[Items that require a running app to verify]
|
|
141
|
+
|
|
142
|
+
## Audit Trail
|
|
143
|
+
Validated: [date] — [N] covered, [M] manual-only
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
**State A (update existing):**
|
|
147
|
+
|
|
148
|
+
Update the Per-Requirement Coverage table, add resolved gaps, move escalated items to Manual-Only. Append audit trail entry.
|
|
149
|
+
|
|
150
|
+
## Step 9: Commit
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
git add [test files]
|
|
154
|
+
git commit -m "test([padded_phase]): add validation tests"
|
|
155
|
+
|
|
156
|
+
git add "$PHASE_DIR/[padded_phase]-VALIDATION.md"
|
|
157
|
+
git commit -m "docs([padded_phase]): update validation strategy"
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
## Step 10: Report
|
|
161
|
+
|
|
162
|
+
```
|
|
163
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
164
|
+
learnship ► PHASE [N] VALIDATED
|
|
165
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
166
|
+
|
|
167
|
+
[N] requirements automated ✓
|
|
168
|
+
[M] requirements manual-only
|
|
169
|
+
[K] escalated (implementation bugs found — see VALIDATION.md)
|
|
170
|
+
|
|
171
|
+
Status: COMPLIANT | PARTIAL
|
|
172
|
+
|
|
173
|
+
▶ Next: audit-milestone
|
|
174
|
+
```
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Manual user acceptance testing — walk through what was built, log issues, create fix plans
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Verify Work
|
|
6
|
+
|
|
7
|
+
Validate built features through conversational testing. Walk through each deliverable one at a time. You present what SHOULD happen — user confirms or describes what's different.
|
|
8
|
+
|
|
9
|
+
**Usage:** `verify-work [N]`
|
|
10
|
+
|
|
11
|
+
**Philosophy:** Show expected, ask if reality matches. No pass/fail buttons. No severity questions. Just: "Here's what should happen. Does it?"
|
|
12
|
+
|
|
13
|
+
## Step 1: Initialize
|
|
14
|
+
|
|
15
|
+
Check for existing UAT sessions:
|
|
16
|
+
```bash
|
|
17
|
+
find .planning/phases -name "*-UAT.md" -type f 2>/dev/null
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
**If active sessions exist and no phase number given:**
|
|
21
|
+
|
|
22
|
+
Read each file's frontmatter (status, phase) and current test.
|
|
23
|
+
|
|
24
|
+
Display:
|
|
25
|
+
```
|
|
26
|
+
## Active UAT Sessions
|
|
27
|
+
|
|
28
|
+
| # | Phase | Status | Current Test | Progress |
|
|
29
|
+
|---|-------|--------|--------------|----------|
|
|
30
|
+
| 1 | [phase] | testing | [test name] | [N/M] |
|
|
31
|
+
|
|
32
|
+
Reply with a number to resume, or provide a phase number to start new.
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Wait for response. If number → resume that session. If phase number → start new session.
|
|
36
|
+
|
|
37
|
+
**If no sessions and no phase given:**
|
|
38
|
+
```
|
|
39
|
+
No active UAT sessions.
|
|
40
|
+
|
|
41
|
+
Provide a phase number to start testing (e.g., verify-work 4)
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Step 2: Find Deliverables
|
|
45
|
+
|
|
46
|
+
Read all SUMMARY.md files for the phase:
|
|
47
|
+
```bash
|
|
48
|
+
ls ".planning/phases/[padded_phase]-[phase_slug]/"*-SUMMARY.md 2>/dev/null
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Extract testable deliverables from each SUMMARY.md — focus on **user-observable outcomes**, not implementation details:
|
|
52
|
+
- What features/functionality was added?
|
|
53
|
+
- What UI changes are visible?
|
|
54
|
+
- What workflows can a user now do?
|
|
55
|
+
|
|
56
|
+
Skip internal changes (refactors, type changes, test additions).
|
|
57
|
+
|
|
58
|
+
**Cold-start smoke test:** If any SUMMARY.md mentions server entry points, database files, migrations, or docker files — prepend a "Cold Start Smoke Test" as the first test:
|
|
59
|
+
```
|
|
60
|
+
Expected: Kill any running server. Clear ephemeral state. Start from scratch.
|
|
61
|
+
Server boots without errors, any seed/migration completes, primary query returns live data.
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Step 3: Create UAT File
|
|
65
|
+
|
|
66
|
+
Write `.planning/phases/[padded_phase]-[phase_slug]/[padded_phase]-UAT.md`:
|
|
67
|
+
|
|
68
|
+
```markdown
|
|
69
|
+
---
|
|
70
|
+
status: testing
|
|
71
|
+
phase: [padded_phase]-[phase_slug]
|
|
72
|
+
source: [list of SUMMARY.md files]
|
|
73
|
+
started: [ISO timestamp]
|
|
74
|
+
updated: [ISO timestamp]
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Current Test
|
|
78
|
+
number: 1
|
|
79
|
+
name: [first test name]
|
|
80
|
+
expected: |
|
|
81
|
+
[what user should observe]
|
|
82
|
+
awaiting: user response
|
|
83
|
+
|
|
84
|
+
## Tests
|
|
85
|
+
|
|
86
|
+
### 1. [Test Name]
|
|
87
|
+
expected: [observable behavior]
|
|
88
|
+
result: pending
|
|
89
|
+
|
|
90
|
+
### 2. [Test Name]
|
|
91
|
+
expected: [observable behavior]
|
|
92
|
+
result: pending
|
|
93
|
+
|
|
94
|
+
...
|
|
95
|
+
|
|
96
|
+
## Summary
|
|
97
|
+
|
|
98
|
+
total: [N]
|
|
99
|
+
passed: 0
|
|
100
|
+
issues: 0
|
|
101
|
+
pending: [N]
|
|
102
|
+
skipped: 0
|
|
103
|
+
|
|
104
|
+
## Gaps
|
|
105
|
+
|
|
106
|
+
[none yet]
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## Step 4: Present Tests One at a Time
|
|
110
|
+
|
|
111
|
+
For each test, display:
|
|
112
|
+
|
|
113
|
+
```
|
|
114
|
+
╔══════════════════════════════════════════════════════════════╗
|
|
115
|
+
║ UAT: Test [N] of [total] ║
|
|
116
|
+
╚══════════════════════════════════════════════════════════════╝
|
|
117
|
+
|
|
118
|
+
**[Test Name]**
|
|
119
|
+
|
|
120
|
+
[Expected behavior — specific, observable, copy-pasteable commands or clear UI actions]
|
|
121
|
+
|
|
122
|
+
──────────────────────────────────────────────────────────────
|
|
123
|
+
→ Type "pass" or describe what's wrong
|
|
124
|
+
──────────────────────────────────────────────────────────────
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Wait for plain text response (no multiple-choice).
|
|
128
|
+
|
|
129
|
+
## Step 5: Process Each Response
|
|
130
|
+
|
|
131
|
+
**If response indicates pass:** "yes", "y", "ok", "pass", "next", "approved", empty
|
|
132
|
+
→ Mark test: `result: pass`
|
|
133
|
+
|
|
134
|
+
**If response indicates skip:** "skip", "can't test", "n/a"
|
|
135
|
+
→ Mark test: `result: skipped`, capture reason
|
|
136
|
+
|
|
137
|
+
**If response is anything else:**
|
|
138
|
+
→ Treat as issue description. Infer severity from language:
|
|
139
|
+
- "crash", "error", "exception", "fails" → `blocker`
|
|
140
|
+
- "doesn't work", "wrong", "missing", "can't" → `major`
|
|
141
|
+
- "slow", "weird", "off", "minor" → `minor`
|
|
142
|
+
- "color", "font", "spacing", "alignment" → `cosmetic`
|
|
143
|
+
- Default: `major`
|
|
144
|
+
|
|
145
|
+
Mark test:
|
|
146
|
+
```
|
|
147
|
+
result: issue
|
|
148
|
+
reported: "[verbatim user response]"
|
|
149
|
+
severity: [inferred]
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
Append to Gaps section:
|
|
153
|
+
```yaml
|
|
154
|
+
- truth: "[expected behavior from test]"
|
|
155
|
+
status: failed
|
|
156
|
+
reason: "User reported: [verbatim response]"
|
|
157
|
+
severity: [inferred]
|
|
158
|
+
test: [N]
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
After each response: update Summary counts, update `updated` timestamp, write to UAT file, move to next test.
|
|
162
|
+
|
|
163
|
+
## Step 6: Complete Session
|
|
164
|
+
|
|
165
|
+
After all tests, update frontmatter: `status: complete`.
|
|
166
|
+
|
|
167
|
+
Commit:
|
|
168
|
+
```bash
|
|
169
|
+
git add ".planning/phases/[padded_phase]-[phase_slug]/[padded_phase]-UAT.md"
|
|
170
|
+
git commit -m "test([padded_phase]): complete UAT - [N] passed, [M] issues"
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
Display summary:
|
|
174
|
+
```
|
|
175
|
+
## UAT Complete: Phase [X]
|
|
176
|
+
|
|
177
|
+
| Result | Count |
|
|
178
|
+
|---------|-------|
|
|
179
|
+
| Passed | [N] |
|
|
180
|
+
| Issues | [N] |
|
|
181
|
+
| Skipped | [N] |
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
**If no issues:**
|
|
185
|
+
```
|
|
186
|
+
All tests passed. ✓
|
|
187
|
+
|
|
188
|
+
▶ Next: discuss-phase [X+1]
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
**If issues found:** Continue to Step 7.
|
|
192
|
+
|
|
193
|
+
## Step 7: Diagnose Issues
|
|
194
|
+
|
|
195
|
+
```
|
|
196
|
+
[N] issues found. Diagnosing root causes...
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
For each issue in the Gaps section, investigate using `@./agents/debugger.md` as your debug persona:
|
|
200
|
+
- Read the relevant source files
|
|
201
|
+
- Trace the issue to its root cause
|
|
202
|
+
- Do not fix yet — just diagnose
|
|
203
|
+
|
|
204
|
+
Update each gap in UAT.md with the root cause:
|
|
205
|
+
```yaml
|
|
206
|
+
- truth: "[expected]"
|
|
207
|
+
status: failed
|
|
208
|
+
reason: "User reported: [response]"
|
|
209
|
+
severity: [severity]
|
|
210
|
+
root_cause: "[What's actually broken and why]"
|
|
211
|
+
affected_files: ["[file1]", "[file2]"]
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
## Step 8: Create Fix Plans
|
|
215
|
+
|
|
216
|
+
Display:
|
|
217
|
+
```
|
|
218
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
219
|
+
learnship ► PLANNING FIXES
|
|
220
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
Using `@./agents/planner.md` as your planning persona, read the UAT.md file with diagnosed gaps. Create fix plans in the phase directory with `gap_closure: true` in frontmatter.
|
|
224
|
+
|
|
225
|
+
Verify fix plans (max 3 iterations with `@./agents/verifier.md`) — same loop as `plan-phase`.
|
|
226
|
+
|
|
227
|
+
Present when ready:
|
|
228
|
+
```
|
|
229
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
230
|
+
learnship ► FIXES READY ✓
|
|
231
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
232
|
+
|
|
233
|
+
**Phase [X]** — [N] gap(s) diagnosed, [M] fix plan(s) created
|
|
234
|
+
|
|
235
|
+
| Gap | Root Cause | Fix Plan |
|
|
236
|
+
|-----|------------|----------|
|
|
237
|
+
| [issue] | [root cause] | [plan file] |
|
|
238
|
+
|
|
239
|
+
▶ Next: execute-phase [X] (will run gap closure plans)
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
## Learning Checkpoint
|
|
245
|
+
|
|
246
|
+
Read `learning_mode` from `.planning/config.json`.
|
|
247
|
+
|
|
248
|
+
**If `auto` and UAT passed with no issues:**
|
|
249
|
+
|
|
250
|
+
> 💡 **Learning moment:** Tests passed — lock in what was learned before moving on:
|
|
251
|
+
>
|
|
252
|
+
> `@agentic-learning space` — Identifies concepts from this phase and schedules them for spaced revisit. Writes to `docs/revisit.md`. The next phase starts with less decay.
|
|
253
|
+
>
|
|
254
|
+
> `@agentic-learning quiz [phase topic]` — Quick active recall while the implementation is still fresh. Better now than two phases later.
|
|
255
|
+
|
|
256
|
+
**If `auto` and issues were found and fixed:**
|
|
257
|
+
|
|
258
|
+
> 💡 **Learning moment:** Bugs found during UAT are high-signal learning. Don’t just fix and move on:
|
|
259
|
+
>
|
|
260
|
+
> `@agentic-learning learn [bug domain]` — Active retrieval on the concept that caused the issue. Turns a frustrating bug into a lasting pattern.
|
|
261
|
+
>
|
|
262
|
+
> `@agentic-learning space` — Schedule the key concepts from this debugging session for spaced review.
|
|
263
|
+
|
|
264
|
+
**If `manual`:** Add quietly: *"Tip: `@agentic-learning space` · `@agentic-learning quiz [topic]` to consolidate this phase."*
|
package/package.json
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "learnship",
|
|
3
|
+
"version": "1.9.0",
|
|
4
|
+
"description": "Learn as you build. Build with intent. — A multi-platform agentic engineering system for Windsurf, Claude Code, Cursor, OpenCode, Gemini CLI, and Codex: spec-driven workflows, integrated learning, and production-grade design.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"agentic",
|
|
7
|
+
"development",
|
|
8
|
+
"windsurf",
|
|
9
|
+
"claude-code",
|
|
10
|
+
"cursor",
|
|
11
|
+
"opencode",
|
|
12
|
+
"gemini-cli",
|
|
13
|
+
"codex",
|
|
14
|
+
"workflow",
|
|
15
|
+
"ai",
|
|
16
|
+
"learning",
|
|
17
|
+
"planning",
|
|
18
|
+
"cascade",
|
|
19
|
+
"agentic-ai",
|
|
20
|
+
"ai-agent",
|
|
21
|
+
"ai-workflow"
|
|
22
|
+
],
|
|
23
|
+
"files": [
|
|
24
|
+
"bin",
|
|
25
|
+
"commands",
|
|
26
|
+
"learnship",
|
|
27
|
+
"agents",
|
|
28
|
+
"references",
|
|
29
|
+
"templates",
|
|
30
|
+
"install.sh",
|
|
31
|
+
"skills",
|
|
32
|
+
"hooks",
|
|
33
|
+
".claude-plugin",
|
|
34
|
+
".cursor-plugin",
|
|
35
|
+
"cursor-rules",
|
|
36
|
+
"gemini-extension.json",
|
|
37
|
+
"SKILL.md"
|
|
38
|
+
],
|
|
39
|
+
"publishConfig": {
|
|
40
|
+
"access": "public"
|
|
41
|
+
},
|
|
42
|
+
"homepage": "https://github.com/FavioVazquez/learnship#readme",
|
|
43
|
+
"bugs": {
|
|
44
|
+
"url": "https://github.com/FavioVazquez/learnship/issues"
|
|
45
|
+
},
|
|
46
|
+
"repository": {
|
|
47
|
+
"type": "git",
|
|
48
|
+
"url": "https://github.com/FavioVazquez/learnship.git"
|
|
49
|
+
},
|
|
50
|
+
"license": "MIT",
|
|
51
|
+
"author": "Favio Vazquez",
|
|
52
|
+
"bin": {
|
|
53
|
+
"learnship": "./bin/install.js"
|
|
54
|
+
},
|
|
55
|
+
"scripts": {
|
|
56
|
+
"start": "node bin/learnship.js",
|
|
57
|
+
"test": "bash tests/run_all.sh"
|
|
58
|
+
},
|
|
59
|
+
"engines": {
|
|
60
|
+
"node": ">=18.0.0"
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
# Design Steering Commands
|
|
2
|
+
|
|
3
|
+
Steering commands for the frontend-design skill. Invoke these during any UI work to get targeted design guidance, critique, and improvements.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Full Command Reference
|
|
8
|
+
|
|
9
|
+
| Command | What it triggers |
|
|
10
|
+
|---------|-----------------|
|
|
11
|
+
| `/audit` | Comprehensive UI quality audit against the full design checklist |
|
|
12
|
+
| `/critique` | Candid design critique — what's working, what isn't, specific improvements |
|
|
13
|
+
| `/polish` | Refine and elevate an existing interface — details, spacing, hierarchy |
|
|
14
|
+
| `/motion` | Add purposeful motion: entrances, transitions, state changes |
|
|
15
|
+
| `/tokens` | Design token system: color, spacing, typography scale, border radius |
|
|
16
|
+
| `/brand` | Brand coherence check across all surfaces |
|
|
17
|
+
| `/typography` | Typography system: scale, pairing, hierarchy, loading |
|
|
18
|
+
| `/color` | Color palette review: OKLCH, contrast ratios, dark mode, tinting |
|
|
19
|
+
| `/layout` | Layout and spatial rhythm: grid, breathing room, asymmetry |
|
|
20
|
+
| `/responsive` | Mobile-first: container queries, fluid design, breakpoints |
|
|
21
|
+
| `/interaction` | Interaction design: forms, focus states, loading patterns, optimistic UI |
|
|
22
|
+
| `/accessibility` | Accessibility: focus management, contrast, screen reader support |
|
|
23
|
+
| `/empty-states` | Empty state design that teaches the interface |
|
|
24
|
+
| `/loading` | Loading patterns: skeletons, spinners, progressive disclosure |
|
|
25
|
+
| `/forms` | Form UX: labels, validation, error states, field grouping |
|
|
26
|
+
| `/copy` | UX writing: labels, errors, empty states, CTAs |
|
|
27
|
+
| `/density` | Information density: when to compress, when to breathe |
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## When to Use Each
|
|
32
|
+
|
|
33
|
+
### Starting a new component or page
|
|
34
|
+
→ `/audit` first — understand what quality problems to avoid before writing a line
|
|
35
|
+
|
|
36
|
+
### After first implementation pass
|
|
37
|
+
→ `/critique` — honest feedback before spending time on polish
|
|
38
|
+
→ `/layout` — is the spatial rhythm right?
|
|
39
|
+
|
|
40
|
+
### Typography feels off
|
|
41
|
+
→ `/typography` — systematic review of scale, pairing, hierarchy
|
|
42
|
+
→ `/copy` — are the words doing their job?
|
|
43
|
+
|
|
44
|
+
### Colors feel wrong or generic
|
|
45
|
+
→ `/color` — OKLCH-based palette review, tinting strategy, contrast
|
|
46
|
+
→ `/tokens` — establish a proper design token system
|
|
47
|
+
|
|
48
|
+
### Interface feels stiff or lifeless
|
|
49
|
+
→ `/motion` — purposeful animation for state changes and entrances
|
|
50
|
+
→ `/interaction` — does every interactive surface feel responsive?
|
|
51
|
+
|
|
52
|
+
### Shipping to production
|
|
53
|
+
→ `/accessibility` — focus, contrast ratios, screen reader support
|
|
54
|
+
→ `/responsive` — does it adapt properly at all sizes?
|
|
55
|
+
→ `/polish` — final refinement pass
|
|
56
|
+
|
|
57
|
+
### Something feels "AI-generated"
|
|
58
|
+
→ `/critique` — the AI slop test: would someone immediately recognize this as AI output?
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## The Anti-Patterns to Watch For
|
|
63
|
+
|
|
64
|
+
The design skill actively guards against these common AI aesthetics:
|
|
65
|
+
|
|
66
|
+
**Colors:**
|
|
67
|
+
- Cyan-on-dark with purple-to-blue gradients
|
|
68
|
+
- Neon accents on dark backgrounds
|
|
69
|
+
- Pure black (#000) or pure white (#fff)
|
|
70
|
+
- Gray text on colored backgrounds
|
|
71
|
+
|
|
72
|
+
**Layout:**
|
|
73
|
+
- Everything in cards — not everything needs a container
|
|
74
|
+
- Nested cards inside cards
|
|
75
|
+
- Identical card grids (same-sized cards with icon + heading + text, repeated)
|
|
76
|
+
- Centering everything
|
|
77
|
+
- The "hero metric" template: big number, small label, gradient accent
|
|
78
|
+
|
|
79
|
+
**Typography:**
|
|
80
|
+
- Overused fonts: Inter, Roboto, Arial, Open Sans, system defaults
|
|
81
|
+
- Monospace as lazy "developer vibes"
|
|
82
|
+
- Large rounded icons above every heading
|
|
83
|
+
|
|
84
|
+
**Motion:**
|
|
85
|
+
- Bounce or elastic easing
|
|
86
|
+
- Animating layout properties (width, height, padding, margin)
|
|
87
|
+
- Scattered micro-interactions everywhere
|
|
88
|
+
|
|
89
|
+
**Details:**
|
|
90
|
+
- Glassmorphism used decoratively (not purposefully)
|
|
91
|
+
- Rounded elements with thick one-sided colored borders
|
|
92
|
+
- Generic rounded rectangles with drop shadows
|
|
93
|
+
- Gradient text for "impact" on metrics or headings
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## The AI Slop Test
|
|
98
|
+
|
|
99
|
+
Before shipping any interface, ask:
|
|
100
|
+
|
|
101
|
+
> If you showed this to someone and said "AI made this" — would they believe you immediately?
|
|
102
|
+
|
|
103
|
+
If yes: use `/critique` to find what makes it look templated, then `/polish` to address it.
|
|
104
|
+
|
|
105
|
+
A well-designed interface makes someone ask **"how was this made?"** not "which AI made this?"
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## Reference Files
|
|
110
|
+
|
|
111
|
+
The design skill includes 7 domain-specific reference files:
|
|
112
|
+
|
|
113
|
+
- `reference/typography.md` — scales, pairing, fluid sizing with clamp()
|
|
114
|
+
- `reference/color-and-contrast.md` — OKLCH, palettes, dark mode strategy
|
|
115
|
+
- `reference/spatial-design.md` — grids, rhythm, container queries
|
|
116
|
+
- `reference/motion-design.md` — timing, easing curves, reduced motion
|
|
117
|
+
- `reference/interaction-design.md` — forms, focus, loading patterns
|
|
118
|
+
- `reference/responsive-design.md` — mobile-first, fluid design, breakpoints
|
|
119
|
+
- `reference/ux-writing.md` — labels, errors, empty states, microcopy
|