v0.3 E2E checklist
This checklist verifies the user-visible v0.3.0 workflows after the automated release gate passes. Record the result and evidence for every scenario before tagging the release.
1. Test boundaries
- Use a disposable FleetAMP database or a copied v0.2 database.
- Keep the existing service on
localhost:8080unchanged when using a separate test instance. - Use test users, groups, agents and repositories.
- Never use a production repository token or the only copy of a database.
- Keep Git provider writes disabled until the dry-run workflow succeeds.
2. Prerequisites
| Requirement | Verification |
|---|---|
| Clean release branch | git status --short --branch |
| Automated release gate passed | bash scripts/verify-v0.3.0.sh |
| FleetAMP is healthy | curl --fail http://127.0.0.1:8080/health |
| FleetAMP is ready | curl --fail http://127.0.0.1:8080/ready |
| Administrator account exists | Sign in and open Administration |
| Test ownership groups exist | Create two groups in Groups & Labels |
| Test Collectors are connected | Use at least three Collectors, initially unassigned |
| Test Git repository exists | Use an empty or dedicated non-production repository |
3. Record the test run
| Field | Value |
|---|---|
| Date | |
| Tester | |
| Commit | |
| FleetAMP version | |
| Database source | Fresh / copied v0.2 |
| Git provider mode | Dry-run / GitHub PR |
| Result | Pass / Fail |
4. Core regression
4.1 Authentication and authorization
- Sign in as an administrator.
- Change the administrator password from the account page.
- Create or use a Group Owner assigned to only the test group.
- Sign in as that Group Owner and confirm unrelated groups and Admin pages are not accessible.
Expected result: password changes preserve access, sessions follow the security rules, and group-scoped authorization prevents access outside assigned groups.
4.2 Configuration governance
- Open the test group.
- Create and validate a new configuration version.
- Submit it for approval with a different eligible reviewer.
- Approve it and deploy it to the snapshotted targets.
- Confirm deployment history, desired configuration and effective configuration.
- Introduce a controlled test difference and verify drift visibility.
Expected result: the immutable version, approval, target snapshot, deployment, effective state, drift and audit entries refer to the same governed change.
4.3 Collector membership governance
Use three connected Collectors and two ownership groups.
- Create the first group and explicitly select one unassigned Collector.
- Add a dynamic wildcard rule that matches a second Collector.
- Confirm the membership preview shows both expected targets.
- Attempt to enable an overlapping rule in the second group.
- Confirm the overlapping ownership rule is rejected.
- Remove the dynamically matched Collector and confirm an explicit exclusion prevents immediate re-entry.
- Assign the third unassigned Collector from the membership workspace.
- Move one Collector to the second group and select an approved destination configuration.
- Remove another Collector and choose the pre-group restoration policy.
- Submit, approve, and execute the exact immutable proposals.
- Introduce a controlled failure on a later batch target and inspect compensating rollback evidence.
Expected result: only eligible Collectors can be selected; permissions cover
both boundaries for a move; destination configuration belongs to the
destination group; target snapshots remain immutable; and every target records
completed, failed, restored, rollback_failed, or not_started.
Capture screenshots of the available-Collector selection, dynamic-rule preview, impact preview, approval evidence, execution results, and audit trail. See Manage Collector membership for the complete operator workflow.
5. Migration workflow
- Open Migration and paste or upload valid Collector YAML.
- Parse and normalize the configuration.
- Review standardization findings and pattern matches.
- Run the Validate stage.
- Review the final preview before saving.
- Save the result as an immutable group configuration version.
- Confirm it appears in Migration History.
- Optionally submit the exact saved version for approval.
Expected result: invalid input cannot be saved; preview content matches the saved immutable version; history and optional approval preserve its identity.
6. Guides, Blueprints and secrets
- Follow one path through Guides and confirm only compatible choices are progressively displayed.
- Select a Blueprint, destination profile and accessible group.
- Generate and validate the Collector configuration.
- If the configuration needs a credential, create a group secret and use a
${secret:key}reference. - Confirm the raw secret does not appear in previews, versions, approval diffs or audit details.
Expected result: educational guidance remains read-only; generated configuration enters the normal immutable validation and approval workflow; secret values remain write-only.
7. Component lifecycle and GitOps
7.1 Repository connection
- Open Administration → Integrations.
- Enter a name and select GitHub, GitLab or Azure DevOps.
- Confirm only fields relevant to the selected provider are displayed.
- Limit the connection to the test group and a safe allowed root.
- Save the connection using a
secret://credential reference. - Run connection validation.
Expected result: immutable validation evidence records repository and branch access without exposing the credential. Failed, missing or expired validation prevents execution queueing.
7.2 Proposal, target resolution and approval
- Open Deployments and create an install, upgrade, restart or removal proposal.
- Select the component type, test group and compatible deployment method.
- Resolve targets and review every compatibility finding.
- Submit the immutable proposal for approval.
- Sign in as the assigned reviewer and approve the exact proposal evidence.
Expected result: resolved targets are group-scoped; blocking compatibility findings prevent preparation; the requester cannot approve their own proposal.
7.3 Immutable preview and execution
- Select the enabled and currently validated Git connection.
- Generate the GitOps preview.
- Verify the repository path remains below the configured allowed root.
- Review the files and diff, then submit the exact preview for approval.
- Approve and queue it in the execution outbox.
- Open GitOps execution monitor and follow its append-only timeline.
Expected result: preview, approval and execution share the same preview and plan hashes. Dry-run mode records success without modifying a repository.
7.4 Optional GitHub pull-request delivery
Enable real writes only for a dedicated test repository and least-privilege token. GitLab and Azure DevOps remain dry-run delivery providers in v0.3.0.
- Enable the GitOps worker and GitHub writes.
- Queue an approved GitHub pull-request execution.
- Confirm FleetAMP creates or reuses the deterministic FleetAMP branch and one pull request containing exactly the approved files.
- Merge or close the pull request.
- Confirm status synchronization appends the corresponding change event.
Expected result: retries and worker recovery reuse the execution ID and branch; they do not create duplicate pull requests.
8. Statistics and audit
- Confirm Integration statistics classify connections as valid, failed, expired or untested.
- Confirm the GitOps monitor classifies in-progress, open, completed, failed/closed and retried executions.
- Filter Audit Log by GitOps & Integrations.
- Trace one test change from connection validation through preview, approval, queueing and completion.
Expected result: totals match visible immutable records and the audit entries identify actor, action, resource and outcome without credentials.
9. Failure and recovery checks
| Scenario | Expected behavior |
|---|---|
| Invalid Collector YAML | Validation fails and no version is saved |
| Collector already assigned | A stale explicit assignment proposal is rejected |
| Overlapping dynamic ownership rule | Group creation or update is rejected |
| Destination configuration belongs to another group | Move or assignment is rejected |
| Later membership batch target fails | Earlier completed targets are restored or explicit rollback failure evidence is recorded |
| Disabled or unauthorized connection | Preview preparation fails |
| Missing, failed or expired connection validation | Execution cannot be queued |
| Repository path traversal attempt | Path resolution rejects it |
| Worker lease expires | Another worker may reclaim the same execution |
| Provider execution fails | Failure evidence is appended |
| Administrator retries with a reason | Same execution and deterministic branch are reused |
| Retry limit reached | Further retry is rejected |
10. Release decision
The release candidate is ready only when:
- the full automated verifier passes;
- the copied v0.2 database starts, migrates and restarts successfully;
- all applicable E2E scenarios pass;
- no credentials appear in logs, audit data, previews or saved versions;
- release-blocking defects are closed or explicitly documented;
- known limitations in the release notes match the tested behavior.
Attach the completed checklist, relevant screenshots and sanitized logs to the release PR. Do not attach tokens, passwords, private keys or raw secret values.