Define the small TOML configuration and complete CLI contract that drive the Rust storage API.
Scope
Load configuration from an explicit --config path or the native per-user configuration directory.
Require a password-store vault path and an existing default GPG key identity; support a configured location for existing exported key material.
Allow the CLI editor command to be set in TOML, falling back to $VISUAL, $EDITOR, and then vim.
Configure HTTPS Git remotes by server ID and application ID. Store no passphrases, passwords, or tokens in TOML.
Model the upstream command names, aliases and options for init, ls/list, show, find/search, grep, insert/add, edit, generate, rm/remove/delete, mv/rename, cp/copy, git, otp, help, and version.
Put validated configuration and command requests in crates/storage; keep apps/cli limited to argument, terminal input, and presentation adapters.
Acceptance criteria
Missing, malformed, unknown, or insecure configuration produces typed errors without exposing secrets.
Relative and absolute paths have documented, deterministic resolution.
## Objective
Define the small TOML configuration and complete CLI contract that drive the Rust storage API.
## Scope
- Load configuration from an explicit `--config` path or the native per-user configuration directory.
- Require a password-store vault path and an existing default GPG key identity; support a configured location for existing exported key material.
- Allow the CLI editor command to be set in TOML, falling back to `$VISUAL`, `$EDITOR`, and then `vim`.
- Configure HTTPS Git remotes by server ID and application ID. Store no passphrases, passwords, or tokens in TOML.
- Model the upstream command names, aliases and options for `init`, `ls/list`, `show`, `find/search`, `grep`, `insert/add`, `edit`, `generate`, `rm/remove/delete`, `mv/rename`, `cp/copy`, `git`, `otp`, `help`, and `version`.
- Put validated configuration and command requests in `crates/storage`; keep `apps/cli` limited to argument, terminal input, and presentation adapters.
## Acceptance criteria
- Missing, malformed, unknown, or insecure configuration produces typed errors without exposing secrets.
- Relative and absolute paths have documented, deterministic resolution.
- CLI parsing tests cover aliases, conflicting flags, editor precedence, defaults, help, version, exit codes, and non-interactive stdin.
## Prerequisites
Compatibility fixture harness.
hugo
added this to the 01 - Full Rust pass CLI parity milestone 2026-08-09 18:54:48 +00:00
The storage crate now owns a strict, typed TOML configuration loader and the complete pass/pass-otp command request contract. Configuration supports explicit and native paths, deterministic inner path resolution, required vault/default-key/exported-key-material fields, editor precedence without shell interpretation, and HTTPS-only Git remotes referenced by server/application IDs. Unknown and secret-bearing fields are rejected with redacted typed errors. The CLI is now only an argument/configuration/presentation adapter with stable stdout/stderr and exit codes. Path, schema, editor, and remote rules are documented in docs/configuration.md.
The workspace test run also kept all pre-created compatibility fixture cases green.
Implemented in commit 2dff2d5 (pushed to main).
The storage crate now owns a strict, typed TOML configuration loader and the complete pass/pass-otp command request contract. Configuration supports explicit and native paths, deterministic inner path resolution, required vault/default-key/exported-key-material fields, editor precedence without shell interpretation, and HTTPS-only Git remotes referenced by server/application IDs. Unknown and secret-bearing fields are rejected with redacted typed errors. The CLI is now only an argument/configuration/presentation adapter with stable stdout/stderr and exit codes. Path, schema, editor, and remote rules are documented in docs/configuration.md.
Verification:
- cargo test -p ironstorage --test config_contract --test command_contract (17 focused tests)
- cargo test -p ironstorage-cli (2 adapter/exit-code tests)
- cargo fmt --all -- --check
- RUSTFLAGS=-D warnings cargo check --workspace --all-targets
- cargo clippy --workspace --all-targets -- -D warnings
- cargo test --workspace
The workspace test run also kept all pre-created compatibility fixture cases green.
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
Define the small TOML configuration and complete CLI contract that drive the Rust storage API.
Scope
--configpath or the native per-user configuration directory.$VISUAL,$EDITOR, and thenvim.init,ls/list,show,find/search,grep,insert/add,edit,generate,rm/remove/delete,mv/rename,cp/copy,git,otp,help, andversion.crates/storage; keepapps/clilimited to argument, terminal input, and presentation adapters.Acceptance criteria
Prerequisites
Compatibility fixture harness.
Implemented in commit
2dff2d5(pushed to main).The storage crate now owns a strict, typed TOML configuration loader and the complete pass/pass-otp command request contract. Configuration supports explicit and native paths, deterministic inner path resolution, required vault/default-key/exported-key-material fields, editor precedence without shell interpretation, and HTTPS-only Git remotes referenced by server/application IDs. Unknown and secret-bearing fields are rejected with redacted typed errors. The CLI is now only an argument/configuration/presentation adapter with stable stdout/stderr and exit codes. Path, schema, editor, and remote rules are documented in docs/configuration.md.
Verification:
The workspace test run also kept all pre-created compatibility fixture cases green.