Repository navigation
Conversation
A change reached dev without ever reaching the sandbox because the sandbox workflow was manual-only. A push to dev now runs the build, publish and smoke stages; the prod schema/data clone stays manual (dispatch). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UnXb9yPpg6NiqjcHc5wBAU
🤖 Triage: Class C →
|
🛑 Class C — this touches a danger layerPer the constitution (Development Workflow) danger-layer changes are spec-driven. Before this can merge, a maintainer must:
This gate is here because a small-looking diff to |
nadernik
left a comment
There was a problem hiding this comment.
@Sulstice I reviewed the push path. On a push it stays off production: the build resolves the sandbox key or stops, it publishes only to bbqs-app-sandbox with the sandbox CNAME, the stages that read production stay manual, and the smoke run invokes only the read-only functions.
Before merging:
- Manual runs lose their gate.
build-deploynow runs whensandboxis skipped. On a manual run,sandboxis also reported as skipped whenverify-prodstops on drift or the approval is rejected, because a job whose needs failed is skipped. So a run that should stop still builds and publishes. Acceptskippedonly on a push:if: ${{ !cancelled() && (needs.sandbox.result == 'success' || (github.event_name == 'push' && needs.sandbox.result == 'skipped')) }}
continue-on-error: ${{ inputs.smoke_soft_fail }}has no inputs on a push.${{ inputs.smoke_soft_fail == true }}is a boolean either way.- A guard against the production ref. The build and the function deploy both take
vars.SANDBOX_PROJECT_REF. A check at the top ofresolve-sandbox-api-key.shthat fails when it equalsvpexxhfpvghlejljwpvtmakes a mis-set variable stop the run instead of deploying functions to production. - One green manual run on
devfirst. The last manual runs ondevfailed (2026-08-13), and the last success was 2026-08-19 on another branch, so the sandbox schema and data are about two months behind. The file's own note was to add the push trigger once the manual loop is green.
Smaller:
- Each push force-pushes the
devtree to the sandbox repo'smain, sinceSANDBOX_SOURCE_BRANCHdefaults tomain.${{ github.ref_name }}would keep the branch names accurate. - The description says the smoke run includes
sfn-2026-presentations. It is deployed but isn't inSAFE_FUNCTIONS, so it's never invoked.
One thing to confirm before this runs on every push: the sandbox project's edge-function secrets (email, Google) must not be production's. Every dev push would deploy the newest functions there, against a copy of member data.
@nadernik — this is how changes now reach the sandbox.
Problem
sandbox-qa.ymlwas manual-only, so a change (e.g. the SFN 2026 posters/talks feature) landed indevwithout ever being built intosandbox.brain-bbqs.org.What changes
A push to
dev(i.e. merging a PR intodev) now automatically runs:brain-bbqs/bbqs-app-sandbox(served atsandbox.brain-bbqs.org).sfn-2026-presentations), waits for Pages to serve the new build, then runs the Playwright smoke suite.Stages 1–3 (prod schema drift check, approval gate, schema + data clone from production) stay manual (
workflow_dispatch): they copy real data and stop on drift, so they should not run on every push.How it works
verify-prod,approve,sandboxare gated onworkflow_dispatch.build-deployruns whensandboxsucceeded or was skipped (a failed/cancelled clone still blocks it).deploy_pages/run_smokedefault to on for push events, which carry no inputs.Caveats
dev, not on the PR itself. Building PRs into the sandbox would need a decision on whether PR builds may overwrite the single sandbox site.dev. YAML parses andnpm run test:guardspasses (52/0).Generated by Claude Code