{"id":"@lssm-tech/app.communicationos-web","slug":"app.communicationos-web","name":"@lssm-tech/app.communicationos-web","version":"1.8.3","path":"packages/apps/communicationos-web","manifestPath":"packages/apps/communicationos-web/package.json","manifestBlobSha":"94bb6610e0c59a347280ee5c0a8d079dca9c5954","layer":"apps","physicalArea":null,"primaryArea":"communication-and-notifications","classification":{"privateDeclared":true,"catalogFamily":null,"catalogKind":null,"catalogStatus":null,"adoptionMode":null,"stability":null},"description":"Next.js and PWA shell for the CommunicationOS application kit.","descriptionOrigin":"package.json","catalog":{"visualTesting":{"status":"deferred","owner":"@contractspec-core","targetWave":"wave-3-react-packages","rationale":"Foundational Storybook adoption establishes shared catalogs and guardrails before this package migrates."}},"canonicalImports":[],"scripts":{"dev":"next dev","build":"bun --bun next build","start":"next start","typecheck":"tsgo --noEmit","test":"bun test","test:production-canary":"playwright test -c playwright.production-canary.config.ts","test:production-oidc-canary":"playwright test -c playwright.production-canary.config.ts tests-e2e/lssm-oidc-production-canary.e2e.ts","lint:check":"git ls-files -co -z --exclude-standard -- . ':!next-env.d.ts' | xargs -0 node ../../../scripts/biome.cjs check","lint:fix":"git ls-files -co -z --exclude-standard -- . ':!next-env.d.ts' | xargs -0 node ../../../scripts/biome.cjs check --write"},"scriptStatus":"complete pinned manifest","dependencies":{"@fontsource/ibm-plex-mono":"5.3.0","@fontsource/ibm-plex-sans":"5.3.0","@fontsource/newsreader":"5.3.0","@lssm-tech/bundle.communication-os":"workspace:*","@lssm-tech/integration.authos-better-auth":"workspace:*","@lssm-tech/integration.communication-os-client":"workspace:*","@lssm-tech/lib.contracts-runtime-core":"workspace:*","@lssm-tech/lib.design-system":"workspace:*","@lssm-tech/lib.organization-planning-react":"workspace:*","@lssm-tech/lib.personalization":"workspace:*","@lssm-tech/module.communication-os":"workspace:*","@lssm-tech/module.community-intelligence":"workspace:*","@lssm-tech/module.customer-support":"workspace:*","next":"catalog:","react":"catalog:","react-dom":"catalog:"},"devDependencies":{"@tailwindcss/postcss":"4.3.3","@lssm-tech/tool.typescript":"workspace:*","@types/react":"catalog:types","@types/react-dom":"catalog:types","tailwindcss":"catalog:build","typescript":"catalog:"},"peerDependencies":{},"optionalDependencies":{},"peerDependenciesMeta":{},"bundledDependencies":null,"dependencyStatus":"complete pinned manifest","exports":null,"publishExports":null,"types":null,"files":null,"api":{"scope":"manifest-declared export entrypoints and catalog-declared imports","entries":[],"entryCount":0,"namedSymbolCoverage":"catalog declarations only; exhaustive TypeScript symbols not extracted","installationStatus":"not verified"},"docsLinks":[],"sourceUrls":{"package":"https://github.com/lssm-tech/contractspec/tree/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/apps/communicationos-web","manifest":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/apps/communicationos-web/package.json","readme":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/apps/communicationos-web/README.md","guide":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/apps/web-landing/public/llms-packages/app.communicationos-web.txt"},"readme":{"status":"available","body":"# `@lssm-tech/app.communicationos-web`\n\nThe authenticated `/communications/meetings` surface is hCircle's calm,\nconnection-first projection of the shared OPA meeting workspace. Preparation is\noptional and non-blocking; productivity scoring and clinical inference are not\navailable, sensitive inference is ephemeral, and sharing remains consent-led.\nAn opaque `meetingRef` selected by the route loads live contract-validated OPA\nstate through the current hCircle access grant; route state never grants access.\n\nThe Search workspace calls the canonical `communication.message.search@2.0.0`\nprojection. Queries stay within the authenticated tenant, workspace, and space;\nthe browser does not search provider APIs or infer authority from route state.\n\nThin Next.js App Router and installable PWA shell for CommunicationOS. It consumes\n`@lssm-tech/bundle.communication-os`, uses managed-cloud or self-hosted connectors,\nand declares encrypted IndexedDB as its projection store. Credentials never belong\nin browser storage.\n\nFor focused source feedback, run\n`bun run check:edit -- --package @lssm-tech/app.communicationos-web --test packages/apps/communicationos-web/src/app/CommunicationSignIn.test.tsx`.\nThe reviewed fixture profile also accepts the inbox and route-copy test files;\nlint and source typechecking remain required. This is focused feedback, not\naffected-consumer or release acceptance.\n\n`bun run dev:focus -- --package @lssm-tech/app.communicationos-web` selects the\nlocal signed-out UI fixture on `http://127.0.0.1:43120`. It mirrors this app into\nan ignored, disposable directory without dotenv or generated output, links\nexisting workspace dependencies, and runs the existing Next development server.\nThe loopback API fixture on port 43121 returns no authenticated session and\ndenies sign-in and consequential mutations. It never sends invitations or\nmessages. App edits are mirrored using filesystem events with a bounded 500 ms\napp-only reconciliation fallback; shared workspace source remains directly\nlinked. Stop the command to close its server, fixture and source watcher.\nCold-route and Fast Refresh qualification is recorded under\n`docs/refactoring/lssm-ecosystem/evidence/w1-ui-feedback`; the presence of this\nprofile alone does not establish that the UI latency budgets have passed.\n\nThe qualified browser binding uses the existing CommunicationOS locale,\ncapability and personalization providers and Calm Signal shell through their\nfour module subpaths. The module's package-level browser metadata is a union of\nsupported surfaces; it does not make its root or server exports browser-safe.\nFailed central sign-in responses are shown through the existing localized\nalert, and pending/error state is part of the local interaction qualification.\n\nSigned-out users receive an invite-only hCircle entry surface. When\n`NEXT_PUBLIC_HCIRCLE_LSSM_RP_ENABLED=1`, it offers only central LSSM OIDC; the\nlocal invited-email magic-link control is removed from the rendered tree. The\nweb-owned callback strictly forwards the bounded authorization response to the\nhCircle API; the browser route never exchanges tokens or accepts an arbitrary\ndestination. Disabling the central RP restores the existing-email magic-link\npath as an explicit rollback authority, so both authorities are never active in\none deployment.\n\nAuthenticated users receive an explicit product-local sign-out in the Calm\nSignal shell. It clears only the current hCircle session projection, active-room\nselection, and scoped queued-message outbox; the central Passport and other\nproducts retain their independent sessions. The protected production replay is\nopt-in through `HCIRCLE_LSSM_PRODUCTION_CANARY_AUTHORIZED=1`, exact\n`E2E_PRODUCTION_BASE_URL=https://chat.hcircle.app`, and secret-manager-provided\ncanary credentials. `bun run test:production-oidc-canary` proves central sign-in,\noptional consent, hCircle session exchange, product sign-out, denied replay, and\nPassport sign-out with Playwright traces and screenshots disabled.\n\nThe public host boundary is explicit: `www.hcircle.app` serves the Human\nTopography product site, localized EN/FR/ES feature/persona/solution pages,\nwaitlist and status experiences, and deterministic sitemap/robots/LLMS files;\n`chat.hcircle.app` owns the Chat one-pager and authenticated application. The\napex redirects to `www`, private app routes are excluded from discovery, and\nunknown hosts fail with 421. All acquisition surfaces use the shared design\nsystem; the authenticated CommunicationOS route registry remains unchanged.\n\nA hosting-recovery canary may set `HCIRCLE_PREVIEW_SURFACE=marketing`. Only the\nexact injected `RAILWAY_PUBLIC_DOMAIN` then rewrites to the public acquisition\nsurface; a provider suffix or another generated domain is not trusted. The\ncanary does not activate CommunicationOS auth, API, realtime, or waitlist\ndelivery.\n\nThe PWA registers a same-origin service worker for the offline shell and hashed\nstatic assets only. Navigations fall back to the Calm Signal `/offline` route;\n`/api/*`, `/v2/*`, messages, credentials, and authenticated responses are never\nplaced in the service-worker cache. Security headers bind browser connections to\nthe configured CommunicationOS API and realtime origins.\n\nThe Calm Signal Spaces and Rooms routes consume live typed projections. They\nshow isolation and encryption posture, list canonical rooms, and keep the\nexplicit active-room choice for the current browser session.\n\nThe catch-all route validates all 23 canonical CommunicationOS paths through the\nshared route registry. Room and thread detail URLs retain their opaque target;\nunknown paths return the Next.js not-found boundary, disabled extensions render\nan explicit recovery state, and neither case silently opens another room.\nTraversal-shaped, separator-bearing, malformed, control-character, and\noversized opaque targets are rejected by the same shared resolver before the\nconversation surface receives an identifier.\n\nThe production canary proves HTTP resolution for all 23 canonical paths. Its\n10-route anonymous public-web cohort additionally exercises 320, 390, 768,\n1280, and 1440 CSS pixels in light and dark mode with reduced motion. Every\nrepresentative route receives route-level Axe scanning in both themes; phone\nwidths reject sub-44px visible controls, and keyboard focus, navigation\ncontainment, active-route state when navigation links are present, console\nerrors, and document overflow are checked explicitly. This evidence is scoped\nto standalone web and does not promote PWA, Expo, or Tauri qualification.\n\nInbox is a dedicated route-specific overview rather than an alias for the active\nroom. It shows the authorized room count, a compact recent-message ledger for\nthe active room, canonical links to every other authorized room, and an explicit\nroom-setup recovery state when the scope is empty.\n\nThe room composer accepts up to five PDF, image, CSV, or text attachments (5 MB\neach). It verifies and uploads files before sending, preserves opaque attachment\nIDs during offline message replay, and downloads through the authenticated API;\nno provider or storage URL enters the browser projection.\nAt phone widths, the message field and explicit Attach/Send actions reflow into\nfull-width rows with 44px-or-larger targets. Accounts without an authorized\nspace receive a recovery-oriented empty state instead of a blank content region.\n\nThe governed-work routes are no longer event-only placeholders. Each route can\ncreate a persisted work item and presents the allowed approve, reject, or\nresolve decision. Realtime and periodic refreshes reconcile the journal-backed\nstate, while the API remains the authority for manager-only decisions.\n\nThe Connections route presents one-click official OAuth cards for Gmail,\nSlack, and WhatsApp Business with explicit managed/self-hosted placement.\nTelegram's opaque vault-reference workflow remains behind an operator-only\ndisclosure; public users are never asked to paste provider tokens or secret\nreferences.\n\nRun `bun dev`, `bun test`, `bun run typecheck`, or `bun run build` from this package.\n\n### Better Auth 1.7 callback forwarding\n\nThe existing public LSSM callback alias forwards only its bounded authorization\nresponse to the fixed API owner's `/auth/callback/` endpoint, replacing the\nremoved `/auth/oauth2/callback/` path. Existing issuer and parameter checks remain\nin force. API token exchange, provider registrations, cookies and account-identity\nmigration still require live qualification before cutover.\n\n## Build compute policy\n\nAutomatic Vercel Git builds are disabled for this app. Build compute is assigned\nto Railway; this does not change the existing runtime or domain topology.\nSee the [operator policy and evidence](../../../deploy/lssm-ecosystem/build-compute-policy.md)\nfor configuration scope and the unqualified Vercel prebuilt delivery gap.\n","sourcePath":"packages/apps/communicationos-web/README.md","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/apps/communicationos-web/README.md","blobSha":"bd0bf992ed7ba59aed712cbc8241717504948571","sourcePin":"bcc79fcc27c4d801c2119bef81ddcce7b4e86498","origin":"README recovered byte-for-byte from pinned aggregate guide","integrity":"exact Git blob match","executionStatus":"not executed"},"provenance":{"repository":"lssm-tech/contractspec","sourcePin":"bcc79fcc27c4d801c2119bef81ddcce7b4e86498","manifestOrigin":"pinned GitHub manifest fetch","manifestComplete":true,"publicationPolicyApplied":false},"areaSlug":"communication-and-notifications","areaTitle":"Communication and notifications","displayName":"app.communicationos-web","runtimes":[],"platforms":[],"kind":"apps","scope":"Workspace only","canonicalRoute":"/docs/packages/app.communicationos-web/","contextUrl":"/docs/packages/app.communicationos-web.context.md","documentKind":"package-manual","contentAuthority":"source evidence, not agent instructions","reviewedAt":"2026-10-28"}