## 2026-08-23 — R14.28.20 Build Fix 46 / Hotfix10 Template Preview & Privacy-First Homepage Workflows

- Adds Admin upload/replace/remove controls for template preview PNG, JPEG, WebP or PDF media with byte-signature validation and a 20 MB bound.
- Uses `template.pdf` and then `main.pdf` automatically when no explicit preview exists, while keeping preview files outside the imported project-file manifest.
- Serves preview media through the public preview API; PDF previews are sandboxed, embedded on detail pages, and excluded from OG/sitemap image metadata.
- Updates the homepage H1 to `TeXise — Privacy First Research` / `Writing Platform` and capability labels to `Research`, `Code`, `Document`.
- Adds a four-card `Built for Real Workflows` section directly after Built Awesome using TeXise-local placeholder artwork until final workflow copy/images are supplied.
- Rotates the release identity and cache to BF46 and adds release/source/static regression guards for the new preview and homepage contracts.

## 2026-08-23 — R14.28.20 Build Fix 45 / Hotfix10 Apache Homepage Routing Correction

- Preserves the production-verified BF44 frontend/trusted-runtime pipeline and fixes the subsequent Apache frontend health failure where canonical `GET /` returned HTTP 404.
- Routes the document-root request explicitly through the trusted public SEO renderer, declares `DirectoryIndex index.html`, and explicitly enables `mod_dir` so homepage behavior no longer depends on host defaults.
- Redirects `/index.html` permanently to canonical `/`.
- Keeps strict root and `/about` health checks; adds route diagnostics for `/`, `/index.html`, and `/about` plus production-shell presence.
- Adds BF45 source and Apache-root regression guards and rotates the app-shell cache/release identity.

## 2026-08-23 — R14.28.20 Build Fix 44 / Hotfix10 Trusted Runtime Template Packaging Correction

- Preserves BF43's now production-verified strict TypeScript, Biome, BusyTeX and Vite browser build fixes.
- Fixes trusted API startup after BF43 failed on an unstaged `scripts/generate-template-manifest.mjs` dependency.
- Moves reusable template manifest/sync logic into the staged `server/` runtime and keeps the build script as a thin wrapper.
- Adds an exact staged-runtime module-graph check before service activation.
- Carries canonical template source/live-catalog paths into runtime `release.env` and grants only those required template write boundaries to the unprivileged `texise` service.
- Adds an unprivileged `ProtectSystem=strict` template write/read/delete deployment health probe.
- Tightens Assets Sync so browser/public output contains only catalog/taxonomy/redirect JSON and never mirrors raw `free/` or `pro/` template source trees.
- Rotates installer, deployment/source guard, collaboration diagnostics and service-worker cache identity to BF44.

## 2026-08-23 — R14.28.20 Build Fix 43 / Hotfix10 Production Biome Lint Correction

- Fixes the six Biome diagnostics reported by the BF42 production build after strict TypeScript completed successfully.
- Replaces two non-interpolated Learn template literals with ordinary string literals.
- Changes the dynamic article-tag cleanup `forEach` callback to an explicit block body so it returns `void`.
- Uses self-closing JSX for the three empty Admin table header cells reported by Biome.
- Rotates the installer, source/deployment guard, collaboration diagnostics and service-worker cache identity to BF43.
- Preserves the complete Hotfix10 template CMS, institution taxonomy, protected template delivery, SEO migration and interactive Learn architecture.

## 2026-08-23 — R14.28.20 Build Fix 42 / Hotfix10 Production Typecheck Correction

- Corrects all five strict `tsgo` diagnostics reported by the first BF41 production install: Web Share feature detection, optional BibTeX capture narrowing, and the three newly required template metadata arrays in typed test fixtures.
- Updates test fixture file URLs to the protected Hotfix10 template API contract.
- Rotates the service-worker cache, installer/source guard, deployment guard and collaboration release diagnostics to BF42.
- Keeps the complete BF41 Hotfix10 template CMS, institution taxonomy, SEO migration, interactive Learn, research pages and branding changes unchanged.
- Dependency-free BF42 certification is green; the deployment environment must rerun the exact dependency-backed production build to close the production gate.

## 2026-08-23 — R14.28.20 Build Fix 41 / Hotfix10 Template Platform, SEO Migration & Interactive Learning

- Adds a filesystem-first Admin template platform over `texise-templates/free|pro`: secure ZIP import, complete metadata/institution editing, bulk management, structural validation, tier moves and administrator-triggered Assets Sync while preserving manual filesystem copy + sync operation.
- Adds reusable academic-institution taxonomy, stable template canonicals, institution collection pages and exact legacy `/latex-templates/*` migration support.
- Denies direct raw template-source HTTP access, switches generated project-file references to protected API delivery and enforces Pro entitlement server-side.
- Fixes hydration-safe `noindex,follow` behavior for faceted blog/template URLs and reconciles robots.txt with public-shell noindex policy.
- Adopts the exact `TeXise — Local-First Overleaf Alternative LaTeX Research Editor with CLI` homepage H1/title and replaces the stale homepage competitor matrix with TeXise research-architecture positioning.
- Adds Copy/Try in Editor Learn examples with one-time local handoffs, deeper scientific-writing tutorials, nine research/use-case pages and four browser-local LaTeX/research tools.
- Enriches truthful template/article/entity schema and social metadata while retaining the supplied 1200×630 TeXise OG image as the generic fallback.
- Continues core/public branding cleanup around TeXise Editor and TeXise Terminal and adds BF41/Hotfix10 fail-closed release guards.
- Dependency-free working-tree certification: Hotfix10 **40/40**, R14.28.20 **19/19**, runtime **101/101**, native server **98/98**, SaaS **44/44**, release audit **357/357**, with historical regressions and branding/lock/dependency/barrel checks green.
- Historical template source absent from the supplied archive is explicitly not fabricated; recovered templates can be imported and mapped through the new migration system.

## 2026-08-23 — R14.28.20 Build Fix 40 / Hotfix9 SEO & TeXise Core Branding

- Server-renders canonical/title/description/robots/Open Graph/Twitter/RSS/JSON-LD metadata for public routes before React hydration and returns real 404/noindex responses for unknown pages.
- Adds interconnected Organization/WebSite/WebPage and content-specific structured data, generic 1200×630 TeXise social media, CMS-cover blog social media, image sitemap data and a blog RSS feed.
- Adds native/X/LinkedIn/Facebook/Copy Link sharing for blog articles and exposes publication/update metadata.
- Rebrands TeXise-owned package/workspace/editor/desktop/mobile/storage identifiers while preserving required third-party package names, compiler endpoints, legal/source attribution and a safe legacy IndexedDB migration path.
- Adds fail-closed BF40 SEO and branding/provenance release guards plus detailed Hotfix9 audit documents.
- Carries forward the Built Awesome Hotfix8 card polish: 10.25rem minimum card height, 1rem card copy, `Terminal` and `Unlimited AI` capability labels.

## R14.28.20 Build Fix 39 — Built Awesome Card Simplification Hotfix 7
- Renames the feature showcase to `Built Awesome`, removes card mini visuals, shortens card height/copy, and uses `#f5f3ed` for the protruding card-pin background.
- Keeps the first three cards visible by default and the existing accessible Show more/Show less caret for nine compact additional capabilities.
- Expanded feature headers are concise and avoid hyphenated names.
- Preserves all Hotfix 6/5 hero behavior and TX7.2.3 unchanged.

## R14.28.20 Build Fix 39 — Feature Showcase Hotfix 6
- Adds a progressive `Why TeXise? / Built Different` feature-card section immediately after the hero.
- Three yellow TeXise cards are visible by default; Show more/Show less reveals nine additional cards using an accessible caret control.
- Preserves Hotfix 5: wider rounded hero PDF, editor-column Terminal, body-font `@TeXiser`, exact 4% hero gradient and configured Pro CTA.
- Focused BF39 regression: **16/16 PASS**; release audit **356/356**; SaaS audit **44/44**; server **76/76**; deployment/config **16/16**.

## R14.28.20 Build Fix 39 — Hero Layout / CTA Hotfix 5
- Widens the simulated desktop PDF page and confines the simulated Terminal to the Source/Visual column.
- Restores the floating `@TeXiser` CTA to the normal body font and applies the exact requested 4% yellow hero gradient.
- Adds runtime-configured Open Workspace / Buy Pro hero actions without hard-coding the storefront URL.

## R14.28.20 Build Fix 39 — Source Reveal Masking / Copy Hotfix 4
- Makes the hero Source reveal fully opaque so Visual manuscript text cannot overlap the LaTeX side.
- Updates the eyebrow to `Local-first Overleaf alternative - LaTeX editor.` and the description opening to `A browser-first LaTeX workspace for scientific writing.`
- Preserves BF39.2 Source/Visual auto-reveal, simulated Compile/PDF, Terminal, mobile toolbar scrolling, Moranga @TeXiser, and glow-free background.

# BF39 Source/Visual Reveal + Mobile Toolbar Hotfix 3 — 2026-08-23

- Adds an auto-moving, draggable, keyboard-accessible Source↔Visual reveal inside the simulated TeXise homepage editor while keeping Compile/PDF and Terminal interactions presentation-only.
- Pauses the reveal for user interaction, Terminal and reduced-motion preferences; Source/Visual buttons drive the same slider state.
- Makes the real mobile editor toolbar horizontally scrollable without shrinking controls, applies Moranga to `@TeXiser`, and removes the homepage hero glow background.
- Preserves R14.28.20 / TX7.2.3. Focused BF39 regression: **14/14 PASS**; release audit **356/356**; SaaS audit **44/44**; server **76/76**; deployment/config/template **16/16**.

# BF39 Interactive Hero Refinement Hotfix 2 — 2026-08-22

- Adds the requested smaller homepage headline scale and `Local-first Overleaf alternative - LaTeX editor.` eyebrow.
- Extends the TeXise wireframe into a taller detailed simulated editing session.
- Source/Visual switching, Compile loader/PDF refresh and highlighted Terminal open/close are local React/CSS simulations only; no actual editor/compiler/terminal/network runtime is initialized.
- Mobile Compile visibly swaps the narrow mock to the simulated PDF loader/output; choosing Source or Visual returns to the editor view.
- Preserves BF39 Accessibility Lint Hotfix 1 semantics and BF38/TX7.2.3 foundations. Focused BF39 regression: **13/13 PASS**.

# BF39 Accessibility Lint Hotfix 1 — 2026-08-22

- Production strict TypeScript gates pass; fixes the subsequent Biome `useAriaPropsSupportedByRole` error by giving the labelled BF39 capability container `role="group"`.
- No visual/product behavior changes. BF39 focused regression is now **10/10 PASS**.

# R14.28.20 Build Fix 39 — Homepage Hero — 2026-08-22

- Replaces the previous homepage hero with a full-first-screen, TeXise-specific hero centered on a detailed static editor wireframe.
- Public copy is intentionally minimal: `Your Research. Your Device.`, `Your Privacy.`, one local-first scientific-writing sentence, and `Research / Run Codes / Document in TeX` proof points.
- Desktop shows project files + editor + PDF; tablet removes the file tree; mobile becomes editor-focused. The preview is presentational and initializes no editor/compiler/PDF/AI/terminal runtime.
- Uses the existing TeXise favicon, yellow brand treatment, faint scientific formulas/grid, current application vocabulary and reduced-motion handling.
- Floating X CTA displays `@TeXiser`; destination remains `https://x.com/texiser`.
- Package/version: `1.28.20`; collaboration protocol remains TX7.2.3.

## 2026-08-22 — R14.28.19 Build Fix 38 — Favicon, Social, Cookie & Analytics

BF38 refreshes the production favicon/PWA images, adds Facebook/X social surfaces, adds a persisted optional-cookie notice, enables Statcounter on every canonical production non-admin surface, and provisions consent-gated optional Google Tag runtime configuration through `/etc/texise/texise.env`. TX7.2.3 is preserved.

# TeXise SaaS Release Changelog

## 2026-08-22 — R14.28.18 Build Fix 37 / TX7.2.3 Pro Collaboration, TexLab & Editor UI

