mirror of
https://github.com/PR0M3TH3AN/SeedPass.git
synced 2026-10-30 17:32:04 +00:00
65 lines
7.4 KiB
Markdown
65 lines
7.4 KiB
Markdown
# Memory Update — SeedPass TUI v3 Development — 2026-03-03
|
|
|
|
## Key findings
|
|
- Nostr Relay Management is now implemented in TUI v3 (`src/seedpass/tui_v3/screens/relays.py`) via the `relay-list` palette command.
|
|
- Textual UI updates from asynchronous workers requires executing from the main thread using `self.app.call_from_thread()`, otherwise you will encounter unexpected thread safety warnings crashing the app. This was correctly used for `sync_service.sync()` background operations.
|
|
- The `pytest` execution of parity tests natively sources from the local environment. Ensure testing inside the virtual environment properly maps module paths (e.g., using `PYTHONPATH=. pytest ...` from the `src` directory) when `src-layout` paths conflict with old `site-packages` installs, which causes confusing `AttributeError` tracebacks on customized files.
|
|
- The `SettingsScreen` and TUI v3 components now rely on the standard Textual `app.notify()` for the "Unified snackbar/toast system" — giving uniform, built-in styling for service feedback.
|
|
|
|
## Patterns / reusable knowledge
|
|
- Direct configuration modification of arrays (like `relays`) should favor using dedicated service adapters over direct `ConfigService` modifications if they aren't fully wrapped for list operations. Using `app.services["nostr"]` for relay additions/removals is the preferred pattern.
|
|
- The cohesive retro palette across the TUI v3 mockups hinges on high-contrast `#999999` backgrounds, `#000000` text/borders, and crisp `#ffffff` inputs. All standalone screens (`SettingsScreen`, `MaximizedInspectorScreen`, `AddEntryScreen`, etc.) must strictly conform to these CSS constants rather than the legacy v2 neon green (`#58f29d`, `#080a0c`).
|
|
- In automated Textual UI interactive parity testing (`interactive_agent_tui_test.py`), avoid explicitly sending `await pilot.press('ctrl+p')` if standard textual palettes shadow custom `CommandPalette` widgets. Directly calling `app.action_open_palette()` guarantees stable integration assertions.
|
|
- When mirroring nested manager logic (like BIP-85 sub-account loads), UI "breadcrumbs" should derive their explicit path strings from parsing the manager's `profile_stack` via a decoupled reactive property (e.g. `active_breadcrumb`), rather than mutating the core `active_fingerprint` references used for caching and view filtering.
|
|
|
|
## Session addendum — os-eco setup (2026-03-03)
|
|
- `ov init -y` successfully bootstraps `.overstory/`, `.mulch/`, `.seeds/`, `.canopy/`, and also auto-appends onboarding blocks to `CLAUDE.md` and merge rules to `.gitattributes`.
|
|
- For this Python repo, `.overstory/config.yaml` should be adjusted from Bun defaults to `canonicalBranch: beta` and Python quality gates (`pytest`, `scripts/run_ci_tests.sh`) to avoid incorrect guardrails.
|
|
- Overstory/Codex model handling in this repo required follow-up validation; see the later "Overstory/Codex spawn fix" section for the corrected working configuration.
|
|
|
|
## Session addendum — Overstory/Codex spawn fix (2026-03-03)
|
|
- Reproduced `ov sling` failure: `Failed to send keys to tmux session ... can't find pane` after a clean launch path.
|
|
- Root cause was invalid Codex model aliases in `.overstory/agent-manifest.json` (`haiku/sonnet/opus`) causing `codex exec` to exit immediately; `codex exec --model sonnet` fails with unsupported-model error on ChatGPT-backed Codex accounts.
|
|
- Working configuration on this machine:
|
|
- Keep `.overstory/config.yaml` `models:` empty (Overstory v0.7.9 rejects bare `gpt-*` entries in this block unless provider-prefixed, which Codex account mode does not accept).
|
|
- Set each agent `model` in `.overstory/agent-manifest.json` to `gpt-5.3-codex`.
|
|
- Secondary requirement: tmux server must be running before sling (`tmux new-session -d -s ov-bootstrap 'bash'` is enough); otherwise Overstory errors with `Tmux server is not running`.
|
|
- Added a dedicated personal swarm runbook at repo root: `OVERSTORY_SWARM_TUTORIAL.md` with verified commands, failure modes, and recovery flow for this SeedPass setup.
|
|
|
|
## Session addendum — TORCH -> Mulch migration + repo health scan (2026-03-03)
|
|
- Migrated high-signal operational/project learnings into Mulch domain `seedpass` (`.mulch/expertise/seedpass.jsonl`) including Overstory/Codex model pitfalls, tmux bootstrap convention, TUI v3 threading/notification patterns, and runbook reference.
|
|
- Full CI-equivalent run currently reports `1057 passed, 16 skipped, 7 failed`; failures are concentrated in `src/tests/test_tui_v2_textual_interactions.py` and are mostly copy/text assertions or profile-tree expectation drift.
|
|
- Determinism regression caused by tuple arity mismatch was fixed by updating `src/tests/test_deterministic_artifact_regression.py` to unpack `derive_pgp_key` as `(priv, pub, fp)` and correcting `derive_pgp_key` type/docs in `src/seedpass/core/password_generation.py`.
|
|
- Local quality signal gaps: `black --check .` currently reports 20 files needing formatting, and `ruff`/`mypy` are configured in project metadata or pre-commit but not installed/gated in the current local environment by default.
|
|
|
|
## Session addendum — v2/v3 gate and hardening updates (2026-03-03)
|
|
- Repaired 7 failing TUI v2 interaction regressions in `src/seedpass/tui_v2/app.py`:
|
|
- action-strip click coordinate handling (zero-based)
|
|
- settings shortcut restored to palette prefix behavior (`setting-`)
|
|
- managed-load validation message compatibility
|
|
- profile-switch now auto-expands active profile-tree branch
|
|
- sensitive confirmation status text normalized to include "requires confirmation"
|
|
- Added TUI v3 focused coverage gate script: `scripts/tui3_coverage_gate.sh` and wired it into `scripts/run_ci_tests.sh` behind `TUI3_COVERAGE_GATE` (default on).
|
|
- Hardened TUI v3 sensitive payload resolution (`src/seedpass/tui_v3/app.py`) for legacy service compatibility:
|
|
- PGP payloads may be 2-tuple or 3-tuple.
|
|
- Seed getters may accept `(entry_id)` or `(entry_id, parent_seed)`.
|
|
- Added regression tests in `src/tests/test_tui_v3_parity.py` to lock this compatibility behavior.
|
|
- Current CI-equivalent state:
|
|
- Full main suite passes (`1064 passed, 16 skipped`), but existing `tui2_coverage_gate.sh` still fails `src/seedpass/core/api.py >= 85` on its focused subset (`68.79%`) and needs separate gate policy/workload adjustment.
|
|
|
|
## Session addendum — v3 grid focus + graph navigation baseline (2026-03-06)
|
|
- Root cause for the reported v3 "main index list / scrolling" bug was focus management, not `DataTable` scrolling itself:
|
|
- first render focus landed on the hidden command palette input
|
|
- arrow-key navigation did nothing until the entry table was manually focused
|
|
- Stable fix:
|
|
- `MainScreen.on_mount()` now focuses `#entry-data-table`
|
|
- closing the command palette restores focus to `#entry-data-table` instead of clearing focus
|
|
- Reusable v3 search/navigation pattern:
|
|
- persist the active search query in app state so refresh/filter/sort changes do not silently clear the current result set
|
|
- keep sort and mode changes as explicit app actions (`action_set_search_mode`, `action_set_search_sort`) so toolbar buttons and palette commands stay aligned
|
|
- Search/graph baseline shipped:
|
|
- `SearchService.linked_neighbors(...)` now returns deterministic incoming/outgoing link cards
|
|
- `SearchService.relation_summary(...)` now returns grouped relation counts
|
|
- TUI v3 inspector now exposes a linked-items panel with direct open-entry actions
|
|
- TUI v3 grid now has explicit filter/mode/sort buttons instead of palette-only control
|