Skip to content

feat(durable): zeph durable CLI, config wiring, init wizard, migrate-config, TUI view#4972

Merged
bug-ops merged 1 commit into
mainfrom
feat/m28/4949-durable-cli-config-tui
Jun 7, 2026
Merged

feat(durable): zeph durable CLI, config wiring, init wizard, migrate-config, TUI view#4972
bug-ops merged 1 commit into
mainfrom
feat/m28/4949-durable-cli-config-tui

Conversation

@bug-ops

@bug-ops bug-ops commented Jun 7, 2026

Copy link
Copy Markdown
Owner

Implements C6 of the durable execution epic (#4707, spec-064): the mandatory user-facing integration points. No execution semantics change — this makes the durable layer reachable and operable.

Closes #4949

What

Surface Change
Config Pure-data DurableConfig/RetentionPolicy/DurableBackend moved to zeph-config (single source of truth, re-exported by zeph-durable); Config.durable field added; encryption_gate is now a free function. Avoids pulling zeph-db/sqlx into the 12 leaf crates that depend on zeph-config without it.
CLI zeph durable list/show/inspect/prune/resume — connects directly to durable.db, no agent process (FR-DE-08). Redacted by default (INV-5); --reveal decrypts via the vault ZEPH_DURABLE_KEY (FR-DE-07). New LocalBackend read APIs: list_executions, read_execution_redacted, count_prunable; ExecutionId::parse_str.
migrate-config Idempotent, additive [durable] step (default-off) + section in config/default.toml.
--init Wizard step (enable/backend/retention); generates and stores ZEPH_DURABLE_KEY in the age vault, never inline in TOML.
TUI DurableView panel (D key, durable palette entry, Tab cycle) with the spec-011 status spinners, fed by a read-only background poll task.

Config placement decision

The pure-data config types moved to zeph-config (like OrchestrationConfig) rather than adding a zeph-config -> zeph-durable dependency (which would force zeph-db/sqlx onto 12 leaf crates) or duplicating the struct. zeph-durable depends on zeph-config and re-exports them, so zeph_durable::DurableConfig still resolves and the engine APIs consume the same type the root Config holds — no duplication, no conversion. The AEAD policy (EncryptionGate + encryption_gate) stays in zeph-durable next to the cipher and error type. The spec module layout (spec-064) was updated to record this.

Docs & test artifacts

  • book/src/reference/cli.md, configuration.md, security/durable-encryption.md (base64 key encoding + rotation policy).
  • Playbook durable.md C6 section (6 scenarios) and 6 coverage-status.md rows (in .local/testing, project-shared).
  • CHANGELOG.md [Unreleased].

Checks (CI feature set desktop,ide,server,chat,pdf,scheduler)

  • cargo +nightly fmt --check
  • cargo clippy --workspace --all-targets -- -D warnings
  • cargo nextest --workspace --lib --bins -> 10920 passed, 22 skipped
  • cargo doc --no-deps (deny broken_intra_doc_links)
  • cargo test --doc -> 10 passed
  • RUSTFLAGS="-D warnings" cargo check --workspace --all-targets --locked

Notes

…config, TUI view

Wire the durable execution layer (spec-064) into all mandatory integration
points (C6 of epic #4707). No execution semantics change; this makes the layer
reachable and operable.

- config: move pure-data DurableConfig/RetentionPolicy/DurableBackend to
  zeph-config (single source of truth, re-exported by zeph-durable so existing
  paths resolve); add the durable field to the root Config; encryption_gate is
  now a free function in zeph-durable. Keeps the zeph-db/sqlx tree off the 12
  leaf crates that depend on zeph-config without it.
- CLI: zeph durable list/show/inspect/prune/resume, connecting directly to
  durable.db with INV-5 redaction; --reveal decrypts via the vault-resolved
  ZEPH_DURABLE_KEY. Add LocalBackend read APIs list_executions,
  read_execution_redacted, count_prunable, and ExecutionId::parse_str.
- migrate-config: idempotent, additive [durable] step (default-off), plus the
  section in config/default.toml.
- --init: durable wizard step that generates and stores ZEPH_DURABLE_KEY in the
  age vault, never inline in the TOML.
- TUI: DurableView panel (D key, durable palette entry, Tab cycle) with the
  spec-011 status spinners, fed by a read-only background poll task.

Docs (cli, configuration, durable-encryption with base64 + rotation), the
testing playbook, coverage-status rows, and the spec module layout updated.

Closes #4949
@github-actions github-actions Bot added documentation Improvements or additions to documentation rust Rust code changes core zeph-core crate dependencies Dependency updates config Configuration file changes enhancement New feature or request size/XL Extra large PR (500+ lines) labels Jun 7, 2026
@bug-ops bug-ops enabled auto-merge (squash) June 7, 2026 09:49
@bug-ops bug-ops merged commit 4ce526c into main Jun 7, 2026
36 checks passed
@bug-ops bug-ops deleted the feat/m28/4949-durable-cli-config-tui branch June 7, 2026 09:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

config Configuration file changes core zeph-core crate dependencies Dependency updates documentation Improvements or additions to documentation enhancement New feature or request rust Rust code changes size/XL Extra large PR (500+ lines)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(durable): zeph durable CLI, config wiring, init wizard, migrate-config, TUI view

1 participant