| name | Project Workflow & Build System |
| description | Guides AI agents through TDD workflow, build system safety, git operations, and TODO management for gem development. Use this when starting development sessions, managing tasks, or needing workflow clarification. |
Project Workflow & Build System
Development workflow, build system permissions, and git safety protocols for PicoRuby development.
Your Role
You are the developer of the pra gem — a CLI tool for PicoRuby application development on ESP32.
- Primary role: Implement and maintain the
pragem itself - User perspective: Temporarily adopt when designing user-facing features (commands, templates, documentation)
- Key distinction:
- Files in
lib/picotorokko/,test/, gem configuration → You develop these - Files in
docs/github-actions/, templates → These are forprausers (not executed during gem development) - When
pracommands are incomplete, add to TODO.md — don't rush implementation unless explicitly required
- Files in
Directory Structure
.
├── lib/picotorokko/ # Gem implementation
├── test/ # Test suite
├── docs/github-actions/ # User-facing templates
├── storage/home/ # Example application code
├── patch/ # Repository patches
├── .cache/ # Cached repositories (git-ignored)
├── build/ # Build environments (git-ignored)
└── TODO.md # Task tracking
Rake Commands Permissions
✅ Always Allowed (Safe, Read-Only)
rake monitor # Watch UART output in real-time
rake check_env # Verify ESP32 and build environment
❓ Ask First (Time-Consuming)
rake build # Compile firmware (2-5 min)
rake cleanbuild # Clean + rebuild
rake flash # Upload to hardware (requires device)
🚫 Never Execute (Destructive)
rake init # Contains git reset --hard
rake update # Destructive git operations
rake buildall # Combines destructive ops
Rationale: Protect work-in-progress from accidental git reset --hard.
Git Safety Protocol
- ✅ Use
commitsubagent for all commits - ❌ Never:
git push,git push --force, rawgit commit - ❌ Never:
git reset --hard,git rebase -i - ✅ Safe:
git status,git log,git diff
Session Flow: Tidy First + TDD + RuboCop + TODO Management
Understanding TODO.md Structure (CRITICAL)
Important: TODO.md is NOT just a checklist — it's a workflow guide supporting t-wada style TDD.
Key concepts:
- Each TODO task = exactly one Micro-Cycle (1-5 minutes)
- Phase structure = Organized chunks of related tasks
- [TODO-INFRASTRUCTURE-*] markers = Cross-phase dependencies that MUST be resolved before proceeding
- Test-first architecture = Phase 0 (Test Infrastructure) comes BEFORE all feature work
When starting a phase:
- Read the phase description carefully
- Look for "⚠️ Check for [TODO-INFRASTRUCTURE-*]" warnings
- If any [TODO-INFRASTRUCTURE-*] markers exist from previous phases:
- STOP
- Review what they mean
- Resolve them in TDD cycles BEFORE proceeding
- Start first task in the phase
Example from picotorokko refactoring:
- Phase 0 discovers:
[TODO-INFRASTRUCTURE-DEVICE-COMMAND](Thor env name parsing) - Phase 2 proceeds normally
- Phase 5 has warning: "Check [TODO-INFRASTRUCTURE-DEVICE-COMMAND] before starting"
- Must resolve in Phase 5 TDD before moving to documentation
Micro-Cycle (1-5 minutes per iteration)
Goal: Complete one Red-Green-RuboCop-Refactor-Commit cycle per TODO task
1. RED: Write one failing test
bundle exec rake test → Verify failure ❌
2. GREEN: Write minimal code to pass test
bundle exec rake test → Verify pass ✅
bundle exec rubocop -A → Auto-fix violations
3. REFACTOR: Improve code quality
- Apply Tidy First principles (guard clauses, symmetry, clarity)
- Fix remaining RuboCop violations manually
- Understand WHY each violation exists
- bundle exec rubocop → Verify 0 violations
4. VERIFY & COMMIT: All quality gates must pass
bundle exec rake ci → Tests + RuboCop + Coverage ✅
Use `commit` subagent with clear, imperative message
5. UPDATE TODO.md
- Immediately mark task complete
- Record any [TODO-INFRASTRUCTURE-*] discoveries
- Move to next task
Quality Gates (ALL must pass before commit)
# Gate 1: Tests pass
bundle exec rake test
✅ Expected: All tests pass
# Gate 2: RuboCop: 0 violations
bundle exec rubocop
✅ Expected: "26 files inspected, 0 offenses"
# Gate 3: Coverage (CI mode)
bundle exec rake ci
✅ Expected: Line: ≥ 80%, Branch: ≥ 50%
Macro-Cycle (Phase completion)
1. Read TODO.md phase description
- Check for [TODO-INFRASTRUCTURE-*] warnings
- Understand task granularity (each = 1-5 min)
2. Check for unresolved [TODO-INFRASTRUCTURE-*] markers
- If found: Resolve in TDD cycles BEFORE proceeding
- If none: Proceed to first task
3. Repeat Micro-Cycle for each task in phase
- Each task is exactly one TDD cycle
- Commit after each cycle
- Update TODO.md immediately (remove completed tasks)
- Record any infrastructure issues with [TODO-INFRASTRUCTURE-*]
4. After phase completion
- Verify all [TODO-INFRASTRUCTURE-*] markers from this phase resolved
- Verify no hanging infrastructure markers
- If new [TODO-INFRASTRUCTURE-*] created: Mark which phase will handle it
5. User verifies
- Full test suite passes: `rake ci`
- Manual testing if needed
- Code review if applicable
Key Principles
Test-First Architecture (Phase 0 Priority)
- Phase 0: Test Infrastructure (HIGHEST PRIORITY, 3-4 days)
- Establishes solid test foundation BEFORE any feature work
- All [TODO-INFRASTRUCTURE-*] issues resolved early
- Unblocks downstream phases for clean TDD
[TODO-INFRASTRUCTURE-*] Marker Discipline
- 🚨 NEVER skip markers — STOP and resolve immediately
- 📌 Found in phase descriptions with specific context
- 📝 Record new ones during implementation
- ✅ Must be resolved before final verification
Tidy First (Kent Beck)
- Small refactoring steps (1-5 minutes each)
- Each step improves code understanding
- Changes compound into massive improvements without risk
- Example: Extract constant, rename variable, simplify guard clause
t-wada style TDD
- One test at a time
- Minimal code to pass (no gold-plating)
- Red-Green-Refactor cycle is fast
- Test is always green after Refactor phase
- Each TODO task = one complete cycle
RuboCop as Quality Gate
- ✅ Auto-fix violations automatically (
rubocop -A) - ✅ Understand and fix remaining violations manually
- 🚫 NEVER add
# rubocop:disablecomments - 🚫 NEVER commit with RuboCop violations
Absolutely Forbidden
- 🚫 Committing with RuboCop violations
- 🚫 Adding
# rubocop:disablecomments - 🚫 Writing fake/trivial tests
- 🚫 Lowering coverage thresholds
- 🚫 Large, multi-function changes per commit
- 🚫 Skipping [TODO-INFRASTRUCTURE-*] markers — MUST resolve before proceeding
- 🚫 Batching test problems for later — Record as [TODO-INFRASTRUCTURE-*] and resolve in TDD immediately
When to Ask User
MUST ask in these scenarios:
- Refactoring direction unclear (how to split method?)
- Test strategy controversial (what should we test?)
- Trade-off between simplicity and completeness
- RuboCop violation needs architectural decision
- [TODO-INFRASTRUCTURE-*] marker requires design decision
See .claude/docs/testing-guidelines.md for detailed examples.