5.7 KiB
Non-Linear: v0.1-alpha Scope
Validation Goal
Can a team of 3-5 people use this as their sole tracker for two weeks without falling back to another tool?
Ship the smallest thing that tests whether graph-native structure + repo-inferred skeleton + agent graph traversal is better than Linear for a small team. Everything else can wait.
What Ships
Data Model
- Two node types: Components (skeleton, map to code) and Issues (work, flow through statuses)
- Decomposition tree: strict parent→child hierarchy, single root, single project
- Lateral links:
blocksandrelates_toonly - Statuses: backlog, todo, in_progress, in_review, done, cancelled (permissive transitions)
- Labels: freeform tags, no enforced taxonomy
- Complete change history: every mutation stored with actor + timestamp
No user-facing "layers" concept. The 4-layer architecture is an internal design pattern — in alpha, there is simply structure and work.
Repository Integration
This is the differentiator. It must ship.
- Connect repos: OAuth to GitHub/GitLab, select repos for a project
- Skeleton inference: AI scans repo structure → proposes component tree → user adjusts → skeleton committed
- Commit-message linking:
fixes NL-42/refs NL-42triggers status change or surfaces in activity feed (regex parsing via webhook)
Views
Two views, not four:
- Focus widget: Node + parent + children + breadcrumbs + detail panel + comments + change history. Primary daily-use view.
- Flat list / Kanban board: Issues listed or grouped by status columns. Sorting, filtering by label/assignee/status. Bulk status change.
A simple collapsible tree sidebar replaces the full layered overview graph visualization.
Interaction
- Command palette (
Cmd+K): Fuzzy search across nodes and actions. Non-negotiable for keyboard-first. - Keyboard navigation:
Alt+↑/↓/←/→for tree traversal in focus widget. - Confirmation dialogs for destructive/structural operations (replaces full plan-then-apply previews).
Triage
- Inbox: Issues without a parent land here. Triage = assign a parent via command palette or drag.
Auth & Permissions
- Authentik OIDC: Login for humans
- API tokens: Bearer tokens for agents, issued manually
- Three hardcoded roles:
- Owner — all actions
- Member — all except delete and manage members
- Agent — read + comment + change status + triage (assign parent)
No policy engine. No subtree scoping. No custom roles.
Agent API
Read operations:
GET /api/v1/nodes/{id}
GET /api/v1/nodes/{id}/children
GET /api/v1/nodes/{id}/parent
GET /api/v1/nodes/{id}/links
GET /api/v1/nodes/{id}/path
GET /api/v1/projects/{id}/root
GET /api/v1/projects/{id}/inbox
Write operations:
POST /api/v1/nodes/{id}/comments
PATCH /api/v1/nodes/{id}/status
PATCH /api/v1/nodes/{id}/parent
Queries:
GET /api/v1/projects/{id}/nodes?status=todo&assignee=agent-1&unblocked=true
Webhooks (minimal): Register URL + events. Single delivery attempt, log failures. No retry logic, no HMAC signatures.
Real-Time
- Centrifugo: Push status changes, new nodes, new comments to connected clients via
project:{id}channel.
Comments
- Flat comment stream per node. Markdown body. Author + timestamp.
Infrastructure (~8 containers)
api (FastAPI + uvicorn)
frontend (Vue 3 + Vite)
postgres
redis
centrifugo
caddy (reverse proxy + automatic TLS)
authentik (OIDC provider)
authentik-db (Authentik's Postgres)
- Search: Postgres
tsvectorfull-text search (no Meilisearch) - File storage: None (no uploads in alpha — links in descriptions suffice)
- Secrets: Environment variables / Docker secrets (no Vault)
- Observability: Structured JSON logs +
docker logs(no Prometheus/Grafana/Loki/Tempo) - Deployment: Single Docker Compose file, one machine. Dev = production topology.
What Does NOT Exist in Alpha
| Feature | Reason to Defer |
|---|---|
| Layer 3 (Code Connections) | Complex inference, unclear daily value until skeleton is stable |
| Layer 4 (Artifacts) | A URL in the description works for 2 weeks |
| Layer toggles in UI | No Layer 3/4 data to toggle |
| Cycles | Time-boxing is nice-to-have, not thesis-critical |
| Notifications (email/push) | In-app real-time is enough for a co-located/online team |
| Full policy engine | Not testing permission granularity |
| Natural language node creation | Manual creation via palette is fast enough |
| Plan-then-apply previews | Confirmation dialog suffices |
| Comment reactions | Zero impact on validation |
| Observability stack | Structured logs are enough |
| Secrets management (Vault) | Env vars for single-node deployment |
| Tauri desktop wrapper | Browser-only |
| Meilisearch | Postgres tsvector is sufficient for small graphs |
| MinIO / file uploads | Descriptions can link to external files |
| Pagination | Graphs will be small (<500 nodes) |
Success Criteria
- Team uses Non-Linear as sole tracker for 2+ weeks
- No fallback to Linear/spreadsheet for any workflow
- At least one repo connected with inferred skeleton
- Agent produces at least 1 useful action per day
- Users create trees with 3+ depth levels
- Command palette action <200ms, view transitions <100ms
After Alpha Validates
Features flow from feedback, not speculation:
- Users want to attach design files → add Artifacts (Layer 4)
- Users want dependency visibility → add Code Connections (Layer 3)
- Agents need subtree isolation → add policy engine
- Teams are distributed → add notifications (email/push)
- Graph viz is too limited → build the layered overview
- Projects grow large → add pagination, Meilisearch, cycles