- T1.1.1 - Create project directory structure (commands/, sources/, tests/)
- T1.1.2 - Set up requirements.txt with dependencies (requests, tabulate, python-dotenv, pytest, black, flake8, mypy)
- T1.1.3 - Create .env.example template for Airtable credentials
- T1.1.4 - Add .env to .gitignore for security
- T1.1.5 - Set up basic pytest configuration
Acceptance Criteria: Project structure matches design.md, dependencies installed, environment configured
- T1.2.1 - Create config.py module for environment variable handling
- T1.2.2 - Implement secure credential loading with python-dotenv
- T1.2.3 - Add validation for required environment variables
- T1.2.4 - Create configuration error handling
- T1.2.5 - Write tests for configuration module
Acceptance Criteria: Configuration module securely loads credentials and validates setup
- T1.3.1 - Implement parse() function for command line argument extraction
- T1.3.2 - Create route() function for command dispatching
- T1.3.3 - Add dispatch() function to invoke command handlers
- T1.3.4 - Implement help and error messages for invalid commands
- T1.3.5 - Add executable shebang and proper error handling
Acceptance Criteria: ./fac.py --help works, unknown commands show helpful errors, routing infrastructure complete
- T2.1.1 - Implement auth() function to create authentication headers
- T2.1.2 - Create request() function for HTTP API calls with timeout handling
- T2.1.3 - Implement get() function to fetch data from Airtable view URL
- T2.1.4 - Add proper error handling for network failures and API errors
- T2.1.5 - Write comprehensive tests with mocked HTTP responses
Acceptance Criteria: Airtable module successfully fetches data with proper error handling
- T2.2.1 - Implement format() function to prepare data for terminal display
- T2.2.2 - Create table() function using tabulate library for formatted output
- T2.2.3 - Add print() function for consistent terminal output
- T2.2.4 - Handle terminal width constraints and data truncation
- T2.2.5 - Write tests for formatting functions with various data types
Acceptance Criteria: Display module renders data in readable table format with proper error handling
- T2.3.1 - Implement fetch() function calling airtable.get() with configured URL
- T2.3.2 - Create process() function to transform raw data with custom headers
- T2.3.3 - Add display() function calling display.table() with processed data
- T2.3.4 - Implement run() function orchestrating fetch → process → display pipeline
- T2.3.5 - Write integration tests for complete command workflow
Acceptance Criteria: ./fac.py gr successfully fetches, processes, and displays Airtable data
- T3.1.1 - Write unit tests for all modules (fac.py, config.py, airtable.py, display.py, gr.py)
- T3.1.2 - Create integration tests for complete command workflows
- T3.1.3 - Add error scenario tests (network failures, invalid credentials, malformed data)
- T3.1.4 - Implement test fixtures and mocking for external API calls
- T3.1.5 - Set up test coverage reporting and achieve 90%+ coverage
Acceptance Criteria: All tests pass, coverage above 90%, error scenarios handled
- T3.2.1 - Run black formatter on all Python files
- T3.2.2 - Fix all flake8 linting issues
- T3.2.3 - Add type hints and pass mypy type checking
- T3.2.4 - Update README.md with usage instructions and setup guide
- T3.2.5 - Add inline documentation for all public functions
Acceptance Criteria: Code passes all quality checks, documentation is complete and accurate
- T3.3.1 - Implement clear, actionable error messages for all failure scenarios
- T3.3.2 - Add help command and usage information
- T3.3.3 - Test CLI with real Airtable data and various edge cases
- T3.3.4 - Validate terminal output formatting across different screen sizes
- T3.3.5 - Create setup documentation and troubleshooting guide
Acceptance Criteria: CLI provides excellent user experience with clear feedback and help
- T4.1.1 - Validate clean separation between routing, fetching, processing, display
- T4.1.2 - Test extensibility by planning a second command (e.g., student list)
- T4.1.3 - Refactor any tightly coupled components
- T4.1.4 - Document patterns for adding new commands and data sources
- T4.1.5 - Create command and data source templates for future development
Acceptance Criteria: Architecture supports easy extension, patterns documented for future commands
- T4.2.1 - Run security scan using Kiro hooks (.kiro/hooks/security-scanner.sh)
- T4.2.2 - Verify no credentials are committed to repository
- T4.2.3 - Test error handling for invalid/missing credentials
- T4.2.4 - Validate HTTPS-only communication with Airtable
- T4.2.5 - Document secure setup and credential management
Acceptance Criteria: Security requirements validated, credentials handled securely
- T4.3.1 - Test CLI response times under various network conditions
- T4.3.2 - Validate error handling for API rate limits and timeouts
- T4.3.3 - Test with large datasets (>100 records) from Airtable
- T4.3.4 - Optimize startup time and memory usage
- T4.3.5 - Document performance characteristics and limitations
Acceptance Criteria: CLI meets performance requirements (< 2 seconds) and handles errors gracefully
- T5.1.1 - End-to-end testing with real Airtable data and credentials
- T5.1.2 - Validate all acceptance criteria from requirements.md
- T5.1.3 - Test installation and setup process from scratch
- T5.1.4 - Verify all error scenarios provide helpful feedback
- T5.1.5 - Final code review and cleanup
Acceptance Criteria: FAC CLI fully functional with gateway recent command working end-to-end
- T5.2.1 - Complete README.md with setup, usage, and troubleshooting
- T5.2.2 - Document the process for adding new commands
- T5.2.3 - Create .env.example with clear instructions
- T5.2.4 - Write inline code documentation for maintainability
- T5.2.5 - Document Airtable API integration patterns
Acceptance Criteria: Complete documentation enables easy setup and extension
- T5.3.1 - Package CLI for easy installation and distribution
- T5.3.2 - Create commit with conventional commit message
- T5.3.3 - Prepare demo of
./fac.py grcommand functionality - T5.3.4 - Document architecture patterns for second command
- T5.3.5 - Plan next command implementation (student list, cohort data, etc.)
Acceptance Criteria: FAC CLI ready for use, foundation established for incremental expansion
- R1 - Test Airtable API integration early to validate assumptions
- R2 - Create mock data and responses for testing without API dependency
- R3 - Implement robust error handling for network and API failures
- R4 - Use environment variables from day one to prevent credential leaks
- R5 - Design modular architecture to minimize refactoring risk
-
./fac.py grexecutes successfully with real Airtable data - Test coverage above 90% for all modules
- All functional requirements from requirements.md validated
- Code passes black, flake8, and mypy quality checks
- Command responds within 2 seconds under normal conditions
- Gate 1: Project structure and configuration complete (Phase 1)
- Gate 2: Core modules implemented with tests (Phase 2)
- Gate 3: Full testing and quality assurance (Phase 3)
- Gate 4: Architecture validated for extensibility (Phase 4)
- Gate 5: Documentation complete and CLI ready for use (Phase 5)
- Adding a new command takes less than 30 minutes
- Adding a new data source requires minimal changes to existing code
- Architecture patterns are documented and reusable
- Functional programming principles maintained throughout
- Incremental Development: Focus on getting
./fac.py grworking completely before adding new commands - Functional Programming: Maintain terse, single-word function names and pure functions throughout
- Test-Driven Development: Write tests for each function as it's implemented
- Separation of Concerns: Keep routing, fetching, processing, and display clearly separated
- Configuration Security: Never commit .env files, always use environment variables for credentials
- Architecture First: Validate extensibility patterns early to ensure easy addition of future commands
- Start with Foundation (Phase 1): Get project structure and routing working
- Build Data Pipeline (Phase 2): Implement airtable → process → display flow
- Ensure Quality (Phase 3): Comprehensive testing and error handling
- Validate Architecture (Phase 4): Confirm extensibility for future commands
- Document & Deliver (Phase 5): Complete documentation and handover
The project is successful when:
./fac.py grfetches real Airtable data and displays it formatted in the terminal- The architecture clearly supports adding new commands in separate files
- Code follows functional programming principles with terse naming
- All error scenarios provide helpful feedback to users
- Documentation enables easy setup and extension
This roadmap is specifically designed for FAC CLI with incremental, extensible command development. All tasks should be traceable back to requirements in requirements.md.