Define clean-install HA qualification - #889
Conversation
🔐 Codex Security Review
Review SummaryOverall Risk: MEDIUM Findings[MEDIUM] Qualification instructions contradict the supported installer workflow
[MEDIUM] Server image remains mutable despite the digest pin
NotesThe diff contains no runtime authentication, authorization, protobuf, plugin, or mining-pool configuration changes. Generated by Codex Security Review | |
a5a9558 to
19afb50
Compare
be18ad0 to
1e137c7
Compare
19afb50 to
10499c6
Compare
ea992c4 to
eed7b91
Compare
1db9142 to
32a6e7a
Compare
1450e54 to
dece2e5
Compare
32a6e7a to
a27e256
Compare
305bce3 to
664159b
Compare
a27e256 to
020ab1e
Compare
664159b to
fd51051
Compare
020ab1e to
0e77ebf
Compare
4f4fb38 to
d567ef7
Compare
0e77ebf to
df8ed5d
Compare
d567ef7 to
788fbde
Compare
df8ed5d to
a24a164
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: b4255da76b
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
| | Commit SHA | Pending | | ||
| | Release bundle SHA-256 | Pending | | ||
| | `deployment-manifest.sha256` SHA-256 | Pending | | ||
| | Deployed API, client, and Patroni image IDs/digests on every host | Pending | |
There was a problem hiding this comment.
Include DCS image evidence in qualification reports
When qualifying the three-host HA profile, the witness host runs the etcd/DCS container from deployment-files/ha/compose.yaml and does not run API, client, or Patroni, so this evidence field both asks for impossible image evidence on ha-c and omits the only image that provides quorum there. A report could therefore mark the fixed database/DCS/VIP profile as qualified without recording the deployed etcd image identity; please record the etcd image per host and scope API/client/Patroni evidence to the hosts that actually run them.
Useful? React with 👍 / 👎.
Reviewable diff: +218/-22 across 5 files (excludes generated, test, and story files).
Summary
Defines the evidence required before the fixed three-host Fleet application, database, DCS, and VIP profile is called supported at a recorded fleet scale and topology. The packaged release must pass the complete procedure separately on Debian arm64 Raspberry Pi hardware, Ubuntu amd64, and 64-bit Raspberry Pi OS arm64. The release server and client images use digest-pinned base images so the qualified artifacts can be reproduced against the same upstream contents.
Stack: #887 -> #888 -> #889 -> #890 -> #891 -> #892. This diff is relative to guided installer PR #888. Application updates are implemented in #890 and #891; adjacent-release update qualification is in #892.
How it works
For each required platform, operators install the same packaged release concurrently on three dedicated hosts and record the release bundle and deployment-manifest digests, container image identities, host-package versions, host hardware, miner count, plugin mix, connection topology, command backlog, and timing evidence. The packaged Fleet images are built from digest-pinned Alpine and nginx bases so the recorded artifact identity is not changed by an upstream tag moving. Results from different platforms cannot be combined into one passing report.
The checklist verifies reboot persistence, Fleet and database host loss, acknowledged-write durability, writer exclusivity, passive request rejection, demotion cancellation, firewall behavior, interrupted-command recovery, active curtailment through failover, repeated failovers, and a 24-hour soak. Any evidence gap, overlapping old/new-holder work, or failed gate leaves that exact artifact and host profile unsupported.
flowchart LR P["Select one required platform"] --> I["Install one pinned release on three hosts"] I --> R["Verify reboot recovery"] R --> F["Run failure matrix"] F --> C["Verify commands and curtailment"] C --> S["Repeat failovers and soak"] S --> V{"Every gate passes?"} V -->|yes| N["Record this platform as qualified"] V -->|no| U["Keep this platform unsupported"]Areas of the code involved
deployment-files/ha/QUALIFICATION.mddeployment-files/ha/README.mddocs/rfcs/0002-active-passive-fleet-ha.mddeployment-files/server/Dockerfileanddeployment-files/client/DockerfileKey technical decisions & trade-offs
Testing & validation
./deployment-files/ha/tests/test-profile.shgit diff --check