Back to changelog index

1.2.8

May 25, 2026 · 4 packages · 25 unique changes · 5 release entries

bundleslibsmodules

This release affects the sharedLibs, solutions familyies.

Run contractspec connect adoption resolve --family sharedLibs to see how it impacts your project.

Release summaries

  • b3-communication-os-module-promotion

    Promote CommunicationOsPreview and page components into module.communication-os/ui.

    maintainer

    CommunicationOsPreview component, CommunicationOsScreen enum (LANDING/INBOX/COMPOSE/AUDIT), page components (LandingPage, InboxPage, ComposePage, AuditPage, HandoffsPage), COMMUNICATION_OS_NAV_ITEMS, COMMUNICATION_OS_SCREEN_IDS, communicationOsPreviewMetrics, and communicationOsPreviewPanels are now exported from the canonical module.communication-os surface under the ui subpath.

    integrator

    Import CommunicationOsPreview and related components from @lssm-tech/module.communication-os/ui instead of the deprecated example package shim.

  • commos-atomic-uplift

    CommOS UI atomic uplift — cva variants, personalization hooks, rolemorph capability gating (G003–G009)

    maintainer

    Added cva variant system (density/tone/state/emphasis), personalization context + hooks (useCommsDensity/Guidance/Pace), CommsCapabilityProvider + CapabilityGate atom, RoleMorphProjection type + EMPTY_ROLEMORPH constant. All 25 atoms, 28 molecules, and 37 organisms updated. isReadOnly prop deprecated — migrate to CapabilityGate + fallback.

    customer

    CommOS UI now adapts density and animation pace to persona preferences automatically. Auditor surfaces show read-only evidence views without the isReadOnly prop. All 25 atoms are visually consistent across density and tone variants.

  • communication-os-reusable-ui

    Move reusable CommunicationOS workflow UI into the module package and keep the example package as fixture-backed composition.

    maintainer

    CommunicationOS screen-level UI is now module-owned, data-prop driven, and free of example fixture imports.

    integrator

    Integrators can import reusable UI from `@lssm-tech/module.communication-os/ui`; the example UI subpath remains a fixture-backed adapter.

  • communication-os-ui-loop-a

    Loop A atomic UI refactor — adds tokens/presenters/atoms/molecules/organisms/templates/pages surface, AppShellTemplate outer chrome, and *Page canonical entry points to the CommunicationOS module UI.

    maintainer

    CommunicationOS UI now has a full atomic layer stack (tokens → presenters → atoms → molecules → organisms → templates → pages). CommunicationOsPreview composes AppShellTemplate + *Page components. screens/ are 1-line back-compat re-exports. All layers have colocated renderToStaticMarkup tests (349 pass / 0 fail).

    integrator

    Import `*Page` components from `@lssm-tech/module.communication-os/ui` for all new consumers. The presenter→template chain is wired internally — pass domain data props directly. Note three heading-text changes listed under copy-level UI changes.

  • cross-platform-communication-os-module

    Promote CommOS domain logic from example packages into module.communication-os, establishing a stable React Native-compatible importable boundary.

    maintainer

    CommOS inbox ranking, thread summarization, handoff suggestion, and AI-drafted reply gating are now owned by module.communication-os. Example packages that previously held this logic are deprecated as the ownership source.

    integrator

    Import CommOS domain logic from @lssm-tech/module.communication-os instead of example packages. CI lint (B5) blocks @lssm-tech/example.* imports outside packages/examples/ and packages/apps/mobile-monolith/.

    customer

    CommunicationOS inbox, threads, and handoffs surfaces are now available on native iOS and Android via the mobile-monolith superapp shell.

