{
  "report_schema_version": "1.0.0",
  "artifact": "capability-parity-report",
  "generated_at": "2026-08-11",
  "source_artifacts": [
    {
      "kind": "approved_aliases",
      "path": "capabilities/capability-parity-aliases.v1.json",
      "sha256": "0c719e591f324af577a5d0673ad524cc299ef45da7bb702b97a482c65e9d960e"
    },
    {
      "kind": "candidate_denominator",
      "path": "capabilities/capability-denominator.v1.json",
      "sha256": "1c7857a04f6016190acfeedf78f9e0c902dc14b20c51e9475db34db418ff86df"
    },
    {
      "kind": "canonical_ledger",
      "path": "capabilities/capability-ledger.v1.json",
      "sha256": "ac0a4ae62898fdf03946cd552d8b45cd77470e1268f478bd161e5fb7b92b3c0f"
    },
    {
      "kind": "compiled_mcp_registry",
      "path": "src/lib/mcp/product-mcp-registry.ts",
      "sha256": "5dc9ac6de52219987671fd423b8e64492e9d192d6d4da616e5102f8a2d9b15a7"
    }
  ],
  "summary": {
    "canonical_row_count": 48,
    "denominator_candidate_count": 276,
    "exact_projection_count": 11,
    "aliased_projection_count": 10,
    "canonical_unmapped_count": 27,
    "platform_foundation_unmapped_count": 1,
    "candidate_only_count": 255,
    "fallback_owner_count": 106,
    "overlap_record_count": 47,
    "preserved_gap_count": 2,
    "preserved_exclusion_count": 6,
    "mcp_compiled_count": 43,
    "mcp_eligible_count": 17
  },
  "rows": [
    {
      "capability_id": "activity.list.inspect",
      "capability_version": "0.1.0",
      "title": "List CRM activities",
      "family": "crm-activity-read-workflow-lifecycle",
      "ledger_status": "closed",
      "scope_basis": "observed_dashboard",
      "parity_mode": "direct_headless",
      "business_owner": "CRM capability owner",
      "owner_team": "CRM capability owner",
      "surface_applicability": {
        "dashboard": {
          "state": "required",
          "rationale": "Activity history is an incumbent dashboard read surface."
        },
        "rest": {
          "state": "required",
          "rationale": "The public activity listing route is already deployed."
        },
        "cli": {
          "state": "optional",
          "rationale": "CLI projection remains outside this MCP repair."
        },
        "sdk": {
          "state": "optional",
          "rationale": "Generated SDK projection remains downstream of contract closure."
        },
        "mcp": {
          "state": "required",
          "rationale": "Claude needs a tenant-scoped bounded CRM activity listing tool."
        },
        "webhook": {
          "state": "not_applicable",
          "rationale": "Activity listing is a synchronous read, not a webhook capability."
        },
        "handoff": {
          "state": "not_applicable",
          "rationale": "No assisted provider or browser step is required."
        }
      },
      "wire": {
        "rest": {
          "canonical_hosts": [
            "https://api.app.firstsales.io/api/v1",
            "https://sandbox.api.app.firstsales.io/api/v1"
          ],
          "operation_ids": [
            "listActivities"
          ],
          "route_patterns": [
            "/api/v1/organizations/{orgId}/workspaces/{wsId}/activities"
          ],
          "auth_schemes": [
            "developer_key_bearer"
          ],
          "evidence_bounds": [
            {
              "target": "query.limit",
              "kind": "integer_range",
              "min": 1,
              "max": 100,
              "default": 20,
              "source": "runtime+MCP+OpenAPI"
            },
            {
              "target": "response.activities",
              "kind": "max_items",
              "max": 100,
              "source": "runtime+MCP+OpenAPI"
            }
          ]
        },
        "cli": {
          "command_labels": [],
          "required_context": [
            "org",
            "workspace"
          ]
        }
      },
      "proof": {
        "proof_id": "mcp-activities-list",
        "highest_seam": "runtime",
        "runnable_artifacts": [
          "src/lib/public-api/__tests__/activity-alert-read.test.ts",
          "src/steps/public-api/activities/__tests__/activities.step.test.ts",
          "src/lib/mcp/__tests__/activities-list-binding.test.ts",
          "src/lib/mcp/__tests__/operational-read-route.test.ts",
          "src/tests/developer-api-openapi-contract.test.ts",
          "src/tests/developer-api-wave-a-measurements.test.ts"
        ],
        "source_paths": [
          "src/lib/public-api/__tests__/activity-alert-read.test.ts",
          "src/steps/public-api/activities/__tests__/activities.step.test.ts",
          "src/lib/mcp/__tests__/activities-list-binding.test.ts",
          "src/lib/mcp/__tests__/operational-read-route.test.ts",
          "src/tests/developer-api-openapi-contract.test.ts",
          "src/tests/developer-api-wave-a-measurements.test.ts"
        ],
        "generated_checks": [
          "activity listing remains tenant-scoped to one live OAuth-granted workspace and fails closed after grant revocation",
          "activity listing returns at most 100 strict public projections without internal persistence fields"
        ],
        "covers_axes": [
          "discover",
          "inspect",
          "observe",
          "verify",
          "policy_bound"
        ]
      },
      "mcp": {
        "compiled": true,
        "eligible": true,
        "tools": [
          {
            "capability_id": "activity.list.inspect",
            "capability_version": "0.1.0",
            "tool_name": "activities_list",
            "oauth_tier": "mcp:access"
          }
        ]
      },
      "denominator_projection": {
        "state": "exact",
        "denominator_capability_id": "activity.list.inspect",
        "candidate_title": "Inspect scheduled activities",
        "candidate_family": "Companies, deals, pipelines, and activities",
        "source_partition": "campaign_crm_inbox_copilot",
        "owner_kind": "backend_family_match",
        "fallback_owner": false,
        "overlap_source_control_ids": [
          "deals.activities_crud"
        ],
        "alias": null
      }
    },
    {
      "capability_id": "alert.list.inspect",
      "capability_version": "0.1.0",
      "title": "List alerts",
      "family": "alerts-and-notifications-read-workflow-lifecycle",
      "ledger_status": "planning_seed",
      "scope_basis": "observed_dashboard",
      "parity_mode": "direct_headless",
      "business_owner": "Alerts capability owner",
      "owner_team": "Alerts capability owner",
      "surface_applicability": {
        "dashboard": {
          "state": "required",
          "rationale": "Alerts are an incumbent dashboard read surface."
        },
        "rest": {
          "state": "required",
          "rationale": "The public alert listing route is already deployed."
        },
        "cli": {
          "state": "optional",
          "rationale": "CLI projection remains outside this MCP repair."
        },
        "sdk": {
          "state": "optional",
          "rationale": "Generated SDK projection remains downstream of contract closure."
        },
        "mcp": {
          "state": "required",
          "rationale": "The binding is compiled but must remain dormant until bounded continuation metadata is published."
        },
        "webhook": {
          "state": "optional",
          "rationale": "Alert delivery may use webhooks separately from this synchronous read."
        },
        "handoff": {
          "state": "not_applicable",
          "rationale": "No assisted provider or browser step is required."
        }
      },
      "wire": {
        "rest": {
          "canonical_hosts": [
            "https://api.app.firstsales.io/api/v1",
            "https://sandbox.api.app.firstsales.io/api/v1"
          ],
          "operation_ids": [
            "listAlerts"
          ],
          "route_patterns": [
            "/api/v1/organizations/{orgId}/workspaces/{wsId}/alerts"
          ],
          "auth_schemes": [
            "developer_key_bearer"
          ],
          "evidence_bounds": [
            {
              "target": "query.limit",
              "kind": "integer_range",
              "min": 1,
              "max": 200,
              "default": 100,
              "source": "runtime+MCP+OpenAPI"
            },
            {
              "target": "response.alerts",
              "kind": "max_items",
              "max": 200,
              "source": "runtime+MCP+OpenAPI"
            }
          ]
        },
        "cli": {
          "command_labels": [],
          "required_context": [
            "org",
            "workspace"
          ]
        }
      },
      "proof": {
        "proof_id": "bootstrap-alerts-list",
        "highest_seam": "runtime",
        "runnable_artifacts": [
          "src/lib/public-api/__tests__/activity-alert-read.test.ts",
          "src/steps/public-api/alerts/__tests__/alerts.step.test.ts",
          "src/lib/mcp/__tests__/alerts-list-binding.test.ts",
          "src/lib/mcp/__tests__/operational-read-route.test.ts",
          "src/tests/developer-api-openapi-contract.test.ts",
          "src/tests/developer-api-wave-a-measurements.test.ts"
        ],
        "source_paths": [
          "src/lib/public-api/__tests__/activity-alert-read.test.ts",
          "src/steps/public-api/alerts/__tests__/alerts.step.test.ts",
          "src/lib/mcp/__tests__/alerts-list-binding.test.ts",
          "src/lib/mcp/__tests__/operational-read-route.test.ts",
          "src/tests/developer-api-openapi-contract.test.ts",
          "src/tests/developer-api-wave-a-measurements.test.ts"
        ],
        "generated_checks": [
          "alert listing remains tenant-scoped to one current OAuth-granted workspace",
          "alert listing returns at most 200 strict public projections but cannot yet prove continuation semantics"
        ],
        "covers_axes": [
          "discover",
          "inspect",
          "observe",
          "verify",
          "policy_bound"
        ]
      },
      "mcp": {
        "compiled": true,
        "eligible": false,
        "tools": [
          {
            "capability_id": "alert.list.inspect",
            "capability_version": "0.1.0",
            "tool_name": "alerts_list",
            "oauth_tier": "mcp:access"
          }
        ]
      },
      "denominator_projection": {
        "state": "exact",
        "denominator_capability_id": "alert.list.inspect",
        "candidate_title": "Inspect alert list",
        "candidate_family": "Inbox, Copilot, dashboard insights, and alerts",
        "source_partition": "campaign_crm_inbox_copilot",
        "owner_kind": "backend_family_match",
        "fallback_owner": false,
        "overlap_source_control_ids": [
          "alerts.list_filters_and_actions"
        ],
        "alias": null
      }
    },
    {
      "capability_id": "auth.developer_identity.read",
      "capability_version": "0.1.0",
      "title": "Read current developer identity",
      "family": "developer-access-and-api-governance",
      "ledger_status": "planning_seed",
      "scope_basis": "platform_foundation",
      "parity_mode": "direct_headless",
      "business_owner": "Platform/API owner",
      "owner_team": "Platform/API owner",
      "surface_applicability": {
        "dashboard": {
          "state": "not_applicable",
          "rationale": "Non-dashboard governance safe-read."
        },
        "rest": {
          "state": "required",
          "rationale": "Public bootstrap safe-read contract."
        },
        "cli": {
          "state": "required",
          "rationale": "Current whoami command exists in the checked-in CLI."
        },
        "sdk": {
          "state": "optional",
          "rationale": "Generated SDK parity remains downstream of contract closure."
        },
        "mcp": {
          "state": "not_applicable",
          "rationale": "Product MCP is a later leaf and is out of bootstrap scope."
        },
        "webhook": {
          "state": "not_applicable",
          "rationale": "No webhook carrier for whoami."
        },
        "handoff": {
          "state": "not_applicable",
          "rationale": "No assisted provider or browser step."
        }
      },
      "wire": {
        "rest": {
          "canonical_hosts": [
            "https://api.app.firstsales.io/api/v1",
            "https://sandbox.api.app.firstsales.io/api/v1"
          ],
          "operation_ids": [
            "getDeveloperIdentity"
          ],
          "route_patterns": [
            "/api/v1/whoami"
          ],
          "auth_schemes": [
            "developer_key_bearer"
          ]
        },
        "cli": {
          "command_labels": [
            "whoami"
          ],
          "required_context": []
        }
      },
      "proof": {
        "proof_id": "bootstrap-whoami",
        "highest_seam": "contract"
      },
      "mcp": {
        "compiled": false,
        "eligible": false,
        "tools": []
      },
      "denominator_projection": {
        "state": "platform_foundation_unmapped",
        "denominator_capability_id": null,
        "candidate_title": null,
        "candidate_family": null,
        "source_partition": null,
        "owner_kind": null,
        "fallback_owner": false,
        "overlap_source_control_ids": [],
        "alias": null
      }
    },
    {
      "capability_id": "billing.credit.balance",
      "capability_version": "0.1.0",
      "title": "Inspect billing credit balance",
      "family": "billing-credits-and-usage",
      "ledger_status": "closed",
      "scope_basis": "observed_dashboard",
      "parity_mode": "direct_headless",
      "business_owner": "Billing capability owner",
      "owner_team": "Billing capability owner",
      "surface_applicability": {
        "dashboard": {
          "state": "required",
          "rationale": "Credit balance is an incumbent organization billing surface."
        },
        "rest": {
          "state": "required",
          "rationale": "The public credit-balance route is already deployed."
        },
        "cli": {
          "state": "required",
          "rationale": "The checked-in CLI exposes billing credits."
        },
        "sdk": {
          "state": "optional",
          "rationale": "Generated SDK projection remains downstream of contract closure."
        },
        "mcp": {
          "state": "required",
          "rationale": "Claude needs an organization-scoped read-only credit-balance tool."
        },
        "webhook": {
          "state": "not_applicable",
          "rationale": "Credit-balance inspection is a synchronous read."
        },
        "handoff": {
          "state": "not_applicable",
          "rationale": "No assisted provider or browser step is required."
        }
      },
      "wire": {
        "rest": {
          "canonical_hosts": [
            "https://api.app.firstsales.io/api/v1",
            "https://sandbox.api.app.firstsales.io/api/v1"
          ],
          "operation_ids": [
            "getBillingCreditBalance"
          ],
          "route_patterns": [
            "/api/v1/organizations/{orgId}/billing/credits"
          ],
          "auth_schemes": [
            "developer_key_bearer"
          ]
        },
        "cli": {
          "command_labels": [
            "billing credits"
          ],
          "required_context": [
            "org"
          ]
        }
      },
      "proof": {
        "proof_id": "mcp-billing-credit-balance-get",
        "highest_seam": "runtime",
        "runnable_artifacts": [
          "src/lib/public-api/__tests__/billing-read.test.ts",
          "src/steps/public-api/billing/__tests__/billing.step.test.ts",
          "src/lib/mcp/__tests__/billing-credit-read-bindings.test.ts",
          "src/lib/mcp/__tests__/billing-team-read-route.test.ts",
          "src/lib/mcp/__tests__/product-mcp-registry.test.ts",
          "src/tests/developer-api-openapi-contract.test.ts",
          "src/tests/developer-api-wave-a-measurements.test.ts"
        ],
        "source_paths": [
          "src/lib/public-api/__tests__/billing-read.test.ts",
          "src/steps/public-api/billing/__tests__/billing.step.test.ts",
          "src/lib/mcp/__tests__/billing-credit-read-bindings.test.ts",
          "src/lib/mcp/__tests__/billing-team-read-route.test.ts",
          "src/lib/mcp/__tests__/product-mcp-registry.test.ts",
          "src/tests/developer-api-openapi-contract.test.ts",
          "src/tests/developer-api-wave-a-measurements.test.ts"
        ],
        "generated_checks": [
          "credit balance remains tenant-scoped to one current OAuth-granted organization and fails closed after grant revocation",
          "credit balance returns exactly the three strict public aggregate fields without ledger or provider metadata"
        ],
        "covers_axes": [
          "discover",
          "inspect",
          "observe",
          "verify",
          "policy_bound"
        ]
      },
      "mcp": {
        "compiled": true,
        "eligible": true,
        "tools": [
          {
            "capability_id": "billing.credit.balance",
            "capability_version": "0.1.0",
            "tool_name": "billing_credit_balance_get",
            "oauth_tier": "mcp:access"
          }
        ]
      },
      "denominator_projection": {
        "state": "unmapped",
        "denominator_capability_id": null,
        "candidate_title": null,
        "candidate_family": null,
        "source_partition": null,
        "owner_kind": null,
        "fallback_owner": false,
        "overlap_source_control_ids": [],
        "alias": null
      }
    },
    {
      "capability_id": "billing.credit.history.inspect",
      "capability_version": "0.1.0",
      "title": "Inspect billing credit history",
      "family": "billing-credits-and-usage",
      "ledger_status": "closed",
      "scope_basis": "observed_dashboard",
      "parity_mode": "direct_headless",
      "business_owner": "Billing capability owner",
      "owner_team": "Billing capability owner",
      "surface_applicability": {
        "dashboard": {
          "state": "required",
          "rationale": "Credit history is an incumbent organization billing surface."
        },
        "rest": {
          "state": "required",
          "rationale": "The public credit-history route is already deployed."
        },
        "cli": {
          "state": "required",
          "rationale": "The checked-in CLI exposes billing credit-history."
        },
        "sdk": {
          "state": "optional",
          "rationale": "Generated SDK projection remains downstream of contract closure."
        },
        "mcp": {
          "state": "required",
          "rationale": "Claude needs an organization-scoped bounded credit-history tool."
        },
        "webhook": {
          "state": "not_applicable",
          "rationale": "Credit-history inspection is a synchronous read."
        },
        "handoff": {
          "state": "not_applicable",
          "rationale": "No assisted provider or browser step is required."
        }
      },
      "wire": {
        "rest": {
          "canonical_hosts": [
            "https://api.app.firstsales.io/api/v1",
            "https://sandbox.api.app.firstsales.io/api/v1"
          ],
          "operation_ids": [
            "listBillingCreditHistory"
          ],
          "route_patterns": [
            "/api/v1/organizations/{orgId}/billing/credits/history"
          ],
          "auth_schemes": [
            "developer_key_bearer"
          ],
          "evidence_bounds": [
            {
              "target": "query.limit",
              "kind": "integer_range",
              "min": 1,
              "max": 100,
              "default": 20,
              "source": "runtime+MCP+OpenAPI"
            },
            {
              "target": "query.offset",
              "kind": "integer_range",
              "min": 0,
              "max": 9007199254740991,
              "default": 0,
              "source": "runtime+MCP"
            },
            {
              "target": "response.logs",
              "kind": "max_items",
              "max": 100,
              "source": "runtime+MCP+OpenAPI"
            }
          ]
        },
        "cli": {
          "command_labels": [
            "billing credit-history"
          ],
          "required_context": [
            "org"
          ]
        }
      },
      "proof": {
        "proof_id": "mcp-billing-credit-history-list",
        "highest_seam": "runtime",
        "runnable_artifacts": [
          "src/lib/public-api/__tests__/billing-read.test.ts",
          "src/steps/public-api/billing/__tests__/billing.step.test.ts",
          "src/lib/mcp/__tests__/billing-credit-read-bindings.test.ts",
          "src/lib/mcp/__tests__/billing-team-read-route.test.ts",
          "src/lib/mcp/__tests__/product-mcp-registry.test.ts",
          "src/tests/developer-api-openapi-contract.test.ts",
          "src/tests/developer-api-wave-a-measurements.test.ts"
        ],
        "source_paths": [
          "src/lib/public-api/__tests__/billing-read.test.ts",
          "src/steps/public-api/billing/__tests__/billing.step.test.ts",
          "src/lib/mcp/__tests__/billing-credit-read-bindings.test.ts",
          "src/lib/mcp/__tests__/billing-team-read-route.test.ts",
          "src/lib/mcp/__tests__/product-mcp-registry.test.ts",
          "src/tests/developer-api-openapi-contract.test.ts",
          "src/tests/developer-api-wave-a-measurements.test.ts"
        ],
        "generated_checks": [
          "credit history remains tenant-scoped to one current OAuth-granted organization and fails closed after grant revocation",
          "credit history returns at most 100 strict public rows with total and offset pagination and no private ledger metadata"
        ],
        "covers_axes": [
          "discover",
          "inspect",
          "observe",
          "verify",
          "policy_bound"
        ]
      },
      "mcp": {
        "compiled": true,
        "eligible": true,
        "tools": [
          {
            "capability_id": "billing.credit.history.inspect",
            "capability_version": "0.1.0",
            "tool_name": "billing_credit_history_list",
            "oauth_tier": "mcp:access"
          }
        ]
      },
      "denominator_projection": {
        "state": "unmapped",
        "denominator_capability_id": null,
        "candidate_title": null,
        "candidate_family": null,
        "source_partition": null,
        "owner_kind": null,
        "fallback_owner": false,
        "overlap_source_control_ids": [],
        "alias": null
      }
    },
    {
      "capability_id": "billing.usage.inspect",
      "capability_version": "0.1.0",
      "title": "Inspect billing usage over a date range",
      "family": "billing-credits-and-usage",
      "ledger_status": "closed",
      "scope_basis": "observed_dashboard",
      "parity_mode": "direct_headless",
      "business_owner": "Billing capability owner",
      "owner_team": "Billing capability owner",
      "surface_applicability": {
        "dashboard": {
          "state": "required",
          "rationale": "Billing usage is an incumbent organization billing surface."
        },
        "rest": {
          "state": "required",
          "rationale": "The public billing usage summary route is already deployed."
        },
        "cli": {
          "state": "required",
          "rationale": "The checked-in CLI exposes billing usage-summary."
        },
        "sdk": {
          "state": "optional",
          "rationale": "Generated SDK projection remains downstream of contract closure."
        },
        "mcp": {
          "state": "required",
          "rationale": "Claude needs an organization-scoped read-only billing usage tool."
        },
        "webhook": {
          "state": "not_applicable",
          "rationale": "Billing usage inspection is a synchronous read."
        },
        "handoff": {
          "state": "not_applicable",
          "rationale": "No assisted provider or browser step is required."
        }
      },
      "wire": {
        "rest": {
          "canonical_hosts": [
            "https://api.app.firstsales.io/api/v1",
            "https://sandbox.api.app.firstsales.io/api/v1"
          ],
          "operation_ids": [
            "getBillingUsageSummary"
          ],
          "route_patterns": [
            "/api/v1/organizations/{orgId}/billing/credits/usage-summary"
          ],
          "auth_schemes": [
            "developer_key_bearer"
          ],
          "evidence_bounds": [
            {
              "target": "query.days",
              "kind": "integer_range",
              "min": 1,
              "max": 90,
              "default": 30,
              "source": "runtime+MCP+OpenAPI"
            },
            {
              "target": "response.daily",
              "kind": "max_items",
              "max": 366,
              "source": "runtime+MCP+OpenAPI"
            },
            {
              "target": "response.byAction",
              "kind": "max_items",
              "max": 22,
              "source": "runtime+MCP+OpenAPI"
            }
          ]
        },
        "cli": {
          "command_labels": [
            "billing usage-summary"
          ],
          "required_context": [
            "org"
          ]
        }
      },
      "proof": {
        "proof_id": "mcp-billing-usage-get",
        "highest_seam": "runtime",
        "runnable_artifacts": [
          "src/lib/public-api/__tests__/billing-read.test.ts",
          "src/steps/public-api/billing/__tests__/billing.step.test.ts",
          "src/lib/mcp/__tests__/billing-usage-get-binding.test.ts",
          "src/lib/mcp/__tests__/billing-team-read-route.test.ts",
          "src/lib/mcp/__tests__/product-mcp-registry.test.ts",
          "src/tests/developer-api-openapi-contract.test.ts",
          "src/tests/developer-api-wave-a-measurements.test.ts"
        ],
        "source_paths": [
          "src/lib/public-api/__tests__/billing-read.test.ts",
          "src/steps/public-api/billing/__tests__/billing.step.test.ts",
          "src/lib/mcp/__tests__/billing-usage-get-binding.test.ts",
          "src/lib/mcp/__tests__/billing-team-read-route.test.ts",
          "src/lib/mcp/__tests__/product-mcp-registry.test.ts",
          "src/tests/developer-api-openapi-contract.test.ts",
          "src/tests/developer-api-wave-a-measurements.test.ts"
        ],
        "generated_checks": [
          "billing usage remains tenant-scoped to one current OAuth-granted organization and fails closed after grant revocation",
          "billing usage returns one strict aggregate with at most 366 daily rows and the fixed 22-action catalog"
        ],
        "covers_axes": [
          "discover",
          "inspect",
          "observe",
          "verify",
          "policy_bound"
        ]
      },
      "mcp": {
        "compiled": true,
        "eligible": true,
        "tools": [
          {
            "capability_id": "billing.usage.inspect",
            "capability_version": "0.1.0",
            "tool_name": "billing_usage_get",
            "oauth_tier": "mcp:access"
          }
        ]
      },
      "denominator_projection": {
        "state": "exact",
        "denominator_capability_id": "billing.usage.inspect",
        "candidate_title": "Inspect billing usage over a date range",
        "candidate_family": "billing",
        "source_partition": "account_settings",
        "owner_kind": "backend_family_match",
        "fallback_owner": false,
        "overlap_source_control_ids": [],
        "alias": null
      }
    },
    {
      "capability_id": "blocked_domain.add",
      "capability_version": "0.1.0",
      "title": "Add Blocked Domains",
      "family": "campaign-creation-configuration-workflow-lifecycle",
      "ledger_status": "draft",
      "scope_basis": "observed_dashboard",
      "parity_mode": "direct_headless",
      "business_owner": "Campaign capability owner",
      "owner_team": "Campaign capability owner",
      "surface_applicability": {
        "dashboard": {
          "state": "required",
          "rationale": "Settings adds workspace Blocked Domains."
        },
        "rest": {
          "state": "required",
          "rationale": "The public POST route adds workspace Blocked Domains."
        },
        "cli": {
          "state": "required",
          "rationale": "The blocked-domains add command calls this route."
        },
        "sdk": {
          "state": "optional",
          "rationale": "Generated SDK parity remains downstream of contract closure."
        },
        "mcp": {
          "state": "required",
          "rationale": "The blocked_domains_add MCP tool mirrors this route; it is listed only after this row is released."
        },
        "webhook": {
          "state": "not_applicable",
          "rationale": "Not a webhook capability."
        },
        "handoff": {
          "state": "not_applicable",
          "rationale": "No assisted provider or browser step."
        }
      },
      "wire": {
        "rest": {
          "canonical_hosts": [
            "https://api.app.firstsales.io/api/v1",
            "https://sandbox.api.app.firstsales.io/api/v1"
          ],
          "operation_ids": [
            "postApiV1OrganizationsOrgIdWorkspacesWsIdBlockeddomains"
          ],
          "route_patterns": [
            "/api/v1/organizations/{orgId}/workspaces/{wsId}/blocked-domains"
          ],
          "auth_schemes": [
            "developer_key_bearer"
          ],
          "evidence_bounds": [
            {
              "target": "request.domains",
              "kind": "max_items",
              "max": 100,
              "source": "runtime+openapi"
            }
          ]
        },
        "cli": {
          "command_labels": [
            "blocked-domains add"
          ],
          "required_context": [
            "org",
            "workspace"
          ]
        }
      },
      "proof": {
        "proof_id": "blocked-domains-add",
        "highest_seam": "runtime",
        "source_paths": [
          "src/steps/public-api/blocked-domains/__tests__/blocked-domains.step.test.ts",
          "src/lib/mcp/__tests__/mcp-write-tools-campaign.test.ts"
        ]
      },
      "mcp": {
        "compiled": true,
        "eligible": false,
        "tools": [
          {
            "capability_id": "blocked_domain.add",
            "capability_version": "0.1.0",
            "tool_name": "blocked_domains_add",
            "oauth_tier": "mcp:write"
          }
        ]
      },
      "denominator_projection": {
        "state": "unmapped",
        "denominator_capability_id": null,
        "candidate_title": null,
        "candidate_family": null,
        "source_partition": null,
        "owner_kind": null,
        "fallback_owner": false,
        "overlap_source_control_ids": [],
        "alias": null
      }
    },
    {
      "capability_id": "blocked_domain.list",
      "capability_version": "0.1.0",
      "title": "List Blocked Domains",
      "family": "campaign-creation-configuration-workflow-lifecycle",
      "ledger_status": "draft",
      "scope_basis": "observed_dashboard",
      "parity_mode": "direct_headless",
      "business_owner": "Campaign capability owner",
      "owner_team": "Campaign capability owner",
      "surface_applicability": {
        "dashboard": {
          "state": "required",
          "rationale": "Settings lists the workspace Blocked Domains."
        },
        "rest": {
          "state": "required",
          "rationale": "The public GET route lists workspace Blocked Domains."
        },
        "cli": {
          "state": "required",
          "rationale": "The blocked-domains list command calls this route."
        },
        "sdk": {
          "state": "optional",
          "rationale": "Generated SDK parity remains downstream of contract closure."
        },
        "mcp": {
          "state": "required",
          "rationale": "The blocked_domains_list MCP tool mirrors this route; it is listed only after this row is released."
        },
        "webhook": {
          "state": "not_applicable",
          "rationale": "Not a webhook capability."
        },
        "handoff": {
          "state": "not_applicable",
          "rationale": "No assisted provider or browser step."
        }
      },
      "wire": {
        "rest": {
          "canonical_hosts": [
            "https://api.app.firstsales.io/api/v1",
            "https://sandbox.api.app.firstsales.io/api/v1"
          ],
          "operation_ids": [
            "getApiV1OrganizationsOrgIdWorkspacesWsIdBlockeddomains"
          ],
          "route_patterns": [
            "/api/v1/organizations/{orgId}/workspaces/{wsId}/blocked-domains"
          ],
          "auth_schemes": [
            "developer_key_bearer"
          ]
        },
        "cli": {
          "command_labels": [
            "blocked-domains list"
          ],
          "required_context": [
            "org",
            "workspace"
          ]
        }
      },
      "proof": {
        "proof_id": "blocked-domains-list",
        "highest_seam": "runtime",
        "source_paths": [
          "src/steps/public-api/blocked-domains/__tests__/blocked-domains.step.test.ts",
          "src/lib/mcp/__tests__/mcp-write-tools-campaign.test.ts"
        ]
      },
      "mcp": {
        "compiled": true,
        "eligible": false,
        "tools": [
          {
            "capability_id": "blocked_domain.list",
            "capability_version": "0.1.0",
            "tool_name": "blocked_domains_list",
            "oauth_tier": "mcp:access"
          }
        ]
      },
      "denominator_projection": {
        "state": "unmapped",
        "denominator_capability_id": null,
        "candidate_title": null,
        "candidate_family": null,
        "source_partition": null,
        "owner_kind": null,
        "fallback_owner": false,
        "overlap_source_control_ids": [],
        "alias": null
      }
    },
    {
      "capability_id": "blocked_domain.remove",
      "capability_version": "0.1.0",
      "title": "Remove a Blocked Domain",
      "family": "campaign-creation-configuration-workflow-lifecycle",
      "ledger_status": "draft",
      "scope_basis": "observed_dashboard",
      "parity_mode": "direct_headless",
      "business_owner": "Campaign capability owner",
      "owner_team": "Campaign capability owner",
      "surface_applicability": {
        "dashboard": {
          "state": "required",
          "rationale": "Settings removes a workspace Blocked Domain."
        },
        "rest": {
          "state": "required",
          "rationale": "The public DELETE route removes one workspace Blocked Domain."
        },
        "cli": {
          "state": "required",
          "rationale": "The blocked-domains remove command calls this route."
        },
        "sdk": {
          "state": "optional",
          "rationale": "Generated SDK parity remains downstream of contract closure."
        },
        "mcp": {
          "state": "required",
          "rationale": "The blocked_domains_remove MCP tool mirrors this route; it is listed only after this row is released."
        },
        "webhook": {
          "state": "not_applicable",
          "rationale": "Not a webhook capability."
        },
        "handoff": {
          "state": "not_applicable",
          "rationale": "No assisted provider or browser step."
        }
      },
      "wire": {
        "rest": {
          "canonical_hosts": [
            "https://api.app.firstsales.io/api/v1",
            "https://sandbox.api.app.firstsales.io/api/v1"
          ],
          "operation_ids": [
            "deleteApiV1OrganizationsOrgIdWorkspacesWsIdBlockeddomainsDomain"
          ],
          "route_patterns": [
            "/api/v1/organizations/{orgId}/workspaces/{wsId}/blocked-domains/{domain}"
          ],
          "auth_schemes": [
            "developer_key_bearer"
          ]
        },
        "cli": {
          "command_labels": [
            "blocked-domains remove"
          ],
          "required_context": [
            "org",
            "workspace",
            "domain"
          ]
        }
      },
      "proof": {
        "proof_id": "blocked-domains-remove",
        "highest_seam": "runtime",
        "source_paths": [
          "src/steps/public-api/blocked-domains/__tests__/blocked-domains.step.test.ts",
          "src/lib/mcp/__tests__/mcp-write-tools-campaign.test.ts"
        ]
      },
      "mcp": {
        "compiled": true,
        "eligible": false,
        "tools": [
          {
            "capability_id": "blocked_domain.remove",
            "capability_version": "0.1.0",
            "tool_name": "blocked_domains_remove",
            "oauth_tier": "mcp:destructive"
          }
        ]
      },
      "denominator_projection": {
        "state": "unmapped",
        "denominator_capability_id": null,
        "candidate_title": null,
        "candidate_family": null,
        "source_partition": null,
        "owner_kind": null,
        "fallback_owner": false,
        "overlap_source_control_ids": [],
        "alias": null
      }
    },
    {
      "capability_id": "campaign.analytics.inspect",
      "capability_version": "0.1.0",
      "title": "Get campaign analytics",
      "family": "campaign-creation-configuration-workflow-lifecycle",
      "ledger_status": "closed",
      "scope_basis": "observed_dashboard",
      "parity_mode": "direct_headless",
      "business_owner": "Campaign capability owner",
      "owner_team": "Campaign capability owner",
      "surface_applicability": {
        "dashboard": {
          "state": "required",
          "rationale": "Campaign analytics is an incumbent dashboard read surface."
        },
        "rest": {
          "state": "required",
          "rationale": "The public campaign analytics route is already deployed."
        },
        "cli": {
          "state": "optional",
          "rationale": "CLI parity remains documented but not part of this MCP planning slice."
        },
        "sdk": {
          "state": "optional",
          "rationale": "Generated SDK projection remains downstream of contract closure."
        },
        "mcp": {
          "state": "required",
          "rationale": "Claude needs a tenant-scoped read-only campaign analytics tool."
        },
        "webhook": {
          "state": "not_applicable",
          "rationale": "Campaign analytics is a synchronous read, not a webhook capability."
        },
        "handoff": {
          "state": "not_applicable",
          "rationale": "No assisted provider or browser step is required."
        }
      },
      "wire": {
        "rest": {
          "canonical_hosts": [
            "https://api.app.firstsales.io/api/v1",
            "https://sandbox.api.app.firstsales.io/api/v1"
          ],
          "operation_ids": [
            "getCampaignAnalytics"
          ],
          "route_patterns": [
            "/api/v1/organizations/{orgId}/workspaces/{wsId}/campaigns/{campaignId}/analytics"
          ],
          "auth_schemes": [
            "developer_key_bearer"
          ]
        },
        "cli": {
          "command_labels": [],
          "required_context": [
            "org",
            "workspace",
            "campaign"
          ]
        }
      },
      "proof": {
        "proof_id": "mcp-campaign-analytics-get",
        "highest_seam": "runtime",
        "runnable_artifacts": [
          "src/lib/public-api/__tests__/campaign-insight-read.test.ts",
          "src/steps/public-api/campaigns/__tests__/campaign-insights.step.test.ts",
          "src/lib/mcp/__tests__/product-mcp-registry.test.ts",
          "src/tests/developer-api-openapi-contract.test.ts",
          "src/tests/developer-api-wave-a-measurements.test.ts"
        ],
        "source_paths": [
          "src/lib/public-api/__tests__/campaign-insight-read.test.ts",
          "src/steps/public-api/campaigns/__tests__/campaign-insights.step.test.ts",
          "src/lib/mcp/__tests__/product-mcp-registry.test.ts",
          "src/tests/developer-api-openapi-contract.test.ts",
          "src/tests/developer-api-wave-a-measurements.test.ts"
        ],
        "generated_checks": [
          "campaign analytics remains tenant-scoped to one OAuth-granted workspace and requested campaign identity",
          "campaign analytics uses the strict shared public response schema and bounded range enum across REST and MCP"
        ],
        "covers_axes": [
          "discover",
          "inspect",
          "observe",
          "verify",
          "policy_bound"
        ]
      },
      "mcp": {
        "compiled": true,
        "eligible": true,
        "tools": [
          {
            "capability_id": "campaign.analytics.inspect",
            "capability_version": "0.1.0",
            "tool_name": "campaign_analytics_get",
            "oauth_tier": "mcp:access"
          }
        ]
      },
      "denominator_projection": {
        "state": "exact",
        "denominator_capability_id": "campaign.analytics.inspect",
        "candidate_title": "Inspect campaign analytics",
        "candidate_family": "Campaign creation, configuration, workflow, and lifecycle",
        "source_partition": "campaign_crm_inbox_copilot",
        "owner_kind": "backend_family_match",
        "fallback_owner": false,
        "overlap_source_control_ids": [
          "campaigns.analytics_and_event_preview"
        ],
        "alias": null
      }
    },
    {
      "capability_id": "campaign.create",
      "capability_version": "0.1.0",
      "title": "Create campaign",
      "family": "campaign-creation-configuration-workflow-lifecycle",
      "ledger_status": "planning_seed",
      "scope_basis": "observed_dashboard",
      "parity_mode": "direct_headless",
      "business_owner": "Campaign capability owner",
      "owner_team": "Campaign capability owner",
      "surface_applicability": {
        "dashboard": {
          "state": "required",
          "rationale": "Observed dashboard family and required incumbent creation UX."
        },
        "rest": {
          "state": "required",
          "rationale": "Public create contract is part of the bootstrap lane."
        },
        "cli": {
          "state": "required",
          "rationale": "Campaign create command exists and requires tenant context."
        },
        "sdk": {
          "state": "required",
          "rationale": "Campaign-family acceptance requires SDK parity once the contract closes."
        },
        "mcp": {
          "state": "optional",
          "rationale": "Campaign-family MCP remains a later leaf and is not bootstrap-ready."
        },
        "webhook": {
          "state": "not_applicable",
          "rationale": "Campaign creation is not a webhook capability."
        },
        "handoff": {
          "state": "not_applicable",
          "rationale": "No assisted provider or browser step exists at create time."
        }
      },
      "wire": {
        "rest": {
          "canonical_hosts": [
            "https://api.app.firstsales.io/api/v1",
            "https://sandbox.api.app.firstsales.io/api/v1"
          ],
          "operation_ids": [
            "createCampaign"
          ],
          "route_patterns": [
            "/api/v1/organizations/{orgId}/workspaces/{wsId}/campaigns"
          ],
          "auth_schemes": [
            "developer_key_bearer"
          ]
        },
        "cli": {
          "command_labels": [
            "campaigns create"
          ],
          "required_context": [
            "org",
            "workspace"
          ]
        }
      },
      "proof": {
        "proof_id": "bootstrap-campaign-create",
        "highest_seam": "contract"
      },
      "mcp": {
        "compiled": false,
        "eligible": false,
        "tools": []
      },
      "denominator_projection": {
        "state": "aliased",
        "denominator_capability_id": "campaign.create.configure",
        "candidate_title": "Configure new campaign basics before first save",
        "candidate_family": "Campaign creation, configuration, workflow, and lifecycle",
        "source_partition": "campaign_crm_inbox_copilot",
        "owner_kind": "backend_family_match",
        "fallback_owner": false,
        "overlap_source_control_ids": [],
        "alias": {
          "rationale": "Both authorities bind initial campaign configuration to the createCampaign public operation and campaigns create CLI command.",
          "evidence_refs": [
            "capabilities/capability-denominator.v1.json",
            "capabilities/capability-ledger.v1.json",
            "capabilities/public-api-synchronous-measurements.v1.json",
            "src/steps/public-api/campaigns/create-campaign.step.ts"
          ],
          "evidence": {
            "kind": "rest_route",
            "method": "POST",
            "path": "/api/v1/organizations/{orgId}/workspaces/{wsId}/campaigns",
            "operation_id": "createCampaign",
            "source_path": "src/steps/public-api/campaigns/create-campaign.step.ts"
          },
          "family_review": null,
          "privilege_class_review": {
            "reviewed": true,
            "ledger_privilege_class": "reversible_write",
            "rationale": "The legacy planning-seed ledger row predates the explicit risk field; its one-effect create route and measurement evidence prove the same reversible-write class recorded by the denominator.",
            "evidence_refs": [
              "capabilities/capability-ledger.v1.json",
              "capabilities/public-api-synchronous-measurements.v1.json",
              "src/steps/public-api/campaigns/create-campaign.step.ts"
            ]
          }
        }
      }
    },
    {
      "capability_id": "campaign.event.inspect",
      "capability_version": "0.1.0",
      "title": "List campaign events",
      "family": "campaign-creation-configuration-workflow-lifecycle",
      "ledger_status": "closed",
      "scope_basis": "observed_dashboard",
      "parity_mode": "direct_headless",
      "business_owner": "Campaign capability owner",
      "owner_team": "Campaign capability owner",
      "surface_applicability": {
        "dashboard": {
          "state": "required",
          "rationale": "Campaign events is an incumbent dashboard read surface."
        },
        "rest": {
          "state": "required",
          "rationale": "The public campaign events route is already deployed."
        },
        "cli": {
          "state": "optional",
          "rationale": "CLI parity remains documented but not part of this MCP planning slice."
        },
        "sdk": {
          "state": "optional",
          "rationale": "Generated SDK projection remains downstream of contract closure."
        },
        "mcp": {
          "state": "required",
          "rationale": "Claude needs a tenant-scoped read-only campaign events tool."
        },
        "webhook": {
          "state": "not_applicable",
          "rationale": "Campaign events is a synchronous read, not a webhook capability."
        },
        "handoff": {
          "state": "not_applicable",
          "rationale": "No assisted provider or browser step is required."
        }
      },
      "wire": {
        "rest": {
          "canonical_hosts": [
            "https://api.app.firstsales.io/api/v1",
            "https://sandbox.api.app.firstsales.io/api/v1"
          ],
          "operation_ids": [
            "getCampaignEvents"
          ],
          "route_patterns": [
            "/api/v1/organizations/{orgId}/workspaces/{wsId}/campaigns/{campaignId}/events"
          ],
          "auth_schemes": [
            "developer_key_bearer"
          ]
        },
        "cli": {
          "command_labels": [],
          "required_context": [
            "org",
            "workspace",
            "campaign"
          ]
        }
      },
      "proof": {
        "proof_id": "mcp-campaign-events-list",
        "highest_seam": "runtime",
        "runnable_artifacts": [
          "src/lib/public-api/__tests__/campaign-insight-read.test.ts",
          "src/steps/public-api/campaigns/__tests__/campaign-events.step.test.ts",
          "src/lib/mcp/__tests__/product-mcp-registry.test.ts",
          "src/tests/developer-api-openapi-contract.test.ts",
          "src/tests/developer-api-wave-a-measurements.test.ts"
        ],
        "source_paths": [
          "src/lib/public-api/__tests__/campaign-insight-read.test.ts",
          "src/steps/public-api/campaigns/__tests__/campaign-events.step.test.ts",
          "src/lib/mcp/__tests__/product-mcp-registry.test.ts",
          "src/tests/developer-api-openapi-contract.test.ts",
          "src/tests/developer-api-wave-a-measurements.test.ts"
        ],
        "generated_checks": [
          "campaign event listing remains tenant-scoped to one OAuth-granted workspace and requested campaign identity",
          "campaign event pagination enforces the 100-event response ceiling across REST and MCP"
        ],
        "covers_axes": [
          "discover",
          "inspect",
          "observe",
          "verify",
          "policy_bound"
        ]
      },
      "mcp": {
        "compiled": true,
        "eligible": true,
        "tools": [
          {
            "capability_id": "campaign.event.inspect",
            "capability_version": "0.1.0",
            "tool_name": "campaign_events_list",
            "oauth_tier": "mcp:access"
          }
        ]
      },
      "denominator_projection": {
        "state": "exact",
        "denominator_capability_id": "campaign.event.inspect",
        "candidate_title": "Inspect campaign event/log stream",
        "candidate_family": "Campaign creation, configuration, workflow, and lifecycle",
        "source_partition": "campaign_crm_inbox_copilot",
        "owner_kind": "backend_family_match",
        "fallback_owner": false,
        "overlap_source_control_ids": [
          "campaigns.analytics_and_event_preview"
        ],
        "alias": null
      }
    },
    {
      "capability_id": "campaign.get",
      "capability_version": "0.1.0",
      "title": "Get campaign",
      "family": "campaign-creation-configuration-workflow-lifecycle",
      "ledger_status": "closed",
      "scope_basis": "observed_dashboard",
      "parity_mode": "direct_headless",
      "business_owner": "Campaign capability owner",
      "owner_team": "Campaign capability owner",
      "surface_applicability": {
        "dashboard": {
          "state": "required",
          "rationale": "Campaign detail is an incumbent dashboard read surface."
        },
        "rest": {
          "state": "required",
          "rationale": "The public campaign detail route is already deployed."
        },
        "cli": {
          "state": "required",
          "rationale": "The checked-in CLI already exposes campaigns get."
        },
        "sdk": {
          "state": "optional",
          "rationale": "Generated SDK projection remains downstream of contract closure."
        },
        "mcp": {
          "state": "required",
          "rationale": "Claude needs a tenant-scoped read-only campaign detail tool."
        },
        "webhook": {
          "state": "not_applicable",
          "rationale": "Campaign detail is a synchronous read, not a webhook capability."
        },
        "handoff": {
          "state": "not_applicable",
          "rationale": "No assisted provider or browser step is required."
        }
      },
      "wire": {
        "rest": {
          "canonical_hosts": [
            "https://api.app.firstsales.io/api/v1",
            "https://sandbox.api.app.firstsales.io/api/v1"
          ],
          "operation_ids": [
            "getCampaign"
          ],
          "route_patterns": [
            "/api/v1/organizations/{orgId}/workspaces/{wsId}/campaigns/{campaignId}"
          ],
          "auth_schemes": [
            "developer_key_bearer"
          ]
        },
        "cli": {
          "command_labels": [
            "campaigns get"
          ],
          "required_context": [
            "org",
            "workspace",
            "campaign"
          ]
        }
      },
      "proof": {
        "proof_id": "mcp-campaign-get",
        "highest_seam": "runtime",
        "runnable_artifacts": [
          "src/lib/public-api/__tests__/campaign-get.test.ts",
          "src/steps/public-api/campaigns/__tests__/campaigns.step.test.ts",
          "src/lib/mcp/__tests__/product-mcp-registry.test.ts",
          "src/tests/developer-api-openapi-contract.test.ts",
          "src/tests/developer-api-wave-a-measurements.test.ts",
          "firstsales-cli/tests/resource-commands.test.js"
        ],
        "source_paths": [
          "src/lib/public-api/__tests__/campaign-get.test.ts",
          "src/steps/public-api/campaigns/__tests__/campaigns.step.test.ts",
          "src/lib/mcp/__tests__/product-mcp-registry.test.ts",
          "src/tests/developer-api-openapi-contract.test.ts",
          "src/tests/developer-api-wave-a-measurements.test.ts",
          "firstsales-cli/tests/resource-commands.test.js"
        ],
        "generated_checks": [
          "campaign detail remains tenant-scoped to the authorized organization and workspace",
          "campaign detail preserves the public response allow-list"
        ],
        "covers_axes": [
          "discover",
          "inspect",
          "observe",
          "verify",
          "policy_bound"
        ]
      },
      "mcp": {
        "compiled": true,
        "eligible": true,
        "tools": [
          {
            "capability_id": "campaign.get",
            "capability_version": "0.1.0",
            "tool_name": "campaigns_get",
            "oauth_tier": "mcp:access"
          }
        ]
      },
      "denominator_projection": {
        "state": "unmapped",
        "denominator_capability_id": null,
        "candidate_title": null,
        "candidate_family": null,
        "source_partition": null,
        "owner_kind": null,
        "fallback_owner": false,
        "overlap_source_control_ids": [],
        "alias": null
      }
    },
    {
      "capability_id": "campaign.lead.inspect_list",
      "capability_version": "0.1.0",
      "title": "List campaign leads",
      "family": "campaign-creation-configuration-workflow-lifecycle",
      "ledger_status": "planning_seed",
      "scope_basis": "observed_dashboard",
      "parity_mode": "direct_headless",
      "business_owner": "Campaign capability owner",
      "owner_team": "Campaign capability owner",
      "surface_applicability": {
        "dashboard": {
          "state": "required",
          "rationale": "Campaign leads drill-down is an incumbent dashboard read surface."
        },
        "rest": {
          "state": "required",
          "rationale": "The public campaign leads route is already deployed."
        },
        "cli": {
          "state": "optional",
          "rationale": "CLI parity remains documented but not part of this MCP planning slice."
        },
        "sdk": {
          "state": "optional",
          "rationale": "Generated SDK projection remains downstream of contract closure."
        },
        "mcp": {
          "state": "required",
          "rationale": "Claude needs a tenant-scoped read-only campaign leads tool once release evidence closes."
        },
        "webhook": {
          "state": "not_applicable",
          "rationale": "Campaign leads is a synchronous read, not a webhook capability."
        },
        "handoff": {
          "state": "not_applicable",
          "rationale": "No assisted provider or browser step is required."
        }
      },
      "wire": {
        "rest": {
          "canonical_hosts": [
            "https://api.app.firstsales.io/api/v1",
            "https://sandbox.api.app.firstsales.io/api/v1"
          ],
          "operation_ids": [
            "listCampaignLeads"
          ],
          "route_patterns": [
            "/api/v1/organizations/{orgId}/workspaces/{wsId}/campaigns/{campaignId}/leads"
          ],
          "auth_schemes": [
            "developer_key_bearer"
          ]
        },
        "cli": {
          "command_labels": [],
          "required_context": [
            "org",
            "workspace",
            "campaign"
          ]
        }
      },
      "proof": {
        "proof_id": "bootstrap-campaign-leads-list",
        "highest_seam": "runtime",
        "source_paths": [
          "src/lib/public-api/__tests__/campaign-extra-read.test.ts",
          "src/lib/mcp/__tests__/product-mcp-registry.test.ts"
        ]
      },
      "mcp": {
        "compiled": true,
        "eligible": false,
        "tools": [
          {
            "capability_id": "campaign.lead.inspect_list",
            "capability_version": "0.1.0",
            "tool_name": "campaign_leads_list",
            "oauth_tier": "mcp:access"
          }
        ]
      },
      "denominator_projection": {
        "state": "unmapped",
        "denominator_capability_id": null,
        "candidate_title": null,
        "candidate_family": null,
        "source_partition": null,
        "owner_kind": null,
        "fallback_owner": false,
        "overlap_source_control_ids": [],
        "alias": null
      }
    },
    {
      "capability_id": "campaign.list",
      "capability_version": "0.1.0",
      "title": "List campaigns",
      "family": "campaign-creation-configuration-workflow-lifecycle",
      "ledger_status": "released",
      "scope_basis": "observed_dashboard",
      "parity_mode": "direct_headless",
      "business_owner": "Campaign capability owner",
      "owner_team": "Campaign capability owner",
      "surface_applicability": {
        "dashboard": {
          "state": "required",
          "rationale": "Campaign listing is an incumbent dashboard read surface."
        },
        "rest": {
          "state": "required",
          "rationale": "The public campaign listing route is already deployed."
        },
        "cli": {
          "state": "optional",
          "rationale": "CLI parity can consume the existing public listing contract later."
        },
        "sdk": {
          "state": "optional",
          "rationale": "Generated SDK projection is not part of this MCP repair."
        },
        "mcp": {
          "state": "required",
          "rationale": "Claude needs a tenant-scoped read-only campaign listing tool."
        },
        "webhook": {
          "state": "not_applicable",
          "rationale": "Campaign listing is a synchronous read, not a webhook capability."
        },
        "handoff": {
          "state": "not_applicable",
          "rationale": "No assisted provider or browser step is required."
        }
      },
      "wire": {
        "rest": {
          "canonical_hosts": [
            "https://api.app.firstsales.io/api/v1",
            "https://sandbox.api.app.firstsales.io/api/v1"
          ],
          "operation_ids": [
            "listCampaigns"
          ],
          "route_patterns": [
            "/api/v1/organizations/{orgId}/workspaces/{wsId}/campaigns"
          ],
          "auth_schemes": [
            "developer_key_bearer"
          ]
        },
        "cli": {
          "command_labels": [],
          "required_context": [
            "org",
            "workspace"
          ]
        }
      },
      "proof": {
        "proof_id": "mcp-campaign-list",
        "highest_seam": "runtime",
        "source_paths": [
          "src/lib/mcp/__tests__/product-mcp-registry.test.ts",
          "src/lib/mcp/__tests__/mcp-http-route.test.ts"
        ]
      },
      "mcp": {
        "compiled": true,
        "eligible": true,
        "tools": [
          {
            "capability_id": "campaign.list",
            "capability_version": "0.1.0",
            "tool_name": "campaigns_list",
            "oauth_tier": "mcp:access"
          }
        ]
      },
      "denominator_projection": {
        "state": "unmapped",
        "denominator_capability_id": null,
        "candidate_title": null,
        "candidate_family": null,
        "source_partition": null,
        "owner_kind": null,
        "fallback_owner": false,
        "overlap_source_control_ids": [],
        "alias": null
      }
    },
    {
      "capability_id": "campaign.progress.inspect",
      "capability_version": "0.1.0",
      "title": "Get campaign progress",
      "family": "campaign-creation-configuration-workflow-lifecycle",
      "ledger_status": "closed",
      "scope_basis": "observed_dashboard",
      "parity_mode": "direct_headless",
      "business_owner": "Campaign capability owner",
      "owner_team": "Campaign capability owner",
      "surface_applicability": {
        "dashboard": {
          "state": "required",
          "rationale": "Campaign progress is an incumbent dashboard read surface."
        },
        "rest": {
          "state": "required",
          "rationale": "The public campaign progress route is already deployed."
        },
        "cli": {
          "state": "optional",
          "rationale": "CLI parity remains documented but not part of this MCP planning slice."
        },
        "sdk": {
          "state": "optional",
          "rationale": "Generated SDK projection remains downstream of contract closure."
        },
        "mcp": {
          "state": "required",
          "rationale": "Claude needs a tenant-scoped read-only campaign progress tool."
        },
        "webhook": {
          "state": "not_applicable",
          "rationale": "Campaign progress is a synchronous read, not a webhook capability."
        },
        "handoff": {
          "state": "not_applicable",
          "rationale": "No assisted provider or browser step is required."
        }
      },
      "wire": {
        "rest": {
          "canonical_hosts": [
            "https://api.app.firstsales.io/api/v1",
            "https://sandbox.api.app.firstsales.io/api/v1"
          ],
          "operation_ids": [
            "getCampaignProgress"
          ],
          "route_patterns": [
            "/api/v1/organizations/{orgId}/workspaces/{wsId}/campaigns/{campaignId}/progress"
          ],
          "auth_schemes": [
            "developer_key_bearer"
          ]
        },
        "cli": {
          "command_labels": [],
          "required_context": [
            "org",
            "workspace",
            "campaign"
          ]
        }
      },
      "proof": {
        "proof_id": "mcp-campaign-progress-get",
        "highest_seam": "runtime",
        "runnable_artifacts": [
          "src/lib/public-api/__tests__/campaign-insight-read.test.ts",
          "src/steps/public-api/campaigns/__tests__/campaign-insights.step.test.ts",
          "src/lib/mcp/__tests__/product-mcp-registry.test.ts",
          "src/tests/developer-api-openapi-contract.test.ts",
          "src/tests/developer-api-wave-a-measurements.test.ts"
        ],
        "source_paths": [
          "src/lib/public-api/__tests__/campaign-insight-read.test.ts",
          "src/steps/public-api/campaigns/__tests__/campaign-insights.step.test.ts",
          "src/lib/mcp/__tests__/product-mcp-registry.test.ts",
          "src/tests/developer-api-openapi-contract.test.ts",
          "src/tests/developer-api-wave-a-measurements.test.ts"
        ],
        "generated_checks": [
          "campaign progress remains tenant-scoped to one OAuth-granted workspace and requested campaign identity",
          "campaign progress preserves its strict bounded-percentage public projection"
        ],
        "covers_axes": [
          "discover",
          "inspect",
          "observe",
          "verify",
          "policy_bound"
        ]
      },
      "mcp": {
        "compiled": true,
        "eligible": true,
        "tools": [
          {
            "capability_id": "campaign.progress.inspect",
            "capability_version": "0.1.0",
            "tool_name": "campaign_progress_get",
            "oauth_tier": "mcp:access"
          }
        ]
      },
      "denominator_projection": {
        "state": "unmapped",
        "denominator_capability_id": null,
        "candidate_title": null,
        "candidate_family": null,
        "source_partition": null,
        "owner_kind": null,
        "fallback_owner": false,
        "overlap_source_control_ids": [],
        "alias": null
      }
    },
    {
      "capability_id": "campaign.source.inspect_list",
      "capability_version": "0.1.0",
      "title": "Get campaign sources",
      "family": "campaign-creation-configuration-workflow-lifecycle",
      "ledger_status": "planning_seed",
      "scope_basis": "observed_dashboard",
      "parity_mode": "direct_headless",
      "business_owner": "Campaign capability owner",
      "owner_team": "Campaign capability owner",
      "surface_applicability": {
        "dashboard": {
          "state": "required",
          "rationale": "Campaign source inventory is an incumbent dashboard read surface."
        },
        "rest": {
          "state": "required",
          "rationale": "The public campaign sources route is already deployed."
        },
        "cli": {
          "state": "optional",
          "rationale": "CLI parity remains documented but not part of this MCP planning slice."
        },
        "sdk": {
          "state": "optional",
          "rationale": "Generated SDK projection remains downstream of contract closure."
        },
        "mcp": {
          "state": "required",
          "rationale": "Claude needs a tenant-scoped read-only campaign sources tool once release evidence closes."
        },
        "webhook": {
          "state": "not_applicable",
          "rationale": "Campaign sources is a synchronous read, not a webhook capability."
        },
        "handoff": {
          "state": "not_applicable",
          "rationale": "No assisted provider or browser step is required."
        }
      },
      "wire": {
        "rest": {
          "canonical_hosts": [
            "https://api.app.firstsales.io/api/v1",
            "https://sandbox.api.app.firstsales.io/api/v1"
          ],
          "operation_ids": [
            "getCampaignSources"
          ],
          "route_patterns": [
            "/api/v1/organizations/{orgId}/workspaces/{wsId}/campaigns/{campaignId}/sources"
          ],
          "auth_schemes": [
            "developer_key_bearer"
          ]
        },
        "cli": {
          "command_labels": [],
          "required_context": [
            "org",
            "workspace",
            "campaign"
          ]
        }
      },
      "proof": {
        "proof_id": "bootstrap-campaign-sources-get",
        "highest_seam": "runtime",
        "runnable_artifacts": [
          "src/lib/public-api/__tests__/campaign-extra-read.test.ts",
          "src/steps/public-api/campaigns/__tests__/campaign-sources.step.test.ts",
          "src/lib/mcp/__tests__/product-mcp-registry.test.ts",
          "src/tests/developer-api-openapi-contract.test.ts",
          "src/tests/developer-api-wave-a-measurements.test.ts"
        ],
        "source_paths": [
          "src/lib/public-api/__tests__/campaign-extra-read.test.ts",
          "src/steps/public-api/campaigns/__tests__/campaign-sources.step.test.ts",
          "src/lib/mcp/__tests__/product-mcp-registry.test.ts",
          "src/tests/developer-api-openapi-contract.test.ts",
          "src/tests/developer-api-wave-a-measurements.test.ts"
        ],
        "generated_checks": [
          "campaign sources remain tenant-scoped to one OAuth-granted workspace and requested campaign identity",
          "unbounded harvester-tool cardinality remains explicit and prevents MCP promotion"
        ],
        "covers_axes": [
          "discover",
          "inspect",
          "observe",
          "verify",
          "policy_bound"
        ]
      },
      "mcp": {
        "compiled": true,
        "eligible": false,
        "tools": [
          {
            "capability_id": "campaign.source.inspect_list",
            "capability_version": "0.1.0",
            "tool_name": "campaign_sources_get",
            "oauth_tier": "mcp:access"
          }
        ]
      },
      "denominator_projection": {
        "state": "unmapped",
        "denominator_capability_id": null,
        "candidate_title": null,
        "candidate_family": null,
        "source_partition": null,
        "owner_kind": null,
        "fallback_owner": false,
        "overlap_source_control_ids": [],
        "alias": null
      }
    },
    {
      "capability_id": "campaign.workflow.inspect",
      "capability_version": "0.1.0",
      "title": "Get campaign workflow",
      "family": "campaign-creation-configuration-workflow-lifecycle",
      "ledger_status": "closed",
      "scope_basis": "observed_dashboard",
      "parity_mode": "direct_headless",
      "business_owner": "Campaign capability owner",
      "owner_team": "Campaign capability owner",
      "surface_applicability": {
        "dashboard": {
          "state": "required",
          "rationale": "Campaign workflow is an incumbent dashboard read surface."
        },
        "rest": {
          "state": "required",
          "rationale": "The public campaign workflow route is already deployed."
        },
        "cli": {
          "state": "optional",
          "rationale": "CLI parity remains documented but not part of this MCP planning slice."
        },
        "sdk": {
          "state": "optional",
          "rationale": "Generated SDK projection remains downstream of contract closure."
        },
        "mcp": {
          "state": "required",
          "rationale": "Claude needs a tenant-scoped read-only campaign workflow tool."
        },
        "webhook": {
          "state": "not_applicable",
          "rationale": "Campaign workflow is a synchronous read, not a webhook capability."
        },
        "handoff": {
          "state": "not_applicable",
          "rationale": "No assisted provider or browser step is required."
        }
      },
      "wire": {
        "rest": {
          "canonical_hosts": [
            "https://api.app.firstsales.io/api/v1",
            "https://sandbox.api.app.firstsales.io/api/v1"
          ],
          "operation_ids": [
            "getCampaignWorkflow"
          ],
          "route_patterns": [
            "/api/v1/organizations/{orgId}/workspaces/{wsId}/campaigns/{campaignId}/workflow"
          ],
          "auth_schemes": [
            "developer_key_bearer"
          ]
        },
        "cli": {
          "command_labels": [],
          "required_context": [
            "org",
            "workspace",
            "campaign"
          ]
        }
      },
      "proof": {
        "proof_id": "mcp-campaign-workflow-get",
        "highest_seam": "runtime",
        "runnable_artifacts": [
          "src/lib/public-api/__tests__/campaign-extra-read.test.ts",
          "src/steps/public-api/campaigns/__tests__/campaign-workflow.step.test.ts",
          "src/lib/mcp/__tests__/product-mcp-registry.test.ts",
          "src/tests/developer-api-openapi-contract.test.ts",
          "src/tests/developer-api-wave-a-measurements.test.ts"
        ],
        "source_paths": [
          "src/lib/public-api/__tests__/campaign-extra-read.test.ts",
          "src/steps/public-api/campaigns/__tests__/campaign-workflow.step.test.ts",
          "src/lib/mcp/__tests__/product-mcp-registry.test.ts",
          "src/tests/developer-api-openapi-contract.test.ts",
          "src/tests/developer-api-wave-a-measurements.test.ts"
        ],
        "generated_checks": [
          "campaign workflow remains tenant-scoped to one OAuth-granted workspace and requested campaign identity",
          "campaign workflow uses the strict shared public response schema across REST and MCP"
        ],
        "covers_axes": [
          "discover",
          "inspect",
          "observe",
          "verify",
          "policy_bound"
        ]
      },
      "mcp": {
        "compiled": true,
        "eligible": true,
        "tools": [
          {
            "capability_id": "campaign.workflow.inspect",
            "capability_version": "0.1.0",
            "tool_name": "campaign_workflow_get",
            "oauth_tier": "mcp:access"
          }
        ]
      },
      "denominator_projection": {
        "state": "unmapped",
        "denominator_capability_id": null,
        "candidate_title": null,
        "candidate_family": null,
        "source_partition": null,
        "owner_kind": null,
        "fallback_owner": false,
        "overlap_source_control_ids": [],
        "alias": null
      }
    },
    {
      "capability_id": "campaign.workflow.update_targets",
      "capability_version": "0.1.0",
      "title": "Update campaign workflow lists and senders",
      "family": "campaign-creation-configuration-workflow-lifecycle",
      "ledger_status": "draft",
      "scope_basis": "observed_dashboard",
      "parity_mode": "direct_headless",
      "business_owner": "Campaign capability owner",
      "owner_team": "Campaign capability owner",
      "surface_applicability": {
        "dashboard": {
          "state": "required",
          "rationale": "The campaign builder edits include lists and senders in the dashboard."
        },
        "rest": {
          "state": "required",
          "rationale": "The public PATCH route replaces include lists and scheduler senders."
        },
        "cli": {
          "state": "optional",
          "rationale": "The published CLI reaches the route through its generic api command until a named command ships."
        },
        "sdk": {
          "state": "optional",
          "rationale": "Generated SDK parity remains downstream of contract closure."
        },
        "mcp": {
          "state": "required",
          "rationale": "The campaign_workflow_update MCP tool mirrors this route; it is listed only after this row is released."
        },
        "webhook": {
          "state": "not_applicable",
          "rationale": "Not a webhook capability."
        },
        "handoff": {
          "state": "not_applicable",
          "rationale": "No assisted provider or browser step."
        }
      },
      "wire": {
        "rest": {
          "canonical_hosts": [
            "https://api.app.firstsales.io/api/v1",
            "https://sandbox.api.app.firstsales.io/api/v1"
          ],
          "operation_ids": [
            "updateCampaignWorkflowTargets"
          ],
          "route_patterns": [
            "/api/v1/organizations/{orgId}/workspaces/{wsId}/campaigns/{campaignId}/workflow"
          ],
          "auth_schemes": [
            "developer_key_bearer"
          ],
          "evidence_bounds": [
            {
              "target": "request.includeListIds",
              "kind": "min_items",
              "min": 1,
              "source": "runtime+openapi"
            },
            {
              "target": "request.senderConnectorIds",
              "kind": "min_items",
              "min": 1,
              "source": "runtime+openapi"
            }
          ]
        },
        "cli": {
          "command_labels": [],
          "required_context": [
            "org",
            "workspace",
            "campaign"
          ]
        }
      },
      "proof": {
        "proof_id": "campaign-workflow-update-targets",
        "highest_seam": "runtime",
        "source_paths": [
          "src/lib/public-api/__tests__/campaign-workflow-targets.db.test.ts",
          "src/steps/public-api/campaigns/__tests__/update-campaign-workflow-targets.step.test.ts",
          "src/lib/mcp/__tests__/mcp-write-tools-campaign.test.ts"
        ]
      },
      "mcp": {
        "compiled": true,
        "eligible": false,
        "tools": [
          {
            "capability_id": "campaign.workflow.update_targets",
            "capability_version": "0.1.0",
            "tool_name": "campaign_workflow_update",
            "oauth_tier": "mcp:write"
          }
        ]
      },
      "denominator_projection": {
        "state": "unmapped",
        "denominator_capability_id": null,
        "candidate_title": null,
        "candidate_family": null,
        "source_partition": null,
        "owner_kind": null,
        "fallback_owner": false,
        "overlap_source_control_ids": [],
        "alias": null
      }
    },
    {
      "capability_id": "company.get",
      "capability_version": "0.1.0",
      "title": "Get company",
      "family": "company-read-and-dedup-workflow-lifecycle",
      "ledger_status": "closed",
      "scope_basis": "observed_dashboard",
      "parity_mode": "direct_headless",
      "business_owner": "Company capability owner",
      "owner_team": "Company capability owner",
      "surface_applicability": {
        "dashboard": {
          "state": "required",
          "rationale": "Company detail is an incumbent dashboard read surface."
        },
        "rest": {
          "state": "required",
          "rationale": "The public company detail route is already deployed."
        },
        "cli": {
          "state": "optional",
          "rationale": "CLI projection remains outside this MCP repair."
        },
        "sdk": {
          "state": "optional",
          "rationale": "Generated SDK projection remains downstream of contract closure."
        },
        "mcp": {
          "state": "required",
          "rationale": "Claude needs a tenant-scoped read-only company detail tool."
        },
        "webhook": {
          "state": "not_applicable",
          "rationale": "Company detail is a synchronous read, not a webhook capability."
        },
        "handoff": {
          "state": "not_applicable",
          "rationale": "No assisted provider or browser step is required."
        }
      },
      "wire": {
        "rest": {
          "canonical_hosts": [
            "https://api.app.firstsales.io/api/v1",
            "https://sandbox.api.app.firstsales.io/api/v1"
          ],
          "operation_ids": [
            "getCompany"
          ],
          "route_patterns": [
            "/api/v1/organizations/{orgId}/workspaces/{wsId}/companies/{companyId}"
          ],
          "auth_schemes": [
            "developer_key_bearer"
          ]
        },
        "cli": {
          "command_labels": [],
          "required_context": [
            "org",
            "workspace",
            "company"
          ]
        }
      },
      "proof": {
        "proof_id": "mcp-company-get",
        "highest_seam": "runtime",
        "runnable_artifacts": [
          "src/lib/public-api/__tests__/company-read.test.ts",
          "src/steps/public-api/companies/__tests__/companies-crud.step.test.ts",
          "src/lib/mcp/__tests__/product-mcp-registry.test.ts",
          "src/tests/developer-api-openapi-contract.test.ts",
          "src/tests/developer-api-wave-a-measurements.test.ts"
        ],
        "source_paths": [
          "src/lib/public-api/__tests__/company-read.test.ts",
          "src/lib/mcp/__tests__/product-mcp-registry.test.ts",
          "src/tests/developer-api-openapi-contract.test.ts",
          "src/tests/developer-api-wave-a-measurements.test.ts"
        ],
        "generated_checks": [
          "company detail remains tenant-scoped to one OAuth-granted workspace and the requested company identity",
          "company detail preserves the strict public response allow-list"
        ],
        "covers_axes": [
          "discover",
          "inspect",
          "observe",
          "verify",
          "policy_bound"
        ]
      },
      "mcp": {
        "compiled": true,
        "eligible": true,
        "tools": [
          {
            "capability_id": "company.get",
            "capability_version": "0.1.0",
            "tool_name": "companies_get",
            "oauth_tier": "mcp:access"
          }
        ]
      },
      "denominator_projection": {
        "state": "aliased",
        "denominator_capability_id": "company.inspect",
        "candidate_title": "Inspect company detail",
        "candidate_family": "Companies, deals, pipelines, and activities",
        "source_partition": "campaign_crm_inbox_copilot",
        "owner_kind": "backend_family_match",
        "fallback_owner": false,
        "overlap_source_control_ids": [
          "companies.crud"
        ],
        "alias": {
          "rationale": "Both authorities bind company detail inspection to the getCompany public operation.",
          "evidence_refs": [
            "capabilities/capability-denominator.v1.json",
            "capabilities/capability-ledger.v1.json",
            "src/steps/public-api/companies/get-company.step.ts"
          ],
          "evidence": {
            "kind": "rest_route",
            "method": "GET",
            "path": "/api/v1/organizations/{orgId}/workspaces/{wsId}/companies/{companyId}",
            "operation_id": "getCompany",
            "source_path": "src/steps/public-api/companies/get-company.step.ts"
          },
          "family_review": {
            "reviewed": true,
            "rationale": "The ledger uses a company-specific read family while the denominator groups the identical route under the broader CRM family.",
            "evidence_refs": [
              "capabilities/capability-ledger.v1.json",
              "capabilities/capability-denominator.v1.json",
              "src/steps/public-api/companies/get-company.step.ts"
            ]
          },
          "privilege_class_review": null
        }
      }
    },
    {
      "capability_id": "company.import",
      "capability_version": "0.1.0",
      "title": "Import companies",
      "family": "company-read-and-dedup-workflow-lifecycle",
      "ledger_status": "draft",
      "scope_basis": "observed_dashboard",
      "parity_mode": "direct_headless",
      "business_owner": "Company capability owner",
      "owner_team": "Company capability owner",
      "surface_applicability": {
        "dashboard": {
          "state": "required",
          "rationale": "The dashboard creates companies one at a time and backfills them from contacts."
        },
        "rest": {
          "state": "required",
          "rationale": "The public POST route creates up to 10,000 companies with normalized-domain dedup."
        },
        "cli": {
          "state": "optional",
          "rationale": "The published CLI reaches the route through its generic api command until a named command ships."
        },
        "sdk": {
          "state": "optional",
          "rationale": "Generated SDK parity remains downstream of contract closure."
        },
        "mcp": {
          "state": "not_applicable",
          "rationale": "No MCP write exposure is claimed for company import."
        },
        "webhook": {
          "state": "not_applicable",
          "rationale": "Not a webhook capability."
        },
        "handoff": {
          "state": "not_applicable",
          "rationale": "No assisted provider or browser step."
        }
      },
      "wire": {
        "rest": {
          "canonical_hosts": [
            "https://api.app.firstsales.io/api/v1",
            "https://sandbox.api.app.firstsales.io/api/v1"
          ],
          "operation_ids": [
            "importCompanies"
          ],
          "route_patterns": [
            "/api/v1/organizations/{orgId}/workspaces/{wsId}/companies/imports"
          ],
          "auth_schemes": [
            "developer_key_bearer"
          ],
          "evidence_bounds": [
            {
              "target": "request.companies",
              "kind": "min_items",
              "min": 1,
              "source": "runtime+openapi"
            },
            {
              "target": "request.companies",
              "kind": "max_items",
              "max": 10000,
              "source": "runtime+openapi"
            }
          ]
        },
        "cli": {
          "command_labels": [],
          "required_context": [
            "org",
            "workspace"
          ]
        }
      },
      "proof": {
        "proof_id": "company-import",
        "highest_seam": "runtime",
        "source_paths": [
          "src/steps/public-api/companies/__tests__/company-imports.step.test.ts",
          "src/lib/company/__tests__/company-domain-write.test.ts"
        ]
      },
      "mcp": {
        "compiled": false,
        "eligible": false,
        "tools": []
      },
      "denominator_projection": {
        "state": "unmapped",
        "denominator_capability_id": null,
        "candidate_title": null,
        "candidate_family": null,
        "source_partition": null,
        "owner_kind": null,
        "fallback_owner": false,
        "overlap_source_control_ids": [],
        "alias": null
      }
    },
    {
      "capability_id": "company.list",
      "capability_version": "0.1.0",
      "title": "List companies",
      "family": "company-read-and-dedup-workflow-lifecycle",
      "ledger_status": "closed",
      "scope_basis": "observed_dashboard",
      "parity_mode": "direct_headless",
      "business_owner": "Company capability owner",
      "owner_team": "Company capability owner",
      "surface_applicability": {
        "dashboard": {
          "state": "required",
          "rationale": "Company listing is an incumbent dashboard read surface."
        },
        "rest": {
          "state": "required",
          "rationale": "The public company listing route is already deployed."
        },
        "cli": {
          "state": "optional",
          "rationale": "CLI projection remains outside this MCP repair."
        },
        "sdk": {
          "state": "optional",
          "rationale": "Generated SDK projection remains downstream of contract closure."
        },
        "mcp": {
          "state": "required",
          "rationale": "Claude needs a tenant-scoped read-only company listing tool."
        },
        "webhook": {
          "state": "not_applicable",
          "rationale": "Company listing is a synchronous read, not a webhook capability."
        },
        "handoff": {
          "state": "not_applicable",
          "rationale": "No assisted provider or browser step is required."
        }
      },
      "wire": {
        "rest": {
          "canonical_hosts": [
            "https://api.app.firstsales.io/api/v1",
            "https://sandbox.api.app.firstsales.io/api/v1"
          ],
          "operation_ids": [
            "listCompanies"
          ],
          "route_patterns": [
            "/api/v1/organizations/{orgId}/workspaces/{wsId}/companies"
          ],
          "auth_schemes": [
            "developer_key_bearer"
          ],
          "evidence_bounds": [
            {
              "target": "query.page",
              "kind": "integer_range",
              "min": 1,
              "max": 9007199254740991,
              "default": 1,
              "source": "runtime+openapi+mcp"
            },
            {
              "target": "query.limit",
              "kind": "integer_range",
              "min": 1,
              "max": 100,
              "default": 20,
              "source": "runtime+openapi+mcp"
            },
            {
              "target": "response.companies",
              "kind": "max_items",
              "max": 100,
              "source": "runtime+openapi+mcp"
            }
          ]
        },
        "cli": {
          "command_labels": [],
          "required_context": [
            "org",
            "workspace"
          ]
        }
      },
      "proof": {
        "proof_id": "mcp-company-list",
        "highest_seam": "runtime",
        "runnable_artifacts": [
          "src/lib/public-api/__tests__/company-read.test.ts",
          "src/steps/public-api/companies/__tests__/companies-crud.step.test.ts",
          "src/lib/mcp/__tests__/product-mcp-registry.test.ts",
          "src/tests/developer-api-openapi-contract.test.ts",
          "src/tests/developer-api-wave-a-measurements.test.ts"
        ],
        "source_paths": [
          "src/lib/public-api/__tests__/company-read.test.ts",
          "src/lib/mcp/__tests__/product-mcp-registry.test.ts",
          "src/tests/developer-api-openapi-contract.test.ts",
          "src/tests/developer-api-wave-a-measurements.test.ts"
        ],
        "generated_checks": [
          "company listing remains tenant-scoped to one OAuth-granted workspace",
          "company listing preserves exact pagination bounds and the public response allow-list"
        ],
        "covers_axes": [
          "discover",
          "inspect",
          "observe",
          "verify",
          "policy_bound"
        ]
      },
      "mcp": {
        "compiled": true,
        "eligible": true,
        "tools": [
          {
            "capability_id": "company.list",
            "capability_version": "0.1.0",
            "tool_name": "companies_list",
            "oauth_tier": "mcp:access"
          }
        ]
      },
      "denominator_projection": {
        "state": "aliased",
        "denominator_capability_id": "company.list.inspect",
        "candidate_title": "Inspect company list",
        "candidate_family": "Companies, deals, pipelines, and activities",
        "source_partition": "campaign_crm_inbox_copilot",
        "owner_kind": "backend_family_match",
        "fallback_owner": false,
        "overlap_source_control_ids": [
          "companies.crud"
        ],
        "alias": {
          "rationale": "Both authorities bind the company collection read to the listCompanies public operation.",
          "evidence_refs": [
            "capabilities/capability-denominator.v1.json",
            "capabilities/capability-ledger.v1.json",
            "src/steps/public-api/companies/list-companies.step.ts"
          ],
          "evidence": {
            "kind": "rest_route",
            "method": "GET",
            "path": "/api/v1/organizations/{orgId}/workspaces/{wsId}/companies",
            "operation_id": "listCompanies",
            "source_path": "src/steps/public-api/companies/list-companies.step.ts"
          },
          "family_review": {
            "reviewed": true,
            "rationale": "The ledger uses a company-specific read family while the denominator groups the identical route under the broader CRM family.",
            "evidence_refs": [
              "capabilities/capability-ledger.v1.json",
              "capabilities/capability-denominator.v1.json",
              "src/steps/public-api/companies/list-companies.step.ts"
            ]
          },
          "privilege_class_review": null
        }
      }
    },
    {
      "capability_id": "connector.cal_com.create",
      "capability_version": "0.1.0",
      "title": "Connect a Cal.com event type",
      "family": "connector-warmup-and-sender-health",
      "ledger_status": "draft",
      "scope_basis": "observed_dashboard",
      "parity_mode": "direct_headless",
      "business_owner": "Connector capability owner",
      "owner_team": "Connector capability owner",
      "surface_applicability": {
        "dashboard": {
          "state": "required",
          "rationale": "The dashboard calendar settings connect a Cal.com event type."
        },
        "rest": {
          "state": "required",
          "rationale": "The public POST route connects a Cal.com event type with an API key."
        },
        "cli": {
          "state": "optional",
          "rationale": "The published CLI reaches the route through its generic api command until a named command ships."
        },
        "sdk": {
          "state": "optional",
          "rationale": "Generated SDK parity remains downstream of contract closure."
        },
        "mcp": {
          "state": "required",
          "rationale": "The connector_create_cal_com MCP tool mirrors this route; it is listed only after this row is released."
        },
        "webhook": {
          "state": "not_applicable",
          "rationale": "Not a webhook capability."
        },
        "handoff": {
          "state": "not_applicable",
          "rationale": "No assisted provider or browser step; the caller supplies the Cal.com API key."
        }
      },
      "wire": {
        "rest": {
          "canonical_hosts": [
            "https://api.app.firstsales.io/api/v1",
            "https://sandbox.api.app.firstsales.io/api/v1"
          ],
          "operation_ids": [
            "createCalComConnector"
          ],
          "route_patterns": [
            "/api/v1/organizations/{orgId}/workspaces/{wsId}/connectors/cal-com"
          ],
          "auth_schemes": [
            "developer_key_bearer"
          ],
          "evidence_bounds": [
            {
              "target": "request.apiKey",
              "kind": "max_length",
              "max": 2048,
              "source": "runtime+openapi"
            }
          ]
        },
        "cli": {
          "command_labels": [],
          "required_context": [
            "org",
            "workspace"
          ]
        }
      },
      "proof": {
        "proof_id": "connector-cal-com-create",
        "highest_seam": "runtime",
        "source_paths": [
          "src/lib/calendar/__tests__/create-cal-com-connector.test.ts",
          "src/steps/public-api/connectors/__tests__/create-cal-com-connector.step.test.ts",
          "src/lib/mcp/__tests__/mcp-write-tools-connectors.test.ts"
        ]
      },
      "mcp": {
        "compiled": true,
        "eligible": false,
        "tools": [
          {
            "capability_id": "connector.cal_com.create",
            "capability_version": "0.1.0",
            "tool_name": "connector_create_cal_com",
            "oauth_tier": "mcp:write"
          }
        ]
      },
      "denominator_projection": {
        "state": "unmapped",
        "denominator_capability_id": null,
        "candidate_title": null,
        "candidate_family": null,
        "source_partition": null,
        "owner_kind": null,
        "fallback_owner": false,
        "overlap_source_control_ids": [],
        "alias": null
      }
    },
    {
      "capability_id": "connector.warmup.inspect",
      "capability_version": "0.1.0",
      "title": "Get connector warmup status",
      "family": "connector-warmup-and-sender-health",
      "ledger_status": "closed",
      "scope_basis": "observed_dashboard",
      "parity_mode": "direct_headless",
      "business_owner": "Connector capability owner",
      "owner_team": "Connector capability owner",
      "surface_applicability": {
        "dashboard": {
          "state": "required",
          "rationale": "Connector warmup health is an incumbent dashboard read surface."
        },
        "rest": {
          "state": "required",
          "rationale": "The public connector warmup route is already deployed."
        },
        "cli": {
          "state": "optional",
          "rationale": "CLI projection remains outside this MCP repair."
        },
        "sdk": {
          "state": "optional",
          "rationale": "Generated SDK projection remains downstream of contract closure."
        },
        "mcp": {
          "state": "required",
          "rationale": "Claude needs a tenant-scoped single-connector warmup status tool."
        },
        "webhook": {
          "state": "not_applicable",
          "rationale": "Warmup status retrieval is a synchronous read, not a webhook capability."
        },
        "handoff": {
          "state": "not_applicable",
          "rationale": "No assisted provider or browser step is required."
        }
      },
      "wire": {
        "rest": {
          "canonical_hosts": [
            "https://api.app.firstsales.io/api/v1",
            "https://sandbox.api.app.firstsales.io/api/v1"
          ],
          "operation_ids": [
            "getConnectorWarmupStatus"
          ],
          "route_patterns": [
            "/api/v1/organizations/{orgId}/workspaces/{wsId}/connectors/{connectorId}/warmup"
          ],
          "auth_schemes": [
            "developer_key_bearer"
          ]
        },
        "cli": {
          "command_labels": [],
          "required_context": [
            "org",
            "workspace",
            "connector"
          ]
        }
      },
      "proof": {
        "proof_id": "mcp-connector-warmup-get",
        "highest_seam": "runtime",
        "runnable_artifacts": [
          "src/lib/public-api/__tests__/connector-read.test.ts",
          "src/steps/public-api/warmup/__tests__/get-warmup-status.step.test.ts",
          "src/lib/mcp/__tests__/connector-warmup-get-binding.test.ts",
          "src/lib/mcp/__tests__/operational-read-route.test.ts",
          "src/tests/developer-api-openapi-contract.test.ts",
          "src/tests/developer-api-wave-a-measurements.test.ts"
        ],
        "source_paths": [
          "src/lib/public-api/__tests__/connector-read.test.ts",
          "src/steps/public-api/warmup/__tests__/get-warmup-status.step.test.ts",
          "src/lib/mcp/__tests__/connector-warmup-get-binding.test.ts",
          "src/lib/mcp/__tests__/operational-read-route.test.ts",
          "src/tests/developer-api-openapi-contract.test.ts",
          "src/tests/developer-api-wave-a-measurements.test.ts"
        ],
        "generated_checks": [
          "warmup status remains tenant-scoped to one current OAuth-granted workspace and requested connector",
          "warmup status preserves the strict public warmup and sender-health allow-list"
        ],
        "covers_axes": [
          "discover",
          "inspect",
          "observe",
          "verify",
          "policy_bound"
        ]
      },
      "mcp": {
        "compiled": true,
        "eligible": true,
        "tools": [
          {
            "capability_id": "connector.warmup.inspect",
            "capability_version": "0.1.0",
            "tool_name": "connector_warmup_get",
            "oauth_tier": "mcp:access"
          }
        ]
      },
      "denominator_projection": {
        "state": "unmapped",
        "denominator_capability_id": null,
        "candidate_title": null,
        "candidate_family": null,
        "source_partition": null,
        "owner_kind": null,
        "fallback_owner": false,
        "overlap_source_control_ids": [],
        "alias": null
      }
    },
    {
      "capability_id": "contact_list.membership.update",
      "capability_version": "0.1.0",
      "title": "Update list membership",
      "family": "contact-read-and-list-workflow-lifecycle",
      "ledger_status": "draft",
      "scope_basis": "observed_dashboard",
      "parity_mode": "direct_headless",
      "business_owner": "Campaign capability owner",
      "owner_team": "Campaign capability owner",
      "surface_applicability": {
        "dashboard": {
          "state": "required",
          "rationale": "The contacts table adds Contacts to or removes them from a list."
        },
        "rest": {
          "state": "required",
          "rationale": "The public POST route adds and removes list members."
        },
        "cli": {
          "state": "optional",
          "rationale": "The published CLI reaches the route through its generic api command until a named command ships."
        },
        "sdk": {
          "state": "optional",
          "rationale": "Generated SDK parity remains downstream of contract closure."
        },
        "mcp": {
          "state": "required",
          "rationale": "The list_membership_update MCP tool mirrors this route; it is listed only after this row is released."
        },
        "webhook": {
          "state": "not_applicable",
          "rationale": "Not a webhook capability."
        },
        "handoff": {
          "state": "not_applicable",
          "rationale": "No assisted provider or browser step."
        }
      },
      "wire": {
        "rest": {
          "canonical_hosts": [
            "https://api.app.firstsales.io/api/v1",
            "https://sandbox.api.app.firstsales.io/api/v1"
          ],
          "operation_ids": [
            "updateContactListMembers"
          ],
          "route_patterns": [
            "/api/v1/organizations/{orgId}/workspaces/{wsId}/contact-lists/{listId}/members"
          ],
          "auth_schemes": [
            "developer_key_bearer"
          ],
          "evidence_bounds": [
            {
              "target": "request.add",
              "kind": "max_items",
              "max": 500,
              "source": "runtime+openapi"
            },
            {
              "target": "request.remove",
              "kind": "max_items",
              "max": 500,
              "source": "runtime+openapi"
            }
          ]
        },
        "cli": {
          "command_labels": [],
          "required_context": [
            "org",
            "workspace",
            "list"
          ]
        }
      },
      "proof": {
        "proof_id": "contact-list-membership-update",
        "highest_seam": "runtime",
        "source_paths": [
          "src/steps/public-api/contacts/__tests__/list-membership.step.test.ts",
          "src/lib/mcp/__tests__/mcp-write-tools-campaign.test.ts"
        ]
      },
      "mcp": {
        "compiled": true,
        "eligible": false,
        "tools": [
          {
            "capability_id": "contact_list.membership.update",
            "capability_version": "0.1.0",
            "tool_name": "list_membership_update",
            "oauth_tier": "mcp:write"
          }
        ]
      },
      "denominator_projection": {
        "state": "unmapped",
        "denominator_capability_id": null,
        "candidate_title": null,
        "candidate_family": null,
        "source_partition": null,
        "owner_kind": null,
        "fallback_owner": false,
        "overlap_source_control_ids": [],
        "alias": null
      }
    },
    {
      "capability_id": "contact.get",
      "capability_version": "0.1.0",
      "title": "Get contact",
      "family": "contact-read-and-list-workflow-lifecycle",
      "ledger_status": "planning_seed",
      "scope_basis": "observed_dashboard",
      "parity_mode": "direct_headless",
      "business_owner": "Contact capability owner",
      "owner_team": "Contact capability owner",
      "surface_applicability": {
        "dashboard": {
          "state": "required",
          "rationale": "Contact detail is an incumbent dashboard read surface."
        },
        "rest": {
          "state": "required",
          "rationale": "The public contact detail route is already deployed."
        },
        "cli": {
          "state": "optional",
          "rationale": "CLI projection remains outside this MCP repair."
        },
        "sdk": {
          "state": "optional",
          "rationale": "Generated SDK projection remains downstream of contract closure."
        },
        "mcp": {
          "state": "required",
          "rationale": "Claude needs a tenant-scoped read-only contact detail tool once release evidence closes."
        },
        "webhook": {
          "state": "not_applicable",
          "rationale": "Contact detail is a synchronous read, not a webhook capability."
        },
        "handoff": {
          "state": "not_applicable",
          "rationale": "No assisted provider or browser step is required."
        }
      },
      "wire": {
        "rest": {
          "canonical_hosts": [
            "https://api.app.firstsales.io/api/v1",
            "https://sandbox.api.app.firstsales.io/api/v1"
          ],
          "operation_ids": [
            "getContact"
          ],
          "route_patterns": [
            "/api/v1/organizations/{orgId}/workspaces/{wsId}/contacts/{contactId}"
          ],
          "auth_schemes": [
            "developer_key_bearer"
          ]
        },
        "cli": {
          "command_labels": [],
          "required_context": [
            "org",
            "workspace",
            "contact"
          ]
        }
      },
      "proof": {
        "proof_id": "bootstrap-contact-get",
        "highest_seam": "runtime",
        "source_paths": [
          "src/lib/public-api/__tests__/contact-read.test.ts",
          "src/lib/mcp/__tests__/product-mcp-registry.test.ts"
        ]
      },
      "mcp": {
        "compiled": true,
        "eligible": false,
        "tools": [
          {
            "capability_id": "contact.get",
            "capability_version": "0.1.0",
            "tool_name": "contacts_get",
            "oauth_tier": "mcp:access"
          }
        ]
      },
      "denominator_projection": {
        "state": "aliased",
        "denominator_capability_id": "contact.inspect",
        "candidate_title": "Inspect contact detail",
        "candidate_family": "Contacts, lists, fields, imports, and exports",
        "source_partition": "campaign_crm_inbox_copilot",
        "owner_kind": "backend_family_match",
        "fallback_owner": false,
        "overlap_source_control_ids": [
          "contacts.detail_threads_and_send"
        ],
        "alias": {
          "rationale": "Both authorities bind contact detail inspection to the getContact public operation.",
          "evidence_refs": [
            "capabilities/capability-denominator.v1.json",
            "capabilities/capability-ledger.v1.json",
            "src/steps/public-api/contacts/get-contact.step.ts"
          ],
          "evidence": {
            "kind": "rest_route",
            "method": "GET",
            "path": "/api/v1/organizations/{orgId}/workspaces/{wsId}/contacts/{contactId}",
            "operation_id": "getContact",
            "source_path": "src/steps/public-api/contacts/get-contact.step.ts"
          },
          "family_review": {
            "reviewed": true,
            "rationale": "The ledger uses a contact-read lifecycle family while the denominator groups the identical route under the broader contacts family.",
            "evidence_refs": [
              "capabilities/capability-ledger.v1.json",
              "capabilities/capability-denominator.v1.json",
              "src/steps/public-api/contacts/get-contact.step.ts"
            ]
          },
          "privilege_class_review": null
        }
      }
    },
    {
      "capability_id": "contact.list",
      "capability_version": "0.1.0",
      "title": "List contacts",
      "family": "contact-read-and-list-workflow-lifecycle",
      "ledger_status": "planning_seed",
      "scope_basis": "observed_dashboard",
      "parity_mode": "direct_headless",
      "business_owner": "Contact capability owner",
      "owner_team": "Contact capability owner",
      "surface_applicability": {
        "dashboard": {
          "state": "required",
          "rationale": "Contact listing is an incumbent dashboard read surface."
        },
        "rest": {
          "state": "required",
          "rationale": "The public contact listing route is already deployed."
        },
        "cli": {
          "state": "optional",
          "rationale": "CLI projection remains outside this MCP repair."
        },
        "sdk": {
          "state": "optional",
          "rationale": "Generated SDK projection remains downstream of contract closure."
        },
        "mcp": {
          "state": "required",
          "rationale": "Claude needs a tenant-scoped read-only contact listing tool once release evidence closes."
        },
        "webhook": {
          "state": "not_applicable",
          "rationale": "Contact listing is a synchronous read, not a webhook capability."
        },
        "handoff": {
          "state": "not_applicable",
          "rationale": "No assisted provider or browser step is required."
        }
      },
      "wire": {
        "rest": {
          "canonical_hosts": [
            "https://api.app.firstsales.io/api/v1",
            "https://sandbox.api.app.firstsales.io/api/v1"
          ],
          "operation_ids": [
            "listContacts"
          ],
          "route_patterns": [
            "/api/v1/organizations/{orgId}/workspaces/{wsId}/contacts"
          ],
          "auth_schemes": [
            "developer_key_bearer"
          ]
        },
        "cli": {
          "command_labels": [],
          "required_context": [
            "org",
            "workspace"
          ]
        }
      },
      "proof": {
        "proof_id": "bootstrap-contact-list",
        "highest_seam": "runtime",
        "source_paths": [
          "src/lib/public-api/__tests__/contact-read.test.ts",
          "src/lib/mcp/__tests__/product-mcp-registry.test.ts"
        ]
      },
      "mcp": {
        "compiled": true,
        "eligible": false,
        "tools": [
          {
            "capability_id": "contact.list",
            "capability_version": "0.1.0",
            "tool_name": "contacts_list",
            "oauth_tier": "mcp:access"
          }
        ]
      },
      "denominator_projection": {
        "state": "aliased",
        "denominator_capability_id": "contact.list.inspect",
        "candidate_title": "Inspect contacts list",
        "candidate_family": "Contacts, lists, fields, imports, and exports",
        "source_partition": "campaign_crm_inbox_copilot",
        "owner_kind": "backend_family_match",
        "fallback_owner": false,
        "overlap_source_control_ids": [
          "contacts.search_filter_sort_paginate_bulk"
        ],
        "alias": {
          "rationale": "Both authorities bind the contact collection read to the listContacts public operation.",
          "evidence_refs": [
            "capabilities/capability-denominator.v1.json",
            "capabilities/capability-ledger.v1.json",
            "src/steps/public-api/contacts/list-contacts.step.ts"
          ],
          "evidence": {
            "kind": "rest_route",
            "method": "GET",
            "path": "/api/v1/organizations/{orgId}/workspaces/{wsId}/contacts",
            "operation_id": "listContacts",
            "source_path": "src/steps/public-api/contacts/list-contacts.step.ts"
          },
          "family_review": {
            "reviewed": true,
            "rationale": "The ledger uses a contact-read lifecycle family while the denominator groups the identical route under the broader contacts family.",
            "evidence_refs": [
              "capabilities/capability-ledger.v1.json",
              "capabilities/capability-denominator.v1.json",
              "src/steps/public-api/contacts/list-contacts.step.ts"
            ]
          },
          "privilege_class_review": null
        }
      }
    },
    {
      "capability_id": "copilot.session.inspect",
      "capability_version": "0.1.0",
      "title": "Get copilot session",
      "family": "copilot-session-read-workflow-lifecycle",
      "ledger_status": "planning_seed",
      "scope_basis": "observed_dashboard",
      "parity_mode": "direct_headless",
      "business_owner": "Copilot capability owner",
      "owner_team": "Copilot capability owner",
      "surface_applicability": {
        "dashboard": {
          "state": "required",
          "rationale": "Copilot session detail is an incumbent product read surface."
        },
        "rest": {
          "state": "required",
          "rationale": "The public copilot session detail route is already deployed."
        },
        "cli": {
          "state": "optional",
          "rationale": "No checked-in CLI command currently claims this read surface."
        },
        "sdk": {
          "state": "optional",
          "rationale": "Generated SDK projection remains downstream of contract closure."
        },
        "mcp": {
          "state": "required",
          "rationale": "Claude needs a workspace-scoped read-only copilot session detail tool once release evidence closes."
        },
        "webhook": {
          "state": "not_applicable",
          "rationale": "Copilot session detail is a synchronous read, not a webhook capability."
        },
        "handoff": {
          "state": "not_applicable",
          "rationale": "No assisted provider or browser step is required."
        }
      },
      "wire": {
        "rest": {
          "canonical_hosts": [
            "https://api.app.firstsales.io/api/v1",
            "https://sandbox.api.app.firstsales.io/api/v1"
          ],
          "operation_ids": [
            "getCopilotSession"
          ],
          "route_patterns": [
            "/api/v1/organizations/{orgId}/workspaces/{wsId}/copilot/sessions/{sessionId}"
          ],
          "auth_schemes": [
            "developer_key_bearer"
          ]
        },
        "cli": {
          "command_labels": [],
          "required_context": [
            "org",
            "workspace",
            "copilot_session"
          ]
        }
      },
      "proof": {
        "proof_id": "bootstrap-copilot-session-get",
        "highest_seam": "runtime",
        "source_paths": [
          "src/lib/public-api/__tests__/copilot-session-read.test.ts",
          "src/lib/mcp/__tests__/product-mcp-registry.test.ts"
        ]
      },
      "mcp": {
        "compiled": true,
        "eligible": false,
        "tools": [
          {
            "capability_id": "copilot.session.inspect",
            "capability_version": "0.1.0",
            "tool_name": "copilot_sessions_get",
            "oauth_tier": "mcp:access"
          }
        ]
      },
      "denominator_projection": {
        "state": "unmapped",
        "denominator_capability_id": null,
        "candidate_title": null,
        "candidate_family": null,
        "source_partition": null,
        "owner_kind": null,
        "fallback_owner": false,
        "overlap_source_control_ids": [],
        "alias": null
      }
    },
    {
      "capability_id": "copilot.session.inspect_list",
      "capability_version": "0.1.0",
      "title": "List copilot sessions",
      "family": "copilot-session-read-workflow-lifecycle",
      "ledger_status": "planning_seed",
      "scope_basis": "observed_dashboard",
      "parity_mode": "direct_headless",
      "business_owner": "Copilot capability owner",
      "owner_team": "Copilot capability owner",
      "surface_applicability": {
        "dashboard": {
          "state": "required",
          "rationale": "Copilot session list is an incumbent product read surface."
        },
        "rest": {
          "state": "required",
          "rationale": "The public copilot session list route is already deployed."
        },
        "cli": {
          "state": "optional",
          "rationale": "No checked-in CLI command currently claims this read surface."
        },
        "sdk": {
          "state": "optional",
          "rationale": "Generated SDK projection remains downstream of contract closure."
        },
        "mcp": {
          "state": "required",
          "rationale": "Claude needs a workspace-scoped read-only copilot session list tool once release evidence closes."
        },
        "webhook": {
          "state": "not_applicable",
          "rationale": "Copilot session list is a synchronous read, not a webhook capability."
        },
        "handoff": {
          "state": "not_applicable",
          "rationale": "No assisted provider or browser step is required."
        }
      },
      "wire": {
        "rest": {
          "canonical_hosts": [
            "https://api.app.firstsales.io/api/v1",
            "https://sandbox.api.app.firstsales.io/api/v1"
          ],
          "operation_ids": [
            "listCopilotSessions"
          ],
          "route_patterns": [
            "/api/v1/organizations/{orgId}/workspaces/{wsId}/copilot/sessions"
          ],
          "auth_schemes": [
            "developer_key_bearer"
          ]
        },
        "cli": {
          "command_labels": [],
          "required_context": [
            "org",
            "workspace"
          ]
        }
      },
      "proof": {
        "proof_id": "bootstrap-copilot-session-list",
        "highest_seam": "runtime",
        "source_paths": [
          "src/lib/public-api/__tests__/copilot-session-read.test.ts",
          "src/lib/mcp/__tests__/product-mcp-registry.test.ts"
        ]
      },
      "mcp": {
        "compiled": true,
        "eligible": false,
        "tools": [
          {
            "capability_id": "copilot.session.inspect_list",
            "capability_version": "0.1.0",
            "tool_name": "copilot_sessions_list",
            "oauth_tier": "mcp:access"
          }
        ]
      },
      "denominator_projection": {
        "state": "exact",
        "denominator_capability_id": "copilot.session.inspect_list",
        "candidate_title": "Inspect Copilot session list",
        "candidate_family": "Inbox, Copilot, dashboard insights, and alerts",
        "source_partition": "campaign_crm_inbox_copilot",
        "owner_kind": "backend_family_match",
        "fallback_owner": false,
        "overlap_source_control_ids": [
          "copilot.sessions_sidebar_management"
        ],
        "alias": null
      }
    },
    {
      "capability_id": "deal.get",
      "capability_version": "0.1.0",
      "title": "Get deal",
      "family": "deal-and-pipeline-read-workflow-lifecycle",
      "ledger_status": "closed",
      "scope_basis": "observed_dashboard",
      "parity_mode": "direct_headless",
      "business_owner": "Deal capability owner",
      "owner_team": "Deal capability owner",
      "surface_applicability": {
        "dashboard": {
          "state": "required",
          "rationale": "Deal detail is an incumbent dashboard read surface."
        },
        "rest": {
          "state": "required",
          "rationale": "The public deal detail route is already deployed."
        },
        "cli": {
          "state": "optional",
          "rationale": "CLI projection remains outside this MCP repair."
        },
        "sdk": {
          "state": "optional",
          "rationale": "Generated SDK projection remains downstream of contract closure."
        },
        "mcp": {
          "state": "required",
          "rationale": "Claude needs a tenant-scoped read-only deal detail tool."
        },
        "webhook": {
          "state": "not_applicable",
          "rationale": "Deal detail is a synchronous read, not a webhook capability."
        },
        "handoff": {
          "state": "not_applicable",
          "rationale": "No assisted provider or browser step is required."
        }
      },
      "wire": {
        "rest": {
          "canonical_hosts": [
            "https://api.app.firstsales.io/api/v1",
            "https://sandbox.api.app.firstsales.io/api/v1"
          ],
          "operation_ids": [
            "getDeal"
          ],
          "route_patterns": [
            "/api/v1/organizations/{orgId}/workspaces/{wsId}/deals/{dealId}"
          ],
          "auth_schemes": [
            "developer_key_bearer"
          ]
        },
        "cli": {
          "command_labels": [],
          "required_context": [
            "org",
            "workspace",
            "deal"
          ]
        }
      },
      "proof": {
        "proof_id": "mcp-deals-get",
        "highest_seam": "runtime",
        "runnable_artifacts": [
          "src/lib/public-api/__tests__/deal-pipeline-read.test.ts",
          "src/steps/public-api/deals/__tests__/get-deal.step.test.ts",
          "src/lib/mcp/__tests__/deals-read-bindings.test.ts",
          "src/lib/mcp/__tests__/deals-read-route.test.ts",
          "src/lib/mcp/__tests__/product-mcp-registry.test.ts",
          "src/tests/developer-api-openapi-contract.test.ts",
          "src/tests/developer-api-wave-a-measurements.test.ts"
        ],
        "source_paths": [
          "src/lib/public-api/__tests__/deal-pipeline-read.test.ts",
          "src/steps/public-api/deals/__tests__/get-deal.step.test.ts",
          "src/lib/mcp/__tests__/deals-read-bindings.test.ts",
          "src/lib/mcp/__tests__/deals-read-route.test.ts",
          "src/lib/mcp/__tests__/product-mcp-registry.test.ts",
          "src/tests/developer-api-openapi-contract.test.ts",
          "src/tests/developer-api-wave-a-measurements.test.ts"
        ],
        "generated_checks": [
          "deal detail remains tenant-scoped to one live OAuth-granted workspace and requested deal identity",
          "deal detail rejects secret-tainted output before MCP serialization"
        ],
        "covers_axes": [
          "discover",
          "inspect",
          "observe",
          "verify",
          "policy_bound"
        ]
      },
      "mcp": {
        "compiled": true,
        "eligible": true,
        "tools": [
          {
            "capability_id": "deal.get",
            "capability_version": "0.1.0",
            "tool_name": "deals_get",
            "oauth_tier": "mcp:access"
          }
        ]
      },
      "denominator_projection": {
        "state": "aliased",
        "denominator_capability_id": "deal.inspect",
        "candidate_title": "Inspect deal detail",
        "candidate_family": "Companies, deals, pipelines, and activities",
        "source_partition": "campaign_crm_inbox_copilot",
        "owner_kind": "backend_family_match",
        "fallback_owner": false,
        "overlap_source_control_ids": [
          "deals.pipelines_forecast_status"
        ],
        "alias": {
          "rationale": "Both authorities bind deal detail inspection to the getDeal public operation.",
          "evidence_refs": [
            "capabilities/capability-denominator.v1.json",
            "capabilities/capability-ledger.v1.json",
            "src/steps/public-api/deals/get-deal.step.ts"
          ],
          "evidence": {
            "kind": "rest_route",
            "method": "GET",
            "path": "/api/v1/organizations/{orgId}/workspaces/{wsId}/deals/{dealId}",
            "operation_id": "getDeal",
            "source_path": "src/steps/public-api/deals/get-deal.step.ts"
          },
          "family_review": {
            "reviewed": true,
            "rationale": "The ledger uses a deal-and-pipeline read family while the denominator groups the identical route under the broader CRM family.",
            "evidence_refs": [
              "capabilities/capability-ledger.v1.json",
              "capabilities/capability-denominator.v1.json",
              "src/steps/public-api/deals/get-deal.step.ts"
            ]
          },
          "privilege_class_review": null
        }
      }
    },
    {
      "capability_id": "deal.list",
      "capability_version": "0.1.0",
      "title": "List deals",
      "family": "deal-and-pipeline-read-workflow-lifecycle",
      "ledger_status": "closed",
      "scope_basis": "observed_dashboard",
      "parity_mode": "direct_headless",
      "business_owner": "Deal capability owner",
      "owner_team": "Deal capability owner",
      "surface_applicability": {
        "dashboard": {
          "state": "required",
          "rationale": "Deal listing is an incumbent dashboard read surface."
        },
        "rest": {
          "state": "required",
          "rationale": "The public deal listing route is already deployed."
        },
        "cli": {
          "state": "optional",
          "rationale": "CLI projection remains outside this MCP repair."
        },
        "sdk": {
          "state": "optional",
          "rationale": "Generated SDK projection remains downstream of contract closure."
        },
        "mcp": {
          "state": "required",
          "rationale": "Claude needs a tenant-scoped read-only deal listing tool."
        },
        "webhook": {
          "state": "not_applicable",
          "rationale": "Deal listing is a synchronous read, not a webhook capability."
        },
        "handoff": {
          "state": "not_applicable",
          "rationale": "No assisted provider or browser step is required."
        }
      },
      "wire": {
        "rest": {
          "canonical_hosts": [
            "https://api.app.firstsales.io/api/v1",
            "https://sandbox.api.app.firstsales.io/api/v1"
          ],
          "operation_ids": [
            "listDeals"
          ],
          "route_patterns": [
            "/api/v1/organizations/{orgId}/workspaces/{wsId}/deals"
          ],
          "auth_schemes": [
            "developer_key_bearer"
          ]
        },
        "cli": {
          "command_labels": [],
          "required_context": [
            "org",
            "workspace"
          ]
        }
      },
      "proof": {
        "proof_id": "mcp-deals-list",
        "highest_seam": "runtime",
        "runnable_artifacts": [
          "src/lib/public-api/__tests__/deal-pipeline-read.test.ts",
          "src/steps/public-api/deals/__tests__/list-deals.step.test.ts",
          "src/lib/mcp/__tests__/deals-read-bindings.test.ts",
          "src/lib/mcp/__tests__/deals-read-route.test.ts",
          "src/lib/mcp/__tests__/product-mcp-registry.test.ts",
          "src/tests/developer-api-openapi-contract.test.ts",
          "src/tests/developer-api-wave-a-measurements.test.ts"
        ],
        "source_paths": [
          "src/lib/public-api/__tests__/deal-pipeline-read.test.ts",
          "src/steps/public-api/deals/__tests__/list-deals.step.test.ts",
          "src/lib/mcp/__tests__/deals-read-bindings.test.ts",
          "src/lib/mcp/__tests__/deals-read-route.test.ts",
          "src/lib/mcp/__tests__/product-mcp-registry.test.ts",
          "src/tests/developer-api-openapi-contract.test.ts",
          "src/tests/developer-api-wave-a-measurements.test.ts"
        ],
        "generated_checks": [
          "deal listing remains tenant-scoped to one live OAuth-granted workspace and fails closed after grant revocation",
          "deal listing exposes at most 100 strict public deal projections without internal participants or files"
        ],
        "covers_axes": [
          "discover",
          "inspect",
          "observe",
          "verify",
          "policy_bound"
        ]
      },
      "mcp": {
        "compiled": true,
        "eligible": true,
        "tools": [
          {
            "capability_id": "deal.list",
            "capability_version": "0.1.0",
            "tool_name": "deals_list",
            "oauth_tier": "mcp:access"
          }
        ]
      },
      "denominator_projection": {
        "state": "aliased",
        "denominator_capability_id": "deal.list.inspect",
        "candidate_title": "Inspect deal list",
        "candidate_family": "Companies, deals, pipelines, and activities",
        "source_partition": "campaign_crm_inbox_copilot",
        "owner_kind": "backend_family_match",
        "fallback_owner": false,
        "overlap_source_control_ids": [
          "deals.pipelines_forecast_status"
        ],
        "alias": {
          "rationale": "Both authorities bind the deal collection read to the listDeals public operation.",
          "evidence_refs": [
            "capabilities/capability-denominator.v1.json",
            "capabilities/capability-ledger.v1.json",
            "src/steps/public-api/deals/list-deals.step.ts"
          ],
          "evidence": {
            "kind": "rest_route",
            "method": "GET",
            "path": "/api/v1/organizations/{orgId}/workspaces/{wsId}/deals",
            "operation_id": "listDeals",
            "source_path": "src/steps/public-api/deals/list-deals.step.ts"
          },
          "family_review": {
            "reviewed": true,
            "rationale": "The ledger uses a deal-and-pipeline read family while the denominator groups the identical route under the broader CRM family.",
            "evidence_refs": [
              "capabilities/capability-ledger.v1.json",
              "capabilities/capability-denominator.v1.json",
              "src/steps/public-api/deals/list-deals.step.ts"
            ]
          },
          "privilege_class_review": null
        }
      }
    },
    {
      "capability_id": "developer_api.key.create",
      "capability_version": "0.1.0",
      "title": "Create developer API key",
      "family": "developer-access-and-api-governance",
      "ledger_status": "draft",
      "scope_basis": "platform_foundation",
      "parity_mode": "direct_headless",
      "business_owner": "Platform/API owner",
      "owner_team": "Platform/API owner",
      "surface_applicability": {
        "dashboard": {
          "state": "optional",
          "rationale": "This Wave A audit confirmed runtime, OpenAPI, and CLI only."
        },
        "rest": {
          "state": "required",
          "rationale": "Developer API create route is live and contracted."
        },
        "cli": {
          "state": "required",
          "rationale": "api-keys create command exists in the checked-in CLI."
        },
        "sdk": {
          "state": "optional",
          "rationale": "Generated SDK parity remains downstream of contract closure."
        },
        "mcp": {
          "state": "not_applicable",
          "rationale": "No MCP exposure is claimed in this Wave A slice."
        },
        "webhook": {
          "state": "not_applicable",
          "rationale": "Not a webhook capability."
        },
        "handoff": {
          "state": "not_applicable",
          "rationale": "No assisted provider or browser step."
        }
      },
      "wire": {
        "rest": {
          "canonical_hosts": [
            "https://api.app.firstsales.io/api/v1",
            "https://sandbox.api.app.firstsales.io/api/v1"
          ],
          "operation_ids": [
            "createApiKey"
          ],
          "route_patterns": [
            "/api/v1/organizations/{orgId}/api-keys"
          ],
          "auth_schemes": [
            "developer_key_bearer"
          ],
          "evidence_bounds": [
            {
              "target": "request.name",
              "kind": "max_length",
              "max": 100,
              "source": "runtime+openapi"
            },
            {
              "target": "request.scopes",
              "kind": "min_items",
              "min": 1,
              "source": "runtime+openapi"
            }
          ]
        },
        "cli": {
          "command_labels": [
            "api-keys create"
          ],
          "required_context": [
            "org"
          ]
        }
      },
      "proof": {
        "proof_id": "wave-a-api-keys-create",
        "highest_seam": "contract",
        "source_paths": [
          "src/tests/developer-api-openapi-contract.test.ts"
        ]
      },
      "mcp": {
        "compiled": false,
        "eligible": false,
        "tools": []
      },
      "denominator_projection": {
        "state": "exact",
        "denominator_capability_id": "developer_api.key.create",
        "candidate_title": "Create developer API key",
        "candidate_family": "developer_api",
        "source_partition": "account_settings",
        "owner_kind": "source_partition_fallback",
        "fallback_owner": true,
        "overlap_source_control_ids": [],
        "alias": null
      }
    },
    {
      "capability_id": "developer_api.key.list",
      "capability_version": "0.1.0",
      "title": "List developer API keys",
      "family": "developer-access-and-api-governance",
      "ledger_status": "draft",
      "scope_basis": "platform_foundation",
      "parity_mode": "direct_headless",
      "business_owner": "Platform/API owner",
      "owner_team": "Platform/API owner",
      "surface_applicability": {
        "dashboard": {
          "state": "optional",
          "rationale": "This Wave A audit confirmed runtime, OpenAPI, and CLI only."
        },
        "rest": {
          "state": "required",
          "rationale": "Developer API list route is live and contracted."
        },
        "cli": {
          "state": "required",
          "rationale": "api-keys list command exists in the checked-in CLI."
        },
        "sdk": {
          "state": "optional",
          "rationale": "Generated SDK parity remains downstream of contract closure."
        },
        "mcp": {
          "state": "required",
          "rationale": "Agent operators need an organization-scoped read-only developer API key listing tool once release evidence closes."
        },
        "webhook": {
          "state": "not_applicable",
          "rationale": "Not a webhook capability."
        },
        "handoff": {
          "state": "not_applicable",
          "rationale": "No assisted provider or browser step."
        }
      },
      "wire": {
        "rest": {
          "canonical_hosts": [
            "https://api.app.firstsales.io/api/v1",
            "https://sandbox.api.app.firstsales.io/api/v1"
          ],
          "operation_ids": [
            "listApiKeys"
          ],
          "route_patterns": [
            "/api/v1/organizations/{orgId}/api-keys"
          ],
          "auth_schemes": [
            "developer_key_bearer"
          ]
        },
        "cli": {
          "command_labels": [
            "api-keys list"
          ],
          "required_context": [
            "org"
          ]
        }
      },
      "proof": {
        "proof_id": "wave-a-api-keys-list",
        "highest_seam": "contract",
        "source_paths": [
          "src/tests/developer-api-openapi-contract.test.ts"
        ]
      },
      "mcp": {
        "compiled": true,
        "eligible": false,
        "tools": [
          {
            "capability_id": "developer_api.key.list",
            "capability_version": "0.1.0",
            "tool_name": "api_keys_list",
            "oauth_tier": "mcp:access"
          }
        ]
      },
      "denominator_projection": {
        "state": "exact",
        "denominator_capability_id": "developer_api.key.list",
        "candidate_title": "List developer API keys",
        "candidate_family": "developer_api",
        "source_partition": "account_settings",
        "owner_kind": "source_partition_fallback",
        "fallback_owner": true,
        "overlap_source_control_ids": [],
        "alias": null
      }
    },
    {
      "capability_id": "developer_api.key.revoke",
      "capability_version": "0.1.0",
      "title": "Revoke developer API key",
      "family": "developer-access-and-api-governance",
      "ledger_status": "draft",
      "scope_basis": "platform_foundation",
      "parity_mode": "direct_headless",
      "business_owner": "Platform/API owner",
      "owner_team": "Platform/API owner",
      "surface_applicability": {
        "dashboard": {
          "state": "optional",
          "rationale": "This Wave A audit confirmed runtime, OpenAPI, and CLI only."
        },
        "rest": {
          "state": "required",
          "rationale": "Developer API revoke route is live and contracted."
        },
        "cli": {
          "state": "required",
          "rationale": "api-keys revoke command exists in the checked-in CLI."
        },
        "sdk": {
          "state": "optional",
          "rationale": "Generated SDK parity remains downstream of contract closure."
        },
        "mcp": {
          "state": "not_applicable",
          "rationale": "No MCP exposure is claimed in this Wave A slice."
        },
        "webhook": {
          "state": "not_applicable",
          "rationale": "Not a webhook capability."
        },
        "handoff": {
          "state": "not_applicable",
          "rationale": "No assisted provider or browser step."
        }
      },
      "wire": {
        "rest": {
          "canonical_hosts": [
            "https://api.app.firstsales.io/api/v1",
            "https://sandbox.api.app.firstsales.io/api/v1"
          ],
          "operation_ids": [
            "revokeApiKey"
          ],
          "route_patterns": [
            "/api/v1/organizations/{orgId}/api-keys/{keyId}"
          ],
          "auth_schemes": [
            "developer_key_bearer"
          ]
        },
        "cli": {
          "command_labels": [
            "api-keys revoke"
          ],
          "required_context": [
            "org",
            "key"
          ]
        }
      },
      "proof": {
        "proof_id": "wave-a-api-keys-revoke",
        "highest_seam": "contract",
        "source_paths": [
          "src/tests/developer-api-openapi-contract.test.ts"
        ]
      },
      "mcp": {
        "compiled": false,
        "eligible": false,
        "tools": []
      },
      "denominator_projection": {
        "state": "exact",
        "denominator_capability_id": "developer_api.key.revoke",
        "candidate_title": "Revoke developer API key",
        "candidate_family": "developer_api",
        "source_partition": "account_settings",
        "owner_kind": "source_partition_fallback",
        "fallback_owner": true,
        "overlap_source_control_ids": [],
        "alias": null
      }
    },
    {
      "capability_id": "developer_api.usage.inspect",
      "capability_version": "0.1.0",
      "title": "Inspect developer API usage",
      "family": "developer-access-and-api-governance",
      "ledger_status": "draft",
      "scope_basis": "platform_foundation",
      "parity_mode": "direct_headless",
      "business_owner": "Platform/API owner",
      "owner_team": "Platform/API owner",
      "surface_applicability": {
        "dashboard": {
          "state": "optional",
          "rationale": "This Wave A audit confirmed runtime, OpenAPI, and CLI only."
        },
        "rest": {
          "state": "required",
          "rationale": "Developer API usage route is live and contracted."
        },
        "cli": {
          "state": "required",
          "rationale": "usage get command exists in the checked-in CLI."
        },
        "sdk": {
          "state": "optional",
          "rationale": "Generated SDK parity remains downstream of contract closure."
        },
        "mcp": {
          "state": "required",
          "rationale": "Agent operators need an organization-scoped read-only API usage inspection tool once release evidence closes."
        },
        "webhook": {
          "state": "not_applicable",
          "rationale": "Not a webhook capability."
        },
        "handoff": {
          "state": "not_applicable",
          "rationale": "No assisted provider or browser step."
        }
      },
      "wire": {
        "rest": {
          "canonical_hosts": [
            "https://api.app.firstsales.io/api/v1",
            "https://sandbox.api.app.firstsales.io/api/v1"
          ],
          "operation_ids": [
            "getApiUsage"
          ],
          "route_patterns": [
            "/api/v1/organizations/{orgId}/teams/api-usage"
          ],
          "auth_schemes": [
            "developer_key_bearer"
          ],
          "evidence_bounds": [
            {
              "target": "query.days",
              "kind": "integer_range",
              "min": 1,
              "max": 90,
              "default": 7,
              "source": "runtime+openapi+cli"
            },
            {
              "target": "response.byKey",
              "kind": "max_items",
              "max": 20,
              "source": "runtime+openapi"
            },
            {
              "target": "response.byRoute",
              "kind": "max_items",
              "max": 20,
              "source": "runtime+openapi"
            }
          ]
        },
        "cli": {
          "command_labels": [
            "usage get"
          ],
          "required_context": [
            "org"
          ]
        }
      },
      "proof": {
        "proof_id": "wave-a-api-usage-inspect",
        "highest_seam": "contract",
        "runnable_artifacts": [
          "src/lib/public-api/__tests__/api-key-usage-read.test.ts",
          "src/steps/public-api/usage/__tests__/get-api-usage.step.test.ts",
          "src/lib/mcp/__tests__/api-usage-get-route.test.ts"
        ],
        "source_paths": [
          "src/tests/developer-api-openapi-contract.test.ts"
        ],
        "generated_checks": [
          "API usage inspection remains organization-scoped and bounded to 1 through 90 days",
          "API usage output excludes raw and hashed API key secrets"
        ],
        "covers_axes": [
          "discover",
          "inspect",
          "observe",
          "verify",
          "policy_bound"
        ]
      },
      "mcp": {
        "compiled": true,
        "eligible": false,
        "tools": [
          {
            "capability_id": "developer_api.usage.inspect",
            "capability_version": "0.1.0",
            "tool_name": "api_usage_get",
            "oauth_tier": "mcp:access"
          }
        ]
      },
      "denominator_projection": {
        "state": "exact",
        "denominator_capability_id": "developer_api.usage.inspect",
        "candidate_title": "Inspect developer API usage overview",
        "candidate_family": "developer_api",
        "source_partition": "account_settings",
        "owner_kind": "source_partition_fallback",
        "fallback_owner": true,
        "overlap_source_control_ids": [],
        "alias": null
      }
    },
    {
      "capability_id": "direct_email.cancel",
      "capability_version": "0.1.0",
      "title": "Cancel a Direct Email",
      "family": "direct-email-workflow-lifecycle",
      "ledger_status": "draft",
      "scope_basis": "observed_dashboard",
      "parity_mode": "direct_headless",
      "business_owner": "Inbox capability owner",
      "owner_team": "Inbox capability owner",
      "surface_applicability": {
        "dashboard": {
          "state": "required",
          "rationale": "The contact page lets a user cancel a pending one-off email."
        },
        "rest": {
          "state": "required",
          "rationale": "The public POST cancel route cancels a draft, held or scheduled email before it is sent."
        },
        "cli": {
          "state": "optional",
          "rationale": "The published CLI emails commands call this route."
        },
        "sdk": {
          "state": "optional",
          "rationale": "Generated SDK parity remains downstream of contract closure."
        },
        "mcp": {
          "state": "required",
          "rationale": "The direct_email_cancel MCP tool mirrors this route; it is listed only after this row is released."
        },
        "webhook": {
          "state": "not_applicable",
          "rationale": "Not a webhook capability."
        },
        "handoff": {
          "state": "not_applicable",
          "rationale": "No assisted provider or browser step; the email goes out through a connected sender."
        }
      },
      "wire": {
        "rest": {
          "canonical_hosts": [
            "https://api.app.firstsales.io/api/v1",
            "https://sandbox.api.app.firstsales.io/api/v1"
          ],
          "operation_ids": [
            "postApiV1OrganizationsOrgIdWorkspacesWsIdContactsContactIdEmailsEmailIdCancel"
          ],
          "route_patterns": [
            "/api/v1/organizations/{orgId}/workspaces/{wsId}/contacts/{contactId}/emails/{emailId}/cancel"
          ],
          "auth_schemes": [
            "developer_key_bearer"
          ],
          "evidence_bounds": []
        },
        "cli": {
          "command_labels": [],
          "required_context": [
            "org",
            "workspace"
          ]
        }
      },
      "proof": {
        "proof_id": "direct-email-cancel",
        "highest_seam": "runtime",
        "source_paths": [
          "src/steps/public-api/direct-email/__tests__/direct-email-routes.step.test.ts",
          "src/lib/mcp/__tests__/mcp-direct-email-tools.test.ts"
        ]
      },
      "mcp": {
        "compiled": true,
        "eligible": false,
        "tools": [
          {
            "capability_id": "direct_email.cancel",
            "capability_version": "0.1.0",
            "tool_name": "direct_email_cancel",
            "oauth_tier": "mcp:write"
          }
        ]
      },
      "denominator_projection": {
        "state": "unmapped",
        "denominator_capability_id": null,
        "candidate_title": null,
        "candidate_family": null,
        "source_partition": null,
        "owner_kind": null,
        "fallback_owner": false,
        "overlap_source_control_ids": [],
        "alias": null
      }
    },
    {
      "capability_id": "direct_email.draft",
      "capability_version": "0.1.0",
      "title": "Draft a Direct Email",
      "family": "direct-email-workflow-lifecycle",
      "ledger_status": "draft",
      "scope_basis": "observed_dashboard",
      "parity_mode": "direct_headless",
      "business_owner": "Inbox capability owner",
      "owner_team": "Inbox capability owner",
      "surface_applicability": {
        "dashboard": {
          "state": "required",
          "rationale": "The contact page composer saves a one-off email as a draft."
        },
        "rest": {
          "state": "required",
          "rationale": "The public POST emails route with mode draft saves a draft outside any sequence."
        },
        "cli": {
          "state": "optional",
          "rationale": "The published CLI emails commands call this route."
        },
        "sdk": {
          "state": "optional",
          "rationale": "Generated SDK parity remains downstream of contract closure."
        },
        "mcp": {
          "state": "required",
          "rationale": "The direct_email_draft MCP tool mirrors this route; it is listed only after this row is released."
        },
        "webhook": {
          "state": "not_applicable",
          "rationale": "Not a webhook capability."
        },
        "handoff": {
          "state": "not_applicable",
          "rationale": "No assisted provider or browser step; the email goes out through a connected sender."
        }
      },
      "wire": {
        "rest": {
          "canonical_hosts": [
            "https://api.app.firstsales.io/api/v1",
            "https://sandbox.api.app.firstsales.io/api/v1"
          ],
          "operation_ids": [
            "postApiV1OrganizationsOrgIdWorkspacesWsIdContactsContactIdEmails"
          ],
          "route_patterns": [
            "/api/v1/organizations/{orgId}/workspaces/{wsId}/contacts/{contactId}/emails"
          ],
          "auth_schemes": [
            "developer_key_bearer"
          ],
          "evidence_bounds": []
        },
        "cli": {
          "command_labels": [],
          "required_context": [
            "org",
            "workspace"
          ]
        }
      },
      "proof": {
        "proof_id": "direct-email-draft",
        "highest_seam": "runtime",
        "source_paths": [
          "src/steps/public-api/direct-email/__tests__/direct-email-routes.step.test.ts",
          "src/lib/mcp/__tests__/mcp-direct-email-tools.test.ts"
        ]
      },
      "mcp": {
        "compiled": true,
        "eligible": false,
        "tools": [
          {
            "capability_id": "direct_email.draft",
            "capability_version": "0.1.0",
            "tool_name": "direct_email_draft",
            "oauth_tier": "mcp:write"
          }
        ]
      },
      "denominator_projection": {
        "state": "unmapped",
        "denominator_capability_id": null,
        "candidate_title": null,
        "candidate_family": null,
        "source_partition": null,
        "owner_kind": null,
        "fallback_owner": false,
        "overlap_source_control_ids": [],
        "alias": null
      }
    },
    {
      "capability_id": "direct_email.schedule",
      "capability_version": "0.1.0",
      "title": "Schedule a Direct Email",
      "family": "direct-email-workflow-lifecycle",
      "ledger_status": "draft",
      "scope_basis": "observed_dashboard",
      "parity_mode": "direct_headless",
      "business_owner": "Inbox capability owner",
      "owner_team": "Inbox capability owner",
      "surface_applicability": {
        "dashboard": {
          "state": "required",
          "rationale": "The contact page composer schedules a one-off email."
        },
        "rest": {
          "state": "required",
          "rationale": "The public POST emails route with mode schedule schedules one email for a future time."
        },
        "cli": {
          "state": "optional",
          "rationale": "The published CLI emails commands call this route."
        },
        "sdk": {
          "state": "optional",
          "rationale": "Generated SDK parity remains downstream of contract closure."
        },
        "mcp": {
          "state": "required",
          "rationale": "The direct_email_schedule MCP tool mirrors this route; it is listed only after this row is released."
        },
        "webhook": {
          "state": "not_applicable",
          "rationale": "Not a webhook capability."
        },
        "handoff": {
          "state": "not_applicable",
          "rationale": "No assisted provider or browser step; the email goes out through a connected sender."
        }
      },
      "wire": {
        "rest": {
          "canonical_hosts": [
            "https://api.app.firstsales.io/api/v1",
            "https://sandbox.api.app.firstsales.io/api/v1"
          ],
          "operation_ids": [
            "postApiV1OrganizationsOrgIdWorkspacesWsIdContactsContactIdEmails"
          ],
          "route_patterns": [
            "/api/v1/organizations/{orgId}/workspaces/{wsId}/contacts/{contactId}/emails"
          ],
          "auth_schemes": [
            "developer_key_bearer"
          ],
          "evidence_bounds": []
        },
        "cli": {
          "command_labels": [],
          "required_context": [
            "org",
            "workspace"
          ]
        }
      },
      "proof": {
        "proof_id": "direct-email-schedule",
        "highest_seam": "runtime",
        "source_paths": [
          "src/steps/public-api/direct-email/__tests__/direct-email-routes.step.test.ts",
          "src/lib/mcp/__tests__/mcp-direct-email-tools.test.ts"
        ]
      },
      "mcp": {
        "compiled": true,
        "eligible": false,
        "tools": [
          {
            "capability_id": "direct_email.schedule",
            "capability_version": "0.1.0",
            "tool_name": "direct_email_schedule",
            "oauth_tier": "mcp:write"
          }
        ]
      },
      "denominator_projection": {
        "state": "unmapped",
        "denominator_capability_id": null,
        "candidate_title": null,
        "candidate_family": null,
        "source_partition": null,
        "owner_kind": null,
        "fallback_owner": false,
        "overlap_source_control_ids": [],
        "alias": null
      }
    },
    {
      "capability_id": "direct_email.send",
      "capability_version": "0.1.0",
      "title": "Send a Direct Email",
      "family": "direct-email-workflow-lifecycle",
      "ledger_status": "draft",
      "scope_basis": "observed_dashboard",
      "parity_mode": "direct_headless",
      "business_owner": "Inbox capability owner",
      "owner_team": "Inbox capability owner",
      "surface_applicability": {
        "dashboard": {
          "state": "required",
          "rationale": "The contact page composer sends a one-off email."
        },
        "rest": {
          "state": "required",
          "rationale": "The public POST emails route with mode send sends one email outside any sequence."
        },
        "cli": {
          "state": "optional",
          "rationale": "The published CLI emails commands call this route."
        },
        "sdk": {
          "state": "optional",
          "rationale": "Generated SDK parity remains downstream of contract closure."
        },
        "mcp": {
          "state": "required",
          "rationale": "The direct_email_send MCP tool mirrors this route; it is listed only after this row is released."
        },
        "webhook": {
          "state": "not_applicable",
          "rationale": "Not a webhook capability."
        },
        "handoff": {
          "state": "not_applicable",
          "rationale": "No assisted provider or browser step; the email goes out through a connected sender."
        }
      },
      "wire": {
        "rest": {
          "canonical_hosts": [
            "https://api.app.firstsales.io/api/v1",
            "https://sandbox.api.app.firstsales.io/api/v1"
          ],
          "operation_ids": [
            "postApiV1OrganizationsOrgIdWorkspacesWsIdContactsContactIdEmails"
          ],
          "route_patterns": [
            "/api/v1/organizations/{orgId}/workspaces/{wsId}/contacts/{contactId}/emails"
          ],
          "auth_schemes": [
            "developer_key_bearer"
          ],
          "evidence_bounds": []
        },
        "cli": {
          "command_labels": [],
          "required_context": [
            "org",
            "workspace"
          ]
        }
      },
      "proof": {
        "proof_id": "direct-email-send",
        "highest_seam": "runtime",
        "source_paths": [
          "src/steps/public-api/direct-email/__tests__/direct-email-routes.step.test.ts",
          "src/lib/mcp/__tests__/mcp-direct-email-tools.test.ts"
        ]
      },
      "mcp": {
        "compiled": true,
        "eligible": false,
        "tools": [
          {
            "capability_id": "direct_email.send",
            "capability_version": "0.1.0",
            "tool_name": "direct_email_send",
            "oauth_tier": "mcp:write"
          }
        ]
      },
      "denominator_projection": {
        "state": "unmapped",
        "denominator_capability_id": null,
        "candidate_title": null,
        "candidate_family": null,
        "source_partition": null,
        "owner_kind": null,
        "fallback_owner": false,
        "overlap_source_control_ids": [],
        "alias": null
      }
    },
    {
      "capability_id": "email_auth.verify",
      "capability_version": "0.1.0",
      "title": "Verify email authentication",
      "family": "connector-warmup-and-sender-health",
      "ledger_status": "draft",
      "scope_basis": "observed_dashboard",
      "parity_mode": "direct_headless",
      "business_owner": "Connector capability owner",
      "owner_team": "Connector capability owner",
      "surface_applicability": {
        "dashboard": {
          "state": "required",
          "rationale": "The dashboard email authentication page re-checks a sending domain."
        },
        "rest": {
          "state": "required",
          "rationale": "The public POST route re-checks SPF, DKIM and DMARC for a sending domain."
        },
        "cli": {
          "state": "optional",
          "rationale": "The published CLI reaches the route through its generic api command until a named command ships."
        },
        "sdk": {
          "state": "optional",
          "rationale": "Generated SDK parity remains downstream of contract closure."
        },
        "mcp": {
          "state": "required",
          "rationale": "The email_auth_verify MCP tool mirrors this route; it is listed only after this row is released."
        },
        "webhook": {
          "state": "not_applicable",
          "rationale": "Not a webhook capability."
        },
        "handoff": {
          "state": "not_applicable",
          "rationale": "No assisted provider or browser step; the check reads public DNS."
        }
      },
      "wire": {
        "rest": {
          "canonical_hosts": [
            "https://api.app.firstsales.io/api/v1",
            "https://sandbox.api.app.firstsales.io/api/v1"
          ],
          "operation_ids": [
            "postApiV1OrganizationsOrgIdWorkspacesWsIdEmailauthVerify"
          ],
          "route_patterns": [
            "/api/v1/organizations/{orgId}/workspaces/{wsId}/email-auth/verify"
          ],
          "auth_schemes": [
            "developer_key_bearer"
          ],
          "evidence_bounds": []
        },
        "cli": {
          "command_labels": [],
          "required_context": [
            "org",
            "workspace"
          ]
        }
      },
      "proof": {
        "proof_id": "email-auth-verify",
        "highest_seam": "runtime",
        "source_paths": [
          "src/steps/public-api/email-auth/__tests__/verify-email-auth.step.test.ts",
          "src/lib/mcp/__tests__/mcp-write-tools-connectors.test.ts"
        ]
      },
      "mcp": {
        "compiled": true,
        "eligible": false,
        "tools": [
          {
            "capability_id": "email_auth.verify",
            "capability_version": "0.1.0",
            "tool_name": "email_auth_verify",
            "oauth_tier": "mcp:write"
          }
        ]
      },
      "denominator_projection": {
        "state": "unmapped",
        "denominator_capability_id": null,
        "candidate_title": null,
        "candidate_family": null,
        "source_partition": null,
        "owner_kind": null,
        "fallback_owner": false,
        "overlap_source_control_ids": [],
        "alias": null
      }
    },
    {
      "capability_id": "inbox_draft.content.get",
      "capability_version": "0.1.0",
      "title": "Get inbox draft content",
      "family": "inbox-thread-read-workflow-lifecycle",
      "ledger_status": "draft",
      "scope_basis": "observed_dashboard",
      "parity_mode": "direct_headless",
      "business_owner": "Inbox capability owner",
      "owner_team": "Inbox capability owner",
      "surface_applicability": {
        "dashboard": {
          "state": "required",
          "rationale": "The inbox shows a draft's subject and body before a user approves or edits it."
        },
        "rest": {
          "state": "required",
          "rationale": "The public GET route returns one unsent draft's subject and body to callers allowed to approve drafts."
        },
        "cli": {
          "state": "optional",
          "rationale": "The published CLI reaches the route through its generic api command until a named command ships."
        },
        "sdk": {
          "state": "optional",
          "rationale": "Generated SDK parity remains downstream of contract closure."
        },
        "mcp": {
          "state": "required",
          "rationale": "The inbox_drafts_content_get MCP tool mirrors this route; it is listed only after this row is released."
        },
        "webhook": {
          "state": "not_applicable",
          "rationale": "Not a webhook capability."
        },
        "handoff": {
          "state": "not_applicable",
          "rationale": "No assisted provider or browser step."
        }
      },
      "wire": {
        "rest": {
          "canonical_hosts": [
            "https://api.app.firstsales.io/api/v1",
            "https://sandbox.api.app.firstsales.io/api/v1"
          ],
          "operation_ids": [
            "getInboxDraftContent"
          ],
          "route_patterns": [
            "/api/v1/organizations/{orgId}/workspaces/{wsId}/inbox/drafts/{emailId}/content"
          ],
          "auth_schemes": [
            "developer_key_bearer"
          ]
        },
        "cli": {
          "command_labels": [],
          "required_context": [
            "org",
            "workspace",
            "email"
          ]
        }
      },
      "proof": {
        "proof_id": "inbox-draft-content-get",
        "highest_seam": "runtime",
        "source_paths": [
          "src/steps/public-api/inbox/__tests__/inbox-draft-content.step.test.ts",
          "src/lib/mcp/__tests__/product-mcp-registry.test.ts"
        ]
      },
      "mcp": {
        "compiled": true,
        "eligible": false,
        "tools": [
          {
            "capability_id": "inbox_draft.content.get",
            "capability_version": "0.1.0",
            "tool_name": "inbox_drafts_content_get",
            "oauth_tier": "mcp:access"
          }
        ]
      },
      "denominator_projection": {
        "state": "unmapped",
        "denominator_capability_id": null,
        "candidate_title": null,
        "candidate_family": null,
        "source_partition": null,
        "owner_kind": null,
        "fallback_owner": false,
        "overlap_source_control_ids": [],
        "alias": null
      }
    },
    {
      "capability_id": "inbox_thread.get",
      "capability_version": "0.1.0",
      "title": "Get inbox thread",
      "family": "inbox-thread-read-workflow-lifecycle",
      "ledger_status": "planning_seed",
      "scope_basis": "observed_dashboard",
      "parity_mode": "direct_headless",
      "business_owner": "Inbox capability owner",
      "owner_team": "Inbox capability owner",
      "surface_applicability": {
        "dashboard": {
          "state": "required",
          "rationale": "Inbox thread detail is an incumbent dashboard read surface."
        },
        "rest": {
          "state": "required",
          "rationale": "The public inbox-thread detail route is already deployed."
        },
        "cli": {
          "state": "optional",
          "rationale": "CLI projection remains outside this MCP repair."
        },
        "sdk": {
          "state": "optional",
          "rationale": "Generated SDK projection remains downstream of contract closure."
        },
        "mcp": {
          "state": "required",
          "rationale": "Claude needs a tenant-scoped read-only inbox-thread detail tool once release evidence closes."
        },
        "webhook": {
          "state": "not_applicable",
          "rationale": "Inbox thread detail is a synchronous read, not a webhook capability."
        },
        "handoff": {
          "state": "not_applicable",
          "rationale": "No assisted provider or browser step is required."
        }
      },
      "wire": {
        "rest": {
          "canonical_hosts": [
            "https://api.app.firstsales.io/api/v1",
            "https://sandbox.api.app.firstsales.io/api/v1"
          ],
          "operation_ids": [
            "getInboxThread"
          ],
          "route_patterns": [
            "/api/v1/organizations/{orgId}/workspaces/{wsId}/inbox/threads/{threadId}"
          ],
          "auth_schemes": [
            "developer_key_bearer"
          ]
        },
        "cli": {
          "command_labels": [],
          "required_context": [
            "org",
            "workspace",
            "inbox_thread"
          ]
        }
      },
      "proof": {
        "proof_id": "bootstrap-inbox-thread-get",
        "highest_seam": "runtime",
        "source_paths": [
          "src/lib/public-api/__tests__/inbox-read.test.ts",
          "src/lib/mcp/__tests__/product-mcp-registry.test.ts"
        ]
      },
      "mcp": {
        "compiled": true,
        "eligible": false,
        "tools": [
          {
            "capability_id": "inbox_thread.get",
            "capability_version": "0.1.0",
            "tool_name": "inbox_threads_get",
            "oauth_tier": "mcp:access"
          }
        ]
      },
      "denominator_projection": {
        "state": "aliased",
        "denominator_capability_id": "inbox.thread.context.inspect",
        "candidate_title": "Inspect inbox thread context panels",
        "candidate_family": "Inbox, Copilot, dashboard insights, and alerts",
        "source_partition": "campaign_crm_inbox_copilot",
        "owner_kind": "backend_family_match",
        "fallback_owner": false,
        "overlap_source_control_ids": [],
        "alias": {
          "rationale": "Both authorities bind the selected inbox thread context read to the getInboxThread public operation.",
          "evidence_refs": [
            "capabilities/capability-denominator.v1.json",
            "capabilities/capability-ledger.v1.json",
            "src/steps/public-api/inbox/get-inbox-thread.step.ts"
          ],
          "evidence": {
            "kind": "rest_route",
            "method": "GET",
            "path": "/api/v1/organizations/{orgId}/workspaces/{wsId}/inbox/threads/{threadId}",
            "operation_id": "getInboxThread",
            "source_path": "src/steps/public-api/inbox/get-inbox-thread.step.ts"
          },
          "family_review": {
            "reviewed": true,
            "rationale": "The ledger uses an inbox-thread read family while the denominator groups the identical route under the broader inbox and copilot family.",
            "evidence_refs": [
              "capabilities/capability-ledger.v1.json",
              "capabilities/capability-denominator.v1.json",
              "src/steps/public-api/inbox/get-inbox-thread.step.ts"
            ]
          },
          "privilege_class_review": null
        }
      }
    },
    {
      "capability_id": "inbox_thread.list",
      "capability_version": "0.1.0",
      "title": "List inbox threads",
      "family": "inbox-thread-read-workflow-lifecycle",
      "ledger_status": "planning_seed",
      "scope_basis": "observed_dashboard",
      "parity_mode": "direct_headless",
      "business_owner": "Inbox capability owner",
      "owner_team": "Inbox capability owner",
      "surface_applicability": {
        "dashboard": {
          "state": "required",
          "rationale": "Inbox thread listing is an incumbent dashboard read surface."
        },
        "rest": {
          "state": "required",
          "rationale": "The public inbox-thread listing route is already deployed."
        },
        "cli": {
          "state": "optional",
          "rationale": "CLI projection remains outside this MCP repair."
        },
        "sdk": {
          "state": "optional",
          "rationale": "Generated SDK projection remains downstream of contract closure."
        },
        "mcp": {
          "state": "required",
          "rationale": "Claude needs a tenant-scoped read-only inbox-thread listing tool once release evidence closes."
        },
        "webhook": {
          "state": "not_applicable",
          "rationale": "Inbox thread listing is a synchronous read, not a webhook capability."
        },
        "handoff": {
          "state": "not_applicable",
          "rationale": "No assisted provider or browser step is required."
        }
      },
      "wire": {
        "rest": {
          "canonical_hosts": [
            "https://api.app.firstsales.io/api/v1",
            "https://sandbox.api.app.firstsales.io/api/v1"
          ],
          "operation_ids": [
            "listInboxThreads"
          ],
          "route_patterns": [
            "/api/v1/organizations/{orgId}/workspaces/{wsId}/inbox/threads"
          ],
          "auth_schemes": [
            "developer_key_bearer"
          ]
        },
        "cli": {
          "command_labels": [],
          "required_context": [
            "org",
            "workspace"
          ]
        }
      },
      "proof": {
        "proof_id": "bootstrap-inbox-thread-list",
        "highest_seam": "runtime",
        "source_paths": [
          "src/lib/public-api/__tests__/inbox-read.test.ts",
          "src/lib/mcp/__tests__/product-mcp-registry.test.ts"
        ]
      },
      "mcp": {
        "compiled": true,
        "eligible": false,
        "tools": [
          {
            "capability_id": "inbox_thread.list",
            "capability_version": "0.1.0",
            "tool_name": "inbox_threads_list",
            "oauth_tier": "mcp:access"
          }
        ]
      },
      "denominator_projection": {
        "state": "aliased",
        "denominator_capability_id": "inbox.thread_list.inspect",
        "candidate_title": "Inspect inbox thread list",
        "candidate_family": "Inbox, Copilot, dashboard insights, and alerts",
        "source_partition": "campaign_crm_inbox_copilot",
        "owner_kind": "backend_family_match",
        "fallback_owner": false,
        "overlap_source_control_ids": [
          "inbox.search_filters_tabs_bulk"
        ],
        "alias": {
          "rationale": "Both authorities bind inbox thread collection inspection to the listInboxThreads public operation.",
          "evidence_refs": [
            "capabilities/capability-denominator.v1.json",
            "capabilities/capability-ledger.v1.json",
            "src/steps/public-api/inbox/list-inbox-threads.step.ts"
          ],
          "evidence": {
            "kind": "rest_route",
            "method": "GET",
            "path": "/api/v1/organizations/{orgId}/workspaces/{wsId}/inbox/threads",
            "operation_id": "listInboxThreads",
            "source_path": "src/steps/public-api/inbox/list-inbox-threads.step.ts"
          },
          "family_review": {
            "reviewed": true,
            "rationale": "The ledger uses an inbox-thread read family while the denominator groups the identical route under the broader inbox and copilot family.",
            "evidence_refs": [
              "capabilities/capability-ledger.v1.json",
              "capabilities/capability-denominator.v1.json",
              "src/steps/public-api/inbox/list-inbox-threads.step.ts"
            ]
          },
          "privilege_class_review": null
        }
      }
    },
    {
      "capability_id": "knowledge_base.get",
      "capability_version": "0.1.0",
      "title": "Get knowledge base",
      "family": "knowledge-base-read-workflow-lifecycle",
      "ledger_status": "planning_seed",
      "scope_basis": "observed_dashboard",
      "parity_mode": "direct_headless",
      "business_owner": "Knowledge base capability owner",
      "owner_team": "Knowledge base capability owner",
      "surface_applicability": {
        "dashboard": {
          "state": "required",
          "rationale": "Knowledge base detail is an incumbent dashboard read surface."
        },
        "rest": {
          "state": "required",
          "rationale": "The public knowledge-base detail route is already deployed."
        },
        "cli": {
          "state": "optional",
          "rationale": "CLI projection remains outside this MCP repair."
        },
        "sdk": {
          "state": "optional",
          "rationale": "Generated SDK projection remains downstream of contract closure."
        },
        "mcp": {
          "state": "required",
          "rationale": "Claude needs a tenant-scoped read-only knowledge-base detail tool once release evidence closes."
        },
        "webhook": {
          "state": "not_applicable",
          "rationale": "Knowledge base detail is a synchronous read, not a webhook capability."
        },
        "handoff": {
          "state": "not_applicable",
          "rationale": "No assisted provider or browser step is required."
        }
      },
      "wire": {
        "rest": {
          "canonical_hosts": [
            "https://api.app.firstsales.io/api/v1",
            "https://sandbox.api.app.firstsales.io/api/v1"
          ],
          "operation_ids": [
            "getKnowledgeBase"
          ],
          "route_patterns": [
            "/api/v1/organizations/{orgId}/workspaces/{wsId}/knowledge-bases/{kbId}"
          ],
          "auth_schemes": [
            "developer_key_bearer"
          ]
        },
        "cli": {
          "command_labels": [],
          "required_context": [
            "org",
            "workspace",
            "knowledge_base"
          ]
        }
      },
      "proof": {
        "proof_id": "bootstrap-knowledge-base-get",
        "highest_seam": "runtime",
        "source_paths": [
          "src/lib/public-api/__tests__/knowledge-base-read.test.ts",
          "src/lib/mcp/__tests__/product-mcp-registry.test.ts"
        ]
      },
      "mcp": {
        "compiled": true,
        "eligible": false,
        "tools": [
          {
            "capability_id": "knowledge_base.get",
            "capability_version": "0.1.0",
            "tool_name": "knowledge_bases_get",
            "oauth_tier": "mcp:access"
          }
        ]
      },
      "denominator_projection": {
        "state": "unmapped",
        "denominator_capability_id": null,
        "candidate_title": null,
        "candidate_family": null,
        "source_partition": null,
        "owner_kind": null,
        "fallback_owner": false,
        "overlap_source_control_ids": [],
        "alias": null
      }
    },
    {
      "capability_id": "knowledge_base.list",
      "capability_version": "0.1.0",
      "title": "List knowledge bases",
      "family": "knowledge-base-read-workflow-lifecycle",
      "ledger_status": "planning_seed",
      "scope_basis": "observed_dashboard",
      "parity_mode": "direct_headless",
      "business_owner": "Knowledge base capability owner",
      "owner_team": "Knowledge base capability owner",
      "surface_applicability": {
        "dashboard": {
          "state": "required",
          "rationale": "Knowledge base listing is an incumbent dashboard read surface."
        },
        "rest": {
          "state": "required",
          "rationale": "The public knowledge-base listing route is already deployed."
        },
        "cli": {
          "state": "optional",
          "rationale": "CLI projection remains outside this MCP repair."
        },
        "sdk": {
          "state": "optional",
          "rationale": "Generated SDK projection remains downstream of contract closure."
        },
        "mcp": {
          "state": "required",
          "rationale": "Claude needs a tenant-scoped read-only knowledge-base listing tool once release evidence closes."
        },
        "webhook": {
          "state": "not_applicable",
          "rationale": "Knowledge base listing is a synchronous read, not a webhook capability."
        },
        "handoff": {
          "state": "not_applicable",
          "rationale": "No assisted provider or browser step is required."
        }
      },
      "wire": {
        "rest": {
          "canonical_hosts": [
            "https://api.app.firstsales.io/api/v1",
            "https://sandbox.api.app.firstsales.io/api/v1"
          ],
          "operation_ids": [
            "listKnowledgeBases"
          ],
          "route_patterns": [
            "/api/v1/organizations/{orgId}/workspaces/{wsId}/knowledge-bases"
          ],
          "auth_schemes": [
            "developer_key_bearer"
          ]
        },
        "cli": {
          "command_labels": [],
          "required_context": [
            "org",
            "workspace"
          ]
        }
      },
      "proof": {
        "proof_id": "bootstrap-knowledge-base-list",
        "highest_seam": "runtime",
        "source_paths": [
          "src/lib/public-api/__tests__/knowledge-base-read.test.ts",
          "src/lib/mcp/__tests__/product-mcp-registry.test.ts"
        ]
      },
      "mcp": {
        "compiled": true,
        "eligible": false,
        "tools": [
          {
            "capability_id": "knowledge_base.list",
            "capability_version": "0.1.0",
            "tool_name": "knowledge_bases_list",
            "oauth_tier": "mcp:access"
          }
        ]
      },
      "denominator_projection": {
        "state": "unmapped",
        "denominator_capability_id": null,
        "candidate_title": null,
        "candidate_family": null,
        "source_partition": null,
        "owner_kind": null,
        "fallback_owner": false,
        "overlap_source_control_ids": [],
        "alias": null
      }
    },
    {
      "capability_id": "pipeline.get",
      "capability_version": "0.1.0",
      "title": "Get pipeline",
      "family": "deal-and-pipeline-read-workflow-lifecycle",
      "ledger_status": "closed",
      "scope_basis": "observed_dashboard",
      "parity_mode": "direct_headless",
      "business_owner": "Deal capability owner",
      "owner_team": "Deal capability owner",
      "surface_applicability": {
        "dashboard": {
          "state": "required",
          "rationale": "Pipeline detail is an incumbent dashboard read surface."
        },
        "rest": {
          "state": "required",
          "rationale": "The public pipeline detail route is already deployed."
        },
        "cli": {
          "state": "optional",
          "rationale": "CLI projection remains outside this MCP repair."
        },
        "sdk": {
          "state": "optional",
          "rationale": "Generated SDK projection remains downstream of contract closure."
        },
        "mcp": {
          "state": "required",
          "rationale": "Claude needs a tenant-scoped read-only pipeline detail tool."
        },
        "webhook": {
          "state": "not_applicable",
          "rationale": "Pipeline detail is a synchronous read, not a webhook capability."
        },
        "handoff": {
          "state": "not_applicable",
          "rationale": "No assisted provider or browser step is required."
        }
      },
      "wire": {
        "rest": {
          "canonical_hosts": [
            "https://api.app.firstsales.io/api/v1",
            "https://sandbox.api.app.firstsales.io/api/v1"
          ],
          "operation_ids": [
            "getPipeline"
          ],
          "route_patterns": [
            "/api/v1/organizations/{orgId}/workspaces/{wsId}/pipelines/{pipelineId}"
          ],
          "auth_schemes": [
            "developer_key_bearer"
          ]
        },
        "cli": {
          "command_labels": [],
          "required_context": [
            "org",
            "workspace",
            "pipeline"
          ]
        }
      },
      "proof": {
        "proof_id": "mcp-pipeline-get",
        "highest_seam": "runtime",
        "runnable_artifacts": [
          "src/lib/public-api/__tests__/deal-pipeline-read.test.ts",
          "src/steps/public-api/deals/__tests__/get-pipeline.step.test.ts",
          "src/lib/mcp/__tests__/product-mcp-registry.test.ts",
          "src/tests/developer-api-openapi-contract.test.ts",
          "src/tests/developer-api-wave-a-measurements.test.ts"
        ],
        "source_paths": [
          "src/lib/public-api/__tests__/deal-pipeline-read.test.ts",
          "src/lib/mcp/__tests__/product-mcp-registry.test.ts",
          "src/tests/developer-api-openapi-contract.test.ts",
          "src/tests/developer-api-wave-a-measurements.test.ts"
        ],
        "generated_checks": [
          "pipeline detail remains tenant-scoped to one OAuth-granted workspace and requested pipeline identity",
          "pipeline detail preserves the strict public pipeline and stage allow-list"
        ],
        "covers_axes": [
          "discover",
          "inspect",
          "observe",
          "verify",
          "policy_bound"
        ]
      },
      "mcp": {
        "compiled": true,
        "eligible": true,
        "tools": [
          {
            "capability_id": "pipeline.get",
            "capability_version": "0.1.0",
            "tool_name": "pipelines_get",
            "oauth_tier": "mcp:access"
          }
        ]
      },
      "denominator_projection": {
        "state": "unmapped",
        "denominator_capability_id": null,
        "candidate_title": null,
        "candidate_family": null,
        "source_partition": null,
        "owner_kind": null,
        "fallback_owner": false,
        "overlap_source_control_ids": [],
        "alias": null
      }
    },
    {
      "capability_id": "pipeline.list",
      "capability_version": "0.1.0",
      "title": "List pipelines",
      "family": "deal-and-pipeline-read-workflow-lifecycle",
      "ledger_status": "planning_seed",
      "scope_basis": "observed_dashboard",
      "parity_mode": "direct_headless",
      "business_owner": "Deal capability owner",
      "owner_team": "Deal capability owner",
      "surface_applicability": {
        "dashboard": {
          "state": "required",
          "rationale": "Pipeline listing is an incumbent dashboard read surface."
        },
        "rest": {
          "state": "required",
          "rationale": "The public pipeline listing route is already deployed."
        },
        "cli": {
          "state": "optional",
          "rationale": "CLI projection remains outside this MCP repair."
        },
        "sdk": {
          "state": "optional",
          "rationale": "Generated SDK projection remains downstream of contract closure."
        },
        "mcp": {
          "state": "required",
          "rationale": "The compiled read-only MCP binding remains ledger-gated until list cardinality is bounded."
        },
        "webhook": {
          "state": "not_applicable",
          "rationale": "Pipeline listing is a synchronous read, not a webhook capability."
        },
        "handoff": {
          "state": "not_applicable",
          "rationale": "No assisted provider or browser step is required."
        }
      },
      "wire": {
        "rest": {
          "canonical_hosts": [
            "https://api.app.firstsales.io/api/v1",
            "https://sandbox.api.app.firstsales.io/api/v1"
          ],
          "operation_ids": [
            "listPipelines"
          ],
          "route_patterns": [
            "/api/v1/organizations/{orgId}/workspaces/{wsId}/pipelines"
          ],
          "auth_schemes": [
            "developer_key_bearer"
          ]
        },
        "cli": {
          "command_labels": [],
          "required_context": [
            "org",
            "workspace"
          ]
        }
      },
      "proof": {
        "proof_id": "bootstrap-pipeline-list",
        "highest_seam": "runtime",
        "runnable_artifacts": [
          "src/lib/public-api/__tests__/deal-pipeline-read.test.ts",
          "src/steps/public-api/deals/__tests__/list-pipelines.step.test.ts",
          "src/lib/mcp/__tests__/product-mcp-registry.test.ts",
          "src/tests/developer-api-openapi-contract.test.ts",
          "src/tests/developer-api-wave-a-measurements.test.ts"
        ],
        "source_paths": [
          "src/lib/public-api/__tests__/deal-pipeline-read.test.ts",
          "src/lib/mcp/__tests__/product-mcp-registry.test.ts",
          "src/tests/developer-api-openapi-contract.test.ts",
          "src/tests/developer-api-wave-a-measurements.test.ts"
        ],
        "generated_checks": [
          "pipeline listing remains tenant-scoped to one OAuth-granted workspace and exposes public fields only",
          "unbounded list cardinality remains explicit and prevents MCP promotion"
        ],
        "covers_axes": [
          "discover",
          "inspect",
          "observe",
          "verify",
          "policy_bound"
        ]
      },
      "mcp": {
        "compiled": true,
        "eligible": false,
        "tools": [
          {
            "capability_id": "pipeline.list",
            "capability_version": "0.1.0",
            "tool_name": "pipelines_list",
            "oauth_tier": "mcp:access"
          }
        ]
      },
      "denominator_projection": {
        "state": "aliased",
        "denominator_capability_id": "pipeline.list.inspect",
        "candidate_title": "Inspect pipeline list",
        "candidate_family": "Companies, deals, pipelines, and activities",
        "source_partition": "campaign_crm_inbox_copilot",
        "owner_kind": "backend_family_match",
        "fallback_owner": false,
        "overlap_source_control_ids": [
          "deals.pipelines_forecast_status"
        ],
        "alias": {
          "rationale": "Both authorities bind the pipeline collection read to the listPipelines public operation.",
          "evidence_refs": [
            "capabilities/capability-denominator.v1.json",
            "capabilities/capability-ledger.v1.json",
            "src/steps/public-api/deals/list-pipelines.step.ts"
          ],
          "evidence": {
            "kind": "rest_route",
            "method": "GET",
            "path": "/api/v1/organizations/{orgId}/workspaces/{wsId}/pipelines",
            "operation_id": "listPipelines",
            "source_path": "src/steps/public-api/deals/list-pipelines.step.ts"
          },
          "family_review": {
            "reviewed": true,
            "rationale": "The ledger uses a deal-and-pipeline read family while the denominator groups the identical route under the broader CRM family.",
            "evidence_refs": [
              "capabilities/capability-ledger.v1.json",
              "capabilities/capability-denominator.v1.json",
              "src/steps/public-api/deals/list-pipelines.step.ts"
            ]
          },
          "privilege_class_review": null
        }
      }
    },
    {
      "capability_id": "team.member.inspect",
      "capability_version": "0.1.0",
      "title": "Inspect team members",
      "family": "identity-organizations-workspaces-teams-permissions",
      "ledger_status": "closed",
      "scope_basis": "observed_dashboard",
      "parity_mode": "direct_headless",
      "business_owner": "Team capability owner",
      "owner_team": "Team capability owner",
      "surface_applicability": {
        "dashboard": {
          "state": "required",
          "rationale": "Team membership is an incumbent organization settings surface."
        },
        "rest": {
          "state": "required",
          "rationale": "The public organization member listing route is already deployed."
        },
        "cli": {
          "state": "required",
          "rationale": "The checked-in CLI exposes members list."
        },
        "sdk": {
          "state": "optional",
          "rationale": "Generated SDK projection remains downstream of contract closure."
        },
        "mcp": {
          "state": "required",
          "rationale": "Claude needs an organization-scoped bounded team-member read tool."
        },
        "webhook": {
          "state": "not_applicable",
          "rationale": "Team member listing is a synchronous read."
        },
        "handoff": {
          "state": "not_applicable",
          "rationale": "No assisted provider or browser step is required."
        }
      },
      "wire": {
        "rest": {
          "canonical_hosts": [
            "https://api.app.firstsales.io/api/v1",
            "https://sandbox.api.app.firstsales.io/api/v1"
          ],
          "operation_ids": [
            "listTeamMembers"
          ],
          "route_patterns": [
            "/api/v1/organizations/{orgId}/members"
          ],
          "auth_schemes": [
            "developer_key_bearer"
          ],
          "evidence_bounds": [
            {
              "target": "query.search",
              "kind": "max_length",
              "max": 200,
              "source": "runtime+MCP+OpenAPI"
            },
            {
              "target": "query.page",
              "kind": "integer_range",
              "min": 1,
              "max": 9007199254740991,
              "default": 1,
              "source": "runtime+MCP+OpenAPI"
            },
            {
              "target": "query.limit",
              "kind": "integer_range",
              "min": 1,
              "max": 100,
              "default": 50,
              "source": "runtime+MCP+OpenAPI"
            },
            {
              "target": "response.members",
              "kind": "max_items",
              "max": 100,
              "source": "runtime+MCP+OpenAPI"
            }
          ]
        },
        "cli": {
          "command_labels": [
            "members list"
          ],
          "required_context": [
            "org"
          ]
        }
      },
      "proof": {
        "proof_id": "mcp-team-members-list",
        "highest_seam": "runtime",
        "runnable_artifacts": [
          "src/lib/public-api/__tests__/team-member-read-safety.test.ts",
          "src/steps/public-api/team/__tests__/team.step.test.ts",
          "src/lib/mcp/__tests__/team-members-list-binding.test.ts",
          "src/lib/mcp/__tests__/billing-team-read-route.test.ts",
          "src/lib/mcp/__tests__/product-mcp-registry.test.ts",
          "src/tests/developer-api-openapi-contract.test.ts",
          "src/tests/developer-api-wave-a-measurements.test.ts"
        ],
        "source_paths": [
          "src/lib/public-api/__tests__/team-member-read-safety.test.ts",
          "src/steps/public-api/team/__tests__/team.step.test.ts",
          "src/lib/mcp/__tests__/team-members-list-binding.test.ts",
          "src/lib/mcp/__tests__/billing-team-read-route.test.ts",
          "src/lib/mcp/__tests__/product-mcp-registry.test.ts",
          "src/tests/developer-api-openapi-contract.test.ts",
          "src/tests/developer-api-wave-a-measurements.test.ts"
        ],
        "generated_checks": [
          "team members remain tenant-scoped to one current OAuth-granted organization and fail closed after grant revocation",
          "team member search is bounded and literal while each response returns at most 100 strict public projections"
        ],
        "covers_axes": [
          "discover",
          "inspect",
          "observe",
          "verify",
          "policy_bound"
        ]
      },
      "mcp": {
        "compiled": true,
        "eligible": true,
        "tools": [
          {
            "capability_id": "team.member.inspect",
            "capability_version": "0.1.0",
            "tool_name": "team_members_list",
            "oauth_tier": "mcp:access"
          }
        ]
      },
      "denominator_projection": {
        "state": "exact",
        "denominator_capability_id": "team.member.inspect",
        "candidate_title": "Inspect team members",
        "candidate_family": "team",
        "source_partition": "account_settings",
        "owner_kind": "backend_family_match",
        "fallback_owner": false,
        "overlap_source_control_ids": [],
        "alias": null
      }
    }
  ],
  "canonical_unmapped_rows": [
    {
      "capability_id": "auth.developer_identity.read",
      "state": "platform_foundation_unmapped"
    },
    {
      "capability_id": "billing.credit.balance",
      "state": "unmapped"
    },
    {
      "capability_id": "billing.credit.history.inspect",
      "state": "unmapped"
    },
    {
      "capability_id": "blocked_domain.add",
      "state": "unmapped"
    },
    {
      "capability_id": "blocked_domain.list",
      "state": "unmapped"
    },
    {
      "capability_id": "blocked_domain.remove",
      "state": "unmapped"
    },
    {
      "capability_id": "campaign.get",
      "state": "unmapped"
    },
    {
      "capability_id": "campaign.lead.inspect_list",
      "state": "unmapped"
    },
    {
      "capability_id": "campaign.list",
      "state": "unmapped"
    },
    {
      "capability_id": "campaign.progress.inspect",
      "state": "unmapped"
    },
    {
      "capability_id": "campaign.source.inspect_list",
      "state": "unmapped"
    },
    {
      "capability_id": "campaign.workflow.inspect",
      "state": "unmapped"
    },
    {
      "capability_id": "campaign.workflow.update_targets",
      "state": "unmapped"
    },
    {
      "capability_id": "company.import",
      "state": "unmapped"
    },
    {
      "capability_id": "connector.cal_com.create",
      "state": "unmapped"
    },
    {
      "capability_id": "connector.warmup.inspect",
      "state": "unmapped"
    },
    {
      "capability_id": "contact_list.membership.update",
      "state": "unmapped"
    },
    {
      "capability_id": "copilot.session.inspect",
      "state": "unmapped"
    },
    {
      "capability_id": "direct_email.cancel",
      "state": "unmapped"
    },
    {
      "capability_id": "direct_email.draft",
      "state": "unmapped"
    },
    {
      "capability_id": "direct_email.schedule",
      "state": "unmapped"
    },
    {
      "capability_id": "direct_email.send",
      "state": "unmapped"
    },
    {
      "capability_id": "email_auth.verify",
      "state": "unmapped"
    },
    {
      "capability_id": "inbox_draft.content.get",
      "state": "unmapped"
    },
    {
      "capability_id": "knowledge_base.get",
      "state": "unmapped"
    },
    {
      "capability_id": "knowledge_base.list",
      "state": "unmapped"
    },
    {
      "capability_id": "pipeline.get",
      "state": "unmapped"
    }
  ],
  "candidate_only_rows": [
    {
      "state": "candidate_only",
      "capability_id": "activity.create",
      "title": "Create scheduled activity",
      "family": "Companies, deals, pipelines, and activities",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "activity.delete",
      "title": "Delete scheduled activity",
      "family": "Companies, deals, pipelines, and activities",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "activity.update",
      "title": "Update scheduled activity",
      "family": "Companies, deals, pipelines, and activities",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "alert.filter.update",
      "title": "Change alert filters",
      "family": "Inbox, Copilot, dashboard insights, and alerts",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "alert.health.inspect",
      "title": "Inspect alert health summary and unread badge",
      "family": "Inbox, Copilot, dashboard insights, and alerts",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "alert.resolve",
      "title": "Resolve alert occurrence",
      "family": "Inbox, Copilot, dashboard insights, and alerts",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "alert.seen.mark",
      "title": "Mark alert seen",
      "family": "Inbox, Copilot, dashboard insights, and alerts",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "alert.snooze",
      "title": "Snooze alert occurrence",
      "family": "Inbox, Copilot, dashboard insights, and alerts",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "alerts-notifications.action.mark-seen-on-mount",
      "title": "Mark-seen on mount",
      "family": "Alerts and notifications",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "alerts-notifications.action.resolve-alert",
      "title": "Resolve alert",
      "family": "Alerts and notifications",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "alerts-notifications.action.snooze-alert",
      "title": "Snooze alert",
      "family": "Alerts and notifications",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "alerts-notifications.filter.alert-filters",
      "title": "Alert filters",
      "family": "Alerts and notifications",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "alerts-notifications.navigate.open-alert-cta",
      "title": "Open alert CTA",
      "family": "Alerts and notifications",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "alerts-notifications.status.alert-center-header",
      "title": "Alert Center header",
      "family": "Alerts and notifications",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "billing.direct_link_claim.confirm",
      "title": "Confirm direct-link purchase against an organization",
      "family": "billing",
      "source_partition": "account_settings",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "billing.payment_activation.inspect",
      "title": "Inspect payment activation and retry status reconciliation",
      "family": "billing",
      "source_partition": "account_settings",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "billing.promo.apply",
      "title": "Apply promo code",
      "family": "billing",
      "source_partition": "account_settings",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "billing.subscription.auto_renewal.update",
      "title": "Update subscription auto-renewal",
      "family": "billing",
      "source_partition": "account_settings",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "billing.subscription.cancel",
      "title": "Cancel subscription",
      "family": "billing",
      "source_partition": "account_settings",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "billing.subscription.plan_change",
      "title": "Change subscription plan or billing interval",
      "family": "billing",
      "source_partition": "account_settings",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "billing.subscription.reactivate",
      "title": "Reactivate subscription",
      "family": "billing",
      "source_partition": "account_settings",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "billing.top_up.purchase",
      "title": "Purchase credit top-up",
      "family": "billing",
      "source_partition": "account_settings",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "campaign.ab_test_policy.update",
      "title": "Update campaign A/B test scheduling policy",
      "family": "Campaign creation, configuration, workflow, and lifecycle",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "campaign.audience.bulk_add_contacts",
      "title": "Add selected contacts to campaign audience",
      "family": "Campaign creation, configuration, workflow, and lifecycle",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "campaign.audience.inspect",
      "title": "Inspect campaign audience contacts and filters",
      "family": "Campaign creation, configuration, workflow, and lifecycle",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "campaign.audience.repair",
      "title": "Repair campaign audience readiness blockers",
      "family": "Campaign creation, configuration, workflow, and lifecycle",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "campaign.claim_provenance.confirm",
      "title": "Confirm claim provenance for launch",
      "family": "Campaign creation, configuration, workflow, and lifecycle",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "campaign.claim_provenance.inspect",
      "title": "Inspect claim provenance blocking launch",
      "family": "Campaign creation, configuration, workflow, and lifecycle",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "campaign.delivery_guardrail.update",
      "title": "Update cold-contact delivery guardrail threshold",
      "family": "Campaign creation, configuration, workflow, and lifecycle",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "campaign.email_preview.inspect",
      "title": "Inspect rendered campaign email preview",
      "family": "Campaign creation, configuration, workflow, and lifecycle",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "campaign.email_retry.cancel",
      "title": "Cancel pending campaign email retry",
      "family": "Campaign creation, configuration, workflow, and lifecycle",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "campaign.goal.calendar_assignment.update",
      "title": "Assign calendars required by meeting goal",
      "family": "Campaign creation, configuration, workflow, and lifecycle",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "campaign.goal.link.update",
      "title": "Update campaign goal link",
      "family": "Campaign creation, configuration, workflow, and lifecycle",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "campaign.launch.confirm",
      "title": "Confirm live campaign launch",
      "family": "Campaign creation, configuration, workflow, and lifecycle",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "campaign.launch.prepare",
      "title": "Prepare launch confirmation",
      "family": "Campaign creation, configuration, workflow, and lifecycle",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "campaign.lifecycle.pause",
      "title": "Pause live campaign",
      "family": "Campaign creation, configuration, workflow, and lifecycle",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "campaign.lifecycle.resume",
      "title": "Resume paused campaign",
      "family": "Campaign creation, configuration, workflow, and lifecycle",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "campaign.lifecycle.save",
      "title": "Save campaign workflow state",
      "family": "Campaign creation, configuration, workflow, and lifecycle",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "campaign.lifecycle.stop",
      "title": "Stop live campaign",
      "family": "Campaign creation, configuration, workflow, and lifecycle",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "campaign.meeting_calendar_assignment.update",
      "title": "Update meeting-goal calendar assignments",
      "family": "Campaign creation, configuration, workflow, and lifecycle",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "campaign.operations_summary.inspect",
      "title": "Inspect post-launch operations summary",
      "family": "Campaign creation, configuration, workflow, and lifecycle",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "campaign.optimization_policy.update",
      "title": "Update campaign auto-optimization policy",
      "family": "Campaign creation, configuration, workflow, and lifecycle",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "campaign.order_signal.ingest",
      "title": "Accept campaign order signal ingress",
      "family": "Campaign creation, configuration, workflow, and lifecycle",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "campaign.out_of_office_policy.update",
      "title": "Update out-of-office handling policy",
      "family": "Campaign creation, configuration, workflow, and lifecycle",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "campaign.readiness.defer",
      "title": "Defer readiness blocker",
      "family": "Campaign creation, configuration, workflow, and lifecycle",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "campaign.readiness.inspect",
      "title": "Inspect campaign readiness state",
      "family": "Campaign creation, configuration, workflow, and lifecycle",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "campaign.readiness.resume",
      "title": "Resume deferred readiness blocker",
      "family": "Campaign creation, configuration, workflow, and lifecycle",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "campaign.recipient_bcc_list.update",
      "title": "Update campaign BCC recipient list",
      "family": "Campaign creation, configuration, workflow, and lifecycle",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "campaign.recipient_cc_list.update",
      "title": "Update campaign CC recipient list",
      "family": "Campaign creation, configuration, workflow, and lifecycle",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "campaign.reply_policy.update",
      "title": "Update campaign reply-stop policy",
      "family": "Campaign creation, configuration, workflow, and lifecycle",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "campaign.schedule.update",
      "title": "Update campaign send schedule",
      "family": "Campaign creation, configuration, workflow, and lifecycle",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "campaign.sender_assignment.update",
      "title": "Update campaign sender assignments",
      "family": "Campaign creation, configuration, workflow, and lifecycle",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "campaign.sender_auth.inspect",
      "title": "Inspect sender DNS and authentication readiness",
      "family": "Campaign creation, configuration, workflow, and lifecycle",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "campaign.sender_repair.initiate",
      "title": "Initiate sender repair flow from campaign settings",
      "family": "Campaign creation, configuration, workflow, and lifecycle",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "campaign.signature_policy.inspect",
      "title": "Inspect effective sender signature policy",
      "family": "Campaign creation, configuration, workflow, and lifecycle",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "campaign.source.attach_list",
      "title": "Attach source list to campaign audience",
      "family": "Campaign creation, configuration, workflow, and lifecycle",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "campaign.source.import_csv",
      "title": "Import CSV source into campaign audience",
      "family": "Campaign creation, configuration, workflow, and lifecycle",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "campaign.test_override.acknowledge",
      "title": "Acknowledge test override before launch",
      "family": "Campaign creation, configuration, workflow, and lifecycle",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "campaign.tracking_domain.inspect",
      "title": "Inspect campaign tracking-domain assignment and match state",
      "family": "Campaign creation, configuration, workflow, and lifecycle",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "campaign.validation.run",
      "title": "Run campaign workflow validation",
      "family": "Campaign creation, configuration, workflow, and lifecycle",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "campaign.workflow.approval.configure",
      "title": "Configure workflow approval node",
      "family": "Campaign creation, configuration, workflow, and lifecycle",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "campaign.workflow.dynamic_field.configure",
      "title": "Configure workflow registry-backed dynamic fields",
      "family": "Campaign creation, configuration, workflow, and lifecycle",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "campaign.workflow.signal.inspect_placeholder",
      "title": "Inspect workflow signal node placeholder state",
      "family": "Campaign creation, configuration, workflow, and lifecycle",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "campaign.workflow.template_preview.inspect",
      "title": "Inspect workflow template preview and variant completeness",
      "family": "Campaign creation, configuration, workflow, and lifecycle",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "campaign.workflow.validation.fix_all",
      "title": "Apply all workflow auto-fixes",
      "family": "Campaign creation, configuration, workflow, and lifecycle",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "campaign.workflow.validation.fix_one",
      "title": "Apply one workflow auto-fix",
      "family": "Campaign creation, configuration, workflow, and lifecycle",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "campaign.workflow.validation.inspect",
      "title": "Inspect workflow validation results",
      "family": "Campaign creation, configuration, workflow, and lifecycle",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "campaign.workflow.wait_delay.update",
      "title": "Update workflow wait-delay configuration",
      "family": "Campaign creation, configuration, workflow, and lifecycle",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "campaign.workflow.webhook.configure",
      "title": "Configure workflow webhook node",
      "family": "Campaign creation, configuration, workflow, and lifecycle",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "company.create",
      "title": "Create company",
      "family": "Companies, deals, pipelines, and activities",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "company.delete",
      "title": "Delete company",
      "family": "Companies, deals, pipelines, and activities",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "company.duplicates.inspect",
      "title": "Inspect duplicate companies",
      "family": "Companies, deals, pipelines, and activities",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "company.merge.commit",
      "title": "Commit company merge",
      "family": "Companies, deals, pipelines, and activities",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "company.merge.preview",
      "title": "Preview company merge",
      "family": "Companies, deals, pipelines, and activities",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "company.merge.undo",
      "title": "Undo company merge",
      "family": "Companies, deals, pipelines, and activities",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "company.timeline.inspect",
      "title": "Inspect company timeline",
      "family": "Companies, deals, pipelines, and activities",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "company.update",
      "title": "Update company",
      "family": "Companies, deals, pipelines, and activities",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "connector.calendar.connect",
      "title": "Connect calendar from campaign context",
      "family": "Connectors, sender health, domains, and provider Handoffs",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "connector.email_account.connect",
      "title": "Connect email account from campaign context",
      "family": "Connectors, sender health, domains, and provider Handoffs",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "connectors-and-sender-accounts.action.delete-connector",
      "title": "Delete connector",
      "family": "Connectors and sender accounts",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "connectors-and-sender-accounts.action.google-account",
      "title": "Connect Google account",
      "family": "Connectors and sender accounts",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "connectors-and-sender-accounts.action.microsoft-account",
      "title": "Connect Microsoft account",
      "family": "Connectors and sender accounts",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "connectors-and-sender-accounts.action.reconnect-account",
      "title": "Reconnect account",
      "family": "Connectors and sender accounts",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "connectors-and-sender-accounts.action.smtp-imap-and-relay-setup",
      "title": "SMTP / IMAP and relay setup",
      "family": "Connectors and sender accounts",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "connectors-and-sender-accounts.action.test-connection",
      "title": "Test connection",
      "family": "Connectors and sender accounts",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "connectors-and-sender-accounts.browse.coming-soon-provider-groups",
      "title": "Coming-soon provider groups",
      "family": "Connectors and sender accounts",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "connectors-and-sender-accounts.browse.live-provider-set",
      "title": "Live provider set",
      "family": "Connectors and sender accounts",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "connectors-and-sender-accounts.filter.connector-search-and-category-browse",
      "title": "Connector search and category browse",
      "family": "Connectors and sender accounts",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "connectors-and-sender-accounts.profile.sender-profile-fields",
      "title": "Sender profile fields",
      "family": "Connectors and sender accounts",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "connectors-and-sender-accounts.section.sync-section",
      "title": "Sync section",
      "family": "Connectors and sender accounts",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "connectors-and-sender-accounts.settings.daily-limit",
      "title": "Set daily limit",
      "family": "Connectors and sender accounts",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "connectors-and-sender-accounts.settings.send-ceiling",
      "title": "Set send ceiling",
      "family": "Connectors and sender accounts",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "connectors-and-sender-accounts.status.connector-detail-snapshot",
      "title": "Connector detail snapshot",
      "family": "Connectors and sender accounts",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "connectors-and-sender-accounts.toggle.auto-adjust",
      "title": "Toggle auto-adjust",
      "family": "Connectors and sender accounts",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "connectors-and-sender-accounts.toggle.email-signature",
      "title": "Email signature",
      "family": "Connectors and sender accounts",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "contact.delete",
      "title": "Delete contact",
      "family": "Contacts, lists, fields, imports, and exports",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "contact.delete.bulk",
      "title": "Delete contacts in bulk",
      "family": "Contacts, lists, fields, imports, and exports",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "contact.email.send_manual",
      "title": "Send manual email to contact",
      "family": "Contacts, lists, fields, imports, and exports",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "contact.export.bulk",
      "title": "Export selected contacts",
      "family": "Contacts, lists, fields, imports, and exports",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "contact.fields.inspect",
      "title": "Inspect contact field catalog",
      "family": "Contacts, lists, fields, imports, and exports",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "contact.import.preview",
      "title": "Preview contact CSV import",
      "family": "Contacts, lists, fields, imports, and exports",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "contact.import.submit",
      "title": "Submit contact CSV import",
      "family": "Contacts, lists, fields, imports, and exports",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "contact.list_membership.add_bulk",
      "title": "Add contacts to list in bulk",
      "family": "Contacts, lists, fields, imports, and exports",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "contact.list.create",
      "title": "Create contact list",
      "family": "Contacts, lists, fields, imports, and exports",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "contact.list.delete.commit",
      "title": "Delete contact list",
      "family": "Contacts, lists, fields, imports, and exports",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "contact.list.delete.preview",
      "title": "Preview contact list deletion impact",
      "family": "Contacts, lists, fields, imports, and exports",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "contact.list.inspect_catalog",
      "title": "Inspect contact lists catalog",
      "family": "Contacts, lists, fields, imports, and exports",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "contact.list.update",
      "title": "Update contact list",
      "family": "Contacts, lists, fields, imports, and exports",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "contact.merge.commit",
      "title": "Commit contact merge",
      "family": "Contacts, lists, fields, imports, and exports",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "contact.merge.preview",
      "title": "Preview contact merge",
      "family": "Contacts, lists, fields, imports, and exports",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "contact.merge.undo",
      "title": "Undo contact merge",
      "family": "Contacts, lists, fields, imports, and exports",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "contact.tag.add_bulk",
      "title": "Add tags to contacts in bulk",
      "family": "Contacts, lists, fields, imports, and exports",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "contact.tag.remove_bulk",
      "title": "Remove tags from contacts in bulk",
      "family": "Contacts, lists, fields, imports, and exports",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "contact.threads.inspect",
      "title": "Inspect contact-linked email threads",
      "family": "Contacts, lists, fields, imports, and exports",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "contact.verification.mark_valid_bulk",
      "title": "Mark contacts valid in bulk",
      "family": "Contacts, lists, fields, imports, and exports",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "contact.verification.retest_bulk",
      "title": "Retest contacts in bulk",
      "family": "Contacts, lists, fields, imports, and exports",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "copilot.approval.approve",
      "title": "Approve Copilot proposal",
      "family": "Inbox, Copilot, dashboard insights, and alerts",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "copilot.approval.bulk_verdict",
      "title": "Apply bulk Copilot approval verdict",
      "family": "Inbox, Copilot, dashboard insights, and alerts",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "copilot.approval.edit_and_approve",
      "title": "Edit Copilot proposal and approve it",
      "family": "Inbox, Copilot, dashboard insights, and alerts",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "copilot.approval.inspect_item",
      "title": "Inspect Copilot approval item",
      "family": "Inbox, Copilot, dashboard insights, and alerts",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "copilot.approval.inspect_queue",
      "title": "Inspect Copilot approval queue",
      "family": "Inbox, Copilot, dashboard insights, and alerts",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "copilot.approval.reject",
      "title": "Reject Copilot proposal",
      "family": "Inbox, Copilot, dashboard insights, and alerts",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "copilot.attachment.remove",
      "title": "Remove Copilot attachment before send",
      "family": "Inbox, Copilot, dashboard insights, and alerts",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "copilot.attachment.upload",
      "title": "Upload attachment to Copilot session",
      "family": "Inbox, Copilot, dashboard insights, and alerts",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "copilot.bulk_reply.reject",
      "title": "Reject Copilot bulk reply review",
      "family": "Inbox, Copilot, dashboard insights, and alerts",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "copilot.bulk_reply.review",
      "title": "Inspect Copilot bulk reply review set",
      "family": "Inbox, Copilot, dashboard insights, and alerts",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "copilot.bulk_reply.submit",
      "title": "Submit approved bulk reply review",
      "family": "Inbox, Copilot, dashboard insights, and alerts",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "copilot.fact.delete",
      "title": "Delete Copilot fact",
      "family": "Knowledge, offerings, sequences, AI Instructions, and Learning",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "copilot.fact.inspect_list",
      "title": "Inspect Copilot facts list",
      "family": "Knowledge, offerings, sequences, AI Instructions, and Learning",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "copilot.fact.upsert",
      "title": "Create or update Copilot fact",
      "family": "Knowledge, offerings, sequences, AI Instructions, and Learning",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "copilot.file.inspect",
      "title": "Inspect Copilot file extraction state",
      "family": "Inbox, Copilot, dashboard insights, and alerts",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "copilot.file.save_to_knowledge_base",
      "title": "Save Copilot file to knowledge base",
      "family": "Knowledge, offerings, sequences, AI Instructions, and Learning",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "copilot.learning.inspect",
      "title": "Inspect Copilot learning and memory panel",
      "family": "Knowledge, offerings, sequences, AI Instructions, and Learning",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "copilot.mention.search",
      "title": "Search mentionable entities in Copilot composer",
      "family": "Inbox, Copilot, dashboard insights, and alerts",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "copilot.message.compose",
      "title": "Compose Copilot message draft",
      "family": "Inbox, Copilot, dashboard insights, and alerts",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "copilot.message.feedback.submit",
      "title": "Submit Copilot message feedback",
      "family": "Inbox, Copilot, dashboard insights, and alerts",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "copilot.message.send",
      "title": "Send Copilot message",
      "family": "Inbox, Copilot, dashboard insights, and alerts",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "copilot.research_batch.inspect",
      "title": "Inspect Copilot research batch progress",
      "family": "Inbox, Copilot, dashboard insights, and alerts",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "copilot.session.create",
      "title": "Create Copilot session",
      "family": "Inbox, Copilot, dashboard insights, and alerts",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "copilot.session.delete",
      "title": "Delete Copilot session",
      "family": "Inbox, Copilot, dashboard insights, and alerts",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "copilot.session.pin",
      "title": "Pin or unpin Copilot session",
      "family": "Inbox, Copilot, dashboard insights, and alerts",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "copilot.session.rename",
      "title": "Rename Copilot session",
      "family": "Inbox, Copilot, dashboard insights, and alerts",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "copilot.session.share",
      "title": "Share Copilot session",
      "family": "Inbox, Copilot, dashboard insights, and alerts",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "copilot.turn.continue",
      "title": "Continue Copilot suspended turn",
      "family": "Inbox, Copilot, dashboard insights, and alerts",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "copilot.turn.stop",
      "title": "Stop Copilot active turn",
      "family": "Inbox, Copilot, dashboard insights, and alerts",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "dashboard.activation_checklist.inspect",
      "title": "Inspect dashboard activation checklist",
      "family": "Inbox, Copilot, dashboard insights, and alerts",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "dashboard.activation_checklist.skip",
      "title": "Skip dashboard activation checklist item",
      "family": "Inbox, Copilot, dashboard insights, and alerts",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "dashboard.activity_feed.inspect",
      "title": "Inspect dashboard activity feed",
      "family": "Inbox, Copilot, dashboard insights, and alerts",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "dashboard.activity_feed.load_more",
      "title": "Load more dashboard activity items",
      "family": "Inbox, Copilot, dashboard insights, and alerts",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "dashboard.campaign_status.inspect",
      "title": "Inspect dashboard campaign status summary",
      "family": "Inbox, Copilot, dashboard insights, and alerts",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "dashboard.connector_health.inspect",
      "title": "Inspect dashboard connector health summary",
      "family": "Inbox, Copilot, dashboard insights, and alerts",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "dashboard.tracking_domain.retry_verification",
      "title": "Retry failed tracking-domain verification from dashboard summary",
      "family": "Inbox, Copilot, dashboard insights, and alerts",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "deal.create",
      "title": "Create deal",
      "family": "Companies, deals, pipelines, and activities",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "deal.create_from_thread",
      "title": "Create deal from inbox thread",
      "family": "Companies, deals, pipelines, and activities",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "deal.forecast.inspect",
      "title": "Inspect deal forecast",
      "family": "Companies, deals, pipelines, and activities",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "deal.stage.move",
      "title": "Move deal stage",
      "family": "Companies, deals, pipelines, and activities",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "deal.status.set",
      "title": "Set deal status won or lost",
      "family": "Companies, deals, pipelines, and activities",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "deal.threads.inspect",
      "title": "Inspect threads linked to a deal",
      "family": "Companies, deals, pipelines, and activities",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "deal.timeline.inspect",
      "title": "Inspect deal timeline",
      "family": "Companies, deals, pipelines, and activities",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "deal.update",
      "title": "Update deal fields",
      "family": "Companies, deals, pipelines, and activities",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "developer_api.logs.inspect",
      "title": "Inspect developer API request logs",
      "family": "developer_api",
      "source_partition": "account_settings",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "domains-dns-and-warmup.action.managed-dkim",
      "title": "Managed DKIM",
      "family": "Domains, DNS, and warmup",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "domains-dns-and-warmup.action.probe-dns-records",
      "title": "Probe DNS records",
      "family": "Domains, DNS, and warmup",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "domains-dns-and-warmup.action.refresh-dns-records",
      "title": "Refresh DNS records",
      "family": "Domains, DNS, and warmup",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "domains-dns-and-warmup.display.dns-record-checklist",
      "title": "DNS record checklist",
      "family": "Domains, DNS, and warmup",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "domains-dns-and-warmup.drawer.sender-account-dns-drawer",
      "title": "Sender-account DNS drawer",
      "family": "Domains, DNS, and warmup",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "domains-dns-and-warmup.status.warmup-status",
      "title": "Warmup status",
      "family": "Domains, DNS, and warmup",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "domains-dns-and-warmup.step.dns-setup-step",
      "title": "DNS setup step",
      "family": "Domains, DNS, and warmup",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "domains-dns-and-warmup.toggle.warmup-toggle",
      "title": "Warmup toggle",
      "family": "Domains, DNS, and warmup",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "files-uploads-downloads.action.delete-entity-file",
      "title": "Delete entity file",
      "family": "Files, uploads, and downloads",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "files-uploads-downloads.action.download-entity-file",
      "title": "Download entity file",
      "family": "Files, uploads, and downloads",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "files-uploads-downloads.action.staged-file-management",
      "title": "Staged-file management",
      "family": "Files, uploads, and downloads",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "files-uploads-downloads.action.upload-entity-file",
      "title": "Upload entity file",
      "family": "Files, uploads, and downloads",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "files-uploads-downloads.input.dropzone-intake",
      "title": "Dropzone intake",
      "family": "Files, uploads, and downloads",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "files-uploads-downloads.rule.validation-limits",
      "title": "Validation limits",
      "family": "Files, uploads, and downloads",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "files-uploads-downloads.scope.entity-attachments",
      "title": "Entity attachments",
      "family": "Files, uploads, and downloads",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "identity.login",
      "title": "Authenticate an existing user",
      "family": "identity",
      "source_partition": "account_settings",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "identity.logout",
      "title": "Sign out the current user",
      "family": "identity",
      "source_partition": "account_settings",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "identity.password_change",
      "title": "Change account password through OTP verification",
      "family": "identity",
      "source_partition": "account_settings",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "identity.profile.update",
      "title": "Update account profile",
      "family": "identity",
      "source_partition": "account_settings",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "identity.signup",
      "title": "Create account",
      "family": "identity",
      "source_partition": "account_settings",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "inbox.draft.approve",
      "title": "Approve inbox draft",
      "family": "Inbox, Copilot, dashboard insights, and alerts",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "inbox.draft.edit",
      "title": "Edit inbox draft",
      "family": "Inbox, Copilot, dashboard insights, and alerts",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "inbox.draft.reject",
      "title": "Reject inbox draft",
      "family": "Inbox, Copilot, dashboard insights, and alerts",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "inbox.draft.restart",
      "title": "Restart inbox draft",
      "family": "Inbox, Copilot, dashboard insights, and alerts",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "inbox.reply.compose",
      "title": "Compose inbox reply",
      "family": "Inbox, Copilot, dashboard insights, and alerts",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "inbox.reply.send",
      "title": "Send inbox reply",
      "family": "Inbox, Copilot, dashboard insights, and alerts",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "inbox.thread_stream.inspect",
      "title": "Inspect inbox stream status and live updates",
      "family": "Inbox, Copilot, dashboard insights, and alerts",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "inbox.thread.assignment.update",
      "title": "Assign inbox thread",
      "family": "Inbox, Copilot, dashboard insights, and alerts",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "inbox.thread.deal_link.update",
      "title": "Link inbox thread to deal",
      "family": "Inbox, Copilot, dashboard insights, and alerts",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "inbox.thread.filter.update",
      "title": "Update inbox thread filters and tabs",
      "family": "Inbox, Copilot, dashboard insights, and alerts",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "inbox.thread.mark_read",
      "title": "Mark inbox thread read",
      "family": "Inbox, Copilot, dashboard insights, and alerts",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "inbox.thread.mark_unread",
      "title": "Mark inbox thread unread",
      "family": "Inbox, Copilot, dashboard insights, and alerts",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "inbox.thread.search.inspect",
      "title": "Inspect inbox thread search results",
      "family": "Inbox, Copilot, dashboard insights, and alerts",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "inbox.thread.visibility.update",
      "title": "Update inbox thread visibility",
      "family": "Inbox, Copilot, dashboard insights, and alerts",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "integration-settings.action.api-key-creation",
      "title": "API key creation",
      "family": "Integration settings and developer access",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "integration-settings.action.revoke-api-key",
      "title": "Revoke API key",
      "family": "Integration settings and developer access",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "integration-settings.display.contact-cleaning-checks",
      "title": "Contact-cleaning checks",
      "family": "Integration settings and developer access",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "integration-settings.display.contact-cleaning-cost-note",
      "title": "Contact-cleaning cost note",
      "family": "Integration settings and developer access",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "integration-settings.scope.api-key-scopes",
      "title": "API key scopes",
      "family": "Integration settings and developer access",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "integration-settings.toggle.contact-cleaning",
      "title": "Contact cleaning",
      "family": "Integration settings and developer access",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "knowledge-bases-sources-documents.action.add-sources-and-review-links",
      "title": "Add sources and review links",
      "family": "Knowledge bases, sources, and documents",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "knowledge-bases-sources-documents.action.crawl-pipeline-retry",
      "title": "Crawl pipeline retry",
      "family": "Knowledge bases, sources, and documents",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "knowledge-bases-sources-documents.action.create-knowledge-base",
      "title": "Create knowledge base",
      "family": "Knowledge bases, sources, and documents",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "knowledge-bases-sources-documents.action.delete-knowledge-base-file",
      "title": "Delete knowledge-base file",
      "family": "Knowledge bases, sources, and documents",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "knowledge-bases-sources-documents.action.download-knowledge-base-file",
      "title": "Download knowledge-base file",
      "family": "Knowledge bases, sources, and documents",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "knowledge-bases-sources-documents.action.overview-edit-save",
      "title": "Overview edit/save",
      "family": "Knowledge bases, sources, and documents",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "knowledge-bases-sources-documents.action.upload-knowledge-base-file",
      "title": "Upload knowledge-base file",
      "family": "Knowledge bases, sources, and documents",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "knowledge-bases-sources-documents.section.sources-url-and-crawl-resync",
      "title": "Sources URL and crawl resync",
      "family": "Knowledge bases, sources, and documents",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "knowledge-bases-sources-documents.tab.knowledge-graph-view",
      "title": "Knowledge graph view",
      "family": "Knowledge bases, sources, and documents",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "learning-playbooks-tutorials.action.preference-seeding",
      "title": "Start preference seeding",
      "family": "Learning, playbooks, and tutorials",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "learning-playbooks-tutorials.content.tutorial-browse-and-detail",
      "title": "Tutorial browse and detail",
      "family": "Learning, playbooks, and tutorials",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "learning-playbooks-tutorials.scope.learning-scope-and-tabs",
      "title": "Learning scope and tabs",
      "family": "Learning, playbooks, and tutorials",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "learning-playbooks-tutorials.status.learning-overview-states",
      "title": "Learning overview states",
      "family": "Learning, playbooks, and tutorials",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "learning-playbooks-tutorials.toggle.auto-mode",
      "title": "Toggle auto mode",
      "family": "Learning, playbooks, and tutorials",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "onboarding.provision_initial_workspace",
      "title": "Provision initial organization and workspace from onboarding answers",
      "family": "onboarding",
      "source_partition": "account_settings",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "organization.create",
      "title": "Create organization",
      "family": "organization",
      "source_partition": "account_settings",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "organization.deletion.lifecycle",
      "title": "Manage organization deletion lifecycle",
      "family": "organization",
      "source_partition": "account_settings",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "organization.membership.read",
      "title": "Inspect accessible organizations for context selection",
      "family": "organization",
      "source_partition": "account_settings",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "organization.update",
      "title": "Update organization profile",
      "family": "organization",
      "source_partition": "account_settings",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "pipeline.create",
      "title": "Create pipeline",
      "family": "Companies, deals, pipelines, and activities",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "pipeline.delete",
      "title": "Delete pipeline",
      "family": "Companies, deals, pipelines, and activities",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "pipeline.update",
      "title": "Update pipeline",
      "family": "Companies, deals, pipelines, and activities",
      "source_partition": "campaign_crm_inbox_copilot",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "team.domain_rule.manage",
      "title": "Create or update invite domain rule",
      "family": "team",
      "source_partition": "account_settings",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "team.domain_rule.remove",
      "title": "Remove invite domain rule",
      "family": "team",
      "source_partition": "account_settings",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "team.group.delete",
      "title": "Delete permission group",
      "family": "team",
      "source_partition": "account_settings",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "team.group.manage",
      "title": "Create or update permission group",
      "family": "team",
      "source_partition": "account_settings",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "team.invite_link.manage",
      "title": "Create invite link",
      "family": "team",
      "source_partition": "account_settings",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "team.invite_link.revoke",
      "title": "Revoke invite link",
      "family": "team",
      "source_partition": "account_settings",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "team.member.invite",
      "title": "Invite team members",
      "family": "team",
      "source_partition": "account_settings",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "team.member.remove",
      "title": "Remove team member",
      "family": "team",
      "source_partition": "account_settings",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "team.member.role.update",
      "title": "Update team member role",
      "family": "team",
      "source_partition": "account_settings",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "team.member.suspension.update",
      "title": "Suspend or unsuspend team member",
      "family": "team",
      "source_partition": "account_settings",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "team.member.workspace_access.update",
      "title": "Update team member workspace access",
      "family": "team",
      "source_partition": "account_settings",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "team.member.workspace_groups.update",
      "title": "Update team member per-workspace groups",
      "family": "team",
      "source_partition": "account_settings",
      "owner_kind": "backend_family_match"
    },
    {
      "state": "candidate_only",
      "capability_id": "tracking-domains.action.add-domain",
      "title": "Add domain",
      "family": "Tracking domains",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "tracking-domains.action.cname-target-copy",
      "title": "CNAME target copy",
      "family": "Tracking domains",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "tracking-domains.action.delete-tracking-domain",
      "title": "Delete tracking domain",
      "family": "Tracking domains",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "tracking-domains.action.save-tracking-domain",
      "title": "Save tracking domain",
      "family": "Tracking domains",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "tracking-domains.action.verify-tracking-domain",
      "title": "Verify tracking domain",
      "family": "Tracking domains",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "tracking-domains.display.dns-instructions",
      "title": "DNS instructions",
      "family": "Tracking domains",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "tracking-domains.field.tracking-subdomain-field",
      "title": "Tracking subdomain field",
      "family": "Tracking domains",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "tracking-domains.toggle.view-mode",
      "title": "View mode",
      "family": "Tracking domains",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "webhook-gap.field.auth-mode",
      "title": "Auth mode",
      "family": "Webhook settings gap record",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "webhook-gap.field.http-method",
      "title": "HTTP method",
      "family": "Webhook settings gap record",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "webhook-gap.field.webhook-url",
      "title": "Webhook URL",
      "family": "Webhook settings gap record",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "webhook-gap.settings.max-retries",
      "title": "Set max retries",
      "family": "Webhook settings gap record",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "webhook-gap.settings.payload-template",
      "title": "Edit payload template",
      "family": "Webhook settings gap record",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "webhook-gap.status.behavior-mode-copy",
      "title": "Behavior mode copy",
      "family": "Webhook settings gap record",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "webhook-gap.toggle.retry-on-failure",
      "title": "Toggle retry on failure",
      "family": "Webhook settings gap record",
      "source_partition": "connectors_kb_files_alerts",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "workspace.create",
      "title": "Create workspace",
      "family": "workspace",
      "source_partition": "account_settings",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "workspace.deletion.lifecycle",
      "title": "Manage workspace deletion lifecycle",
      "family": "workspace",
      "source_partition": "account_settings",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "workspace.membership.read",
      "title": "Inspect accessible workspaces for context selection",
      "family": "workspace",
      "source_partition": "account_settings",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "workspace.tools_settings.update",
      "title": "Update workspace tools settings",
      "family": "workspace",
      "source_partition": "account_settings",
      "owner_kind": "source_partition_fallback"
    },
    {
      "state": "candidate_only",
      "capability_id": "workspace.update",
      "title": "Update workspace profile and default contact settings",
      "family": "workspace",
      "source_partition": "account_settings",
      "owner_kind": "source_partition_fallback"
    }
  ],
  "fallback_owner_rows": [
    {
      "state": "fallback_owner",
      "capability_id": "alerts-notifications.action.mark-seen-on-mount",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "alerts-notifications.action.resolve-alert",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "alerts-notifications.action.snooze-alert",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "alerts-notifications.filter.alert-filters",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "alerts-notifications.navigate.open-alert-cta",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "alerts-notifications.status.alert-center-header",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "campaign.test_override.acknowledge",
      "source_partition": "campaign_crm_inbox_copilot"
    },
    {
      "state": "fallback_owner",
      "capability_id": "campaign.workflow.signal.inspect_placeholder",
      "source_partition": "campaign_crm_inbox_copilot"
    },
    {
      "state": "fallback_owner",
      "capability_id": "company.merge.undo",
      "source_partition": "campaign_crm_inbox_copilot"
    },
    {
      "state": "fallback_owner",
      "capability_id": "company.timeline.inspect",
      "source_partition": "campaign_crm_inbox_copilot"
    },
    {
      "state": "fallback_owner",
      "capability_id": "connectors-and-sender-accounts.action.delete-connector",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "connectors-and-sender-accounts.action.google-account",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "connectors-and-sender-accounts.action.microsoft-account",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "connectors-and-sender-accounts.action.reconnect-account",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "connectors-and-sender-accounts.action.smtp-imap-and-relay-setup",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "connectors-and-sender-accounts.action.test-connection",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "connectors-and-sender-accounts.browse.coming-soon-provider-groups",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "connectors-and-sender-accounts.browse.live-provider-set",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "connectors-and-sender-accounts.filter.connector-search-and-category-browse",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "connectors-and-sender-accounts.profile.sender-profile-fields",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "connectors-and-sender-accounts.section.sync-section",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "connectors-and-sender-accounts.settings.daily-limit",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "connectors-and-sender-accounts.settings.send-ceiling",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "connectors-and-sender-accounts.status.connector-detail-snapshot",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "connectors-and-sender-accounts.toggle.auto-adjust",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "connectors-and-sender-accounts.toggle.email-signature",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "contact.delete.bulk",
      "source_partition": "campaign_crm_inbox_copilot"
    },
    {
      "state": "fallback_owner",
      "capability_id": "contact.list.delete.preview",
      "source_partition": "campaign_crm_inbox_copilot"
    },
    {
      "state": "fallback_owner",
      "capability_id": "copilot.message.compose",
      "source_partition": "campaign_crm_inbox_copilot"
    },
    {
      "state": "fallback_owner",
      "capability_id": "dashboard.activation_checklist.skip",
      "source_partition": "campaign_crm_inbox_copilot"
    },
    {
      "state": "fallback_owner",
      "capability_id": "deal.threads.inspect",
      "source_partition": "campaign_crm_inbox_copilot"
    },
    {
      "state": "fallback_owner",
      "capability_id": "deal.timeline.inspect",
      "source_partition": "campaign_crm_inbox_copilot"
    },
    {
      "state": "fallback_owner",
      "capability_id": "developer_api.key.create",
      "source_partition": "account_settings"
    },
    {
      "state": "fallback_owner",
      "capability_id": "developer_api.key.list",
      "source_partition": "account_settings"
    },
    {
      "state": "fallback_owner",
      "capability_id": "developer_api.key.revoke",
      "source_partition": "account_settings"
    },
    {
      "state": "fallback_owner",
      "capability_id": "developer_api.logs.inspect",
      "source_partition": "account_settings"
    },
    {
      "state": "fallback_owner",
      "capability_id": "developer_api.usage.inspect",
      "source_partition": "account_settings"
    },
    {
      "state": "fallback_owner",
      "capability_id": "domains-dns-and-warmup.action.managed-dkim",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "domains-dns-and-warmup.action.probe-dns-records",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "domains-dns-and-warmup.action.refresh-dns-records",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "domains-dns-and-warmup.display.dns-record-checklist",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "domains-dns-and-warmup.drawer.sender-account-dns-drawer",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "domains-dns-and-warmup.status.warmup-status",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "domains-dns-and-warmup.step.dns-setup-step",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "domains-dns-and-warmup.toggle.warmup-toggle",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "files-uploads-downloads.action.delete-entity-file",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "files-uploads-downloads.action.download-entity-file",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "files-uploads-downloads.action.staged-file-management",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "files-uploads-downloads.action.upload-entity-file",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "files-uploads-downloads.input.dropzone-intake",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "files-uploads-downloads.rule.validation-limits",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "files-uploads-downloads.scope.entity-attachments",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "identity.login",
      "source_partition": "account_settings"
    },
    {
      "state": "fallback_owner",
      "capability_id": "identity.logout",
      "source_partition": "account_settings"
    },
    {
      "state": "fallback_owner",
      "capability_id": "identity.password_change",
      "source_partition": "account_settings"
    },
    {
      "state": "fallback_owner",
      "capability_id": "identity.profile.update",
      "source_partition": "account_settings"
    },
    {
      "state": "fallback_owner",
      "capability_id": "identity.signup",
      "source_partition": "account_settings"
    },
    {
      "state": "fallback_owner",
      "capability_id": "inbox.reply.compose",
      "source_partition": "campaign_crm_inbox_copilot"
    },
    {
      "state": "fallback_owner",
      "capability_id": "integration-settings.action.api-key-creation",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "integration-settings.action.revoke-api-key",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "integration-settings.display.contact-cleaning-checks",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "integration-settings.display.contact-cleaning-cost-note",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "integration-settings.scope.api-key-scopes",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "integration-settings.toggle.contact-cleaning",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "knowledge-bases-sources-documents.action.add-sources-and-review-links",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "knowledge-bases-sources-documents.action.crawl-pipeline-retry",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "knowledge-bases-sources-documents.action.create-knowledge-base",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "knowledge-bases-sources-documents.action.delete-knowledge-base-file",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "knowledge-bases-sources-documents.action.download-knowledge-base-file",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "knowledge-bases-sources-documents.action.overview-edit-save",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "knowledge-bases-sources-documents.action.upload-knowledge-base-file",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "knowledge-bases-sources-documents.section.sources-url-and-crawl-resync",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "knowledge-bases-sources-documents.tab.knowledge-graph-view",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "learning-playbooks-tutorials.action.preference-seeding",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "learning-playbooks-tutorials.content.tutorial-browse-and-detail",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "learning-playbooks-tutorials.scope.learning-scope-and-tabs",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "learning-playbooks-tutorials.status.learning-overview-states",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "learning-playbooks-tutorials.toggle.auto-mode",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "onboarding.provision_initial_workspace",
      "source_partition": "account_settings"
    },
    {
      "state": "fallback_owner",
      "capability_id": "organization.create",
      "source_partition": "account_settings"
    },
    {
      "state": "fallback_owner",
      "capability_id": "organization.deletion.lifecycle",
      "source_partition": "account_settings"
    },
    {
      "state": "fallback_owner",
      "capability_id": "organization.membership.read",
      "source_partition": "account_settings"
    },
    {
      "state": "fallback_owner",
      "capability_id": "organization.update",
      "source_partition": "account_settings"
    },
    {
      "state": "fallback_owner",
      "capability_id": "pipeline.create",
      "source_partition": "campaign_crm_inbox_copilot"
    },
    {
      "state": "fallback_owner",
      "capability_id": "pipeline.delete",
      "source_partition": "campaign_crm_inbox_copilot"
    },
    {
      "state": "fallback_owner",
      "capability_id": "pipeline.update",
      "source_partition": "campaign_crm_inbox_copilot"
    },
    {
      "state": "fallback_owner",
      "capability_id": "tracking-domains.action.add-domain",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "tracking-domains.action.cname-target-copy",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "tracking-domains.action.delete-tracking-domain",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "tracking-domains.action.save-tracking-domain",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "tracking-domains.action.verify-tracking-domain",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "tracking-domains.display.dns-instructions",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "tracking-domains.field.tracking-subdomain-field",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "tracking-domains.toggle.view-mode",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "webhook-gap.field.auth-mode",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "webhook-gap.field.http-method",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "webhook-gap.field.webhook-url",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "webhook-gap.settings.max-retries",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "webhook-gap.settings.payload-template",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "webhook-gap.status.behavior-mode-copy",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "webhook-gap.toggle.retry-on-failure",
      "source_partition": "connectors_kb_files_alerts"
    },
    {
      "state": "fallback_owner",
      "capability_id": "workspace.create",
      "source_partition": "account_settings"
    },
    {
      "state": "fallback_owner",
      "capability_id": "workspace.deletion.lifecycle",
      "source_partition": "account_settings"
    },
    {
      "state": "fallback_owner",
      "capability_id": "workspace.membership.read",
      "source_partition": "account_settings"
    },
    {
      "state": "fallback_owner",
      "capability_id": "workspace.tools_settings.update",
      "source_partition": "account_settings"
    },
    {
      "state": "fallback_owner",
      "capability_id": "workspace.update",
      "source_partition": "account_settings"
    }
  ],
  "overlap_records": [
    {
      "state": "overlap",
      "source_control_id": "alerts-notifications.alert-detail-drawer",
      "overlap_scope": "intra_partition",
      "partitions": [
        "connectors_kb_files_alerts"
      ],
      "capability_ids": [
        "alerts-notifications.action.resolve-alert",
        "alerts-notifications.action.snooze-alert",
        "alerts-notifications.navigate.open-alert-cta"
      ]
    },
    {
      "state": "overlap",
      "source_control_id": "alerts.list_filters_and_actions",
      "overlap_scope": "intra_partition",
      "partitions": [
        "campaign_crm_inbox_copilot"
      ],
      "capability_ids": [
        "alert.filter.update",
        "alert.list.inspect",
        "alert.resolve",
        "alert.seen.mark",
        "alert.snooze"
      ]
    },
    {
      "state": "overlap",
      "source_control_id": "campaigns.analytics_and_event_preview",
      "overlap_scope": "intra_partition",
      "partitions": [
        "campaign_crm_inbox_copilot"
      ],
      "capability_ids": [
        "campaign.analytics.inspect",
        "campaign.email_preview.inspect",
        "campaign.email_retry.cancel",
        "campaign.event.inspect"
      ]
    },
    {
      "state": "overlap",
      "source_control_id": "campaigns.builder_header_lifecycle_actions",
      "overlap_scope": "intra_partition",
      "partitions": [
        "campaign_crm_inbox_copilot"
      ],
      "capability_ids": [
        "campaign.launch.prepare",
        "campaign.lifecycle.pause",
        "campaign.lifecycle.resume",
        "campaign.lifecycle.save",
        "campaign.validation.run"
      ]
    },
    {
      "state": "overlap",
      "source_control_id": "campaigns.goal_cta_and_order_signal",
      "overlap_scope": "intra_partition",
      "partitions": [
        "campaign_crm_inbox_copilot"
      ],
      "capability_ids": [
        "campaign.goal.calendar_assignment.update",
        "campaign.goal.link.update",
        "campaign.meeting_calendar_assignment.update",
        "campaign.order_signal.ingest"
      ]
    },
    {
      "state": "overlap",
      "source_control_id": "campaigns.postlaunch_claim_provenance",
      "overlap_scope": "intra_partition",
      "partitions": [
        "campaign_crm_inbox_copilot"
      ],
      "capability_ids": [
        "campaign.claim_provenance.confirm",
        "campaign.claim_provenance.inspect"
      ]
    },
    {
      "state": "overlap",
      "source_control_id": "campaigns.postlaunch_operations_summary",
      "overlap_scope": "intra_partition",
      "partitions": [
        "campaign_crm_inbox_copilot"
      ],
      "capability_ids": [
        "campaign.lifecycle.pause",
        "campaign.lifecycle.stop",
        "campaign.operations_summary.inspect"
      ]
    },
    {
      "state": "overlap",
      "source_control_id": "campaigns.postlaunch_prepare_confirm_override_defer_resume",
      "overlap_scope": "intra_partition",
      "partitions": [
        "campaign_crm_inbox_copilot"
      ],
      "capability_ids": [
        "campaign.launch.confirm",
        "campaign.launch.prepare",
        "campaign.readiness.defer",
        "campaign.readiness.resume",
        "campaign.test_override.acknowledge"
      ]
    },
    {
      "state": "overlap",
      "source_control_id": "campaigns.settings_audience_source_lists_and_exclusions",
      "overlap_scope": "intra_partition",
      "partitions": [
        "campaign_crm_inbox_copilot"
      ],
      "capability_ids": [
        "campaign.audience.inspect",
        "campaign.source.attach_list",
        "campaign.source.import_csv"
      ]
    },
    {
      "state": "overlap",
      "source_control_id": "campaigns.settings_delivery_guardrails_and_reply_handling",
      "overlap_scope": "intra_partition",
      "partitions": [
        "campaign_crm_inbox_copilot"
      ],
      "capability_ids": [
        "campaign.delivery_guardrail.update",
        "campaign.out_of_office_policy.update",
        "campaign.reply_policy.update"
      ]
    },
    {
      "state": "overlap",
      "source_control_id": "campaigns.settings_optimization_ab_windows_and_schedule",
      "overlap_scope": "intra_partition",
      "partitions": [
        "campaign_crm_inbox_copilot"
      ],
      "capability_ids": [
        "campaign.ab_test_policy.update",
        "campaign.optimization_policy.update",
        "campaign.schedule.update"
      ]
    },
    {
      "state": "overlap",
      "source_control_id": "campaigns.settings_recipients_cc_bcc",
      "overlap_scope": "intra_partition",
      "partitions": [
        "campaign_crm_inbox_copilot"
      ],
      "capability_ids": [
        "campaign.recipient_bcc_list.update",
        "campaign.recipient_cc_list.update"
      ]
    },
    {
      "state": "overlap",
      "source_control_id": "campaigns.settings_sender_assignments_signature_dns_and_add_account",
      "overlap_scope": "intra_partition",
      "partitions": [
        "campaign_crm_inbox_copilot"
      ],
      "capability_ids": [
        "campaign.goal.calendar_assignment.update",
        "campaign.meeting_calendar_assignment.update",
        "campaign.sender_assignment.update",
        "campaign.sender_auth.inspect",
        "campaign.sender_repair.initiate",
        "campaign.signature_policy.inspect",
        "connector.calendar.connect",
        "connector.email_account.connect"
      ]
    },
    {
      "state": "overlap",
      "source_control_id": "campaigns.validation_panel_actions",
      "overlap_scope": "intra_partition",
      "partitions": [
        "campaign_crm_inbox_copilot"
      ],
      "capability_ids": [
        "campaign.workflow.validation.fix_all",
        "campaign.workflow.validation.fix_one",
        "campaign.workflow.validation.inspect"
      ]
    },
    {
      "state": "overlap",
      "source_control_id": "companies.crud",
      "overlap_scope": "intra_partition",
      "partitions": [
        "campaign_crm_inbox_copilot"
      ],
      "capability_ids": [
        "company.create",
        "company.delete",
        "company.inspect",
        "company.list.inspect",
        "company.update"
      ]
    },
    {
      "state": "overlap",
      "source_control_id": "companies.duplicates_merge_timeline",
      "overlap_scope": "intra_partition",
      "partitions": [
        "campaign_crm_inbox_copilot"
      ],
      "capability_ids": [
        "company.duplicates.inspect",
        "company.merge.commit",
        "company.merge.preview",
        "company.merge.undo",
        "company.timeline.inspect"
      ]
    },
    {
      "state": "overlap",
      "source_control_id": "connectors-and-sender-accounts.google-and-microsoft-account-connect",
      "overlap_scope": "intra_partition",
      "partitions": [
        "connectors_kb_files_alerts"
      ],
      "capability_ids": [
        "connectors-and-sender-accounts.action.google-account",
        "connectors-and-sender-accounts.action.microsoft-account"
      ]
    },
    {
      "state": "overlap",
      "source_control_id": "connectors-and-sender-accounts.reconnect-and-test-actions",
      "overlap_scope": "intra_partition",
      "partitions": [
        "connectors_kb_files_alerts"
      ],
      "capability_ids": [
        "connectors-and-sender-accounts.action.delete-connector",
        "connectors-and-sender-accounts.action.reconnect-account",
        "connectors-and-sender-accounts.action.test-connection"
      ]
    },
    {
      "state": "overlap",
      "source_control_id": "connectors-and-sender-accounts.sending-configuration",
      "overlap_scope": "intra_partition",
      "partitions": [
        "connectors_kb_files_alerts"
      ],
      "capability_ids": [
        "connectors-and-sender-accounts.settings.daily-limit",
        "connectors-and-sender-accounts.settings.send-ceiling",
        "connectors-and-sender-accounts.toggle.auto-adjust"
      ]
    },
    {
      "state": "overlap",
      "source_control_id": "contacts.bulk_tag_admin",
      "overlap_scope": "intra_partition",
      "partitions": [
        "campaign_crm_inbox_copilot"
      ],
      "capability_ids": [
        "contact.tag.add_bulk",
        "contact.tag.remove_bulk"
      ]
    },
    {
      "state": "overlap",
      "source_control_id": "contacts.detail_threads_and_send",
      "overlap_scope": "intra_partition",
      "partitions": [
        "campaign_crm_inbox_copilot"
      ],
      "capability_ids": [
        "contact.email.send_manual",
        "contact.inspect",
        "contact.threads.inspect"
      ]
    },
    {
      "state": "overlap",
      "source_control_id": "contacts.import_csv_panel",
      "overlap_scope": "intra_partition",
      "partitions": [
        "campaign_crm_inbox_copilot"
      ],
      "capability_ids": [
        "contact.import.preview",
        "contact.import.submit"
      ]
    },
    {
      "state": "overlap",
      "source_control_id": "contacts.list_crud_and_delete_impact",
      "overlap_scope": "intra_partition",
      "partitions": [
        "campaign_crm_inbox_copilot"
      ],
      "capability_ids": [
        "contact.list.create",
        "contact.list.delete.commit",
        "contact.list.delete.preview",
        "contact.list.inspect_catalog",
        "contact.list.update"
      ]
    },
    {
      "state": "overlap",
      "source_control_id": "contacts.merge_duplicates",
      "overlap_scope": "intra_partition",
      "partitions": [
        "campaign_crm_inbox_copilot"
      ],
      "capability_ids": [
        "contact.merge.commit",
        "contact.merge.preview",
        "contact.merge.undo"
      ]
    },
    {
      "state": "overlap",
      "source_control_id": "contacts.search_filter_sort_paginate_bulk",
      "overlap_scope": "intra_partition",
      "partitions": [
        "campaign_crm_inbox_copilot"
      ],
      "capability_ids": [
        "campaign.audience.bulk_add_contacts",
        "contact.delete",
        "contact.delete.bulk",
        "contact.export.bulk",
        "contact.list_membership.add_bulk",
        "contact.list.inspect",
        "contact.merge.preview",
        "contact.tag.add_bulk",
        "contact.tag.remove_bulk",
        "contact.verification.mark_valid_bulk",
        "contact.verification.retest_bulk"
      ]
    },
    {
      "state": "overlap",
      "source_control_id": "copilot.approval_queue_bulk_verdict",
      "overlap_scope": "intra_partition",
      "partitions": [
        "campaign_crm_inbox_copilot"
      ],
      "capability_ids": [
        "copilot.approval.bulk_verdict",
        "copilot.approval.inspect_queue"
      ]
    },
    {
      "state": "overlap",
      "source_control_id": "copilot.approvalcard_edit_reject_confirmsend",
      "overlap_scope": "intra_partition",
      "partitions": [
        "campaign_crm_inbox_copilot"
      ],
      "capability_ids": [
        "copilot.approval.approve",
        "copilot.approval.edit_and_approve",
        "copilot.approval.inspect_item",
        "copilot.approval.reject"
      ]
    },
    {
      "state": "overlap",
      "source_control_id": "copilot.bulk_reply_review",
      "overlap_scope": "intra_partition",
      "partitions": [
        "campaign_crm_inbox_copilot"
      ],
      "capability_ids": [
        "copilot.bulk_reply.reject",
        "copilot.bulk_reply.review",
        "copilot.bulk_reply.submit"
      ]
    },
    {
      "state": "overlap",
      "source_control_id": "copilot.composer_message_mentions_attachments_stop",
      "overlap_scope": "intra_partition",
      "partitions": [
        "campaign_crm_inbox_copilot"
      ],
      "capability_ids": [
        "copilot.attachment.remove",
        "copilot.attachment.upload",
        "copilot.mention.search",
        "copilot.message.compose",
        "copilot.message.send",
        "copilot.turn.stop"
      ]
    },
    {
      "state": "overlap",
      "source_control_id": "copilot.learning_memory_facts",
      "overlap_scope": "intra_partition",
      "partitions": [
        "campaign_crm_inbox_copilot"
      ],
      "capability_ids": [
        "copilot.fact.delete",
        "copilot.fact.inspect_list",
        "copilot.fact.upsert",
        "copilot.learning.inspect"
      ]
    },
    {
      "state": "overlap",
      "source_control_id": "copilot.sessions_sidebar_management",
      "overlap_scope": "intra_partition",
      "partitions": [
        "campaign_crm_inbox_copilot"
      ],
      "capability_ids": [
        "copilot.session.create",
        "copilot.session.delete",
        "copilot.session.inspect_list",
        "copilot.session.pin",
        "copilot.session.rename",
        "copilot.session.share"
      ]
    },
    {
      "state": "overlap",
      "source_control_id": "copilot.turn_controls_feedback_files",
      "overlap_scope": "intra_partition",
      "partitions": [
        "campaign_crm_inbox_copilot"
      ],
      "capability_ids": [
        "copilot.file.inspect",
        "copilot.file.save_to_knowledge_base",
        "copilot.message.feedback.submit",
        "copilot.turn.continue"
      ]
    },
    {
      "state": "overlap",
      "source_control_id": "dashboard.activation_checklist",
      "overlap_scope": "intra_partition",
      "partitions": [
        "campaign_crm_inbox_copilot"
      ],
      "capability_ids": [
        "dashboard.activation_checklist.inspect",
        "dashboard.activation_checklist.skip"
      ]
    },
    {
      "state": "overlap",
      "source_control_id": "dashboard.activity_feed",
      "overlap_scope": "intra_partition",
      "partitions": [
        "campaign_crm_inbox_copilot"
      ],
      "capability_ids": [
        "dashboard.activity_feed.inspect",
        "dashboard.activity_feed.load_more"
      ]
    },
    {
      "state": "overlap",
      "source_control_id": "dashboard.connector_health_panel",
      "overlap_scope": "intra_partition",
      "partitions": [
        "campaign_crm_inbox_copilot"
      ],
      "capability_ids": [
        "dashboard.connector_health.inspect",
        "dashboard.tracking_domain.retry_verification"
      ]
    },
    {
      "state": "overlap",
      "source_control_id": "deals.activities_crud",
      "overlap_scope": "intra_partition",
      "partitions": [
        "campaign_crm_inbox_copilot"
      ],
      "capability_ids": [
        "activity.create",
        "activity.delete",
        "activity.list.inspect",
        "activity.update"
      ]
    },
    {
      "state": "overlap",
      "source_control_id": "deals.pipelines_forecast_status",
      "overlap_scope": "intra_partition",
      "partitions": [
        "campaign_crm_inbox_copilot"
      ],
      "capability_ids": [
        "deal.create",
        "deal.create_from_thread",
        "deal.forecast.inspect",
        "deal.inspect",
        "deal.list.inspect",
        "deal.stage.move",
        "deal.status.set",
        "deal.threads.inspect",
        "deal.timeline.inspect",
        "deal.update",
        "pipeline.create",
        "pipeline.delete",
        "pipeline.list.inspect",
        "pipeline.update"
      ]
    },
    {
      "state": "overlap",
      "source_control_id": "domains-dns-and-warmup.dns-record-probe-and-refresh",
      "overlap_scope": "intra_partition",
      "partitions": [
        "connectors_kb_files_alerts"
      ],
      "capability_ids": [
        "domains-dns-and-warmup.action.probe-dns-records",
        "domains-dns-and-warmup.action.refresh-dns-records"
      ]
    },
    {
      "state": "overlap",
      "source_control_id": "files-uploads-downloads.entity-upload-download-delete",
      "overlap_scope": "intra_partition",
      "partitions": [
        "connectors_kb_files_alerts"
      ],
      "capability_ids": [
        "files-uploads-downloads.action.delete-entity-file",
        "files-uploads-downloads.action.download-entity-file",
        "files-uploads-downloads.action.upload-entity-file"
      ]
    },
    {
      "state": "overlap",
      "source_control_id": "inbox.draft_and_reply_mutations",
      "overlap_scope": "intra_partition",
      "partitions": [
        "campaign_crm_inbox_copilot"
      ],
      "capability_ids": [
        "inbox.draft.approve",
        "inbox.draft.edit",
        "inbox.draft.reject",
        "inbox.draft.restart",
        "inbox.reply.compose",
        "inbox.reply.send"
      ]
    },
    {
      "state": "overlap",
      "source_control_id": "inbox.search_filters_tabs_bulk",
      "overlap_scope": "intra_partition",
      "partitions": [
        "campaign_crm_inbox_copilot"
      ],
      "capability_ids": [
        "inbox.thread_list.inspect",
        "inbox.thread.filter.update",
        "inbox.thread.search.inspect"
      ]
    },
    {
      "state": "overlap",
      "source_control_id": "inbox.thread_flags_assignment_visibility_linkage",
      "overlap_scope": "intra_partition",
      "partitions": [
        "campaign_crm_inbox_copilot"
      ],
      "capability_ids": [
        "deal.create_from_thread",
        "inbox.thread.assignment.update",
        "inbox.thread.deal_link.update",
        "inbox.thread.mark_read",
        "inbox.thread.mark_unread",
        "inbox.thread.visibility.update"
      ]
    },
    {
      "state": "overlap",
      "source_control_id": "knowledge-bases-sources-documents.document-upload-download-delete",
      "overlap_scope": "intra_partition",
      "partitions": [
        "connectors_kb_files_alerts"
      ],
      "capability_ids": [
        "knowledge-bases-sources-documents.action.delete-knowledge-base-file",
        "knowledge-bases-sources-documents.action.download-knowledge-base-file",
        "knowledge-bases-sources-documents.action.upload-knowledge-base-file"
      ]
    },
    {
      "state": "overlap",
      "source_control_id": "learning-playbooks-tutorials.auto-mode-and-preference-seeding",
      "overlap_scope": "intra_partition",
      "partitions": [
        "connectors_kb_files_alerts"
      ],
      "capability_ids": [
        "learning-playbooks-tutorials.action.preference-seeding",
        "learning-playbooks-tutorials.toggle.auto-mode"
      ]
    },
    {
      "state": "overlap",
      "source_control_id": "team.members.edit_save",
      "overlap_scope": "intra_partition",
      "partitions": [
        "account_settings"
      ],
      "capability_ids": [
        "team.member.role.update",
        "team.member.workspace_access.update",
        "team.member.workspace_groups.update"
      ]
    },
    {
      "state": "overlap",
      "source_control_id": "tracking-domains.save-verify-delete",
      "overlap_scope": "intra_partition",
      "partitions": [
        "connectors_kb_files_alerts"
      ],
      "capability_ids": [
        "tracking-domains.action.delete-tracking-domain",
        "tracking-domains.action.save-tracking-domain",
        "tracking-domains.action.verify-tracking-domain"
      ]
    },
    {
      "state": "overlap",
      "source_control_id": "webhook-gap.payload-template-and-retries",
      "overlap_scope": "intra_partition",
      "partitions": [
        "connectors_kb_files_alerts"
      ],
      "capability_ids": [
        "webhook-gap.settings.max-retries",
        "webhook-gap.settings.payload-template",
        "webhook-gap.toggle.retry-on-failure"
      ]
    }
  ],
  "preserved_gap_records": [
    {
      "state": "gap",
      "gap_id": "active_session_management_ui_absent",
      "source_partition": "account_settings",
      "family": "identity",
      "description": "No active-session listing or session revocation control was found in the canonical frontend. The spec already treats session management as platform-new, not current parity.",
      "evidence_confidence": "high",
      "likely_candidate_ids": [
        "identity.session.manage"
      ]
    },
    {
      "state": "gap",
      "gap_id": "affiliate_referral_customer_facing_ui_absent",
      "source_partition": "account_settings",
      "family": "affiliate_referral_customer_facing",
      "description": "No canonical customer-facing affiliate/referral route or component was found in the inspected frontend route tree, even though the final planning matrix keeps affiliate/referral customer state in-scope as observed_customer_flow.",
      "evidence_confidence": "high",
      "likely_candidate_ids": [
        "affiliate.customer_state.inspect",
        "affiliate.enrollment"
      ]
    }
  ],
  "preserved_exclusions": [
    {
      "state": "exclusion",
      "source_control_id": "account.sidebar.open_settings",
      "source_partition": "account_settings",
      "reason": "local_navigation_only",
      "grouped_to_candidate_id": null,
      "rationale": "Opening the settings page is a presentation/navigation affordance, not an independently authorizable business capability."
    },
    {
      "state": "exclusion",
      "source_control_id": "billing.payment_return.contact_support",
      "source_partition": "account_settings",
      "reason": "support_link_out_of_scope",
      "grouped_to_candidate_id": null,
      "rationale": "Support mailto links are explicit exceptions in the planning research and do not become headless product capabilities."
    },
    {
      "state": "exclusion",
      "source_control_id": "billing.tabs.select",
      "source_partition": "account_settings",
      "reason": "presentation_only_duplicate",
      "grouped_to_candidate_id": "billing.subscription.plan_change",
      "rationale": "Billing tab navigation is UI chrome around underlying inspect/mutate capabilities."
    },
    {
      "state": "exclusion",
      "source_control_id": "developer_api.settings.tab_select",
      "source_partition": "account_settings",
      "reason": "presentation_only_duplicate",
      "grouped_to_candidate_id": "developer_api.logs.inspect",
      "rationale": "API tab navigation is UI chrome around the actual key/log/usage capabilities."
    },
    {
      "state": "exclusion",
      "source_control_id": "team.invite.remove_row",
      "source_partition": "account_settings",
      "reason": "local_batch_editor_only",
      "grouped_to_candidate_id": "team.member.invite",
      "rationale": "Removing a pending invite row edits unsaved local dialog state only."
    },
    {
      "state": "exclusion",
      "source_control_id": "workspace.theme.mode",
      "source_partition": "account_settings",
      "reason": "presentation_only_exempt",
      "grouped_to_candidate_id": null,
      "rationale": "Theme mode is explicitly exempted as presentation-only client state by the accepted spec."
    }
  ],
  "row_set_sha256": "826d651e22e04d3d403c4f025225449e2dd53c53dfd2327ca365dcd735b482ae"
}
