Skip to main content
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 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

Optional Fields

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
Never mark a task as Done if implementation is partial, tests are failing, or the feature doesn’t work as specified.

Task Prefixes

Tasks are organized by domain using prefixes. Tasks are further organized into subdirectories:

Core Tasks (.tasks/core/)

Backend and Rust-related tasks:

Interface Tasks (.tasks/interface/)

Frontend and React-related tasks:

Mobile Tasks (.tasks/mobile/)

Mobile-specific tasks (future):

Task Validator CLI

The task-validator binary provides utilities for managing and validating tasks.

List Tasks

View all tasks sorted by status:
Output groups tasks by status (To Do, In Progress, Done):

Filter Tasks

Filter by specific criteria:

Validate Schema

Ensure all task files conform to the schema:
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:
  2. List current task state:
  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:
  5. Validate changes:
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.

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:
Example core task file (.tasks/core/LSYNC-017-realtime-sync.md):
Example interface task file (.tasks/interface/EXPL-004-breadcrumbs.md):

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:
Subtasks reference their epic via the parent field:

Task Dependencies

While not enforced by schema, dependencies can be documented in task descriptions:

Whitepaper References

Link tasks to design documentation:
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:
Bad:

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:
This creates a searchable link between tasks and implementation:

Troubleshooting

Validation Errors

Invalid YAML:
Fix: Check YAML syntax, ensure frontmatter is enclosed in --- Missing Required Field:
Fix: Add the missing field to frontmatter Invalid Status Value:
Fix: Use exact status values from schema (case-sensitive)

Duplicate IDs

Each task ID must be unique. If validation reports duplicates:
Renumber conflicting tasks and update any parent references.

Orphaned Tasks

Tasks with parent fields referencing non-existent tasks:
Will report broken parent references. Either remove the parent field or create the missing epic.

Examples

Complete Epic with Subtasks

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.