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
| Tier | Meaning | Horizon |
|---|---|---|
| ๐ด P1 | High impact, reasonable complexity, core UX/CLI correctness | Next 1โ2 releases |
| ๐ P2 | Good value, moderate complexity, extends existing systems | Next 3โ4 releases |
| ๐ก P3 | Valuable for specific use cases, medium effort | Roadmap items |
| ๐ข P4 | Niche or higher complexity, community-driven | Future consideration |
| ๐ต P5 | Major architectural change, long-term vision | Future major version |
Master tracking list
๐ด P1 โ Next 1โ2 releases
- CLI
--updaterespectssettings.confโ--mirrorsopt-in mirror refresh usesselected_countries/mirror_count; newaur_helpersettings key honored by all CLI helper resolution (historic bug #57, closed; shipped forv0.8.3in PR #163 /dev/RELEASES/RELEASE_v0.8.3.md) - CLI
-R/ remove-from-file โ implemented with-Iparity (#93, closed; shipped forv0.8.3in PR #163 /dev/RELEASES/RELEASE_v0.8.3.md) - Honor
--config-dirโ process-wide override intheme::pathscovering config resolvers, caches (lists), and logs (shipped forv0.8.3in PR #163 /dev/RELEASES/RELEASE_v0.8.3.md) - Global
--jsonoutput โschema_versionenvelope for--search,--list,--news(shipped forv0.8.3in PR #163 /dev/RELEASES/RELEASE_v0.8.3.md;updates checkstill 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.3in PR #163 /dev/RELEASES/RELEASE_v0.8.3.md; richer dry-run/confirm UX remains P2) โ UX ยงU1 - Refactor: unify command execution โ shared
util::commandrunner (CommandRunner/SystemCommandRunner/CommandError+run_capture+binary_available);logic/preflight,logic/services, andutil/pacmandelegate; duplicated paru/yay probes consolidated (shipped forv0.8.3in 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 andpersist.rsflush fns are thin wrappers, on-disk format unchanged (shipped forv0.8.3in 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, granularcache 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,newssubcommands,files pacnew|pacsave,services affected,sandbox analyze,repo apply,aur scanbatch, 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_SONAMEreaders, on-disk soname map,.pkg.tar.zstextraction, 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
AppStateinto 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:
Commandenum + 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
PackageManagertrait; 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
makechrootpkgbuild 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)
| Issue | Topic | Tier |
|---|---|---|
| #145 | Mirror search/selection UI | ๐ก P3 |
| #140 | Focus/hover discoverability (tooltips) | ๐ P2 |
| #134 | Upgrades, rebuilds, conflicts umbrella | ๐ก P3 / ๐ข P4 |
| #131 | Distro-specific news | ๐ P2 |
| #130 | AUR maintainer tools, embedded wiki, multi-PM | ๐ข P4 / ๐ต P5 |
| #129 | Accessibility themes + system tray | ๐ก P3 / ๐ข P4 |
| #104 | Update GitHub-tracked packages | ๐ก P3 |
| #102 | Optional-dependency descriptions | ๐ก P3 |
| #99 | Service restart logic | ๐ก P3 |
| #98 | Transaction abort logic | ๐ก P3 |
| #97 | Config value validation | ๐ก P3 |
| #95 | Sequential multi-package scans | ๐ก P3 |
| #94 | parse_update_entry tests | ๐ก P3 |
| #159 | Executable 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.confvalues on load with clear diagnostics. parse_update_entrytests (#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-errorsfor structured errors: stable{"error":{"code","message","detail"}}). --output-format json|jsonl(jsonlfor large streams); optionalPACSEA_JSON=1env 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, effectiveprivilege_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 โ
SkimMatcherV2acceptable) - Incremental/dirty-region UI rendering (architectural, P5)
-
criterionbenches 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
- Unify command execution (P1): โ
shipped. Shared abstraction in
util/command.rs;logic/preflight/command.rsre-exports it,logic/services/command.rsandutil/pacman.rsdelegate, capability probes usebinary_available. Remaining inlineCommand::newquery sites (e.g.args/package.rs) can migrate opportunistically; interactive/PTY/platform-gated spawns stay separate by design. - 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. - Dedupe package validation (P2): six similar validators in
args/package.rs. util/config.rs(P2): adopt the existing string helpers in the 13 files with inline parsing, or delete the unused module.- 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
AppStateinto 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
Commandenum 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 (
ConfigEditorstate + keybind), General tab over existingsave_*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 tokeybinds.confwith round-trip tests - Phase 3 โ theme tab: edit canonical keys, validate via
try_load_theme_from_contentbefore 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_modeand 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-basedDT_NEEDED/DT_SONAMEreaders (src/soname/), unit tests on fixture ELFs incl. malformed/non-ELF; skiplinux-vdso.so.1-style virtuals; path-safety consistent withis_safe_abs_pathinvariants - On-disk soname map: walk
/usr/lib,/usr/lib32(stdread_diris enough), handle symlink chains, multilib arch-tagging, duplicate providers - Post-transaction SONAME extraction from
/var/cache/pacman/pkg/*.pkg.tar.zst(needstar+zstd/xzdeps or controlled subprocess) โ unlocks soundWillBreakAfterUpdate; reusefind_aur_package_filescan logic insrc/logic/preflight/metadata.rs - Consumer selection:
pacman -Ql/-Qostrategy with aggressive per-session caching - Preflight tab + i18n + event wiring; severity chips matching existing patterns; dry-run safe
-
SystemUpdateflow 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'ssogreplinks 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.