claudepod 1.2.3 → 1.3.1
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/.devcontainer/CHANGELOG.md +179 -50
- package/.devcontainer/CLAUDE.md +24 -7
- package/.devcontainer/README.md +2 -0
- package/.devcontainer/config/main-system-prompt.md +357 -81
- package/.devcontainer/config/settings.json +6 -3
- package/.devcontainer/devcontainer.json +17 -5
- package/.devcontainer/features/agent-browser/README.md +65 -0
- package/.devcontainer/features/agent-browser/devcontainer-feature.json +23 -0
- package/.devcontainer/features/agent-browser/install.sh +72 -0
- package/.devcontainer/features/lsp-servers/devcontainer-feature.json +8 -2
- package/.devcontainer/features/lsp-servers/install.sh +25 -1
- package/.devcontainer/features/notify-hook/README.md +86 -0
- package/.devcontainer/features/notify-hook/devcontainer-feature.json +23 -0
- package/.devcontainer/features/notify-hook/install.sh +38 -0
- package/.devcontainer/plugins/devs-marketplace/.claude-plugin/marketplace.json +99 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/auto-formatter/.claude-plugin/plugin.json +7 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/auto-formatter/hooks/hooks.json +17 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/auto-formatter/scripts/format-file.py +101 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/auto-linter/.claude-plugin/plugin.json +7 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/auto-linter/hooks/hooks.json +17 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/auto-linter/scripts/lint-file.py +137 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/claudepod-lsp/.claude-plugin/plugin.json +7 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/dangerous-command-blocker/.claude-plugin/plugin.json +7 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/dangerous-command-blocker/hooks/hooks.json +17 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/dangerous-command-blocker/scripts/block-dangerous.py +110 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/notify-hook/.claude-plugin/plugin.json +7 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/notify-hook/hooks/hooks.json +16 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/planning-reminder/.claude-plugin/plugin.json +7 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/planning-reminder/hooks/hooks.json +17 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/protected-files-guard/.claude-plugin/plugin.json +7 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/protected-files-guard/hooks/hooks.json +17 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/protected-files-guard/scripts/guard-protected.py +108 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/ticket-workflow/.claude-plugin/commands/ticket:create-pr.md +337 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/ticket-workflow/.claude-plugin/commands/ticket:new.md +166 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/ticket-workflow/.claude-plugin/commands/ticket:review-commit.md +290 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/ticket-workflow/.claude-plugin/commands/ticket:work.md +257 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/ticket-workflow/.claude-plugin/plugin.json +8 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/ticket-workflow/.claude-plugin/system-prompt.md +184 -0
- package/.devcontainer/scripts/setup-aliases.sh +41 -13
- package/.devcontainer/scripts/setup-plugins.sh +35 -13
- package/.devcontainer/scripts/setup.sh +1 -3
- package/README.md +37 -0
- package/package.json +1 -1
- package/.devcontainer/scripts/setup-lsp.sh +0 -20
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Create pull request with aggressive security and architecture review
|
|
3
|
+
disable-model-invocation: true
|
|
4
|
+
allowed-tools: Bash(gh:*), Bash(git:*), Read, Grep, Glob, AskUserQuestion
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /ticket:create-pr - Create PR with Aggressive Review
|
|
8
|
+
|
|
9
|
+
Create pull request, conduct deep security and architecture review, post findings. NEVER auto-approve.
|
|
10
|
+
|
|
11
|
+
## Prerequisites
|
|
12
|
+
|
|
13
|
+
Must have active ticket context. If not set, prompt for ticket number.
|
|
14
|
+
|
|
15
|
+
## Process
|
|
16
|
+
|
|
17
|
+
### Phase 1: Gather Context
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
# Branch info
|
|
21
|
+
git branch --show-current
|
|
22
|
+
git log main..HEAD --oneline
|
|
23
|
+
git diff main...HEAD --stat
|
|
24
|
+
|
|
25
|
+
# Full diff
|
|
26
|
+
git diff main...HEAD
|
|
27
|
+
|
|
28
|
+
# Ticket
|
|
29
|
+
gh issue view $TICKET --json number,title,body
|
|
30
|
+
|
|
31
|
+
# Discover project rules
|
|
32
|
+
ls -la CLAUDE.md .claude/CLAUDE.md CLAUDE.local.md 2>/dev/null
|
|
33
|
+
ls -la .claude/rules/*.md 2>/dev/null
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Phase 2: Create PR
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
gh pr create --title "<type>(<scope>): <summary>" --body "$(cat <<'EOF'
|
|
40
|
+
## Summary
|
|
41
|
+
|
|
42
|
+
[1-3 bullet points of what this PR accomplishes]
|
|
43
|
+
|
|
44
|
+
## Related Issue
|
|
45
|
+
|
|
46
|
+
Closes #[TICKET] (or Refs #[TICKET] if partial)
|
|
47
|
+
|
|
48
|
+
## Changes
|
|
49
|
+
|
|
50
|
+
- [Component]: [What changed]
|
|
51
|
+
|
|
52
|
+
## Testing
|
|
53
|
+
|
|
54
|
+
- [ ] [How to test each change]
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
*PR created by Claude. Awaiting human review.*
|
|
58
|
+
EOF
|
|
59
|
+
)"
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Capture PR number for subsequent operations.
|
|
63
|
+
|
|
64
|
+
### Phase 3: Aggressive Analysis
|
|
65
|
+
|
|
66
|
+
This review is DEEPER than commit review - final gate before merge.
|
|
67
|
+
|
|
68
|
+
#### Attack Surface Analysis
|
|
69
|
+
|
|
70
|
+
| Check | Look For |
|
|
71
|
+
|-------|----------|
|
|
72
|
+
| New Endpoints | Every new route/handler exposed |
|
|
73
|
+
| New Inputs | Every new user input vector |
|
|
74
|
+
| Permission Changes | Any auth/authz modifications |
|
|
75
|
+
| Data Flow | How data moves through new code |
|
|
76
|
+
| External Integrations | New API calls, webhooks, services |
|
|
77
|
+
|
|
78
|
+
#### Threat Modeling (per feature)
|
|
79
|
+
|
|
80
|
+
For each significant feature:
|
|
81
|
+
- What could an attacker exploit?
|
|
82
|
+
- What data could be exfiltrated?
|
|
83
|
+
- What operations could be abused?
|
|
84
|
+
- What rate limiting is needed?
|
|
85
|
+
- What audit logging is needed?
|
|
86
|
+
|
|
87
|
+
#### Dependency Security
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
# Check for new dependencies (adapt patterns to project)
|
|
91
|
+
git diff main...HEAD -- "**/requirements*.txt" "**/package*.json" "**/Cargo.toml" "**/go.mod" "**/Gemfile"
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
| Check | Look For |
|
|
95
|
+
|-------|----------|
|
|
96
|
+
| New Dependencies | List all new packages + versions |
|
|
97
|
+
| Known CVEs | Check against vulnerability databases |
|
|
98
|
+
| Supply Chain | Typosquatting, maintainer reputation |
|
|
99
|
+
| License Compliance | License compatibility issues |
|
|
100
|
+
|
|
101
|
+
#### Project Rules Adherence
|
|
102
|
+
|
|
103
|
+
Check compliance with project-specific rules (deeper than commit review):
|
|
104
|
+
|
|
105
|
+
1. **Discover rules**:
|
|
106
|
+
- Read `CLAUDE.md` or `.claude/CLAUDE.md` if present
|
|
107
|
+
- Read all files in `.claude/rules/*.md`
|
|
108
|
+
- Check `CLAUDE.local.md` for user-specific rules
|
|
109
|
+
|
|
110
|
+
2. **Full diff review for compliance**:
|
|
111
|
+
- Check EVERY change against stated rules
|
|
112
|
+
- Note architectural patterns that should be followed
|
|
113
|
+
- Flag ALL deviations from documented conventions
|
|
114
|
+
|
|
115
|
+
| Rule Source | Compliance | Notes |
|
|
116
|
+
|-------------|------------|-------|
|
|
117
|
+
| CLAUDE.md | OK / VIOLATION | [specifics] |
|
|
118
|
+
| rules/[name].md | OK / VIOLATION | [specifics] |
|
|
119
|
+
|
|
120
|
+
**Common checks**:
|
|
121
|
+
- Code organization matches documented patterns
|
|
122
|
+
- Naming conventions followed throughout
|
|
123
|
+
- Required abstractions used consistently
|
|
124
|
+
- Forbidden patterns avoided everywhere
|
|
125
|
+
|
|
126
|
+
#### Architecture Deep Dive
|
|
127
|
+
|
|
128
|
+
| Check | Look For |
|
|
129
|
+
|-------|----------|
|
|
130
|
+
| Pattern Compliance | Full diff against established patterns |
|
|
131
|
+
| Coupling Analysis | New dependencies between modules |
|
|
132
|
+
| Scalability | O(n) analysis, potential bottlenecks |
|
|
133
|
+
| Error Propagation | How errors flow through new code |
|
|
134
|
+
| Recovery Strategies | Graceful degradation, retry logic |
|
|
135
|
+
| State Management | Race conditions, consistency issues |
|
|
136
|
+
|
|
137
|
+
#### Test Analysis
|
|
138
|
+
|
|
139
|
+
**Note**: If user opted out of tests during `/ticket:work`, note "Tests: Skipped per user preference" and skip detailed analysis.
|
|
140
|
+
|
|
141
|
+
Otherwise, evaluate against testing standards:
|
|
142
|
+
|
|
143
|
+
| Check | Assess |
|
|
144
|
+
|-------|--------|
|
|
145
|
+
| Behavior Coverage | Are key behaviors tested? (not line count) |
|
|
146
|
+
| Test Quality | Do tests verify outcomes, not implementation? |
|
|
147
|
+
| Brittleness | Any tests that will break on refactor? |
|
|
148
|
+
| Over-testing | Trivial code with unnecessary tests? |
|
|
149
|
+
| Under-testing | Critical paths without tests? |
|
|
150
|
+
| Manual Test Plan | What can't be automated |
|
|
151
|
+
|
|
152
|
+
**AI testing pitfalls to flag**:
|
|
153
|
+
- Tests for trivial getters/setters
|
|
154
|
+
- Excessive edge cases (>5 per function)
|
|
155
|
+
- Tests asserting on implementation details
|
|
156
|
+
- Over-mocked tests that verify nothing
|
|
157
|
+
|
|
158
|
+
#### Breaking Changes
|
|
159
|
+
|
|
160
|
+
| Check | Look For |
|
|
161
|
+
|-------|----------|
|
|
162
|
+
| API Contracts | Changed request/response schemas |
|
|
163
|
+
| Database Schema | Migration requirements |
|
|
164
|
+
| Configuration | New env vars, changed defaults |
|
|
165
|
+
| Dependencies | Version bumps affecting consumers |
|
|
166
|
+
|
|
167
|
+
#### Requirements Final Check
|
|
168
|
+
|
|
169
|
+
| Requirement | Status | Evidence |
|
|
170
|
+
|-------------|--------|----------|
|
|
171
|
+
| [Each EARS requirement] | SATISFIED / PARTIAL / NOT MET | [Location] |
|
|
172
|
+
|
|
173
|
+
All acceptance criteria must be verified.
|
|
174
|
+
|
|
175
|
+
### Phase 4: Present Findings
|
|
176
|
+
|
|
177
|
+
Organize by severity:
|
|
178
|
+
|
|
179
|
+
```markdown
|
|
180
|
+
## PR Review Findings
|
|
181
|
+
|
|
182
|
+
### Critical (Must Fix Before Merge)
|
|
183
|
+
- [Finding]: [file:line] - [Impact]
|
|
184
|
+
|
|
185
|
+
### High (Should Fix Before Merge)
|
|
186
|
+
- [Finding]: [file:line] - [Impact]
|
|
187
|
+
|
|
188
|
+
### Medium (Fix Soon)
|
|
189
|
+
- [Finding]: [file:line] - [Impact]
|
|
190
|
+
|
|
191
|
+
### Low (Nice to Have)
|
|
192
|
+
- [Finding]: [file:line] - [Impact]
|
|
193
|
+
|
|
194
|
+
### Info (Observations)
|
|
195
|
+
- [Observation]
|
|
196
|
+
|
|
197
|
+
### Project Rules Compliance
|
|
198
|
+
| Rule Source | Status | Details |
|
|
199
|
+
|-------------|--------|---------|
|
|
200
|
+
| ... | ... | ... |
|
|
201
|
+
|
|
202
|
+
### Requirements Status
|
|
203
|
+
| Requirement | Status | Evidence |
|
|
204
|
+
|-------------|--------|----------|
|
|
205
|
+
| ... | ... | ... |
|
|
206
|
+
|
|
207
|
+
### Threat Model Summary
|
|
208
|
+
| Feature | Primary Risks | Mitigations Present |
|
|
209
|
+
|---------|---------------|---------------------|
|
|
210
|
+
| ... | ... | ... |
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
### Phase 5: User Decisions
|
|
214
|
+
|
|
215
|
+
Use AskUserQuestion:
|
|
216
|
+
|
|
217
|
+
```
|
|
218
|
+
For each severity level:
|
|
219
|
+
- FIX: Address before posting review
|
|
220
|
+
- ISSUE: Create GitHub issue
|
|
221
|
+
- IGNORE: Acknowledge
|
|
222
|
+
- NOTE: Include in PR review but don't block
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
### Phase 6: Create Issues (if selected)
|
|
226
|
+
|
|
227
|
+
Group by category, include:
|
|
228
|
+
- PR number
|
|
229
|
+
- Branch name
|
|
230
|
+
- Commit range
|
|
231
|
+
- Link to original ticket
|
|
232
|
+
|
|
233
|
+
```bash
|
|
234
|
+
gh issue create --title "[Category] findings from PR #[PR]" --body "..."
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
### Phase 7: Fix Selected Items
|
|
238
|
+
|
|
239
|
+
Address items marked FIX. Commit and push.
|
|
240
|
+
|
|
241
|
+
### Phase 8: Post Review (NEVER APPROVE)
|
|
242
|
+
|
|
243
|
+
```bash
|
|
244
|
+
gh pr review [PR] --comment --body "$(cat <<'EOF'
|
|
245
|
+
## Automated Review
|
|
246
|
+
|
|
247
|
+
**Status**: Requires human approval
|
|
248
|
+
|
|
249
|
+
### Summary
|
|
250
|
+
|
|
251
|
+
[Overall assessment - 2-3 sentences]
|
|
252
|
+
|
|
253
|
+
### Critical Issues (Must Address)
|
|
254
|
+
- [Issue with file:line]
|
|
255
|
+
|
|
256
|
+
### Required Changes
|
|
257
|
+
- [Specific change needed]
|
|
258
|
+
|
|
259
|
+
### Suggestions
|
|
260
|
+
- [Nice-to-have improvements]
|
|
261
|
+
|
|
262
|
+
### Project Rules Compliance
|
|
263
|
+
- [Summary of rules adherence]
|
|
264
|
+
|
|
265
|
+
### Security Considerations
|
|
266
|
+
- [Key security points for human reviewer]
|
|
267
|
+
|
|
268
|
+
### Test Coverage
|
|
269
|
+
- [Coverage assessment or "Skipped per user preference"]
|
|
270
|
+
- [Manual test recommendations if applicable]
|
|
271
|
+
|
|
272
|
+
### Related Issues Created
|
|
273
|
+
- #[N]: [Description]
|
|
274
|
+
|
|
275
|
+
---
|
|
276
|
+
*Automated review by Claude. Human approval required before merge.*
|
|
277
|
+
EOF
|
|
278
|
+
)"
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
### Phase 9: Post to Original Ticket
|
|
282
|
+
|
|
283
|
+
```bash
|
|
284
|
+
gh issue comment $TICKET --body "$(cat <<'EOF'
|
|
285
|
+
## Pull Request Created
|
|
286
|
+
|
|
287
|
+
**PR**: #[PR_NUMBER]
|
|
288
|
+
**Branch**: [branch]
|
|
289
|
+
|
|
290
|
+
### Status
|
|
291
|
+
- [x] PR created
|
|
292
|
+
- [x] Automated review posted
|
|
293
|
+
- [ ] Human review pending
|
|
294
|
+
- [ ] Approved and merged
|
|
295
|
+
|
|
296
|
+
### Review Summary
|
|
297
|
+
- Critical: [count]
|
|
298
|
+
- High: [count]
|
|
299
|
+
- Medium: [count]
|
|
300
|
+
- Low: [count]
|
|
301
|
+
|
|
302
|
+
### Project Rules
|
|
303
|
+
- [Compliance summary]
|
|
304
|
+
|
|
305
|
+
### Issues Created
|
|
306
|
+
- #[N]: [Category]
|
|
307
|
+
|
|
308
|
+
### Next Steps
|
|
309
|
+
1. Address critical/high findings if any
|
|
310
|
+
2. Request human review
|
|
311
|
+
3. Merge after approval
|
|
312
|
+
|
|
313
|
+
---
|
|
314
|
+
*PR created by Claude.*
|
|
315
|
+
EOF
|
|
316
|
+
)"
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
## Rules
|
|
320
|
+
|
|
321
|
+
- **NEVER auto-approve** - always require human
|
|
322
|
+
- **Deeper than commit review** - this is final gate
|
|
323
|
+
- **Active threat modeling** required for each feature
|
|
324
|
+
- **All findings** categorized by severity
|
|
325
|
+
- **User decides** what to fix/issue/ignore
|
|
326
|
+
- **Dual posting**: PR comment + source ticket comment
|
|
327
|
+
- **Batch** all GitHub operations
|
|
328
|
+
- **Check project rules** (CLAUDE.md, .claude/rules/*.md) thoroughly
|
|
329
|
+
- **Respect test preferences** from planning phase
|
|
330
|
+
|
|
331
|
+
## Severity Guide
|
|
332
|
+
|
|
333
|
+
**Critical**: Active vulnerability, data exposure, auth bypass, breaking production
|
|
334
|
+
**High**: Security weakness, significant bug, major pattern violation
|
|
335
|
+
**Medium**: Code smell, minor vulnerability, missing validation
|
|
336
|
+
**Low**: Style, optimization, minor improvements
|
|
337
|
+
**Info**: Observations, questions, future considerations
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Transform requirements into EARS-formatted GitHub issue with structured business requirements
|
|
3
|
+
argument-hint: [requirements description]
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
allowed-tools: Bash(gh:*), Read, Grep, Glob, AskUserQuestion
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# /ticket:new - Create EARS-Formatted GitHub Issue
|
|
9
|
+
|
|
10
|
+
Transform requirements into structured GitHub issue with EARS-formatted business requirements.
|
|
11
|
+
|
|
12
|
+
## Input
|
|
13
|
+
|
|
14
|
+
`$ARGUMENTS` - Stream-of-consciousness, structured, or minimal requirements description.
|
|
15
|
+
|
|
16
|
+
## Process
|
|
17
|
+
|
|
18
|
+
### Phase 1: Requirements Gathering
|
|
19
|
+
|
|
20
|
+
Use AskUserQuestion iteratively to clarify:
|
|
21
|
+
|
|
22
|
+
1. **Problem Space**
|
|
23
|
+
- What problem does this solve?
|
|
24
|
+
- Who is affected? (end users, admins, system)
|
|
25
|
+
- What is the current state/workaround?
|
|
26
|
+
|
|
27
|
+
2. **Desired Outcome**
|
|
28
|
+
- What does success look like?
|
|
29
|
+
- What is the end-user impact?
|
|
30
|
+
- Are there measurable success criteria?
|
|
31
|
+
|
|
32
|
+
3. **Trigger Conditions** (determines EARS pattern)
|
|
33
|
+
- Always active? → Ubiquitous
|
|
34
|
+
- Triggered by event? → Event-Driven
|
|
35
|
+
- Active during state? → State-Driven
|
|
36
|
+
- Error/edge case handling? → Unwanted Behavior
|
|
37
|
+
- Optional/configurable? → Optional Feature
|
|
38
|
+
|
|
39
|
+
4. **Scope Boundaries**
|
|
40
|
+
- What is explicitly OUT of scope?
|
|
41
|
+
- What systems/components are affected? (discover from codebase)
|
|
42
|
+
|
|
43
|
+
5. **Technical Questions** (parking lot)
|
|
44
|
+
- Note questions for implementation phase
|
|
45
|
+
- Do NOT make technical decisions now
|
|
46
|
+
|
|
47
|
+
### Phase 2: Structure Ticket
|
|
48
|
+
|
|
49
|
+
Format the ticket with these sections:
|
|
50
|
+
|
|
51
|
+
```markdown
|
|
52
|
+
## Original Request
|
|
53
|
+
|
|
54
|
+
> [Verbatim user input from $ARGUMENTS]
|
|
55
|
+
|
|
56
|
+
## Overview
|
|
57
|
+
|
|
58
|
+
[Plain language description - goal, context, user impact. Cleaned and clarified from user input.]
|
|
59
|
+
|
|
60
|
+
## Requirements
|
|
61
|
+
|
|
62
|
+
### [System/Component Name]
|
|
63
|
+
- [EARS requirements for this system]
|
|
64
|
+
|
|
65
|
+
### [Another System/Component]
|
|
66
|
+
- [EARS requirements for this system]
|
|
67
|
+
|
|
68
|
+
(Group by affected system/component. Discover systems by exploring codebase structure.
|
|
69
|
+
Single-system projects need no grouping. Include only systems with requirements.)
|
|
70
|
+
|
|
71
|
+
## Technical Questions
|
|
72
|
+
|
|
73
|
+
- [ ] [Questions to resolve during /ticket:work]
|
|
74
|
+
|
|
75
|
+
## Acceptance Criteria
|
|
76
|
+
|
|
77
|
+
- [ ] [Testable criteria derived from requirements]
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Preserve Original Input
|
|
81
|
+
|
|
82
|
+
If `$ARGUMENTS` contains meaningful context (more than a few words), include it verbatim in the "Original Request" section. This provides:
|
|
83
|
+
- Audit trail for requirements traceability
|
|
84
|
+
- Context for future readers
|
|
85
|
+
- Verification that requirements capture user intent
|
|
86
|
+
|
|
87
|
+
Omit the "Original Request" section only if input was trivially simple (single word, "test", etc.)
|
|
88
|
+
|
|
89
|
+
### System/Component Discovery
|
|
90
|
+
|
|
91
|
+
Do NOT hardcode system names. Discover them by:
|
|
92
|
+
- Examining top-level directories (e.g., `src/`, `api/`, `web/`, `services/`)
|
|
93
|
+
- Checking package.json workspaces or monorepo structure
|
|
94
|
+
- Reading docker-compose.yml for service names
|
|
95
|
+
- Looking at existing CLAUDE.md for documented architecture
|
|
96
|
+
|
|
97
|
+
Use the actual names found in the project.
|
|
98
|
+
|
|
99
|
+
### EARS Patterns
|
|
100
|
+
|
|
101
|
+
Every requirement MUST use one pattern:
|
|
102
|
+
|
|
103
|
+
| Pattern | Template | Use When |
|
|
104
|
+
|---------|----------|----------|
|
|
105
|
+
| Ubiquitous | The `<system>` shall `<response>`. | Always active, fundamental behavior |
|
|
106
|
+
| Event-Driven | WHEN `<trigger>`, the `<system>` shall `<response>`. | Triggered by specific event |
|
|
107
|
+
| State-Driven | WHILE `<state>`, the `<system>` shall `<response>`. | Active during condition |
|
|
108
|
+
| Unwanted Behavior | IF `<condition>`, THEN the `<system>` shall `<response>`. | Error handling, edge cases |
|
|
109
|
+
| Optional Feature | WHERE `<feature enabled>`, the `<system>` shall `<response>`. | Configurable features |
|
|
110
|
+
|
|
111
|
+
### Phase 3: Confirm and Create
|
|
112
|
+
|
|
113
|
+
1. Present formatted ticket for user confirmation
|
|
114
|
+
2. Allow edits/refinements
|
|
115
|
+
3. Create issue: `gh issue create --title "<title>" --body "<body>"`
|
|
116
|
+
4. Output issue URL
|
|
117
|
+
5. Suggest: "Run `/ticket:work #N` to start implementation planning"
|
|
118
|
+
|
|
119
|
+
## Rules
|
|
120
|
+
|
|
121
|
+
- NO technical requirements (no code paths, file changes, implementation details)
|
|
122
|
+
- Every requirement MUST fit an EARS pattern
|
|
123
|
+
- Multi-system features → separate requirement per system with actual system name
|
|
124
|
+
- Plain language overview ALWAYS included
|
|
125
|
+
- Technical questions go in parking lot, not requirements
|
|
126
|
+
- Requirements describe WHAT, not HOW
|
|
127
|
+
- Preserve original user input for audit trail
|
|
128
|
+
|
|
129
|
+
## Example Output
|
|
130
|
+
|
|
131
|
+
```markdown
|
|
132
|
+
## Original Request
|
|
133
|
+
|
|
134
|
+
> Users should be able to temporarily disable auto-proxying for their characters without having to delete them. Right now if someone wants to stop using a character temporarily they lose all their settings.
|
|
135
|
+
|
|
136
|
+
## Overview
|
|
137
|
+
|
|
138
|
+
Users need the ability to temporarily disable character auto-proxying without deleting configuration. Currently, users must delete and recreate characters to toggle this behavior, losing customization.
|
|
139
|
+
|
|
140
|
+
## Requirements
|
|
141
|
+
|
|
142
|
+
### API
|
|
143
|
+
- The API shall store an enabled/disabled status for each character.
|
|
144
|
+
- WHEN a character's enabled status changes, the API shall publish a cache invalidation event.
|
|
145
|
+
|
|
146
|
+
### Bot
|
|
147
|
+
- WHEN a user sends a message matching a character's proxy pattern, the bot shall check the character's enabled status before proxying.
|
|
148
|
+
- WHILE a character is disabled, the bot shall not proxy messages for that character.
|
|
149
|
+
|
|
150
|
+
### Dashboard
|
|
151
|
+
- The dashboard shall display the character's enabled status on the character card.
|
|
152
|
+
- WHEN the user clicks the enable/disable toggle, the dashboard shall update the character's status via API.
|
|
153
|
+
|
|
154
|
+
## Technical Questions
|
|
155
|
+
|
|
156
|
+
- [ ] Should disabled characters appear differently in command autocomplete?
|
|
157
|
+
- [ ] What is the default enabled status for new characters?
|
|
158
|
+
|
|
159
|
+
## Acceptance Criteria
|
|
160
|
+
|
|
161
|
+
- [ ] Character can be disabled without deletion
|
|
162
|
+
- [ ] Disabled character messages are not proxied
|
|
163
|
+
- [ ] Status persists across restarts
|
|
164
|
+
- [ ] Dashboard reflects current status
|
|
165
|
+
- [ ] Cache invalidation works correctly
|
|
166
|
+
```
|