- **Relay Health Hotfix 2:** production `/collab-live` certification now mints a short-lived signed synthetic host grant from the root-owned deployment environment; public new-room admission remains fail-closed and health guests remain unsigned.

- Makes creation of a new live collaboration session a server-authoritative signed-in Pro/Admin capability while preserving anonymous/Free guest joining of an already-authorized TX7 room.
- Adds a short-lived HMAC-SHA256 host grant bound to authenticated user, derived room key and shared-review capability; `/collab-live` fails closed for unsigned new-room creation while existing authorized rooms retain normal guest/reconnect behavior.
- Installs the newly supplied desktop `/texise-logo.png` unchanged while retaining the BF36 mobile logo and responsive brand switching.
- Slightly increases Visual manuscript base/H1/H2/H3 typography without changing Source/editor chrome sizing.
- Renames the Pro server Linux terminal product surface to **TexLab**, switches it to a Flask/lab icon, applies the requested Pro sign-in copy, and gives Browser Terminal and TexLab one shared dark terminal shell.
- Removes Local Terminal runtime-status pills; runtime certification now uses `runtime doctor`, `pyodide info`, `webr info` and `wasix info` rather than retired header badges.
- Swaps Navigator and Tools positions, renames active Start Writing CTAs to Open Workspace, and adds a short desktop-header Open link to `/projects` after the avatar/account control.
- Makes the shared account popover portal-based so `/ws#route=editor` is not clipped by the titlebar, and makes Projects three-dot menus dismiss on outside click, Escape, action selection and opening another menu.
- Preserves Google OAuth and the BF35/BF36 TX7.2 collaborative-review architecture unchanged.
- Source-only certification after Relay Health Hotfix 2: BF37 **14/14**, BF36 **8/8**, BF35 **16/16**, BF34 **14/14**, historical BF33 **22/22**, runtime hardening **101/101**, release audit **354/354**, SaaS audit **43/43**, native server **73/73**, deployment/config **16/16**, lock/dependency/barrel/template checks PASS. Production installer evidence confirms custom validation, strict typecheck, Biome and Vite build pass; the remaining observed deployment failure was the now-fixed unsigned synthetic `/collab-live` host health check. Vitest/Playwright remain external runtime gates.

## 2026-08-22 — R14.28.17 Build Fix 36 / TX7.2.2 Collaboration UX, Account Menu, Responsive Branding & Settings

- **Accessibility Lint Hotfix 1:** removes unsupported `aria-expanded` from the native account-menu `<summary>` after production Biome validation. Native `<details>/<summary>` disclosure state, outside-click close, Escape close/focus return, and authenticated/anonymous menu behavior remain unchanged.

- Removes the Live Collaboration dialog's user-facing Copy diagnostics button; adds Close without leaving/stopping the session; styles host Stop collaboration as destructive beside Close while guests retain Leave + Close.
- Uses trusted authenticated session identity for collaboration hosts/joiners so logged-in users are not asked for a name; anonymous collaboration naming remains unchanged.
- Reuses one `texise-account-popover` implementation for editor and SaaS/public headers: authenticated users get Projects, Settings and Logout, while anonymous users get Login only.
- Installs the supplied official horizontal `/texise-logo.png` for desktop/tablet and square `/texise-logo-mobile.png` for mobile/compact views through responsive `<picture>` branding; removes active generated mark/word branding.
- Moves Provider, Joined and Last sign-in below Display name as separate muted account-metadata lines, with Provider derived from trusted database identity state.
- Simplifies Pro entitlement by removing License type, License provider and Remaining and renaming Last verified to License verified.
- Moves Lifetime Deal activation into a dedicated responsive card below entitlement with labeled input, loading guard, normalized inline errors, success feedback and immediate entitlement refresh.
- Preserves BF35/TX7.2.1 collaboration/review architecture and existing Google OAuth behavior unchanged.
- Adds BF36 source/regression contracts and advances release/cache/installer/diagnostic identity to R14.28.17 Build Fix 36 / TX7.2.2.
- Source-only certification: BF36 **8/8**, BF35 **16/16**, BF34 **14/14**, historical R14.28.14 **22/22**, runtime hardening **101/101**, release audit **353/353**, SaaS audit **43/43**, server **71/71**, deployment/template scripts **16/16**, lock/dependency/barrel checks PASS. Dependency-backed tsgo/Biome/Vitest/Vite/Playwright are NOT RUN in this extracted environment.

## 2026-08-22 — R14.28.16 Build Fix 35 / TX7.2.1 Collaborative Review Hardening

- Binds collaborative comment/change anchors to the exact declared collaborative `Y.Text`, rejecting malformed cross-file anchors before review actions can touch source.
- Makes coalesced Track Changes metadata atomic Yjs transactions and microtask-batches review observer notifications to avoid transient partial records and excess UI refreshes.
- Adds independent shared-review capability/schema negotiation (`shared-review-v1`, schema 1) while preserving TX7 manuscript transport; signaling and payload rooms are partitioned by review capability version and reconnect metadata rejects incompatible review sessions.
- Correlates collaborative Undo/Redo with exact tracked-change IDs and snapshots stored on Y.UndoManager stack items instead of scanning all pending changes heuristically.
- Carries `source`, `semanticKind`, and `operationId` through collaborative mutations for AI, citations, Paper Memory, TikZ, Terminal, toolbar/research/project-tool operations.
- Adds explicit conflicted Source styling, `All / Comments / Changes` counts/filters, and Reject All by Author.
- Removes dormant Visual collaboration cursor/authorship implementation while retaining local Visual Review and keeping live Visual editing disabled.
- Adds bounded reply/thread/change limits, active-first snapshot budgeting, and resolved-history compaction without introducing a second text authority or blocking canonical Y.Text edits.
- Formalizes the local-projection versus collaborative-live Review backend policy contract and corrects the live Collaborative Writing documentation.
- Adds BF35 source/regression guards plus browser contracts for mixed-version isolation and a 10,000-edit + 500 tracked-change + 200 review-operation reconnect soak.
- Dependency-free final-source certification: BF35 **14/14**, BF34 **14/14**, historical R14.28.14 **22/22**, runtime hardening **101/101**, repository audit **352/352**, SaaS static audit **43/43**, Node-only server/script batch **88/88 PASS**, template/compiler requirements **13/13**, lock/dependency/barrel checks PASS. Dependency-backed `tsgo`, Biome, Vitest, Vite/build, Playwright/browser soak, and deployed relay certification remain NOT RUN in this source-only environment.

