You are continuing implementation of a specification that was started in a previous session. Work autonomously until the feature is complete and tests pass.
Your Task
- Determine the spec - Based on the conversation context, identify which spec file in
.agents/plans/to continue implementing. Ask the user if multiple specs exist or if unclear. - Read the spec - Load the identified specification file
- Read ARCHITECTURE.md - Understand the project's layered architecture and ensure your implementation follows the high-level/low-level API pattern
- Read CODE_STYLE.md for formatting conventions
- Assess current state:
- Check git status for uncommitted changes
- Run tests to see what's passing/failing
- Review any existing implementation
- Determine what remains by comparing the spec to the current state
- Plan remaining work using TodoWrite
- Continue implementing until complete
Assessing Current State
Run these commands to understand where the previous session left off:
git status # See uncommitted changes
git log --oneline -10 # See recent commits
bun run test:run # See what tests pass/fail
bun run typecheck # Check for type errors
Review the code that's already been written to understand:
- What's already implemented
- What's partially done
- What's not started yet
Implementation Guidelines
Architecture Awareness
Refer to ARCHITECTURE.md to ensure your implementation fits the layered structure:
- Two API layers: Implement low-level functionality first, then high-level adapters
- Layer placement: Add code to the appropriate layer (Objects, Parser, Drawing, etc.)
- Design principles: Follow lenient parsing, lazy loading, async-first patterns
During Implementation
- Follow CODE_STYLE.md strictly (2-space indent, double quotes, braces always, etc.)
- Use
#src/*import alias for internal imports - Co-locate tests as
*.test.tsfiles - Write tests as you go, not at the end
- Mark todos complete as you finish each task
- Commit logical chunks of work
Layer Separation
When continuing work, verify the architecture:
- Does low-level code avoid high-level abstractions?
- Does high-level code delegate to low-level implementation?
- Are tests at the appropriate level (unit tests for low-level, integration for high-level)?
Code Quality
- No stubbed implementations or skipped tests
- Handle edge cases and error conditions
- Include descriptive error messages with context
- Use async/await for all I/O operations
Testing
- Write tests first when practical (TDD)
- Test happy paths and edge cases
- Test error conditions
- Use fixtures from
fixtures/directory withloadFixture()
Autonomous Workflow
Work continuously through these steps:
- Implement - Write the code for the current task
- Test - Run
bun run test:runto verify - Fix - If tests fail, fix and re-run
- Typecheck - Run
bun run typecheck - Lint - Run
bun run lint:fix - Repeat - Move to next task
Stopping Conditions
Stop and report success when:
- All spec requirements are implemented
- All tests pass
- Typecheck passes
- Lint passes
Stop and ask for help when:
- The spec is ambiguous and you need clarification
- You encounter a blocking issue you cannot resolve
- You need to make a decision that significantly deviates from the spec
- External dependencies or fixtures are missing
Commands
bun run test # Run tests in watch mode
bun run test:run # Run tests once
bun run test -- --grep "pattern" # Run specific tests
bun run typecheck # Type check
bun run lint:fix # Fix lint issues
Begin
Identify the spec file from the conversation context, read it along with CODE_STYLE.md, assess the current implementation state, then continue where the previous session left off. Use TodoWrite to track your progress throughout.
