Release 0.201
v0.201.0 — 2026-07-24
The member carve — the split now covers the team surfaces. /team,
/hub and the owner’s /team-admin move off the server app into the client
tier, completing what v0.200.0 started: the server app’s UI is now render
surfaces only (/s/<token> shares, /print, the login stub).
- The team credential goes bearer-shaped. The signed team-chat value is
minted either as the classic cookie (same-origin) or as a bearer
(
POST /api/team/auth {mode:'bearer'}, held by the client app and sent asAuthorization). One format, two carriers; the same per-request membership liveness — revoking a member still locks them out mid-session — and the raw-contact-token bearer (the MS Teams seam) is untouched. No ambient credential cross-origin means no CSRF surface. - Members ride the client origin. The workspace, forum and hub fetch
through the new
@mantle/web-ui/team-fetchtransport; live turn streaming is a fetch-based SSE reader (Last-Event-ID resume) because EventSource can’t carry a bearer. Old/teambookmarks redirect from the server origin; members re-enter their 8-char token once (deliberate: forwarding a 30-day credential through a URL fragment was rejected — fragments land in history and session stores). - Share reading hops origins safely. Opening a briefing/team share from
the client origin goes top-level through
POST /api/team/sso— the bearer rides the form BODY (never a URL), a fresh server-origin cookie is minted, and/s/<token>renders exactly as before. Cross-origin iframes are not used (they can never carry the cookie, and third-party cookies are dying). - The designated hub app stays first-class: the sandbox host page
attaches the bearer to the app brokers (
bundle/tool-broker/db-broker), which now accept it and answer CORS preflights — only those three/ssub-paths, nothing else. /team-adminunder the owner bearer: per-tabGET /api/team-admin/*routes + a client page; “mark read” is now an explicit action, not a render side effect.- e2e grows
team-bearer.spec(exchange, cookie-free workspace, SSO open-redirect table, broker CORS scoping) + a team-admin smoke; the full suite gates both topologies.