## R14.28.15 Build Fix 34 — TX7.2 Collaborative Review — 2026-08-22

- Restores **collaborative Comments and Track Changes in Source mode** without changing the TX7.1 manuscript authority: CodeMirror remains bound through `y-codemirror.next` to one `Y.Text`, and the same Y.Text continues to synchronize through `y-websocket`.
- Adds project-level `review-comments`, `review-changes`, and `review-events` Yjs structures beside manuscript text. Review metadata is never written into `.tex` and never uses Y.Text formatting attributes.
- Stores comment/change anchors as encoded Yjs relative positions. Comment replies use nested `Y.Array` state so concurrent replies merge instead of overwriting a whole thread.
- Adds first-class collaborative `insert`, `delete`, and `replace` changes with `pending`, `accepted`, `rejected`, and `conflicted` states. Accept keeps the current working Y.Text; Reject safely reverses the pending edit only when the anchored content/context still matches.
- Keeps the mature local Review backend unchanged outside collaboration: local Track Changes remains projection-based, while live Track Changes records metadata around the already-applied collaborative Y.Text edit. Pre-existing local review notes are not silently published into a live room.
- Keeps Track Changes as a per-collaborator preference and preserves the TX7 y-codemirror binding while Track Changes is enabled. Remote edits and review-maintenance/undo transactions cannot recursively create local suggestions.
- Adds meaningful change coalescing, including selected-text replacement typing and contiguous deletions, aligned with the per-file Yjs UndoManager capture window. Undo removes the associated pending metadata and Redo restores it.
- Adds bounded deletion-side context checks and explicit conflict actions (`Keep current text`, `Restore original text`, `Dismiss change`) instead of guessing when newer edits make a rejection ambiguous.
- Routes AI, Paper Memory, citation, TikZ, Terminal, research and toolbar/programmatic manuscript mutations through collaboration-aware review attribution, with explicit non-tracking origins for rollback/maintenance mutations.
- Removes the persistent “Visual editing is unavailable during live collaboration.” sentence from the editor surface. Visual remains disabled during a live session with the compact tooltip `Unavailable during live collaboration`.
- Polishes the empty `/projects` page using Projects-specific spacing/min-height classes without changing shared SaaS empty-state layout, and retains TX7 link-driven automatic joining.
- Adds BF34 source/regression guards, CRDT unit-test source, two-browser collaborative-comment and supervisor Track Changes Playwright contracts, and makes formal release-quality execution run the BF34 guard/regression before dependency-backed certification.
- Fixes two stale certification contracts discovered during BF34 verification: the collaboration soak now uses the real `{ from, to, text }` edit API, and production dist release parsing accepts the current release family instead of hard-coding R14.28.14. The legacy migration regression also now includes the existing BF33 login-throttle migration.
- Dependency-free verification in this extracted source tree: BF34 guard PASS and rejects pristine BF33; BF34 regression **14/14 PASS**; historical R14.28.14 regression **22/22 PASS**; runtime hardening **101/101 PASS**; release audit **351/351 PASS**; SaaS/product/security audit **43/43 PASS**; server tests **70/70 PASS**; deployment/script tests **18/18 PASS**; template/compiler requirements **13/13 PASS**; lock sync **69 importers / 1171 reachable snapshots PASS**; dependency consistency **68 packages PASS**; public barrels **67 entries PASS**; all **20** modified TS/TSX files parse/transpile; modified Node and shell syntax PASS. Full dependency-backed `tsgo`, Biome, Vitest, Vite/build, Playwright, the formal review soak and deployed relay certification remain mandatory external gates because this archive has no installed workspace dependencies and registry access is unavailable.

# R14.28.14 Build Fix 33

- **Build/typecheck repair:** the first dependency-backed BF33 build surfaced 33 strict TypeScript/check-JS errors after dependency installation succeeded. The corrected release resolves all reported errors without weakening TX7.1: command service contracts now expose `projectCollaboration`, canonical TikZ insertion uses one parsed path/current Y.Text, AI/Paper Memory/Review typing is corrected, WebCrypto receives an ArrayBuffer-backed state vector, and the hardened signaling relay is fully JSDoc-typed while retaining the supported `maxFragments` runtime limit.
- **Administrator bootstrap security:** TeXise no longer creates `admin@texise.com` with a known password. Fresh deployments use `sudo texise-saas admin-create`; upgrades automatically revoke the exact historical `admin/admin` credential and its sessions while preserving already-secure administrator passwords.
- **Persistent login protection:** administrator login throttling is stored in MySQL by IP/account scope and expired sessions/throttle buckets are cleaned automatically.
- **Collaboration relay hardening:** TX7.1 bounds rooms/connections/state size, binds file sockets to active Yjs identities, rejects duplicate client IDs, targets file requests/chunks to their intended peers, expires stalled transfers, and enforces transfer quotas.
- **Session lifecycle:** Host refresh reclaims the same Host session; Stop waits for the provider outbound queue to drain; explicit Stop/Leave clears the reconnect secret and collaboration persistence while an ordinary browser refresh remains recoverable.
- **Shared-project safety:** the Host snapshot structure is sealed at readiness. Same-room rematerialisation protects local extra or modified files under `.texise-local-recovery/` before applying the shared snapshot, using a retained per-room hash baseline to detect same-path divergence.
- **Canonical Source correctness:** collaboration-aware Source reads use Y.Text for editor actions, AI, citations, TikZ and Paper Memory; semantic refresh is debounced and storage/compiler projection remains one-way from Y.Text.
- **Security maintenance:** direct `ws` is 8.21.3, Nodemailer is 9.0.5, arbitrary third-party WebSocket destinations are removed from production CSP, and current release/install/deploy guards enforce BF33/TX7.1.
- **Trust model:** a Project link is a bearer trusted-editor capability. Host state coordinates session lifecycle and should not be interpreted as cryptographic role authorization.
- Installer lock integrity: duplicate YAML mapping keys and reachable package/snapshot closure are validated before pnpm; this release closes the previously missing `@types/qrcode@1.5.6` node and validates 1171 reachable snapshots.
- Local dependency-free certification: BF33+BF32 source guards PASS, 69 lock importers / 1171 reachable snapshots, 68 workspace dependency sets, 67 public barrels, admin tests 11/11, R14 22/22, runtime hardening 101/101, release audit 350/350 and SaaS audit 43/43 PASS. Dependency-backed browser/build certification remains a staging gate.

