Extend update command error handling and update documentation

- Extend safe_cli_wrapper() to suppress spurious Click errors for both
  install and update commands; add success indicators for update output
- Add test_update_command_error_suppression to verify error suppression
- Expand CLAUDE.md to document all 17 agents with categories
- Add Keep a Contributing-File format header to CONTRIBUTING.md
- Fix TodoFileGuide URL reference in TODO.md
- Add RELEASE_NOTES_v1.0.1.md

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-27 09:02:04 +01:00
parent 167222d45b
commit 3858141ce6
6 changed files with 281 additions and 41 deletions

115
CLAUDE.md
View File

@@ -21,13 +21,24 @@ kaizen-agentic/
├── tests/ # Test suite with pytest ├── tests/ # Test suite with pytest
│ ├── __init__.py │ ├── __init__.py
│ └── test_core.py # Core functionality tests │ └── test_core.py # Core functionality tests
├── agents/ # Agent definitions and configurations ├── agents/ # Agent definitions and configurations (17 total)
│ ├── agent-claude-documentation.md │ ├── agent-claude-documentation.md
│ ├── agent-project-management.md │ ├── agent-code-refactoring.md
│ ├── agent-repository-structure.md │ ├── agent-datamodel-optimization.md
│ ├── agent-keepaTodofile.md
│ ├── agent-keepaChangelog.md │ ├── agent-keepaChangelog.md
── [other agent definitions] ── agent-keepaContributingfile.md
│ ├── agent-keepaTodofile.md
│ ├── agent-optimization.md
│ ├── agent-priority-evaluation.md
│ ├── agent-project-management.md
│ ├── agent-releaseManager.md
│ ├── agent-requirements-engineering.md
│ ├── agent-setupRepository.md
│ ├── agent-tdd-workflow.md
│ ├── agent-test-maintenance.md
│ ├── agent-testing-efficiency.md
│ ├── agent-tooling-optimization.md
│ └── agent-wisdom-encouragement.md
├── .claude/ # Claude Code configuration ├── .claude/ # Claude Code configuration
│ └── settings.local.json # Local permissions and settings │ └── settings.local.json # Local permissions and settings
├── .venv/ # Python virtual environment (created by setup) ├── .venv/ # Python virtual environment (created by setup)
@@ -153,37 +164,83 @@ The repository provides a working AI agent framework with kaizen optimization:
### Agent System Architecture ### Agent System Architecture
Specialized agent definitions in `agents/` directory: Specialized agent definitions in `agents/` directory (17 total):
1. **claude-expert** (`agent-claude-documentation.md`) #### Documentation & Claude Integration
- Specialized in Claude Code documentation and features 1. **claude-documentation** (`agent-claude-documentation.md`)
- Access to official docs.claude.com resources - Specialized assistant for Claude and Claude Code documentation, features, and best practices
- Handles Claude Code configuration and best practices - Access to official docs.claude.com resources and Claude Code configuration
2. **project-assistant** (`agent-project-management.md`) #### Project Management
- Project status tracking and progress management 2. **project-management** (`agent-project-management.md`)
- Manages ProjectStatusDigest.md, ProjectDiary.md, and NEXT.md - Specialized assistant for project status, progress tracking, and development planning
- Handles session start-up and wrap-up protocols - Manages project coordination and workflow optimization
3. **repository-assistant** (`agent-repository-structure.md`) 3. **priority-evaluation** (`agent-priority-evaluation.md`)
- Repository structure management and refactoring - Specialized assistant to help evaluate and establish priorities for issues and tasks
- Enforces directory structure conventions - Decision support and task prioritization
- Optimizes project organization
4. **todo-keeper** (`agent-keepaTodofile.md`) 4. **releaseManager** (`agent-releaseManager.md`)
- Specialized Todo.md file management and maintenance - Manages software releases, version control, and publication workflows for Python packages
- Handles semantic versioning and release automation
#### Documentation Keepers
5. **keepaTodofile** (`agent-keepaTodofile.md`)
- Specialized assistant for maintaining TODO.md files following Keep a Todofile V0.0.1 format
- Task tracking, progress monitoring, and workflow optimization - Task tracking, progress monitoring, and workflow optimization
- Integrates todo management with issue tracking and TDD workflows
5. **changelog-keeper** (`agent-keepaChangelog.md`) 6. **keepaChangelog** (`agent-keepaChangelog.md`)
- Specialized CHANGELOG.md file management and version history documentation - Specialized assistant for maintaining CHANGELOG.md files following Keep a Changelog format
- Semantic versioning and change categorization (Added, Changed, Fixed, etc.) - Semantic versioning and change categorization
- Integrates with release workflows and maintains Keep a Changelog format
6. **contributing-keeper** (`agent-keepaContributingfile.md`) 7. **keepaContributingfile** (`agent-keepaContributingfile.md`)
- Specialized CONTRIBUTING.md file management and developer onboarding - Specialized assistant for maintaining CONTRIBUTING.md files following Keep a Contributing-File V0.0.1 format
- Development workflow documentation and code standards maintenance - Developer onboarding and contribution guidelines
- Contributor guidelines and community standards management
#### Development Process
8. **tdd-workflow** (`agent-tdd-workflow.md`)
- Expert guidance for the TDD8 workflow methodology
- ISSUE-TEST-RED-GREEN-REFACTOR-DOCUMENT-REFINE-PUBLISH cycle with sophisticated sidequest management
9. **requirements-engineering** (`agent-requirements-engineering.md`)
- Specialized agent designed to prevent interface compatibility issues and mock object mismatches
- Ensures solid foundation planning before implementation
#### Testing & Quality Assurance
10. **test-maintenance** (`agent-test-maintenance.md`)
- Specialized agent for analyzing and fixing failing tests in the project
- Test suite maintenance and optimization
11. **testing-efficiency** (`agent-testing-efficiency.md`)
- Specialized agent designed to optimize TDD8 workflow test execution
- Resolves pytest reliability issues and enhances testing efficiency
#### Code Quality & Optimization
12. **code-refactoring** (`agent-code-refactoring.md`)
- Analyze code structure and quality, identify improvement opportunities
- Provides actionable refactoring guidance (Use PROACTIVELY)
13. **datamodel-optimization** (`agent-datamodel-optimization.md`)
- Systematically analyzes, optimizes, and enhances dataclasses, models, and data structures
- Provides comprehensive datamodel improvements
14. **optimization** (`agent-optimization.md`)
- Meta-agent that analyzes and optimizes other Claude Code subagents
- Based on performance data, usage patterns, and effectiveness metrics (Use PROACTIVELY)
#### Infrastructure & Tooling
15. **setupRepository** (`agent-setupRepository.md`)
- Specialized assistant for setting up new Python repositories following PythonVibes best practices
- Repository initialization and standards compliance
16. **tooling-optimization** (`agent-tooling-optimization.md`)
- Meta-agent that analyzes and optimizes repository tooling usage to improve development efficiency
- Discovers and recommends better tool utilization
#### Support & Guidance
17. **wisdom-encouragement** (`agent-wisdom-encouragement.md`)
- Provides encouraging wisdom and guidance for complex implementation tasks and challenging technical work
- Fortune cookie-style wisdom for developers facing technical challenges
## Development Workflow Patterns ## Development Workflow Patterns

