CIP (Composable Integration Pipeline) runs governed Business Entity operations at runtime — list, get, create, update, delete, and custom capability keys — with the caller's identity, RBAC/ABAC, and audit context applied before any vendor API call.
Author pipelines on Configure data flow. This page is the runtime + certification companion: mental model, generated vs extended CIP, testPayload, and the CLI proof ladder.
Why it matters
Role Assistants do not call vendor APIs directly. They request compiled capability keys. CIP is the execution layer that honors those keys: Operational Trust checks first, then ordered steps, then normalized records for sync, evidence hooks, and agent metadata.
Without a valid execution block on each exposed Business Entity, certification and live capability requests fail even when OpenAPI import succeeded.
CIP is not Runtime continuation (Decision Engine, Ask/Approval, Review Workspace). Those consume CIP results; they do not replace execution.cip.
Prerequisites
- Business Entity JSON with root
capabilities[]andexposedaligned toresourceType - Schema-valid
executionper Configure data flow - Governed capabilities understood
- Green
aifabrix validate <systemKey>before integration or E2E tests
Where it lives
| Layer | Location |
|---|---|
| CIP operations and steps | <datasourceKey>.json → execution.cip.operations |
| OpenAPI step bindings | Same file → openapi.operations |
| Test fixtures for E2E | Same file → testPayload |
| UI editing | Business Entity Data Flow tab (?tab=cip) |
CIP is per Business Entity, not on the Connected System manifest.
How to set
-
Start from generated execution — OpenAPI import usually produces default CIP for standard operations. Extend only for pagination,
map/filter,httpfetches, or multi-datasource orchestration. Step reference: CIP step catalog. -
Keep binding law intact after edits — capability key = CIP operation key;
fetch.openapiRef=openapi.operationskey whensource: openapi. -
Add production-grade
testPayload— E2E and integration tests merge CLI flags with manifest fixtures. WithouttestPayload, capacity/CRUD paths may fail at the config step:
{
"testPayload": {
"mode": "live",
"primaryKey": { "externalId": "e2e-fixture-001" },
"useCopyForMutations": true,
"payloadTemplate": {
"externalId": "e2e-fixture-001",
"name": "E2E Customer",
"country": "Finland"
},
"expectedResult": {
"externalId": "e2e-fixture-001",
"name": "E2E Customer",
"country": "Finland"
},
"scenarios": [
{ "operation": "list", "enabled": true },
{ "operation": "get", "enabled": true },
{ "operation": "create", "enabled": true, "input": { "name": "E2E Customer" } },
{ "operation": "update", "enabled": true, "input": { "country": "Sweden" } },
{ "operation": "delete", "enabled": true }
]
}
}
testPayload field |
Production practice |
|---|---|
primaryKey |
Concrete values for list/get/mutations; use primaryKey.search when resolving a row via list |
payloadTemplate / expectedResult |
Shape field mappings and metadata before live vendor calls |
scenarios |
Ordered operation evidence; disable destructive steps in shared tenants with enabled: false |
useCopyForMutations |
Default true when create runs — merges returned ids into later get/update/delete |
mode |
live for certification; mock for offline unit tests only |
- Re-validate after execution edits:
aifabrix validate <systemKey>
aifabrix test <systemKey>
- Run integration then E2E (test credentials and isolated tenants):
aifabrix test-integration <systemKey>
aifabrix datasource test-e2e <datasourceKey> --app <systemKey> --test-crud
Use --primary-key-value @pk.json when reusing an existing vendor record. Prefer --verify-audit when governance audit proof is required.
- Certify operations — green E2E with
--test-crudwhen capabilities mutate external data, thenverify-operations.
Defaults and examples
| Guideline | Reason |
|---|---|
| Prefer generated CIP first | Matches OpenAPI; easier to validate |
| Keep pipelines entity-scoped | Clear ownership and certification boundaries |
| Operation keys match capability keys | Including custom keys with the same naming pattern |
Author testPayload before first E2E |
Avoids config-step failures |
| Re-upload after execution changes | Online drift breaks verify-operations |
Root identity required before execution compiles:
| Field | CIP impact |
|---|---|
key |
Pipeline ownership |
systemKey |
Auth and connection context |
entityType |
Sync/normalization path |
resourceType |
Capability and RBAC prefix |
primaryKey |
CRUD identity and testPayload.primaryKey |
Validate
aifabrix validate <systemKey>
aifabrix test-integration <systemKey>
aifabrix verify-operations <systemKey>
aifabrix datasource test-e2e <datasourceKey> --app <systemKey>
Bypassing capabilities to call vendor APIs directly from agents breaks Operational Trust — route through compiled capability keys and CIP.
Failure diagnosis
| Symptom | Likely cause | Fix |
|---|---|---|
| Validate fails on steps | Invented step key or missing required property | Step catalog + schema |
| Runtime fetch errors | openapiRef mismatch |
Align with openapi.operations |
| Capability not executable | CIP enabled: false or missing operation |
Enable matching operation + capability |
| Wrong engine | python/datasource without entrypoint or chain |
Prefer engine: cip unless intentional |
| Legacy shape | pipeline instead of cip.operations |
Migrate to execution.cip |
Common mistakes
| Mistake | Impact | Fix |
|---|---|---|
Missing testPayload |
E2E config step fails | Add primaryKey, template, and scenarios |
| Custom CIP without E2E | Operations cert fails on live API | datasource test-e2e --test-crud |
| Wrong execution shape | Validate errors | execution.engine: cip + execution.cip.operations |
| OpenAPI ref mismatch | Runtime fetch errors | Align openapiRef |
| Bypassing capabilities | Ungoverned AI access | Route through compiled capabilities |
| Editing CIP without re-upload | Online drift | upload + show --online |
Limits
Authoring depth lives on Configure data flow and the CIP step catalog. This page does not list every step property. Complex multi-entity orchestration belongs in separate Business Entities linked by foreignKeys[]. Keep custom steps idempotent when --test-crud runs.