diff --git a/.overstory/groups.json b/.overstory/groups.json index 87366fbf..1aaa501c 100644 --- a/.overstory/groups.json +++ b/.overstory/groups.json @@ -10,5 +10,30 @@ "status": "completed", "createdAt": "2026-03-06T18:15:54.676Z", "completedAt": "2026-03-06T18:40:28.735Z" + }, + { + "id": "group-8f7fcbaf", + "name": "bugfix-and-v3-polish", + "memberIssueIds": [ + "SeedPass-1d93", + "SeedPass-6d26", + "SeedPass-36fb", + "SeedPass-c211" + ], + "status": "completed", + "createdAt": "2026-03-07T03:32:03.525Z", + "completedAt": "2026-03-10T00:55:36.367Z" + }, + { + "id": "group-6ac0330a", + "name": "search-graph-and-mulch", + "memberIssueIds": [ + "SeedPass-dd29", + "SeedPass-de11", + "SeedPass-2603" + ], + "status": "completed", + "createdAt": "2026-03-10T01:41:12.693Z", + "completedAt": "2026-03-10T19:14:21.103Z" } ] diff --git a/memory-update.md b/memory-update.md index ad4da54e..fd804199 100644 --- a/memory-update.md +++ b/memory-update.md @@ -1,64 +1,7 @@ -# Memory Update — SeedPass TUI v3 Development — 2026-03-03 +# Memory Update (2026-03-06) -## 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 +## Seeded Test Profile Generation +- For bulk local fixture creation, the fastest path is the core API/EntryManager stack rather than driving the TUI. +- A full test profile can be created under `~/.seedpass/` by wiring `EncryptionManager`, `Vault`, `ConfigManager`, `BackupManager`, and `EntryManager`, then adding the fingerprint manually in `~/.seedpass/fingerprints.json` without changing `last_used`. +- `EntryManager` supports tags across all core entry kinds plus typed graph links via `add_link(index, target_id, relation=..., note=...)`, which is enough to build inbound/outbound KB relationships for search and atlas validation. +- Saving a plain-text seed copy to both `/seed_phrase.txt` and a top-level helper file like `~/.seedpass/test_seed.txt` makes manual reuse easy after generation.