## 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
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.
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
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Objective
Implement the read-only
ls/list,show,find/search, and decryptedgrepdomains.Scope
Acceptance criteria
.git, extension directories, metadata files, or ciphertext names as plaintext results.Prerequisites
Safe password-store core; embedded GPG-compatible cryptography; recipient policy.
Implemented and pushed in
dca07b7(Implement read-only vault domains (#6)).Implementation:
Issue-isolated verification:
Required repository gates all passed: