OXYGENHUB
# e8d38e47e9d7 oxygen / docs / backlog-overnight-2.md
10.6 KiB · Markdown · last changed Benchmarks after O10b; backlog: O10b done, O10c added 1 month ago renderedsource blame history raw

Overnight backlog 2 (2026-09-28 to 2026-09-30)

Andy's brief: usability and features on Oxygenhub, as many features as possible in the VS Code extensions, and a stable, mature oxy client. Work top to bottom, but interleave the three tracks: after each hub or extension item, take the next oxy stability item if one is open. Each item is done when its tests pass, the gate is clean, it is committed with oxy as Andy and pushed to Earth. Log each iteration at the bottom.

Hub (oxygenhub): usability and features

  • H1 Dashboard for signed-in users: my repositories, proposals needing me, issues assigned to me, recent activity across repositories I can see (pushes, proposals, issues, releases).
  • H2 Empty-repository quickstart: exact commands for this repository (remote add, token, CA download, push) and for starting from nothing.
  • H3 Theme switch (dark, light, auto) in the header and under Settings, remembered in the cookie; check every page in light mode.
  • H4 Profile and organisation pages: generated identicon avatar, display name, bio, linked keys, repositories, recent activity, organisation members and teams.
  • H5 Diff view: split (side by side) toggle remembered per user, collapse per file, hide whitespace changes, intra-line word highlighting.
  • H6 Forks: fork button, fork creation (store copy, forked_from), fork list, "propose to upstream" from a fork.
  • H7 Stars and watch counts, explore sorting (activity, stars, name) and filtering, repository topics.
  • H8 Proposal and issue lists: filters (author, label, target, assignee), sort orders, pagination, counts in tabs.
  • H9 File view: file tree sidebar, y for a permalink to the state, line range copy, blame age shading and "blame the state before this change".
  • H10 Compare page with bookmark and tag pickers and a "propose this" button.
  • H11 Help pages: getting started (install oxy, clone, push, tokens, CA, delegating to the hub), keyboard shortcuts, glossary for people coming from GitHub.
  • H12 Password reset and email verification (email when SMTP is set; admin-issued reset link otherwise).
  • H13 Notifications: per-thread mark read, filter by kind and repository, "participating" versus "watching".
  • H14 Accessibility and mobile pass: focus styles, skip link, landmarks, responsive tables and tabs, contrast in both themes.
  • H15 Organisation webhooks page; admin storage and repository maintenance page (sizes, oxy gc).
  • H16 Performance: cache rendered Markdown and highlighted files by object hash; measure the heaviest pages on Earth before and after.

VS Code (oxygen-vscode, oxygenhub-vscode)

  • V1 oxygenhub-vscode: proposal files in native diff editors (target state against projected state through a content provider), with review threads in them.
  • V2 oxygenhub-vscode: notifications count in the status bar and an inbox quick pick that opens the item.
  • V3 oxygenhub-vscode: completion of #N and @user in the Oxygen commit box and in comments; hover on #N shows the title.
  • V4 oxygenhub-vscode: create an issue from the editor selection or a TODO line, with a permalink.
  • V5 oxygenhub-vscode: releases view; draft a release from a tag.
  • V6 oxygen-vscode: history graph actions for split, squash and rebase (oxy history commands), with confirmation and undo hint.
  • V7 oxygen-vscode: commit box polish: amend toggle, message history, signed/unsigned indicator, warning on conflict markers.
  • V8 oxygen-vscode: Open on Remote in editor gutter context (line permalinks), copy permalink.
  • V9 Both: README screenshots-free walkthroughs, settings documentation, CHANGELOG per release.

oxy: stability and maturity

  • O1 Property tests (proptest) that applying the same changes in any order gives the same state, over random edit sequences on several files.
  • O2 oxy fsck: verify every object's hash, every change's references and signatures, the op log chain, and report precisely.
  • O3 Crash safety audit: every write goes through write_atomic or the store's batch; a test that interrupts commit and push at each step and proves the repository still opens and fscks.
  • O4 Benchmarks with thresholds: 10 000 files, 5 000 changes; status, commit, log, blame, push, clone; record numbers in docs.
  • O10a Heads at scale (first part of O10): State::maximal compared every pair of heads (quadratic; about 1.5 s per call at 4 500 heads, called three times per commit); now one walk. Commit reuses the snapshot's base state instead of loading it again.
  • O10b Parallel snapshot work: rendering the base state's files, building file graphs from a checkpoint, and reading working-copy files now run on every core (rayon).
  • O10c Snapshot without the whole base (rest of O10): load only the file graphs a snapshot needs (a checkpoint split per file or indexed), skip reading and rendering files whose stat matches a manifest written for the same base, cache materialized states. Needs a spec change to the checkpoint format; target spec §25.
  • O5 Concurrency: two processes committing, snapshotting and pushing on one repository; locks hold, nothing is lost.
  • O6 Error messages audit: every user-facing error says what to do next; oxy doctor checks identity, config, remotes, CA files, hub reachability.
  • O7 Shell completions (oxy completions bash|zsh|fish) and man pages generated from clap.
  • O8 Git round trip on real history: import a scratch mirror of tetriblox (never the live repo), export it back, compare trees at every commit.
  • O9 Portability review for macOS and Windows: path separators, executable bits, case-insensitive file systems, CRLF; tests where it can be exercised on Linux.

Log

  • 2026-09-28 H1 done: signed-in dashboard at / (review queue, own proposals, assigned issues, repositories, activity feed filtered to visible repositories); test dashboard_shows_what_needs_the_viewer; deployed to Earth.
  • 2026-09-28 O1 done: crates/oxy-core/tests/commutativity.rs (proptest, 32 cases): diverging clones with random edits, rebuilt in shuffled and random dependency orders, checkpoint round trip, and push in random order to a fresh clone; all give identical checkpoints, heads and trees. About 80% of generated cases conflict. No defects found. Workspace tests all green (oxy-core 129 + new).
  • 2026-09-28 H2 done: empty repositories show a quickstart (remote named after the host, e.g. earth; CA download and remote.X.ca when self-signed; token placeholder; push; start from nothing; oxy git import); readers get a plain notice. Tests: empty_repository_shows_a_quickstart and a remote-naming unit test; hub spec §6 row updated; deployed.
  • 2026-09-28 O2 done: oxy fsck [--json] (objects, op log through all parents, references and change closure with identities/blobs/chunks/signatures, bookmark states, checkpoints re-derived, ref and tag attestations verified); spec Draft 0.8h §21.1, guide updated. Test fsck_passes_a_sound_repository_and_names_each_fault (corrupt object, missing change, missing blob, broken op head). Clean on oxygen, oxygenhub, oxygen-vscode, oxygenhub-vscode, hellooxy. Release binary rebuilt.
  • 2026-09-28 V1 done: hub API GET /proposals/{n}/files and /proposals/{n}/content/{base|head}/{path}, and anchored comments now carry their current line (deployed). oxygenhub-vscode 0.2.0: proposals expand to files, native diff editor per file, View Changes multi-diff, review threads on the projected side; installed in Default and Rust profiles (Developer: Reload Window to pick it up). Tests: hub api test extended; extension pass 6 fail 0 against a real hub.
  • 2026-09-28 O3 done: new oxy_core::durable (unique temp, fsync, rename, directory fsync) for every durable write; real bug fixed: inside a write batch the op head moved before the batch (including the new op object) was on disk, so a crash there left an unopenable repository; Store::flush now runs before the head moves. Test stops commit (20 steps) and push (32 steps) at every step: both repos open, fsck clean, command retries. Spec §13.6. Hub rebuilt and redeployed with the fix. Not covered: working-copy file writes during checkout are still plain writes (user files, recoverable by snapshot).
  • 2026-09-28 H3 done: header theme switch (dark/light/auto) and Settings → Appearance, theme cookie; auto follows the system live. Light-mode pass by headless Chrome screenshots of dashboard, overview, file, proposal, issue, settings, changes: found and fixed highlighted code drawing boxes in both themes (syntect scope comment colliding with the page .comment class; classes now sy- prefixed) and the band ADMIN link unreadable in light. Test theme_is_chosen_in_settings_and_remembered_in_a_cookie; hub spec §6.1; deployed. The code editor picks its theme at load, not live.
  • 2026-09-28 O4 done: harness crates/oxy-core/tests/bench.rs (ignored; run by hand) and docs/benchmarks.md. Full run on disk took 5 h 14 min. Andy: status and commit are slow at scale: at 10 000 files / 5 000 changes a commit averages 3.8 s, a 10-file commit 9.1 s, a clean status 3.0 s, blame 2.9 s, peak memory 1.4 GiB; push 0.8 s, clone 3.4 s, log 0.4 s are fine. Cause: every snapshot loads and materializes the whole base state. New item O10 (moved ahead of O5) fixes it.
  • 2026-09-28 V2 done: hub API GET /notifications, POST /notifications/{id}/read, POST /notifications/read (scope user:read; deployed). oxygenhub-vscode 0.3.0: status-bar bell with unread count across hubs, new-notification messages, Open Inbox quick pick that marks read and opens proposals/issues in the editor. Installed in both profiles (Reload Window). Tests: hub api test extended; extension pass 7 fail 0.
  • 2026-09-28 O10a done: State::maximal was quadratic in heads (4 500 heads in the benchmark); now one walk, with a property test against the old definition. Commit reuses the snapshot's base. At 10 000 files / 5 000 changes: commit 3.8 s to 0.86 s, 10-file commit 9.1 s to 0.86 s, status 3.0 s to 0.80 s, blame 2.9 s to 0.81 s, memory 1.4 to 1.1 GiB; benchmark run 5 h 14 min to 1 h 12 min. Hub redeployed with it. O10b (manifest fast path, lazy base) remains for the per-file cost.
  • 2026-09-28 V3 done: oxygenhub-vscode 0.4.0: # and @ completion in the Oxygen commit box and comment editors, hover on #N; repository from the SCM root. Parsing tested in Node (pass 10, fail 0). Installed in both profiles.
  • 2026-09-28 O10b done: rayon for materialize, checkpoint file graphs and working-copy reads. At 10 000 files: clean status about 800 to 460-580 ms, commit 861 to 550-605 ms. Remaining cost is loading the whole base (O10c, needs a checkpoint format change in the spec, so left for Andy to agree). Hub redeployed.