---
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.
