Pacsea Roadmap

August 8, 2026 ยท View on GitHub

Last updated: 2026-07-31 (arch-toolkit migration reconciled against local/remote 0.3.0 source; other roadmap baselines unchanged)

This is the master tracking document for planned implementations. It replaces and consolidates former planning docs (FEATURE_PRIORITY.md, CLI_POSSIBLE_COMMANDS.md, CLI_LIBRARY_INTEGRATORS.md, IMPLEMENTATION_PLAN_arch-toolkit.md, IMPLEMENTATION_PLAN_tui_integrated_config_editing.md, improvement_suggestions.md, pacsea_soname_plan.md, PERFORMANCE_IMPLEMENTATION_PRIORITY.md, REFACTORING_EVALUATION.md, ARCHITECTURE_OTHER.md), keeping only open work. Shipped items were dropped; see CHANGELOG.md for release history. Large initiatives may have one canonical execution plan under plans/planned/; this roadmap links to that plan instead of duplicating its TODOs.

How to track:

  • Check off roadmap items (and note the release/PR) when they ship.
  • Items carry a priority tier and, where one exists, a GitHub issue link.
  • Detail sections hold concise context or a pointer to the initiative's sole canonical plan.

Priority tiers

TierMeaningHorizon
๐Ÿ”ด P1High impact, reasonable complexity, core UX/CLI correctnessNext 1โ€“2 releases
๐ŸŸ  P2Good value, moderate complexity, extends existing systemsNext 3โ€“4 releases
๐ŸŸก P3Valuable for specific use cases, medium effortRoadmap items
๐ŸŸข P4Niche or higher complexity, community-drivenFuture consideration
๐Ÿ”ต P5Major architectural change, long-term visionFuture major version

Master tracking list

