Manual Test Runbook — G4: Discovery run workflow
Owner: Sagar | Time: ~30 min | Sandbox: SnowOps sandbox subscription (acts as the "client")
Purpose
End-to-end test of the manual-dispatch workflow: OIDC into the sandbox, collect → evaluate → render → upload artifact → Slack notify.
Prerequisites
- G0 runbook passed against the sandbox sub
- GitHub Environment
discovery-defaultcreated on this repo with: - Secret
AZURE_CLIENT_IDset to the APP_ID printed by G0 - (Optional) Secret
HUBSPOT_PRIVATE_APP_TOKEN - (Optional) Variables
SNOWOPS_AUDIT_ACCOUNT_URL,SNOWOPS_AUDIT_CONTAINER,SLACK_WEBHOOK_URL - (Recommended) Required reviewer on the environment so production runs gate on a human
Steps
1. Dispatch the workflow
GitHub → Actions → discovery-run → Run workflow:
client_name:sandbox-testtenant_id:<SANDBOX_TENANT_ID>subscription_id:<SANDBOX_SUB_ID>subscription_display_name:SnowOps Sandbox-
environment:discovery-default -
Workflow run starts within 30s
- Concurrency group
discovery-<sub>shown — a second dispatch with the same sub queues, not parallels
2. Job execution
-
Install pandocstep completes -
Install discovery-auditor depsrunsnpm cicleanly -
Build TSstep exits 0 -
Run testsstep exits 0 (no rule has a fixture gap; chain verify passes) -
Azure loginsucceeds via federated OIDC (no client secret in any step log) -
Run discovery auditexits 0 in under 5 min
3. Artifact
- Artifact
discovery-sandbox-test-<run_id>is present - Contains
.json,.md,.pdf - PDF opens; cover shows
SnowOps Sandbox; severity counts non-zero - Retention is 90 days
4. Slack notification (if SLACK_WEBHOOK_URL is set)
- Message lands in the configured channel
- Contains the reviewer checklist
- Artifact URL is clickable
5. WORM audit append (if audit account configured)
-
[discovery] audit record_hash=...line in the workflow log - Verify per
G6.mdstep 4
6. HubSpot patch (optional — only if you provided a Deal ID)
- HubSpot Deal property
discovery_report_urlis set to the artifact URL - Verify by opening the Deal in the HubSpot UI
7. Negative test — concurrency
- Dispatch a second run with the same
subscription_idwhile the first is still in progress - Second run waits in the queue rather than racing the first
Pass criteria
- One green run end-to-end with all artifacts produced
- No client secret in any step's log output
- Reviewer checklist visible in Slack
- Concurrency gate works
Failure modes & escalation
| Symptom | Likely cause | Action |
|---|---|---|
AADSTS70021: No matching federated identity record found |
Workflow ref or repo subject doesn't match the FIC | Re-run G0 with the correct --workflow-ref |
| Pandoc step fails | apt cache stale | Add sudo apt-get update retry; usually transient |
| Slack 403 | Webhook URL revoked | Rotate webhook; update repo variable |
Sign-off
- Tester: ___ | Date: _ | Result: PASS / FAIL / N/A
- Notes: