Define TOML configuration and the complete CLI contract #2

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

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.

## 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
hugo added the enhancement label 2026-08-09 18:54:48 +00:00
Author
Owner

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.

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.
hugo closed this issue 2026-08-09 21:23:01 +00:00
Sign in to join this conversation.