{
  "schema": "nexuscrm.sfcrm-synchronous-read-closure.d2a/v1",
  "distribution": "salesforce-v63",
  "scope_rule": "Every route in the active CRM manifest is classified exactly once, and live CRM product read routes outside that manifest are named separately by their owning family. Read and mixed read-facade behavior is assigned to one D2A family; all other route behavior is explicitly excluded from D2A.",
  "families": [
    {
      "id": "platform-discovery-session",
      "status": "existing-neutral-owner",
      "current_owner": "generic host and session",
      "target_owner": "generic host and session",
      "target_capability_family": "none",
      "parity_gate": "existing generic owner remains authoritative",
      "deletion_target": "none",
      "routes": ["GET /id/:orgId/:userId"]
    },
    {
      "id": "record-access",
      "status": "proven-d1",
      "current_owner": "sfcrm AppService and Runtime record-access adapter",
      "target_owner": "sfcrm AppService -> runtime.records.record-access.v1",
      "target_capability_family": "io.nexuscrm.sfcrm.ui.record-access.v1",
      "parity_gate": "D1 exact signed real-TiDB walking slice",
      "deletion_target": "test-stack legacy record-access owner and fallback removed in D1",
      "routes": ["POST /ui-api/record-access"]
    },
    {
      "id": "record-query-list",
      "status": "proven-d2a-query",
      "current_owner": "sfcrm AppService and Runtime query adapter",
      "target_owner": "sfcrm AppService -> runtime.records.query.v1",
      "target_capability_family": "io.nexuscrm.sfcrm.query.v1",
      "parity_gate": "query/queryAll/queryMore/history real-TiDB test2 with one bounded Runtime data operation per page",
      "deletion_target": "test-stack legacy query route owner and fallback removed by exact signed test2 run 29813157798",
      "routes": ["GET /query", "GET /queryAll", "GET /query/:locator"]
    },
    {
      "id": "related-record-count",
      "status": "proven-d2a-related-counts",
      "current_owner": "sfcrm AppService and Runtime related-counts adapter",
      "target_owner": "sfcrm AppService -> runtime.records.related-counts.v1",
      "target_capability_family": "io.nexuscrm.sfcrm.related-list-counts.v1",
      "parity_gate": "related-list-counts real-TiDB test2 run 29845167957 with one bounded Runtime data operation per HTTP batch",
      "deletion_target": "test-stack legacy related-list count route owner and fallback removed by exact signed test2 run 29845167957",
      "routes": ["POST /ui-api/related-list-counts"]
    },
    {
      "id": "notification-query",
      "status": "proven-d2a-notifications",
      "current_owner": "sfcrm AppService and Runtime query adapter",
      "target_owner": "sfcrm AppService -> runtime.records.query.v1",
      "target_capability_family": "io.nexuscrm.sfcrm.query.v1",
      "parity_gate": "product and Connect notification real-TiDB test2 run 29892899936 with payload parity, recipient isolation, unread filtering, local rejection and no fallback",
      "deletion_target": "test-stack legacy Connect and product notification read owners removed by exact signed test2 run 29892899936",
      "routes": ["GET /connect/notifications"],
      "product_routes": ["GET /product/notifications"]
    },
    {
      "id": "action-workflow-read",
      "status": "planned",
      "current_owner": "transitional CRM dialect action and flow handlers",
      "target_owner": "L1 action projection over bounded Runtime workflow reads",
      "target_capability_family": "workflow-action-read",
      "parity_gate": "discovery, preview, permission and no-effect parity",
      "deletion_target": "test-stack legacy action discovery and preview reads",
      "routes": ["GET /actions/standard", "GET /quickActions", "GET /sobjects/:sobject/quickActions", "GET /quickActions/:actionName/describe", "GET /actions/custom/flow", "GET /actions/custom/flow/:name", "POST /actions/standard/:name/preview", "POST /actions/standard/:name/output-preview"]
    },
    {
      "id": "workflow-approval-read",
      "status": "planned",
      "current_owner": "transitional CRM dialect workflow and approval handlers",
      "target_owner": "L1 workflow projection over bounded Runtime automation reads",
      "target_capability_family": "workflow-approval-read",
      "parity_gate": "approval, flow metadata, record visibility and receipt parity",
      "deletion_target": "test-stack legacy workflow and approval reads",
      "routes": ["GET /sobjects/FlowInterview", "GET /sobjects/FlowInterview/:id", "GET /process/approvals/pending", "GET /process/approvals/records/:recordId/instance", "GET /process/approvals/records/:recordId/step-display", "GET /process/rules", "GET /process/rules/:sObject", "GET /process/approvals/notification-flows", "GET /tooling/sobjects/FlowDefinition", "GET /tooling/sobjects/FlowDefinition/:id", "GET /tooling/sobjects/Flow", "GET /tooling/sobjects/Flow/:id"]
    },
    {
      "id": "bulk-job-read",
      "status": "planned",
      "current_owner": "transitional CRM dialect bulk-job handlers",
      "target_owner": "L1 bulk projection over owner-specific bounded status/result reads",
      "target_capability_family": "bulk-job-read",
      "parity_gate": "status, result streaming, authorization and redaction parity",
      "deletion_target": "test-stack legacy bulk status and result reads",
      "routes": ["GET /jobs/query/:jobId", "GET /jobs/query/:jobId/results"]
    },
    {
      "id": "bulk-ingest-job-read",
      "status": "activation-pending",
      "current_owner": "sfcrm AppService and Runtime Bulk Ingest adapter",
      "target_owner": "sfcrm AppService -> runtime.bulk-ingest.v1",
      "target_capability_family": "io.nexuscrm.sfcrm.bulk-ingest.v1",
      "parity_gate": "complete local HTTP lifecycle and exact AppRelease 0.50.0 proof; real-TiDB test2 walking slice pending",
      "deletion_target": "legacy CRM dialect Bulk Ingest route owner and fallback removed; test2 activation proof pending",
      "product_routes": ["GET /jobs/ingest/:jobId"]
    },
    {
      "id": "analytics-folder-read",
      "status": "planned",
      "current_owner": "transitional CRM dialect analytics and folder handlers",
      "target_owner": "L1 analytics projection over bounded Runtime analytics reads",
      "target_capability_family": "analytics-folder-read",
      "parity_gate": "folder sharing, report/dashboard execution and bounded query-cost parity",
      "deletion_target": "test-stack legacy analytics and folder reads",
      "routes": ["GET /analytics/dashboards", "GET /analytics/dashboards/:dashboardId", "GET /analytics/dashboards/:dashboardId/status", "POST /analytics/dashboards/:dashboardId/refresh", "GET /analytics/reports", "POST /analytics/report-execution", "POST /analytics/reports/execute", "GET /analytics/reports/:reportId", "POST /analytics/reports/:reportId", "GET /analytics/reports/:reportId/describe", "GET /folders", "GET /folders/:id", "GET /folders/:id/children", "GET /folders/:id/shares", "GET /folders/:id/shares/:shareId"]
    },
    {
      "id": "permission-setup-read",
      "status": "planned",
      "current_owner": "transitional CRM dialect permission handlers",
      "target_owner": "L1 permission projection over bounded Runtime security-administration reads",
      "target_capability_family": "runtime.permissions.read-effective.v1",
      "parity_gate": "effective permission parity",
      "deletion_target": "legacy segmented authoring reads removed in AppRelease 0.67.0; effective permission read remains Runtime-owned",
      "routes": ["GET /permissions/effective"]
    },
    {
      "id": "catalog-presentation-read",
      "status": "planned",
      "current_owner": "transitional CRM dialect metadata and UI presentation handlers",
      "target_owner": "Catalog immutable presentation projection consumed through a bounded Runtime read",
      "target_capability_family": "catalog-presentation-read",
      "parity_gate": "describe, layout, list-view, app, action and permission-filtering parity with one bound Catalog revision",
      "deletion_target": "repository/global metadata reads in the migrated test-stack path",
      "routes": ["GET /metadata/objects", "GET /metadata/objects/:apiName", "GET /metadata/fieldtypes", "GET /metadata/validation-rules", "GET /ui-api/object-info/:objectApiName", "GET /ui-api/layout/:objectApiName", "GET /ui-api/layouts/:objectApiName", "GET /ui-api/approval-layouts/:objectApiName", "GET /ui-api/list-info/:objectApiName/:listViewApiName", "GET /ui-api/layout-assignments/:objectApiName", "GET /ui-api/apps", "GET /tooling/sobjects/CustomApplication", "GET /tooling/sobjects/CustomApplication/:id", "GET /sobjects", "GET /sobjects/_System_File/describe", "GET /sobjects/_System_File/describe/layouts", "GET /sobjects/:sobject/describe", "GET /sobjects/:sobject/describe/layouts", "GET /sobjects/:sobject/describe/layouts/:recordTypeId", "GET /sobjects/:sobject/listviews", "GET /sobjects/:sobject/listviews/:listViewId/describe", "GET /sobjects/relevantItems"]
    },
    {
      "id": "related-list-candidates",
      "status": "activation-pending",
      "current_owner": "sfcrm AppService over effective Catalog presentation and current Runtime list fields",
      "target_owner": "sfcrm AppService metadata projection handler",
      "target_capability_family": "io.nexuscrm.sfcrm.effective-permissions.v1",
      "parity_gate": "AppService HTTP permission, authority, candidate assembly and empty/error tests; coordinated real-TiDB test2 activation remains pending",
      "deletion_target": "legacy dialect candidate handler removed; companion Core change removes the direct route, candidate interface and structural seeding read",
      "routes": [],
      "product_routes": ["GET /ui-api/related-list-candidates/:objectApiName"]
    },
    {
      "id": "admin-operational-read",
      "status": "planned",
      "current_owner": "transitional CRM dialect administration handlers",
      "target_owner": "owner-specific bounded operational read services",
      "target_capability_family": "admin-operational-read",
      "parity_gate": "permission, secret-redaction, status and audit parity",
      "deletion_target": "test-stack legacy operational reads",
      "routes": ["GET /metadata/formula-views/:objectName/status", "GET /metadata/formula-views/:objectName/ddl", "GET /metadata/deployRequest/:id", "GET /admin/connector/sync-status", "GET /connector-webhooks/secrets", "GET /admin/audit/log"]
    },
    {
      "id": "tooling-query-read",
      "status": "planned",
      "current_owner": "transitional CRM dialect tooling query handler",
      "target_owner": "L1 tooling grammar over a permission-scoped bounded Runtime query",
      "target_capability_family": "tooling-query-read",
      "parity_gate": "tooling grammar, setup authorization and bounded query-cost parity",
      "deletion_target": "test-stack legacy tooling query read",
      "routes": ["GET /tooling/query"]
    },
    {
      "id": "ui-record-composition-read",
      "status": "planned",
      "current_owner": "transitional CRM dialect UI API handlers",
      "target_owner": "L1 UI projection over one bounded Runtime-owned composition",
      "target_capability_family": "ui-record-composition-read",
      "parity_gate": "record, access, defaults, layout and lookup-display parity without remote fan-out",
      "deletion_target": "test-stack legacy UI record composition reads",
      "routes": ["GET /ui-api/record-ui/:recordIds"]
    },
    {
      "id": "record-defaults-read",
      "status": "activation-pending",
      "current_owner": "sfcrm AppService over Runtime Record View and create-default preview adapters",
      "target_owner": "sfcrm AppService -> Runtime Record View plus runtime.records.preview-create-defaults.v1",
      "target_capability_family": "io.nexuscrm.sfcrm.ui.record-defaults.v1",
      "parity_gate": "complete local authorized Catalog, permission, source-record and dynamic-default walking slice plus exact AppRelease 0.54.0 proof; real-TiDB test2 walking slice pending",
      "deletion_target": "legacy CRM dialect create and clone Record Defaults route owners and fallbacks removed; test2 activation proof pending",
      "routes": ["GET /ui-api/record-defaults/create/:objectApiName", "GET /ui-api/record-defaults/clone/:recordId"]
    },
    {
      "id": "file-read",
      "status": "planned",
      "current_owner": "transitional CRM dialect file handlers",
      "target_owner": "L1 file wire projection over authorized Runtime/file-owner streams",
      "target_capability_family": "file-read",
      "parity_gate": "record authorization, range/content headers, byte stream and cancellation parity",
      "deletion_target": "test-stack legacy file download reads",
      "routes": ["GET /files/:id/download", "GET /sobjects/_System_File/:id/download", "GET /sobjects/ContentVersion/:fileId/VersionData"]
    },
    {
      "id": "record-view-read",
      "status": "planned",
      "current_owner": "transitional CRM dialect record handlers",
      "target_owner": "L1 record projection over a bounded Runtime record-view capability",
      "target_capability_family": "record-view-read",
      "parity_gate": "CRUD/RLS/FLS, external ID, relationship display and decoration parity",
      "deletion_target": "test-stack legacy record-view reads",
      "routes": ["GET /sobjects/:sobject/:id", "GET /sobjects/:sobject/:id/:fieldValue"]
    },
    {
      "id": "search-read",
      "status": "planned",
      "current_owner": "transitional CRM dialect search handlers",
      "target_owner": "L1 search grammar over a bounded Runtime search plan",
      "target_capability_family": "search-read",
      "parity_gate": "search, suggestions, layout, scope, CRUD/RLS/FLS and result ordering parity",
      "deletion_target": "test-stack legacy search reads",
      "routes": ["GET /metadata/search/scope-order", "GET /search", "GET /parameterizedSearch", "POST /parameterizedSearch", "GET /search/layout", "GET /search/suggestions", "GET /search/scopeOrder"]
    },
    {
      "id": "recycle-read",
      "status": "proven-d2a-recycle-read",
      "current_owner": "sfcrm AppService and Runtime recycle-bin adapter",
      "target_owner": "sfcrm AppService -> runtime.records.list-recycle-bin.v1",
      "target_capability_family": "io.nexuscrm.sfcrm.recycle-bin-read.v1",
      "parity_gate": "recycle-bin real-TiDB test2 run 29912105907 with tombstone visibility, authorization, byte parity, deterministic ordering and one bounded Runtime listing RPC per request",
      "deletion_target": "test-stack legacy recycle-bin listing owner and fallback removed by exact signed test2 run 29912105907",
      "routes": ["GET /recyclebin"]
    },
    {
      "id": "composite-read-facade",
      "status": "planned",
      "current_owner": "transitional CRM dialect composite orchestrator",
      "target_owner": "L1 orchestration over already migrated bounded read families",
      "target_capability_family": "none-new",
      "parity_gate": "read-subrequest envelope, ordering, allOrNone rejection and zero legacy fallback parity",
      "deletion_target": "legacy execution of read subrequests in the test-stack composite facade",
      "routes": ["POST /composite", "POST /composite/batch", "GET /composite/sobjects"]
    }
  ],
  "excluded_routes": [
    "POST /actions/standard/:name", "POST /quickActions/:actionName", "POST /actions/custom/flow/:name", "POST /actions/custom/resumeFlow", "DELETE /sobjects/FlowInterview/:id", "POST /process/approvals", "POST /process/approvals/clone", "POST /jobs/query", "POST /analytics/dashboards", "PATCH /analytics/dashboards/:dashboardId", "PUT /analytics/dashboards/:dashboardId", "DELETE /analytics/dashboards/:dashboardId", "POST /analytics/reports", "PATCH /analytics/reports/:reportId", "DELETE /analytics/reports/:reportId", "POST /folders", "POST /folders/transfer-ownership", "PATCH /folders/:id", "DELETE /folders/:id", "POST /folders/:id/shares", "PUT /folders/:id/shares", "PATCH /folders/:id/shares/:shareId", "DELETE /folders/:id/shares/:shareId", "POST /metadata/objects", "PATCH /metadata/objects/:apiName", "DELETE /metadata/objects/:apiName", "POST /metadata/objects/:apiName/fields", "POST /metadata/objects/:apiName/fields/batch", "PATCH /metadata/objects/:apiName/fields/:fieldApiName", "DELETE /metadata/objects/:apiName/fields/:fieldApiName", "POST /metadata/refresh-cache", "POST /metadata/deployRequest", "POST /metadata/formula-views/:objectName/rebuild", "POST /metadata/formula-views/rebuild-all", "POST /metadata/formula-views/:objectName/validate", "POST /admin/autonumber/refresh-metadata", "POST /connector-webhooks/secrets/:id/rotate", "POST /admin/recalculate-rollups/:object", "POST /metadata/validation-rules", "PATCH /metadata/validation-rules/:id", "DELETE /metadata/validation-rules/:id", "POST /tooling/sobjects/CustomObject", "PATCH /tooling/sobjects/CustomObject/:id", "POST /tooling/sobjects/CustomField", "POST /tooling/sobjects/ValidationRule", "POST /tooling/sobjects/QuickActionDefinition", "POST /tooling/sobjects/FlowDefinition", "PATCH /tooling/sobjects/FlowDefinition/:id", "DELETE /tooling/sobjects/FlowDefinition/:id", "POST /tooling/sobjects/Flow", "PATCH /tooling/sobjects/Flow/:id", "DELETE /tooling/sobjects/Flow/:id", "POST /tooling/sobjects/Flow/:id/activate", "POST /tooling/sobjects/Flow/:id/deactivate", "POST /tooling/sobjects/CustomApplication", "PATCH /tooling/sobjects/CustomApplication/:id", "DELETE /tooling/sobjects/CustomApplication/:id", "PATCH /tooling/sobjects/ValidationRule/:id", "DELETE /tooling/sobjects/ValidationRule/:id", "POST /sobjects/:sobject/listviews", "DELETE /sobjects/:sobject/listviews/:listViewId", "POST /files", "POST /record-files", "DELETE /files/:id", "DELETE /sobjects/_System_File/:id", "POST /sobjects/ContentVersion", "POST /sobjects/:sobject", "PATCH /sobjects/:sobject/:id", "DELETE /sobjects/:sobject/:id", "PATCH /sobjects/:sobject/:id/:fieldValue", "DELETE /recyclebin/:id", "POST /recyclebin/restore/:id", "POST /composite/tree/:objectName", "POST /composite/sobjects", "PATCH /composite/sobjects", "DELETE /composite/sobjects", "PATCH /composite/sobjects/:sObjectName/:externalIdFieldName"
  ],
  "exclusion_owner": "D2B/D2C or an existing non-App-data host owner; this file does not define mutation contracts"
}
