Summary
Add automated end-to-end qualification for the assembled Guardian system: the release-style Docker image, Postgres, base clients, operator client, and both multisig SDKs.
Existing CI covers server modules, in-process E2E, Postgres implementations, and individual packages, but it does not prove that these components work together through real HTTP and gRPC boundaries. This is an umbrella issue; each phase may be delivered as a subissue.
Phase 1: deterministic system E2E
Create a locally runnable harness and GitHub Actions workflow that:
- Builds the
server-runner image with the postgres feature and current Git SHA.
- Starts Guardian and Postgres in isolated containers and waits for readiness with a bounded timeout.
- Verifies
/status, including version, Git commit, and environment.
- Runs fixture account/proposal flows through:
@openzeppelin/guardian-client over HTTP.
guardian-client over gRPC.
- Verifies at least one structured API error.
- Restarts only Guardian and confirms account, state, and proposal data remain accessible.
- Captures test output, Guardian logs, and container state on failure.
- Always removes test containers and volumes.
Run this workflow on relevant pull requests, pushes to main, and workflow_dispatch.
Phase 2: operator API E2E
Exercise @openzeppelin/guardian-operator-client against the real Postgres-backed server:
- Authenticate with a deterministic Falcon operator key.
- Establish and inspect a session.
- List accounts and fetch account details.
- Verify denial for an operator lacking the required permission.
- Verify allowlist hot reload without restarting Guardian.
- Log out and confirm session invalidation.
- Verify relevant audit events persist in Postgres.
Phase 3: Miden multisig canaries
Run complete user-facing flows against the configured Miden test environment for both miden-multisig-client and @openzeppelin/miden-multisig-client:
- Create and register a multisig account.
- Create a proposal, collect threshold signatures, and execute it.
- Synchronize and verify state commitment and Guardian convergence.
- Cover Falcon and ECDSA signers.
- Cover online execution and offline export/sign/import.
- Cover
SwitchGuardian.
- Verify Rust and TypeScript behavioral parity.
Because these tests depend on an external Miden environment, run them nightly and through workflow_dispatch, not as required pull-request checks. Expensive variants may rotate across runs, but disabled flows must be reported as skipped rather than passed.
Acceptance criteria
Out of scope
- Automated Anvil/EVM proposal coverage.
- Package tarball/downstream-consumer qualification.
- Redesigning releases to gate publication on an exact qualified SHA.
- Load or production testing.
Summary
Add automated end-to-end qualification for the assembled Guardian system: the release-style Docker image, Postgres, base clients, operator client, and both multisig SDKs.
Existing CI covers server modules, in-process E2E, Postgres implementations, and individual packages, but it does not prove that these components work together through real HTTP and gRPC boundaries. This is an umbrella issue; each phase may be delivered as a subissue.
Phase 1: deterministic system E2E
Create a locally runnable harness and GitHub Actions workflow that:
server-runnerimage with thepostgresfeature and current Git SHA./status, including version, Git commit, and environment.@openzeppelin/guardian-clientover HTTP.guardian-clientover gRPC.Run this workflow on relevant pull requests, pushes to
main, andworkflow_dispatch.Phase 2: operator API E2E
Exercise
@openzeppelin/guardian-operator-clientagainst the real Postgres-backed server:Phase 3: Miden multisig canaries
Run complete user-facing flows against the configured Miden test environment for both
miden-multisig-clientand@openzeppelin/miden-multisig-client:SwitchGuardian.Because these tests depend on an external Miden environment, run them nightly and through
workflow_dispatch, not as required pull-request checks. Expensive variants may rotate across runs, but disabled flows must be reported as skipped rather than passed.Acceptance criteria
SwitchGuardianpaths are covered.Out of scope