identity drift: prod bot MXID (@voicebridge_as) vs docs/test-profile (@nether-voicebridge_bot) — first real beta user stranded #96
Labels
No labels
bug
duplicate
enhancement
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
dark/nether-voicebridge#96
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Incident 2026-07-12 (first real self-serve attempt!):
@dau:tinier.townDM-invited@nether-voicebridge_bot:nether.imper the docs. Prod's[server.nether]setsbot_user_id = @voicebridge_as:nether.im, so no prod client syncs as the documented user — the invite sat pending. A staging e2e run (whosetestprofile DOES use the_botMXID, masquerading via the nvbtest as_token — same exclusive namespace) then consumed the invites at startup, federated-joined both of dau's DMs, and greeted from a throwaway drill process. Net effect: user stranded at an address nobody serves, plus staging can eat prod-adjacent invites.Shipped immediately: docs corrected to
@voicebridge_as:nether.im(repo86fbd34, wiki4efbd55).Remaining decisions:
@<stem>_botuser (invasive: every bridged-room membership, mgmt crypto store, tenants — probably not worth it), or the convention/docs/example configs treat the sender_localpart user as the canonical bot and the_botderivation note gets revisited. Pick one and makevalidate()or docs generation keep them honest.testprofile'sbot_user_idis inside the appservice's exclusive namespace, so drill runs can consume real pending invites for that MXID. Options: move the harness bot to a clearly-test localpart (still in namespace, e.g.@nether-voicebridge_e2etest:nether.im), or accept + document the hazard (mgmt scenarios only when no pending prod invites — unenforceable for strangers).@nether-voicebridge_botis now a member of two tinier.town DM rooms (one E2EE) with a greeting posted from a dead drill device; needs a polite exit (message + leave via as_token).Progress 2026-07-12:
@voicebridge_as:nether.im(repo86fbd34, wiki4efbd55, live).e2e.tomlsender_localpart→nether-voicebridge_e2e(mgmt bot =@nether-voicebridge_e2e_bot, registered + joined Auto Test 01/02; per-scenario bridge stores wiped once — identity change invalidates persisted sessions);mgmt_self_serve_linkLIVE PASS 76.5s on the new identity.e2e.example.tomldocuments the distinct-stem convention (5935c1e).@nether-voicebridge_bot:nether.imvia the Tuwunel admin room (deactivation auto-leaves its ~77 rooms — all e2e detritus + dau's two DMs; prod rooms are@voicebridge_as's and unaffected). Then item 1 (identity-convergence decision) can be closed as "prod stays voicebridge_as, conventional name retired", and item 4 (pending-invite watch) remains optional hardening.Status sweep 2026-08-20, item by item:
@voicebridge_ascanonical. Migrating prod to@nether-voicebridge_botwould touch every bridged-room membership, the mgmt crypto store, and tenants for zero user-visible benefit; the docs already point at@voicebridge_as(fixed 07-12). The_bot-derivation note in the registration YAML should be softened when #41 reworks the docs.@nether-voicebridge_e2e_bot.:tinier.townrooms, no pending invites — nothing to exit politely anymore). What remains is 9 stale memberships from the pre-rename harness era (6 oldnvbtest_*drill DMs + the 3 Auto Test rooms). A batch-leave to make the address fully dormant is prepared but awaits an operator go (touches homeserver state).ops/96-dormant-mxid-watch: nvb-watch section 3a syncs as@nether-voicebridge_boteach tick and posts a state-latched 📬 alert for any pending invite (re-invite re-alerts). Offline harness covers alert/latch/re-alert; 27/27 green. Deploy to/opt/nvb-opsafter merge.Once the branch merges + deploys and the batch-leave runs, this can close.
nvb-watch canary merged (
58df4b7) and deployed to /opt/nvb-ops (backup .bak-96); first tick ran clean and initialized the state file. Remaining before close: the batch-leave making @nether-voicebridge_bot fully dormant (9 stale test-era memberships) — awaiting an operator go.Batch-leave executed with operator go (2026-08-20): all 9 stale test-era memberships left (9× 200),
joined_roomsnow empty —@nether-voicebridge_botis fully dormant. Final state of the four items:@voicebridge_asstays canonical (docs corrected 07-12; migration not worth it).@nether-voicebridge_e2e_botlong since.Closing.