ข้ามไปยังเนื้อหา

Runtime contract index

เนื้อหานี้ยังไม่ได้แปลเป็นภาษาไทย แสดงเป็นภาษาอังกฤษแทน

This document is the consolidated map of Cephalon’s runtime contract surface: every /engine/* HTTP route, every snapshot.* data key, and every runtime catalog interface that an operator, an AI agent, or external tooling can read to know what the engine is actually doing.

It exists because the engine’s runtime truth is already machine-readable through /engine/* and snapshot.*, but a human or an autonomous agent should be able to discover the full surface from one page rather than scraping each route or grep-ing the source tree.

Cross-references: project-memory.md, architecture.md, architecture-review-2026-05.md, engineering-standards.md, long-range-direction.md, engine-surface-maturity-audit.md, conformance-matrix.md, compatibility.md, docs/components/README.md.

Two specific concerns drive this index:

  1. Operator-facing discoverability. A platform team standing up a Cephalon-based service should be able to ask one question — “what runtime answers does this engine expose?” — without reading source code. Today the answers live across Cephalon.AspNetCore, Cephalon.Engine, and many companion packs. This index puts them on one page.
  2. AI-agent-facing readability. long-range-direction.md Horizon 3 anticipates AI agents becoming primary consumers of frameworks. Agents reason better about a surface they can index than one they have to crawl. This page is intentionally written so an agent can map intent → route or intent → snapshot key without crawling.

This doc is part of the durable hand-authored docs graph and is updated together with the source whenever a new runtime surface ships.

The runtime contract has three layered surfaces. Each layer has its own table below:

  • /engine/* routes — HTTP-level introspection endpoints exposed by Cephalon.AspNetCore. They project the underlying catalogs as JSON.
  • snapshot.* data keys — top-level properties on the canonical RuntimeIntrospectionSnapshot shape composed by Cephalon.Engine, returned by /snapshot and consumed by every runtime-story view.
  • Runtime catalog interfacesCephalon.Abstractions interfaces that own the in-process truth which both routes and snapshots project from.

The same fact usually appears at all three layers. For example: /engine/cellssnapshot.CellBoundariesICellBoundaryCatalog. Operators consume the route, snapshot composers consume the key, internal services consume the catalog interface.

A surface is base if it ships unconditionally with the relevant adapter, and optional/conditional if it is registered only when the matching companion pack, configuration, or app-profile setting is present.

The route prefix /engine is reserved for Cephalon engine introspection. App-owned REST endpoints publish under /api/v{major} and never collide with this prefix.

RouteOwner packageAnswersOptional/conditional
GET /Cephalon.AspNetCoreengine manifest landingbase
GET /manifestCephalon.AspNetCorecanonical manifest of runtime shapebase
GET /snapshotCephalon.Enginecomposed introspection snapshot across every active surfacebase
GET /app-modelCephalon.AspNetCoreapplication model and profile configurationbase
GET /resilienceCephalon.AspNetCorerequested resilience patterns and settingsbase
GET /behavior-resilienceCephalon.AspNetCoreeffective behavior-execution resilience policiesoptional
GET /behavior-resilience/{policyId}Cephalon.AspNetCoresingle resilience policyoptional
GET /rate-limitingCephalon.AspNetCorerate-limiting policiesoptional
GET /capabilitiesCephalon.AspNetCoremodule capability manifestsbase
GET /modulesCephalon.AspNetCoremodule descriptors from manifestbase
GET /packagesCephalon.AspNetCoreloaded package manifestsbase
GET /technologiesCephalon.AspNetCoretechnology selections from manifestbase
GET /technology-catalogCephalon.AspNetCoreregistered technology catalogoptional
GET /technology-surfacesCephalon.AspNetCoreruntime technology capability surfacesoptional
GET /patternsCephalon.AspNetCorepattern definitions (cell-based, strangler-fig, BFF, …)base
GET /databasesCephalon.AspNetCoreconfigured databasesbase
GET /database-topologyCephalon.AspNetCoreoperational database topologybase
GET /database-rolesCephalon.AspNetCoredatabase role descriptorsbase
GET /database-migrationsCephalon.AspNetCoredatabase migration descriptorsbase
GET /database-migration-playbookCephalon.AspNetCoreoperational migration playbookbase
GET /hosted-executionsCephalon.AspNetCorehosted execution descriptorsoptional
GET /execution-graphsCephalon.AspNetCoreexecution graph definitionsoptional
GET /data-productsCephalon.AspNetCoredata product descriptorsoptional
GET /cdc-capturesCephalon.AspNetCoreCDC capture definitionsoptional
GET /cdc-captures/runtime*Cephalon.AspNetCorelive CDC runtime state and per-runtime drilldownsoptional
GET /cdc-capture-runtimesCephalon.AspNetCoreCDC execution-runtime catalog plus filter drilldowns by reporter, edge node, coordination, freshness, and governanceoptional
POST /cdc-capture-runtimes/{executionRuntimeId}/reportsCephalon.AspNetCoreexternal CDC runtime live reportsconditional (DataRuntimeOptions.EnableExternalCdcRuntimeReporting)
GET /audit-storesCephalon.AspNetCoreaudit store descriptorsoptional
GET /audit-historyCephalon.AspNetCorequeryable audit historyoptional
GET /audit-history/exportCephalon.AspNetCoreNDJSON export of audit historyconditional (AppProfile.Audit.History.Export)
GET /authorization-policiesCephalon.AspNetCoreauthorization policy descriptorsoptional
GET /featuresCephalon.AspNetCorefeature flag definitionsoptional
GET /features/{featureFlagId}/evaluateCephalon.AspNetCoreper-flag evaluation including provider-bridge resultsoptional
GET /strangler-figCephalon.AspNetCorestrangler-fig migration routesoptional
GET /strangler-fig/runtimeCephalon.AspNetCorestrangler-fig runtime policiesoptional
GET /strangler-fig/ingressCephalon.AspNetCorestrangler-fig ingress routesoptional
GET /strangler-fig/resolveCephalon.AspNetCoreresolve a path to a strangler-fig routing decisionoptional
GET /strangler-fig/cutoverCephalon.AspNetCorestrangler-fig cutover stateconditional (Engine:Migration:StranglerFig:AspNetCore)
GET /strangler-fig/cutover/resolveCephalon.AspNetCoreresolve a path to its cutover decisionconditional
GET /backend-for-frontendCephalon.AspNetCoreBFF client bindingsoptional
GET /backend-for-frontend/rest-endpointsCephalon.AspNetCoreBFF REST endpoint projectionsoptional
GET /backend-for-frontend/rest-documentsCephalon.AspNetCoreBFF REST document artifactsoptional
GET /cellsCephalon.AspNetCorecell boundary descriptorsoptional
GET /cell-routesCephalon.AspNetCorecell routing governanceoptional
GET /cell-health-isolationsCephalon.AspNetCorecell health isolation rulesoptional
GET /cell-traffic-automationsCephalon.AspNetCorecell traffic automation policies plus provider/edge drilldownsoptional
GET /knowledge-indexesCephalon.AspNetCoreknowledge retrieval index statesoptional
POST /knowledge-indexes/{collectionId}/queriesCephalon.AspNetCoreexecute a knowledge queryoptional
GET /agent-toolsCephalon.AspNetCoreregistered agent tool definitionsoptional
POST /agent-tools/{toolId}/runCephalon.AspNetCoreexecute an agent tooloptional
GET /event-subscription-readinessCephalon.AspNetCoreevent subscription execution readinessoptional
GET /inboxesCephalon.AspNetCoreinbox descriptorsoptional
GET /outboxesCephalon.AspNetCoreoutbox descriptorsoptional
GET /projectionsCephalon.AspNetCoredata projection descriptorsoptional
GET /durable-executionsCephalon.AspNetCoredurable execution descriptorsoptional
GET /durable-executions/runtimeCephalon.AspNetCoredurable execution runtime stateoptional
GET /durable-executions/runtime/timers*Cephalon.AspNetCorepending durable timersoptional
GET /durable-executions/runtime/signals*Cephalon.AspNetCorepending durable signalsoptional
GET /durable-executions/runtime/compensations*Cephalon.AspNetCoredurable compensation actionsoptional
GET /saga-choreographiesCephalon.AspNetCoresaga choreography definitionsoptional
GET /saga-choreographies/runtime*Cephalon.AspNetCoresaga publication runtime stateoptional
GET /rest-endpointsCephalon.AspNetCorepublished REST endpoint descriptorsoptional
GET /rest-endpoint-candidatesCephalon.AspNetCoreREST endpoint candidates pre-publicationoptional
GET /rest-endpoint-publication-groupsCephalon.AspNetCoreREST endpoint publication groupingsoptional
GET /rest-endpoint-authoring-policiesCephalon.AspNetCoreREST endpoint authoring governanceoptional
GET /rest-endpoint-overridesCephalon.AspNetCoreREST endpoint runtime overridesoptional
GET /rest-endpoint-suppressionsCephalon.AspNetCoresuppressed REST endpoint candidatesoptional
GET /tenant-membershipsCephalon.MultiTenancy.Governancetenant membership descriptorsoptional
GET /tenant-invitationsCephalon.MultiTenancy.Governancetenant invitation descriptorsoptional
GET /tenant-domain-ownershipCephalon.MultiTenancy.Governancetenant domain ownership descriptors and proof stateoptional
GET /tenant-governance-actionsCephalon.MultiTenancy.Governancetenant governance action descriptors and decisionsoptional
GET /tenant-administrationCephalon.MultiTenancy.Governancetenant administration runtime metadataoptional
POST /engine/tenant-administration/commandsCephalon.MultiTenancy.Governance.AspNetCoretenant administration workflow command endpointconditional (MapCephalonTenantAdministrationCommands())

The /engine/cdc-capture-runtimes family in particular has a number of filter drilldowns that have been added incrementally; treat the route table above as the canonical entry point and let the route response document the available filters in its own metadata rather than re-enumerating each filter variant here.

Companion edge packages (Cephalon.Edge.KubernetesGateway, Cephalon.Edge.Traefik) project the same cell-traffic-automations truth back into provider-specific surfaces such as kubernetes-gateway-traffic-materializations and traefik-ingressroute-traffic-materializations; those are technology runtime surfaces, not new /engine/* routes.

The top-level shape exposed by /snapshot is RuntimeIntrospectionSnapshot. Its current top-level keys, grouped by domain:

Base composition

Manifest, Status, OperationalStory, DiagnosticsConventions.

Behavior, execution, and resilience

ExecutionGraphs, HostedExecutions, BehaviorResiliencePolicies, RateLimitingPolicies, Projections, DurableExecutions, DurableExecutionStates.

Saga choreography

SagaChoreographies, SagaChoreographyPublicationStates.

REST authoring and governance

RestEndpoints, RestEndpointCandidates, RestEndpointPublicationGroups, RestEndpointAuthoringPolicies, RestEndpointOverrides, RestEndpointSuppressions.

Database and data

DatabaseRoles, DatabaseMigrations, DatabaseMigrationPlaybook, DatabaseTopology, DataProducts, Outboxes, Inboxes, EventDispatchRuntimes, EventDispatchStates, EventPublicationStates, EventSubscriptionExecutionReadiness.

Change data capture

CdcCaptures, CdcCaptureStates, CdcCaptureExecutionRuntimes.

Cell-based architecture and traffic automation

CellBoundaries, CellRoutes, CellHealthIsolations, CellTrafficAutomations.

Migration and integration

StranglerFigRoutes, StranglerFigRoutePolicies, StranglerFigIngressRoutes, BackendForFrontendBindings, BackendForFrontendRestEndpoints, BackendForFrontendRestDocuments.

Technology surfaces and capabilities

TechnologySurfaces, FeatureFlags.

Audit, identity, governance, agentic

AuditStores, AuthorizationPolicies, AgentToolRuns, KnowledgeIndexes.

Multi-tenancy governance (added through Cephalon.MultiTenancy.Governance)

TenantMemberships, TenantInvitations, TenantInvitationDeliveryRuns, TenantDomainOwnership, TenantGovernanceActions, TenantAdministration.

When a snapshot key holds a list, its element type is the matching descriptor (for example, CellRoutes holds CellRouteDescriptor items; DurableExecutionStates holds DurableExecutionRuntimeState items). The element type names follow the pattern {Surface}Descriptor for static catalog entries and {Surface}RuntimeState for live state, with a few additional {Surface}RuntimeDescriptor exceptions where the surface itself is runtime-derived.

When a key is empty (?? []), that does not by itself mean the surface is inactive; some catalogs ship empty arrays even when their underlying companion is registered. Consult the Manifest and Capabilities blocks for whether a surface is intended to be active.

These interfaces live in Cephalon.Abstractions and own the in-process truth that the routes and snapshots project from. New interfaces should follow the same I{Surface}Catalog or I{Surface}RuntimeCatalog naming pattern.

Behavior, execution, durable, resilience, REST

IExecutionRuntimeCatalog, IHostedExecutionRuntimeCatalog, IBehaviorResilienceRuntimeCatalog, IRateLimitingRuntimeCatalog, IDurableExecutionRuntimeCatalog, IDurableExecutionRuntimeStateCatalog, ISagaChoreographyRuntimeCatalog, ISagaChoreographyPublicationRuntimeStateCatalog, IRestEndpointRuntimeCatalog, IRestEndpointCandidateRuntimeCatalog, IRestEndpointAuthoringPolicyRuntimeCatalog, IRestEndpointPublicationGroupRuntimeCatalog, IRestEndpointOverrideRuntimeCatalog, IRestEndpointSuppressionRuntimeCatalog.

Data, eventing, CDC

IDataProductCatalog, IProjectionCatalog, IOutboxCatalog, IInboxCatalog, IEventDispatchRuntimeCatalog, IEventPublicationRuntimeCatalog, IEventSubscriptionExecutionReadinessCatalog, ICdcCaptureCatalog, ICdcCaptureExecutionRuntimeCatalog, IDatabaseRoleCatalog, IDatabaseMigrationCatalog.

Cells and traffic automation

ICellBoundaryCatalog, ICellRouteCatalog, ICellHealthIsolationCatalog, ICellTrafficAutomationRuntimeCatalog.

Migration and integration

IStranglerFigRuntimeCatalog, IStranglerFigMigrationRuntimeCatalog, IStranglerFigIngressRuntimeCatalog, IBackendForFrontendRuntimeCatalog, IBackendForFrontendRestRuntimeCatalog, IBackendForFrontendRestDocumentRuntimeCatalog.

Technology, feature, audit, identity, agentic, knowledge

ITechnologyRuntimeCatalog, IFeatureFlagRuntimeCatalog, IAuditStoreCatalog, IAuthorizationPolicyCatalog, IAgentToolRunCatalog, IKnowledgeIndexCatalog.

Multi-tenancy governance

ITenantResolver, ITenantContextAccessor, ITenantMembershipCatalog, ITenantMembershipEvaluator, ITenantInvitationCatalog, ITenantInvitationValidator, ITenantInvitationDeliveryRunCatalog, ITenantInvitationDeliveryDispatcher, ITenantInvitationDeliverySender, ITenantDomainOwnershipCatalog, ITenantDomainOwnershipValidator, ITenantDomainOwnershipStore, ITenantDomainOwnershipVerificationWorkflow, ITenantDomainOwnershipProofEvaluator, ITenantDomainOwnershipProofChallengeIssuer, ITenantDomainOwnershipProofPublicationPlanner, ITenantDomainOwnershipHttpProofCollector, ITenantDomainOwnershipDnsTxtProofCollector, ITenantDomainOwnershipProofVerificationRunner, ITenantDomainOwnershipProofPollingRunner, ITenantDomainOwnershipHttpProofPublisher, ITenantDomainOwnershipHttpProofPublicationCatalog, ITenantGovernanceActionCatalog, ITenantGovernanceActionDecider, ITenantGovernanceActionWorkflow, ITenantGovernanceActionStore, ITenantAdministrationWorkflow.

The runtime contract follows a small number of conventions that operators and AI agents can rely on across the engine:

  • routes under /engine/* are introspection-only by default; mutating routes (POST/PUT/PATCH) are explicit, named in the route catalog above, and only registered when their owning companion or workflow is active
  • catalog interfaces live in Cephalon.Abstractions so consumers can take a thin contract dependency without pulling the full engine; runtime services live in Cephalon.Engine or the relevant companion pack
  • snapshot composition is additive: each owner contributes through an IRuntimeIntrospectionSnapshotContributor (or equivalent) so adding a new runtime surface does not require changing RuntimeIntrospectionSnapshot itself outside its owning slice
  • conditional routes are documented inline above (conditional (...)); when a configuration option toggles a route on, the same option is also referenced in the runtime catalog metadata so the route’s existence stays explainable

When a route, snapshot key, or catalog interface is added, this index must be updated in the same slice. When a route, snapshot key, or catalog interface is renamed or retired, this index must be updated; for retirement, leave a one-line note explaining the replacement so AI agents do not have to reconstruct lineage.

An AI agent or external automation can discover the live engine by following this short sequence:

  1. fetch GET /engine/manifest for the high-level shape
  2. fetch GET /engine/snapshot for the composed runtime truth
  3. consult this index to translate intent (for example, “list active CDC captures and their freshness”) into the matching route or snapshot key
  4. follow drill-down routes (for example, /engine/cdc-captures/runtime) when the snapshot’s summary needs more detail
  5. when an answer is missing from the snapshot, check whether the underlying companion is active in Manifest or Capabilities before assuming the surface is broken

For agents that need machine-readable contract metadata, docs/reference/* is the generated XML-doc reference layer that documents the public types behind these surfaces; pair this index with that reference output when explanation or signature-level detail is needed.

This document is meant to evolve with the runtime contract.

  • update it in the same slice whenever a new /engine/* route, snapshot key, or runtime catalog interface ships
  • prefer rewriting the affected table or section in place over appending; the value of this index is its compactness
  • keep the conditional/optional notes truthful so agents and operators do not assume a surface exists when it is gated behind a configuration switch
  • whenever this index drifts more than a month from the underlying source (verified against the engine-surface-maturity-audit.md truth), refresh the affected sections together
  • the canonical naming pattern for new entries is /engine/{kebab-case-surface} for routes, snapshot.{PascalCaseSurface} for snapshot keys, and I{Surface}Catalog or I{Surface}RuntimeCatalog for interfaces