Release guide, download link, and retire the go-live checklist - #170
Merged
Conversation
SubVora is live, so the docs should read like a shipped project rather than one about to be provisioned. README now leads with a download link. Android 8.0 minimum, and the two things that confuse every sideload: Android blocks the first tap and offers a per-source "allow from this source" toggle, and Play Protect warns about any APK not distributed through the Play Store. Neither is a fault worth a support question, but both look like one. The Status paragraph had drifted badly. It listed notifications_log and device_tokens, both dropped, and credited "the nightly billing-date advance job", which was deliberately removed - a date left in the past is the signal that a charge is outstanding, and a job that moved it erased exactly that. It also predated change-password and optimistic concurrency. Rewritten to what the code actually does, and to say the app is live. DEPLOYMENT's Distribution section becomes "Cutting a release", and leads with the rule that cost four builds to learn: always tag from main. A tag-triggered run uses the workflow file from the tagged commit, so tagging a feature branch bakes in that branch's copy of release-android.yml, and no later merge reaches it - gh run rerun re-runs the same stale file. The only exit is deleting the tag and re-cutting it, which is free while nothing has been downloaded and impossible afterwards. A tag on an unmerged commit is also an orphan: squash merging does not put that commit into main. Added a failure table for the release build, keyed to what the new "Verify signing secrets" step prints - wrong alias, wrong store password, whitespace from piping into gh secret set, empty secret - plus the PKCS12 rule that a separate key password does not exist, and where the binlog artifact lands when the publish itself fails. Deploy verification now leads with POST /subscriptions/resolve. One call proves migration-before-boot three ways: the tier proves pg_trgm is scoring, the provider name proves the catalog sync inserted rows, and a non-null category id proves system categories seeded and were resolved by name. The burn-rate check stays as the end-to-end confirmation. Also records that a Manual tier means the container booted before the migration, that the sync never retries, and that /health stays green throughout - the failure is silent, which is what makes it worth naming. GO_LIVE_CHECKLIST.md is deleted. It was a tick-box duplicate of DEPLOYMENT's first-deploy section for a first deploy that has now happened, and two descriptions of one procedure only drift - it was already the one that omitted the Render deploy hook, which is why autoDeploy stayed off with nothing to deploy. Everything in it that DEPLOYMENT lacked has been folded in. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
SubVora is live, so the docs should read like a shipped project rather than one about to be provisioned.
README — a download link, and a Status section that had drifted
Leads with ⬇ Get the Android APK plus the two things that confuse every sideload:
Neither is a fault, but both look like one to someone installing for the first time.
The Status paragraph was materially wrong:
notifications_log,device_tokenstablesRewritten to what the code does, and to say the app is live.
DEPLOYMENT — "Distribution" becomes "Cutting a release"
Leads with the rule that cost four builds to learn:
A tag-triggered run uses the workflow file from the tagged commit. Tag a feature branch and you bake in that branch's
release-android.yml; no later merge reaches it, andgh run rerunre-runs the same stale file. The only exit is deleting the tag and re-cutting it — free while nothing has been downloaded, impossible afterwards. A tag on an unmerged commit is also an orphan, since squash-merging never puts that commit intomain.Added a failure table keyed to what
Verify signing secretsprints:Alias <***> does not existANDROID_KEY_ALIASdoesn't match the keystorekeystore password was incorrectANDROID_KEYSTORE_PASSWORDwrongcontains whitespacegh secret setkept the trailing newlineis emptyproductionenvironmentPlus the PKCS12 rule — no separate key password exists, so
ANDROID_KEY_PASSWORDmust equal the store password — and where the binlog artifact lands when the publish itself fails.Deploy verification now leads with
/subscriptions/resolveOne call proves migration-before-boot three ways:
And records why
tier: Manualmatters: the container booted before the migration,SubscriptionCatalogSyncServicenever retries, and/healthstays green throughout. The failure is silent, which is exactly what makes it worth naming. The burn-rate check stays as the end-to-end confirmation.GO_LIVE_CHECKLIST.mddeletedIt was a tick-box duplicate of DEPLOYMENT's first-deploy section, for a first deploy that has now happened. Two descriptions of one procedure only drift — and it was already the one that omitted the Render deploy hook, which is precisely why
autoDeploy: falsesat there with nothing to deploy on this rollout.Everything it had that DEPLOYMENT lacked was folded in first: the redeploy-if-booted-early box, the resolve check, and the SMTP-via-second-registration trick.
Remaining docs:
TECHNICAL_REQUIREMENTS,NON_TECHNICAL_REQUIREMENTS,Design,ADDING_A_PROVIDER,DEPLOYMENT,debug/ANDROID_DEVICE— each with one job and no overlap.debug/ANDROID_DEVICE.mdis now linked from the README table, which it wasn't before.Verification
All internal markdown links resolve, no reference to the deleted file survives, and the release URL is live:
Docs only — no code, no workflow changes.