Implement structured editing and dirty-document protection #30

Closed
opened 2026-08-09 19:30:04 +00:00 by hugo · 1 comment
Owner

Goal

Implement a structured desktop editor with safe save, undo, and dirty-document behavior.

Scope

  • Edit the storage-provided structured document with dynamic add/remove/reorder support for fields and multiline notes.
  • Keep passwords hidden by default and support explicit reveal, generate, copy, and replace actions.
  • Implement platform-standard text editing behavior and undo/redo where supported by the active control.
  • Save with primary-modifier+S through crates/storage; retain the dirty buffer and show the error if saving fails.
  • Track dirty state in the GUI document model only; storage remains authoritative for serialization, encryption, recipient selection, and commits.
  • Before selection changes, opening another vault, reload, window close, or quit would discard edits, show a Save / Discard / Cancel confirmation. Cancel keeps the document and selection; Discard is explicit; failed Save does not continue the pending action.
  • Handle storage-side changes or conflicts with an explicit error/reload decision instead of silently overwriting.

Acceptance criteria

  • Dynamic fields round-trip through storage-owned serialization without the GUI dropping unknown data.
  • Command-S/Ctrl-S saves only a dirty valid document and reports errors without data loss.
  • Every navigation/close path that could lose changes is covered by the same confirmation flow.
  • Tests cover Save, Discard, Cancel, failed Save, lock while editing, and stale/conflicting entry results.
## Goal Implement a structured desktop editor with safe save, undo, and dirty-document behavior. ## Scope - Edit the storage-provided structured document with dynamic add/remove/reorder support for fields and multiline notes. - Keep passwords hidden by default and support explicit reveal, generate, copy, and replace actions. - Implement platform-standard text editing behavior and undo/redo where supported by the active control. - Save with primary-modifier+S through `crates/storage`; retain the dirty buffer and show the error if saving fails. - Track dirty state in the GUI document model only; storage remains authoritative for serialization, encryption, recipient selection, and commits. - Before selection changes, opening another vault, reload, window close, or quit would discard edits, show a Save / Discard / Cancel confirmation. Cancel keeps the document and selection; Discard is explicit; failed Save does not continue the pending action. - Handle storage-side changes or conflicts with an explicit error/reload decision instead of silently overwriting. ## Acceptance criteria - Dynamic fields round-trip through storage-owned serialization without the GUI dropping unknown data. - `Command-S`/`Ctrl-S` saves only a dirty valid document and reports errors without data loss. - Every navigation/close path that could lose changes is covered by the same confirmation flow. - Tests cover Save, Discard, Cancel, failed Save, lock while editing, and stale/conflicting entry results.
hugo added this to the 03 - Cross-platform Iced desktop app milestone 2026-08-09 19:30:04 +00:00
hugo added the enhancement label 2026-08-09 19:30:04 +00:00
Author
Owner

Implemented and pushed in commit 49451bc (Implement structured desktop editing).

  • Added a storage-backed Iced editor for dynamic pass fields and multiline note lines, with add/remove/reorder, masked sensitive values, reveal, generate/replace, and secret-safe copy cleanup.
  • Added primary-modifier+S saving through EntryDocumentService and AutomaticEntryCommitter. Successful saves reload the current conflict token; failures retain the complete dirty document.
  • Added one Save / Discard / Cancel guard for open, reload, close, and actions requested during an active save. Storage conflicts require an explicit reload-or-keep-draft decision.
  • Lock and lease expiry invalidate editor, clipboard, and stale asynchronous state.
  • Added tests for structured/unknown-field round trips, multiline notes, Save, Discard, Cancel, failed and stale saves, lock/expiry, stale clipboard work, and the primary save shortcut.

Review completed against every acceptance criterion. Verification passed:

  • cargo fmt --all -- --check
  • RUSTFLAGS=-D warnings cargo check --workspace --all-targets
  • cargo clippy --workspace --all-targets -- -D warnings
  • cargo test --workspace
  • native cargo run -p ironstorage-desktop launch smoke test
Implemented and pushed in commit 49451bc (Implement structured desktop editing). - Added a storage-backed Iced editor for dynamic pass fields and multiline note lines, with add/remove/reorder, masked sensitive values, reveal, generate/replace, and secret-safe copy cleanup. - Added primary-modifier+S saving through EntryDocumentService and AutomaticEntryCommitter. Successful saves reload the current conflict token; failures retain the complete dirty document. - Added one Save / Discard / Cancel guard for open, reload, close, and actions requested during an active save. Storage conflicts require an explicit reload-or-keep-draft decision. - Lock and lease expiry invalidate editor, clipboard, and stale asynchronous state. - Added tests for structured/unknown-field round trips, multiline notes, Save, Discard, Cancel, failed and stale saves, lock/expiry, stale clipboard work, and the primary save shortcut. Review completed against every acceptance criterion. Verification passed: - cargo fmt --all -- --check - RUSTFLAGS=-D warnings cargo check --workspace --all-targets - cargo clippy --workspace --all-targets -- -D warnings - cargo test --workspace - native cargo run -p ironstorage-desktop launch smoke test
hugo closed this issue 2026-08-10 13:46:14 +00:00
Sign in to join this conversation.