Reference

Project capability surfaces

Reference model for project-authored, project-published, project-installed capability surfaces across UCSA, PCG, SDK, CLI, API, MCP, governance, usage, and explainability.

Project capability surfaces are the reference shape behind project-scope parity. They let a project publish selected capability slices for other projects to install, while preserving the same projection, authorization, billing, observability, and explainability rules that Vadyl uses for first-party platform surfaces.

Core descriptors

DescriptorPurpose
ProjectCapabilitySurfaceManifestProvider-side signed surface contract and typed slice selection.
ExposureBindingDescriptorProtocol-specific binding for REST, SDK, CLI, MCP, dashboard, realtime, webhook, and event projections.
InstallationManifestConsumer-side version pin, grant narrowing, billing scope, environment policy, and lifecycle state.
ProjectCapabilityGrantAuthorizes installed slices and narrows access by actor, project, branch, environment, time, quota, and risk.
ProjectCapabilityConsumptionDescriptorAppend-only invocation evidence for billing, quotas, dependency impact, audit, and explainability.
PlaneCapabilityGraphDescriptorTyped graph projection of provider, consumer, install, exposed operation, command, event, measure, trigger, and effect.

Manifest shape

export default defineProjectCapabilitySurface({
  name: "RevenueOps",
  version: "2.4.0",
  publisherProject: "acme/revenue-ops",
  slices: {
    entities: ["Invoice", "LedgerEntry"],
    operations: ["invoice.issue", "ledger.reconcile"],
    cliCommands: ["revenue.invoice", "revenue.reconcile"],
    workflows: ["closeAccountingPeriod"],
    agentSkills: ["explainRevenueVariance"],
    analyticsMeasures: ["netRevenue", "deferredRevenue"],
    dashboards: ["revenue-overview"],
    events: ["invoice.issued", "ledger.reconciled"],
    webhookTopics: ["invoice.payment_failed"],
    authSchemes: ["revenue-service-account"],
  },
  exposure: {
    protocols: ["Rest", "Sdk", "Cli", "Mcp", "Dashboard", "Webhook", "Realtime"],
    stability: "Stable",
    deprecationPolicy: { minimumWindow: "12mo" },
  },
  governance: {
    requiredGrants: ["surface:RevenueOps.install", "operation:ledger.reconcile"],
    quotaDimensions: ["surface", "operation", "consumerProject"],
    billingAttribution: "consumer-project",
  },
});

Publishable slices

SliceCoverage
entitiesEntity, relation, association-template, field policy, trigger, transition contracts
operationsGlobal or entity-bound actions with input/output/error/idempotency contracts
cliCommandsProject command groups, subcommands, flags, output contracts, exit-code mapping
workflowsDurable workflow starts, signals, queries, compensation, approval tasks
agentSkillsSkill descriptors, prompt contracts, tool grants, memory scope, model requirements
analyticsMeasuresMeasures, metrics, dashboards, reports, materialization policies, lineage
eventsEvent vocabulary, subscription filters, realtime channels, webhook topics
authSchemesOAuth/OIDC/SAML/API-key/service-account/public receiver schemes
runtimeHandlersCore handlers, edge handlers, scheduled handlers, event consumers, management handlers
substratePoliciesStorage namespaces, cache policy, distribution publication, runtime topology intent

Lifecycle states

ObjectStates
PublishedSurfaceDraft - Published - Deprecated - Revoked
SurfaceInstallationRequested - Installed - Suspended - UpgradePending - Uninstalled
SurfaceGrantProposed - Active - Expiring - Expired - Revoked
ConsumptionRecordReserved - Accepted - Reconciled - Corrected

Projection obligations

Every publishable slice produces exposure bindings for the protocols it supports. A CLI command, MCP tool, SDK method, REST operation, webhook topic, realtime channel, dashboard action, or automation action must all point back to the same capability id and PCG node.

{
  "bindingId": "cli:RevenueOps.revenue.reconcile",
  "capabilityId": "surface:RevenueOps:operation:ledger.reconcile",
  "capabilityNodeId": "pcg:surface:RevenueOps:ledger.reconcile",
  "protocolKind": "Cli",
  "exposureShape": "Command",
  "routeOrName": "vadyl revenue reconcile",
  "requiredGrantSet": ["surface:RevenueOps.invoke", "operation:ledger.reconcile"],
  "installationId": "sinst_01J...",
  "descriptorHash": "sha256:..."
}

Consumer invocation evidence

Consumption records are required for every installed call. They make cross-project use observable and explainable without asking each protocol to invent its own metering story.

{
  "installationId": "sinst_01J...",
  "publisherProjectId": "acme/revenue-ops",
  "consumerProjectId": "acme/storefront",
  "capabilityId": "surface:RevenueOps:operation:ledger.reconcile",
  "protocolKind": "Cli",
  "actorId": "user:finops",
  "billingAttributionProjectId": "acme/storefront",
  "quotaDimensions": ["surface", "operation", "consumerProject"],
  "correlationId": "01J...",
  "reasonCodeBlock": "Surface.RevenueOps.Invoke"
}

Related references