375 lines
17 KiB
Markdown
375 lines
17 KiB
Markdown
# Project Workflow
|
|
|
|
## Guiding Principles
|
|
|
|
1. **The Plan is the Source of Truth:** All work must be tracked in `plan.md`
|
|
2. **The Tech Stack is Deliberate:** Changes to the tech stack must be documented in `tech-stack.md` *before* implementation
|
|
3. **Test-Driven Development:** Write unit tests before implementing functionality
|
|
4. **High Code Coverage:** Aim for >80% code coverage for all modules
|
|
5. **User Experience First:** Every decision should prioritize user experience
|
|
6. **Non-Interactive & CI-Aware:** Prefer non-interactive commands. Use `CI=true` for watch-mode tools (tests, linters) to ensure single execution.
|
|
|
|
## Task Workflow
|
|
|
|
All tasks follow a strict lifecycle:
|
|
|
|
### Standard Task Workflow
|
|
|
|
1. **Select Task:** Choose the next available task from `plan.md` in sequential order
|
|
|
|
2. **Mark In Progress:** Before beginning work, edit `plan.md` and change the task from `[ ]` to `[~]`
|
|
|
|
3. **Write Failing Tests (Red Phase):**
|
|
- Create a new test file for the feature or bug fix.
|
|
- Write one or more unit tests that clearly define the expected behavior and acceptance criteria for the task.
|
|
- **CRITICAL:** Run the tests and confirm that they fail as expected. This is the "Red" phase of TDD. Do not proceed until you have failing tests.
|
|
|
|
4. **Implement to Pass Tests (Green Phase):**
|
|
- Write the minimum amount of application code necessary to make the failing tests pass.
|
|
- Run the test suite again and confirm that all tests now pass. This is the "Green" phase.
|
|
|
|
5. **Refactor (Optional but Recommended):**
|
|
- With the safety of passing tests, refactor the implementation code and the test code to improve clarity, remove duplication, and enhance performance without changing the external behavior.
|
|
- Rerun tests to ensure they still pass after refactoring.
|
|
|
|
6. **Verify Coverage:** Run coverage reports using the project's chosen tools. For example, in a Python project, this might look like:
|
|
```powershell
|
|
pytest --cov=app --cov-report=html
|
|
```
|
|
Target: >80% coverage for new code. The specific tools and commands will vary by language and framework.
|
|
|
|
7. **Document Deviations:** If implementation differs from tech stack:
|
|
- **STOP** implementation
|
|
- Update `tech-stack.md` with new design
|
|
- Add dated note explaining the change
|
|
- Resume implementation
|
|
|
|
8. **Commit Code Changes:**
|
|
- Stage all code changes related to the task.
|
|
- Propose a clear, concise commit message e.g, `feat(ui): Create basic HTML structure for calculator`.
|
|
- Perform the commit.
|
|
|
|
9. **Attach Task Summary with Git Notes:**
|
|
- **Step 9.1: Get Commit Hash:** Obtain the hash of the *just-completed commit* (`git log -1 --format="%H"`).
|
|
- **Step 9.2: Draft Note Content:** Create a detailed summary for the completed task. This should include the task name, a summary of changes, a list of all created/modified files, and the core "why" for the change.
|
|
- **Step 9.3: Attach Note:** Use the `git notes` command to attach the summary to the commit.
|
|
```powershell
|
|
# The note content from the previous step is passed via the -m flag.
|
|
git notes add -m "<note content>" <commit_hash>
|
|
```
|
|
|
|
10. **Get and Record Task Commit SHA:**
|
|
- **Step 10.1: Update Plan:** Read `plan.md`, find the line for the completed task, update its status from `[~]` to `[x]`, and append the first 7 characters of the *just-completed commit's* commit hash.
|
|
- **Step 10.2: Write Plan:** Write the updated content back to `plan.md`.
|
|
|
|
11. **Commit Plan Update:**
|
|
- **Action:** Stage the modified `plan.md` file.
|
|
- **Action:** Commit this change with a descriptive message (e.g., `conductor(plan): Mark task 'Create user model' as complete`).
|
|
|
|
### Phase Completion Verification and Checkpointing Protocol
|
|
|
|
**Trigger:** This protocol is executed immediately after a task is completed that also concludes a phase in `plan.md`.
|
|
|
|
1. **Announce Protocol Start:** Inform the user that the phase is complete and the verification and checkpointing protocol has begun.
|
|
|
|
2. **Ensure Test Coverage for Phase Changes:**
|
|
- **Step 2.1: Determine Phase Scope:** To identify the files changed in this phase, you must first find the starting point. Read `plan.md` to find the Git commit SHA of the *previous* phase's checkpoint. If no previous checkpoint exists, the scope is all changes since the first commit.
|
|
- **Step 2.2: List Changed Files:** Execute `git diff --name-only <previous_checkpoint_sha> HEAD` to get a precise list of all files modified during this phase.
|
|
- **Step 2.3: Verify and Create Tests:** For each file in the list:
|
|
- **CRITICAL:** First, check its extension. Exclude non-code files (e.g., `.json`, `.md`, `.yaml`).
|
|
- For each remaining code file, verify a corresponding test file exists.
|
|
- If a test file is missing, you **must** create one. Before writing the test, **first, analyze other test files in the repository to determine the correct naming convention and testing style.** The new tests **must** validate the functionality described in this phase's tasks (`plan.md`).
|
|
|
|
3. **Execute Automated Tests with Proactive Debugging:**
|
|
- Before execution, you **must** announce the exact shell command you will use to run the tests.
|
|
- **Example Announcement:** "I will now run the automated test suite to verify the phase. **Command:** `CI=true npm test`"
|
|
- Execute the announced command.
|
|
- If tests fail, you **must** inform the user and begin debugging. You may attempt to propose a fix a **maximum of two times**. If the tests still fail after your second proposed fix, you **must stop**, report the persistent failure, and ask the user for guidance.
|
|
|
|
4. **Execute Automated API Hook Verification:**
|
|
- **CRITICAL:** The Conductor agent will now automatically execute verification tasks using the application's API hooks.
|
|
- The agent will announce the start of the automated verification to the user.
|
|
- It will then communicate with the application's IPC server to trigger the necessary verification functions.
|
|
- **Result Handling:**
|
|
- All results (successes and failures) from the API hook invocations will be logged.
|
|
- If all automated verifications pass, the agent will inform the user and proceed to the next step (Create Checkpoint Commit).
|
|
- If any automated verification fails, the agent will halt the workflow, present the detailed failure logs to the user, and await further instructions for debugging or remediation.
|
|
|
|
5. **Present Automated Verification Results and User Confirmation:**
|
|
- After executing automated verification, the Conductor agent will present the results to the user.
|
|
- If verification passed, the agent will state: "Automated verification completed successfully."
|
|
- If verification failed, the agent will state: "Automated verification failed. Please review the logs above for details. You may attempt to propose a fix a **maximum of two times**. If the tests still fail after your second proposed fix, you **must stop**, report the persistent failure, and ask the user for guidance."
|
|
- **PAUSE** and await the user's response. Do not proceed without an explicit yes or confirmation from the user to proceed if tests pass, or guidance if tests fail.
|
|
|
|
6. **Create Checkpoint Commit:**
|
|
- Stage all changes. If no changes occurred in this step, proceed with an empty commit.
|
|
- Perform the commit with a clear and concise message (e.g., `conductor(checkpoint): Checkpoint end of Phase X`).
|
|
|
|
7. **Attach Auditable Verification Report using Git Notes:**
|
|
- **Step 7.1: Draft Note Content:** Create a detailed verification report including the automated test command, the manual verification steps, and the user's confirmation.
|
|
- **Step 7.2: Attach Note:** Use the `git notes` command and the full commit hash from the previous step to attach the full report to the checkpoint commit.
|
|
|
|
8. **Get and Record Phase Checkpoint SHA:**
|
|
- **Step 8.1: Get Commit Hash:** Obtain the hash of the *just-created checkpoint commit* (`git log -1 --format="%H"`).
|
|
- **Step 8.2: Update Plan:** Read `plan.md`, find the heading for the completed phase, and append the first 7 characters of the commit hash in the format `[checkpoint: <sha>]`.
|
|
- **Step 8.3: Write Plan:** Write the updated content back to `plan.md`.
|
|
|
|
9. **Commit Plan Update:**
|
|
- **Action:** Stage the modified `plan.md` file.
|
|
- **Action:** Commit this change with a descriptive message following the format `conductor(plan): Mark phase '<PHASE NAME>' as complete`.
|
|
|
|
10. **Announce Completion:** Inform the user that the phase is complete and the checkpoint has been created, with the detailed verification report attached as a git note.
|
|
|
|
### Verification via API Hooks
|
|
|
|
For features involving the GUI or complex internal state, unit tests are often insufficient. You MUST use the application's built-in API hooks for empirical verification:
|
|
|
|
1. **Launch the App with Hooks:** Run the application in a separate shell with the `--enable-test-hooks` flag:
|
|
```powershell
|
|
uv run python gui.py --enable-test-hooks
|
|
```
|
|
This starts the hook server on port `8999`.
|
|
|
|
2. **Use the pytest `live_gui` Fixture:** For automated tests, use the session-scoped `live_gui` fixture defined in `tests/conftest.py`. This fixture handles the lifecycle (startup/shutdown) of the application with hooks enabled.
|
|
```python
|
|
def test_my_feature(live_gui):
|
|
# The GUI is now running on port 8999
|
|
...
|
|
```
|
|
Note: pytest must be run with `uv`.
|
|
|
|
3. **Verify via ApiHookClient:** Use the `ApiHookClient` in `api_hook_client.py` to interact with the running application. It includes robust retry logic and health checks.
|
|
|
|
4. **Verify via REST Commands:** Use PowerShell or `curl` to send commands to the application and verify the response. For example, to check health:
|
|
```powershell
|
|
Invoke-RestMethod -Uri "http://127.0.0.1:8999/status" -Method Get
|
|
```
|
|
|
|
### Quality Gates
|
|
|
|
Before marking any task complete, verify:
|
|
|
|
- [ ] All tests pass
|
|
- [ ] Code coverage meets requirements (>80%)
|
|
- [ ] Code follows project's code style guidelines (as defined in `code_styleguides/`)
|
|
- [ ] All public functions/methods are documented (e.g., docstrings, JSDoc, GoDoc)
|
|
- [ ] Type safety is enforced (e.g., type hints, TypeScript types, Go types)
|
|
- [ ] No linting or static analysis errors (using the project's configured tools)
|
|
- [ ] Works correctly on mobile (if applicable)
|
|
- [ ] Documentation updated if needed
|
|
- [ ] No security vulnerabilities introduced
|
|
|
|
## Development Commands
|
|
|
|
**AI AGENT INSTRUCTION: This section should be adapted to the project's specific language, framework, and build tools.**
|
|
|
|
### Setup
|
|
|
|
```powershell
|
|
# Example: Commands to set up the development environment (e.g., install dependencies, configure database)
|
|
# e.g., for a Node.js project: npm install
|
|
# e.g., for a Go project: go mod tidy
|
|
```
|
|
|
|
### Daily Development
|
|
|
|
```powershell
|
|
# Example: Commands for common daily tasks (e.g., start dev server, run tests, lint, format)
|
|
# e.g., for a Node.js project: npm run dev, npm test, npm run lint
|
|
# e.g., for a Go project: go run main.go, go test ./..., go fmt ./...
|
|
```
|
|
|
|
### Before Committing
|
|
|
|
```powershell
|
|
# Example: Commands to run all pre-commit checks (e.g., format, lint, type check, run tests)
|
|
# e.g., for a Node.js project: npm run check
|
|
# e.g., for a Go project: make check (if a Makefile exists)
|
|
```
|
|
|
|
## Testing Requirements
|
|
|
|
### Unit Testing
|
|
|
|
- Every module must have corresponding tests.
|
|
- Use appropriate test setup/teardown mechanisms (e.g., fixtures, beforeEach/afterEach).
|
|
- Mock external dependencies.
|
|
- Test both success and failure cases.
|
|
|
|
### Integration Testing
|
|
|
|
- Test complete user flows
|
|
- Verify database transactions
|
|
- Test authentication and authorization
|
|
- Check form submissions
|
|
|
|
### Mobile Testing
|
|
|
|
- Test on actual iPhone when possible
|
|
- Use Safari developer tools
|
|
- Test touch interactions
|
|
- Verify responsive layouts
|
|
- Check performance on 3G/4G
|
|
|
|
## Code Review Process
|
|
|
|
### Self-Review Checklist
|
|
|
|
Before requesting review:
|
|
|
|
1. **Functionality**
|
|
- Feature works as specified
|
|
- Edge cases handled
|
|
- Error messages are user-friendly
|
|
|
|
2. **Code Quality**
|
|
- Follows style guide
|
|
- DRY principle applied
|
|
- Clear variable/function names
|
|
- Appropriate comments
|
|
|
|
3. **Testing**
|
|
- Unit tests comprehensive
|
|
- Integration tests pass
|
|
- Coverage adequate (>80%)
|
|
|
|
4. **Security**
|
|
- No hardcoded secrets
|
|
- Input validation present
|
|
- SQL injection prevented
|
|
- XSS protection in place
|
|
|
|
5. **Performance**
|
|
- Database queries optimized
|
|
- Images optimized
|
|
- Caching implemented where needed
|
|
|
|
6. **Mobile Experience**
|
|
- Touch targets adequate (44x44px)
|
|
- Text readable without zooming
|
|
- Performance acceptable on mobile
|
|
- Interactions feel native
|
|
|
|
## Commit Guidelines
|
|
|
|
### Message Format
|
|
|
|
```
|
|
<type>(<scope>): <description>
|
|
|
|
[optional body]
|
|
|
|
[optional footer]
|
|
```
|
|
|
|
### Types
|
|
|
|
- `feat`: New feature
|
|
- `fix`: Bug fix
|
|
- `docs`: Documentation only
|
|
- `style`: Formatting, missing semicolons, etc.
|
|
- `refactor`: Code change that neither fixes a bug nor adds a feature
|
|
- `test`: Adding missing tests
|
|
- `chore`: Maintenance tasks
|
|
|
|
### Examples
|
|
|
|
```powershell
|
|
git commit -m "feat(auth): Add remember me functionality"
|
|
git commit -m "fix(posts): Correct excerpt generation for short posts"
|
|
git commit -m "test(comments): Add tests for emoji reaction limits"
|
|
git commit -m "style(mobile): Improve button touch targets"
|
|
```
|
|
|
|
## Definition of Done
|
|
|
|
A task is complete when:
|
|
|
|
1. All code implemented to specification
|
|
2. Unit tests written and passing
|
|
3. Code coverage meets project requirements
|
|
4. Documentation complete (if applicable)
|
|
5. Code passes all configured linting and static analysis checks
|
|
6. Works beautifully on mobile (if applicable)
|
|
7. Implementation notes added to `plan.md`
|
|
8. Changes committed with proper message
|
|
9. Git note with task summary attached to the commit
|
|
|
|
## Emergency Procedures
|
|
|
|
### Critical Bug in Production
|
|
|
|
1. Create hotfix branch from main
|
|
2. Write failing test for bug
|
|
3. Implement minimal fix
|
|
4. Test thoroughly including mobile
|
|
5. Deploy immediately
|
|
6. Document in plan.md
|
|
|
|
### Data Loss
|
|
|
|
1. Stop all write operations
|
|
2. Restore from latest backup
|
|
3. Verify data integrity
|
|
4. Document incident
|
|
5. Update backup procedures
|
|
|
|
### Security Breach
|
|
|
|
1. Rotate all secrets immediately
|
|
2. Review access logs
|
|
3. Patch vulnerability
|
|
4. Notify affected users (if any)
|
|
5. Document and update security procedures
|
|
|
|
## Deployment Workflow
|
|
|
|
### Pre-Deployment Checklist
|
|
|
|
- [ ] All tests passing
|
|
- [ ] Coverage >80%
|
|
- [ ] No linting errors
|
|
- [ ] Mobile testing complete
|
|
- [ ] Environment variables configured
|
|
- [ ] Database migrations ready
|
|
- [ ] Backup created
|
|
|
|
### Deployment Steps
|
|
|
|
1. Merge feature branch to main
|
|
2. Tag release with version
|
|
3. Push to deployment service
|
|
4. Run database migrations
|
|
5. Verify deployment
|
|
6. Test critical paths
|
|
7. Monitor for errors
|
|
|
|
### Post-Deployment
|
|
|
|
1. Monitor analytics
|
|
2. Check error logs
|
|
3. Gather user feedback
|
|
4. Plan next iteration
|
|
|
|
## Continuous Improvement
|
|
|
|
- Review workflow weekly
|
|
- Update based on pain points
|
|
- Document lessons learned
|
|
- Optimize for user happiness
|
|
- Keep things simple and maintainable
|
|
|
|
## Conductor Token Firewalling & Model Switching Strategy
|
|
|
|
To emulate the 4-Tier MMA Architecture within the standard Conductor extension without requiring a custom fork, adhere to these strict workflow policies:
|
|
|
|
### 1. Active Model Switching (Simulating the 4 Tiers)
|
|
- **Activate MMA Orchestrator Skill:** To enforce the 4-Tier token firewall explicitly, invoke `/activate_skill mma-orchestrator` (or use the `activate_skill` tool) when planning or executing new tracks.
|
|
- **Phase Planning & Macro Merges (Tier 1):** Use high-reasoning models (e.g., Gemini 1.5 Pro or Claude 3.5 Sonnet) when running `/conductor:setup` or when reviewing a major phase checkpoint.
|
|
- **Track Delegation & Implementation (Tier 2/3):** The MMA Orchestrator skill autonomously dispatches Tier 3 (Heads-Down Coding) tasks to secondary stateless instances of Gemini CLI (via `.\scripts\run_subagent.ps1 -Prompt "..."`) rather than performing heavy coding directly in the main thread.
|
|
- **QA/Fixing (Tier 4):** If a test fails with a massive traceback, **DO NOT** paste the traceback into the main conductor thread. Instead, the MMA Orchestrator skill instructs you to spawn a fast/cheap model sub-agent (via a shell command) to compress the error trace into a 20-word fix, keeping the main context clean.
|
|
|
|
### 2. Context Checkpoints (The Token Firewall)
|
|
- The **Phase Completion Verification and Checkpointing Protocol** is the project's primary defense against token bloat.
|
|
- When a Phase is marked complete and a checkpoint commit is created, the AI Agent must actively interpret this as a **"Context Wipe"** signal. It should summarize the outcome in its git notes and move forward treating the checkpoint as absolute truth, deliberately dropping earlier conversational history and trial-and-error logs to preserve token bandwidth for the next phase.
|