OXYGENHUB
# f2c9757605c1 oxygenhub / docs / plan.md
2.4 KiB · Markdown · last changed Milestone 0.1: browse 1 month ago renderedsource blame history raw

Oxygenhub plan

Milestones from docs/spec.md §19. Each item is checked when its tests pass, clippy is clean, and the change is committed with oxy.

0.1 Browse (2026-09-27)

  • Workspace: crates/hub (binary), crates/hub-api (API types), askama templates, vendored fonts, one stylesheet from the RetroPlay theme.
  • Configuration (hub.toml + OXYHUB_*), SQLite with embedded migrations (repositories, pushes).
  • Repository registry: bare, unbound-by-default repositories under <data>/repos/<owner>/<name>, per-repository read/write locks, trash on delete.
  • Embedded wire protocol with visibility and push-token authorisation and a push log.
  • 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.
  • JSON API: repositories, bookmarks, tags; /health; /.well-known/oxyhub-key.
  • CLI: init (keys, self-signed TLS), serve (HTTP and HTTPS), admin repo create|list|delete|set, check.
  • Tests: unit tests per module and an end-to-end test that pushes with a real oxy-core client and fetches every page.
  • Oxygen changes it needed (in the Oxygen plan, phase 4): bare repositories, embeddable server, unbound repositories, adoption of anonymous changes by seals, oxy seal.
  • Developer edition running on Earth with oxygen, oxygen-vscode and oxygenhub hosted (docs/deploy.md).

0.2 Accounts and access

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

Later

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

Notes

  • State caching (spec §16.3) is not started: pages load the state they need per request; the overview loads it once and reuses it. Measured on the oxygen repository (88 changes): overview ~0.5 s, tree ~0.14 s, history ~0.13 s, a 2 000-line file ~0.7 s. A per-heads cache is the first performance item for 0.2.
  • State holds Rc values, so a cross-thread cache needs a Send snapshot type in oxy-core first.