mirror of
https://github.com/PR0M3TH3AN/SeedPass.git
synced 2026-10-28 16:32:06 +00:00
1144 lines
76 KiB
Markdown
1144 lines
76 KiB
Markdown
# Memory Update (2026-03-01)
|
|
|
|
## Nostr backup failure observability
|
|
- `handle_post_to_nostr()` previously printed only a generic `❌ Sync failed…` when `sync_vault()` returned `None`, even if `nostr_client.last_error` had useful detail.
|
|
- `PasswordManager.sync_vault_async()` swallowed exceptions and returned `None` without reliably setting `nostr_client.last_error`, making root-cause diagnosis hard from CLI.
|
|
|
|
## Changes made
|
|
- Updated `sync_vault_async()` to copy exception text into `nostr_client.last_error` before returning `None`.
|
|
- Updated `handle_post_to_nostr()` to include `nostr_client.last_error` in user-visible failure output and log line when available.
|
|
- Added regression tests:
|
|
- `test_handle_post_failure_shows_nostr_error`
|
|
- `test_sync_vault_sets_last_error_on_exception`
|
|
|
|
## Testing note
|
|
- Could not run pytest in this environment because `pytest` is not installed (`python3 -m pytest` -> `No module named pytest`).
|
|
|
|
## Nostr namespace reset workflow
|
|
- Added Nostr Settings menu actions for profile-scoped reset operations:
|
|
- `8. Reset Nostr sync state` clears `manifest_id`, `delta_since`, and `last_sync_ts` while preserving `nostr_account_idx`.
|
|
- `9. Start fresh Nostr namespace (new key index)` increments `nostr_account_idx`, clears sync metadata, and reinitializes the Nostr client when available.
|
|
- This provides a first-class path for users who want to ignore legacy Nostr history and publish/retrieve only new data under current deterministic behavior.
|
|
- Added tests for both handlers and menu dispatch to prevent regressions.
|
|
|
|
## Documentation updates for Nostr reset workflow
|
|
- Added `docs/nostr_namespace_reset.md` documenting menu options `8` (reset sync state) and `9` (start fresh namespace), plus validation steps for robust publish/restore.
|
|
- Linked the new guide from `docs/nostr_setup.md`, `docs/README.md`, and root `README.md`.
|
|
- Exposed the guide in website docs navigation via `landing/docs.html` (`Nostr Namespace Reset`).
|
|
|
|
## Nostr sync failure after namespace increment
|
|
- Root-cause pattern: when profile `offline_mode` is enabled, `sync_vault_async()` exits early and previously returned `None` without a helpful message, so UI showed only `❌ Sync failed…`.
|
|
- Fixes:
|
|
- `PasswordManager.sync_vault_async()` now sets `nostr_client.last_error` for early-return cases (`offline_mode`, missing encrypted index, and missing publish result).
|
|
- `main.handle_post_to_nostr()` now explicitly reports offline mode when no detailed error is present.
|
|
- Regression tests added:
|
|
- `src/tests/test_post_sync_messages.py::test_handle_post_failure_offline_mode_message`
|
|
- `src/tests/test_background_vault_sync_paths.py::test_sync_vault_async_sets_offline_error`
|
|
- Verified with local venv:
|
|
- `./.venv/bin/pytest -q src/tests/test_post_sync_messages.py`
|
|
- `./.venv/bin/pytest -q src/tests/test_background_vault_sync_paths.py`
|
|
|
|
## Entry model expansion: document kind + universal date fields
|
|
- Added a new `document` entry kind across core enum, TUI, API, CLI, and agent secret resolution.
|
|
- Added universal `date_added` and `date_modified` fields for all entry kinds.
|
|
- Creation now sets both fields.
|
|
- Modification preserves `date_added` and updates `date_modified`.
|
|
- Legacy entries are normalized in `_load_index()` by deriving date fields from `modified_ts`/`updated`.
|
|
- TUI now supports `Document` creation via a built-in line editor with basic commands (`p`, `a`, `i <n>`, `e <n>`, `d <n>`, `w`, `q`).
|
|
- Added document-specific display and edit flows in manager/display services.
|
|
|
|
## Sync/policy compatibility notes
|
|
- Updated deterministic merge kind matrix to include document fields (`content`, `file_type`) for equal-timestamp backfill behavior.
|
|
- Agent defaults now include `document` in non-private allow-kinds, and agent secret resolution returns document content for `document` entries.
|
|
|
|
## Tests and docs
|
|
- Added/updated tests for:
|
|
- document entry roundtrip and CLI add command
|
|
- universal date field presence/update semantics across all entry kinds
|
|
- API create/modify behavior for `document`
|
|
- large document Nostr sync roundtrip
|
|
- Added `docs/entry_types.md` and updated README/docs index and sync conflict docs.
|
|
- Verified with:
|
|
- `./.venv/bin/pytest -q src/tests/test_cli_entry_add_commands.py src/tests/test_entry_add.py src/tests/test_entry_types_roundtrip.py src/tests/test_modify_entry_validation.py src/tests/test_api.py src/tests/test_api_new_endpoints.py src/tests/test_full_sync_roundtrip.py`
|
|
- Result: `141 passed`.
|
|
|
|
## Document file import/export workflows
|
|
- Added document file I/O at core layer:
|
|
- `EntryManager.import_document_file(path, ...)`
|
|
- `EntryManager.export_document_file(index, output_path=None, overwrite=False)`
|
|
- Added TUI support:
|
|
- `Add Entry > Document` now supports `New Document` and `Import Document File`.
|
|
- Document entry actions now include `Export Document to File`.
|
|
- Added automation surfaces:
|
|
- CLI: `entry import-document`, `entry export-document`
|
|
- API: `POST /api/v1/entry/document/import`, `POST /api/v1/entry/{id}/document/export`
|
|
- Regression coverage added for core file roundtrip, CLI commands, and API endpoints.
|
|
|
|
## Agent document import/export commands
|
|
- Added dedicated agent CLI commands:
|
|
- `seedpass agent document-import --file <path>`
|
|
- `seedpass agent document-export <query>` (or `--entry-id`)
|
|
- Enforcement model for both commands:
|
|
- Requires `--fingerprint` and non-interactive auth broker password resolution.
|
|
- Denies unless policy `allow_export_import` is enabled.
|
|
- Denies unless `document` kind is policy-allowed (`allow_kinds` / kind export check).
|
|
- Supports scoped token enforcement with operation scopes (`import` for import, `export` for export).
|
|
- Export honors approval gates when policy requires `export` approval.
|
|
- Emits structured JSON responses and append-only audit events for granted/denied outcomes.
|
|
- Discovery updates:
|
|
- Added `document_io` command hints to `agent bootstrap-context` payload.
|
|
- Added `document_io` section to `seedpass capabilities --format json` security features.
|
|
- Added CLI tests for:
|
|
- token-scoped agent document import success path
|
|
- token-scoped agent document export success path
|
|
- bootstrap context includes document command hints
|
|
- Environment note: could not run pytest in this shell because `pytest` is unavailable (`python3 -m pytest` reports module missing).
|
|
|
|
## Test environment note (2026-03-01)
|
|
- Repo `.venv` already had `pytest` and `typer`; upgraded to `pytest 9.0.2` and `typer 0.24.1`.
|
|
- New agent document I/O tests initially failed due mocked policy normalization (empty `rules` caused normalized `allow_kinds` to become empty).
|
|
- Fixed tests by adding explicit allow rule for `document` in mocked policies.
|
|
- Verification run:
|
|
- `.venv/bin/pytest -q src/tests/test_document_file_io.py src/tests/test_cli_entry_add_commands.py src/tests/test_api_new_endpoints.py src/tests/test_entry_types_roundtrip.py src/tests/test_full_sync_roundtrip.py src/tests/test_cli_agent_mode.py`
|
|
- Result: `150 passed`.
|
|
|
|
## Full-suite regression repair after document rollout
|
|
- Ran full suite after enabling agent document I/O and found 12 regressions (mostly stale tests).
|
|
- Fixed regressions by updating tests for:
|
|
- new document add-menu option/mocks (`handle_add_document`),
|
|
- expanded `EntryService.modify_entry` kwargs,
|
|
- universal `date_added`/`date_modified` and `custom_fields` fields in entry expectations,
|
|
- `list_entries(sort_by="updated")` relying on `modified_ts`,
|
|
- legacy decrypt fallback monkeypatches to accept `salt` argument and revised iteration-call expectations.
|
|
- Verification: `.venv/bin/pytest -q src/tests` => `891 passed, 11 skipped`.
|
|
|
|
## Knowledge graph links integration (entry relationships)
|
|
- Added first-class graph edges to every entry via shared `links` field (list of `{target_id, relation, note}`).
|
|
- Implemented core link operations in `EntryManager`:
|
|
- `add_link(entry_id, target_id, relation, note)`
|
|
- `remove_link(entry_id, target_id, relation=None)`
|
|
- `get_links(entry_id)` with resolved target label/kind.
|
|
- Added normalization/defaulting for `links` in index load path, including cache-return normalization to prevent stale in-memory schemas.
|
|
- Extended `modify_entry(..., links=...)` to allow full links replacement with validation.
|
|
- Search now matches link metadata (`relation`, `note`) and linked target labels, enabling graph-style discovery from existing index scans.
|
|
- Sync conflict equal-timestamp union now includes `links` alongside `tags` and `custom_fields` for deterministic convergence.
|
|
- Added API endpoints:
|
|
- `GET /api/v1/entry/{id}/links`
|
|
- `POST /api/v1/entry/{id}/links`
|
|
- `DELETE /api/v1/entry/{id}/links`
|
|
and `PUT /api/v1/entry/{id}` now accepts `links`.
|
|
- Added CLI graph commands:
|
|
- `seedpass entry link-add`
|
|
- `seedpass entry links`
|
|
- `seedpass entry link-remove`
|
|
plus `entry modify --links-json`.
|
|
- Documentation updated in `README.md`, `docs/entry_types.md`, and `docs/sync_conflict_contract.md`.
|
|
- Validation:
|
|
- Focused suite: `140 passed`
|
|
- Full suite: `895 passed, 11 skipped`.
|
|
|
|
## Website/docs refresh for graph features
|
|
- Added dedicated graph docs page: `docs/entry_graph.md`.
|
|
- Updated docs indexes/navigation:
|
|
- `docs/README.md` now lists `entry_graph.md`.
|
|
- `landing/docs.html` sidebar now includes `Entry Graph`.
|
|
- Updated landing page feature cards (`landing/index.html`) to highlight:
|
|
- Entry Graph Links
|
|
- Graph-Aware Entry Ops CLI commands
|
|
- Updated docs cross-links:
|
|
- `docs/entry_types.md` points to `docs/entry_graph.md`.
|
|
- Updated README feature bullets to include Entry Graph Links.
|
|
|
|
## Landing graph example + help-hint refresh
|
|
- Added a visual graph snippet block to landing architecture section (`landing/index.html`) showing linked entries and graph query behavior.
|
|
- Styled graph snippet in `landing/style.css` (`.graph-snippet`) to match the terminal UI aesthetic.
|
|
- Expanded help/discovery surfaces for users and agents:
|
|
- `seedpass capabilities` now includes a `knowledge_graph` security feature block with CLI/API graph commands and sync/search behavior.
|
|
- Capabilities API discovery now lists `/api/v1/entry/{id}/links`.
|
|
- Capabilities text output now explicitly mentions graph links and document workflows.
|
|
- Capabilities `help_hints` now include graph/document command pointers.
|
|
- `agent bootstrap-context` now includes `commands.knowledge_graph` hints.
|
|
- Root CLI help string now mentions document I/O and entry graph links.
|
|
- Verification:
|
|
- `.venv/bin/pytest -q src/tests/test_typer_cli.py -k "capabilities_text or capabilities_json" src/tests/test_cli_agent_mode.py -k "bootstrap_context"`
|
|
- Result: `2 passed`.
|
|
|
|
## TUI v2 scaffold kickoff on beta
|
|
- Added `docs/tui_v2_plan.md` with phased migration plan, risk controls, and testing strategy for Textual-based TUI v2.
|
|
- Added experimental CLI command `seedpass tui2` and diagnostics mode `seedpass tui2 --check`.
|
|
- Added new runtime-check/launcher scaffold package at `src/seedpass/tui_v2/`.
|
|
- Updated discoverability/docs surfaces:
|
|
- `docs/README.md` includes `tui_v2_plan.md`
|
|
- `landing/docs.html` includes `TUI v2 Plan`
|
|
- `README.md` discovery snippet includes `seedpass tui2 --check`
|
|
- `capabilities` root commands/help hints include `tui2`
|
|
- Validation:
|
|
- `py_compile` for updated modules
|
|
- `pytest` capabilities tests (`2 passed`)
|
|
- `.venv` smoke run confirms `seedpass tui2 --check` emits runtime diagnostics.
|
|
- 2026-03-01: TUI v2 phase 1 moved from placeholder to functional read-only Textual shell. `seedpass tui2` now passes a lazy `entry_service_factory` so vault/service init only happens when Textual is actually available, preventing unnecessary prompts on unavailable runtimes.
|
|
- Added focused CLI tests in `src/tests/test_typer_cli.py` for `tui2 --check`, unavailable + no fallback exit path, and legacy fallback fingerprint forwarding.
|
|
- 2026-03-01: TUI v2 phase 2 slice added in `seedpass/tui_v2/app.py`: archive/restore action (`a`), document editor mode (`e`) with save/cancel (`Ctrl+S`/`Esc`), and a persistent status line for operation feedback.
|
|
- Document editor uses `TextArea` when available and falls back to single-line input if unavailable, keeping runtime compatibility across Textual versions.
|
|
- 2026-03-01: TUI v2 gained `Ctrl+P` command palette with command parsing (`help`, `open`, `search`, `filter`, `archive/restore`, `edit-doc/save-doc/cancel-edit`, `link-add`, `link-rm`, `refresh`).
|
|
- Added a graph links panel in the right view that renders current entry links via `EntryService.get_links` and updates after palette link mutations.
|
|
- 2026-03-01: TUI v2 graph navigation expanded with relation-aware link filtering (`l` or `link-filter`) and quick neighbor traversal (`[`/`]` to change selected link, `o` or `link-open` to jump to target entry).
|
|
- Link panel now tracks selection state and displays active relation filter + selected link position to support KB-style navigation in large graphs.
|
|
- 2026-03-01: Phase 4 kickoff added `docs/tui_v2_parity_checklist.md` and linked it in docs indexes (`docs/README.md`, `landing/docs.html`) to track legacy-vs-v2 cutover readiness.
|
|
- TUI v2 large-vault UX/perf pass: entry list pagination (200/page, `p`/`n`, palette `page-next/page-prev/page <n>`) and document detail preview truncation (`content_truncated`) to avoid rendering extremely large payloads in the detail pane.
|
|
- 2026-03-01: TUI v2 error/recovery pass added unified failure recording (`_record_failure`) and retry workflow (`x` key + palette `retry`) across init/search/select/link/save/archive paths.
|
|
- Recovery hints are now included in status messages (for example, "Press 'x' to retry") and Phase 4 docs mark error/recovery flow work complete.
|
|
- 2026-03-01: Added `docs/tui_v2_cutover_decision.md` with explicit recommendation to keep legacy default for next release, required cutover gates, staged rollout, and rollback plan for switching `seedpass` default to TUI v2.
|
|
- Updated phase tracking docs to mark the cutover timing decision item complete and linked the memo in docs indexes.
|
|
- 2026-03-01: Began cutover-gate automation by extracting testable TUI v2 helpers (`parse_palette_command`, `pagination_window`, `truncate_entry_for_display`) from `tui_v2/app.py`.
|
|
- Added `src/tests/test_tui_v2_helpers.py` with coverage for palette parsing edge cases, pagination normalization, and large-vault pagination smoke sizes up to 50k rows.
|
|
- 2026-03-01: Added Textual interaction tests in `src/tests/test_tui_v2_textual_interactions.py` for pagination/search, document edit+save, link add/remove + neighbor open, and retry-after-failure.
|
|
- Introduced a test hook in `launch_tui2(..., app_hook=...)` so tests can capture and pilot the Textual app instance without starting a live terminal run.
|
|
- 2026-03-01: Added CI-like large-vault validation with explicit thresholds in `src/tests/test_tui_v2_large_vault_validation.py` (10k rows standard, 50k rows under `--stress`).
|
|
- Added docs `docs/tui_v2_large_vault_validation.md` with exact commands and budgets; parity checklist now marks large-vault CI-like validation complete.
|
|
- 2026-03-01: Added deterministic TUI v2 parity scenarios across entry kinds in `src/tests/test_tui_v2_parity_scenarios.py` (kind filters, archive/restore roundtrip, non-document edit guard).
|
|
- Completed help/docs alignment gate: updated `seedpass tui2` help text, capabilities hints for keybindings/palette (`Ctrl+P`, `p/n`, `x`), and docs discoverability commands (`seedpass tui2 --help/--check`).
|
|
- 2026-03-01: Switched default root CLI interactive routing to TUI v2 in `seedpass.cli.main` (when no subcommand), with automatic legacy fallback when Textual runtime is unavailable.
|
|
- Added explicit one-release override flag `--legacy-tui` and updated test coverage (`test_typer_cli.py`) for default TUI v2 launch, forced legacy path, and root fallback behavior.
|
|
- 2026-03-01: UX pass for TUI v2 added help overlay (`?`), quick jump input (`j`), pane focus switching (`1/2/3`) with visual focus borders, mode-tagged status line, and an activity log panel of recent actions.
|
|
- Added document dirty-state UX improvements (`Edit mode [*]` marker, no-op save guard) and updated Textual interaction/parity tests for Textual 8-compatible action-driven control paths.
|
|
- 2026-03-01: Visual polish pass for TUI v2 updated panel styling hierarchy (stronger status/pane contrast), refined left-panel summaries, improved help overlay readability, and added labeled headers for entry/detail and links sections.
|
|
- UI copy now emphasizes current selection/filter context while keeping deterministic action affordances unchanged; full TUI-focused test slice remains green.
|
|
- 2026-03-01: Reduced TUI v2 status noise by deduplicating repeated status messages before appending to status bar/activity log.
|
|
- Verified critical coverage gate against existing full coverage artifact (`artifacts/coverage/coverage.json`): all default threshold modules pass (main/core manager/core encryption/core migrations).
|
|
|
|
## 2026-03-01 Determinism test infrastructure hardening
|
|
- Added a dedicated determinism lane with `scripts/run_determinism_tests.sh` and wired `scripts/run_ci_tests.sh` to run it by default (`DETERMINISM_GATE=1`, disable with `DETERMINISM_GATE=0`).
|
|
- Added pytest marker support for determinism (`pyproject.toml`, `src/tests/conftest.py`) and a `--determinism-only` selector that skips non-determinism tests.
|
|
- Expanded deterministic regression vectors in `src/tests/test_deterministic_artifact_regression.py`:
|
|
- pinned entropy-stream SHA-256 vectors for indexes `0,1,352,1024`
|
|
- pinned password outputs for policy variants (default, safe specials, no specials, exclude ambiguous, restricted special charset)
|
|
- Marked existing deterministic suites so they run in the determinism lane: password helpers/policy plus seed, SSH, PGP, and Nostr determinism tests.
|
|
- Verified determinism lane now executes 23 focused tests and fails fast on derivation drift.
|
|
|
|
## 2026-03-01 Determinism gates + cross-process + size-tier sync tests
|
|
- Added `scripts/check_determinism_suite.py` and wired it into `scripts/run_determinism_tests.sh`.
|
|
- Determinism gate now enforces both a minimum test count (`DETERMINISM_MIN_TESTS`, default 25) and required determinism files, preventing accidental suite erosion.
|
|
- Added unit tests for determinism gate parser logic in `src/tests/test_check_determinism_suite.py`.
|
|
- Added cross-process determinism regression in `src/tests/test_cross_process_determinism.py`; derives artifacts in separate Python processes and asserts exact JSON identity.
|
|
- Expanded size-tier sync integrity coverage:
|
|
- `src/tests/test_document_file_io.py` includes large document import/export and portable backup restore invariance checks (hash/equality).
|
|
- `src/tests/test_full_sync_roundtrip.py` includes parameterized large document Nostr sync roundtrip with content hash checks.
|
|
- `src/tests/test_nostr_snapshot.py` includes chunk hash and gzip roundtrip integrity across multiple payload size tiers.
|
|
- Current determinism lane status after updates: 43 passed, 916 skipped.
|
|
|
|
## 2026-03-01 TUI v2 agent harness + deep coverage expansion
|
|
- Added `scripts/ai_tui2_agent_test.py` as a deterministic agent-style TUI v2 harness using Textual pilot mode; emits timestamped JSON reports in `artifacts/agent_tui2_test/`.
|
|
- Added test/process documentation: `docs/agent_test_format.md` with repeatable commands for TUI v2, legacy interactive harness, CLI/CUI, API, and determinism gate runs.
|
|
- Fixed legacy harness invalid-input regression after Document type addition: in `scripts/ai_tui_agent_test.py`, Add Entry invalid choice now uses `99` instead of `9`.
|
|
- Added `src/tests/test_tui_v2_action_matrix.py` to exercise broad TUI v2 action and palette paths (including guards/failure/retry/event handlers).
|
|
- Fixed a real TUI v2 help-overlay bug in `src/seedpass/tui_v2/app.py` where `[/]` text triggered Textual markup parsing errors (`MarkupError`).
|
|
- Latest TUI v2 focused coverage run:
|
|
- Command: test helper/interactions/parity/large-vault/action-matrix suites with `--cov=seedpass.tui_v2.app`
|
|
- Result: 25 passed, 2 skipped
|
|
- Coverage: 86% for `src/seedpass/tui_v2/app.py` (up from ~57%).
|
|
- Harness validation results:
|
|
- `scripts/ai_tui2_agent_test.py --scenario extended`: passed
|
|
- `scripts/ai_tui_agent_test.py --scenario core`: passed
|
|
|
|
## 2026-03-01 Installer + TUI v2 preflight fix (gray-screen mitigation)
|
|
- Root cause found for "blank/gray screen" reports: TUI v2 was initializing `PasswordManager` inside Textual mount via `entry_service_factory`, so password/setup prompts could occur behind the Textual screen and appear as a frozen UI.
|
|
- Updated `src/seedpass/cli/__init__.py` to pre-initialize entry service before launching Textual (`_prime_tui2_service`), then pass the ready service into `launch_tui2`.
|
|
- Added explicit fallback/error behavior:
|
|
- default `seedpass`: preflight failures now fall back to legacy TUI with details.
|
|
- `seedpass tui2 --no-fallback-legacy`: preflight failures now return exit code 1 with a clear error.
|
|
- Updated installer `scripts/install.sh` to run `seedpass tui2 --check` after install and warn when Textual runtime is unavailable, plus print a legacy fallback hint for users seeing blank/gray startup.
|
|
- Added regression coverage in `src/tests/test_typer_cli.py` for preflight behavior and adapted existing TUI launch tests to mock preflight service creation.
|
|
|
|
## 2026-03-01 TUI v2 parity slice: reveal + QR integration
|
|
- Added Textual TUI v2 sensitive-data actions:
|
|
- Keybindings: `v` reveal selected secret, `g` show QR.
|
|
- Palette commands: `reveal`, `qr`.
|
|
- Implemented reveal support for entry kinds: `password`, `seed`, `managed_account`, `totp`.
|
|
- Implemented QR rendering in-app (ASCII QR panel) for:
|
|
- TOTP (`otpauth://` payload)
|
|
- Seed / managed account seed (SeedQR digit payload)
|
|
- Added a dedicated `#secret-detail` panel in the right pane and reset-on-selection behavior to avoid stale secret display.
|
|
- Extended core `EntryService` API with deterministic seed retrieval methods used by TUI v2:
|
|
- `get_seed_phrase(entry_id)`
|
|
- `get_managed_account_seed(entry_id)`
|
|
- Added/updated tests for helper QR rendering, TUI reveal/QR workflows, and service wrappers; targeted suite passed.
|
|
|
|
## 2026-03-01 TUI v2 parity slice: SSH/PGP/Nostr + secret mode behavior
|
|
- Extended TUI v2 sensitive reveal support to additional kinds: `ssh`, `pgp`, and `nostr`.
|
|
- Added legacy-aligned confirmation semantics in TUI v2:
|
|
- `reveal confirm` required for high-risk reveals (`seed`, `managed_account`, `ssh`, `pgp`).
|
|
- `qr private confirm` required for Nostr private-key QR rendering.
|
|
- Added `qr` mode parsing (`qr [public|private] [confirm]`) and retained default safe behavior (`public` for Nostr).
|
|
- Integrated secret-mode behavior into TUI reveal flow:
|
|
- when secret mode is enabled, reveal copies sensitive value to clipboard and avoids on-screen plaintext output for that reveal.
|
|
- Expanded `EntryService` API for TUI parity and safe abstraction from manager internals:
|
|
- `get_ssh_key_pair`, `get_pgp_key`, `get_nostr_key_pair`
|
|
- `get_secret_mode_enabled`, `get_clipboard_clear_delay`, `copy_to_clipboard`
|
|
- Added/updated tests covering confirmation-gated flows, Nostr private QR confirmation, and secret-mode clipboard behavior.
|
|
|
|
## 2026-03-01 TUI v2 visual alignment with landing page
|
|
- Updated Textual TUI v2 default styling to mirror landing-page palette tokens:
|
|
- background: `#080a0c` / panel: `#0d1114`
|
|
- primary text: `#97b8a6` / bright text: `#daf2e5`
|
|
- accent borders/focus: `#58f29d`, `#2abf75`, `#274533`, `#1a3024`
|
|
- Styled Header/Footer/Input/ListView/ListItem focus/selection states to reduce default Textual blue and align with SeedPass mint-green terminal aesthetic.
|
|
- Added website-style icon semantics into TUI copy and sensitive panel titles (key/mobile/network/lock/bolt/document/users/seed mappings) to improve visual continuity between landing and app.
|
|
|
|
## 2026-03-01 Legacy launch ergonomics
|
|
- Added explicit CLI command `seedpass legacy` to launch the legacy interactive TUI directly, in addition to existing global flag `--legacy-tui`.
|
|
- Refactored legacy launch path through a shared helper in `seedpass.cli` so root fallback, `--legacy-tui`, `tui2` fallback, and `legacy` command all use consistent behavior and fingerprint forwarding.
|
|
- Added CLI regression tests for `seedpass legacy` with and without `--fingerprint`.
|
|
- Updated discoverability docs in `README.md` and `docs/README.md`.
|
|
|
|
## 2026-03-01 KB scale stress coverage + launch docs
|
|
- Added `src/tests/test_kb_scale_stress.py` for large-index KB validation:
|
|
- sort/tag/search across `10k` entries (and `100k` with `--stress`)
|
|
- high-degree graph link validation (`1k` edges standard, `5k` edges stress)
|
|
- Added `src/tests/test_tui_v2_kb_scale_stress.py` for Textual large-index interaction validation:
|
|
- pagination/navigation/search/filter behavior at `10k` rows standard and `50k` rows under `--stress`
|
|
- Added docs `docs/kb_scale_validation.md` with exact commands for standard and `--stress` runs.
|
|
- Updated launch documentation to clearly show all interactive launch modes:
|
|
- default (`seedpass`), explicit v2 (`seedpass tui2`), and legacy (`seedpass legacy` / `seedpass --legacy-tui`).
|
|
|
|
## 2026-03-01 TUI v2 parity backlog prioritization
|
|
- TORCH latest daily/weekly memory snapshots are mostly scheduler metadata; TUI parity priorities should continue to be driven by `docs/tui_v2_plan.md`, `docs/tui_v2_parity_checklist.md`, and direct legacy-vs-v2 code diff.
|
|
- Highest-impact remaining parity gaps identified:
|
|
1) Add-entry workflows for all kinds in TUI v2
|
|
2) Retrieve/action parity (notes/custom fields/tags/edit field-level variants/document export/QR submenus)
|
|
3) 2FA codes live board parity with timer + secret-mode clipboard behavior
|
|
4) Settings/profile/nostr operational parity in TUI v2
|
|
5) CI smoke gate for `seedpass tui2 --check` still marked open in plan
|
|
|
|
## 2026-03-01 TUI v2 parity tracking + Phase A add-entry slice
|
|
- Added a dedicated continuation tracker `docs/tui_v2_parity_backlog.md` and linked it from:
|
|
- `docs/tui_v2_plan.md`
|
|
- `docs/tui_v2_parity_checklist.md`
|
|
- `docs/README.md`
|
|
- Landed TUI v2 command-palette add-entry flows in `src/seedpass/tui_v2/app.py`:
|
|
- `add-password <label> <length> [username] [url]`
|
|
- `add-totp <label> [period] [digits] [secret]`
|
|
- `add-key-value <label> <key> <value>`
|
|
- `add-document <label> <file_type> <content>`
|
|
- Added usage validation and post-create behavior:
|
|
- strict argument/typing checks with status feedback
|
|
- refresh + selection focus to created entry (or nearest match for TOTP)
|
|
- retry wiring through existing `x` recovery path on service failures
|
|
- Extended Textual tests:
|
|
- `src/tests/test_tui_v2_textual_interactions.py` now includes add-command success and validation-error scenarios.
|
|
- `src/tests/test_tui_v2_action_matrix.py` test service now implements add methods and exercises add-command guards/success paths.
|
|
- Validation run:
|
|
- `.venv/bin/pytest -q src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py src/tests/test_tui_v2_helpers.py`
|
|
- Result: `24 passed`.
|
|
- Updated backlog checkoffs (Phase A): password/TOTP/key-value/document creation + validation/post-create focus are now marked complete; remaining work is SSH/PGP/Nostr/Seed/Managed Account creation flows and downstream parity phases.
|
|
|
|
## 2026-03-01 TUI v2 parity Phase A completion (remaining add kinds)
|
|
- Extended TUI v2 command palette add workflows in `src/seedpass/tui_v2/app.py` for remaining entry kinds:
|
|
- `add-ssh <label> [index]`
|
|
- `add-pgp <label> [index] [key_type] [user_id]`
|
|
- `add-nostr <label> [index]`
|
|
- `add-seed <label> [words] [index]`
|
|
- `add-managed-account <label> [index]`
|
|
- Added argument validation and status hints for all new commands, including integer checks for index/words arguments and retry integration on service failures.
|
|
- Updated discoverability text in palette/help/filter hints to include the new add command set.
|
|
- Expanded test doubles and coverage:
|
|
- `src/tests/test_tui_v2_textual_interactions.py`: success + validation coverage for all add commands (existing and new).
|
|
- `src/tests/test_tui_v2_action_matrix.py`: guard paths and success paths for new add commands.
|
|
- Validation run repeated after formatting:
|
|
- `.venv/bin/pytest -q src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py src/tests/test_tui_v2_helpers.py`
|
|
- Result: `24 passed`.
|
|
- Backlog update:
|
|
- `docs/tui_v2_parity_backlog.md` Phase A is now fully checked off.
|
|
- Next priority to start: Phase B retrieve/action parity (notes/custom fields/tags/field-level edits/document export/nostr QR submenu behaviors).
|
|
|
|
## 2026-03-01 TUI v2 parity Phase B slice: notes/tags/custom fields/document export
|
|
- Added retrieve/action parity commands to TUI v2 palette in `src/seedpass/tui_v2/app.py`:
|
|
- `notes-set <text>` / `notes-clear`
|
|
- `tag-add <tag>` / `tag-rm <tag>` / `tags-set <comma-list>` / `tags-clear`
|
|
- `field-add <label> <value> [hidden-token]` / `field-rm <label>`
|
|
- `doc-export [output_path]` (selected document only)
|
|
- Introduced helper paths for selected-entry mutation:
|
|
- `_selected_entry_payload()` for reliable selected entry fetch/guarding
|
|
- `_apply_selected_modify(...)` to centralize modify->reload->reselect->retry behavior
|
|
- Added/extended tests:
|
|
- `src/tests/test_tui_v2_textual_interactions.py` adds success + validation coverage for notes/tags/custom fields/doc export.
|
|
- `src/tests/test_tui_v2_action_matrix.py` now exercises new command guards and paths.
|
|
- Fake services in both test files now implement `export_document_file(...)`.
|
|
- Validation:
|
|
- `.venv/bin/pytest -q src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py src/tests/test_tui_v2_helpers.py`
|
|
- Result: `26 passed`.
|
|
- UI-status formatting note for Textual markup:
|
|
- Bracketed usage strings like `[hidden]`/`[output_path]` get treated as markup and partially disappear in status rendering.
|
|
- Switched those usage strings to plain text `(optional: ...)` format.
|
|
- Backlog updates in `docs/tui_v2_parity_backlog.md`:
|
|
- Checked off Phase B items for notes, tags, custom fields, document export, and Nostr public/private QR submenu parity.
|
|
- Remaining Phase B gap: field-level edit parity for non-document kinds.
|
|
|
|
## 2026-03-01 TUI v2 parity Phase B slice: field-level edits for non-document kinds
|
|
- Added palette commands in `src/seedpass/tui_v2/app.py`:
|
|
- `set-field <name> <value>` (alias `field-set`)
|
|
- `clear-field <name>` (alias `field-clear`)
|
|
- Implemented kind-aware field edit allowlists and validation:
|
|
- password: `label/notes/username/url/length`
|
|
- totp: `label/notes/period/digits`
|
|
- key_value: `label/notes/key/value`
|
|
- document: `label/notes/file_type/content`
|
|
- other kinds: `label/notes`
|
|
- Integer coercion/validation added for `length/period/digits` with explicit status errors.
|
|
- Added shared selected-entry modify helpers to keep behavior deterministic and consistent:
|
|
- `_selected_entry_payload()`
|
|
- `_apply_selected_modify(...)`
|
|
- Expanded tests:
|
|
- `src/tests/test_tui_v2_textual_interactions.py` adds success + validation tests for set/clear field workflows across password/totp/key_value.
|
|
- `src/tests/test_tui_v2_action_matrix.py` includes command guard and action-path coverage for new commands.
|
|
- Validation:
|
|
- `.venv/bin/pytest -q src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py src/tests/test_tui_v2_helpers.py`
|
|
- Result: `28 passed`.
|
|
- Backlog update:
|
|
- `docs/tui_v2_parity_backlog.md` now marks Phase B field-level edit parity complete.
|
|
- Phase B is effectively complete in tracker and next focus should move to Phase C (dedicated 2FA board parity).
|
|
|
|
## 2026-03-01 TUI v2 parity Phase C: dedicated 2FA board
|
|
- Added dedicated 2FA board mode in `src/seedpass/tui_v2/app.py`:
|
|
- keybind: `6` (`action_toggle_totp_board`)
|
|
- palette commands: `2fa-board`, `2fa-hide`, `2fa-refresh`, `2fa-copy <entry_id>`
|
|
- Added right-pane board widget `#totp-board` and visibility switching helpers.
|
|
- Added live refresh/timer behavior:
|
|
- app interval tick (`set_interval(1.0, _tick_totp_board)`) updates board while visible
|
|
- per-row remaining seconds (`rem`) based on each TOTP period
|
|
- Added board display semantics for deterministic/imported split:
|
|
- source column (`det` / `imp`) from `deterministic` flag fallback to secret presence
|
|
- Added secret-mode behavior for board:
|
|
- board masks visible codes as `******` when secret mode is enabled
|
|
- `2fa-copy` copies actual code to clipboard and reports clear-delay status
|
|
- Updated help/filter/palette discoverability text with new 2FA board commands.
|
|
- Test coverage added/expanded:
|
|
- `src/tests/test_tui_v2_textual_interactions.py`:
|
|
- `test_tui2_textual_2fa_board_view_timer_and_copy`
|
|
- `test_tui2_textual_2fa_board_secret_mode_and_validation`
|
|
- `src/tests/test_tui_v2_action_matrix.py` command matrix includes 2FA command guards/actions
|
|
- Validation:
|
|
- `.venv/bin/pytest -q src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py src/tests/test_tui_v2_helpers.py`
|
|
- Result: `30 passed`.
|
|
- Backlog update: all Phase C checkbox items now marked complete in `docs/tui_v2_parity_backlog.md`.
|
|
|
|
## 2026-03-01 TUI v2 parity Phase D slice: profile + settings palette plumbing
|
|
- Extended `launch_tui2(...)` to accept optional `profile_service_factory` and `config_service_factory`, in addition to entry service factory.
|
|
- Updated CLI preflight wiring (`src/seedpass/cli/__init__.py`) so TUI v2 receives entry/profile/config services from a single initialized manager when available, while preserving existing monkeypatch compatibility in CLI tests.
|
|
- Added new TUI v2 palette commands in `src/seedpass/tui_v2/app.py`:
|
|
- `profiles-list`
|
|
- `profile-switch <fingerprint> [password]`
|
|
- `setting-secret <on|off> [delay]`
|
|
- `setting-offline <on|off>`
|
|
- `setting-quick-unlock <on|off>`
|
|
- Added toggle parsing helper for robust boolean token handling (`on/off/true/false/...`).
|
|
- Added Textual interaction test fakes for profile/config services and new command coverage:
|
|
- `test_tui2_textual_profiles_and_settings_palette_commands`
|
|
- `test_tui2_textual_profiles_and_settings_palette_validation`
|
|
- Expanded action-matrix command coverage to include new profile/settings command guard paths.
|
|
- Validation run:
|
|
- `.venv/bin/pytest -q src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py src/tests/test_tui_v2_helpers.py src/tests/test_typer_cli.py`
|
|
- Result: `86 passed`.
|
|
- Backlog update (`docs/tui_v2_parity_backlog.md`):
|
|
- marked `secret mode / quick unlock / offline toggles` complete.
|
|
- profile switch/add/remove/list/rename remains open because only list/switch command-path parity is currently implemented; add/remove/rename UX flows still pending.
|
|
|
|
## 2026-03-01 TUI v2 parity Phase D slice: profile lifecycle + relay/sync command paths
|
|
- Extended TUI launch wiring to accept optional `nostr_service_factory` and `sync_service_factory` in `launch_tui2(...)`.
|
|
- Updated CLI preflight service bundle (`src/seedpass/cli/__init__.py`) to pass entry/profile/config/nostr/sync services from a shared manager when available, while preserving monkeypatch compatibility in CLI tests.
|
|
- Added new palette commands in `src/seedpass/tui_v2/app.py`:
|
|
- profile lifecycle: `profile-add`, `profile-remove <fingerprint>` (plus existing `profiles-list`, `profile-switch`)
|
|
- relays/sync: `relay-list`, `relay-add <url>`, `relay-rm <index>`, `sync-now`, `sync-bg`
|
|
- Added Textual interaction fakes + coverage for new service surfaces:
|
|
- fake profile service now supports add/remove
|
|
- new fake nostr service for relay list/add/remove
|
|
- new fake sync service for sync-now/bg paths
|
|
- Expanded command matrix coverage to include new profile/relay/sync guard-path commands.
|
|
- Validation:
|
|
- `.venv/bin/pytest -q src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py src/tests/test_tui_v2_helpers.py src/tests/test_typer_cli.py`
|
|
- Result: `86 passed`.
|
|
- Backlog status update:
|
|
- Phase D rows for profile and relay/sync remain open because profile rename and relay reset parity are still missing.
|
|
- Added explicit progress note in `docs/tui_v2_parity_backlog.md` documenting currently landed command coverage.
|
|
|
|
## 2026-03-01 TUI v2 parity Phase D completion slice: profile rename + relay reset
|
|
- Service-layer additions in `src/seedpass/core/api.py`:
|
|
- `ProfileService.rename_profile(fingerprint, name)` using fingerprint manager naming support.
|
|
- `NostrService.reset_relays()` to restore default relays, persist config/state, and update active Nostr client relay list.
|
|
- TUI palette additions in `src/seedpass/tui_v2/app.py`:
|
|
- `profile-rename <fingerprint> <name>`
|
|
- `relay-reset`
|
|
- Existing profile/relay command set now covers:
|
|
- profiles: list/switch/add/remove/rename
|
|
- relays/sync: list/add/remove/reset + sync-now/sync-bg
|
|
- Test updates:
|
|
- `src/tests/test_tui_v2_textual_interactions.py` fakes now implement `rename_profile` and `reset_relays`; success/validation tests assert both command paths.
|
|
- `src/tests/test_tui_v2_action_matrix.py` matrix guard coverage includes `profile-rename` and `relay-reset`.
|
|
- Validation:
|
|
- `.venv/bin/pytest -q src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py src/tests/test_tui_v2_helpers.py src/tests/test_typer_cli.py`
|
|
- Result: `86 passed`.
|
|
- Backlog update:
|
|
- `docs/tui_v2_parity_backlog.md` now marks both `profile switch/add/remove/list/rename` and `relay view/add/remove/reset + sync controls` complete.
|
|
- Remaining Phase D open items are `inactivity timeout + KDF settings` and checksum/import-export utility actions.
|
|
|
|
## 2026-03-01 TUI v2 parity Phase D completion slice: inactivity/KDF + checksum/export utilities
|
|
- Extended TUI launch dependency injection to include optional `utility_service_factory` and `vault_service_factory`.
|
|
- CLI preflight bundle (`src/seedpass/cli/__init__.py`) now provides utility/vault services to TUI v2 when manager-backed services are available.
|
|
- Added new settings commands in `src/seedpass/tui_v2/app.py`:
|
|
- `setting-timeout <seconds>`
|
|
- `setting-kdf-iterations <n>`
|
|
- `setting-kdf-mode <mode>`
|
|
- Added utility/export commands:
|
|
- `checksum-verify`
|
|
- `checksum-update`
|
|
- `db-export <path>`
|
|
- `db-import <path>`
|
|
- `totp-export <path>`
|
|
- `parent-seed-backup [path] [password]`
|
|
- Added support commands to existing profile/relay set:
|
|
- `profile-rename <fingerprint> <name>` and `relay-reset` (wired to new service methods).
|
|
- Service-layer additions in `src/seedpass/core/api.py`:
|
|
- `ProfileService.rename_profile(...)`
|
|
- `NostrService.reset_relays()`
|
|
- Test coverage updates:
|
|
- `src/tests/test_tui_v2_textual_interactions.py` now has fakes and assertions for all new settings/checksum/export/profile-rename/relay-reset commands.
|
|
- `src/tests/test_tui_v2_action_matrix.py` command matrix includes guard path invocations for the new commands.
|
|
- Validation:
|
|
- `.venv/bin/pytest -q src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py src/tests/test_tui_v2_helpers.py src/tests/test_typer_cli.py`
|
|
- Result: `86 passed`.
|
|
- Backlog update:
|
|
- `docs/tui_v2_parity_backlog.md` now marks all Phase D items complete.
|
|
- Remaining backlog focus shifts to Phase E release/CI closure work.
|
|
|
|
## 2026-03-01 TUI v2 parity Phase E: CI smoke + docs/help closure
|
|
- Added dedicated CI smoke script for TUI v2 runtime diagnostics:
|
|
- `scripts/tui2_check_smoke.sh`
|
|
- Executes `seedpass tui2 --check` when CLI binary is available, otherwise falls back to Typer `CliRunner` invocation.
|
|
- Validates JSON output keys (`status`, `backend`, `textual_available`, `message`) and backend value (`textual`).
|
|
- Includes `python`/`python3` fallback handling for portability.
|
|
- Wired CI smoke gate into default CI test runner:
|
|
- `scripts/run_ci_tests.sh` now runs `./scripts/tui2_check_smoke.sh` before determinism/full test suite.
|
|
- Added explicit workflow smoke step for Poetry matrix:
|
|
- `.github/workflows/tests.yml` includes `poetry run seedpass tui2 --check`.
|
|
- Phase E docs/status updates:
|
|
- `docs/tui_v2_parity_backlog.md` marks all Phase E closure items complete and includes release notes.
|
|
- `docs/tui_v2_plan.md` marks the CI smoke command item complete in Phase 0.
|
|
- `docs/tui_v2_parity_checklist.md` adds closure notes for CI smoke and retained legacy fallback paths.
|
|
- Validation run:
|
|
- `scripts/tui2_check_smoke.sh` => `tui2 --check smoke: ok`
|
|
- `bash -n scripts/tui2_check_smoke.sh scripts/run_ci_tests.sh` => clean
|
|
- `.venv/bin/pytest -q src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py src/tests/test_tui_v2_helpers.py src/tests/test_typer_cli.py` => `86 passed`.
|
|
|
|
## 2026-03-02 TUI v2 UX fixes: stale selection panel, clipped nav/help, and sensitive feedback clarity
|
|
- Reproduced screenshot-reported UX issues in TUI v2:
|
|
- Left panel could show stale `Selected: (none)` even while entry details were loaded.
|
|
- Left panel command text could clip/wrap aggressively and hide actionable hints.
|
|
- Sensitive reveal/QR confirmation paths could appear like no-op when only status line changed.
|
|
- QR output could become visually distorted by line wrapping in the secret panel.
|
|
- Fixes implemented in `src/seedpass/tui_v2/app.py`:
|
|
- `_show_entry(...)` now refreshes the filters panel immediately so selected state is always in sync.
|
|
- Added `on_list_view_highlighted(...)` to keep selected entry aligned with list highlight navigation.
|
|
- Left filters pane now uses `height: 1fr` + `overflow: auto` to prevent clipping.
|
|
- Secret panel now sets `text-wrap: nowrap` to preserve QR matrix geometry.
|
|
- Footer top border removed to avoid visual crowding at the bottom status/footer region.
|
|
- Filters/nav action copy trimmed to avoid forced line wraps in narrow terminals.
|
|
- Confirmation-required reveal/QR actions now also write explicit instructions into `#secret-detail`.
|
|
- Added regression coverage in `src/tests/test_tui_v2_textual_interactions.py`:
|
|
- `test_tui2_textual_filters_panel_tracks_selected_entry` ensures left-panel selected summary updates after opening a different entry.
|
|
- Validation:
|
|
- `pytest -q src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py src/tests/test_tui_v2_helpers.py` -> `33 passed`.
|
|
- `python scripts/ai_tui2_agent_test.py --scenario core --verbose` -> `[PASS] core`.
|
|
|
|
## 2026-03-02 Hardening checklist execution (post TUI v2 UX patch)
|
|
- Completed requested hardening items in repo workspace:
|
|
1) CI-equivalent run via `scripts/run_ci_tests.sh`: PASS.
|
|
- Determinism gate: `43 passed, 950 skipped`.
|
|
- Full suite: `977 passed, 16 skipped`.
|
|
2) Installer smoke (`beta`) via `scripts/installer_smoke_unix.sh`:
|
|
- `mode=tui`: PASS.
|
|
- `mode=both`: PASS (GUI intentionally skipped in headless runtime).
|
|
3) Parity bug-bash harnesses:
|
|
- `scripts/ai_tui2_agent_test.py --scenario extended --verbose`: PASS.
|
|
- `scripts/ai_tui_agent_test.py --scenario extended --verbose`: PASS.
|
|
- Added release note document: `docs/beta_hardening_2026-03-02.md` with checklist commands, results, and residual operational warning about stale launcher binaries on PATH.
|
|
- Practical note: Installer repeatedly warns about stale `/home/user/.local/bin/seedpass` entries; this does not fail install but can obscure which binary users are executing.
|
|
|
|
## 2026-03-02 Next parity slice: keyboard-path managed-account sensitive actions
|
|
- Added explicit keyboard-path TUI v2 regression coverage for managed-account sensitive actions.
|
|
- New test in `src/tests/test_tui_v2_textual_interactions.py`:
|
|
- `test_tui2_textual_managed_account_keyboard_reveal_and_qr`
|
|
- Validates pressing `v` triggers confirmation-required reveal messaging for managed-account entries.
|
|
- Validates pressing `g` renders managed-account QR payload after list focus is set.
|
|
- Note on test ergonomics:
|
|
- Search input can capture keystrokes by default; test now focuses `#entry-list` before keybinding presses to exercise app-level binding path reliably.
|
|
- Validation run:
|
|
- `pytest -q src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py src/tests/test_tui_v2_helpers.py` -> `34 passed`.
|
|
|
|
## 2026-03-02 Centralized dev planning doc added
|
|
- Added `docs/dev_control_center.md` as the single decision-layer document for what to work on next.
|
|
- The control center now links plan, parity, security, QA, and hardening documents and includes a prioritized next-step queue.
|
|
- Added `docs/README.md` “Start Here” link pointing to `dev_control_center.md`.
|
|
- Pre-slice health verification executed first:
|
|
- remote sync check on `origin/beta` (no new remote commits)
|
|
- `scripts/run_ci_tests.sh` pass with full suite: `979 passed, 16 skipped`, coverage `85.65%`.
|
|
|
|
## 2026-03-02 Slice A implementation progress: managed-account session parity
|
|
- Added parity matrix doc: `docs/tui_v2_legacy_parity_matrix.md` and linked it from control-center/readme docs.
|
|
- Implemented managed-account session controls in TUI v2 palette:
|
|
- `managed-load (optional: entry_id)`
|
|
- `managed-exit`
|
|
- Added core service wrappers in `src/seedpass/core/api.py`:
|
|
- `EntryService.load_managed_account(entry_id)`
|
|
- `EntryService.exit_managed_account()`
|
|
- Added tests:
|
|
- `src/tests/test_tui_v2_textual_interactions.py` (session command behavior + validation)
|
|
- `src/tests/test_tui_v2_action_matrix.py` (command matrix coverage)
|
|
- `src/tests/test_core_api_services.py` (service wrapper calls)
|
|
- Validation:
|
|
- `pytest -q src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py src/tests/test_core_api_services.py`
|
|
- Result: `86 passed`.
|
|
- Updated matrix priorities: next parity target is explicit Nostr maintenance commands (`reset sync state`, `fresh namespace`).
|
|
|
|
## 2026-03-02 Next gap landed: Nostr maintenance parity in TUI v2
|
|
- Implemented two legacy Nostr maintenance equivalents in TUI v2 palette:
|
|
- `nostr-reset-sync-state`
|
|
- `nostr-fresh-namespace`
|
|
- Added service-layer methods in `src/seedpass/core/api.py` (`NostrService`):
|
|
- `reset_sync_state()`
|
|
- `start_fresh_namespace()`
|
|
- includes runtime sync-state clearing and account index management.
|
|
- Added/updated tests:
|
|
- `src/tests/test_tui_v2_textual_interactions.py` (happy path + unavailable/usage validation)
|
|
- `src/tests/test_tui_v2_action_matrix.py` (command matrix coverage)
|
|
- `src/tests/test_core_api_services.py` (service method behavior)
|
|
- Validation:
|
|
- `pytest -q src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py src/tests/test_core_api_services.py`
|
|
- Result: `88 passed`.
|
|
- Updated planning docs:
|
|
- `docs/tui_v2_legacy_parity_matrix.md` marks Nostr maintenance parity as implemented.
|
|
- `docs/dev_control_center.md` now points to archived-only view/filter as the next parity target.
|
|
|
|
## 2026-03-02 Next parity slice landed: archived view/filter parity in TUI v2
|
|
- Added archive-scope support across TUI v2 entry browsing with three modes:
|
|
- `active` (default, excludes archived entries)
|
|
- `all` (includes active + archived)
|
|
- `archived` (archived-only)
|
|
- TUI v2 updates in `src/seedpass/tui_v2/app.py`:
|
|
- new keybinding: `h` (`action_cycle_archive_scope`)
|
|
- new palette command: `archive-filter <active|all|archived>`
|
|
- left filter panel now shows `Archive: <scope>`
|
|
- search loads now pass archive scope to service search.
|
|
- Core wrapper updates in `src/seedpass/core/api.py`:
|
|
- `EntryService.search_entries(...)` now accepts
|
|
- `include_archived: bool = False`
|
|
- `archived_only: bool = False`
|
|
- wrapper filters archived rows deterministically on top of entry-manager search results.
|
|
- UX parity fix bundled:
|
|
- palette `archive`/`restore` branch now returns correctly after success.
|
|
- archive/restore flows preserve selected-entry context when an archived item leaves the active view, enabling immediate restore roundtrip without forced reselection.
|
|
- Test coverage updates:
|
|
- `src/tests/test_core_api_services.py`: archive include/exclude/only behavior for `EntryService.search_entries`.
|
|
- `src/tests/test_tui_v2_textual_interactions.py`: new archive-scope interaction test.
|
|
- updated TUI fake services across
|
|
- `test_tui_v2_textual_interactions.py`
|
|
- `test_tui_v2_action_matrix.py`
|
|
- `test_tui_v2_kb_scale_stress.py`
|
|
- `test_tui_v2_parity_scenarios.py`
|
|
to accept archive-scope args.
|
|
- Validation run:
|
|
- `pytest -q src/tests/test_core_api_services.py src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py src/tests/test_tui_v2_kb_scale_stress.py src/tests/test_tui_v2_parity_scenarios.py`
|
|
- Result: `96 passed, 1 skipped`.
|
|
- Planning docs updated:
|
|
- `docs/tui_v2_legacy_parity_matrix.md` marks archived-only view parity implemented.
|
|
- `docs/dev_control_center.md` next target updated to dedicated `npub` utility command parity.
|
|
|
|
## 2026-03-02 Next parity slice landed: dedicated Nostr npub utility command
|
|
- Implemented utility-style Nostr pubkey command in TUI v2 palette:
|
|
- `npub`
|
|
- alias: `nostr-pubkey`
|
|
- Behavior in `src/seedpass/tui_v2/app.py`:
|
|
- validates no-arg usage (`Usage: npub`)
|
|
- requires Nostr service availability and `get_pubkey()` support
|
|
- fetches active profile pubkey and renders it in `#secret-detail`
|
|
- includes QR payload rendering for `nostr:<npub>` when QR runtime is available
|
|
- status line reports `Displayed active Nostr pubkey`
|
|
- Help/discovery text updated to include `npub` in palette placeholder/help/actions copy.
|
|
- Test coverage updates:
|
|
- `src/tests/test_tui_v2_textual_interactions.py`
|
|
- success path in profiles/settings command flow (`npub` status + panel assertion)
|
|
- unavailable service path (`Nostr service unavailable`)
|
|
- invalid usage path (`npub now` -> `Usage: npub`)
|
|
- `src/tests/test_tui_v2_action_matrix.py`
|
|
- matrix command-path coverage invokes `npub`.
|
|
- Parity docs update:
|
|
- `docs/tui_v2_legacy_parity_matrix.md` now marks `Display npub` as Implemented.
|
|
- `docs/dev_control_center.md` progress notes now include `npub` parity completion and shift next target to checklist closure.
|
|
|
|
## 2026-03-02 Parity checklist closure: full legacy workflow coverage
|
|
- Executed parity bug-bash harnesses for both interactive stacks:
|
|
- `python scripts/ai_tui2_agent_test.py --scenario extended --verbose`
|
|
- Result: `PASS`
|
|
- Report: `artifacts/agent_tui2_test/20260302T135526Z/report.json`
|
|
- `python scripts/ai_tui_agent_test.py --scenario extended --verbose`
|
|
- Result: `PASS`
|
|
- Report: `artifacts/agent_tui_test/20260302T135526Z/report.json`
|
|
- Updated parity documentation:
|
|
- `docs/tui_v2_parity_checklist.md`
|
|
- status changed to parity-complete on `beta`
|
|
- `Full legacy workflow coverage` changed from `Pending` to `Yes`
|
|
- added evidence section with exact commands and report paths.
|
|
- `docs/dev_control_center.md`
|
|
- removed parity-closure pending state
|
|
- shifted priority stack to post-parity cutover readiness (testing gates, Nostr resilience, cutover memo, supply-chain readiness).
|
|
|
|
## 2026-03-02 Testing-gate hardening: TUI v2 + service coverage thresholds
|
|
- Added dedicated focused gate script: `scripts/tui2_coverage_gate.sh`.
|
|
- Gate behavior:
|
|
- uses `.venv/bin/python` when available (fallback `python`/`python3`)
|
|
- checks Textual runtime availability before running focused TUI v2 coverage suite
|
|
- runs focused tests with coverage output: `artifacts/coverage/coverage.tui2_gate.json`
|
|
- enforces thresholds via `scripts/check_critical_coverage.py --no-default-thresholds`:
|
|
- `src/seedpass/tui_v2/app.py >= 78%`
|
|
- `src/seedpass/core/api.py >= 85%`
|
|
- writes machine-readable result to `artifacts/coverage/critical_gate.tui2.json`.
|
|
- Strengthened default critical-coverage policy:
|
|
- `scripts/check_critical_coverage.py` default thresholds now include:
|
|
- `src/seedpass/core/api.py = 85%`.
|
|
- CI runner hardening:
|
|
- `scripts/run_ci_tests.sh` now enables `CRITICAL_COVERAGE_GATE` by default (`1`).
|
|
- adds JSON output for full-suite gate: `artifacts/coverage/critical_gate.full.json`.
|
|
- adds focused TUI v2 gate call controlled by `TUI2_COVERAGE_GATE` (default `1`).
|
|
- coverage-gate Python invocation now uses `python`/`python3` fallback resolution.
|
|
- Test/doc updates:
|
|
- `src/tests/test_check_critical_coverage.py` includes assertion for new default API threshold.
|
|
- docs updated in:
|
|
- `docs/ai_agent_tui_testing.md`
|
|
- `docs/security_readiness_checklist.md`
|
|
- `docs/dev_control_center.md`
|
|
- Validation run (this slice):
|
|
- `pytest -q src/tests/test_check_critical_coverage.py` -> `9 passed`
|
|
- `./scripts/tui2_coverage_gate.sh` -> PASS
|
|
- `src/seedpass/core/api.py: 86.64%`
|
|
- `src/seedpass/tui_v2/app.py: 79.87%`
|
|
- `python3 scripts/check_critical_coverage.py artifacts/coverage/coverage.json --json-output artifacts/coverage/critical_gate.full.json` -> PASS.
|
|
|
|
## 2026-03-02 Nostr resilience deterministic failure-mode suite expansion
|
|
- Added new deterministic resilience tests in `src/tests/test_nostr_resilience_failure_modes.py` targeting `PasswordManager` Nostr sync error paths.
|
|
- New covered scenarios:
|
|
- `sync_vault_async` returns `None` and sets explicit error when encrypted index bytes are unavailable.
|
|
- `sync_vault_async` preserves relay/publish error text when `publish_snapshot` fails to produce an event ID.
|
|
- `sync_vault_async` sets fallback publish failure error when no relay error text is provided.
|
|
- `sync_index_from_nostr_async` emits warning notification when snapshot fetch returns no result and client has `last_error`.
|
|
- `sync_index_from_nostr_async` emits warning notification on snapshot-fetch exceptions.
|
|
- Validation run:
|
|
- `pytest -q src/tests/test_nostr_resilience_failure_modes.py src/tests/test_background_vault_sync_paths.py src/tests/test_post_sync_messages.py src/tests/test_offline_mode_behavior.py`
|
|
- Result: `16 passed`.
|
|
- Docs updated:
|
|
- `docs/security_readiness_checklist.md` now includes `test_nostr_resilience_failure_modes.py` under Nostr resilience evidence.
|
|
- `docs/dev_control_center.md` progress notes updated to reflect deterministic Nostr resilience suite expansion.
|
|
|
|
## 2026-03-02 Cutover memo refresh and doc alignment
|
|
- Updated `docs/tui_v2_cutover_decision.md` to reflect current `beta` reality:
|
|
- default route is TUI v2 with explicit legacy fallback paths retained
|
|
- parity closure and bug-bash evidence status
|
|
- strengthened CI/testing gates (runtime smoke + critical coverage + focused TUI2 coverage)
|
|
- remaining blockers reframed to release hardening areas (soak validation, supply-chain completion, operational runbooks).
|
|
- Aligned planning docs:
|
|
- `docs/dev_control_center.md` next-step priorities updated to remove completed memo-refresh item and track current hardening priorities.
|
|
- `docs/tui_v2_plan.md` status updated from draft wording to implemented/reference-plan wording.
|
|
|
|
## 2026-03-02 Supply-chain/readiness documentation closure slice
|
|
- Added maintainer/consumer release verification runbook:
|
|
- `docs/release_verification_runbook.md`
|
|
- includes checksum verification and `cosign verify-blob` with explicit issuer/identity constraints.
|
|
- Added release protection policy document:
|
|
- `docs/release_protection_policy.md`
|
|
- defines required branch/tag/release controls and evidence recording expectations.
|
|
- Added operational readiness runbook index and staged rollout drill runbook:
|
|
- `docs/operational_runbooks.md`
|
|
- `docs/staged_rollout_runbook.md`
|
|
- Closed missing incident runbook gap by adding:
|
|
- `docs/agent-handoffs/incidents/2026-02-15-relay-health-preflight-job.md`
|
|
and updated follow-up note `2026-03-01-missing-runbook.md` to reflect resolution.
|
|
- Updated supply-chain integrity doc with:
|
|
- explicit temporary exception register entry for `GHSA-wj6h-64fc-37mp` / `CVE-2025-62727`
|
|
- owner + expiration (`2026-04-15`) + compensating controls
|
|
- revised remaining-work list focused on production evidence and enforcement.
|
|
- Updated readiness/control docs:
|
|
- `docs/security_readiness_checklist.md` rows 8/9/10 now reference new runbooks and moved 9/10 to `In Progress`.
|
|
- `docs/dev_control_center.md` and `docs/README.md` now link the new runbook docs.
|
|
- `TODO.md` supply-chain item now references published verification runbook.
|
|
|
|
## 2026-03-02 Feature/parity refocus slice: in-app command discoverability + coverage bump
|
|
- Added full palette command reference support in TUI v2 (`src/seedpass/tui_v2/app.py`):
|
|
- new command: `help-commands`
|
|
- alias: `commands`
|
|
- `help` now also renders the full reference in the entry-detail panel.
|
|
- Added command reference helpers:
|
|
- `_palette_help_summary()`
|
|
- `_palette_reference_text()`
|
|
- Updated palette placeholder copy to include `help-commands`.
|
|
- Tests added/expanded:
|
|
- `src/tests/test_tui_v2_textual_interactions.py`
|
|
- `test_tui2_textual_palette_help_commands_reference`
|
|
- `src/tests/test_tui_v2_action_matrix.py`
|
|
- command matrix now covers `help-commands` success + usage error path.
|
|
- Validation:
|
|
- `pytest -q src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py src/tests/test_tui_v2_parity_scenarios.py src/tests/test_tui_v2_helpers.py`
|
|
- Result: `40 passed`.
|
|
- `./scripts/tui2_coverage_gate.sh` -> PASS
|
|
- `src/seedpass/tui_v2/app.py`: `79.97%` (up from `79.87%`)
|
|
- `src/seedpass/core/api.py`: `86.64%`.
|
|
- Docs updated:
|
|
- `docs/tui_v2_parity_checklist.md`: command discoverability row moved from `Partial` to `Yes`.
|
|
- `docs/dev_control_center.md`: priorities refocused to feature/parity and test coverage targets first.
|
|
|
|
## 2026-03-02 Parity UX slice: guided quick-start + in-app stats for TUI v2
|
|
- User feedback (side-by-side v2 vs legacy) identified three UX parity gaps:
|
|
1) guided onboarding/first-run feel,
|
|
2) stats/operational visibility,
|
|
3) explicit lock/session affordances.
|
|
- Implemented first two in `src/seedpass/tui_v2/app.py`:
|
|
- new palette command: `quickstart`
|
|
- renders guided first-steps panel in detail pane.
|
|
- new palette command: `stats`
|
|
- renders vault stats dashboard in detail pane.
|
|
- prefers `VaultService.stats()` when available.
|
|
- falls back to deterministic local aggregate from `EntryService.search_entries(..., include_archived=True)`.
|
|
- empty-vault UX improvement:
|
|
- default detail panel now shows Quick Start guidance instead of plain "No entries match".
|
|
- Discoverability updates:
|
|
- palette placeholder includes `quickstart` and `stats`.
|
|
- command help/reference now includes quickstart/stats entries.
|
|
- left actions panel includes quickstart/stats hint.
|
|
- Tests added/updated:
|
|
- `src/tests/test_tui_v2_textual_interactions.py`
|
|
- `test_tui2_textual_quickstart_and_stats_commands`
|
|
- `test_tui2_textual_empty_vault_shows_quickstart`
|
|
- `src/tests/test_tui_v2_action_matrix.py`
|
|
- command matrix includes quickstart/stats success and usage-error paths.
|
|
- Validation:
|
|
- `pytest -q src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py src/tests/test_tui_v2_parity_scenarios.py src/tests/test_tui_v2_helpers.py`
|
|
- Result: `42 passed`.
|
|
- `./scripts/tui2_coverage_gate.sh` -> PASS (`src/seedpass/tui_v2/app.py` remains above gate at `79.30%`).
|
|
- Planning docs updated to track remaining UX parity gap:
|
|
- `docs/dev_control_center.md`
|
|
- `docs/tui_v2_legacy_parity_matrix.md`
|
|
(remaining medium gap: explicit lock/session affordances).
|
|
|
|
## 2026-03-02 Parity UX slice: explicit session lock/unlock/status affordances
|
|
- Implemented in `src/seedpass/tui_v2/app.py`:
|
|
- new palette commands:
|
|
- `session-status`
|
|
- `lock`
|
|
- `unlock <password>`
|
|
- left panel now displays:
|
|
- `Session: locked|unlocked`
|
|
- `Managed: #<entry_id>|(none)`
|
|
- managed session visibility wired:
|
|
- `managed-load` sets active managed-session marker
|
|
- `managed-exit` clears active managed-session marker
|
|
- lock guard behavior:
|
|
- `open`, `reveal`, and `qr` actions are blocked while locked
|
|
- selected entry/view state is cleared on lock
|
|
- unlock restores normal browse/reveal behavior
|
|
- Command discoverability updates:
|
|
- palette placeholder/help summary/reference now include session commands.
|
|
- Tests added/updated:
|
|
- `src/tests/test_tui_v2_textual_interactions.py`
|
|
- `test_tui2_textual_palette_session_status_lock_and_unlock`
|
|
- managed session test now asserts filter-panel state line updates
|
|
- validation suite now covers `session-status`, `lock`, and `unlock` usage/unavailable paths
|
|
- `src/tests/test_tui_v2_action_matrix.py`
|
|
- matrix command paths now exercise session command usage + runtime cases
|
|
- Validation:
|
|
- `poetry run pytest -q src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py`
|
|
- Result: `28 passed`.
|
|
- Planning docs updated:
|
|
- `docs/tui_v2_legacy_parity_matrix.md` now marks session lock/unlock/status rows as implemented.
|
|
- `docs/dev_control_center.md` priority list now reflects onboarding as the primary remaining UX parity item.
|
|
|
|
## 2026-03-02 Parity UX slice: first-run onboarding flow parity
|
|
- Implemented explicit onboarding guidance in `src/seedpass/tui_v2/app.py`:
|
|
- new palette command: `onboarding`
|
|
- alias: `welcome`
|
|
- `quickstart` remains supported and now renders the same onboarding guide for backward compatibility.
|
|
- Empty-vault startup behavior now renders the onboarding panel and status guidance:
|
|
- status text updated to: run `onboarding` (or `quickstart`) to begin.
|
|
- Onboarding guide content now provides a structured first-run path:
|
|
- create first entry
|
|
- inspect/reveal/QR verification
|
|
- operate with stats/help/linking commands.
|
|
- Command discoverability updates:
|
|
- palette placeholder, help summary, and reference include onboarding.
|
|
- left action hints now show onboarding/quickstart/stats path.
|
|
- Tests updated:
|
|
- `src/tests/test_tui_v2_textual_interactions.py`
|
|
- quickstart/stats test now includes onboarding command assertions
|
|
- empty-vault test now validates onboarding panel rendering
|
|
- `src/tests/test_tui_v2_action_matrix.py`
|
|
- matrix coverage now includes onboarding usage and success paths
|
|
- Validation:
|
|
- `poetry run pytest -q src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py`
|
|
- Result: `28 passed`.
|
|
- Planning docs updated:
|
|
- `docs/tui_v2_legacy_parity_matrix.md` now marks onboarding parity as implemented and clears active medium/high parity gaps.
|
|
- `docs/dev_control_center.md` now reflects that the tracked onboarding/stats/session UX gaps are landed.
|
|
|
|
## 2026-03-02 UI direction capture slice: mockup-aligned TUI v2 refresh plan
|
|
- Added a detailed multi-session implementation spec:
|
|
- `docs/tui_v2_ui_refresh_plan.md`
|
|
- Plan captures:
|
|
- visual contract preserving existing green palette
|
|
- target information architecture (left tree, top grid, bottom inspector board, bottom action strip)
|
|
- component requirements and per-entry-kind board template contracts
|
|
- keyboard/command discoverability expectations
|
|
- phased delivery plan with explicit exit criteria
|
|
- required test gates and handoff checklist for session continuity
|
|
- Linked the plan from control/index docs:
|
|
- `docs/dev_control_center.md`
|
|
- `docs/README.md`
|
|
- `docs/tui_v2_parity_backlog.md`
|
|
- Recommended next implementation slice documented as:
|
|
- Phase 1: shell restructure (layout scaffolding only, no behavior regressions).
|
|
|
|
## 2026-03-02 UI refresh implementation slice: Phase 1 shell scaffold (initial pass)
|
|
- Implemented mockup-aligned shell scaffolding in `src/seedpass/tui_v2/app.py`:
|
|
- added `#top-ribbon` (live operational summary line)
|
|
- added `Entry Grid` and `Inspector Board` section headers
|
|
- added `#action-strip` persistent keyboard/action hint rail
|
|
- Operational summary now updates with:
|
|
- fingerprint, managed-session state, result count, active kind/archive scope, session lock state, last sync summary
|
|
- Sync commands now update top-ribbon sync summary:
|
|
- `sync-now`
|
|
- `sync-bg`
|
|
- Fixed Textual markup conflict in action-strip hint text by using plain-text tokens (`/:Search`, `J:Jump`, etc.).
|
|
- Validation:
|
|
- `poetry run pytest -q src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py`
|
|
- Result: `28 passed`.
|
|
- Refresh plan updated with explicit phase progress and next step:
|
|
- `docs/tui_v2_ui_refresh_plan.md` (Phase 2 grid modernization next).
|
|
|
|
## 2026-03-02 UI refresh implementation slice: Phase 2 grid modernization (initial pass)
|
|
- Implemented denser table-style grid presentation in `src/seedpass/tui_v2/app.py`:
|
|
- `#grid-heading` expanded to show:
|
|
- column header scaffold
|
|
- sort-indicator placeholder row
|
|
- live page/row counters
|
|
- `_render_entry_label(...)` now outputs aligned fixed-width columns:
|
|
- `Idx`, `Entry`, `Title`, `Kind`, `Meta`, `Arch`
|
|
- row `Meta` column uses URL/username preview when present.
|
|
- No command or service-flow behavior changes; visual presentation only.
|
|
- Validation:
|
|
- `poetry run pytest -q src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py`
|
|
- Result: `28 passed`.
|
|
- Refresh plan updated:
|
|
- `docs/tui_v2_ui_refresh_plan.md` now records Phase 2 progress and sets Phase 3 (inspector board templates) as next slice.
|
|
|
|
## 2026-03-02 UI refresh implementation slice: Phase 3 inspector board templates (core kinds)
|
|
- Implemented structured inspector-board rendering in `src/seedpass/tui_v2/app.py` for core kinds:
|
|
- `password` / `stored_password`
|
|
- `document` / `note`
|
|
- `seed` / `managed_account`
|
|
- `totp`
|
|
- Added reusable board helper methods:
|
|
- `_entry_kind(...)`
|
|
- `_entry_tags_text(...)`
|
|
- `_entry_notes_text(...)`
|
|
- `_entry_board_header(...)`
|
|
- `_entry_board_text(...)`
|
|
- Entry details now default to board format for covered kinds and keep generic JSON fallback for remaining kinds.
|
|
- Sensitive fields remain hidden in board body; existing reveal/QR flows are still the explicit disclosure path.
|
|
- Validation:
|
|
- `poetry run pytest -q src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py`
|
|
- Result: `28 passed`.
|
|
- Refresh plan updated:
|
|
- `docs/tui_v2_ui_refresh_plan.md` now records Phase 3 progress and sets Phase 4 advanced-kind board templates as next slice.
|
|
|
|
## 2026-03-02 UI refresh implementation slice: Phase 4 advanced-kind actions (copy workflow)
|
|
- Implemented advanced-kind inspector action command in `src/seedpass/tui_v2/app.py`:
|
|
- `copy <field> (optional: confirm)`
|
|
- Added kind-specific copy field resolution:
|
|
- password/stored_password: `password`, `username`, `url`
|
|
- seed/managed_account: `seed|phrase`
|
|
- totp: `code`, `secret`
|
|
- ssh: `public`, `private`
|
|
- pgp: `private`, `fingerprint`
|
|
- nostr: `npub`, `nsec`
|
|
- key_value: `key`, `value`
|
|
- document/note: `content|text`
|
|
- Sensitive field copies now require explicit `confirm`.
|
|
- Updated palette help/reference strings to include copy action.
|
|
- Tests added/updated:
|
|
- `src/tests/test_tui_v2_textual_interactions.py`
|
|
- new test: `test_tui2_textual_copy_command_for_core_and_advanced_fields`
|
|
- validation assertions for copy usage errors
|
|
- `src/tests/test_tui_v2_action_matrix.py`
|
|
- matrix now exercises copy usage and success paths
|
|
- Validation:
|
|
- `poetry run pytest -q src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py`
|
|
- Result: `29 passed`.
|
|
- Refresh plan updated:
|
|
- `docs/tui_v2_ui_refresh_plan.md` marks this Phase 4 action slice and sets advanced-key export actions as next recommendation.
|
|
|
|
## 2026-03-02 UI refresh implementation slice: Phase 4 advanced-kind actions (export workflow)
|
|
- Implemented export action command in `src/seedpass/tui_v2/app.py`:
|
|
- `export-field <field> <path> (optional: confirm)`
|
|
- Export workflow details:
|
|
- uses the same field/kind resolver as `copy`
|
|
- writes UTF-8 payloads to requested file path
|
|
- supports relative paths (resolved from current working directory)
|
|
- creates parent directories when needed
|
|
- Sensitive field exports now require explicit `confirm`.
|
|
- Discoverability updates:
|
|
- command palette placeholder now includes `export-field`
|
|
- help summary and palette reference include `export-field`
|
|
- Tests added/updated:
|
|
- `src/tests/test_tui_v2_textual_interactions.py`
|
|
- extended copy test to cover `export-field` success and confirmation gating
|
|
- validation test covers usage errors
|
|
- `src/tests/test_tui_v2_action_matrix.py`
|
|
- matrix now exercises export-field usage + success paths
|
|
- Validation:
|
|
- `poetry run pytest -q src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py`
|
|
- Result: `29 passed`.
|
|
- Refresh plan updated:
|
|
- `docs/tui_v2_ui_refresh_plan.md` marks export workflow landed and points next to Phase 5 polish (tree nav + density toggle + final mockup alignment).
|
|
|
|
## 2026-03-02 UI refresh implementation slice: Phase 5 polish (density + profile tree scaffold)
|
|
- Implemented density controls in `src/seedpass/tui_v2/app.py`:
|
|
- keybind: `d` via `action_toggle_density`
|
|
- palette command: `density <compact|comfortable>`
|
|
- density state shown in top ribbon, left panel, and grid heading
|
|
- Implemented left-panel profile tree scaffold:
|
|
- new `Profiles` section in left panel
|
|
- uses profile service list when available
|
|
- marks active fingerprint entry
|
|
- Discoverability updates:
|
|
- command palette placeholder/help/reference include density command
|
|
- Tests updated:
|
|
- `src/tests/test_tui_v2_textual_interactions.py`
|
|
- pagination flow now verifies keybind/palette density success
|
|
- settings validation now covers density usage/invalid-mode errors
|
|
- `src/tests/test_tui_v2_action_matrix.py`
|
|
- matrix now exercises density usage error + valid mode switches
|
|
- Validation:
|
|
- `poetry run pytest -q src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py`
|
|
- Result: `29 passed`.
|
|
- Refresh plan updated:
|
|
- `docs/tui_v2_ui_refresh_plan.md` now tracks Phase 5 density/tree scaffold progress and points next to explicit tree keyboard navigation + selection actions.
|
|
|
|
## 2026-03-02 Planning sync slice: centralized "done vs left" UI roadmap update
|
|
- Updated `docs/tui_v2_ui_refresh_plan.md` to remove stale next-step text and add a clear status snapshot:
|
|
- completed phases/slices explicitly listed
|
|
- active remaining queue explicitly listed
|
|
- current next slice set to Phase 5 interactive tree navigation + final polish
|
|
- Updated `docs/dev_control_center.md` to reflect latest state:
|
|
- added recent focused TUI test evidence (`29 passed`, plus `31 passed` run with online-default notice tests)
|
|
- documented landed UI refresh features (`copy`, `export-field`, density, profile tree scaffold)
|
|
- documented online-by-default behavior and one-time settings notice
|
|
- added current remaining UI queue items in priority order
|
|
- Updated `docs/tui_v2_legacy_parity_matrix.md`:
|
|
- clarified no active medium/high functional parity gaps
|
|
- added implemented ergonomics rows (`copy`, `export-field`, `density`)
|
|
- linked remaining work to `docs/tui_v2_ui_refresh_plan.md` Phase 5 queue
|
|
|
|
## 2026-03-02 Planning slice: semantic vector index integration roadmap
|
|
- Added new cross-interface roadmap doc:
|
|
- `docs/semantic_vector_index_plan.md`
|
|
- Plan defines:
|
|
- local derived vector index per profile/device (no embedding sync in Phase 1)
|
|
- canonical sync remains unchanged source of truth
|
|
- KB-centric field allowlist and sensitive-field exclusions
|
|
- integration path for legacy TUI, Textual TUI v2, CLI, and API
|
|
- security/privacy controls and lock-state behavior expectations
|
|
- phased rollout (Phase A core scaffolding, B CLI/API, C TUI integration, D hardening)
|
|
- Linked roadmap into decision/index docs:
|
|
- `docs/dev_control_center.md`
|
|
- `docs/README.md`
|
|
- `docs/tui_v2_parity_backlog.md`
|
|
- Updated control-center priorities:
|
|
- keep Phase 5 TUI refresh completion ahead of semantic Phase A implementation
|
|
- semantic index Phase A now explicit next-track deliverable after current UI slice.
|
|
|
|
# Memory Update (2026-03-02)
|
|
|
|
## TUI v2 Phase 5 tree navigation parity landed
|
|
- Added explicit left-profile-tree keyboard navigation in `src/seedpass/tui_v2/app.py`:
|
|
- `Up` / `Down` for tree cursor movement
|
|
- `Ctrl+O` to open/switch the selected profile
|
|
- Added palette command parity/discoverability:
|
|
- `profile-tree-next`, `profile-tree-prev`, `profile-tree-open`
|
|
- Updated left panel rendering with cursor + active profile markers and refreshed tree state after profile add/remove/rename/switch.
|
|
- Extended Textual interaction + matrix tests:
|
|
- `src/tests/test_tui_v2_textual_interactions.py`
|
|
- `src/tests/test_tui_v2_action_matrix.py`
|
|
|
|
## Semantic index implementation started (Phase A/B baseline)
|
|
- Added local derived semantic index core:
|
|
- `src/seedpass/core/semantic_index.py`
|
|
- profile-local `semantic_index/manifest.json` + `records.json`
|
|
- token-overlap retrieval baseline, with high-risk kinds excluded by default (e.g., `seed`, `managed_account`).
|
|
- Added profile config flag and service wrappers:
|
|
- `semantic_index_enabled` default `false`
|
|
- `ConfigManager` + `ConfigService` getters/setters
|
|
- new `SemanticIndexService` in `src/seedpass/core/api.py`
|
|
- Added CLI command group:
|
|
- `seedpass semantic status|enable|disable|build|rebuild|search`
|
|
- Added API endpoints:
|
|
- `GET /api/v1/semantic/status`
|
|
- `POST /api/v1/semantic/build`
|
|
- `POST /api/v1/semantic/rebuild`
|
|
- `POST /api/v1/semantic/search`
|
|
- `POST /api/v1/semantic/config`
|
|
- Updated capabilities discovery for semantic CLI/API surfaces.
|
|
|
|
## Tests executed and passing
|
|
- `poetry run pytest -q src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py src/tests/test_semantic_index.py src/tests/test_cli_semantic.py src/tests/test_api_new_endpoints.py` => `95 passed`
|
|
- Expanded target including CLI capability coverage:
|
|
- `poetry run pytest -q src/tests/test_cli_semantic.py src/tests/test_api_new_endpoints.py src/tests/test_semantic_index.py src/tests/test_tui_v2_textual_interactions.py src/tests/test_tui_v2_action_matrix.py src/tests/test_typer_cli.py` => `149 passed`
|
|
|
|
## Docs/control-plane updates
|
|
- Updated semantic roadmap status/progress and phase checkboxes:
|
|
- `docs/semantic_vector_index_plan.md`
|
|
- Updated unified prioritization doc with current state and next queue:
|
|
- `docs/dev_control_center.md`
|
|
- Updated UI refresh plan to mark Phase 5 tree-navigation completion:
|
|
- `docs/tui_v2_ui_refresh_plan.md`
|
|
|
|
## Committed + pushed
|
|
- Branch: `beta`
|
|
- Commit: `165e2db`
|
|
- Message: `feat: add semantic index scaffolding, cli/api surfaces, and tui tree nav polish`
|
|
|
|
## Recommended immediate next slice
|
|
1. Implement semantic Phase C in both TUIs (status/build/search commands + visible semantic-state indicator in ribbon/settings).
|
|
2. Add incremental semantic index updates on entry/tag/link mutation paths (avoid rebuild-only behavior).
|
|
3. Add hybrid ranking mode contract (`keyword|hybrid|semantic`) across CLI/API/TUI with tests.
|
|
|
|
## Memory Update (2026-03-02, semantic Phase C slice)
|
|
- Wired semantic controls into TUI v2 palette and top ribbon semantic state (`SEM: off/stale/ready(n)/err/n/a`).
|
|
- Added TUI v2 commands: `semantic-status`, `semantic-enable`, `semantic-disable`, `semantic-build`, `semantic-rebuild`, `semantic-search <query>`.
|
|
- Wired semantic service bootstrap into CLI TUI launch path (`_prime_tui2_service` + `launch_tui2` factories).
|
|
- Added legacy TUI Settings option `18. Semantic Index` with submenu for status/enable/disable/build/rebuild/search.
|
|
- Added tests:
|
|
- `test_settings_menu.py` semantic submenu dispatch/search flow
|
|
- `test_tui_v2_textual_interactions.py` semantic command success/validation paths
|
|
- `test_tui_v2_action_matrix.py` semantic command matrix coverage
|
|
- Validation run: `102 passed` across targeted settings/TUI/semantic/CLI suites.
|
|
|
|
## Memory Update (2026-03-02, semantic mode and interface expansion)
|
|
- Added profile-scoped semantic mode config (`semantic_search_mode`) with allowed values: `keyword|hybrid|semantic`.
|
|
- `SemanticIndexService.search()` now supports mode-aware retrieval:
|
|
- `keyword`: lexical fallback via `entry_manager.search_entries`
|
|
- `semantic`: local semantic index results
|
|
- `hybrid`: weighted merge of semantic + lexical candidates
|
|
- Added semantic mode controls across interfaces:
|
|
- CLI: `seedpass semantic config --mode ...` and `seedpass semantic search --mode ...`
|
|
- API: `/api/v1/semantic/config` accepts `enabled` and/or `mode`; `/api/v1/semantic/search` accepts optional `mode`
|
|
- TUI v2: `search-mode <keyword|hybrid|semantic>` palette command + ribbon mode indicator
|
|
- Legacy TUI: Settings > Semantic Index > Set search mode
|
|
- Fixed deadlock in `SemanticIndexService.set_mode()` (lock re-entry via `status()` call while holding lock).
|
|
- Updated tests for semantic mode behavior across API/CLI/TUI/legacy settings and core service paths.
|
|
- Expanded targeted validation result: `231 passed` for semantic + API + core + settings + TUI + typer slices.
|