Keep CIP and Runtime write arguments manifest-driven. Declare association and write field names on the Business Entity; do not hardcode provider foreign-key vocabulary in platform configuration or prompts.
Runtime classifies capability-execute arguments into platform meta, caller identity, association seeds, and
write body before CIP runs. Integrators bind caller identity explicitly and own the seed and body names through
published datasource fields.
Prerequisites
- Configure business policies —
foreignKeys[]planned - Configure AI contract — writable
exposedattributes agreed - Configure data flow — CIP
bodyTemplate/ parameters use the same field names - Understanding that CIP execution is not Process Execution continuation
Where it lives
| Concern | Manifest location |
|---|---|
| Caller identity values | CIP template expression {{actor.identityAttributes.<key>}} |
| Association / FK seed names | foreignKeys[].fields (+ targetDatasource) |
| Writable body attributes | exposed + fieldMappings.attributes |
| Dimension source fields | dimensions.*.field |
| CIP parameter placeholders | execution.cip bodyTemplate / step parameters |
Platform meta keys (orchestration only — never CRM body fields) include examples such as objective, scope, datasource, idempotencyKey, prior mutation refs, fkSeedFields, and association anchor identifiers. Those travel for Runtime planning; they must not be forwarded as vendor field values.
Caller identity is a separate governed input. Bind an administrator-configured identity key from the verified bearer
token with {{actor.identityAttributes.<key>}}. Request JSON, chat context, and user_attributes cannot supply this
root. If the verified token lacks the referenced key, Runtime stops before sending the provider request.
Builder MCP
| Manifest keys | foreignKeys, exposed, execution |
| Help topics | section, dependencyGraph, goldenExample |
| Repair hooks | fieldMappings, exposure |
Changing foreign keys or exposed write surfaces affects ABAC, protection, and capability certification — read dependencyGraph before patch.
How to set
- List every association parameter the capability needs on
foreignKeys[].fieldswith a cleartargetDatasource.
{
"foreignKeys": [
{
"name": "primaryCompany",
"fields": ["companyExternalId"],
"targetDatasource": "example-companies"
}
]
}
-
Bind caller identity when the operation acts on the signed-in person's own record. Put the configured identity
key in the CIP path, query, or body template, for example{{actor.identityAttributes.hr.employeeId}}. Keep
provider field names in the manifest; do not ask the model to infer identity from a display name or email search. -
Align CIP templates so bodyTemplate parameter names match declared fields — not invented vendor aliases in
Python or env maps. -
Advertise writable attributes from
exposed+ mappings. Exclude platform identity keys, platform meta keys, association seeds, dimension source fields, andomit/readonlysurfaces from invent-your-own write proposals. -
Prefer stamped
fkSeedFieldson continuation after a prior create so the next planned capability seeds only declared association fields. -
Validate:
aifabrix datasource validate <datasourceKey>
aifabrix validate <systemKey>
aifabrix verify-trust <systemKey>
Defaults and examples
| Argument class | Source of names | Forwarded to CIP write body? |
|---|---|---|
| Platform meta | Product Runtime contract | No |
| Caller identity | Verified token via actor.identityAttributes binding |
Only where the CIP template binds it |
| Association seeds | foreignKeys[].fields / stamped fkSeedFields |
Only as declared association fields |
| Write body | exposed + mappings |
Yes (writable attributes only) |
Illustrative checklist for a create-then-associate plan:
- Create returns a record identity the Runtime can anchor.
- Stamped seeds carry only manifest FK field names.
- Update/associate CIP parameters reuse those names.
- No provider-specific association field is hardwired in product code or shared configs.
Validate
aifabrix datasource validate <datasourceKey>
aifabrix validate <systemKey>
Integration and E2E tests should prove association writes using the published field names. Failures that mention missing association seeds usually mean the manifest omitted foreignKeys[].fields or CIP parameters drifted from those names.
Common mistakes
| Mistake | Fix |
|---|---|
| Hardcoding a CRM association field name in product config | Declare it on foreignKeys[].fields |
Sending idempotencyKey into the vendor body |
Keep platform meta off the write body |
| Taking caller identity from request or chat data | Bind a verified token key with actor.identityAttributes |
| Falling back when an identity key is absent | Stop before the provider request; fix identity configuration or claims |
| Letting the model invent FK fields | Exclude seeds and identity keys from write proposals |
| Different names in CIP template vs foreignKeys | Align parameter names to the manifest |
| Confusing observer flags with argument keys | Observers watch metadata changes; they do not name CIP args |
Related
- Configure business policies
- Configure data flow
- Configure AI contract
- Configure field observers
- CIP execution
Limits
Exact platform meta key sets and planner stamps vary by Runtime release. This page teaches the neutrality law: manifest owns provider field names. Do not paste lab vendor association keys into public examples — use neutral names that match your published datasource.