Delivery
Roadmap
Each file tracks one slice of delivery. Front-matter status is one of planned, in-progress, shipped, partial. adrs lists the decisions in ../adr/ the work implements. Checkboxes mark what is verified in the repo, not what is merely written.
shipped 2 partial 5
| Workstream | Status | Tasks | Progress |
|---|---|---|---|
| WS01: Core: catalog, fuzzy search, frecency, config, themes | shipped | 6/6 | |
| WS02: Native Win32 UI and system tray | partial | 15/15 | |
| WS03: Starlark extension runtime and permissions | shipped | 5/5 | |
| WS04: Built-in providers | partial | 5/5 | |
| WS05: Marketplace and registry | partial | 4/4 | |
| WS06: Website, docs and CI | partial | 3/3 | |
| WS07: Packaging | partial | 3/3 |
01-core
WS01: Core: catalog, fuzzy search, frecency, config, themes
02-ui-tray
WS02: Native Win32 UI and system tray
- [x] Launcher window, GDI rendering, DPI scaling
- [x] Keyboard navigation, own text editing
- [x] Global hotkey (Alt+Space default)
- [x] Tray icon, menu, Explorer restart recovery, single instance
- [x] Permission consent dialog
- [x] Extension manager window
- [x] CLI and wiring (cmd/zagros)
- [x] Typing performance (see docs/ui.md, "Performance architecture")
- [x]
--trace/ZAGROS_TRACE=1timing log (trace.log) - [x] Async icons: letter tile first, one worker, deduplicated bounded queue, premultiplied DIB blit, cache kept across hide/show (128), trimmed after 5 min idle
- [x] Progressive results:
Catalog.QueryStream,core.Tiered(tier 0 inline, tier 1 debounced 40 ms with 1.5 s budget), stale-snapshot drop, one apply per 16 ms, selection kept by item ID - [x] Everything: in-process DLL, result reuse for extended and backspaced queries,
es.exeonly as a debounced, kill-on-cancel fallback - [x] Warm start: apps index, fonts, back buffer, shell icon init off the UI thread; "Indexing..." status and automatic re-run when the index lands
- [x] Stable window: resize only when the row count changes; GDI objects created once per face/size/DPI
- [x] UI-thread audit: tray file/config work moved to goroutines
- [x]
Verified: go build, go vet, unit tests, and zagros.exe --selftest (offscreen render at 96 and 168 DPI, a 50-keystroke burst with a 200 ms slow provider that fails on any paint over 50 ms or instant results later than 30 ms, permission dialog, manager, tray icon add/remove). Burst numbers on the dev machine: old wait-for-all behaviour 201 ms until anything shows; now results are painted within 2 ms of a keystroke (0.7 ms average) and the worst paint is 1.4 ms.
Not verified by hand (no interactive session): real keyboard and mouse use, Tab actions menu, IME, focus on show, fade, dialog clicks, right-click tray menu, balloons, Explorer-restart recovery, ext install end to end, a live typing session with --trace against real Everything and extensions, icons of network paths.
Known gaps: no .syso resource (exe file shows no icon in Explorer), icons use SHGetFileInfo only (no UWP icons), IME composition window not positioned at the caret, manager does not show per-extension settings and calls the extension admin synchronously on click, Ctrl+V reads the clipboard on the UI thread, systemIsDark reads the registry on each show when following Windows.
03-extensions
WS03: Starlark extension runtime and permissions
- [x] Manifest and zip install with zip-slip protection
- [x] Permission store and per-call checks
- [x] Host modules (http, fs, clipboard, proc, storage, crypto)
- [x] Provider adapter, hot reload, pack and validate
- [x] Extension docs and two examples
Notes:
- Tests pass for permission denial, zip-slip, step limit, timeout, install and consent flows.
-racewas not run (needs CGO). - The UI must supply a
Platform(clipboard, notifications) and aPermissionPrompter. - Manifest uses
[[permission_detail]]for reasons and[[settings]]for the settings schema.
04-builtin
WS04: Built-in providers
- [x] Apps (Start menu, Store apps)
- [x] Everything search
- [x] Calculator, units, text tools, passwords
- [x] System commands, windows, processes
- [x] Web search and aliases, clipboard history, emoji, help
Notes:
- Tests pass for calc, units, passwords and text tools. Apps ran on a dev machine (360 Start Menu entries found).
- Everything integration is untested against a real Everything install; only the "not found" path is verified.
- Clipboard history capture is untested against real clipboard changes.
- Executor must honour
Extra["confirm"]andExtra["nohistory"], and runFuncactions.
05-marketplace
WS05: Marketplace and registry
- [x] Registry format, schema and generator
- [x] Client: list, search, resolve, download with limits
- [x] github:owner/repo installs and update checks
Open items:
- Not run against real GitHub (tests use httptest servers).
tomlite.gois a small TOML subset parser andParseManifestassumes a manifest layout; reconcile withinternal/extand switch to BurntSushi/toml.- The app adapter from
ext.Managertomarket.Installeris not written yet. - [x] Starter content: 6+ themes and 4+ sample extensions in
marketplace/with registry entries (ADR 0012)
Starter content (ADR 0012): 7 themes and 6 extensions (wiki, hackernews, npm-search, weather, dictionary, snippets), all with registry entries. Tests validate every theme's contrast and run every extension against stubbed HTTP.
Still open:
- Theme install,
market list|searchand the Themes tab are wired (zagros theme install), but only smoke-tested offline. - HTTP fixtures are written from memory of each service's response shape; no live calls were made.
- Theme release-asset route has no test.
06-site
WS06: Website, docs and CI
- [x] Boxy-styled landing, docs, marketplace, decisions and roadmap pages
- [x] Pages, CI and release workflows
- [x] README and LICENSE
Notes:
- Site builds locally (25 pages, 0 broken internal links, Boxy lint 0 errors). The three workflows were written but never run on GitHub.
- Fallback docs under
site/content/contain claims to verify against the finished UI and built-ins (Alt+Space default, Tab opens actions menu, default web searches). release.ymlsets-X main.version;cmd/zagrosneeds aversionvariable.
07-packaging
WS07: Packaging
- [x] Scoop manifest (placeholder hashes)
- [x] Winget manifests (written, not validated with winget; ReleaseDate and hashes are placeholders)
- [x] Update script (not run yet)