feat(mgmt): awaiting-invite link resume — self-serve link of invite-only rooms (#111) #119
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feat/111-awaiting-invite-resume"
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?
Implements the #111 remainder per the approved design (issue comment 1226) with the operator's decisions folded in: strict same-sender matching · #89a cooldown bypass on match · configurable TTL (
[limits] invite_intent_ttl_secs, default 30 min) · one intent per requester (explicit replacement) · unified auto-resume for both tiers ·listas the always-current status surface.Flow: self-serve
linkof an un-joinable room arms a single-use awaiting-invite intent → the requester invites the bot from that room within the window → the invite gate accepts it (exact sender+room match; ban check still first) → the link resumes to the normal pending-approval code in the origin DM.Safety: failed resumes reap the join (forced probe-created semantics, #83); intent creation sits behind every existing
linkgate; single-use; capped (1/requester, 32 global); fully audit-logged (link_awaiting_invite/invite_accepted:link_intent/link_resumed). The matched path skips the greeting task, whose #85 anti-spoof leave would otherwise undo the join — note: that same #85 leave appears to break the manual operator invite-then-relink flow for >2-member rooms; the intent path sidesteps it (worth its own look later).Verified: 124 unit tests + clippy
-D warningsgreen; livemgmt_link_invite_onlyPASS first try (16.7 s) — including the cooldown bypass withmgmt_cooldown_secsarmed — plus regressionsmgmt_self_serve_link/mgmt_invite_offline/mgmt_dm_e2ee/fed_link_v12all PASS (mgmt_dm_pending_reapknown-fail = tracked #104 infra). Suite → 27 scenarios. Docs updated (self-serve walkthrough, hosted-instance).Held for operator review before merge — this reshapes an open-registration gate; the operator approved the design but has not seen the diff.
🤖 Generated with Claude Code
linkof an invite-only room is unsatisfiable — the invite gate rejects the invite the link reply instructs #111