๐Ÿ”ด P1 โ€” Next 1โ€“2 releases

  • CLI --update respects settings.conf โ€” --mirrors opt-in mirror refresh uses selected_countries/mirror_count; new aur_helper settings key honored by all CLI helper resolution (historic bug #57, closed; shipped for v0.8.3 in PR #163 / dev/RELEASES/RELEASE_v0.8.3.md)
  • CLI -R / remove-from-file โ€” implemented with -I parity (#93, closed; shipped for v0.8.3 in PR #163 / dev/RELEASES/RELEASE_v0.8.3.md)
  • Honor --config-dir โ€” process-wide override in theme::paths covering config resolvers, caches (lists), and logs (shipped for v0.8.3 in PR #163 / dev/RELEASES/RELEASE_v0.8.3.md)
  • Global --json output โ€” schema_version envelope for --search, --list, --news (shipped for v0.8.3 in PR #163 / dev/RELEASES/RELEASE_v0.8.3.md; updates check still future) โ†’ CLI ยงC5
  • Preflight guardrails โ€” pacman db-lock (blocks, CLI + TUI), disk space and sync-db staleness warnings with actionable fixes (shipped for v0.8.3 in PR #163 / dev/RELEASES/RELEASE_v0.8.3.md; richer dry-run/confirm UX remains P2) โ†’ UX ยงU1
  • Refactor: unify command execution โ€” shared util::command runner (CommandRunner/SystemCommandRunner/CommandError + run_capture + binary_available); logic/preflight, logic/services, and util/pacman delegate; duplicated paru/yay probes consolidated (shipped for v0.8.3 in PR #163 / dev/RELEASES/RELEASE_v0.8.3.md; interactive/PTY spawns intentionally stay separate) โ†’ Refactoring ยงR1
  • Refactor: consolidate cache modules โ€” shared app/cache_common.rs (match modes, load/save, signatures); the four cache modules and persist.rs flush fns are thin wrappers, on-disk format unchanged (shipped for v0.8.3 in PR #163 / dev/RELEASES/RELEASE_v0.8.3.md) โ†’ Refactoring ยงR1

๐ŸŸ  P2 โ€” Next 3โ€“4 releases

  • Button/focus tooltips โ€” contextual hints for discoverability (#140) โ†’ Features ยงF2
  • Distro-specific news feeds โ€” EndeavourOS, Manjaro, Garuda, CachyOS (#131) โ†’ Features ยงF3
  • Richer dry-run output โ€” conflicts, reverse deps/orphans, rough size/time estimate for batch and direct flows โ†’ UX ยงU1
  • Unified confirm UX โ€” one "what will happen" summary with per-item overrides beyond preflight-only views โ†’ UX ยงU1
  • CLI scripting surface โ€” doctor, which-helper, updates check, pkg show/pkg outdated, completions <shell> โ†’ CLI ยงC2
  • CLI TUI-parity โ€” preflight install|remove|update, pkgbuild check, repo list|validate|diff, aur vote|unvote|ssh-setup โ†’ CLI ยงC2
  • CLI launch/install refinements โ€” --mode package|news, --select <pkg>, --no-mouse/--mouse, -y/--refresh, --install + --as-deps/--needed/--aur-only/--repo-only, granular cache list/cache clear <kind> โ†’ CLI ยงC2
  • Refactor: dedupe package validation โ€” six similar validators in args/package.rs โ†’ shared helpers โ†’ Refactoring ยงR1
  • Refactor: adopt or remove util/config.rs โ€” 13 files with inline string parsing vs unused utility โ†’ Refactoring ยงR1
  • Config editor Phase 1 โ€” settings-center modal shell + General tab (boolean/string keys, dry-run gated) โ€” shipped in PR #161 as a dedicated AppMode::ConfigEditor โ†’ Config editing ยงE1

๐ŸŸก P3 โ€” Roadmap items

  • Mirror search & selection UI โ€” interactive browser with country/speed filters and mirror stats (#145) โ†’ Features ยงF4
  • Update grouping by criticality โ€” kernel/systemd/core vs regular packages in update preview (part of umbrella #134) โ†’ Features ยงF5
  • Service restart guidance after updates (#99) โ†’ Features ยงF5
  • Transaction abort / cancellation UX (#98) โ†’ Features ยงF5
  • Sequential multi-package AUR scans (#95) โ†’ Features ยงF6
  • Optional-dependency descriptions (ALPM/AUR) (#102) โ†’ Features ยงF6
  • Update packages tracked via GitHub upstreams (#104) โ†’ Features ยงF6
  • Accessibility themes โ€” high-contrast/WCAG palette, ASCII symbol fallbacks (#129) โ†’ Features ยงF7
  • Config validation for config file values (#97) โ†’ Features ยงF6
  • Tests for parse_update_entry (#94) โ†’ Features ยงF6
  • Normalize executable bits on Python helper scripts (#159) โ†’ Features ยงF6
  • Batch-flow hardening โ€” removal guards (protected packages, orphan preview, blocked-item reasons), update retry/reboot scheduling, install continue-on-failure, downgrade provenance/pre-download, startup popup queue/offline notice โ†’ UX ยงU2
  • CLI extended queries โ€” pkg files|owns|deps|provides|conflicts|orphans|foreign|native|group|required-by, news subcommands, files pacnew|pacsave, services affected, sandbox analyze, repo apply, aur scan batch, transaction helpers (sync, upgrade --aur-only, downgrade, reinstall, clean) โ†’ CLI ยงC3
  • Config editor Phase 2โ€“3 โ€” keybind capture + persistence; theme tab with whole-file pre-commit validation โ€” shipped in PR #161 โ†’ Config editing ยงE1
  • Config editor follow-up โ€” repos.conf/Advanced editing, explicit live-apply/reload semantics, and privilege-sensitive setting gates โ†’ Config editing ยงE2
  • Soname Layer 1 โ€” DT_NEEDED/DT_SONAME readers, on-disk soname map, .pkg.tar.zst extraction, Preflight tab โ†’ Soname ยงS1
  • Performance: open items โ€” map/B-tree package index (if profiling supports), streaming search results, stronger lazy loading, remaining .iter().any() tightening, criterion benches โ†’ Performance ยงP1
  • Architecture: incremental refactors โ€” split AppState into domain substates, group preflight channels, extract pure logic from fat handlers โ†’ Refactoring ยงR2

๐ŸŸข P4 โ€” Future consideration

  • Dependency conflict resolution wizard โ€” interactive conflict handling (part of #134) โ†’ Features ยงF5
  • Custom upgrade commands / pre-post hooks (part of #134) โ†’ Features ยงF5
  • System tray / panel integration (#129) โ†’ Features ยงF7
  • AUR maintainer tools โ€” PKGBUILD updates, pushing, co-maintainers (part of #130)
  • CLI niche commands โ€” config get|set|validate, theme show, keybinds list, --print-default-config, man, --locale, unlock (heavily gated) โ†’ CLI ยงC4
  • Architecture: Command enum + query layer โ€” explicit user-action command routing (undo/macro-friendly), memoized computed properties โ†’ Refactoring ยงR2
  • Config editor Phase 4 โ€” polish: reset row (Ctrl+Z), mtime conflict warning, effective-config export (Ctrl+E), help-overlay section โ€” shipped in PR #161 โ†’ Config editing ยงE1
  • Soname Layer 2 (early) โ€” repo-wide provided-sonames database, reverse dependency index, cascade calculator โ†’ Soname ยงS2

๐Ÿ”ต P5 โ€” Long-term vision

  • v1.0.0 stable release โ€” polish, stability, documentation, community feedback pass
  • Embedded Arch wiki viewer (part of #130)
  • Multi package manager support โ€” apt, dnf, Flatpak behind a PackageManager trait; Flatpak first since it coexists with pacman (#130, v2.0 scale)
  • Subcommand-first CLI redesign โ€” pacsea pkg|aur|repo|cache|config โ€ฆ with legacy flags as hidden aliases โ†’ CLI ยงC4
  • Soname Layer 2 (late) โ€” mirror-sync watcher with automated cascade reporting; optional makechrootpkg build verification โ†’ Soname ยงS2
  • UI: incremental/dirty-region rendering โ€” architectural change โ†’ Performance ยงP1
  • Architecture: TEA / CQRS-lite re-evaluation โ€” only if a large refactor is approved; event sourcing / full Redux / component frameworks remain not recommended โ†’ Refactoring ยงR2

GitHub issue cross-reference (open, last synced 2026-07-03; shipped issues removed 2026-07-05)

IssueTopicTier
#145Mirror search/selection UI๐ŸŸก P3
#140Focus/hover discoverability (tooltips)๐ŸŸ  P2
#134Upgrades, rebuilds, conflicts umbrella๐ŸŸก P3 / ๐ŸŸข P4
#131Distro-specific news๐ŸŸ  P2
#130AUR maintainer tools, embedded wiki, multi-PM๐ŸŸข P4 / ๐Ÿ”ต P5
#129Accessibility themes + system tray๐ŸŸก P3 / ๐ŸŸข P4
#104Update GitHub-tracked packages๐ŸŸก P3
#102Optional-dependency descriptions๐ŸŸก P3
#99Service restart logic๐ŸŸก P3
#98Transaction abort logic๐ŸŸก P3
#97Config value validation๐ŸŸก P3
#95Sequential multi-package scans๐ŸŸก P3
#94parse_update_entry tests๐ŸŸก P3
#159Executable bits on helper scripts๐ŸŸก P3

Recently shipped (for context): v0.8.3 release notes cover PR #163's CLI JSON / -R file / --config-dir / guardrail / command-cache refactor batch (dev/RELEASES/RELEASE_v0.8.3.md); PR #161 completed integrated config editing Phases 1โ€“4; PR #164 refreshed Hungarian translations. Earlier: custom repos + PKGBUILD checks + AUR voting (v0.8.0, #132/#133/#137); adjustable pane heights and pane order via main_pane_order + per-role min/max (v0.8.2, #135/#136).


Detail sections

Features

F2. Tooltips

Tooltip component appearing after ~500 ms hover/focus, positioned near the focused element, descriptions pulled from the i18n system. Help overlay (?) already covers keybinds.

F3. Distro news

Add RSS URLs per distro (EOS, Manjaro, Garuda, CachyOS); detect current distro from /etc/os-release (already in src/logic/distro.rs); allow switching source or combined feed; handle per-source date formats. Infrastructure: src/sources/news.rs.

F4. Mirror browser

Modal over existing mirror data (src/index/mirrors.rs, repository/mirrors.json): search, country/speed filtering, last-sync/protocol columns, multi-select with ranking.

F5. Upgrades umbrella (#134)

  • Criticality grouping: classify critical packages (linux, systemd, glibc, โ€ฆ), group/sort in the update modal, visual indicators, reboot recommendation.
  • Service restart guidance (#99): identify units needing restart after updates; show a restart plan (dry-run capable).
  • Transaction abort (#98): cancellation UX for running transactions.
  • Conflict wizard (P4): parse pacman conflict output, offer interactive resolution; risky โ€” design carefully.
  • Custom upgrade commands (P4): user-defined pre/post hooks; mind arbitrary-command security.

F6. Smaller tracked features

  • Sequential multi-package AUR scans (#95)
  • Optional-dep descriptions (#102) โ€” fetch/show descriptions for optional dependencies from ALPM/AUR metadata.
  • GitHub-tracked package updates (#104)
  • Config value validation (#97) โ€” validate settings.conf/theme.conf/keybinds.conf/repos.conf values on load with clear diagnostics.
  • parse_update_entry tests (#94)
  • Helper script executable bits (#159)

F7. Accessibility (#129)

theme-high-contrast.conf with WCAG-compliant colors, ASCII alternatives to Unicode symbols, screen-reader testing where terminals allow. System tray / panel integration tracked in the same issue (P4).

CLI

Current implemented surface lives in src/args/definition.rs + handlers under src/args/. Note: src/args/args.rs duplicates the Args struct (incl. an unexported --refresh); treat as historical until reconciled.

C2. Scripting & parity subcommands (P2)

doctor (preflight: pacman/helper/curl/privilege tool/config sanity), which-helper, updates check [--json], pkg show|outdated, completions bash|zsh|fish|elvish, preflight install|remove|update, aur vote|unvote|ssh-setup (TUI parity), pkgbuild check [--tool shellcheck], repo list|validate|diff, launch flags --mode package|news / --select <pkg> / --no-mouse/--mouse, -y/--refresh, cache list / cache clear news|details|all, --install + --as-deps / --needed / --aur-only / --repo-only.

C3. Roadmap subcommands (P3)

Extended pkg queries (files, owns, deps, provides, conflicts, orphans, foreign, native, group, required-by, structured search); news fetch|list|show|mark-read|mark-unread and advisories list; files pacnew|pacsave|merge, backup list|create, db sync-status; services affected / services restart --dry-run (#99); sandbox analyze, security advisories --installed; repo apply [--all], repo key-fetch, repo foreign-overlap; aur scan batch (#95), aur comments|pkgbuild fetch|srcinfo|vote-status; transaction helpers sync, upgrade --aur-only, downgrade, reinstall, clean โ€” all respecting --dry-run.

C4. Niche commands (P4) and structural redesign (P5)

config path|validate|get|set (prefer validate before mutation), theme show, keybinds list, --print-default-config, man, --locale / i18n list-locales, news export, gated unlock/db-unlock, plan apply, --restore-session. P5: promote a subcommand-first layout (pacsea tui|search|install|remove|update|news|pkg|aur|repo|cache|config โ€ฆ) with legacy flags kept as hidden aliases during migration.

C5. Integrator contracts

For crate consumers (src/lib.rs) and subprocess integrators:

  • Single JSON envelope with top-level schema_version, bumped on breaking changes.
  • Parseable payloads only on stdout; diagnostics on stderr (--json-errors for structured errors: stable {"error":{"code","message","detail"}}).
  • --output-format json|jsonl (jsonl for large streams); optional PACSEA_JSON=1 env inherit.
  • No TTY assumptions; respect NO_COLOR / --no-color.
  • Introspection (P2/P3): api version (binary/crate version, json_schema_version, target triple), api capabilities (tool presence, OS family, effective privilege_tool/helper), api paths (resolved config/cache/log dirs), api exit-codes (documented exit-code map).

Prioritization axes when picking CLI work: scripting value โ†’ TUI parity โ†’ low coupling (thin wrappers over logic::*) โ†’ safety (--dry-run + privilege rules for anything touching pacman.conf, keys, or systemctl).

UX / workflow improvements

Diagrams: dev/WORKFLOWS/developer/*.mmd (mirrored under manager/).

U1. Cross-cutting preflight

  • Disk space check before install/remove/update with actionable hints (logic/preflight/guardrails.rs)
  • Mirror health check + fix guidance before risky operations (sync-db staleness heuristic; deeper mirror-status checks can build on it)
  • Pacman db-lock detection + what to do (wait, remove stale lock, โ€ฆ) โ€” blocks CLI and TUI transactions with guidance
  • Richer dry-run: conflicts, reverse deps/orphans, rough size/time estimate
  • Unified "what will happen" confirm + optional per-item overrides
  • Resilience: lock-aware retry, mirror/helper fallback UX (beyond silent paru/yay fallback), links to structured logs
  • State recovery: resumable batches, rollback hints after partial failure

U2. Per-flow improvements

Removal (batch): base/protected-package guard with typed confirm or hard block; orphan cleanup preview + staged cleanup; blocked-item reasons surfaced with guided retry; parallel dry-run dep checks where safe. System update: optional pre-snapshot/rollback note + disk/mirror pre-checks; conflict auto-scope/assist; guided retry (alternate helper/mirror) with log reference; reboot scheduling (now / later / remind). Install (batch): continue-on-failure toggle + retry actions; stronger parallel prefetch/reuse of resolved deps; optional post-install hooks or checklist. Install (direct from results): clear metadata errors with retry/alternate source; inline dry-run deps/conflicts when bypassing full preflight; explicit UI retry keeping selection. Downgrade (batch): cache versions/signatures + provenance/integrity before confirm; rollback/package-hold guidance after success; pre-download + verify before mutation; skip/unhold suggestions when the target is unavailable. App startup: single blocking popup queue ordered by priority; remember modal dismissals per session; stale-cache notice with last refresh + optional background refresh; offline notice with limited actions + retry timer.

Performance

P1. Open optimizations

  • OfficialIndex.pkgs: Vec โ†’ map/B-tree keyed structure only if profiling shows benefit (repeated sorts today)
  • Stream/progressively expose search results to the UI (currently collect-then-render; network latency dominates โ€” low priority)
  • Stronger lazy/on-demand index loading (beyond "load from disk when empty")
  • Tighten remaining .iter().any() / retain patterns in installed/removal lists
  • Optional trie/BK-tree for fuzzy search (low priority โ€” SkimMatcherV2 acceptable)
  • Incremental/dirty-region UI rendering (architectural, P5)
  • criterion benches for hot paths before optimizing (seed 1K/10K/100K packages; watch for O(nยฒ) scaling)

Already implemented (kept out of the list): name-index HashMap, list HashSets, search result memoization, sort-cache O(n) reordering, LRU recent searches, PKGBUILD parse disk-LRU, incremental PKGBUILD highlighting, ring prefetch, PKGBUILD fetch rate limits.

Refactoring & architecture

R1. Priority refactors

  1. Unify command execution (P1): โœ… shipped. Shared abstraction in util/command.rs; logic/preflight/command.rs re-exports it, logic/services/command.rs and util/pacman.rs delegate, capability probes use binary_available. Remaining inline Command::new query sites (e.g. args/package.rs) can migrate opportunistically; interactive/PTY/platform-gated spawns stay separate by design.
  2. Consolidate cache modules (P1): โœ… shipped. Shared app/cache_common.rs (signatures, exact/subset/intersection match modes, load/save, generic flush); the four cache modules are thin wrappers with unchanged public APIs and byte-compatible files.
  3. Dedupe package validation (P2): six similar validators in args/package.rs.
  4. util/config.rs (P2): adopt the existing string helpers in the 13 files with inline parsing, or delete the unused module.
  5. Lower-effort items (P3+): modal/handler structure and event-routing cleanup; JSON load/save helpers; temp-path test utility; handler HashSet extraction.

R2. Architecture backlog

Incremental, none mandated:

  • Short-term: split AppState into domain substates (search, install, preflight, ui, โ€ฆ) without breaking runtime/message flow; group preflight channels into a struct; extract pure business logic from fat handlers into testable modules.
  • Medium-term: explicit user-action Command enum routing all mutations (undo/macro-friendly); query layer / memoized computed properties on hot paths.
  • Long-term (optional): revisit TEA vs CQRS-lite only if a large refactor is approved. Event sourcing, full Redux, and component frameworks were evaluated and are not recommended.

arch-toolkit migration

The sole active checklist is plans/planned/arch-toolkit-0.3.0-integration.md. It targets the newest 0.3.0 source line, reconciles the deleted historical plan and the archived toolkit Phase 6 handoff, and replaces the stale v0.2.x, repos-apply, and system::privilege assumptions previously recorded here. This section intentionally contains no duplicate TODOs.

Integrated config editing (TUI)

Let users view/change configuration in-app. Current state: dedicated AppMode::ConfigEditor with file list, searchable key list, details pane, and edit popups; settings.conf, keybinds.conf, and theme.conf are editable end-to-end, while repos.conf is visible but still disabled as follow-up work. Preserve comments and unknown keys (line-oriented patch strategy); respect dry-run (no writes, clear message). Raw buffer editing remains a later option. Key code: src/state/config_editor.rs, src/events/modals/config_editor.rs, src/ui/modals/config_editor/, src/theme/config/{schema,patch,settings_save,skeletons,theme_loader}.rs, src/theme/settings/parse_keybinds.rs, src/theme/types.rs.

E1. Phased rollout

  • Phase 1 โ€” editor shell (ConfigEditor state + keybind), General tab over existing save_* helpers, read-only display of active config paths, dry-run gating + error surfacing
  • Phase 2 โ€” keybinds tab: render from Settings.keymap, capture mode (swallow keys until chord/Esc; conflict validation), persist to keybinds.conf with round-trip tests
  • Phase 3 โ€” theme tab: edit canonical keys, validate via try_load_theme_from_content before save, keep last good theme in memory; optional revert-to-skeleton (per-row reset via Ctrl+Z shipped instead)
  • Phase 4 โ€” polish: undo/reset row, mtime-changed warning, export effective config, help overlay entries for new keybinds

Shipped support: static editable-schema tables, line-oriented patch helpers, dry-run no-write behavior, key-capture validation, same-scope keybind conflict checks, theme pre-commit validation, mtime conflict warning/explicit overwrite, row reset, help-overlay entries, and effective-config export.

E2. Follow-up work

  • Enable repos.conf/Advanced editing only after apply safety, path validation, and dry-run semantics are specified for repository mutations.
  • Make live-apply/reload behavior explicit per setting family (theme already validates before commit and reloads the palette; remaining settings/keybind behavior should be documented in schema/UI copy).
  • Gate or warn on privilege/security-sensitive settings such as auth_mode and privilege-tool related keys.
  • Decide whether raw buffer editing is still worth adding after the structured editor shipped.

Soname-aware dependency checking

Detect DT_NEEDED vs on-disk SONAME mismatches before transactions commit. Linux-only (#[cfg(target_os = "linux")]). No soname module exists yet; goblin not in Cargo.toml. Primary integration point: Modal::Preflight (src/state/modal.rs, src/ui/modals/preflight/, src/events/preflight/) โ€” new Soname tab or Summary panel, reusing the lazy tab-sync pattern. Never run ldd on untrusted paths (it executes loaders); parse ELF in-process.

S1. Layer 1 โ€” end-user protection

  • goblin-based DT_NEEDED/DT_SONAME readers (src/soname/), unit tests on fixture ELFs incl. malformed/non-ELF; skip linux-vdso.so.1-style virtuals; path-safety consistent with is_safe_abs_path invariants
  • On-disk soname map: walk /usr/lib, /usr/lib32 (std read_dir is enough), handle symlink chains, multilib arch-tagging, duplicate providers
  • Post-transaction SONAME extraction from /var/cache/pacman/pkg/*.pkg.tar.zst (needs tar+zstd/xz deps or controlled subprocess) โ€” unlocks sound WillBreakAfterUpdate; reuse find_aur_package_file scan logic in src/logic/preflight/metadata.rs
  • Consumer selection: pacman -Ql/-Qo strategy with aggressive per-session caching
  • Preflight tab + i18n + event wiring; severity chips matching existing patterns; dry-run safe
  • SystemUpdate flow parity decision (route through Preflight or inline warning)

S2. Layer 2 โ€” ecosystem tooling

  • Repo-wide provided-sonames database (scan local mirror .pkg.tar.*, or ingest Arch's sogrep links DBs; SQLite/flat index refreshed post-rsync)
  • Reverse dependency index (soname โ†’ dependent packages; richer than per-query sogrep)
  • Cascade calculator (BFS/DFS over soname edges; complements arch-rebuild-order's syncdb view)
  • Mirror-sync watcher + automated soname-bump reports (the novel piece)
  • Build verification via makechrootpkg (stretch; separate daemon/subcommand territory)

Deps to pin at implementation time: goblin (verify elf32/elf64/endian_fd features), tar + zstd/xz, optional rusqlite for Layer 2.


Update this file whenever roadmap work ships or new work is planned. Security remediation work is tracked separately in SECURITY_REMEDIATION_GUIDE.md (mandated by CLAUDE.md); demo storyboard in dev/pacsea_demo_storyboard.md; current architecture reference in dev/ARCHITECTURE_CURRENT.md.