matrix, docs: describe promotion/reset as rehomed, not as a pending fix

Both spots hedged the swarm-level framing with a temporal qualifier
("until then", "today") that read as future work awaiting a fix, on
top of the framing itself. Drops the qualifiers; the operations are
swarm-level and rehomed there now, not pending anything from the hive.
This commit is contained in:
atlas 2026-09-20 15:40:51 +02:00 committed by mara
commit 19cae964c8
3 changed files with 21 additions and 17 deletions

View file

@ -170,16 +170,17 @@ being the rooms' own creator at power level 100 — there is no homeserver
admin in any of it, and no Synapse admin API to reach for either, since admin in any of it, and no Synapse admin API to reach for either, since
tuwunel has none. tuwunel has none.
Two operations do need an admin **sender**, and neither works today: Two operations need an admin **sender**: `hivectl matrix promote-user`
`hivectl matrix promote-user` and `hivectl matrix reset-password`. Both and `hivectl matrix reset-password`. Both are `!admin …` messages into
are `!admin …` messages into `#admins:<server_name>`, and tuwunel only `#admins:<server_name>`, and tuwunel only treats a message as a command
treats a message as a command when its sender is already an admin. They when its sender is already an admin. They're swarm-level operations,
are swarm-level operations and are being rehomed as such; until then rehomed to the swarm tier rather than granted here; from the hive,
they fail with the admin room's refusal rather than being served by an `@hive:` has no admin sender to make that call with, so both get the
over-privileged credential that every other call site would also carry. admin room's refusal rather than an over-privileged credential that
The one hive-side path that depends on them is the automatic password every other call site would also carry. The one hive-side path that
recovery for an agent whose stored password is gone — the ordinary depends on them is the automatic password recovery for an agent whose
appservice re-login above is unaffected. stored password is gone — the ordinary appservice re-login above is
unaffected.
<details><summary>Upgrading a hive that used the registration token</summary> <details><summary>Upgrading a hive that used the registration token</summary>

View file

@ -79,12 +79,13 @@ hivectl matrix invite @mara:server --room '#hive-chat:server' # ...or to a spec
access token path. Safe to run again — idempotent. access token path. Safe to run again — idempotent.
- `promote-user`: promotes an already-registered user to homeserver - `promote-user`: promotes an already-registered user to homeserver
admin by an `!admin` command in `#admins`. ⚠️ Needs an admin **sender**, admin by an `!admin` command in `#admins`. ⚠️ Needs an admin **sender**,
which `@hive:` isn't — this operation is being rehomed at swarm level which `@hive:` isn't — promotion is a swarm-level operation, rehomed to
and doesn't work from the hive today. the swarm tier rather than granted here, so it has no admin sender to
call it with from the hive.
- `reset-password`: asks the admin room to set a new random - `reset-password`: asks the admin room to set a new random
password and prints it to stdout. ⚠️ Needs an admin **sender** too, so password and prints it to stdout. ⚠️ Same admin-**sender** requirement,
it doesn't work from the hive today either. Useful if an agent or human lost and the same swarm-level rehoming, so it's unavailable from the hive
credentials. too. Useful if an agent or human lost credentials.
- `invite`: invites a matrix user (full `@user:server` or a bare - `invite`: invites a matrix user (full `@user:server` or a bare
localpart, qualified with the homeserver's `server_name`) to the hive localpart, qualified with the homeserver's `server_name`) to the hive
Space by default, or to a `--room` id / `#alias`. Uses the sender Space by default, or to a `--room` id / `#alias`. Uses the sender

View file

@ -1145,8 +1145,10 @@ pub async fn promote_user_to_admin(
/// on the next provisioning sweep. /// on the next provisioning sweep.
/// ///
/// ⚠️ Same admin-**sender** requirement as [`promote_user_to_admin`], and /// ⚠️ Same admin-**sender** requirement as [`promote_user_to_admin`], and
/// the same consequence: `@hive:` is an ordinary account, so this fails /// the same consequence: `@hive:` is an ordinary account with no admin
/// from the hive until the operation is rehomed at swarm level. /// sender, and reset, like promotion, is a swarm-level operation rehomed
/// to the swarm tier rather than granted here — so it has no working
/// sender from the hive either.
/// ///
/// Returns the new password for use in subsequent `login_user` calls. /// Returns the new password for use in subsequent `login_user` calls.
pub async fn reset_user_password( pub async fn reset_user_password(