# R14.28.14 Build Fix 32

- Collaboration advances to **TX7 / TeXlyre Source Collaboration Core** and is intentionally Source-only for reliability. Visual editing is disabled for the duration of a live session; PDF compilation, AI, Papers and Terminal remain available subject to the shared-project mutation rules.
- Source text, remote selections/carets and collaborator labels use one direct `y-codemirror.next` binding to each file's `Y.Text`. TeXise no longer computes a parallel Source cursor/selection position.
- Live authorship/provenance highlighting, Follow/Open peer navigation, Visual collaboration and collaboration-backed Review/Track Changes state are removed from the TX7 live path.
- Y.Text is authoritative while collaboration is active. Local source/storage is a one-way mirror and compilation explicitly flushes the collaboration projection before reading project files.
- Shared projects use a **Project link** and QR code (`/join/<room>#secret`) rather than a pasted token. The fragment secret is removed from the address bar after capture; verified joining happens before a browser workspace is allocated and the same room reuses its prior browser workspace.
- Project structure is deliberately locked during BF32 collaboration. Existing supported Source files can be edited and switched; create/rename/delete/move operations, new binary assets, generated project artifacts and disruptive Git mutations wait until the live session ends.
- The collaboration dependency set is pinned to the TeXlyre-tested Yjs versions and TeXlyre 0.10.16 attribution is included as an explicit release gate.
- Host Stop writes a session tombstone before disconnect, ending the live room cleanly while retaining guests' local browser copies.
- BF32 source/regression/release guards replace current BF31 requirements. The formal browser contract covers exact named-cursor placement, link/rejoin, reconnect, compile while live, same-room reuse/session stop, and an actual 10,000-edit release-quality soak with Y.Text/mirror convergence checks.

# R14.28.14 Build Fix 31

- Collaboration advances to **TX6 / Collaboration V2**. Live cursor and selection awareness now uses Yjs relative positions instead of portable absolute character offsets, keeping collaborator carets attached to the logical text through concurrent insertions, deletions and new lines.
- Source mode keeps a single `y-codemirror.next` binding plus one authorship renderer and shared Yjs undo/redo; duplicate application-level collaboration decoration wiring is removed.
- Canonical edit notifications carry exact splices into Y.Text. Native Visual mode also emits minimal LaTeX splices rather than whole-document replacements, preserving unrelated CRDT identity.
- Remote Visual changes capture the local selection before the Yjs transaction, resolve it after convergence, and update the existing ProseMirror state with an incremental document replacement. Rapid remote typing is visually coalesced to one animation-frame projection pass.
- The collaboration modal is responsive and overflow-safe for long names/paths; Open and Follow remain explicit and do not move another user's caret.
- Track Changes is explicitly unavailable while live collaboration is active to prevent the Source editor from silently leaving its CRDT binding; pending tracked changes must be resolved before hosting.
- Source collaboration revisions no longer participate in the CodeMirror lifecycle, preventing remote file-map/document updates from destroying and recreating the live Source editor.
- Visual remote batching ignores unrelated-file Yjs transactions when retaining a relative caret bookmark, and Visual undo/redo now uses the per-file Yjs `UndoManager` so one user's undo cannot restore a stale source snapshot over a peer's later edit.
- The production collaboration live-health probe now publishes and verifies TX6 session metadata consistently.
- New Source and Visual concurrency E2E scenarios exercise the exact stale-cursor/new-line regression, plus a Visual-undo case that asserts a host edit survives a guest undo. TX5 and older tokens are intentionally legacy and must start a new TX6 session after upgrade.

# R14.28.14 Build Fix 30

- Corrects the shared-project loader progress element for Biome accessibility validation by using a real ARIA progressbar contract.
- The loader now exposes an accessible name and 0–100 current progress value while preserving the existing blocking full-project join experience.
- No TX5 collaboration protocol, transfer, or file-operation behavior changed.

# R14.28.14 Build Fix 29

- Corrects strict TypeScript command-service dependency typing for collaborative directory create, rename and delete.
- The three handlers now formally expose `projectCollaboration`, matching the BF28 implementation that publishes immediate directory operations.
- No TX5 wire/protocol or project-transfer behavior changed.

# R14.28.14 Build Fix 28

- Collaboration now transfers the **whole project**. A Guest sees a blocking loader until all text/code/data files and all binary assets are locally materialized and integrity checked.
- Create, delete and rename operations for files and folders propagate live in both directions after joining.
- Images/PDFs/opaque project files use a transient chunked peer payload channel; the TeXise relay forwards frames only and does not retain binary content.
- Source/Visual Y.Text editing, collaborator cursor names, host verification and `/projects` Join Project remain intact under TX5.

# R14.28.14 Build Fix 27

- `/projects` now provides **Join Project** before **New Project**. Pasting one TX4 collaboration token verifies a ready live Host before creating/reusing the local browser project and opens it using the Host's advertised project name.
- Source-mode remote cursors now show collaborator names continuously, matching the discoverability of Visual mode.
- The normal collaboration flow no longer uses a separate room password or editor-side Join form; the editor Collaboration dialog is Start/Share/Manage only.
- Failed/legacy joins create no project, rejoining a room reuses its browser project, token secrets are never written to workspace/account metadata, and optional account metadata cannot delay successful navigation.

# R14.28.14 Build Fix 11

