Skip to content

docs: add the first-deployment checklist - #32

Merged
TheMeinerLP merged 2 commits into
mainfrom
docs/first-deployment
Aug 20, 2026
Merged

docs: add the first-deployment checklist#32
TheMeinerLP merged 2 commits into
mainfrom
docs/first-deployment

Conversation

@TheMeinerLP

Copy link
Copy Markdown
Contributor

Requested after the 0.3.1 release: what a person has to supply to get Sturnus running in the cluster.

The ordering is the part worth reviewing. It is not the obvious one:

The FLUX manifests get merged first, deliberately without the secret, and the pods CrashLoopBackOff until it follows. The reason is that two of the seven secret values do not exist yet — Rook generates the S3 access and secret key when it reconciles the CephObjectStoreUser that same PR adds. There is nothing to put in a secret before that has happened, and inventing them produces a bucket nobody can write to.

Beyond the ordering, the document records the things that bite in a way the error message does not explain:

  • The bot's role has to sit above the consent role in the server's role list, or /setup fails on permissions — Discord will not let a bot edit a role positioned above its own.
  • The database password appears in two files that must agree: the connection string and the CloudNativePG role. A mismatch surfaces as an authentication error that says nothing about the mismatch.
  • The OAuth redirect URI fails late — after a participant has already logged in and consented — and the error appears in Outline, not in Sturnus.
  • Only one privileged intent needs enabling. Anyone hunting for a "Voice States Intent" toggle is looking for something that does not exist.
  • openssl rand -base64 32 for the master key, not a passphrase: it must decode to exactly 32 bytes.

It also lists what is not outstanding, since several things look like open questions and are not: the chart, manifests and image are done and released, the image is in Harbor, and the FLUX secret template's variable names have been corrected against the code.

Verification

Every command and name was checked against the code and the manifests rather than written from memory:

  • the Rook secret name, against the FLUX template
  • the ingress host, against ingress.yaml
  • /oauth/callback, against the link server's route table
  • the 32-byte requirement, against crypto.py — and openssl rand -base64 32 actually decoded and measured
  • the six slash commands and the policy_url / document_target config keys, against the source

That care is not decorative: the secret template in the FLUX repository was written from the design document instead of the code, and had three variable names wrong and two missing. Every pod would have failed to start.

What a person has to supply that cannot be generated, inferred or
committed, in the order the steps depend on each other -- which is not the
obvious order. The S3 credentials do not exist until the FLUX manifests are
merged, because Rook generates them when it reconciles the object-store
user, so that merge comes first and the pods CrashLoopBackOff until the
secret follows.

Also records the things that bite in a way the error does not explain: the
bot's role has to sit above the consent role or /setup fails on
permissions; the database password appears in two files that must agree;
the OAuth redirect URI fails late, after a participant has already
consented, and surfaces from Outline rather than from Sturnus.

Every command and name in it was checked against the code and the
manifests rather than written from memory -- the secret template in the
FLUX repository was written from the design document and had three names
wrong and two missing.
Checked against the code while building the invite link: the bot posts the
finished protocol link into the recording channel with channel.send()
(_DiscordAnnouncer.post). Without that permission everything works and only
the last step fails, from the publish loop rather than from anywhere an
operator would be looking.
@TheMeinerLP
TheMeinerLP merged commit 6d46867 into main Aug 20, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant