Back to changelog index

1.2.5

Aug 01, 2026 · 13 packages · 25 unique changes · 5 release entries

appsintegrationslibsmodulesBreaking changes

This release affects the integrations, sharedLibs, solutions familyies.

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

Release summaries

  • communication-os-domain-command-persistence

    Persist CommunicationOS domain commands as provider-free approval/draft events.

    maintainer

    CommunicationOS now has contract-level domain-command classification plus runtime event persistence for reviewable agent commands.

    integrator

    Integrators can persist reply, handoff, escalation, and evidence-preparation commands as immutable approval/draft packets without provider or database coupling.

  • communication-os-product-capability

    Split CommunicationOS into canonical spec, backend-neutral runtime, thin module composition, standalone examples, and isolated design-system communication blocks.

    maintainer

    Maintainers get clear package ownership: contracts in a spec lib, deterministic runtime in a runtime lib, examples in an example package, and module shims only for migration.

    integrator

    Integrators should move new imports to the spec/runtime/example/design-system packages and treat module core subpaths as deprecated shims.

  • communicationos-production-readiness

    Close the CommunicationOS hexagon and make it EU-sovereign and installable — additive sovereignty + three-state GDPR-erasure contracts, governed persistence with actor-aware RLS, four official channel adapters behind a frozen ChannelAdapter port, a fail-closed governed agent (no auto-send) on Mistral, a one-call runtime factory with self-host install and two verticals, and a governed MCP gateway.

    maintainer

    The build is additive: existing communication-spec contract keys are unchanged. New SovereigntyProfile, an RGPD consent surface, and communication.subject.erase@1.0.0 (three-state outcome) sit in communication-spec (ContractSpec Connect verdict: permit). The adapter half is new packages: communication-os-persistence (governed executeGovernedMutation execution, server-only ./database boundary, EngineAuthPort, actor-aware RLS, identity-rbac PDP, redaction-aware observability), communication-channel-core (frozen ChannelAdapter port + RuntimeChannelType + registry), four channel adapters, communication-os-agent (allowlist registry excluding communication.reply.send + CommunicationInboxApprovalStore + Mistral/Claude), and communication-os-runtime (createCommunicationOsRuntime factory + approve→send orchestrator + install + verticals). communicationos-mcp becomes a governed gateway. The no-agent-send invariant, tenant isolation, and the server-only DB boundary are test-proven.

    integrator

    Wire CommunicationOS into a vertical with a single createCommunicationOsRuntime({ persistence, channels, model, auth, observability }) call (≤40 LOC, no edits to the underlying packages). Register the channel adapters you license (telegram/email/sms/slack) behind the frozen ChannelAdapter port; provide a tenant-bearing actor context so reads/writes are RLS-scoped (the default self-host read port fails closed without a tenant). Drafting runs through the governed agent; sends are reachable only via the inbox approval transition (executeApprovedSend), never by the agent. Self-host via the install bring-up (migrations + env + MCP). Production PDP-style external sends use real channel credentials you supply; CI exercises mocks/PgLite.

    customer

    Operators get a governed, sovereign messaging surface — unified threads across Telegram, email, SMS, and Slack; an AI assistant that drafts, summarizes, classifies, and triages but can NEVER send to a customer without an explicit human approval; EU data residency, a sovereign/EU LLM option (Mistral or local), self-host/on-prem, and GDPR right-to-erasure with an honest outcome for channels (like email) that cannot recall a sent message. The managed CompanyOS communication cockpit renders from live data.

  • cross-platform-communication-spec-commands

    Add E1/E2 defineCommand and defineCapability contracts for CommunicationOS AI operations and auditor scope gating.

    maintainer

    Three new commands: comms.summarizeThread, comms.draftReply, comms.suggestHandoff. Two new capabilities: AI routing scope (ai_operator), auditor read-only scope. All contracts include full meta (key, version, goal, context, owners, tags, stability).

    integrator

    Wire AI panel slots against the new capability contracts. comms.draftReply and comms.suggestHandoff are gated by the AI routing capability — auditor role will receive boundary: "blocked" for mutation operations.

  • m2-communication-spec-threadlink-v2

    BREAKING: Migrate ThreadLinkModel to V2 rich-reference shape — objectType/objectId replaced by objectRef + kindId/instanceId.

    maintainer

    ThreadLinkModel V2 migration. The `objectType` and `objectId` fields are removed from `ThreadLinkModel`. A new `objectRef` field (JSONObject, non-optional) carries the serialised RichReference payload. All search/query operations use `linkedKindId` + `linkedInstanceId` instead of `linkedObjectType` + `linkedObjectId`. New exports: `threadLinkedObjectKind` (defineReferenceKind) and `ThreadLinkedObjectPayload` (Zod schema + type) in `contracts/thread-link-kind.ts`.

    integrator

    BREAKING — update every consumer that reads or writes ThreadLinkModel fields: replace `objectType` with the kindId inside `objectRef`, replace `objectId` with the instanceId inside `objectRef`. Update query parameter names from `linkedObjectType`/`linkedObjectId` to `linkedKindId`/`linkedInstanceId`. Use `threadLinkedObjectKind.id` ('communication.thread-linked-object') as the standard kindId for CommunicationOS thread links.

    customer

    Thread-to-object links now use a typed rich-reference format that carries domain context alongside the object identifier. No UI behaviour changes.

Deprecations

  • - @lssm-tech/module.communication-os/core/contracts* re-export from @lssm-tech/lib.communication-spec for one migration window.
  • - @lssm-tech/module.communication-os/core/runtime* and core governance/lifecycle/scenarios re-export from @lssm-tech/lib.communication-runtime for one migration window.
  • - SearchThreadsQuery input.linkedObjectId — removed; use linkedInstanceId.
  • - SearchThreadsQuery input.linkedObjectType — removed; use linkedKindId.
  • - ThreadLinkModel.objectId — removed; encode instanceId inside objectRef.
  • - ThreadLinkModel.objectType — removed; encode kindId inside objectRef.

Migration guide

  • Move CommunicationOS contract imports to the spec package

    Required

    Replace module contract imports with grouped subpaths from `@lssm-tech/lib.communication-spec`.

    1. Replace contract imports with @lssm-tech/lib.communication-spec grouped subpaths: ./types, ./commands, ./queries, ./events, ./capabilities, ./validation.
  • Move CommunicationOS runtime imports to the runtime package

    Required

    Replace module runtime imports with grouped subpaths from `@lssm-tech/lib.communication-runtime`.

    1. Replace runtime imports with @lssm-tech/lib.communication-runtime grouped subpaths: ./governance, ./ingestion, ./lifecycle, ./records, ./replay, ./state.
  • Move CommunicationOS examples to the example package

    Required

    Replace module example, fixture, and proof imports with `@lssm-tech/example.communication-os` grouped subpaths.

    1. Replace examples, fixtures, and proof imports with @lssm-tech/example.communication-os grouped subpaths.
  • Use CommunicationOS design-system blocks for presentation

    Import presentational communication workflow blocks from the design-system package.

    1. Use @lssm-tech/lib.design-system/components/communication-os for presentational communication workflow blocks.
  • Replace objectType/objectId with objectRef in ThreadLinkModel consumers

    Required

    All code that constructs or reads ThreadLinkModel values must migrate from the V1 flat fields to the V2 objectRef JSONObject shape. The V2 objectRef carries `kindId`, `id` (instanceId), `payload`, and optional `redactionState`.

    1. Replace `{ objectType: 'foo', objectId: 'bar' }` with `{ objectRef: { kindId: 'foo', id: 'bar', payload: {} } }`.
    2. Replace reads of `link.objectType` with `link.objectRef.kindId`.
    3. Replace reads of `link.objectId` with `link.objectRef.id`.
    4. For CommunicationOS thread links, use `threadLinkedObjectKind.id` ('communication.thread-linked-object') as the kindId.
    5. Validate payloads with `ThreadLinkedObjectPayload` schema (Zod) from @lssm-tech/lib.communication-spec.
    6. Run: bun x tsgo --noEmit -p packages/libs/communication-spec/tsconfig.json
    7. Run: bun test packages/libs/communication-spec
  • Replace linkedObjectType/linkedObjectId in SearchThreadsQuery callers

    Required

    Any code that calls SearchThreadsQuery with `linkedObjectType` or `linkedObjectId` must switch to `linkedKindId` and `linkedInstanceId`.

    1. Replace `linkedObjectType` with `linkedKindId` in all SearchThreadsQuery input objects.
    2. Replace `linkedObjectId` with `linkedInstanceId` in all SearchThreadsQuery input objects.

Upgrade steps

  • Persist CommunicationOS agent commands before execution

    assisted

    Use `persistAgentCommunicationCommand` to record approval packet or draft evidence before any adapter-owned write.

    Packages: @lssm-tech/lib.communication-spec, @lssm-tech/lib.communication-runtime, @lssm-tech/module.communication-os

    1. Classify candidate actions with `classifyCommunicationAction`.
    2. Persist agent commands with `persistAgentCommunicationCommand`.
    3. Treat `approval_packet_persisted` as review evidence, not provider execution.
  • Move contract imports to lib.communication-spec

    manual

    Import canonical communication contract models, commands, queries, events, capabilities, and validation helpers from `@lssm-tech/lib.communication-spec`.

    Packages: @lssm-tech/lib.communication-spec, @lssm-tech/lib.communication-runtime, @lssm-tech/module.communication-os, @lssm-tech/example.communication-os, @lssm-tech/lib.design-system

    1. Use @lssm-tech/lib.communication-spec/types for enums and models.
    2. Use @lssm-tech/lib.communication-spec/commands for command contracts.
    3. Use @lssm-tech/lib.communication-spec/queries and /events for query and event contracts.
  • Move example fixture imports to example.communication-os

    manual

    Import replay fixtures and proof from `@lssm-tech/example.communication-os` instead of module subpaths.

    Packages: @lssm-tech/lib.communication-spec, @lssm-tech/lib.communication-runtime, @lssm-tech/module.communication-os, @lssm-tech/example.communication-os, @lssm-tech/lib.design-system

    1. Replace /examples, /fixtures, and /proof module imports with the example package equivalents.
  • Adopt the additive sovereignty + erasure contracts

    assisted

    Configure a SovereigntyProfile and wire communication.subject.erase@1.0.0; existing communication-spec keys are unchanged.

    Packages: @lssm-tech/lib.communication-spec, @lssm-tech/integration.communication-os-persistence, @lssm-tech/integration.communication-channel-core, @lssm-tech/integration.communication-channel-telegram, @lssm-tech/integration.communication-channel-email, @lssm-tech/integration.communication-channel-sms, @lssm-tech/integration.communication-channel-slack, @lssm-tech/integration.communication-os-agent, @lssm-tech/integration.communication-os-runtime, @lssm-tech/app.communicationos-mcp

    1. Adopt SovereigntyProfile (EU residency, retention windows, sovereign LLM id, hosting mode) from `@lssm-tech/lib.communication-spec`.
    2. Wire `communication.subject.erase@1.0.0`; handle the three-state outcome — treat `erased_local_provider_retained_documented` as compliant when tied to a documented retention window, not as an unresolved liability.
    3. Leave the original communication-spec contract keys unchanged.
  • Wire CommunicationOS into a vertical via the runtime factory

    assisted

    Compose persistence, channels, model, auth, and observability with one createCommunicationOsRuntime call.

    Packages: @lssm-tech/lib.communication-spec, @lssm-tech/integration.communication-os-persistence, @lssm-tech/integration.communication-channel-core, @lssm-tech/integration.communication-channel-telegram, @lssm-tech/integration.communication-channel-email, @lssm-tech/integration.communication-channel-sms, @lssm-tech/integration.communication-channel-slack, @lssm-tech/integration.communication-os-agent, @lssm-tech/integration.communication-os-runtime, @lssm-tech/app.communicationos-mcp

    1. Call `createCommunicationOsRuntime({ persistence, channels, model, auth, observability })` from `@lssm-tech/integration.communication-os-runtime` (≤40 LOC, no edits to underlying packages).
    2. Register the channel adapters you license behind the frozen ChannelAdapter port; reach node-only DB code only via the server-only `./database` subpath.
    3. Provide a tenant-bearing actor context — the default self-host read port fails closed without a tenant; reads/writes are RLS-scoped under a non-owner role.
  • Adopt the governed agent and channel adapters

    manual

    Run drafting through the fail-closed agent; sends only via the inbox approval transition.

    Packages: @lssm-tech/lib.communication-spec, @lssm-tech/integration.communication-os-persistence, @lssm-tech/integration.communication-channel-core, @lssm-tech/integration.communication-channel-telegram, @lssm-tech/integration.communication-channel-email, @lssm-tech/integration.communication-channel-sms, @lssm-tech/integration.communication-channel-slack, @lssm-tech/integration.communication-os-agent, @lssm-tech/integration.communication-os-runtime, @lssm-tech/app.communicationos-mcp

    1. Bind the agent from `@lssm-tech/integration.communication-os-agent`; the tool registry is an allowlist that structurally excludes `communication.reply.send`.
    2. Route approvals through `CommunicationInboxApprovalStore`/`ApprovalWorkflow`; dispatch real sends only via `executeApprovedSend` (refuses non-approved, idempotent, audit-first).
    3. Select Mistral (sovereign EU) or Claude or a local model purely via SovereigntyProfile; never give the agent a send tool.
    4. Verify inbound webhook authenticity at each channel adapter (Telegram secret token, Twilio signature, Slack signing secret) — ingest rejects unauthenticated payloads.
  • BREAKING: Migrate ThreadLinkModel from V1 flat fields to V2 objectRef

    manual

    ThreadLinkModel no longer has `objectType` or `objectId`. All link data must be serialised into the `objectRef` JSONObject field using the RichReference shape.

    Packages: @lssm-tech/lib.communication-spec

    1. Audit every write path that creates ThreadLinkModel records.
    2. Construct objectRef as `{ kindId: string, id: string, payload: ThreadLinkedObjectPayload }`.
    3. For standard CommunicationOS links: kindId = 'communication.thread-linked-object'.
    4. Audit every read path that extracts objectType or objectId from ThreadLinkModel.
    5. Replace with `objectRef.kindId` and `objectRef.id` respectively.
  • Update SearchThreadsQuery parameters

    assisted

    Query parameter names changed to align with V2 rich-reference vocabulary.

    Packages: @lssm-tech/lib.communication-spec

    1. s/linkedObjectType/linkedKindId/g across all SearchThreadsQuery callers.
    2. s/linkedObjectId/linkedInstanceId/g across all SearchThreadsQuery callers.

