# BF36 / TX7.2.2 Collaboration UX, Account Menu, Responsive Branding & Settings implementation state

Date: 2026-08-22
Release: R14.28.17 Build Fix 36

## Objective

Polish TeXise collaboration and account UX without changing the proven TX7/TX7.2.1 manuscript or shared-review architecture. BF36 removes unnecessary collaboration-dialog controls, uses trusted authenticated account identity for live collaboration, unifies account navigation, installs responsive official TeXise brand assets, and simplifies Settings account/entitlement presentation.

Google OAuth routing/configuration is intentionally out of scope for BF36 because it was already corrected operationally. Existing Google sign-in behavior is preserved; BF36 only exposes a safe provider label already derivable from the authenticated database session.

## Collaboration modal and identity

- Removed the user-facing `Copy diagnostics` control from the Live Collaboration dialog while retaining the underlying safe diagnostics service for internal support/testing.
- Host footer now presents destructive `Stop collaboration` beside a neutral `Close` button.
- Guest footer presents `Leave collaboration` beside `Close`.
- `Close` only changes dialog open state; it does not stop/leave collaboration, destroy Yjs state, clear persistence, or interrupt the provider.
- Logged-in hosts no longer see the manual `Your name` field. Start Collaboration uses authenticated `user.id`, `displayName`, and `email` from the active session.
- Logged-in joiners continue to bypass the anonymous-name prompt and use the authenticated account identity automatically.
- Anonymous hosts/joiners retain the existing locally persisted collaboration-name workflow.

## Shared account popover

A shared `TexiseAccountPopover` now serves SaaS/public headers and the editor top bar using the existing `texise-account-popover` visual language.

Authenticated menu:

- current avatar/photo with initials fallback;
- display name and email;
- Projects → `/projects`;
- Settings → `/settings`;
- Logout through the existing authenticated logout request.

Anonymous menu:

- generic account icon trigger;
- Login → `/login` only.

The popover closes on outside pointer interaction, Escape, or navigation and exposes its expanded state accessibly. The old editor-specific account-popover implementation/CSS has been retired.

## Responsive official branding

BF36 installs the supplied assets unchanged as browser public assets:

- `/texise-logo.png` — horizontal desktop/tablet TeXise logo;
- `/texise-logo-mobile.png` — compact square mobile logo.

The shared Brand component now uses `<picture>` with the existing compact breakpoint (`max-width: 48rem`) to select the mobile asset. `.texise-brand` remains only the structural accessible home-link wrapper. Active `texise-brand-mark` and `texise-brand-word` generated-brand markup/styles are removed.

The desktop image renders at approximately 28 px high and the compact image at 32 px square without increasing the existing header height or distorting aspect ratio.

## Settings account information

The Account card keeps Display name as the primary editable field. Directly beneath it, trusted account metadata is displayed in small muted text, one item per line:

- `Provider: …`
- `Joined: …`
- `Last sign-in: …`

The SaaS session payload now includes a bounded friendly provider label derived from trusted database identity state (`Google`, `Email`, or `Account`) rather than from user input. A compatibility fallback remains for older API payloads.

## Pro entitlement and Lifetime Deal

The Pro entitlement card is simplified to user-relevant status information:

- Status;
- License verified;
- AI quota where applicable.

The visible `License type`, `License provider`, `Remaining`, and `Last verified` rows are removed. `Last verified` is renamed to `License verified`.

Lifetime Deal activation is moved below entitlement into a dedicated settings card with:

- explanatory copy;
- labeled license-key input;
- loading/disabled `Linking…` state;
- normalized inline verification error while retaining the entered key;
- success state after linking;
- immediate entitlement refresh after successful verification.

No license verification authority or server-side entitlement rules were moved into the browser.

## Preserved collaboration architecture

BF36 does not alter the BF35 manuscript/review model:

```text
CodeMirror
  ↕
y-codemirror.next
  ↕
Y.Text
  ↕
y-websocket

Project Y.Doc
├── files
├── review-comments
├── review-changes
└── review-events
```

Visual collaborative editing remains disabled. Collaborative Comments/Track Changes remain shared metadata outside `.tex`. Review capability isolation, file-bound relative anchors, exact Undo correlation, review quotas, reconnect/persistence, and host outbound-drain semantics remain BF35 behavior.

## Release/source changes

- package version: `1.28.17`;
- service-worker cache: `texise-app-shell-r14-28-17-buildfix36-v1`;
- diagnostics: `R14.28.17 Build Fix 36 / TX7.2.2`;
- installer/deploy path enforces `repair-buildfix36-source.mjs`;
- BF36 source guard/regression added;
- historical BF33/BF34/BF35 guards remain additive and continue validating their original invariants.

## Verification observed in the source-only release environment

- BF36 focused regression/source guard: **8/8 PASS**.
- BF35 regression: **16/16 PASS**.
- BF34 regression: **14/14 PASS**.
- Historical R14.28.14 regression: **22/22 PASS**.
- Runtime hardening: **101/101 PASS**.
- Repository static release audit: **353/353 PASS**.
- SaaS/product/security static audit: **43/43 PASS**.
- Native server Node tests: **71/71 PASS**.
- Native deployment/template script tests: **16/16 PASS**.
- Frozen-lock verification: **69** workspace importers / **1171** reachable snapshots PASS.
- Workspace dependency consistency: **68 packages PASS**.
- Public barrels: **67 entries across 68 workspace packages PASS**.
- Relevant BF36 TypeScript/TSX parse/transpile and Node/Bash syntax checks: PASS.

Dependency-backed `tsgo`, Biome, Vitest, Vite production build and Playwright/browser execution are **NOT RUN in this extracted source tree** because it has no installed workspace `node_modules`. The production installer remains authoritative for those gates and must not treat them as passed until actually executed.

## Deployment notes

The official logo files must remain at the two public paths above. Google OAuth configuration/routes are unchanged by BF36. After deploying the package, run the normal installer so dependency-backed typecheck/lint/build gates execute on the production host, then smoke-test authenticated Google login, the editor account menu, Settings, and live collaboration identity.
