## Objective
Implement `pass init` and hierarchical `.gpg-id` recipient policy, including selective reencryption.
## Scope
- Support root and `--path/-p` initialization, multiple GPG IDs, and removal through a single empty ID.
- Resolve the nearest ancestor `.gpg-id` for every entry.
- Reencrypt only affected entries when recipient policy changes, including nested overrides.
- Create or verify `.gpg-id.sig` when signing-key policy is configured.
- Commit successful changes through the storage Git integration while leaving the tree unchanged on failure.
## Acceptance criteria
- Resulting `.gpg-id` files and ciphertext recipients match upstream-compatible fixtures.
- Reencryption preserves plaintext exactly and is atomic across the affected subtree.
- Tests cover root and nested initialization, multiple recipients, removed overrides, invalid recipients, signature failure, and rollback.
## Prerequisites
Safe password-store core; embedded GPG-compatible cryptography.
hugo
added this to the 01 - Full Rust pass CLI parity milestone 2026-08-09 18:54:57 +00:00
Implemented and pushed in 34ce731 (Implement hierarchical recipient policies (#5)).
Implementation:
Added storage-owned root and --path/-p initialization with one-line-per-identity .gpg-id output, multiple recipients, and upstream-compatible removal through one empty identity.
Added nearest-ancestor recipient resolution and exact selective reencryption: deeper .gpg-id overrides shield their subtrees, existing recipient packets avoid needless rewrites, and removing an override inherits the nearest parent.
Added signed-policy creation and immediate trusted-fingerprint verification, plus required verification of inherited .gpg-id.sig files when signing policy is active.
Added a rollback-safe mutation plan: all resolution, verification, decryption, and encryption finish before writes; original ciphertext and policy bytes are restored on write or storage commit failure; new empty directories are cleaned up.
Added the PolicyCommitter integration boundary for the embedded storage Git engine, with exact changed paths, compatible commit intent, one callback per real change, no callback for no-ops, and byte restoration on commit error.
Documented hierarchy, signature behavior, transaction guarantees, and the Git integration contract in docs/recipient-policies.md.
Issue-isolated verification:
cargo test -p ironstorage --test recipient_policy: 7 passed
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
pass initand hierarchical.gpg-idrecipient policy, including selective reencryption.Scope
--path/-pinitialization, multiple GPG IDs, and removal through a single empty ID..gpg-idfor every entry..gpg-id.sigwhen signing-key policy is configured.Acceptance criteria
.gpg-idfiles and ciphertext recipients match upstream-compatible fixtures.Prerequisites
Safe password-store core; embedded GPG-compatible cryptography.
Implemented and pushed in
34ce731(Implement hierarchical recipient policies (#5)).Implementation:
Issue-isolated verification:
Required repository gates all passed: