Delivery plan
The milestone tracker for the terminal specification. Requirements live in the topic pages; this page owns order, gates, exclusions and delivery state, so that progress does not have to live in their prose. The Android app was delivered in slices of its own before these milestones. One branch, one pull request (D8).
Order (D11): specs and mockups first; everything that needs no layout decision in parallel; visual surfaces only once their mockup is chosen.
| Milestone | Deliverable | Obligations | Prerequisites | Gate (acceptance) | Excludes | Status |
|---|---|---|---|---|---|---|
| M0 | This tree; the mockups | — | — | ci --check-docs-sidebar, --check-spec-evidence, yarn docs:build; a mockup per surface in design | choosing among the mockups | done — every surface has a chosen mockup (design) |
| M1 | TerminalConfig, its layers, located errors, config show/write, the shared JSONC reader; extra-keys visibility as a setting | TCF1–TCF8 | M0 | layering fixtures (TCF2/TCF3), a malformed-file test (TCF4), the reflection test (TCF1); a reload on the phone | the settings page | done — TCF8 (the font family applies at the next start) and TCF9 (no tooltip for an icon-only button) partial |
| M2 | The command table and the guide machinery; the MENU token; tappable guide rows | TKM1–TKM5, TKM7–TKM9; TKM6 behaviour | M1 | the KEY agreement test, the reserved-keys test, a recording-pty sweep for TKM2 | the guide's touch layout | done — TKM2 partial (the recording-pty half of the sweep) |
| M3 | Protocols: titles/icons/cwd, notifications (events, policy, log), scheme following and reports, OSC 4/10–12 answers, kitty text encoding, paste guard, OSC 52 | TPR1–TPR4, TPR8–TPR11, TPR13–TPR21; TPG9 | M1 | byte fixtures from the authorities (not our encoder) for every sequence; a recording pty for every reply; the paste-injection fixture (TPR18) | confirm/toast layouts; deep link | done — TPR3, TPR11, TPR13, TPR16, TPR17, TPG9 partial, each naming its gap |
| M4 | Logging: ring and file sinks, TraceLog routing; build info | TPG2, TPG4–TPG7 | — | ring wrap and drop count, rotation, the marker test (TPG6) | the log page | done — TPG2, TPG6 partial with named gaps (ledger) |
| M5 | Android plumbing and spikes: notifications, the deep-link spike, the system scheme, share, autofill spike, the termios probe | TPR10, TPR12, TPR13 (Android), TSE8, TSE9 | M3 | spike results recorded in testing whatever they are; on the phone: a notification while backgrounded, a scheme toggle | the chip and menu layouts | done — spikes recorded in testing; TSE9 partial, each naming its gap |
| M6 | Sessions model: respawn, the pane pool, the workspace over DockLayout, pane-local routing, restore | TSS1, TSS3–TSS10, TSS14, TSS15 | M2 | respawn/pool/workspace unit tests; serialize round-trip; restore after a force-stop on the phone | strip, prompt and header layouts | done — TSS2, TSS4, TSS8, TSS14 partial, each naming its gap |
| M7 | The settings pane lifted into sparkles:ui; hue on it | TSP1–TSP4 | M1 | hue's SET tests and GUI goldens unchanged | the terminal's page layout | done |
| M8 | Visual surfaces, each after its mockup is chosen | every open row; TPR5–TPR7, TSE1–TSE7, TSE10, TPG1, TPG3, TPG8, TPG10, TPG11, TSP5, TSP6, TSS2, TSS11–TSS13, TKM6 | M0 choice; M1–M7 | slot declarations, monochrome focus, theme swap = cold render, placement tests; screenshots on the desktop (xvfb) and the phone for every surface | — | delivered — TSP5, TSS2, TSS11 partial, each naming its gap |
| M9 | hue: VitePress @include and <<< snippet import in the markdown preview | hue VIW5–VIW7 | — | fixtures for every form (relative, @/, @/../, line range, region, label, code-group), the confinement and cycle cases; docs/libs/event-horizon/tutorial/ previews with its snippets | — | done — VIW5 and VIW7 full, VIW6 partial (line highlights are not drawn) |
| M10 | The credits document, licence staging and the completeness check | TPG12–TPG14, TPG16 | M9 | ci --check-credits passes and fails on a removed part; yarn docs:build renders every licence | the in-app page | done |
| M11 | hue's GPU document viewer extracted into a library; the terminal opens files in it | hue UIA14; TDV1–TDV11; TPG15, TPG17 | M6, M9 | hue goldens and A/B oracles unchanged; xdg-open / termux-open of markdown, source, CSV and an image open panes on the desktop and the phone | the viewer pane chrome before its mockup | delivered, gaps named in the rows: TDV1 OSC 8 / selection Open, TDV5 icon, TDV6 long-press copy, TDV9 links, TPG17 hue on Android, UIA14 hue mounting the pane |
| M12 | Large screens and keyboard covers: the tablet run's fixes | TCF14, TKM10, TSS16, TPG19; re-verifies TKM6, TSE3, TSE6, TSP6, TSS11, TSS12, TPG7 on a tablet | M8, M11 | host tests per fix; screenshots on the phone and the tablet (both orientations, soft keyboard up and down) | the desktop's window chrome | done |
Each milestone's commits flip their rows and append to the evidence ledger in testing. A milestone is not done while any of its rows is partial without a named gap.
Android slices
The Android app (android) was delivered in these slices.
| Slice | Content | State |
|---|---|---|
| A | Bionic build fixes, zero-timer fix, sparkles:android (logcat, assets, JNI worker, clipboard, text), spawn options | shipped |
| B | terminal.nix builder + plain-mode APK (NOD1–4, NOD8, NOD12, NOD14), soft keyboard, focus/stop handling (NOD9) | shipped |
| C | Bootstrap mode (NOD5–7): installer, download, extraction | shipped |
| D | Extra keys and ~/.termux appearance (NOD10, NOD11) | shipped |
| E | nix-on-droid side: app-id option, bootstrap for the new app, flake output building the APK, docs | shipped |
| F | Requests (NOD13) and the emulator test port | shipped |
| G | Android integration on from first boot; a socket path that fits a long package id (NOD15–NOD22) | partial |