Major automation enhancements for flexible AI provider configuration:
1. Add config/ai.yml - Centralized AI configuration
- Three command chains: default, fast, quality
- Multi-provider fallback (Claude → Codex → Gemini)
- Configurable per optimization level
- Sentinel token configuration
2. Extend automation/ai_config.py
- Add RunnerSettings with three chain support
- Add get_chain_for_hint() method
- Load and validate all three command chains
- Proper fallback to defaults
3. Update automation/runner.py
- Read model_hint from .ai-rules.yml
- Pass model_hint to generate_output()
- Support output_type hint overrides
4. Update automation/patcher.py
- Add model_hint parameter throughout pipeline
- Inject TASK COMPLEXITY hint into prompts
- ModelConfig.get_commands_for_hint() selects chain
- Fallback mechanism tries all commands in chain
5. Add design discussion stage to features.ai-rules.yml
- New design_gate_writer rule (model_hint: fast)
- New design_discussion_writer rule (model_hint: quality)
- Update feature_request to create design gate
- Update feature_discussion to create design gate
- Add design.discussion.md file associations
- Proper status transitions: READY_FOR_DESIGN → READY_FOR_IMPLEMENTATION
6. Add assets/templates/design.discussion.md
- Template for Stage 3 design discussions
- META header with tokens support
- Design goals and participation instructions
7. Update tools/setup_claude_agents.sh
- Agent descriptions reference TASK COMPLEXITY hint
- cdev-patch: "MUST BE USED when TASK COMPLEXITY is FAST"
- cdev-patch-quality: "MUST BE USED when TASK COMPLEXITY is QUALITY"
8. Fix assets/hooks/pre-commit
- Correct template path comment (process/templates not assets/templates)
9. Update tools/mock_ai.sh
- Log prompts to /tmp/mock_ai_prompts.log for debugging
Impact:
- Users can configure AI providers via config/ai.yml
- Automatic fallback between Claude, Codex, Gemini
- Fast models for simple tasks (vote counting, gate checks)
- Quality models for complex tasks (design, implementation planning)
- Reduced costs through intelligent model selection
- Design stage now properly integrated into workflow
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Changed approach from disabling outputs to properly handling AI's decision
not to generate changes (e.g., gated outputs, conditional rules).
Changes:
1. patcher.py - Allow empty diffs
- sanitize_unified_patch() returns empty string instead of raising error
- generate_output() returns early for empty patches (silent skip)
- Common case: implementation_gate_writer when status != READY_FOR_IMPLEMENTATION
- AI can now return explanatory text without a diff (no error)
2. features.ai-rules.yml - Override README rule
- Add README.md → "readme_skip" association
- Creates empty rule to disable README updates in Docs/features/
- Prevents unnecessary AI calls during feature discussions
- README automation still works in root directory
3. root.ai-rules.yml - Restore default README rule
- Removed "enabled: false" flag (back to default enabled)
- Features directory overrides this with empty rule
Benefits:
- implementation_gate now calls AI but AI returns empty diff (as designed)
- No more "[runner] error generating ...implementation.discussion.md"
- No more "[runner] error generating README.md"
- Clean separation: AI decides vs. config disables
- Instructions to AI are still executed, AI just chooses no changes
Testing:
Setup completes cleanly with no [runner] errors. The automation
runs and AI correctly returns no diff for implementation file
when status is OPEN.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Disabled two outputs that were causing errors during first commit:
1. implementation_gate (features.ai-rules.yml)
- Was trying to generate implementation.discussion.md on every request.md commit
- Should only run when feature status = READY_FOR_IMPLEMENTATION
- Error: "Sanitized patch missing diff header"
- Fix: Set enabled: false by default
- Users can enable in project .ai-rules.yml when needed
2. readme normalizer (root.ai-rules.yml)
- Was trying to update README.md whenever policies.yml was staged
- Caused errors during initial commit
- Error: "Sanitized patch missing diff header"
- Fix: Set enabled: false by default
- Users can enable when they want AI to maintain README
Benefits:
- Clean setup with no [runner] errors
- Faster first commit (fewer AI calls)
- Users can enable features incrementally as needed
- Only essential automation runs by default (feature discussions)
Remaining warnings are expected:
- [agents] warnings: Claude CLI permission prompts (normal behavior)
- [summary] warnings: Template markers not found (handled gracefully)
Testing:
Setup now completes cleanly with only feature.discussion.md generated.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Fix missing space after colon in features.ai-rules.yml
- Add tools/mock_ai.sh for testing automation without real AI
- Ensures installer has valid YAML templates
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>