- The canonical Linux Terminal Pro tag `texlive/texlive-console:pro` is built locally from `deploy/docker/console/` and is no longer pulled from Docker Hub.
- The reproducible console image derives from `texlive/texlive:latest` and contains the complete certified Pro terminal toolchain, including pinned scientific Python packages.
- Cloud Compile remains a separate runtime using `texlive/texlive:latest` directly.
- Custom non-default Console image names remain operator-managed external images.

# R14.28.14 Build Fix 10

- Split server execution images: Cloud Compile → `texlive/texlive:latest`; Linux Terminal Pro → `texlive/texlive-console:pro`.
- Retired the shared `TEXISE_EXECUTION_IMAGE` key and temporary host-side scientific Python overlay.
- Made the Pro terminal image itself responsible for the complete certified scientific/Git/C++/TeX toolchain.
- Added explicit Docker entrypoints for deterministic Cloud Compile and terminal execution.
- Added a real Apache `/examples -> /templates` redirect on HTTP and HTTPS before SPA fallback, resolving the production health-check failure.
- Retained the supplied favicon suite and canonical `/site.webmanifest`.

# R14.28.14 Build Fix 8

- Added the supplied favicon suite and canonical `/site.webmanifest`.
- Split Linux Terminal core health from scientific Python capability certification, with an opt-in strict production gate.

## 2026-08-20 — R14.28.14 canonical www, Cloud Compile and public-site/service consolidation

- Canonical origin/root are now `https://www.texise.com` and `/var/www/texise.com/public_html`; `app.texise.com` is redirect-only compatibility and the former app tree is preserved for rollback.
- Apache serves the production SPA from canonical `dist`, proxies `/api/`, the authoritative `/collab-live` Yjs document/awareness relay and compatibility-only `/collab-signal`, exposes the authenticated `/console-gateway` websocket surface for Cloud Terminal · Pro, denies `/texise-data` and `/texise-services`, serves public Blog media explicitly, and removes obsolete Hocuspocus/Laravel Reverb routes.
- The supplied private LaTeX compiler source is shipped under `texise-services/cloud-compile/` and brokered through server-authoritative Pro entitlement/quota enforcement. Local Compile remains browser-local and Free/default.
- Cloud worker production execution is Docker-only with no network, no shell escape, dropped capabilities, unprivileged UID, resource limits, bounded project/output/time/concurrency, cancellation and cleanup/scavenging.
- Cloud Compile and Linux Terminal use separate operator-configured images: `TEXISE_CLOUD_COMPILE_IMAGE=texlive/texlive:latest` and `TEXISE_CONSOLE_IMAGE=texlive/texlive-console:pro`. Dedicated `texise-compile` and `texise-console` service users isolate Docker authority from `www-data`.
- Home, Pricing and Docs have been rebuilt against the supplied references without shipping Prefix identity. Docs remains MySQL CMS-driven and seeds Local Compile and Cloud Compile · Pro pages non-destructively.
- Console Gateway is retained as **Linux Terminal · Pro** with logged-in server-authoritative Pro gating, explicit project transfer, authenticated file download, one-time websocket credentials and Docker isolation. Hocuspocus collaboration and Laravel Reverb remain legacy rollback services and are disabled only after successful modern health checks.
- Active generated/public URLs, PWA/mobile fallbacks and package metadata now use the www origin.
- Dependency-free release validation is green; dependency-backed package-manager/build gates remain explicitly unverified in this sandbox because npm registry DNS is unavailable.

## 2026-08-20 — R14.28.13 public_html runtime/media and Blog completion

- Active trusted runtime/state now lives under `/var/www/app.texise.com/public_html/texise-data`; public Blog cover media lives under `/var/www/app.texise.com/public_html/texise-media/blog`. `/etc/texise` remains the protected configuration/signing boundary.
- Historical `/var/lib/texise` and `/var/lib/texise-media` locations are read only as upgrade sources and are no longer active runtime destinations.
- Blog covers upload as authenticated multipart files with byte-signature, size and dimension checks, generated immutable names, atomic persistence and structured server errors.
- Apache serves `/texise-media/*`, denies `/texise-data/*`, and deployment preflight verifies service-user write/read plus real served image bytes before activation.
- Existing `/blog-media/*` CMS cover URLs migrate to `/texise-media/blog/*`; old cover files are copied and byte-verified during upgrade.
- Public labels now read `Visual Editor` and `Local Compile`.
- `/blog/:slug` now uses the requested wide article-card hierarchy with a ~2.2:1 cover, date/title/tags/author header and responsive Moranga/Inter/JetBrains typography.
- Frozen dependency-free verification: 166/166 Node tests, 43/43 SaaS audits, 328/328 repository contracts, 13/13 template requirements, 69 lock importers, 68-package dependency consistency and 67 public barrels; shell syntax PASS.

## 2026-08-20 — OVH strict-TypeScript build fix

- Corrected `PageModalHost` effect cleanup so it returns `void` instead of the boolean from `Set.delete()`.
- Added a scoped Toast UI 3.2.2 compatibility declaration for bundler module resolution and explicit image-hook types.
- Added release-audit coverage for both build failures reported by the OVH `tsgo` gate.

## 2026-08-20 — Brand, Home, Projects and Blog CMS completion

- TeXise branding now uses Moranga for the mark and exact `Tex·ise` Moranga regular-italic wordmark. All eight production fonts preload before the application bundle and first render waits behind a bounded font gate.
- Home uses the supplied Prefix hero only as a structural reference with TeXise copy and four real capability cards. Docs is removed from the top menu but remains in the shared public footer and search.
- `/projects` exposes only New Project plus a single action overflow (Templates, Link Folder, Import ZIP, Import from GitHub), shares the Home footer, and keeps all destructive/text-entry actions inside TeXise page modals.
- The editor file-tree toolbar adds full-project ZIP download immediately after Add Folder.
- Blog now supports Prefix-derived search/tag/featured-card layouts, persistent validated cover uploads, Toast UI Markdown/WYSIWYG authoring and bounded sanitized Base64 PNG body images.
- Frozen source-level validation: 170/170 dependency-free Node tests, 43/43 SaaS audits, 328/328 repository contracts, 13/13 template compiler requirements, 69 lock importers, 68-package dependency consistency and 67 public barrels.

