mirror of
https://github.com/PR0M3TH3AN/SeedPass.git
synced 2026-10-27 16:02:05 +00:00
10 KiB
10 KiB
Memory Update (2026-03-01)
Nostr backup failure observability
handle_post_to_nostr()previously printed only a generic❌ Sync failed…whensync_vault()returnedNone, even ifnostr_client.last_errorhad useful detail.PasswordManager.sync_vault_async()swallowed exceptions and returnedNonewithout reliably settingnostr_client.last_error, making root-cause diagnosis hard from CLI.
Changes made
- Updated
sync_vault_async()to copy exception text intonostr_client.last_errorbefore returningNone. - Updated
handle_post_to_nostr()to includenostr_client.last_errorin user-visible failure output and log line when available. - Added regression tests:
test_handle_post_failure_shows_nostr_errortest_sync_vault_sets_last_error_on_exception
Testing note
- Could not run pytest in this environment because
pytestis 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 stateclearsmanifest_id,delta_since, andlast_sync_tswhile preservingnostr_account_idx.9. Start fresh Nostr namespace (new key index)incrementsnostr_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.mddocumenting menu options8(reset sync state) and9(start fresh namespace), plus validation steps for robust publish/restore. - Linked the new guide from
docs/nostr_setup.md,docs/README.md, and rootREADME.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_modeis enabled,sync_vault_async()exits early and previously returnedNonewithout a helpful message, so UI showed only❌ Sync failed…. - Fixes:
PasswordManager.sync_vault_async()now setsnostr_client.last_errorfor 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_messagesrc/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
documententry kind across core enum, TUI, API, CLI, and agent secret resolution. - Added universal
date_addedanddate_modifiedfields for all entry kinds.- Creation now sets both fields.
- Modification preserves
date_addedand updatesdate_modified. - Legacy entries are normalized in
_load_index()by deriving date fields frommodified_ts/updated.
- TUI now supports
Documentcreation 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
documentin non-private allow-kinds, and agent secret resolution returns document content fordocumententries.
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.mdand 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 > Documentnow supportsNew DocumentandImport 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
- CLI:
- 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
--fingerprintand non-interactive auth broker password resolution. - Denies unless policy
allow_export_importis enabled. - Denies unless
documentkind is policy-allowed (allow_kinds/ kind export check). - Supports scoped token enforcement with operation scopes (
importfor import,exportfor export). - Export honors approval gates when policy requires
exportapproval. - Emits structured JSON responses and append-only audit events for granted/denied outcomes.
- Requires
- Discovery updates:
- Added
document_iocommand hints toagent bootstrap-contextpayload. - Added
document_iosection toseedpass capabilities --format jsonsecurity features.
- Added
- 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
pytestis unavailable (python3 -m pytestreports module missing).
Test environment note (2026-03-01)
- Repo
.venvalready hadpytestandtyper; upgraded topytest 9.0.2andtyper 0.24.1. - New agent document I/O tests initially failed due mocked policy normalization (empty
rulescaused normalizedallow_kindsto become empty). - Fixed tests by adding explicit allow rule for
documentin 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_entrykwargs, - universal
date_added/date_modifiedandcustom_fieldsfields in entry expectations, list_entries(sort_by="updated")relying onmodified_ts,- legacy decrypt fallback monkeypatches to accept
saltargument and revised iteration-call expectations.
- new document add-menu option/mocks (
- 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
linksfield (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
linksin 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
linksalongsidetagsandcustom_fieldsfor deterministic convergence. - Added API endpoints:
GET /api/v1/entry/{id}/linksPOST /api/v1/entry/{id}/linksDELETE /api/v1/entry/{id}/linksandPUT /api/v1/entry/{id}now acceptslinks.
- Added CLI graph commands:
seedpass entry link-addseedpass entry linksseedpass entry link-removeplusentry modify --links-json.
- Documentation updated in
README.md,docs/entry_types.md, anddocs/sync_conflict_contract.md. - Validation:
- Focused suite:
140 passed - Full suite:
895 passed, 11 skipped.
- Focused suite:
Website/docs refresh for graph features
- Added dedicated graph docs page:
docs/entry_graph.md. - Updated docs indexes/navigation:
docs/README.mdnow listsentry_graph.md.landing/docs.htmlsidebar now includesEntry 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.mdpoints todocs/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 capabilitiesnow includes aknowledge_graphsecurity 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_hintsnow include graph/document command pointers. agent bootstrap-contextnow includescommands.knowledge_graphhints.- 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.