Files
harmony/ROADMAP.md
Jean-Gabriel Gill-Couture 3a6006846b
All checks were successful
Run Check Script / check (push) Successful in 1m52s
Compile and package harmony_composer / package_harmony_composer (push) Successful in 8m3s
docs: align roadmap and review workflow
2026-07-14 23:52:04 -04:00

129 lines
6.2 KiB
Markdown

# Harmony roadmap
This file is the current priority index. Detailed plans under `ROADMAP/` are
working documents, not architecture decisions. The status written in an ADR's
body is authoritative; fix any mismatch with the ADR index before relying on
it.
## Current sprint
The sprint goal is a production release of Harmony Fleet with deployment code
that meets Harmony's UX/DX standard.
1. Keep the closed PR knowledge available without reviving its implementations.
See [the July 2026 PR archive](ROADMAP/pr-archive-2026-07.md).
2. Make `harmony-fleet-deploy` the clear path for deploying the
production Fleet release. Reduce setup friction and remove accidental
complexity without redesigning the framework during cleanup.
3. Validate the real production composition from a clean client: explicit
target, noninteractive configuration, stable credentials, visible platform
prerequisites, and truthful readiness reporting.
4. Cut and validate the next customer release.
5. Add production-equivalent Fleet deployment E2E to CI/CD immediately after
that release, using a dedicated test cluster.
## Framework direction
Use Fleet deployment as the current UX/DX case for framework changes. Simplify
and release `harmony-fleet-deploy` before applying those changes to
`harmony_app` or another client application.
Work in this area should:
- reuse existing Scores and capabilities before adding layers;
- keep app-specific behavior in deploy crates;
- move logic into Harmony only when it is demonstrably reusable;
- prefer small extractions, such as duplicated Helm/context handling, as
separate changes;
- leave unresolved architecture choices to focused design work.
## Deployment UX/DX bar
These are evaluation criteria, not settled API decisions.
- A new contributor can find the deploy path from the repository root and run
the documented local path from a clean checkout.
- The same declaration drives local, E2E, and production deployment. The
context supplies target-specific access and policy.
- Production always has an explicit target. Scripts and agents never encounter
a hidden prompt or an implicit fallback.
- Common work is visible in `--help` and examples. Users should not need branch
history, a specific checkout layout, or undocumented platform knowledge.
- Human output is concise and actionable. Automation gets stable exit codes and
machine-readable results without scraping terminal decoration.
- Errors identify the failed component, expected state, observed state, and a
useful next action. A successful command must not claim more readiness than
it verified.
- Deploy code reads as application and platform intent. Kubernetes, Helm, and
identity-provider details stay in the owning module unless the application
genuinely needs to choose them.
- Humans and LLMs use the same documented interface. Do not build a parallel
agent API to compensate for an ambiguous CLI or deployment model.
This follows established CLI practice around discoverability, explicit remote
actions, noninteractive execution, stdout/stderr separation, and structured
output. See the [Command Line Interface Guidelines](https://clig.dev/).
## Evidence from a real application
A review of a real client application found useful evidence, but its proposed
APIs are not accepted designs.
Verified against current code:
- The short `ComposeDeploy` example does not yet cover the real application,
which still assembles lower-level Scores.
- `ComposeDeploy` supports one public endpoint. Capability environment wiring
applies to every Compose service, PostgreSQL exports one fixed variable, and
the current Zitadel capability covers only a simple PKCE application.
- The real deploy still duplicates namespace-derived names and some provider
conventions. Those are concrete DRY problems.
- The application layer does not yet prove its full readiness claim; Helm
acceptance is not application smoke-test success.
- The current app CLI has human-only, decorated output and no stable machine
format. Its agent and CI contract remains design work.
- Several onboarding defects in the original review have since been fixed,
including the branch dependency, vault path, OIDC redirect, and unsafe
production refresh-key fallback.
Ideas such as a generic environment-wiring API, typed Score outputs, a generic
secret loader, a Compose macro, a namespace topology marker, or a broad Zitadel
capability need focused design and another real use case. Fleet does not use
those application abstractions and does not validate them.
## Decisions requiring project-lead review
These remain undecided:
- readiness and idempotency contracts;
- the long-term crate and `harmony` core boundaries;
- ADR-024 fleet decomposition;
- ADR-026 application CLI contract;
- the final production Fleet composition and context shape.
## Active supporting tracks
| Track | Document | Status |
|---|---|---|
| Fleet production hardening | [Fleet v0.3](ROADMAP/fleet_platform/v0_3_plan.md) | Needs revalidation against current code and ADR-025 |
| Config consolidation | [Config crate](ROADMAP/01-config-crate.md), [migration](ROADMAP/02-refactor-harmony-config.md) | In progress |
| Application CLI | [Unified CLI](ROADMAP/13-unified-cli.md) | Design input; reconcile with ADR-026 before implementation |
| Core cleanup | [April code review](ROADMAP/12-code-review-april-2026.md) | Backlog; verify each item before work |
| Monitoring | [Tenant application monitoring](ROADMAP/14-tenant-application-monitoring.md) | Design pending |
| OPNsense and bare metal | [OPNsense](ROADMAP/07-opnsense-bare-metal.md), [HA production](ROADMAP/08-ha-okd-production.md) | Separate customer track |
## Deferred plans
The remaining numbered plans are retained as backlog and historical context:
- [Assets](ROADMAP/03-assets-crate.md)
- [GitHub publication](ROADMAP/04-publish-github.md)
- [Simple E2E](ROADMAP/05-e2e-tests-simple.md)
- [KVM E2E](ROADMAP/06-e2e-tests-kvm.md)
- [SSO and config hardening](ROADMAP/09-sso-config-hardening.md)
- [Firewall pair topology](ROADMAP/10-firewall-pair-topology.md)
- [Named config instances](ROADMAP/11-named-config-instances.md)
Do not infer priority from the phase number. Revalidate a plan against current
code and accepted ADRs before implementing it.