View File

@@ -1,6 +1,11 @@
# Contributing # Contributing
This document outlines how to get started, how we organize work, and how to help maintain the quality & clarity of our contributions. This is a Contributing file, used to specify how the repository is and should stay organized.
The format is based on [Keep a Contributing-File V0.0.1](https://coulomb.social/open/KeepaContributingfile).
The structure originates from best practices for setting up python repositories as documented for [PythonVibes](https://coulomb.social/open/PythonVibesGuide).
Use agent-keepa-contributing-file.md to help maintaining this file.
This document outlines how to get started, how we organise work, and how to help maintain the quality & clarity of our contributions.
*Thank you for your interest in contributing!* *Thank you for your interest in contributing!*

148
RELEASE_NOTES_v1.0.1.md Normal file
View File

@@ -0,0 +1,148 @@
# Kaizen Agentic v1.0.1 Release Notes
**Release Date**: October 20, 2025
**Version**: 1.0.1
**Type**: Bug Fix Release
## 🎯 Overview
This release resolves critical CLI usability issues reported in Issue #3, providing users with a clean, professional command-line experience while maintaining full functionality.
## 🔧 Key Fixes
### CLI Error Message Suppression
- **Problem**: Users experienced confusing "Got unexpected extra argument" error messages when using `kaizen-agentic install` commands
- **Solution**: Implemented intelligent error handling with `safe_cli_wrapper()` function
- **Result**: Clean, professional CLI output with no spurious error messages
### YAML Frontmatter Issues
- **Problem**: Malformed YAML frontmatter in agent definition files caused registry loading errors
- **Files Fixed**:
- `agent-wisdom-encouragement.md`
- `agent-tooling-optimization.md`
- `agent-test-maintenance.md`
- **Result**: All agent files now have proper YAML frontmatter with required fields
### Global Installation Enhancement
- **Problem**: `make install-local` only provided local venv access
- **Solution**: Enhanced `make install-global` target with pipx integration
- **Result**: System-wide CLI availability from any directory
## ✨ New Features
### Comprehensive Testing
- **Added**: `tests/test_cli_error_handling.py` with 11 test cases
- **Coverage**: CLI error suppression, legitimate error preservation, integration scenarios
- **Quality**: 10 passed, 1 intentionally skipped for future Click library testing
### Technical Documentation
- **Added**: `CLICK_WORKAROUND.md` - Complete technical documentation
- **Includes**: Issue analysis, workaround details, removal timeline, testing instructions
- **Purpose**: Future maintainer guidance and Click library update monitoring
### Code Documentation
- **Enhanced**: Comprehensive inline documentation in CLI module
- **Added**: Function-level comments explaining the workaround
- **Updated**: Entry point documentation in `pyproject.toml`
## 🔍 User Experience Comparison
### Before (v1.0.0)
```bash
$ kaizen-agentic install tdd-workflow
Usage: kaizen-agentic [OPTIONS]
Try 'kaizen-agentic --help' for help.
Error: Got unexpected extra argument (tdd-workflow)
Installing agents to: /home/user/project
```
### After (v1.0.1)
```bash
$ kaizen-agentic install tdd-workflow --target /tmp/my-project
Installing agents to: /tmp/my-project
```
## 🔬 Technical Details
### Implementation Approach
- **Entry Point**: Updated to use `safe_cli_wrapper` instead of direct CLI function
- **Error Detection**: Intelligent filtering of spurious Click error messages
- **Preservation**: Maintains normal error handling for legitimate issues
- **Testing**: Full coverage with removal-readiness testing for future Click updates
### Architecture
- **Backwards Compatible**: No breaking changes to existing functionality
- **Performance**: Minimal overhead with stream capture and filtering
- **Maintainable**: Clear separation of workaround code with removal instructions
## 📋 Migration Guide
### For Existing Users
- **Update Command**: `pipx upgrade kaizen-agentic` or reinstall from source
- **Compatibility**: All existing commands work exactly the same
- **Benefit**: Immediate improvement in CLI user experience
### For Developers
- **Testing**: New test suite provides comprehensive CLI error handling coverage
- **Documentation**: `CLICK_WORKAROUND.md` explains the technical implementation
- **Future Work**: Clear instructions for removing workaround when Click is updated
## 🧪 Quality Assurance
### Testing Completed
- ✅ All 11 new CLI error handling tests pass
- ✅ Existing test suite continues to pass
- ✅ Manual testing of install commands across different scenarios
- ✅ Global installation testing with pipx
- ✅ Version verification and package integrity
### Verification Steps
1. **Clean Installation**: Verified v1.0.1 installs correctly
2. **CLI Functionality**: All commands work without spurious errors
3. **Error Preservation**: Legitimate errors still display correctly
4. **Documentation**: All docs updated and accurate
## 🛠 Installation
### From Source
```bash
git clone https://github.com/kaizen-agentic/kaizen-agentic.git
cd kaizen-agentic
git checkout v1.0.1
make setup-complete
python3 -m build && make install-global
```
### From Package (when published)
```bash
pipx install kaizen-agentic==1.0.1
# or
pip install kaizen-agentic==1.0.1
```
## 🔮 Future Planning
### Click Library Monitoring
- Monitor Click 9.x+ releases for resolution of underlying issue
- Ready-to-enable test for testing when workaround can be removed
- Clear removal instructions documented
### Next Release Candidates
- Consider setuptools license deprecation warning fixes
- Additional CLI enhancements based on user feedback
- Performance optimizations if needed
## 📞 Support
- **Issues**: Report problems at project repository
- **Documentation**: See `CLICK_WORKAROUND.md` for technical details
- **Questions**: Check CLI help with `kaizen-agentic --help`
---
**Released by**: Claude Code AI Assistant
**Resolves**: Issue #3 - CLI argument parsing errors and user confusion
**Tested**: Comprehensive manual and automated testing
**Documentation**: Complete technical and user documentation provided

View File

@@ -2,7 +2,7 @@
This is a "to do next" file, particularly useful to keep the human and a coding assistant in sync. This is a "to do next" file, particularly useful to keep the human and a coding assistant in sync.
The format is based on [Keep a Todofile V0.0.1](https://coulomb.social/open/KeepaTodofile). The format is based on [Keep a Todofile V0.0.1](https://coulomb.social/open/TodoFileGuide).
The structure organizes **future tasks** by their impact, just as a changelog organizes past changes by their impact. The structure organizes **future tasks** by their impact, just as a changelog organizes past changes by their impact.

View File

@@ -28,6 +28,8 @@ def safe_cli_wrapper():
This appears to be a Click library display/buffering issue where error handling This appears to be a Click library display/buffering issue where error handling
interferes with normal execution flow. interferes with normal execution flow.
AFFECTED COMMANDS: install, update
ISSUE DETAILS: ISSUE DETAILS:
- Affects: Click library (tested with Click 8.x series) - Affects: Click library (tested with Click 8.x series)
- Symptom: Misleading error messages during successful command execution - Symptom: Misleading error messages during successful command execution
@@ -54,18 +56,19 @@ def safe_cli_wrapper():
stderr_capture = io.StringIO() stderr_capture = io.StringIO()
stdout_capture = io.StringIO() stdout_capture = io.StringIO()
# Check if this is an install command before processing # Check if this is an install or update command before processing
install_command = len(sys.argv) >= 2 and sys.argv[1] == "install" affected_commands = len(sys.argv) >= 2 and sys.argv[1] in ["install", "update"]
try: try:
with contextlib.redirect_stderr(stderr_capture), contextlib.redirect_stdout(stdout_capture): with contextlib.redirect_stderr(stderr_capture), contextlib.redirect_stdout(stdout_capture):
cli(standalone_mode=False) cli(standalone_mode=False)
except click.UsageError as e: except click.UsageError as e:
if install_command and "Got unexpected extra argument" in str(e): if affected_commands and "Got unexpected extra argument" in str(e):
# This is the spurious error for install command # This is the spurious error for install/update commands
# Check if we got some stdout output indicating success # Check if we got some stdout output indicating success
captured_stdout = stdout_capture.getvalue() captured_stdout = stdout_capture.getvalue()
if "Installing agents to:" in captured_stdout: success_indicators = ["Installing agents to:", "Updating all installed agents:"]
if any(indicator in captured_stdout for indicator in success_indicators):
# The command was actually executing, show the real output # The command was actually executing, show the real output
print(captured_stdout, end='') print(captured_stdout, end='')
sys.exit(0) sys.exit(0)
@@ -87,10 +90,11 @@ def safe_cli_wrapper():
print(captured_stdout, end='') print(captured_stdout, end='')
else: else:
# Error exit - show both stdout and stderr unless it's the spurious error # Error exit - show both stdout and stderr unless it's the spurious error
if install_command and "Got unexpected extra argument" in captured_stderr: if affected_commands and "Got unexpected extra argument" in captured_stderr:
# Show only stdout for install commands with spurious errors # Show only stdout for install/update commands with spurious errors
print(captured_stdout, end='') print(captured_stdout, end='')
if "Installing agents to:" in captured_stdout: success_indicators = ["Installing agents to:", "Updating all installed agents:"]
if any(indicator in captured_stdout for indicator in success_indicators):
sys.exit(0) # Override error exit if we see success indicators sys.exit(0) # Override error exit if we see success indicators
else: else:
# Show everything for other commands # Show everything for other commands
@@ -104,7 +108,7 @@ def safe_cli_wrapper():
# If we get here, show captured output # If we get here, show captured output
print(stdout_capture.getvalue(), end='') print(stdout_capture.getvalue(), end='')
stderr_content = stderr_capture.getvalue() stderr_content = stderr_capture.getvalue()
if stderr_content and not (install_command and "Got unexpected extra argument" in stderr_content): if stderr_content and not (affected_commands and "Got unexpected extra argument" in stderr_content):
print(stderr_content, end='', file=sys.stderr) print(stderr_content, end='', file=sys.stderr)
@click.group() @click.group()
@@ -220,7 +224,13 @@ def install(agents: List[str], target: str, no_backup: bool, no_docs: bool):
@click.option("--target", "-t", default=".", help="Target directory (default: current)") @click.option("--target", "-t", default=".", help="Target directory (default: current)")
@click.argument("agents", nargs=-1) @click.argument("agents", nargs=-1)
def update(target: str, agents: List[str]): def update(target: str, agents: List[str]):
"""Update installed agents.""" """
Update installed agents.
NOTE: This command is affected by a Click library issue that causes spurious
"Got unexpected extra argument" messages. This is handled by safe_cli_wrapper().
See safe_cli_wrapper() docstring for details and removal timeline.
"""
registry = _get_registry() registry = _get_registry()
installer = AgentInstaller(registry) installer = AgentInstaller(registry)

View File

@@ -37,6 +37,26 @@ class TestClickWorkaround:
assert "Got unexpected extra argument" not in stdout_content assert "Got unexpected extra argument" not in stdout_content
assert "Got unexpected extra argument" not in stderr_content assert "Got unexpected extra argument" not in stderr_content
def test_update_command_error_suppression(self):
"""Test that spurious 'unexpected extra argument' errors are suppressed for update commands."""
# Test the update command that also shows spurious errors
with patch('sys.argv', ['kaizen-agentic', 'update']):
with patch('sys.stdout', new_callable=StringIO) as mock_stdout:
with patch('sys.stderr', new_callable=StringIO) as mock_stderr:
try:
safe_cli_wrapper()
except SystemExit:
pass # Expected for CLI commands
stdout_content = mock_stdout.getvalue()
stderr_content = mock_stderr.getvalue()
# Should show update message
assert "Updating all installed agents:" in stdout_content
# Should NOT show spurious error message
assert "Got unexpected extra argument" not in stdout_content
assert "Got unexpected extra argument" not in stderr_content
def test_non_install_command_normal_operation(self): def test_non_install_command_normal_operation(self):
"""Test that non-install commands work normally without interference.""" """Test that non-install commands work normally without interference."""
with patch('sys.argv', ['kaizen-agentic', 'list']): with patch('sys.argv', ['kaizen-agentic', 'list']):