Files
harmony/ROADMAP.md

2.6 KiB

Harmony Roadmap

Six phases to take Harmony from working prototype to production-ready open-source project.

# Phase Status Depends On Detail
1 Harden harmony_config Not started Test every source, add SQLite backend, wire Zitadel + OpenBao, validate zero-setup UX
2 Migrate to harmony_config Not started 1 Replace all 19 SecretManager call sites, deprecate direct harmony_secret usage
3 Complete harmony_assets Not started 1, 2 Test, refactor k3d and OKD to use it, implement Url::Url, remove LFS
4 Publish to GitHub Not started 3 Clean history, set up GitHub as community hub, CI on self-hosted runners
5 E2E tests: PostgreSQL & RustFS Not started 1 k3d-based test harness, two passing E2E tests, CI job
6 E2E tests: OKD HA on KVM Not started 5 KVM test infrastructure, full OKD installation test, nightly CI

Current State (as of branch feature/kvm-module)

  • harmony_config crate exists with EnvSource, LocalFileSource, PromptSource, StoreSource. 12 unit tests. Zero consumers in workspace — everything still uses harmony_secret::SecretManager directly (19 call sites).
  • harmony_assets crate exists with Asset, LocalCache, LocalStore, S3Store. No tests. Zero consumers. The k3d crate has its own DownloadableAsset with identical functionality and full test coverage.
  • harmony_secret has LocalFileSecretStore, OpenbaoSecretStore (token/userpass only), InfisicalSecretStore. Works but no Zitadel OIDC integration.
  • KVM module exists on this branch with KvmExecutor, VM lifecycle, ISO download, two examples (example_linux_vm, kvm_okd_ha_cluster).
  • RustFS module exists on feat/rustfs branch (2 commits ahead of master).
  • 39 example crates, zero E2E tests. Unit tests pass across workspace (~240 tests).
  • CI runs cargo check, fmt, clippy, test on Gitea. No E2E job.

Guiding Principles

  • Zero-setup first: A new user clones, runs cargo run, gets prompted for config, values persist to local SQLite. No env vars, no external services required.
  • Progressive disclosure: Local SQLite → OpenBao → Zitadel SSO. Each layer is opt-in.
  • Test what ships: Every example that works should have an E2E test proving it works.
  • Community over infrastructure: GitHub for engagement, self-hosted runners for CI.