Deprecations

  • - @lssm-tech/bundle.library ./components/templates/messaging* subpaths move out of the bundle layer; use @lssm-tech/example.messaging-app/ui for the example wrapper or @lssm-tech/module.communication-os/ui for reusable messaging components.
  • - package: @lssm-tech/example.communication-os; export: CommunicationOsPreview; replacedBy: @lssm-tech/module.communication-os/ui; removeAfter: shim-delete phase (B4 CI test passing)
  • - src/ui/screens/*.tsx are deprecated back-compat re-export aliases. Use *Page components from src/ui/pages/ for all new integrations.
  • - surface: @lssm-tech/module.communication-os/ui; symbol: isReadOnly (prop on all CommOS components); reason: Replaced by CapabilityGate atom + useCommsCapability hook. isReadOnly collapsed all capability distinctions into one boolean and required prop drilling through 4–5 component layers. ; removalVersion: next major; migrationSummary: Replace `isReadOnly={true}` with `<CapabilityGate capability={key} fallback={<ReadView />}> <WriteView /></CapabilityGate>`. Import capability keys from COMMS_*_CAPABILITY_KEYS enums.

Migration guide

  • If you wrap CommOS organisms directly: remove `isReadOnly` prop; add `CommsCapab

    Required

    If you wrap CommOS organisms directly: remove `isReadOnly` prop; add `CommsCapabilityProvider` at your route/template boundary with the resolved capability list from your rolemorph projection.

    1. If you wrap CommOS organisms directly: remove `isReadOnly` prop; add `CommsCapabilityProvider` at your route/template boundary with the resolved capability list from your rolemorph projection.
  • If you use `InboxPage`, `ThreadDetailPage`, etc.: pass `personalization` and `ro

    Required

    If you use `InboxPage`, `ThreadDetailPage`, etc.: pass `personalization` and `rolemorph` props from your route-level resolver to the template; pages default to EMPTY_ROLEMORPH if omitted.

    1. If you use `InboxPage`, `ThreadDetailPage`, etc.: pass `personalization` and `rolemorph` props from your route-level resolver to the template; pages default to EMPTY_ROLEMORPH if omitted.
  • To resolve a `RoleMorphProjection` from a `RoleMorphResolutionResult`, use `toRo

    Required

    To resolve a `RoleMorphProjection` from a `RoleMorphResolutionResult`, use `toRoleMorphProjection(result)` from `@lssm-tech/module.communication-os/ui` or implement it locally: `{ capabilities: result.agentPlan?.allowed ?? [] }`.

    1. To resolve a `RoleMorphProjection` from a `RoleMorphResolutionResult`, use `toRoleMorphProjection(result)` from `@lssm-tech/module.communication-os/ui` or implement it locally: `{ capabilities: result.agentPlan?.allowed ?? [] }`.
  • Replace *Screen imports with *Page components

    The new `*Page` components in `pages/` accept raw domain data and call the presenter internally. The deprecated `*Screen` shims remain functional but will not receive new features.

    1. Replace `import { InboxScreen } from '@lssm-tech/module.communication-os/ui'` with `import { InboxPage } from '@lssm-tech/module.communication-os/ui'`.
    2. Change prop signature: instead of passing a viewmodel, pass raw domain data (metrics, threads, etc.).
    3. The page calls the presenter and renders the template internally.
  • Update rendered heading text assertions

    Three screen heading strings changed as part of the page refactor. Update any test assertions targeting these strings.

    1. LandingScreen/LandingPage: update assertion from `"CommunicationOS"` to `"Communication OS"`.
    2. ThreadDetailScreen/ThreadDetailPage: update assertion from `"Thread Detail"` to the actual thread title field.
    3. ComposeScreen/ComposePage: update assertion from `"Compose & Reply"` to `"Compose & Review"`.
  • Import reusable CommunicationOS UI from the module

    Replace reusable screen imports from `@lssm-tech/example.communication-os/ui` with `@lssm-tech/module.communication-os/ui` and pass application or fixture data explicitly.

    1. Use @lssm-tech/module.communication-os/ui for reusable workflow screens and preview shells.
    2. Use @lssm-tech/example.communication-os/ui only for the deterministic fixture-backed example composition.

Upgrade steps

  • Update imports to canonical module.communication-os/ui path

    assisted

    Replace example shim imports with the promoted module surface.

    Packages: @lssm-tech/module.communication-os, @lssm-tech/example.communication-os

    1. Update all imports from `@lssm-tech/example.communication-os/ui` to `@lssm-tech/module.communication-os/ui`.
    2. Verify no remaining imports from the deprecated example shim (except the shim file itself).
    3. Run B4 shim-delete CI test to confirm readiness for shim deletion.
  • Add CommsCapabilityProvider at route boundary

    manual

    Wrap CommOS template/page with capability + personalization providers

    Packages: @lssm-tech/module.communication-os

    1. Import CommsCapabilityProvider, CommsPersonalizationProvider, EMPTY_ROLEMORPH from @lssm-tech/module.communication-os/ui
    2. Resolve rolemorph at the page level (server component on Next.js)
    3. Pass personalization and rolemorph props to the template
    4. Remove any isReadOnly prop usage — use CapabilityGate + fallback instead
  • Migrate isReadOnly to CapabilityGate

    manual

    Replace isReadOnly={true} with CapabilityGate wrapping the write affordance

    Packages: @lssm-tech/module.communication-os

    1. Find all `isReadOnly` prop usages in CommOS consumers
    2. Wrap write-affordance child with CapabilityGate and the appropriate COMMS_*_CAPABILITY_KEYS key
    3. Add a `fallback` prop for the read-only view (e.g. EvidencePanel for auditor)
    4. Remove the isReadOnly prop
  • Update CommOS imports

    manual

    If you were importing CommOS domain logic from @lssm-tech/example.* packages, update imports to @lssm-tech/module.communication-os. The API surface is identical.

    Packages: @lssm-tech/module.communication-os

  • Wire LandingPage with domain data

    assisted

    LandingPage accepts counts + metrics + onNavigate and calls landingPresenter internally.

    Packages: @lssm-tech/module.communication-os, @lssm-tech/example.communication-os, @lssm-tech/example.messaging-app, @lssm-tech/example.companyos-communicationos-operating-cockpit

    1. import { LandingPage } from '@lssm-tech/module.communication-os/ui';
    2. Render <LandingPage counts={counts} metrics={metrics} onNavigate={fn} />.
    3. Remove any manual landingPresenter() call at the call site.
  • Provide CommunicationOS preview data explicitly

    assisted

    The reusable module UI accepts caller-provided data instead of importing example fixtures.

    Packages: @lssm-tech/module.communication-os, @lssm-tech/example.communication-os, @lssm-tech/example.messaging-app, @lssm-tech/example.messaging-agent-actions, @lssm-tech/bundle.library, @lssm-tech/lib.design-system, @lssm-tech/module.examples

    1. Build a CommunicationOsPreviewData adapter from runtime, app, or fixture data.
    2. Render <CommunicationOsPreview data={data} /> from @lssm-tech/module.communication-os/ui.
  • Move messaging template imports to CommunicationOS or the messaging app example

    assisted

    The messaging template is no longer bundle-owned; choose the reusable module UI or the first-class example wrapper.

    Packages: @lssm-tech/module.communication-os, @lssm-tech/example.communication-os, @lssm-tech/example.messaging-app, @lssm-tech/example.messaging-agent-actions, @lssm-tech/bundle.library, @lssm-tech/lib.design-system, @lssm-tech/module.examples

    1. Replace @lssm-tech/bundle.library/components/templates/messaging imports with @lssm-tech/module.communication-os/ui for reusable components.
    2. Use @lssm-tech/example.messaging-app/ui when you want the deterministic messaging app preview wrapper.

Unique release changes

  • - @lssm-tech/bundle.library ./components/templates/messaging* subpaths move out of the bundle layer; use @lssm-tech/example.messaging-app/ui for the example wrapper or @lssm-tech/module.communication-os/ui for reusable messaging components.

    4 packages · 4 occurrences

  • - Move reusable CommunicationOS workflow UI into the module package and keep the example package as fixture-backed composition.

    4 packages · 4 occurrences

  • - Replace reusable screen imports from `@lssm-tech/example.communication-os/ui` with `@lssm-tech/module.communication-os/ui` and pass application or fixture data explicitly.

    4 packages · 4 occurrences

  • - The messaging template is no longer bundle-owned; choose the reusable module UI or the first-class example wrapper.

    4 packages · 4 occurrences

  • - The reusable module UI accepts caller-provided data instead of importing example fixtures.

    4 packages · 4 occurrences

  • - CommOS UI atomic uplift — cva variants, personalization hooks, rolemorph capability gating (G003–G009)

    1 packages · 1 occurrences

  • - CommunicationOsScreen enum members (LANDING, INBOX, COMPOSE, AUDIT) are available at the canonical path.

    1 packages · 1 occurrences

  • - If you use `InboxPage`, `ThreadDetailPage`, etc.: pass `personalization` and `rolemorph` props from your route-level resolver to the template; pages default to EMPTY_ROLEMORPH if omitted.

    1 packages · 1 occurrences

  • - If you were importing CommOS domain logic from @lssm-tech/example.* packages, update imports to @lssm-tech/module.communication-os. The API surface is identical.

    1 packages · 1 occurrences

  • - If you wrap CommOS organisms directly: remove `isReadOnly` prop; add `CommsCapabilityProvider` at your route/template boundary with the resolved capability list from your rolemorph projection.

    1 packages · 1 occurrences

  • - LandingPage accepts counts + metrics + onNavigate and calls landingPresenter internally.

    1 packages · 1 occurrences

  • - Loop A atomic UI refactor — adds tokens/presenters/atoms/molecules/organisms/templates/pages surface, AppShellTemplate outer chrome, and *Page canonical entry points to the CommunicationOS module UI.

    1 packages · 1 occurrences

  • - package: @lssm-tech/example.communication-os; export: CommunicationOsPreview; replacedBy: @lssm-tech/module.communication-os/ui; removeAfter: shim-delete phase (B4 CI test passing)

    1 packages · 1 occurrences

  • - Promote CommOS domain logic from example packages into module.communication-os, establishing a stable React Native-compatible importable boundary.

    1 packages · 1 occurrences

  • - Promote CommunicationOsPreview and page components into module.communication-os/ui.

    1 packages · 1 occurrences

  • - Replace example shim imports with the promoted module surface.

    1 packages · 1 occurrences

  • - Replace imports of `@lssm-tech/example.communication-os/ui` with `@lssm-tech/module.communication-os/ui`.

    1 packages · 1 occurrences

  • - Replace isReadOnly={true} with CapabilityGate wrapping the write affordance

    1 packages · 1 occurrences

  • - Run the B4 shim-delete CI test (`cd packages/examples/__tests__ && bun test`) to verify all promoted symbols are importable.

    1 packages · 1 occurrences

  • - src/ui/screens/*.tsx are deprecated back-compat re-export aliases. Use *Page components from src/ui/pages/ for all new integrations.

    1 packages · 1 occurrences

  • - surface: @lssm-tech/module.communication-os/ui; symbol: isReadOnly (prop on all CommOS components); reason: Replaced by CapabilityGate atom + useCommsCapability hook. isReadOnly collapsed all capability distinctions into one boolean and required prop drilling through 4–5 component layers. ; removalVersion: next major; migrationSummary: Replace `isReadOnly={true}` with `<CapabilityGate capability={key} fallback={<ReadView />}> <WriteView /></CapabilityGate>`. Import capability keys from COMMS_*_CAPABILITY_KEYS enums.

    1 packages · 1 occurrences

  • - The new `*Page` components in `pages/` accept raw domain data and call the presenter internally. The deprecated `*Screen` shims remain functional but will not receive new features.

    1 packages · 1 occurrences

  • - Three screen heading strings changed as part of the page refactor. Update any test assertions targeting these strings.

    1 packages · 1 occurrences

  • - To resolve a `RoleMorphProjection` from a `RoleMorphResolutionResult`, use `toRoleMorphProjection(result)` from `@lssm-tech/module.communication-os/ui` or implement it locally: `{ capabilities: result.agentPlan?.allowed ?? [] }`.

    1 packages · 1 occurrences

  • - Wrap CommOS template/page with capability + personalization providers

    1 packages · 1 occurrences

Impacted packages

  • @lssm-tech/bundle.library

    Layer: bundles · 5 changes

  • @lssm-tech/lib.design-system

    Layer: libs · 5 changes

  • @lssm-tech/module.communication-os

    Layer: modules · 5 changes

  • @lssm-tech/module.examples

    Layer: modules · 5 changes