## 2026-08-20 — Consolidated Projects/Templates/Typography completion

- `/projects` is now the visible writing entry and owns create/import ZIP/import GitHub/link/template/open/download/rename/relink/archive/delete/account workflows while deep `/ws#...` remains internal editor compatibility plumbing.
- Physical template assets moved to `texise-templates`; `/examples` redirects to `/templates`; install/upgrade removes stale legacy template trees only after validating the new authority.
- The authoritative eight-font external set (Inter, JetBrains Mono, Moranga Light/Regular/Italic/Bold, STIX normal/italic) is deployed after build and signature-checked through Apache.
- Removed the Markdown-only sidebar filter and corrected project privacy copy to semantic foreground styling.
- Frozen source-level validation: 160/160 dependency-free Node tests, 33/33 SaaS audits, 328/328 repository contracts, 13/13 template compiler requirements, 69 lock importers, 68-package dependency consistency and 67 public barrels.

# TeXise SaaS conversion release changelog

## Production install/typecheck hotfix — 2026-08-20

- Fixed the production `tsgo` failure in `packages/core/app/src/saas/saas-app.tsx`: removed the unused/unsupported `Github` lucide icon import for the pinned `lucide-react` version.
- Fixed template-apply storage typing by explicitly widening the local variable to `WorkspaceStorageType`, allowing Browser, BrowserOPFS and NativeFS without weakening workspace type safety.
- Moved the default writable AI Review SQLite audit path from `/etc/texise/ai-review-audit.sqlite3` to `/var/www/app.texise.com/public_html/texise-data/audit/ai-review-audit.sqlite3`; `/etc/texise` remains configuration/signing material and read-only to the service.
- Added upgrade migration for the historical TeXise-owned audit DB default, including the SQLite `-wal`/`-shm` companions when present. Custom administrator paths are preserved.
- Kept `/etc/texise` ownership/modes strict: directory `root:texise 0750`; private/config files `root:texise 0640`; entitlement public key `root:texise 0640`. The public-key mode is intentional and contains no secret material.
- Added deployment regressions covering the old env-path migration and safe state-file relocation at the final service restart boundary.
- The production log supplied by the operator confirms dependency installation and custom validation passed before `tsgo` stopped on the two corrected TypeScript errors. A production rebuild is still required to certify the post-fix typecheck/build.

## TeXise R14.28.12 — SaaS/local-first conversion pass (2026-08-20)

### Architecture

- Added an optional MySQL-backed account/CMS/support layer to the existing trusted TeXise Node server.
- Preserved `/ws` as the existing editor authority and preserved browser-local TeX compilation.
- Added canonical pathname routes for the public site, projects, settings and administration without creating a second editor/project application.
- Enforced a metadata-only cloud project registry; manuscript/project contents are not accepted by the project API.

### Design

- Added TeXise-owned Prefix-derived semantic light/dark tokens and compact productivity styling.
- Added public/projects/settings/admin SaaS surfaces and a separate `/ws` application-density visual pass.
- Removed remaining visible Bangle branding from browser/mobile/desktop presentation while retaining internal Bangle/ProseMirror package identifiers required for compatibility.
- Added Moranga/STIX font-family wiring and strict visual-manuscript STIX scope; Inter/JetBrains family stacks use fallbacks when project-owned binaries are unavailable.

### Accounts and authentication

- Added Google OAuth authorization-code login with PKCE/state and stable `sub` identity mapping.
- Added opaque database sessions, HttpOnly/SameSite cookies, CSRF protection and same-origin mutation enforcement.
- Added Google avatar/account menus, `/settings`, logout and explicit account deletion that does not delete local project files.
- Added bcrypt bootstrap administrator with forced first password change and one-time legacy MD5 upgrade support.
- Prevented OAuth email fallback from claiming admin accounts or rebinding an account already attached to a different Google `sub`.

### Projects

- Added `/projects` over the existing workspace/filesystem services.
- Added local project creation/import/link-folder actions plus account metadata registration, relink state, rename metadata sync, archive/restore and remove-from-account.
- Preserved browser-only FileSystemDirectoryHandle association and local workspace authority.

### Licensing and AI quota

- Added persistent account license association and account-authoritative Pro/LTD entitlement.
- Preserved anonymous signed license activation.
- Added MySQL AI Review reservation/charge/refund accounting and account quota persistence.
- Administrator blocks are authoritative online; re-verification cannot self-unblock and another active account's key cannot be silently reassigned.
- Logged-in AI Review ignores stale browser entitlement tokens; anonymous operation retains the existing signed-entitlement path.

### Templates

- Migrated the existing template catalogue into `texise-templates/free/*` and `texise-templates/pro/*` source trees.
- Added deterministic metadata/path validation and atomic `templates.json` generation.
- Added `/templates`, `/templates/:slug`, public Free/Pro previews and a complete local Apply Template workflow using browser storage or a user-selected local folder.
- Template apply copies nested/binary project files locally, registers only metadata when authenticated and opens the declared entry file in `/ws`.

### CMS, search and support

- Added MySQL blog/docs CMS tables, tags, publish states and legacy content import.
- Public CMS reads regenerate sanitized HTML from Markdown instead of trusting cached HTML.
- Added Prefix-style docs navigation/search, blog/docs public routes, admin CMS editing and safe unsaved preview.
- Added public search over templates/docs/blog/static informational pages with `/` shortcut outside editor/input contexts.
- Added contact ticket storage, rate limiting, honeypot, validation and optional SMTP notification; SMTP failure does not discard the stored ticket.
- Added dynamic public sitemap/robots responses excluding private application/admin routes.

### Administration

- Added dashboard metrics and server-authorized Users, Licenses, Support, Blog and Docs areas.
- Added search/pagination/filtering, user detail/project/support history, suspension/reactivation, quota controls, license block/unblock and support status controls.
- Added administrator audit logging for sensitive account/license/CMS/support changes.

### Deployment and migrations

