sf-team
Purpose
The team as one working area: who works here, what each of them may do, and who
has been asked in but has not arrived yet.
Projections
Four views, which the shell turns into the permanent buttons of the tabsetOf
— Team, Invitations, Schedule, Rights — plus one objectOf
view, the person's card, which opens as a subtab inside the same area. With
nothing pressed the area shows its own screen ( resolved throughteam.statistic
its view, the pattern setOf and sf-logs use).sf-equipment
What shapes this surface
The console cannot grant anything. is rp-access and@Access("internal")
the runtime refuses a user JWT before any permission is checked
(). So every operation that changes what somebody maymessaging-access.ts:176
do runs on centimanus, which holds the cluster's service token.wf-team-invite
Who may run it is the ordinary grant , whichwf/workflows/wf-team-invite.js(x)
lives in one preset file — that grant is the whole of "who may add people".
Three invitation methods on carry a method-level rp-identity@Access("user")
so the delivery column can be read without a workflow per table refresh; they
are gated by in the owner and manager presets.rp/identity/listInvites(r)
The Rights projection is composed in the browser from the roster and the
invitations, because the service that knows the real answer cannot be asked from
here. It shows the intent of record — the role a person was given and the tags
that came with it — not a reading of their live token.
Operations
(the one this contour exists for — a pasted list in,team.member.import
a filled table of exactly those people out), ,team.member.create, team.member.save, team.member.setRole,team.member.deactivate, team.invite.revoke.team.shift.create
Three of them are published to the chat catalog in .llm.json
Direct module dependencies
,front-core,g-centimanus,g-identityg-staff
Solution membership
production
Source
modules/surfaces/sequrity/sf-team