mirror of
https://github.com/PR0M3TH3AN/SeedPass.git
synced 2026-10-27 16:02:05 +00:00
7.4 KiB
7.4 KiB
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 therelay-listpalette 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 forsync_service.sync()background operations. - The
pytestexecution of parity tests natively sources from the local environment. Ensure testing inside the virtual environment properly maps module paths (e.g., usingPYTHONPATH=. pytest ...from thesrcdirectory) whensrc-layoutpaths conflict with oldsite-packagesinstalls, which causes confusingAttributeErrortracebacks on customized files. - The
SettingsScreenand TUI v3 components now rely on the standard Textualapp.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 directConfigServicemodifications if they aren't fully wrapped for list operations. Usingapp.services["nostr"]for relay additions/removals is the preferred pattern. - The cohesive retro palette across the TUI v3 mockups hinges on high-contrast
#999999backgrounds,#000000text/borders, and crisp#ffffffinputs. 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 sendingawait pilot.press('ctrl+p')if standard textual palettes shadow customCommandPalettewidgets. Directly callingapp.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_stackvia a decoupled reactive property (e.g.active_breadcrumb), rather than mutating the coreactive_fingerprintreferences used for caching and view filtering.
Session addendum — os-eco setup (2026-03-03)
ov init -ysuccessfully bootstraps.overstory/,.mulch/,.seeds/,.canopy/, and also auto-appends onboarding blocks toCLAUDE.mdand merge rules to.gitattributes.- For this Python repo,
.overstory/config.yamlshould be adjusted from Bun defaults tocanonicalBranch: betaand 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 slingfailure:Failed to send keys to tmux session ... can't find paneafter a clean launch path. - Root cause was invalid Codex model aliases in
.overstory/agent-manifest.json(haiku/sonnet/opus) causingcodex execto exit immediately;codex exec --model sonnetfails with unsupported-model error on ChatGPT-backed Codex accounts. - Working configuration on this machine:
- Keep
.overstory/config.yamlmodels:empty (Overstory v0.7.9 rejects baregpt-*entries in this block unless provider-prefixed, which Codex account mode does not accept). - Set each agent
modelin.overstory/agent-manifest.jsontogpt-5.3-codex.
- Keep
- Secondary requirement: tmux server must be running before sling (
tmux new-session -d -s ov-bootstrap 'bash'is enough); otherwise Overstory errors withTmux server is not running. - Added a dedicated personal swarm runbook at repo root:
OVERSTORY_SWARM_TUTORIAL.mdwith 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 insrc/tests/test_tui_v2_textual_interactions.pyand 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.pyto unpackderive_pgp_keyas(priv, pub, fp)and correctingderive_pgp_keytype/docs insrc/seedpass/core/password_generation.py. - Local quality signal gaps:
black --check .currently reports 20 files needing formatting, andruff/mypyare 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.shand wired it intoscripts/run_ci_tests.shbehindTUI3_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.pyto lock this compatibility behavior. - Current CI-equivalent state:
- Full main suite passes (
1064 passed, 16 skipped), but existingtui2_coverage_gate.shstill failssrc/seedpass/core/api.py >= 85on its focused subset (68.79%) and needs separate gate policy/workload adjustment.
- Full main suite passes (
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
DataTablescrolling 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-tableinstead 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 cardsSearchService.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