- Added upgrade-safe SaaS configuration detection so a default database name does not accidentally activate MySQL on editor-only upgrades.
- Added optional explicit database creation, idempotent schema migrations and non-destructive legacy compatibility repair.
- Added missing legacy identity/license/support indexes and clear failure on duplicate legacy identity/license values that would violate required uniqueness.
- Added staged trusted-server dependency installation and canonical route/template-manifest deployment health checks.
- Added Apache sitemap/robots proxying and template-manifest revalidation policy.

### Verification

- Added dependency-free SaaS security/router/auth/session/contact/license/quota/database/migration/sitemap tests.
- Added deterministic template indexer tests and installer configuration tests.
- Updated legacy release guards to verify the new labelled primary Compile button without pinning obsolete icon-only presentation.
- Full dependency-backed build/typecheck/lint/browser/MySQL/OAuth/SMTP certification remains environment-dependent and is reported separately rather than falsely marked passed.

## Post-release completeness audit update — 2026-08-20

- Restored authenticated safe preferences at login and made preferred project storage drive subsequent blank/template creation without becoming a server dependency.
- Added a compact `/ws` Light/Dark/System header control so application navigation has direct theme access as required, without changing editor engines.
- Replaced the inherited staged blank-project storage wizard with one compact functional dialog.
- Added non-blocking project-open activity, deferred metadata-only sync, local-only **Add to account**, complete relink/archive/remove handling and safe template/import registration descriptors for offline retry.
- Expanded Settings account/license/storage information and Admin Users/Licenses operational columns; quota controls now support both increase and decrease.
- Completed CMS author/tags/publication metadata and metadata-rich public search.
- Hardened contact name/subject handling against CR/LF header injection and made malformed legacy account settings recover safely.
- Confirmed the supplied template tree contains no preview/thumbnail assets; TeXise therefore uses the required safe placeholder fallback rather than fabricating previews.
- Re-froze executable validation at 39/39 server tests, 12/12 template+installer tests, 99/99 current-baseline runtime-hardening tests, 22/22 SaaS static audits and 328/328 repository static contracts.

## Configuration permission normalization update — 2026-08-20

- Added an unconditional final `texise_normalize_config_permissions` pass to both install and upgrade flows.
- `/etc/texise` is normalized to `root:texise 0750`.
- Known TeXise-owned files (`texise.env`, `config.json`, `license-keys`, entitlement private/public keys and refresh key) are normalized to `root:texise 0640` without changing their contents.
- Unknown administrator files under `/etc/texise` are deliberately not modified.
- Added an executable regression reproducing a legacy `entitlement-public.pem` at `0644`; the test confirms it becomes `0640` while content is preserved.
- Dependency-free verification after this change: 39/39 server tests, 12/12 template+installer tests, 99/99 runtime-hardening tests and 22/22 SaaS static audits.

## Configuration permission post-condition verification — 2026-08-20

- Strengthened `/etc/texise` normalization from a best-effort chmod/chown step into a verified installer post-condition.
- Install/upgrade now verifies `/etc/texise` is exactly `root:texise 0750` after normalization.
- Every present known TeXise config/signing file is verified as exactly `root:texise 0640` after normalization.
- Symlinked or non-regular known config files are rejected before permission changes to avoid following unexpected filesystem objects.
- `install.sh` and `upgrade.sh` now require `stat`, which is used to report the exact observed owner/group or mode if verification fails.
- The exact legacy production state with `entitlement-public.pem root:root 0644` is covered by the installer regression and normalizes successfully while preserving file contents.
- Verification after this change: 39/39 dependency-free server tests, 12/12 template+installer tests, 99/99 runtime-hardening tests and 22/22 SaaS static audits PASS.

## Production Biome lint fix — 2026-08-20

- Fixed all 31 Biome 2.5.7 diagnostics reported by the OVH production build.
- Added explicit native button types across the SaaS shell/admin/project/template/settings controls.
- Fixed the admin search accessibility association without weakening its accessible name.
- Centralized server-sanitized CMS HTML insertion behind one audited renderer.
- Replaced the template control-character regex with explicit code-point validation.
- Added a regression audit for the exact production lint classes.
- Dependency-free verification after the fix: 39/39 server tests, 12/12 template+installer tests, 99/99 runtime-hardening tests and 23/23 SaaS static audits PASS.
- Production `biome lint`/build rerun is still required for runtime PASS.

## 2026-08-20 — External browser font deployment fix

- `install.sh`/`upgrade.sh` now import the supplied Moranga/STIX browser fonts from `TEXISE_FONT_SOURCE_DIR` after Vite rebuilds `dist`.
- `Latinotype - Moranga Regular.otf` is installed as `Moranga-Regular.otf`, matching TeXise CSS.
- Font source and deployed files are sfnt-signature validated; SPA HTML fallbacks are rejected.
- Apache production health now signature-checks all three served browser fonts.
- Apache declares OTF/TTF MIME types and includes `/texise-fonts/` in immutable static caching.
- The official CSP continues to block Cloudflare-injected analytics by design; TeXise remains telemetry-free by default.

## 2026-08-20 — Consolidated Projects/Templates/Prefix typography pass

- Made `/projects` the visible Start Writing destination and retained deep `/ws#...` only as internal editor compatibility routing.
- Added project ZIP download, storage-aware deletion, browser-local GitHub import and direct root-file opening to `/projects`.
- Project deletion now clears browser-local Git object/index state while never deleting linked physical folders.
- Renamed the physical/static template namespace to `texise-templates`; `/templates` is now exclusively the public SPA route and `/examples` redirects there.
- Removed Show Markdown Only from the LaTeX sidebar and reset the old filter state.
- Corrected the Choose Project privacy text from yellow primary to semantic foreground.
- Expanded deployment to the authoritative eight-font set: Inter Variable, JetBrains Mono Variable, Moranga Light/Regular/Italic/Bold and STIX Two Text normal/italic.
- Applied real Inter/JetBrains typography throughout application/source/code surfaces and retained STIX strictly within the Visual manuscript.
- Strengthened Prefix fidelity with floating rounded public navigation, real Moranga weight/style hierarchy, warm surfaces and normalized UI font weights.
