Implement list, show, find and decrypted grep #6

Closed
opened 2026-08-09 18:55:00 +00:00 by hugo · 1 comment
Owner

Objective

Implement the read-only ls/list, show, find/search, and decrypted grep domains.

Scope

  • Return deterministic tree models for the whole vault or a selected subtree.
  • Show an entry or list a directory when no explicit command is supplied, matching pass dispatch behavior.
  • Select the first or requested line for clipboard and QR presentation without deriving domain state from rendered strings.
  • Find entry and directory names using pass-compatible matching.
  • Decrypt and search entry contents with an explicitly supported Rust regex option set and clear errors for unsupported GNU grep flags.

Acceptance criteria

  • CLI output, ordering, aliases, missing-entry errors, line selection, and exit statuses match the compatibility fixtures.
  • Search never includes .git, extension directories, metadata files, or ciphertext names as plaintext results.
  • Decrypted search buffers are discarded promptly and never logged.

Prerequisites

Safe password-store core; embedded GPG-compatible cryptography; recipient policy.

## Objective Implement the read-only `ls/list`, `show`, `find/search`, and decrypted `grep` domains. ## Scope - Return deterministic tree models for the whole vault or a selected subtree. - Show an entry or list a directory when no explicit command is supplied, matching pass dispatch behavior. - Select the first or requested line for clipboard and QR presentation without deriving domain state from rendered strings. - Find entry and directory names using pass-compatible matching. - Decrypt and search entry contents with an explicitly supported Rust regex option set and clear errors for unsupported GNU grep flags. ## Acceptance criteria - CLI output, ordering, aliases, missing-entry errors, line selection, and exit statuses match the compatibility fixtures. - Search never includes `.git`, extension directories, metadata files, or ciphertext names as plaintext results. - Decrypted search buffers are discarded promptly and never logged. ## Prerequisites Safe password-store core; embedded GPG-compatible cryptography; recipient policy.
hugo added this to the 01 - Full Rust pass CLI parity milestone 2026-08-09 18:55:00 +00:00
hugo added the enhancement label 2026-08-09 18:55:00 +00:00
Author
Owner

Implemented and pushed in dca07b7 (Implement read-only vault domains (#6)).

Implementation:

  • Added deterministic typed tree models for root and selected subtrees, with stable plain rendering and logical entry names that never expose .gpg suffixes.
  • Added explicit/implicit show dispatch: no path lists root, directories return tree models, and entries return redacted zeroizing plaintext.
  • Added typed clipboard/QR presentation selection from parsed ShowRequest state, including requested-line validation without parsing rendered strings.
  • Added case-insensitive multi-term find/search over logical entry and directory names with a pruned result tree and upstream-compatible Search Terms header.
  • Added byte-oriented Rust regex decrypted grep with case-insensitive, invert, line-number, and fixed-string behavior. Plaintexts, matched lines, and rendered grep output are SecretBytes and are never included in Debug output.
  • Excluded .git, .extensions, policy/signature metadata, auxiliary files, and ciphertext filenames from read/search models.
  • Documented domain boundaries, matching behavior, and secret lifetimes in docs/read-domains.md; selected regex 1.13 under MIT OR Apache-2.0.

Issue-isolated verification:

  • cargo test -p ironstorage --test read_domains: 6 passed
  • Covers root/subtree ordering and output, aliases through the existing command contract, explicit/implicit dispatch, missing paths and lines, clipboard/QR selection, case-insensitive find, regex/fixed/invert/line grep, invalid regex, redaction, and hidden metadata exclusion.

Required repository gates all passed:

  • cargo fmt --all -- --check
  • RUSTFLAGS=-D warnings cargo check --workspace --all-targets
  • cargo clippy --workspace --all-targets -- -D warnings
  • cargo test --workspace
Implemented and pushed in dca07b7 (Implement read-only vault domains (#6)). Implementation: - Added deterministic typed tree models for root and selected subtrees, with stable plain rendering and logical entry names that never expose .gpg suffixes. - Added explicit/implicit show dispatch: no path lists root, directories return tree models, and entries return redacted zeroizing plaintext. - Added typed clipboard/QR presentation selection from parsed ShowRequest state, including requested-line validation without parsing rendered strings. - Added case-insensitive multi-term find/search over logical entry and directory names with a pruned result tree and upstream-compatible Search Terms header. - Added byte-oriented Rust regex decrypted grep with case-insensitive, invert, line-number, and fixed-string behavior. Plaintexts, matched lines, and rendered grep output are SecretBytes and are never included in Debug output. - Excluded .git, .extensions, policy/signature metadata, auxiliary files, and ciphertext filenames from read/search models. - Documented domain boundaries, matching behavior, and secret lifetimes in docs/read-domains.md; selected regex 1.13 under MIT OR Apache-2.0. Issue-isolated verification: - cargo test -p ironstorage --test read_domains: 6 passed - Covers root/subtree ordering and output, aliases through the existing command contract, explicit/implicit dispatch, missing paths and lines, clipboard/QR selection, case-insensitive find, regex/fixed/invert/line grep, invalid regex, redaction, and hidden metadata exclusion. Required repository gates all passed: - cargo fmt --all -- --check - RUSTFLAGS=-D warnings cargo check --workspace --all-targets - cargo clippy --workspace --all-targets -- -D warnings - cargo test --workspace
hugo closed this issue 2026-08-09 22:22:48 +00:00
Sign in to join this conversation.