Built-in platform entities
The fixed set of cross-industry governance types the platform pre-registers — and what each one represents.
The platform itself is industry-agnostic, but it pre-registers a small set of governance object types and event types that every Fabric application reuses. These are the "what every app needs to be auditable" primitives.
Pre-registered object types
From packages/platform/objects/index.ts:
| Object type | Purpose |
|---|---|
AssetEvent | An immutable historical fact emitted by a handler. |
ActionInvocation | A row created on every invokeAction call. Carries actor, parameters, status, correlation, evidence. |
PolicyEvaluation | The persisted outcome + dispatch evidence for a policy that ran during an invocation. |
ApprovalRequest | A parked invocation waiting for human sign-off (e.g. a waiting_for_approval action). |
ConsentRecord | A captured consent (e.g. credit pull authorization). Often the precondition cited by a policy. |
AgentRun | A persisted record of an agent session — the actions an agent took within a single conversation/session. |
Pre-registered subject types
From packages/platform/events/index.ts:
ActionInvocationPolicyEvaluationAdapterInvocation
These appear as subjectType on platform-emitted events.
Pre-registered event types
The platform emits a small handful of cross-cutting events itself:
| Event type | Emitted by |
|---|---|
ComplianceBlocked | Policy stage when an invocation is blocked. |
StateTransitioned | Successful state-machine transition during action execution. |
AdapterInvocationStarted | Each adapter step before the call. |
AdapterInvocationSucceeded | After a successful adapter call. |
AdapterInvocationFailed | After a failed call (terminal — retry exhaustion or non-retryable error). |
WebhookReceived | When an inbound webhook is captured by the integration adapter. |
Vertical code does not emit these. They are mechanical consequences of pipeline events.
Pre-registered ID prefixes
From packages/platform/ids/index.ts:
export const FABRIC_ID_PREFIXES = {
assetEvent: "evt",
actionInvocation: "act",
policyEvaluation: "pol",
adapterInvocation: "adp",
adapterDeadLetterQueue: "dlq",
accessEvent: "acc",
projectionSnapshot: "psn",
complianceEvidencePacket: "cep",
} as const;Each prefix is a 1–8 lowercase alphanumeric string followed by _ and a Crockford-base32 ULID. The format is monotonically sortable.
What is not built in
This list is intentionally short. The platform pre-registers nothing industry-specific:
- No
Usertype — that lives in@repo/auth/ the host app. - No
Customer,Order,Account, orTenantontology types — host or vertical concerns. - No
Party,Vehicle,Offer,Lead,Document— those are@repo/lendingtypes.
A boundary test (packages/platform/boundary.test.ts) enforces this. Any leak of vertical vocabulary into @fabricorg/platform fails CI.
See also
- Extending with vertical types — registering your own.
- Action triggers — how
ActionInvocationrows get created. - Audit trail — how the governance types feed compliance reporting.