{
  "schemaVersion": "1.0",
  "title": "Chatwoot connector changelog",
  "description": "Use this page to decide whether a Chatwoot connector change requires a new artifact, admission record, migration, caller update, or qualification result. It records only changes established from the reviewed Git range.",
  "canonical": "https://getaip.org/docs/connectors/chatwoot/changelog",
  "route": "/docs/connectors/chatwoot/changelog",
  "source": "docs/connectors/chatwoot/changelog.md",
  "protocol": "Agent Interoperability Protocol",
  "protocolVersion": "1.0",
  "section": "Connectors",
  "documentType": "Connector",
  "language": "en",
  "downloads": {
    "md": "/docs/download/connectors/chatwoot/changelog.md",
    "txt": "/docs/download/connectors/chatwoot/changelog.txt",
    "json": "/docs/download/connectors/chatwoot/changelog.json",
    "pdf": "/docs/download/connectors/chatwoot/changelog.pdf"
  },
  "content": {
    "format": "text/markdown",
    "markdown": "---\ntitle: Chatwoot connector changelog\ndescription: >-\n  Track the reviewed Chatwoot connector snapshot, compatibility pins,\n  migrations, and release boundaries\nkind: release-reference\naudience: operator\nappliesTo: \"1.x\"\nwritingStandard: \"aip-docs/1.0\"\nlastReviewedRevision: \"97be86e9efedf07ecf1783b03800f683f107fb04\"\nconnector: chatwoot\n---\n\n# Chatwoot connector changelog\n\nUse this page to decide whether a Chatwoot connector change requires a new\nartifact, admission record, migration, caller update, or qualification result.\nIt records only changes established from the reviewed Git range.\n\n> **Release status:** the reviewed snapshot is not a tagged release. The\n> repository tags `034a5206` as `v1.0.0`; the documentation revision is five\n> commits later and still declares workspace version `1.0.0`. Use full source\n> and artifact identities to distinguish these states.\n\n## Identify the exact version\n\n| Identity | Published `v1.0.0` baseline | Reviewed source snapshot |\n|---|---|---|\n| Source commit | `034a520608eea44e6b14e61c34734bd402d989c0` | `97be86e9efedf07ecf1783b03800f683f107fb04` |\n| Source position | Tagged | `v1.0.0-5-g97be86e` |\n| Publication status | Published tag in the reviewed repository | Unreleased source in the reviewed ancestry |\n| Workspace version | `1.0.0` | `1.0.0` |\n| Native AIP version | `1.0` | `1.0` |\n| Chatwoot capabilities | 3 composites | 3 composites plus 150 catalogue operations |\n| Target placement | Bundled connector | Separately built and admitted standalone host |\n\nAn operator record for the reviewed snapshot needs the full source commit,\ntree state, immutable image digest, manifest digest, connector version ID,\nrelease ID, and upstream identity. The string `1.0.0` cannot replace that\ntuple.\n\n## Reviewed source snapshot\n\nThe entries below describe Chatwoot-relevant differences between tagged\n`v1.0.0` and `97be86e9`. They are source changes, not evidence that an artifact\nwas built, published, deployed, or qualified.\n\n### Added\n\n- A frozen catalogue of 150 account-scoped Chatwoot operations, pinned to\n  upstream commit `8818d276b954ac4f84cffd8915c99f40e43804ed`.\n- A dedicated `aip-host-chatwoot` binary and the common standalone-host image\n  path.\n- Registry admission, tenant-scoped routing, replica leases, health, drain,\n  runtime database, and recovery integration.\n- Allowed-operation filtering for provider edition and account policy.\n- Bounded JSON and multipart request handling plus bounded provider responses.\n- A standalone `/webhooks/chatwoot` route with durable local Event and outbox\n  handling.\n- Product-image and controlled-fleet qualification procedures.\n\n### Changed\n\nThe public surface expands from three composite capabilities to 153 total\ncapabilities. The three original IDs remain available:\n\n| Composite | Purpose |\n|---|---|\n| `cap:chatwoot:message:create` | Send one conversation message |\n| `cap:chatwoot:conversation:status` | Read or set the normalized conversation status |\n| `cap:chatwoot:conversation:handoff` | Assign an agent or team and optionally add a private note |\n\nCatalogue IDs use the dotted `cap:chatwoot:<operation>` suffixes from the\npinned operation table. They do not rename the colon-separated composite IDs.\nCallers should discover the intended contract instead of transforming an ID by\nstring convention.\n\nAll 88 catalogue mutations now require an AIP idempotency key and publish\napproval support. Provider requests receive the Action identity, and catalogue\nrequests receive the stable idempotency marker. The three composites retain\ntheir own orchestration and policy contracts.\n\nProvider transport now rejects credentials, path prefixes, query strings, and\nfragments in the base URL. It requires HTTPS except for explicit loopback,\ndisables redirects, applies connection and request deadlines, and bounds\naccepted response bytes.\n\n### Webhook replay and delivery\n\nStandalone webhook replay fencing moves to instance-scoped durable profile\nstate. An ordinary duplicate no longer returns a replay error from the normal\ningress path. It reconstructs the same deterministic Event ID so durable Event\nstorage can repair a crash between replay observation and Event append.\n\nThe host persists mapped Events and queues central publication before returning\nsuccess. A successful webhook response can therefore represent local durable\nacceptance while central delivery remains queued. Recover that outbox instead\nof asking Chatwoot to create a replacement event.\n\n### Security boundary made explicit\n\nThe reviewed standalone topology fixes the account ID, token file, provider\norigin, allowed-operation set, connector identity, artifact, manifest, and\ncredential revision outside Action input. Catalogue mutations require approval\nand idempotency, and multipart names and byte counts are validated before\nprovider dispatch.\n\nThese controls describe the reviewed connector source. They do not qualify an\narbitrary Chatwoot deployment or make direct provider calls part of AIP.\n\n### Deprecated, removed, or renamed\n\nNo Chatwoot capability is removed or renamed in the reviewed range. The source\ndeclares no connector-specific deprecation or removal date. The catalogue is\nan addition to the three composites, not a replacement announcement.\n\nFuture upstream route removals or aliases must not be inferred from the pinned\noperation names. Record them only when a reviewed source or release policy\ndefines the change and migration.\n\n## Apply the required migration\n\n| Change encountered | Required action | Do not do |\n|---|---|---|\n| Bundled connector to standalone host | Preserve account, tenant, credential, Action, approval, key, webhook, Event, and recovery evidence through the bounded fleet migration | Run both mutation paths without an explicit fence |\n| New snapshot with the same version string | Admit a new immutable connector version with exact source, image, manifest, and release identities | Replace an existing record or identify it only as `1.0.0` |\n| Catalogue expands from 3 to 153 | Refresh discovery, allowlists, generated clients, and expected catalogue digests | Infer dotted catalogue IDs from composite strings |\n| Catalogue mutation is adopted | Add reviewed approval, stable idempotency, provider-state verification, and incident recovery | Treat a transport failure as proof of no effect |\n| Standalone webhook ingress is enabled | Provision shared state and outbox storage, exact secrets, authenticated routing, and duplicate recovery | Use process memory as the production replay boundary |\n| Upstream revision changes | Re-audit all affected methods, paths, schemas, bounds, and exclusions, then requalify them | Keep the old upstream pin while promoting new provider bytes |\n\nStabilize the standalone topology before adopting new catalogue mutations or a\nprovider upgrade. Separate changes make rollback and evidence ownership\nunambiguous.\n\n## Retain the compatibility pins\n\n| Surface | Reviewed pin |\n|---|---|\n| Connector ID | `chatwoot` |\n| Connector profile | `aip.connector.chatwoot.v1` |\n| Manifest format | `aip-manifest/v1` |\n| Workspace and host version | `1.0.0` |\n| Native AIP version | `1.0` |\n| Chatwoot upstream commit | `8818d276b954ac4f84cffd8915c99f40e43804ed` |\n| Published capability count | 153 |\n| Default provider-response limit | 16 MiB |\n| Maximum configurable response limit | 128 MiB |\n| Standalone host | `aip-host-chatwoot` |\n| Standalone version-ID shape | `cver_chatwoot_1_0_0_<release-id>` |\n\nThe upstream commit identifies reviewed source, not a built Chatwoot image or\ndeployment. Changing provider bytes without changing connector source does not\nestablish compatibility with the new artifact.\n\n## Decide when a new connector version is required\n\nCreate and admit a new immutable connector version when a change affects:\n\n- capability IDs, schemas, contracts, risk, approval, retry, or idempotency;\n- provider method, path, query, body, multipart, response, or status mapping;\n- account binding, credential scope, secret handling, redirect policy, or\n  operation allowlisting;\n- webhook HMAC, timestamp, replay scope, loop prevention, Event mapping, or\n  delivery durability;\n- artifact bytes, dependencies, manifest digest, upstream baseline, host\n  lifecycle, or storage behavior.\n\nA documentation clarification alone does not require a connector version. It\nstill needs the source revision that proves the corrected statement.\n\n## Record future entries completely\n\nEach future entry should state:\n\n1. release or explicit unreleased status and UTC review date;\n2. full source commit, tree, and clean or reconstructable dirty state;\n3. connector, image, manifest, catalogue, release, and upstream identities;\n4. added, changed, fixed, security-relevant, deprecated, and removed surfaces;\n5. caller, operator, storage, webhook, and provider migration actions;\n6. rollback and compatibility boundary;\n7. exact connector, image, fleet, and live qualification result, or `not_run`;\n8. deprecation replacement and removal date only when source defines them.\n\nDo not reconstruct release history from filenames, mutable tags, or source\npresence. Mark unknown history as unknown.\n\n## Related documentation\n\n- [AIP release notes](../../reference/release-notes.md)\n- [Migrate bundled connectors to the fleet](../../guides/migrate-bundled-connectors.md)\n- [Chatwoot configuration](reference/configuration.md)\n- [Chatwoot capability index](capabilities/README.md)\n- [Qualify the Chatwoot connector](qualification/README.md)\n",
    "text": "Chatwoot connector changelog\n\nUse this page to decide whether a Chatwoot connector change requires a new\nartifact, admission record, migration, caller update, or qualification result.\nIt records only changes established from the reviewed Git range.\n\nRelease status: the reviewed snapshot is not a tagged release. The\nrepository tags 034a5206 as v1.0.0; the documentation revision is five\ncommits later and still declares workspace version 1.0.0. Use full source\nand artifact identities to distinguish these states.\n\nIdentify the exact version\n\n| Identity | Published v1.0.0 baseline | Reviewed source snapshot |\n\n| Source commit | 034a520608eea44e6b14e61c34734bd402d989c0 | 97be86e9efedf07ecf1783b03800f683f107fb04 |\n| Source position | Tagged | v1.0.0-5-g97be86e |\n| Publication status | Published tag in the reviewed repository | Unreleased source in the reviewed ancestry |\n| Workspace version | 1.0.0 | 1.0.0 |\n| Native AIP version | 1.0 | 1.0 |\n| Chatwoot capabilities | 3 composites | 3 composites plus 150 catalogue operations |\n| Target placement | Bundled connector | Separately built and admitted standalone host |\n\nAn operator record for the reviewed snapshot needs the full source commit,\ntree state, immutable image digest, manifest digest, connector version ID,\nrelease ID, and upstream identity. The string 1.0.0 cannot replace that\ntuple.\n\nReviewed source snapshot\n\nThe entries below describe Chatwoot-relevant differences between tagged\nv1.0.0 and 97be86e9. They are source changes, not evidence that an artifact\nwas built, published, deployed, or qualified.\n\nAdded\n• A frozen catalogue of 150 account-scoped Chatwoot operations, pinned to\n  upstream commit 8818d276b954ac4f84cffd8915c99f40e43804ed.\n• A dedicated aip-host-chatwoot binary and the common standalone-host image\n  path.\n• Registry admission, tenant-scoped routing, replica leases, health, drain,\n  runtime database, and recovery integration.\n• Allowed-operation filtering for provider edition and account policy.\n• Bounded JSON and multipart request handling plus bounded provider responses.\n• A standalone /webhooks/chatwoot route with durable local Event and outbox\n  handling.\n• Product-image and controlled-fleet qualification procedures.\n\nChanged\n\nThe public surface expands from three composite capabilities to 153 total\ncapabilities. The three original IDs remain available:\n\n| Composite | Purpose |\n\n| cap:chatwoot:message:create | Send one conversation message |\n| cap:chatwoot:conversation:status | Read or set the normalized conversation status |\n| cap:chatwoot:conversation:handoff | Assign an agent or team and optionally add a private note |\n\nCatalogue IDs use the dotted cap:chatwoot: suffixes from the\npinned operation table. They do not rename the colon-separated composite IDs.\nCallers should discover the intended contract instead of transforming an ID by\nstring convention.\n\nAll 88 catalogue mutations now require an AIP idempotency key and publish\napproval support. Provider requests receive the Action identity, and catalogue\nrequests receive the stable idempotency marker. The three composites retain\ntheir own orchestration and policy contracts.\n\nProvider transport now rejects credentials, path prefixes, query strings, and\nfragments in the base URL. It requires HTTPS except for explicit loopback,\ndisables redirects, applies connection and request deadlines, and bounds\naccepted response bytes.\n\nWebhook replay and delivery\n\nStandalone webhook replay fencing moves to instance-scoped durable profile\nstate. An ordinary duplicate no longer returns a replay error from the normal\ningress path. It reconstructs the same deterministic Event ID so durable Event\nstorage can repair a crash between replay observation and Event append.\n\nThe host persists mapped Events and queues central publication before returning\nsuccess. A successful webhook response can therefore represent local durable\nacceptance while central delivery remains queued. Recover that outbox instead\nof asking Chatwoot to create a replacement event.\n\nSecurity boundary made explicit\n\nThe reviewed standalone topology fixes the account ID, token file, provider\norigin, allowed-operation set, connector identity, artifact, manifest, and\ncredential revision outside Action input. Catalogue mutations require approval\nand idempotency, and multipart names and byte counts are validated before\nprovider dispatch.\n\nThese controls describe the reviewed connector source. They do not qualify an\narbitrary Chatwoot deployment or make direct provider calls part of AIP.\n\nDeprecated, removed, or renamed\n\nNo Chatwoot capability is removed or renamed in the reviewed range. The source\ndeclares no connector-specific deprecation or removal date. The catalogue is\nan addition to the three composites, not a replacement announcement.\n\nFuture upstream route removals or aliases must not be inferred from the pinned\noperation names. Record them only when a reviewed source or release policy\ndefines the change and migration.\n\nApply the required migration\n\n| Change encountered | Required action | Do not do |\n\n| Bundled connector to standalone host | Preserve account, tenant, credential, Action, approval, key, webhook, Event, and recovery evidence through the bounded fleet migration | Run both mutation paths without an explicit fence |\n| New snapshot with the same version string | Admit a new immutable connector version with exact source, image, manifest, and release identities | Replace an existing record or identify it only as 1.0.0 |\n| Catalogue expands from 3 to 153 | Refresh discovery, allowlists, generated clients, and expected catalogue digests | Infer dotted catalogue IDs from composite strings |\n| Catalogue mutation is adopted | Add reviewed approval, stable idempotency, provider-state verification, and incident recovery | Treat a transport failure as proof of no effect |\n| Standalone webhook ingress is enabled | Provision shared state and outbox storage, exact secrets, authenticated routing, and duplicate recovery | Use process memory as the production replay boundary |\n| Upstream revision changes | Re-audit all affected methods, paths, schemas, bounds, and exclusions, then requalify them | Keep the old upstream pin while promoting new provider bytes |\n\nStabilize the standalone topology before adopting new catalogue mutations or a\nprovider upgrade. Separate changes make rollback and evidence ownership\nunambiguous.\n\nRetain the compatibility pins\n\n| Surface | Reviewed pin |\n\n| Connector ID | chatwoot |\n| Connector profile | aip.connector.chatwoot.v1 |\n| Manifest format | aip-manifest/v1 |\n| Workspace and host version | 1.0.0 |\n| Native AIP version | 1.0 |\n| Chatwoot upstream commit | 8818d276b954ac4f84cffd8915c99f40e43804ed |\n| Published capability count | 153 |\n| Default provider-response limit | 16 MiB |\n| Maximum configurable response limit | 128 MiB |\n| Standalone host | aip-host-chatwoot |\n| Standalone version-ID shape | cverchatwoot100 |\n\nThe upstream commit identifies reviewed source, not a built Chatwoot image or\ndeployment. Changing provider bytes without changing connector source does not\nestablish compatibility with the new artifact.\n\nDecide when a new connector version is required\n\nCreate and admit a new immutable connector version when a change affects:\n• capability IDs, schemas, contracts, risk, approval, retry, or idempotency;\n• provider method, path, query, body, multipart, response, or status mapping;\n• account binding, credential scope, secret handling, redirect policy, or\n  operation allowlisting;\n• webhook HMAC, timestamp, replay scope, loop prevention, Event mapping, or\n  delivery durability;\n• artifact bytes, dependencies, manifest digest, upstream baseline, host\n  lifecycle, or storage behavior.\n\nA documentation clarification alone does not require a connector version. It\nstill needs the source revision that proves the corrected statement.\n\nRecord future entries completely\n\nEach future entry should state:\n1. release or explicit unreleased status and UTC review date;\n2. full source commit, tree, and clean or reconstructable dirty state;\n3. connector, image, manifest, catalogue, release, and upstream identities;\n4. added, changed, fixed, security-relevant, deprecated, and removed surfaces;\n5. caller, operator, storage, webhook, and provider migration actions;\n6. rollback and compatibility boundary;\n7. exact connector, image, fleet, and live qualification result, or notrun;\n8. deprecation replacement and removal date only when source defines them.\n\nDo not reconstruct release history from filenames, mutable tags, or source\npresence. Mark unknown history as unknown.\n\nRelated documentation\n• AIP release notes (../../reference/release-notes.md)\n• Migrate bundled connectors to the fleet (../../guides/migrate-bundled-connectors.md)\n• Chatwoot configuration (reference/configuration.md)\n• Chatwoot capability index (capabilities/README.md)\n• Qualify the Chatwoot connector (qualification/README.md)\n"
  },
  "integrity": {
    "algorithm": "sha256",
    "sourceDigest": "8eb0f215dd7076ea758706583243f12d1f905e7a76ae3ce11061b91fc01a0a2c"
  }
}
