workerssuper 5.0.4
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/marketplace.json +20 -0
- package/.claude-plugin/plugin.json +13 -0
- package/.codex/INSTALL.md +67 -0
- package/.cursor-plugin/plugin.json +18 -0
- package/.gitattributes +18 -0
- package/.github/FUNDING.yml +3 -0
- package/.github/ISSUE_TEMPLATE/bug_report.md +52 -0
- package/.github/ISSUE_TEMPLATE/config.yml +5 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +34 -0
- package/.github/ISSUE_TEMPLATE/platform_support.md +23 -0
- package/.github/PULL_REQUEST_TEMPLATE.md +87 -0
- package/.opencode/INSTALL.md +83 -0
- package/.opencode/plugins/superpowers.js +107 -0
- package/CHANGELOG.md +13 -0
- package/CODE_OF_CONDUCT.md +128 -0
- package/GEMINI.md +2 -0
- package/LICENSE +21 -0
- package/README.md +187 -0
- package/RELEASE-NOTES.md +1057 -0
- package/agents/code-reviewer.md +48 -0
- package/commands/brainstorm.md +5 -0
- package/commands/execute-plan.md +5 -0
- package/commands/write-plan.md +5 -0
- package/docs/README.codex.md +126 -0
- package/docs/README.opencode.md +130 -0
- package/docs/plans/2025-11-22-opencode-support-design.md +294 -0
- package/docs/plans/2025-11-22-opencode-support-implementation.md +1095 -0
- package/docs/plans/2025-11-28-skills-improvements-from-user-feedback.md +711 -0
- package/docs/plans/2026-01-17-visual-brainstorming.md +571 -0
- package/docs/superpowers/plans/2026-01-22-document-review-system.md +301 -0
- package/docs/superpowers/plans/2026-02-19-visual-brainstorming-refactor.md +523 -0
- package/docs/superpowers/plans/2026-03-11-zero-dep-brainstorm-server.md +479 -0
- package/docs/superpowers/specs/2026-01-22-document-review-system-design.md +136 -0
- package/docs/superpowers/specs/2026-02-19-visual-brainstorming-refactor-design.md +162 -0
- package/docs/superpowers/specs/2026-03-11-zero-dep-brainstorm-server-design.md +118 -0
- package/docs/testing.md +303 -0
- package/docs/windows/polyglot-hooks.md +212 -0
- package/gemini-extension.json +6 -0
- package/hooks/hooks-cursor.json +10 -0
- package/hooks/hooks.json +16 -0
- package/hooks/run-hook.cmd +46 -0
- package/hooks/session-start +57 -0
- package/package.json +5 -0
- package/skills/brainstorming/SKILL.md +164 -0
- package/skills/brainstorming/scripts/frame-template.html +214 -0
- package/skills/brainstorming/scripts/helper.js +88 -0
- package/skills/brainstorming/scripts/server.cjs +338 -0
- package/skills/brainstorming/scripts/start-server.sh +153 -0
- package/skills/brainstorming/scripts/stop-server.sh +55 -0
- package/skills/brainstorming/spec-document-reviewer-prompt.md +49 -0
- package/skills/brainstorming/visual-companion.md +286 -0
- package/skills/dispatching-parallel-agents/SKILL.md +182 -0
- package/skills/executing-plans/SKILL.md +70 -0
- package/skills/finishing-a-development-branch/SKILL.md +200 -0
- package/skills/receiving-code-review/SKILL.md +213 -0
- package/skills/requesting-code-review/SKILL.md +105 -0
- package/skills/requesting-code-review/code-reviewer.md +146 -0
- package/skills/subagent-driven-development/SKILL.md +277 -0
- package/skills/subagent-driven-development/code-quality-reviewer-prompt.md +26 -0
- package/skills/subagent-driven-development/implementer-prompt.md +113 -0
- package/skills/subagent-driven-development/spec-reviewer-prompt.md +61 -0
- package/skills/systematic-debugging/CREATION-LOG.md +119 -0
- package/skills/systematic-debugging/SKILL.md +296 -0
- package/skills/systematic-debugging/condition-based-waiting-example.ts +158 -0
- package/skills/systematic-debugging/condition-based-waiting.md +115 -0
- package/skills/systematic-debugging/defense-in-depth.md +122 -0
- package/skills/systematic-debugging/find-polluter.sh +63 -0
- package/skills/systematic-debugging/root-cause-tracing.md +169 -0
- package/skills/systematic-debugging/test-academic.md +14 -0
- package/skills/systematic-debugging/test-pressure-1.md +58 -0
- package/skills/systematic-debugging/test-pressure-2.md +68 -0
- package/skills/systematic-debugging/test-pressure-3.md +69 -0
- package/skills/test-driven-development/SKILL.md +371 -0
- package/skills/test-driven-development/testing-anti-patterns.md +299 -0
- package/skills/using-git-worktrees/SKILL.md +218 -0
- package/skills/using-superpowers/SKILL.md +115 -0
- package/skills/using-superpowers/references/codex-tools.md +25 -0
- package/skills/using-superpowers/references/gemini-tools.md +33 -0
- package/skills/verification-before-completion/SKILL.md +139 -0
- package/skills/writing-plans/SKILL.md +145 -0
- package/skills/writing-plans/plan-document-reviewer-prompt.md +49 -0
- package/skills/writing-skills/SKILL.md +655 -0
- package/skills/writing-skills/anthropic-best-practices.md +1150 -0
- package/skills/writing-skills/examples/CLAUDE_MD_TESTING.md +189 -0
- package/skills/writing-skills/graphviz-conventions.dot +172 -0
- package/skills/writing-skills/persuasion-principles.md +187 -0
- package/skills/writing-skills/render-graphs.js +168 -0
- package/skills/writing-skills/testing-skills-with-subagents.md +384 -0
- package/tests/brainstorm-server/package-lock.json +36 -0
- package/tests/brainstorm-server/package.json +10 -0
- package/tests/brainstorm-server/server.test.js +424 -0
- package/tests/brainstorm-server/windows-lifecycle.test.sh +351 -0
- package/tests/brainstorm-server/ws-protocol.test.js +392 -0
- package/tests/claude-code/README.md +158 -0
- package/tests/claude-code/analyze-token-usage.py +168 -0
- package/tests/claude-code/run-skill-tests.sh +187 -0
- package/tests/claude-code/test-document-review-system.sh +177 -0
- package/tests/claude-code/test-helpers.sh +202 -0
- package/tests/claude-code/test-subagent-driven-development-integration.sh +314 -0
- package/tests/claude-code/test-subagent-driven-development.sh +165 -0
- package/tests/explicit-skill-requests/prompts/action-oriented.txt +3 -0
- package/tests/explicit-skill-requests/prompts/after-planning-flow.txt +17 -0
- package/tests/explicit-skill-requests/prompts/claude-suggested-it.txt +11 -0
- package/tests/explicit-skill-requests/prompts/i-know-what-sdd-means.txt +8 -0
- package/tests/explicit-skill-requests/prompts/mid-conversation-execute-plan.txt +3 -0
- package/tests/explicit-skill-requests/prompts/please-use-brainstorming.txt +1 -0
- package/tests/explicit-skill-requests/prompts/skip-formalities.txt +3 -0
- package/tests/explicit-skill-requests/prompts/subagent-driven-development-please.txt +1 -0
- package/tests/explicit-skill-requests/prompts/use-systematic-debugging.txt +1 -0
- package/tests/explicit-skill-requests/run-all.sh +70 -0
- package/tests/explicit-skill-requests/run-claude-describes-sdd.sh +100 -0
- package/tests/explicit-skill-requests/run-extended-multiturn-test.sh +113 -0
- package/tests/explicit-skill-requests/run-haiku-test.sh +144 -0
- package/tests/explicit-skill-requests/run-multiturn-test.sh +143 -0
- package/tests/explicit-skill-requests/run-test.sh +136 -0
- package/tests/opencode/run-tests.sh +163 -0
- package/tests/opencode/setup.sh +73 -0
- package/tests/opencode/test-plugin-loading.sh +72 -0
- package/tests/opencode/test-priority.sh +198 -0
- package/tests/opencode/test-tools.sh +104 -0
- package/tests/skill-triggering/prompts/dispatching-parallel-agents.txt +8 -0
- package/tests/skill-triggering/prompts/executing-plans.txt +1 -0
- package/tests/skill-triggering/prompts/requesting-code-review.txt +3 -0
- package/tests/skill-triggering/prompts/systematic-debugging.txt +11 -0
- package/tests/skill-triggering/prompts/test-driven-development.txt +7 -0
- package/tests/skill-triggering/prompts/writing-plans.txt +10 -0
- package/tests/skill-triggering/run-all.sh +60 -0
- package/tests/skill-triggering/run-test.sh +88 -0
- package/tests/subagent-driven-dev/go-fractals/design.md +81 -0
- package/tests/subagent-driven-dev/go-fractals/plan.md +172 -0
- package/tests/subagent-driven-dev/go-fractals/scaffold.sh +45 -0
- package/tests/subagent-driven-dev/run-test.sh +106 -0
- package/tests/subagent-driven-dev/svelte-todo/design.md +70 -0
- package/tests/subagent-driven-dev/svelte-todo/plan.md +222 -0
- package/tests/subagent-driven-dev/svelte-todo/scaffold.sh +46 -0
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Run a subagent-driven-development test
|
|
3
|
+
# Usage: ./run-test.sh <test-name> [--plugin-dir <path>]
|
|
4
|
+
#
|
|
5
|
+
# Example:
|
|
6
|
+
# ./run-test.sh go-fractals
|
|
7
|
+
# ./run-test.sh svelte-todo --plugin-dir /path/to/superpowers
|
|
8
|
+
|
|
9
|
+
set -e
|
|
10
|
+
|
|
11
|
+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
12
|
+
TEST_NAME="${1:?Usage: $0 <test-name> [--plugin-dir <path>]}"
|
|
13
|
+
shift
|
|
14
|
+
|
|
15
|
+
# Parse optional arguments
|
|
16
|
+
PLUGIN_DIR=""
|
|
17
|
+
while [[ $# -gt 0 ]]; do
|
|
18
|
+
case $1 in
|
|
19
|
+
--plugin-dir)
|
|
20
|
+
PLUGIN_DIR="$2"
|
|
21
|
+
shift 2
|
|
22
|
+
;;
|
|
23
|
+
*)
|
|
24
|
+
echo "Unknown option: $1"
|
|
25
|
+
exit 1
|
|
26
|
+
;;
|
|
27
|
+
esac
|
|
28
|
+
done
|
|
29
|
+
|
|
30
|
+
# Default plugin dir to parent of tests directory
|
|
31
|
+
if [[ -z "$PLUGIN_DIR" ]]; then
|
|
32
|
+
PLUGIN_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
|
33
|
+
fi
|
|
34
|
+
|
|
35
|
+
# Verify test exists
|
|
36
|
+
TEST_DIR="$SCRIPT_DIR/$TEST_NAME"
|
|
37
|
+
if [[ ! -d "$TEST_DIR" ]]; then
|
|
38
|
+
echo "Error: Test '$TEST_NAME' not found at $TEST_DIR"
|
|
39
|
+
echo "Available tests:"
|
|
40
|
+
ls -1 "$SCRIPT_DIR" | grep -v '\.sh$' | grep -v '\.md$'
|
|
41
|
+
exit 1
|
|
42
|
+
fi
|
|
43
|
+
|
|
44
|
+
# Create timestamped output directory
|
|
45
|
+
TIMESTAMP=$(date +%s)
|
|
46
|
+
OUTPUT_BASE="/tmp/superpowers-tests/$TIMESTAMP/subagent-driven-development"
|
|
47
|
+
OUTPUT_DIR="$OUTPUT_BASE/$TEST_NAME"
|
|
48
|
+
mkdir -p "$OUTPUT_DIR"
|
|
49
|
+
|
|
50
|
+
echo "=== Subagent-Driven Development Test ==="
|
|
51
|
+
echo "Test: $TEST_NAME"
|
|
52
|
+
echo "Output: $OUTPUT_DIR"
|
|
53
|
+
echo "Plugin: $PLUGIN_DIR"
|
|
54
|
+
echo ""
|
|
55
|
+
|
|
56
|
+
# Scaffold the project
|
|
57
|
+
echo ">>> Scaffolding project..."
|
|
58
|
+
"$TEST_DIR/scaffold.sh" "$OUTPUT_DIR/project"
|
|
59
|
+
echo ""
|
|
60
|
+
|
|
61
|
+
# Prepare the prompt
|
|
62
|
+
PLAN_PATH="$OUTPUT_DIR/project/plan.md"
|
|
63
|
+
PROMPT="Execute this plan using superpowers:subagent-driven-development. The plan is at: $PLAN_PATH"
|
|
64
|
+
|
|
65
|
+
# Run Claude with JSON output for token tracking
|
|
66
|
+
LOG_FILE="$OUTPUT_DIR/claude-output.json"
|
|
67
|
+
echo ">>> Running Claude..."
|
|
68
|
+
echo "Prompt: $PROMPT"
|
|
69
|
+
echo "Log file: $LOG_FILE"
|
|
70
|
+
echo ""
|
|
71
|
+
|
|
72
|
+
# Run claude and capture output
|
|
73
|
+
# Using stream-json to get token usage stats
|
|
74
|
+
# --dangerously-skip-permissions for automated testing (subagents don't inherit parent settings)
|
|
75
|
+
cd "$OUTPUT_DIR/project"
|
|
76
|
+
claude -p "$PROMPT" \
|
|
77
|
+
--plugin-dir "$PLUGIN_DIR" \
|
|
78
|
+
--dangerously-skip-permissions \
|
|
79
|
+
--output-format stream-json \
|
|
80
|
+
--verbose \
|
|
81
|
+
> "$LOG_FILE" 2>&1 || true
|
|
82
|
+
|
|
83
|
+
# Extract final stats
|
|
84
|
+
echo ""
|
|
85
|
+
echo ">>> Test complete"
|
|
86
|
+
echo "Project directory: $OUTPUT_DIR/project"
|
|
87
|
+
echo "Claude log: $LOG_FILE"
|
|
88
|
+
echo ""
|
|
89
|
+
|
|
90
|
+
# Show token usage if available
|
|
91
|
+
if command -v jq &> /dev/null; then
|
|
92
|
+
echo ">>> Token usage:"
|
|
93
|
+
# Extract usage from the last message with usage info
|
|
94
|
+
jq -s '[.[] | select(.type == "result")] | last | .usage' "$LOG_FILE" 2>/dev/null || echo "(could not parse usage)"
|
|
95
|
+
echo ""
|
|
96
|
+
fi
|
|
97
|
+
|
|
98
|
+
echo ">>> Next steps:"
|
|
99
|
+
echo "1. Review the project: cd $OUTPUT_DIR/project"
|
|
100
|
+
echo "2. Review Claude's log: less $LOG_FILE"
|
|
101
|
+
echo "3. Check if tests pass:"
|
|
102
|
+
if [[ "$TEST_NAME" == "go-fractals" ]]; then
|
|
103
|
+
echo " cd $OUTPUT_DIR/project && go test ./..."
|
|
104
|
+
elif [[ "$TEST_NAME" == "svelte-todo" ]]; then
|
|
105
|
+
echo " cd $OUTPUT_DIR/project && npm test && npx playwright test"
|
|
106
|
+
fi
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# Svelte Todo List - Design
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
A simple todo list application built with Svelte. Supports creating, completing, and deleting todos with localStorage persistence.
|
|
6
|
+
|
|
7
|
+
## Features
|
|
8
|
+
|
|
9
|
+
- Add new todos
|
|
10
|
+
- Mark todos as complete/incomplete
|
|
11
|
+
- Delete todos
|
|
12
|
+
- Filter by: All / Active / Completed
|
|
13
|
+
- Clear all completed todos
|
|
14
|
+
- Persist to localStorage
|
|
15
|
+
- Show count of remaining items
|
|
16
|
+
|
|
17
|
+
## User Interface
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
┌─────────────────────────────────────────┐
|
|
21
|
+
│ Svelte Todos │
|
|
22
|
+
├─────────────────────────────────────────┤
|
|
23
|
+
│ [________________________] [Add] │
|
|
24
|
+
├─────────────────────────────────────────┤
|
|
25
|
+
│ [ ] Buy groceries [x] │
|
|
26
|
+
│ [✓] Walk the dog [x] │
|
|
27
|
+
│ [ ] Write code [x] │
|
|
28
|
+
├─────────────────────────────────────────┤
|
|
29
|
+
│ 2 items left │
|
|
30
|
+
│ [All] [Active] [Completed] [Clear ✓] │
|
|
31
|
+
└─────────────────────────────────────────┘
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Components
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
src/
|
|
38
|
+
App.svelte # Main app, state management
|
|
39
|
+
lib/
|
|
40
|
+
TodoInput.svelte # Text input + Add button
|
|
41
|
+
TodoList.svelte # List container
|
|
42
|
+
TodoItem.svelte # Single todo with checkbox, text, delete
|
|
43
|
+
FilterBar.svelte # Filter buttons + clear completed
|
|
44
|
+
store.ts # Svelte store for todos
|
|
45
|
+
storage.ts # localStorage persistence
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Data Model
|
|
49
|
+
|
|
50
|
+
```typescript
|
|
51
|
+
interface Todo {
|
|
52
|
+
id: string; // UUID
|
|
53
|
+
text: string; // Todo text
|
|
54
|
+
completed: boolean;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
type Filter = 'all' | 'active' | 'completed';
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Acceptance Criteria
|
|
61
|
+
|
|
62
|
+
1. Can add a todo by typing and pressing Enter or clicking Add
|
|
63
|
+
2. Can toggle todo completion by clicking checkbox
|
|
64
|
+
3. Can delete a todo by clicking X button
|
|
65
|
+
4. Filter buttons show correct subset of todos
|
|
66
|
+
5. "X items left" shows count of incomplete todos
|
|
67
|
+
6. "Clear completed" removes all completed todos
|
|
68
|
+
7. Todos persist across page refresh (localStorage)
|
|
69
|
+
8. Empty state shows helpful message
|
|
70
|
+
9. All tests pass
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
# Svelte Todo List - Implementation Plan
|
|
2
|
+
|
|
3
|
+
Execute this plan using the `superpowers:subagent-driven-development` skill.
|
|
4
|
+
|
|
5
|
+
## Context
|
|
6
|
+
|
|
7
|
+
Building a todo list app with Svelte. See `design.md` for full specification.
|
|
8
|
+
|
|
9
|
+
## Tasks
|
|
10
|
+
|
|
11
|
+
### Task 1: Project Setup
|
|
12
|
+
|
|
13
|
+
Create the Svelte project with Vite.
|
|
14
|
+
|
|
15
|
+
**Do:**
|
|
16
|
+
- Run `npm create vite@latest . -- --template svelte-ts`
|
|
17
|
+
- Install dependencies with `npm install`
|
|
18
|
+
- Verify dev server works
|
|
19
|
+
- Clean up default Vite template content from App.svelte
|
|
20
|
+
|
|
21
|
+
**Verify:**
|
|
22
|
+
- `npm run dev` starts server
|
|
23
|
+
- App shows minimal "Svelte Todos" heading
|
|
24
|
+
- `npm run build` succeeds
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
### Task 2: Todo Store
|
|
29
|
+
|
|
30
|
+
Create the Svelte store for todo state management.
|
|
31
|
+
|
|
32
|
+
**Do:**
|
|
33
|
+
- Create `src/lib/store.ts`
|
|
34
|
+
- Define `Todo` interface with id, text, completed
|
|
35
|
+
- Create writable store with initial empty array
|
|
36
|
+
- Export functions: `addTodo(text)`, `toggleTodo(id)`, `deleteTodo(id)`, `clearCompleted()`
|
|
37
|
+
- Create `src/lib/store.test.ts` with tests for each function
|
|
38
|
+
|
|
39
|
+
**Verify:**
|
|
40
|
+
- Tests pass: `npm run test` (install vitest if needed)
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
### Task 3: localStorage Persistence
|
|
45
|
+
|
|
46
|
+
Add persistence layer for todos.
|
|
47
|
+
|
|
48
|
+
**Do:**
|
|
49
|
+
- Create `src/lib/storage.ts`
|
|
50
|
+
- Implement `loadTodos(): Todo[]` and `saveTodos(todos: Todo[])`
|
|
51
|
+
- Handle JSON parse errors gracefully (return empty array)
|
|
52
|
+
- Integrate with store: load on init, save on change
|
|
53
|
+
- Add tests for load/save/error handling
|
|
54
|
+
|
|
55
|
+
**Verify:**
|
|
56
|
+
- Tests pass
|
|
57
|
+
- Manual test: add todo, refresh page, todo persists
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
### Task 4: TodoInput Component
|
|
62
|
+
|
|
63
|
+
Create the input component for adding todos.
|
|
64
|
+
|
|
65
|
+
**Do:**
|
|
66
|
+
- Create `src/lib/TodoInput.svelte`
|
|
67
|
+
- Text input bound to local state
|
|
68
|
+
- Add button calls `addTodo()` and clears input
|
|
69
|
+
- Enter key also submits
|
|
70
|
+
- Disable Add button when input is empty
|
|
71
|
+
- Add component tests
|
|
72
|
+
|
|
73
|
+
**Verify:**
|
|
74
|
+
- Tests pass
|
|
75
|
+
- Component renders input and button
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
### Task 5: TodoItem Component
|
|
80
|
+
|
|
81
|
+
Create the single todo item component.
|
|
82
|
+
|
|
83
|
+
**Do:**
|
|
84
|
+
- Create `src/lib/TodoItem.svelte`
|
|
85
|
+
- Props: `todo: Todo`
|
|
86
|
+
- Checkbox toggles completion (calls `toggleTodo`)
|
|
87
|
+
- Text with strikethrough when completed
|
|
88
|
+
- Delete button (X) calls `deleteTodo`
|
|
89
|
+
- Add component tests
|
|
90
|
+
|
|
91
|
+
**Verify:**
|
|
92
|
+
- Tests pass
|
|
93
|
+
- Component renders checkbox, text, delete button
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
### Task 6: TodoList Component
|
|
98
|
+
|
|
99
|
+
Create the list container component.
|
|
100
|
+
|
|
101
|
+
**Do:**
|
|
102
|
+
- Create `src/lib/TodoList.svelte`
|
|
103
|
+
- Props: `todos: Todo[]`
|
|
104
|
+
- Renders TodoItem for each todo
|
|
105
|
+
- Shows "No todos yet" when empty
|
|
106
|
+
- Add component tests
|
|
107
|
+
|
|
108
|
+
**Verify:**
|
|
109
|
+
- Tests pass
|
|
110
|
+
- Component renders list of TodoItems
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
### Task 7: FilterBar Component
|
|
115
|
+
|
|
116
|
+
Create the filter and status bar component.
|
|
117
|
+
|
|
118
|
+
**Do:**
|
|
119
|
+
- Create `src/lib/FilterBar.svelte`
|
|
120
|
+
- Props: `todos: Todo[]`, `filter: Filter`, `onFilterChange: (f: Filter) => void`
|
|
121
|
+
- Show count: "X items left" (incomplete count)
|
|
122
|
+
- Three filter buttons: All, Active, Completed
|
|
123
|
+
- Active filter is visually highlighted
|
|
124
|
+
- "Clear completed" button (hidden when no completed todos)
|
|
125
|
+
- Add component tests
|
|
126
|
+
|
|
127
|
+
**Verify:**
|
|
128
|
+
- Tests pass
|
|
129
|
+
- Component renders count, filters, clear button
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
### Task 8: App Integration
|
|
134
|
+
|
|
135
|
+
Wire all components together in App.svelte.
|
|
136
|
+
|
|
137
|
+
**Do:**
|
|
138
|
+
- Import all components and store
|
|
139
|
+
- Add filter state (default: 'all')
|
|
140
|
+
- Compute filtered todos based on filter state
|
|
141
|
+
- Render: heading, TodoInput, TodoList, FilterBar
|
|
142
|
+
- Pass appropriate props to each component
|
|
143
|
+
|
|
144
|
+
**Verify:**
|
|
145
|
+
- App renders all components
|
|
146
|
+
- Adding todos works
|
|
147
|
+
- Toggling works
|
|
148
|
+
- Deleting works
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
### Task 9: Filter Functionality
|
|
153
|
+
|
|
154
|
+
Ensure filtering works end-to-end.
|
|
155
|
+
|
|
156
|
+
**Do:**
|
|
157
|
+
- Verify filter buttons change displayed todos
|
|
158
|
+
- 'all' shows all todos
|
|
159
|
+
- 'active' shows only incomplete todos
|
|
160
|
+
- 'completed' shows only completed todos
|
|
161
|
+
- Clear completed removes completed todos and resets filter if needed
|
|
162
|
+
- Add integration tests
|
|
163
|
+
|
|
164
|
+
**Verify:**
|
|
165
|
+
- Filter tests pass
|
|
166
|
+
- Manual verification of all filter states
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
### Task 10: Styling and Polish
|
|
171
|
+
|
|
172
|
+
Add CSS styling for usability.
|
|
173
|
+
|
|
174
|
+
**Do:**
|
|
175
|
+
- Style the app to match the design mockup
|
|
176
|
+
- Completed todos have strikethrough and muted color
|
|
177
|
+
- Active filter button is highlighted
|
|
178
|
+
- Input has focus styles
|
|
179
|
+
- Delete button appears on hover (or always on mobile)
|
|
180
|
+
- Responsive layout
|
|
181
|
+
|
|
182
|
+
**Verify:**
|
|
183
|
+
- App is visually usable
|
|
184
|
+
- Styles don't break functionality
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
### Task 11: End-to-End Tests
|
|
189
|
+
|
|
190
|
+
Add Playwright tests for full user flows.
|
|
191
|
+
|
|
192
|
+
**Do:**
|
|
193
|
+
- Install Playwright: `npm init playwright@latest`
|
|
194
|
+
- Create `tests/todo.spec.ts`
|
|
195
|
+
- Test flows:
|
|
196
|
+
- Add a todo
|
|
197
|
+
- Complete a todo
|
|
198
|
+
- Delete a todo
|
|
199
|
+
- Filter todos
|
|
200
|
+
- Clear completed
|
|
201
|
+
- Persistence (add, reload, verify)
|
|
202
|
+
|
|
203
|
+
**Verify:**
|
|
204
|
+
- `npx playwright test` passes
|
|
205
|
+
|
|
206
|
+
---
|
|
207
|
+
|
|
208
|
+
### Task 12: README
|
|
209
|
+
|
|
210
|
+
Document the project.
|
|
211
|
+
|
|
212
|
+
**Do:**
|
|
213
|
+
- Create `README.md` with:
|
|
214
|
+
- Project description
|
|
215
|
+
- Setup: `npm install`
|
|
216
|
+
- Development: `npm run dev`
|
|
217
|
+
- Testing: `npm test` and `npx playwright test`
|
|
218
|
+
- Build: `npm run build`
|
|
219
|
+
|
|
220
|
+
**Verify:**
|
|
221
|
+
- README accurately describes the project
|
|
222
|
+
- Instructions work
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Scaffold the Svelte Todo test project
|
|
3
|
+
# Usage: ./scaffold.sh /path/to/target/directory
|
|
4
|
+
|
|
5
|
+
set -e
|
|
6
|
+
|
|
7
|
+
TARGET_DIR="${1:?Usage: $0 <target-directory>}"
|
|
8
|
+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
9
|
+
|
|
10
|
+
# Create target directory
|
|
11
|
+
mkdir -p "$TARGET_DIR"
|
|
12
|
+
cd "$TARGET_DIR"
|
|
13
|
+
|
|
14
|
+
# Initialize git repo
|
|
15
|
+
git init
|
|
16
|
+
|
|
17
|
+
# Copy design and plan
|
|
18
|
+
cp "$SCRIPT_DIR/design.md" .
|
|
19
|
+
cp "$SCRIPT_DIR/plan.md" .
|
|
20
|
+
|
|
21
|
+
# Create .claude settings to allow reads/writes in this directory
|
|
22
|
+
mkdir -p .claude
|
|
23
|
+
cat > .claude/settings.local.json << 'SETTINGS'
|
|
24
|
+
{
|
|
25
|
+
"permissions": {
|
|
26
|
+
"allow": [
|
|
27
|
+
"Read(**)",
|
|
28
|
+
"Edit(**)",
|
|
29
|
+
"Write(**)",
|
|
30
|
+
"Bash(npm:*)",
|
|
31
|
+
"Bash(npx:*)",
|
|
32
|
+
"Bash(mkdir:*)",
|
|
33
|
+
"Bash(git:*)"
|
|
34
|
+
]
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
SETTINGS
|
|
38
|
+
|
|
39
|
+
# Create initial commit
|
|
40
|
+
git add .
|
|
41
|
+
git commit -m "Initial project setup with design and plan"
|
|
42
|
+
|
|
43
|
+
echo "Scaffolded Svelte Todo project at: $TARGET_DIR"
|
|
44
|
+
echo ""
|
|
45
|
+
echo "To run the test:"
|
|
46
|
+
echo " claude -p \"Execute this plan using superpowers:subagent-driven-development. Plan: $TARGET_DIR/plan.md\" --plugin-dir /path/to/superpowers"
|