Unique release changes

  • - Close the CommunicationOS hexagon and make it EU-sovereign and installable — additive sovereignty + three-state GDPR-erasure contracts, governed persistence with actor-aware RLS, four official channel adapters behind a frozen ChannelAdapter port, a fail-closed governed agent (no auto-send) on Mistral, a one-call runtime factory with self-host install and two verticals, and a governed MCP gateway.

    10 packages · 10 occurrences

  • - Compose persistence, channels, model, auth, and observability with one createCommunicationOsRuntime call.

    10 packages · 10 occurrences

  • - Configure a SovereigntyProfile and wire communication.subject.erase@1.0.0; existing communication-spec keys are unchanged.

    10 packages · 10 occurrences

  • - Run drafting through the fail-closed agent; sends only via the inbox approval transition.

    10 packages · 10 occurrences

  • - @lssm-tech/module.communication-os/core/contracts* re-export from @lssm-tech/lib.communication-spec for one migration window.

    4 packages · 4 occurrences

  • - @lssm-tech/module.communication-os/core/runtime* and core governance/lifecycle/scenarios re-export from @lssm-tech/lib.communication-runtime for one migration window.

    4 packages · 4 occurrences

  • - Import canonical communication contract models, commands, queries, events, capabilities, and validation helpers from `@lssm-tech/lib.communication-spec`.

    4 packages · 4 occurrences

  • - Import presentational communication workflow blocks from the design-system package.

    4 packages · 4 occurrences

  • - Import replay fixtures and proof from `@lssm-tech/example.communication-os` instead of module subpaths.

    4 packages · 4 occurrences

  • - Replace module contract imports with grouped subpaths from `@lssm-tech/lib.communication-spec`.

    4 packages · 4 occurrences

  • - Replace module example, fixture, and proof imports with `@lssm-tech/example.communication-os` grouped subpaths.

    4 packages · 4 occurrences

  • - Replace module runtime imports with grouped subpaths from `@lssm-tech/lib.communication-runtime`.

    4 packages · 4 occurrences

  • - Split CommunicationOS into canonical spec, backend-neutral runtime, thin module composition, standalone examples, and isolated design-system communication blocks.

    4 packages · 4 occurrences

  • - Persist CommunicationOS domain commands as provider-free approval/draft events.

    3 packages · 3 occurrences

  • - Use `persistAgentCommunicationCommand` to record approval packet or draft evidence before any adapter-owned write.

    3 packages · 3 occurrences

  • - Add E1/E2 defineCommand and defineCapability contracts for CommunicationOS AI operations and auditor scope gating.

    1 packages · 1 occurrences

  • - All code that constructs or reads ThreadLinkModel values must migrate from the V1 flat fields to the V2 objectRef JSONObject shape. The V2 objectRef carries `kindId`, `id` (instanceId), `payload`, and optional `redactionState`.

    1 packages · 1 occurrences

  • - Any code that calls SearchThreadsQuery with `linkedObjectType` or `linkedObjectId` must switch to `linkedKindId` and `linkedInstanceId`.

    1 packages · 1 occurrences

  • - BREAKING: Migrate ThreadLinkModel to V2 rich-reference shape — objectType/objectId replaced by objectRef + kindId/instanceId.

    1 packages · 1 occurrences

  • - Query parameter names changed to align with V2 rich-reference vocabulary.

    1 packages · 1 occurrences

  • - SearchThreadsQuery input.linkedObjectId — removed; use linkedInstanceId.

    1 packages · 1 occurrences

  • - SearchThreadsQuery input.linkedObjectType — removed; use linkedKindId.

    1 packages · 1 occurrences

  • - ThreadLinkModel no longer has `objectType` or `objectId`. All link data must be serialised into the `objectRef` JSONObject field using the RichReference shape.

    1 packages · 1 occurrences

  • - ThreadLinkModel.objectId — removed; encode instanceId inside objectRef.

    1 packages · 1 occurrences

  • - ThreadLinkModel.objectType — removed; encode kindId inside objectRef.

    1 packages · 1 occurrences

Impacted packages

  • @lssm-tech/app.communicationos-mcp

    Layer: apps · 4 changes

  • @lssm-tech/integration.communication-channel-core

    Layer: integrations · 4 changes

  • @lssm-tech/integration.communication-channel-email

    Layer: integrations · 4 changes

  • @lssm-tech/integration.communication-channel-slack

    Layer: integrations · 4 changes

  • @lssm-tech/integration.communication-channel-sms

    Layer: integrations · 4 changes

  • @lssm-tech/integration.communication-channel-telegram

    Layer: integrations · 4 changes

  • @lssm-tech/integration.communication-os-agent

    Layer: integrations · 4 changes

  • @lssm-tech/integration.communication-os-persistence

    Layer: integrations · 4 changes

  • @lssm-tech/integration.communication-os-runtime

    Layer: integrations · 4 changes

  • @lssm-tech/lib.communication-runtime

    Layer: libs · 9 changes

  • @lssm-tech/lib.communication-spec

    Layer: libs · 9 changes

  • @lssm-tech/lib.design-system

    Layer: libs · 9 changes

  • @lssm-tech/module.communication-os

    Layer: modules · 9 changes