| 1 |
# Oxygenhub plan |
| 2 |
|
| 3 |
Milestones from `docs/spec.md` §19. Each item is checked when its tests |
| 4 |
pass, clippy is clean, and the change is committed with `oxy`. |
| 5 |
|
| 6 |
## 0.1 Browse (2026-09-27) |
| 7 |
|
| 8 |
- [x] Workspace: `crates/hub` (binary), `crates/hub-api` (API types), askama templates, vendored fonts, one stylesheet from the RetroPlay theme. |
| 9 |
- [x] Configuration (`hub.toml` + `OXYHUB_*`), SQLite with embedded migrations (`repositories`, `pushes`). |
| 10 |
- [x] Repository registry: bare, unbound-by-default repositories under `<data>/repos/<owner>/<name>`, per-repository read/write locks, trash on delete. |
| 11 |
- [x] Embedded wire protocol with visibility and push-token authorisation and a push log. |
| 12 |
- [x] Pages: home, owner, overview (tree, README, clone, bookmarks, tags, trust badge, heads and conflict strips), tree, file (highlighting, Markdown, images, raw, blame), history with the dependency graph and path filter, change with diff and dependencies, compare, bookmarks, tags, conflicts, trust, pushes. |
| 13 |
- [x] JSON API: repositories, bookmarks, tags; `/health`; `/.well-known/oxyhub-key`. |
| 14 |
- [x] CLI: `init` (keys, self-signed TLS), `serve` (HTTP and HTTPS), `admin repo create|list|delete|set`, `check`. |
| 15 |
- [x] Tests: unit tests per module and an end-to-end test that pushes with a real `oxy-core` client and fetches every page. |
| 16 |
- [x] Oxygen changes it needed (in the Oxygen plan, phase 4): bare repositories, embeddable server, unbound repositories, adoption of anonymous changes by seals, `oxy seal`. |
| 17 |
- [ ] Developer edition running on Earth with `oxygen`, `oxygen-vscode` and `oxygenhub` hosted (docs/deploy.md). |
| 18 |
|
| 19 |
## 0.2 Accounts and access |
| 20 |
|
| 21 |
- [ ] Registration, sessions, TOTP, profile, organisations, teams, roles, visibility enforcement by viewer, personal access tokens with scopes, linked identities with challenge signing (`oxy identity sign-challenge`), audit log, settings pages, pushes attributed to keys. |
| 22 |
|
| 23 |
## Later |
| 24 |
|
| 25 |
- 0.3 proposals and review · 0.4 issues and notifications · 0.5 API, webhooks, checks · 0.6 web edits, releases, mirror · 0.7 runner · 1.0 hardening. |
| 26 |
|
| 27 |
## Notes |
| 28 |
|
| 29 |
- State caching (spec §16.3): `repos::cache::StateCache`, a bounded LRU of loaded states keyed by repository id and heads, shared across threads since `State` became `Send + Sync`. Measured on the `oxygen` repository (90 changes): overview 154 ms cold and under 2 ms warm, history 25 ms, tree under 1 ms. Rendered-page and syntax-highlight caches are still to do. |