01must proveConfirmed | Invitation tokens are random, retained as hashes rather than raw values, expire after seven days and permit one activation. ✓ A valid invitation remains usable six days after issue.✗ An invitation used eight days after issue has passed its expiry. no proof recorded yet | invariant | service, database | test |
02must proveConfirmed | An unauthenticated invitation summary exposes only first name, masked e-mail, expiry, organization name and account kind. no proof recorded yet | policy | service | test |
03must proveConfirmed | Invalid, unknown, expired, revoked and superseded links use the same backend refusal message with reason codes and no organization details; an accepted link reports success again only while its membership remains active. no proof recorded yet | policy | service, console | test |
04must proveConfirmed | Password acceptance sets the invited account’s password before atomically activating membership and pending roles; password-policy refusal does not spend the invitation. no proof recorded yet | lifecycle | service | test |
05must proveConfirmed | Replaying a successfully accepted link for an active membership returns the prior success without another credential or activation write. no proof recorded yet | invariant | service | test |
06must proveConfirmed | Acceptance rechecks the inviter’s present grant authority; lost authority leaves membership and roles inactive and the token unspent, while the applicant receives the neutral unusable-link refusal. no proof recorded yet | permission | service | test |
07must proveConfirmed | Google acceptance requires a live session for the correct pool, a verified matching e-mail and an unclaimed Google identity; expired or replayed sessions fail. no proof recorded yet | validation | service | test |
08must proveConfirmed | Google sign-in cannot create an unlinked console account without a live invitation-acceptance session, except for eligible active founding staff; refusals disclose no account details. no proof recorded yet | policy | service | documented |
09must proveConfirmed | The console provides no public registration, retired sign-up pages return not found and its pool denies self-registration. no proof recorded yet | policy | console, service | test |
10must proveConfirmed | The invitation screen blocks acceptance when a different console user is signed in and offers sign-out. no proof recorded yet | policy | console | test |
11must proveConfirmed | Acceptance and identified invitation refusals produce audit events, successful acceptance names the joining person as actor, and tokens, hashes and passwords are excluded from the inspected audit and logging paths. no proof recorded yet | invariant | service | test |
12must proveConfirmed | Reinvited revoked members accept onto the existing membership and pool account, preserving identity and enabling sign-in again. no proof recorded yet | lifecycle | service | test |