{
  "schemaVersion": "1.0",
  "title": "Twenty connector changelog",
  "description": "Use this page to decide whether a Twenty connector change requires a new artifact, admission record, migration, caller update, or qualification result. It records only changes established from the reviewed Git history.",
  "canonical": "https://getaip.org/docs/connectors/twenty/changelog",
  "route": "/docs/connectors/twenty/changelog",
  "source": "docs/connectors/twenty/changelog.md",
  "protocol": "Agent Interoperability Protocol",
  "protocolVersion": "1.0",
  "section": "Connectors",
  "documentType": "Connector",
  "language": "en",
  "downloads": {
    "md": "/docs/download/connectors/twenty/changelog.md",
    "txt": "/docs/download/connectors/twenty/changelog.txt",
    "json": "/docs/download/connectors/twenty/changelog.json",
    "pdf": "/docs/download/connectors/twenty/changelog.pdf"
  },
  "content": {
    "format": "text/markdown",
    "markdown": "---\ntitle: Twenty connector changelog\ndescription: >-\n  Track the reviewed Twenty source baseline, release boundary, compatibility\n  pins, migration actions, and requalification triggers\nkind: release-reference\naudience: integrator\nappliesTo: \"1.x\"\nwritingStandard: \"aip-docs/1.0\"\nlastReviewedRevision: \"97be86e9efedf07ecf1783b03800f683f107fb04\"\nconnector: twenty\naliases:\n  - Twenty connector versions\n  - Twenty connector release history\n  - aip-host-twenty changelog\n---\n\n# Twenty connector changelog\n\nUse this page to decide whether a Twenty connector change requires a new\nartifact, admission record, migration, caller update, or qualification result.\nIt records only changes established from the reviewed Git history.\n\n> **Release status:** the published `v1.0.0` tag predates the Twenty connector.\n> The reviewed Twenty code is an unreleased source snapshot that still declares\n> workspace version `1.0.0`.\n\n## Identify the exact source state\n\n| Identity | Published AIP `v1.0.0` | First Twenty source | Reviewed Twenty source |\n|---|---|---|---|\n| Source commit | `034a520608eea44e6b14e61c34734bd402d989c0` | `417e17672510f81975c035d437e5a3f58ee53574` | `97be86e9efedf07ecf1783b03800f683f107fb04` |\n| Source time | `2026-07-21T10:49:24Z` | `2026-07-25T19:48:45Z` | `2026-07-26T10:41:19Z` |\n| Git position | Tagged `v1.0.0` | Five-commit review range, before hardening | `v1.0.0-5-g97be86e` |\n| Publication status | Published AIP Core tag | Unreleased source | Unreleased source |\n| Workspace version | `1.0.0` | `1.0.0` | `1.0.0` |\n| Twenty connector crate | Absent | Present | Present |\n| Twenty host crate | Absent | Present | Present |\n| Twenty operation count | None | 22 | 22 |\n\nNo tag in the reviewed repository contains `97be86e9`. The version string\n`1.0.0` therefore cannot identify a Twenty artifact.\n\nA deployable record needs full source, image, manifest, connector-version,\nrelease, provider, configuration, and qualification identities.\n\n## First Twenty source baseline\n\nCommit `417e17672510f81975c035d437e5a3f58ee53574` adds the Twenty connector and\nstandalone host. This commit is a source-history milestone, not a separately\npublished semantic release.\n\n### Added connector contract\n\n- connector ID `twenty` and profile `aip.connector.twenty.v1`;\n- exact provider mapping revision\n  `96a24563674313a3071d359bfccaf33d5e130ab8`;\n- 22 fixed capabilities across records, metadata, and OpenAPI documents;\n- twenty tool capabilities and two resource capabilities;\n- eight low-risk reads and fourteen governed mutations;\n- required approval and idempotency for every mutation;\n- deterministic UUID injection and forced upsert for record creation;\n- non-empty bulk filters and explicit permanent-delete behavior;\n- fixed provider origin, Bearer authentication, redirect rejection, and bounds;\n- structured provider errors, retry metadata, and mutation uncertainty;\n- signed webhook mapping, workspace validation, and nonce replay fencing;\n- eight source tests for catalogue, guards, idempotency, webhook, replay, and errors.\n\n### Added standalone host\n\n- `aip-host-twenty` on the common connector-host lifecycle;\n- immutable type, version, instance, replica, tenant, and artifact identity;\n- owner-controlled API-token, webhook-secret, and operation-allowlist files;\n- durable PostgreSQL runtime, replay, Event, and publication state;\n- optional `POST /webhooks/twenty` ingress;\n- instance-scoped shared replay state;\n- local Event persistence before central publication;\n- product-image build and inspection support for `aip-host-twenty`.\n\nThe first source baseline already contains the final 22-operation connector\nlibrary shape reviewed here.\n\n## Reviewed hardening snapshot\n\nCommit `97be86e9efedf07ecf1783b03800f683f107fb04` is the documentation baseline.\nThe Twenty connector library itself has no diff from `417e1767` in this range.\n\n### Changed webhook publication\n\nThe standalone host changes central Event publication from a direct publish\ncall to durable enqueue:\n\n- an accepted Event enters the connector-host publication outbox;\n- successful HTTP output reports `central_delivery` state;\n- central acknowledgement and durable local queueing remain distinguishable;\n- outbox storage failure returns `webhook.storage_unavailable`;\n- a temporary central delivery failure no longer requires the provider to\n  create a replacement event.\n\nThis change affects recovery semantics even though the Twenty connector library\nis unchanged. Adopt it only as a newly built and admitted host artifact.\n\n### Changed shared host and build surfaces\n\nThe reviewed commit also hardens common connector-host lifecycle behavior used\nby Twenty. It changes shared host, bootstrap, remote, fleet, and failure-matrix\ncode in the same source snapshot.\n\nThe generic host Dockerfile changes its target-cache identity to share one\nlocked release tree across workspace binaries. That build optimization does not\ndefine runtime compatibility, but a rebuilt image still needs an immutable\nartifact identity and supply-chain evidence.\n\n### Unchanged connector pins\n\n| Surface | Reviewed value |\n|---|---|\n| Connector ID | `twenty` |\n| Connector profile | `aip.connector.twenty.v1` |\n| Native AIP version | `1.0` |\n| Workspace version | `1.0.0` |\n| Twenty mapping revision | `96a24563674313a3071d359bfccaf33d5e130ab8` |\n| Capability count | 22 |\n| Reads and mutations | 8 reads, 14 mutations |\n| Provider request maximum | 16 MiB |\n| Default provider response maximum | 64 MiB |\n| Configurable response maximum | 256 MiB |\n| Webhook body maximum | 4 MiB |\n| Webhook clock window | Five minutes |\n| Webhook live-nonce capacity | 100,000 |\n\nChanging a limit in deployment within the allowed range does not change the\nsource pin. It does change configuration identity and qualification scope.\n\n## Apply the first-adoption migration\n\nThe published `v1.0.0` tag offers no Twenty connector to upgrade in place.\nAdopting the reviewed snapshot is a new standalone connector deployment.\n\n| Area | Required action | Unsafe shortcut |\n|---|---|---|\n| Source | Select the exact reviewed commit and reconstruct a clean locked tree | Build from an unnamed working directory |\n| Artifact | Build, sign, scan, and admit an immutable `aip-host-twenty` digest | Identify the image only as `1.0.0` |\n| Manifest | Verify the 22-operation catalogue and admit an intentional subset | Enable all mutations by default |\n| Workspace | Bind tenant, external account, provider workspace UUID, and token revision | Accept workspace identity from Action input |\n| State | Provision durable shared PostgreSQL before registration | Use process memory for production replay state |\n| Network | Fix provider origin, AIP ingress, control plane, and optional Event route | Expose provider credentials or arbitrary proxy routes |\n| Governance | Add approval, stable keys, verification reads, and incident policy for mutations | Replay an ambiguous mutation with a new key |\n| Webhooks | Provision HMAC secret, shared replay scope, local Event log, and outbox | Treat central timeout as proof of rejection |\n| Operations | Add readiness, lease, storage, provider, Action, and outbox monitoring | Route traffic from static liveness alone |\n| Qualification | Run exact source, image, workspace, operation, webhook, and recovery gates | Promote source presence to a qualified result |\n\nPreserve one rollback record containing the previous routing state, provider\nconfiguration, credentials, workspace fixtures, and cleanup procedure. There is\nno tagged Twenty artifact in `v1.0.0` to use as an implicit rollback target.\n\n## Preserve capability compatibility\n\nCallers should discover capability contracts from the admitted manifest. Do not\nderive provider routes or convert arbitrary provider operations into capability\nIDs.\n\nThe following changes require a new immutable connector version:\n\n- capability ID, kind, schema, risk, approval, idempotency, side effect, or\n  retry contract;\n- provider method, route, query, body, response, status, or redaction mapping;\n- deterministic ID, bulk-filter, delete-mode, merge, or restore behavior;\n- metadata-resource set, layout guard, webhook-secret injection, or OpenAPI path;\n- provider origin, workspace binding, credential, redirect, or operation policy;\n- webhook HMAC, clock, nonce, replay, Event, outbox, or response behavior;\n- host lifecycle, storage schema, lease, readiness, signing, or routing behavior;\n- artifact bytes, dependencies, base image, manifest digest, or upstream revision.\n\nA documentation clarification can retain artifact identity only when it changes\nno executable contract, generated asset, example that defines behavior, or\nqualification claim.\n\n## Requalify provider changes\n\nThe upstream commit identifies the source used to derive REST and metadata\nmappings. It does not identify a running provider artifact by itself.\n\nRe-audit and requalify when the provider image, hosted release, workspace\nschema, enabled feature set, API token scope, or endpoint behavior changes.\nRetain exact provider evidence with the connector result.\n\nDo not keep the old upstream pin while promoting unreviewed provider bytes as\ncompatible. Record compatibility as unknown until the affected operation and\nfailure matrices pass.\n\n## Record the adoption decision\n\nFor each adopted source snapshot, retain:\n\n```text\nRelease status:\nAIP source revision:\nSource-tree digest:\nCargo lock digest:\nHost image digest:\nManifest digest:\nConnector version ID:\nTwenty mapping revision:\nProvider artifact or release identity:\nWorkspace binding:\nCredential revision:\nConfiguration revision:\nQualification run and evidence digest:\nMigration reviewer:\nAccepted at:\nRollback record:\n```\n\nNever record only `1.0.0`. That value describes the tagged AIP baseline, the\nfirst Twenty source commit, and the reviewed hardening snapshot.\n\n## Keep limitations explicit\n\nAt the reviewed source snapshot:\n\n- no published tag contains the Twenty connector;\n- source-owned product image checks do not prove provider behavior;\n- the source-owned five-product fleet topology has no Twenty runtime service;\n- provider exactly-once effects and mutation rollback are not guaranteed;\n- the connector has no cancellation or streaming operation;\n- direct GraphQL and arbitrary provider proxying are excluded;\n- retained local evidence does not map its workspace digest to the reviewed\n  commit;\n- current exact-artifact qualification is not established by this changelog.\n\nThese limits define release and evidence boundaries. They are not deferred\nfeatures or passing qualification cases.\n\n## Maintain future entries\n\nAdd a new changelog entry only after source and artifact identities are fixed.\nEach entry should include:\n\n1. release or explicit unreleased status and UTC review time;\n2. full source commit and reconstructable tree identity;\n3. artifact, manifest, provider, workspace, and configuration identities;\n4. added, changed, fixed, security-relevant, deprecated, and removed surfaces;\n5. caller, operator, storage, webhook, and provider migration actions;\n6. compatibility and rollback boundaries;\n7. exact qualification result or `NOT RUN`;\n8. deprecation replacement and removal date only when committed policy defines them.\n\nDo not reconstruct release history from filenames, mutable tags, or source\npresence. Mark unknown publication or qualification state as unknown.\n\n## Related documentation\n\n- [Twenty connector overview](README.md)\n- [Twenty connector configuration](reference/configuration.md)\n- [Twenty capability index](capabilities/README.md)\n- [Deploy the Twenty connector](operations/deployment.md)\n- [Qualify the Twenty connector](qualification/README.md)\n",
    "text": "Twenty connector changelog\n\nUse this page to decide whether a Twenty connector change requires a new\nartifact, admission record, migration, caller update, or qualification result.\nIt records only changes established from the reviewed Git history.\n\nRelease status: the published v1.0.0 tag predates the Twenty connector.\nThe reviewed Twenty code is an unreleased source snapshot that still declares\nworkspace version 1.0.0.\n\nIdentify the exact source state\n\n| Identity | Published AIP v1.0.0 | First Twenty source | Reviewed Twenty source |\n\n| Source commit | 034a520608eea44e6b14e61c34734bd402d989c0 | 417e17672510f81975c035d437e5a3f58ee53574 | 97be86e9efedf07ecf1783b03800f683f107fb04 |\n| Source time | 2026-07-21T10:49:24Z | 2026-07-25T19:48:45Z | 2026-07-26T10:41:19Z |\n| Git position | Tagged v1.0.0 | Five-commit review range, before hardening | v1.0.0-5-g97be86e |\n| Publication status | Published AIP Core tag | Unreleased source | Unreleased source |\n| Workspace version | 1.0.0 | 1.0.0 | 1.0.0 |\n| Twenty connector crate | Absent | Present | Present |\n| Twenty host crate | Absent | Present | Present |\n| Twenty operation count | None | 22 | 22 |\n\nNo tag in the reviewed repository contains 97be86e9. The version string\n1.0.0 therefore cannot identify a Twenty artifact.\n\nA deployable record needs full source, image, manifest, connector-version,\nrelease, provider, configuration, and qualification identities.\n\nFirst Twenty source baseline\n\nCommit 417e17672510f81975c035d437e5a3f58ee53574 adds the Twenty connector and\nstandalone host. This commit is a source-history milestone, not a separately\npublished semantic release.\n\nAdded connector contract\n• connector ID twenty and profile aip.connector.twenty.v1;\n• exact provider mapping revision\n  96a24563674313a3071d359bfccaf33d5e130ab8;\n• 22 fixed capabilities across records, metadata, and OpenAPI documents;\n• twenty tool capabilities and two resource capabilities;\n• eight low-risk reads and fourteen governed mutations;\n• required approval and idempotency for every mutation;\n• deterministic UUID injection and forced upsert for record creation;\n• non-empty bulk filters and explicit permanent-delete behavior;\n• fixed provider origin, Bearer authentication, redirect rejection, and bounds;\n• structured provider errors, retry metadata, and mutation uncertainty;\n• signed webhook mapping, workspace validation, and nonce replay fencing;\n• eight source tests for catalogue, guards, idempotency, webhook, replay, and errors.\n\nAdded standalone host\n• aip-host-twenty on the common connector-host lifecycle;\n• immutable type, version, instance, replica, tenant, and artifact identity;\n• owner-controlled API-token, webhook-secret, and operation-allowlist files;\n• durable PostgreSQL runtime, replay, Event, and publication state;\n• optional POST /webhooks/twenty ingress;\n• instance-scoped shared replay state;\n• local Event persistence before central publication;\n• product-image build and inspection support for aip-host-twenty.\n\nThe first source baseline already contains the final 22-operation connector\nlibrary shape reviewed here.\n\nReviewed hardening snapshot\n\nCommit 97be86e9efedf07ecf1783b03800f683f107fb04 is the documentation baseline.\nThe Twenty connector library itself has no diff from 417e1767 in this range.\n\nChanged webhook publication\n\nThe standalone host changes central Event publication from a direct publish\ncall to durable enqueue:\n• an accepted Event enters the connector-host publication outbox;\n• successful HTTP output reports centraldelivery state;\n• central acknowledgement and durable local queueing remain distinguishable;\n• outbox storage failure returns webhook.storageunavailable;\n• a temporary central delivery failure no longer requires the provider to\n  create a replacement event.\n\nThis change affects recovery semantics even though the Twenty connector library\nis unchanged. Adopt it only as a newly built and admitted host artifact.\n\nChanged shared host and build surfaces\n\nThe reviewed commit also hardens common connector-host lifecycle behavior used\nby Twenty. It changes shared host, bootstrap, remote, fleet, and failure-matrix\ncode in the same source snapshot.\n\nThe generic host Dockerfile changes its target-cache identity to share one\nlocked release tree across workspace binaries. That build optimization does not\ndefine runtime compatibility, but a rebuilt image still needs an immutable\nartifact identity and supply-chain evidence.\n\nUnchanged connector pins\n\n| Surface | Reviewed value |\n\n| Connector ID | twenty |\n| Connector profile | aip.connector.twenty.v1 |\n| Native AIP version | 1.0 |\n| Workspace version | 1.0.0 |\n| Twenty mapping revision | 96a24563674313a3071d359bfccaf33d5e130ab8 |\n| Capability count | 22 |\n| Reads and mutations | 8 reads, 14 mutations |\n| Provider request maximum | 16 MiB |\n| Default provider response maximum | 64 MiB |\n| Configurable response maximum | 256 MiB |\n| Webhook body maximum | 4 MiB |\n| Webhook clock window | Five minutes |\n| Webhook live-nonce capacity | 100,000 |\n\nChanging a limit in deployment within the allowed range does not change the\nsource pin. It does change configuration identity and qualification scope.\n\nApply the first-adoption migration\n\nThe published v1.0.0 tag offers no Twenty connector to upgrade in place.\nAdopting the reviewed snapshot is a new standalone connector deployment.\n\n| Area | Required action | Unsafe shortcut |\n\n| Source | Select the exact reviewed commit and reconstruct a clean locked tree | Build from an unnamed working directory |\n| Artifact | Build, sign, scan, and admit an immutable aip-host-twenty digest | Identify the image only as 1.0.0 |\n| Manifest | Verify the 22-operation catalogue and admit an intentional subset | Enable all mutations by default |\n| Workspace | Bind tenant, external account, provider workspace UUID, and token revision | Accept workspace identity from Action input |\n| State | Provision durable shared PostgreSQL before registration | Use process memory for production replay state |\n| Network | Fix provider origin, AIP ingress, control plane, and optional Event route | Expose provider credentials or arbitrary proxy routes |\n| Governance | Add approval, stable keys, verification reads, and incident policy for mutations | Replay an ambiguous mutation with a new key |\n| Webhooks | Provision HMAC secret, shared replay scope, local Event log, and outbox | Treat central timeout as proof of rejection |\n| Operations | Add readiness, lease, storage, provider, Action, and outbox monitoring | Route traffic from static liveness alone |\n| Qualification | Run exact source, image, workspace, operation, webhook, and recovery gates | Promote source presence to a qualified result |\n\nPreserve one rollback record containing the previous routing state, provider\nconfiguration, credentials, workspace fixtures, and cleanup procedure. There is\nno tagged Twenty artifact in v1.0.0 to use as an implicit rollback target.\n\nPreserve capability compatibility\n\nCallers should discover capability contracts from the admitted manifest. Do not\nderive provider routes or convert arbitrary provider operations into capability\nIDs.\n\nThe following changes require a new immutable connector version:\n• capability ID, kind, schema, risk, approval, idempotency, side effect, or\n  retry contract;\n• provider method, route, query, body, response, status, or redaction mapping;\n• deterministic ID, bulk-filter, delete-mode, merge, or restore behavior;\n• metadata-resource set, layout guard, webhook-secret injection, or OpenAPI path;\n• provider origin, workspace binding, credential, redirect, or operation policy;\n• webhook HMAC, clock, nonce, replay, Event, outbox, or response behavior;\n• host lifecycle, storage schema, lease, readiness, signing, or routing behavior;\n• artifact bytes, dependencies, base image, manifest digest, or upstream revision.\n\nA documentation clarification can retain artifact identity only when it changes\nno executable contract, generated asset, example that defines behavior, or\nqualification claim.\n\nRequalify provider changes\n\nThe upstream commit identifies the source used to derive REST and metadata\nmappings. It does not identify a running provider artifact by itself.\n\nRe-audit and requalify when the provider image, hosted release, workspace\nschema, enabled feature set, API token scope, or endpoint behavior changes.\nRetain exact provider evidence with the connector result.\n\nDo not keep the old upstream pin while promoting unreviewed provider bytes as\ncompatible. Record compatibility as unknown until the affected operation and\nfailure matrices pass.\n\nRecord the adoption decision\n\nFor each adopted source snapshot, retain:\n\nRelease status:\nAIP source revision:\nSource-tree digest:\nCargo lock digest:\nHost image digest:\nManifest digest:\nConnector version ID:\nTwenty mapping revision:\nProvider artifact or release identity:\nWorkspace binding:\nCredential revision:\nConfiguration revision:\nQualification run and evidence digest:\nMigration reviewer:\nAccepted at:\nRollback record:\n\nNever record only 1.0.0. That value describes the tagged AIP baseline, the\nfirst Twenty source commit, and the reviewed hardening snapshot.\n\nKeep limitations explicit\n\nAt the reviewed source snapshot:\n• no published tag contains the Twenty connector;\n• source-owned product image checks do not prove provider behavior;\n• the source-owned five-product fleet topology has no Twenty runtime service;\n• provider exactly-once effects and mutation rollback are not guaranteed;\n• the connector has no cancellation or streaming operation;\n• direct GraphQL and arbitrary provider proxying are excluded;\n• retained local evidence does not map its workspace digest to the reviewed\n  commit;\n• current exact-artifact qualification is not established by this changelog.\n\nThese limits define release and evidence boundaries. They are not deferred\nfeatures or passing qualification cases.\n\nMaintain future entries\n\nAdd a new changelog entry only after source and artifact identities are fixed.\nEach entry should include:\n1. release or explicit unreleased status and UTC review time;\n2. full source commit and reconstructable tree identity;\n3. artifact, manifest, provider, workspace, and configuration identities;\n4. added, changed, fixed, security-relevant, deprecated, and removed surfaces;\n5. caller, operator, storage, webhook, and provider migration actions;\n6. compatibility and rollback boundaries;\n7. exact qualification result or NOT RUN;\n8. deprecation replacement and removal date only when committed policy defines them.\n\nDo not reconstruct release history from filenames, mutable tags, or source\npresence. Mark unknown publication or qualification state as unknown.\n\nRelated documentation\n• Twenty connector overview (README.md)\n• Twenty connector configuration (reference/configuration.md)\n• Twenty capability index (capabilities/README.md)\n• Deploy the Twenty connector (operations/deployment.md)\n• Qualify the Twenty connector (qualification/README.md)\n"
  },
  "integrity": {
    "algorithm": "sha256",
    "sourceDigest": "fcbca83baf88cb6f2e07a890016ec6ef13653f26690ede05c22580bff6eecbce"
  }
}
