spacedrive/docs/core/task-tracking.mdx
2025-12-02 15:10:50 -08:00

559 lines
13 KiB
Plaintext

---
title: Task Tracking
sidebarTitle: Task Tracking
---
The `.tasks/` directory contains a structured task tracking system that manages the entire development lifecycle of Spacedrive. Tasks are defined as markdown files with YAML frontmatter and validated against a JSON schema.
## Overview
Task tracking provides:
- **Hierarchical organization** with epics and subtasks
- **Status tracking** across the development lifecycle
- **Metadata** like priority, assignee, and whitepaper references
- **Validation** via a CLI tool to ensure consistency
### Directory Structure
```
.tasks/
├── core/ # Backend/Rust tasks
│ ├── CORE-000-vdfs-core.md
│ ├── CORE-001-entry-centric-model.md
│ ├── JOB-000-job-system.md
│ ├── INDEX-*.md
│ ├── LSYNC-*.md
│ └── ...
├── interface/ # Frontend/React tasks
│ ├── UI-000-interface-v2.md
│ ├── EXPL-000-explorer-epic.md
│ ├── SETS-000-settings-epic.md
│ └── ...
├── mobile/ # Mobile-specific tasks
│ └── (future tasks)
├── task.schema.json # JSON schema defining task structure
└── Claude.md # Task tracking cheatsheet
```
Tasks follow the naming pattern: `{PREFIX}-{NUMBER}-{slug}.md` and are organized into subdirectories by domain (core, interface, mobile).
## Task Schema
Every task file contains YAML frontmatter that must conform to the schema defined in `task.schema.json`.
### Required Fields
```yaml
---
id: CORE-001
title: Entry-Centric Data Model
status: Done
assignee: james
priority: High
---
```
| Field | Type | Description |
|-------|------|-------------|
| `id` | string | Unique identifier matching pattern `^[A-Z]+-[0-9]+$` |
| `title` | string | Human-readable title (min 5 characters) |
| `status` | enum | One of: `To Do`, `In Progress`, `Done` |
| `assignee` | string | Person responsible for the task |
| `priority` | enum | One of: `High`, `Medium`, `Low` |
### Optional Fields
```yaml
---
parent: CORE-000
tags: [core, database, epic]
whitepaper: Section 4.1
last_updated: 2025-12-02
---
```
| Field | Type | Description |
|-------|------|-------------|
| `parent` | string | Parent task ID for subtask hierarchy |
| `tags` | array | Categorization tags |
| `whitepaper` | string | Reference to design documentation |
| `last_updated` | string | ISO date of last modification |
## Task Statuses
The lifecycle of a task follows three states:
### To Do
Task has not been started. No implementation exists.
### In Progress
Task is actively being worked on. Criteria for this status:
- Some code has been written
- Feature is partially implemented
- Still has rough edges or incomplete functionality
### Done
Task is complete. All acceptance criteria must be met:
- All listed acceptance criteria are implemented
- Code is merged to main branch
- Tests pass (if applicable)
- Feature is production-ready
<Note>
Never mark a task as `Done` if implementation is partial, tests are failing, or the feature doesn't work as specified.
</Note>
## Task Prefixes
Tasks are organized by domain using prefixes. Tasks are further organized into subdirectories:
### Core Tasks (`.tasks/core/`)
Backend and Rust-related tasks:
| Prefix | Domain |
|--------|--------|
| `CORE` | Core architecture and data model |
| `JOB` | Job system and task execution |
| `INDEX` | File indexing and location management |
| `FSYNC` | File synchronization |
| `LSYNC` | Library synchronization |
| `NET` | Networking and P2P |
| `SEARCH` | Search functionality |
| `FILE` | File operations |
| `LOC` | Location management |
| `VOL` | Volume operations |
| `SEC` | Security and privacy |
| `CLI` | Command-line interface |
| `CLOUD` | Cloud integration |
| `AI` | AI and ML features |
| `PLUG` | Plugin system |
| `DEV` | Development tooling |
### Interface Tasks (`.tasks/interface/`)
Frontend and React-related tasks:
| Prefix | Domain |
|--------|--------|
| `UI` | UI primitives and design system |
| `EXPL` | Explorer interface |
| `SETS` | Settings pages |
| `SRCH` | Search UI |
| `TAG` | Tagging interface |
| `MEDIA` | Media viewer |
| `NAV` | Navigation and routing |
| `PERF` | Performance optimizations |
| `A11Y` | Accessibility |
### Mobile Tasks (`.tasks/mobile/`)
Mobile-specific tasks (future):
| Prefix | Domain |
|--------|--------|
| `IOS` | iOS native features |
| `MACOS` | macOS native features |
| `AND` | Android features |
## Task Validator CLI
The `task-validator` binary provides utilities for managing and validating tasks.
### List Tasks
View all tasks sorted by status:
```bash
cargo run --bin task-validator -- list --sort-by status
```
Output groups tasks by status (To Do, In Progress, Done):
```
=== Done ===
CORE-000: Epic: VDFS Core Architecture
CORE-001: Entry-Centric Data Model
JOB-001: Job Manager for Task Scheduling
=== In Progress ===
CLOUD-003: Cloud Volume Support
=== To Do ===
AI-002: Create Fine-tuning Dataset
```
### Filter Tasks
Filter by specific criteria:
```bash
# By status
cargo run --bin task-validator -- list --status "In Progress"
# By priority
cargo run --bin task-validator -- list --priority High
# By assignee
cargo run --bin task-validator -- list --assignee james
```
### Validate Schema
Ensure all task files conform to the schema:
```bash
cargo run --bin task-validator -- validate
```
This checks:
- YAML frontmatter is valid
- All required fields are present
- Field values match allowed enums
- ID pattern is correct
- Parent references exist
Validation runs in CI to prevent invalid tasks from being committed.
## Workflow
### Reviewing Task Status
When code has been merged, tasks should be reviewed and updated:
1. **Check recent commits**:
```bash
git log --oneline -20
```
2. **List current task state**:
```bash
cargo run --bin task-validator -- list --sort-by status
```
3. **For each potential completed feature**:
- Read the task file to understand acceptance criteria
- Read all implementation files mentioned in the task
- Check `core/tests/` for integration tests
- Verify each acceptance criterion is met in the code
4. **Update task status**:
Edit the YAML frontmatter in the task file:
```yaml
---
status: Done # Changed from "In Progress"
last_updated: 2025-12-02 # Update date
---
```
5. **Validate changes**:
```bash
cargo run --bin task-validator -- validate
```
<Tip>
When unsure if a task is complete, leave it as `In Progress` rather than prematurely marking it `Done`. The tracker is only useful if it's accurate.
</Tip>
### Creating New Tasks
1. Choose appropriate subdirectory (`core/`, `interface/`, or `mobile/`)
2. Choose appropriate prefix based on domain
3. Find next available number (e.g., if `EXPL-002` exists, use `EXPL-003`)
4. Create file with pattern: `.tasks/{subdirectory}/{PREFIX}-{NUMBER}-{slug}.md`
5. Add YAML frontmatter with all required fields
6. Write task description and acceptance criteria
7. Validate:
```bash
cargo run --bin task-validator -- validate
```
Example core task file (`.tasks/core/LSYNC-017-realtime-sync.md`):
```markdown
---
id: LSYNC-017
title: Real-time Sync Protocol
status: To Do
assignee: james
parent: LSYNC-000
priority: High
tags: [core, sync, networking]
whitepaper: Section 5.3
---
## Description
Implement a real-time synchronization protocol that pushes changes
immediately rather than relying on polling intervals.
## Implementation Notes
- Use WebSocket or similar bi-directional protocol
- Integrate with existing sync service
- Maintain backward compatibility with polling-based sync
## Acceptance Criteria
- [ ] Changes propagate within 1 second between devices
- [ ] Protocol handles network interruptions gracefully
- [ ] Fallback to polling when real-time unavailable
- [ ] Integration tests demonstrate cross-device sync
```
Example interface task file (`.tasks/interface/EXPL-004-breadcrumbs.md`):
```markdown
---
id: EXPL-004
title: Breadcrumb Navigation
status: To Do
assignee: james
parent: EXPL-000
priority: Medium
tags: [explorer, navigation, ui]
---
## Description
Implement breadcrumb navigation in the Explorer top bar showing the
current path with clickable segments.
## Implementation Notes
- Display full path as clickable segments
- Truncate middle segments if path is too long
- Show dropdown menu for segments with many children
- Keyboard navigation support
## Acceptance Criteria
- [ ] Breadcrumbs show current location path
- [ ] Click segment to navigate to that level
- [ ] Path updates when navigating
- [ ] Works with virtual locations and SD paths
- [ ] Responsive truncation for long paths
```
### Updating Task Status
When updating tasks after completing work:
**DO:**
- Read implementation files thoroughly
- Verify all acceptance criteria are met
- Check for passing integration tests
- Update `last_updated` field
- Be rigorous about what "Done" means
**DON'T:**
- Mark tasks done based on assumptions
- Skip reading the actual code
- Ignore failing tests or partial implementations
- Batch update tasks without verification
## Common Patterns
### Epic Tasks
Epics are high-level tasks that have subtasks:
```yaml
---
id: CORE-000
title: "Epic: VDFS Core Architecture"
status: Done
assignee: james
priority: High
tags: [epic, core, vdfs]
---
```
Subtasks reference their epic via the `parent` field:
```yaml
---
id: CORE-001
title: Entry-Centric Data Model
parent: CORE-000
status: Done
---
```
### Task Dependencies
While not enforced by schema, dependencies can be documented in task descriptions:
```markdown
## Dependencies
This task requires:
- CORE-001 (Entry-Centric Model) - Done
- INDEX-001 (Location Watcher) - In Progress
```
### Whitepaper References
Link tasks to design documentation:
```yaml
whitepaper: Section 4.1
```
This helps trace implementation back to architectural decisions.
## Best Practices
### Task Granularity
- **Epics**: High-level features spanning multiple subtasks
- **Tasks**: Concrete features implementable in focused work
- **Too granular**: Don't create tasks for every file or function
### Acceptance Criteria
Write specific, testable criteria:
**Good:**
```markdown
- [ ] User can add S3 bucket as a cloud volume
- [ ] Cloud volumes appear in volume list
- [ ] Files in cloud volume can be searched
```
**Bad:**
```markdown
- [ ] Implement cloud volume feature
- [ ] Make it work properly
```
### Status Accuracy
The tracker is only valuable if it reflects reality:
- Review and update tasks regularly
- Don't mark tasks done to "clean up" the list
- Keep `In Progress` honest about active work
- Archive or remove truly obsolete tasks
### Git Integration
While not automated, tasks can be referenced in commits:
```bash
git commit -m "feat: implement cloud volume indexing (CLOUD-003)"
```
This creates a searchable link between tasks and implementation:
```bash
git log --oneline --grep="CLOUD-003"
```
## Troubleshooting
### Validation Errors
**Invalid YAML**:
```
Error: Failed to parse YAML in CORE-001-entry-centric-model.md
```
Fix: Check YAML syntax, ensure frontmatter is enclosed in `---`
**Missing Required Field**:
```
Error: Missing required field 'priority' in CORE-001
```
Fix: Add the missing field to frontmatter
**Invalid Status Value**:
```
Error: Invalid status 'Complete' in CORE-001. Must be one of: To Do, In Progress, Done
```
Fix: Use exact status values from schema (case-sensitive)
### Duplicate IDs
Each task ID must be unique. If validation reports duplicates:
```bash
# Find all task IDs
grep "^id:" .tasks/*.md | sort
```
Renumber conflicting tasks and update any parent references.
### Orphaned Tasks
Tasks with `parent` fields referencing non-existent tasks:
```bash
cargo run --bin task-validator -- validate
```
Will report broken parent references. Either remove the parent field or create the missing epic.
## Examples
### Complete Epic with Subtasks
```markdown
# .tasks/SEARCH-000-semantic-search.md
---
id: SEARCH-000
title: "Epic: Semantic Search System"
status: In Progress
assignee: james
priority: High
tags: [epic, search, ai]
whitepaper: Section 6.2
---
## Description
Build a semantic search system using embeddings and vector similarity.
## Subtasks
- SEARCH-001: Async search job infrastructure
- SEARCH-002: Two-stage FTS + semantic reranking
- SEARCH-003: Unified vector repositories
```
```markdown
# .tasks/SEARCH-001-async-searchjob.md
---
id: SEARCH-001
title: Async Search Job
parent: SEARCH-000
status: Done
assignee: james
priority: High
tags: [search, jobs]
last_updated: 2025-11-15
---
## Description
Implement background search job that processes queries asynchronously.
## Acceptance Criteria
- [x] SearchJob implements Job trait
- [x] Queries execute in background thread pool
- [x] Results stream back via events
- [x] Integration test demonstrates full workflow
```
## Integration with Development
The task tracking system complements other development tools:
- **Testing**: Acceptance criteria inform test cases
- **CI/CD**: Schema validation runs in continuous integration
- **Code Review**: Task IDs provide context in pull requests
- **Documentation**: Tasks link to whitepaper design sections
- **Planning**: Status overview shows project progress
By maintaining accurate task status, the team has a real-time view of what's complete, what's in progress, and what's planned.