156 lines
5.7 KiB
Markdown
156 lines
5.7 KiB
Markdown
# 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:** `blocks` and `relates_to` only
|
|
- **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-42` triggers 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 `tsvector` full-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
|