5.2 KiB
5.2 KiB
| task_id | title | status | priority | phase | created | references |
|---|---|---|---|---|---|---|
| souveraine-surface-001 | QuickShell surface package — explicit, reversible desktop adoption | in_progress | high | delivery | 2026-07-13 | docs/tasks/souveraine-cicd-pipeline.md, surfaces/quickshell/deploy.sh |
QuickShell Surface Package
Outcome
souveraine remains the non-visual substrate package: server binary, user
unit, and no ownership of ~/.souveraine or ~/.config. The QuickShell body
splits by device profile: laptop and phone share Souveraine's channel protocol,
not a top bar, dock, layout, or interaction density. Installing/upgrading a
package never silently replaces a person's ii shell, top bar, dock, or local
QuickShell changes.
What exists now
- The running laptop package ships only
/usr/bin/souveraine, its user unit, and license files. It correctly updates with pacman, but contains no QML. surfaces/quickshell/is the canonical source for shared channel code and a currently mixed development overlay. It is not a universal surface manifest:pill/shell.qmland the compact rotating phone bar do not belong on a laptop, whose bar intentionally has more visible controls.deploy.shis the development deployment path; it manages symlinks and retains one.upstreamcopy for ordinary upstream files.- The laptop had an older
AiChat.qml; its/agentand/resumecommands were absent even though the server andAi.qmlwere current. The live panel is now linked to the canonical file, with the prior copy backed up.
Safety contract
- Pacman places only package-owned assets under
/usr/share/souveraine/and an adoption tool under/usr/bin/or/usr/libexec/. - The package name and manifest are profile-specific: at minimum
souveraine-surface-laptopandsouveraine-surface-phone; shared QML lives in a common asset layer. A laptop installer never considers phone files, and vice versa. - The adoption tool defaults to a dry run: it names every managed, new, and replacement target.
- A normal
--applysucceeds only when targets are new or already managed by Souveraine. - Replacements require
--adopt; each conflicting file or symlink is copied to a timestamped*.pre-souveraine-*backup before the overlay changes it. --uninstallrestores the original.upstreamfiles where available and otherwise removes only Souveraine-managed symlinks. It never removes user data, agent memory, or unrelated ii files.- Package upgrades do not run adoption automatically. They update the assets; the user reviews and applies their desktop changes explicitly.
First cut — in progress
- Expose
deploy.sh --manifestso package tooling and the developer path share a single authoritative list of managed files. - Add
scripts/install-quickshell-surface.shas a safe inventory tool. Its apply/adopt mode is deliberately disabled until profiles exist; it cannot make the mixed overlay look universally safe. - Split the current development manifest into
common,laptop, andphonemanifests. Classify every file by actual layout and interaction contract; do not infer a laptop layout from phone work or vice versa. - Re-enable safe apply/adopt only against a selected profile. Exercise its dry-run, clean apply, conflict refusal, adoption backup, and uninstall behaviour in disposable configs for both devices.
- Add a targeted
--only <target>mode within the chosen profile so a small repair such asAiChatcan be adopted without touching a bar or dock.
Package design — next cut
- Add
packaging/arch/PKGBUILD.surface-common,.surface-laptop, and.surface-phone(arch=('any')). The common package supplies the channel code; each profile supplies only its own QML/assets and adoption manifest. - Make the command resolve packaged assets first, with a checked-out repo retained as an explicit developer override.
- Extend the CI release job to build/sign/publish the surface package once per edge release alongside both binary packages.
- Add a narrow integration test using a temporary
$XDG_CONFIG_HOME; verify no automatic overwrite and that--adoptpreserves every conflict. - On phone and laptop, install the appropriate profile package with pacman, run the profile preview, then choose adoption deliberately. The phone's existing live symlink development loop remains valid until this proves itself.
Later: desktop profile
souveraine-desktop is a meta-package that depends on the substrate and
surface packages. It does not adopt the surface itself; its post-install
message directs the user to the preview command. This gives a future fresh
machine one clear install target without sacrificing ownership of its shell.
Acceptance
pacman -S souverainenever changes a QuickShell file.pacman -S souveraine-surface-laptopandpacman -S souveraine-surface-phonenever change a QuickShell file.- The adoption command clearly reports its plan and refuses unapproved replacements.
- A deliberate profile adoption makes
/agent,/resume, agent selection, and the Souveraine panel available against the locally running package service without importing another device's bar or dock. - An upgrade and uninstall preserve user settings and agent state.