docs(packaging): document desktop GUI frontends and optdepends

The GUI frontends landed with README/CLI/operations docs but no packaging
coverage. Add a PACKAGING.md section with the command/script/requirement
table for both frontends, note why stdlib tkinter is still an optdepend
rather than a hard dependency, and record that packaging must not grant the
GUIs privileges beyond the operator's own account.

Add the matching PKGBUILD optdepends (`tk`, `pyside6`), plus
`python-pystray`/`python-pillow` for the tray applet, which were never
listed when it shipped. Also add `gui/` to the CLAUDE.md architecture notes
and state snapshot.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JX86xeoBJVBb16qHkDf53K
This commit is contained in:
Luna 2026-07-22 04:33:55 -07:00
parent 457c7604ba
commit 3dd82ab18b
No known key found for this signature in database
3 changed files with 38 additions and 1 deletions

View file

@ -87,6 +87,10 @@ Implemented investigation/response state:
runs `check --json` quick checks. Its logic modules (`tray/state.py`,
`actions.py`, `notify.py`) are GUI-free and tested; only `tray/app.py`
imports GUI libs, and the core agent stays stdlib-only.
- Optional windowed desktop dashboards mirror the same pattern:
`enodia-sentinel gui` (stdlib tkinter) and `enodia-sentinel gui-qt`
(`[qt]` extra with PySide6). Both are read-only over detection state, share
the GUI-free `gui/model.py`, and display response plans for review only.
- IPS behavior is currently explicit workflow: posture hardening plus reviewed
dry-run containment actions. There is no automatic inline blocking or silent
host mutation yet.
@ -156,6 +160,10 @@ Start with:
- `tray/` is the optional desktop tray frontend over the CLI and systemctl;
only `tray/app.py` may import `pystray`/`PIL` (enforced by an import-guard
test).
- `gui/` is the optional windowed desktop dashboard. `gui/model.py` is the
GUI-free presentation model over `tui.collect_model`; only `gui/app.py`
(tkinter) and `gui/qt_app.py` (PySide6, `[qt]` extra) import GUI libraries,
enforced by import-guard tests.
- `go-agent/` is the isolated Phase 1 sidecar with Go config, process-state,
detector, schema, and sweep-loop packages. It writes JSONL to stdout and
must not share or mutate Python daemon state during parity development.