Ticket Create
Interactive Atomic Ticket design and creation tool - guides users to design tickets following Single Responsibility Principle.
Core Principle
Atomic Ticket = One Action + One Target (Single Responsibility)
Every ticket must pass the four validation checks:
- Semantic Check: Can express as "verb + single target"?
- Modification Reason Check: Only one reason would cause modification?
- Acceptance Consistency: All acceptance criteria point to same target?
- Dependency Independence: No circular dependencies if split?
Prohibited Evaluation Methods
NEVER use these metrics to determine if splitting is needed:
- Time estimates (30 minutes, 1 hour)
- Lines of code (50 lines, 100 lines)
- File count (2 files, 5 files)
- Test count (5 tests, 10 tests)
ONLY use the four Single Responsibility checks above.
File Format
v3.0 (Frontmatter Edition): Tickets are stored as Markdown files with YAML frontmatter.
Storage Location
docs/work-logs/v{VERSION}/tickets/{ticket_id}.md
Example:
docs/work-logs/v0.16.0/tickets/0.16.0-W1-001.md
File Structure
---
# === Identification ===
ticket_id: "0.16.0-W1-001"
version: "0.16.0"
wave: 1
# === Single Responsibility ===
action: "Implement"
target: "startScan() method"
# === Execution ===
agent: "parsley-flutter-developer"
# === 5W1H Design ===
who: "parsley-flutter-developer"
what: "Implement startScan() method"
when: "Phase 3 start"
where: "lib/infrastructure/"
why: "Enable barcode scanning"
how: "Use mobile_scanner package"
# === Acceptance Criteria ===
acceptance:
- Task implementation complete
- Related tests pass
- No code quality warnings
# === Related Files ===
files:
- lib/infrastructure/scanner_service.dart
# === Dependencies ===
dependencies: []
# === Status Tracking ===
status: "pending"
assigned: false
started_at: null
completed_at: null
---
# Execution Log
## Task Summary
Implement startScan() method
---
## Problem Analysis
<!-- To be filled by executing agent -->
---
## Solution
<!-- To be filled by executing agent -->
---
## Test Results
<!-- To be filled by executing agent -->
---
## Completion Info
**Completion Time**: (pending)
**Executing Agent**: parsley-flutter-developer
**Review Status**: pending
Interactive Flow
Step 1: Requirement Collection
Claude: Please describe the task you want to complete:
Wait for user input.
Step 2: Responsibility Analysis
Analyze user requirement and identify independent responsibilities:
Claude: I identified the following independent responsibilities:
1. [Responsibility 1]
2. [Responsibility 2]
...
Each responsibility will become an independent Atomic Ticket.
Step 3: Single Responsibility Check
For each identified responsibility, perform four checks:
Claude: Responsibility 1 "[description]" Single Responsibility Check:
✅ Semantic: Can express as "[verb] + [target]"
✅ Modification Reason: Only "[reason]" would cause modification
✅ Acceptance Consistency: All criteria point to [target]
✅ Dependency Independence: No circular dependencies
→ Meets Atomic Ticket standard
If not passing, suggest further splitting:
Claude: ⚠️ Responsibility 2 "[description]" needs further splitting:
❌ Modification Reason: Has two modification reasons
- Reason A: [description]
- Reason B: [description]
→ Suggest splitting into:
- Ticket A: [verb] [target A]
- Ticket B: [verb] [target B]
Step 4: Ticket Creation Confirmation
Claude: Suggest creating the following Atomic Tickets:
| ID | Action | Target | Agent |
|----|--------|--------|-------|
| {VERSION}-W1-001 | Implement | startScan() method | parsley |
| {VERSION}-W1-002 | Implement | stopScan() method | parsley |
Confirm creation? (Y/n)
Step 5: Create Ticket Files
After confirmation, create Markdown files for each Ticket.
Run:
uv run .claude/hooks/ticket-creator.py create \
--version "0.16.0" \
--wave 1 \
--seq 1 \
--action "Implement" \
--target "startScan() method" \
--agent "parsley-flutter-developer"
Output:
✅ Created Ticket: 0.16.0-W1-001
Location: docs/work-logs/v0.16.0/tickets/0.16.0-W1-001.md
Available Commands
Interactive Mode (Default)
/ticket-create
Guided Q&A to create Tickets step by step.
Batch Mode
/ticket-create batch --description "requirement description"
Auto-identify responsibilities from description and batch create Tickets.
From Test Failures
/ticket-create from-tests
Auto-create fix Tickets from latest test results (one Ticket per failing test).
Initialize Version Directory
uv run .claude/hooks/ticket-creator.py init 0.16.0
Creates version directory and tickets subdirectory.
List Tickets
uv run .claude/hooks/ticket-creator.py list --version 0.16.0
Lists all tickets in the specified version.
Show Ticket Details
uv run .claude/hooks/ticket-creator.py show --id 0.16.0-W1-001
Displays full ticket information including 5W1H.
Ticket ID Format
{Version}-W{Wave}-{Seq}
Examples:
0.16.0-W1-001- v0.16.0, Wave 1, Ticket 10.16.0-W2-003- v0.16.0, Wave 2, Ticket 3
Wave Definition (Dependency Layers)
| Wave | Meaning | Can Execute | |------|---------|-------------| | W1 | No dependencies | Immediately, in parallel | | W2 | Depends on some W1 tickets | After W1 dependencies complete | | W3 | Depends on some W2 tickets | After W2 dependencies complete |
Wave Assignment Rule: Tickets with no dependencies → W1, tickets depending on W1 → W2, etc.
Naming Conventions
Action (Verb):
Implement- Create new featureFix- Correct errorAdd- Add test or documentationRefactor- Improve structureRemove- Delete featureUpdate- Modify existing content
Target (Noun):
- Specific method:
startScan() method - Specific class:
ISBNValidator class - Specific test:
ISBNValidator.validate() test - Specific file:
ticket-create SKILL.md
Common Mistakes
| Wrong | Problem | Correct | |-------|---------|---------| | Implement scanning and offline support | Two targets | Split into two Tickets | | Fix all ISBN tests | Multiple targets | One Ticket per test | | Refactor and optimize SearchService | Two actions | Split into two Tickets |
Status Tracking
Status is tracked via frontmatter fields in each Ticket file.
| Field | Type | Description |
|-------|------|-------------|
| status | string | "pending", "in_progress", "completed" |
| assigned | boolean | Whether someone has claimed the ticket |
| started_at | datetime | When work started (ISO 8601) |
| completed_at | datetime | When work completed (ISO 8601) |
Use /ticket-track commands to update status:
claim- Mark as in progresscomplete- Mark as completedrelease- Release back to pending
Related Skills
/ticket-track- Track and update Ticket status
Resources
Scripts
.claude/hooks/ticket-creator.py- Main creation script.claude/hooks/frontmatter_parser.py- Frontmatter parsing module
Templates
.claude/templates/ticket.md.template- Ticket file template
References
.claude/methodologies/atomic-ticket-methodology.md- Full Single Responsibility methodology.claude/methodologies/frontmatter-ticket-tracking-methodology.md- Frontmatter tracking methodology