{
  "artifacts": {
    "acceptanceAudit": "public/data/receivership/us-ca-acceptance-audit.json",
    "importTemplates": "public/data/receivership/us-ca-import-templates.json",
    "manifest": "public/data/receivership/us-ca-manifest.json",
    "productionBlockers": "public/data/receivership/us-ca-production-blockers.json",
    "productionEnvironment": "public/data/receivership/us-ca-production-environment.json",
    "productionRunbook": "public/data/receivership/us-ca-production-runbook.json",
    "productionSetup": "public/data/receivership/us-ca-production-setup.json",
    "setupPacket": "public/data/receivership/us-ca-production-setup-packet.md",
    "releaseAudit": "public/data/receivership/us-ca-release-audit.json",
    "releaseHistory": "public/data/receivership/us-ca-release-history.json",
    "sourceActivation": "public/data/receivership/us-ca-source-activation.json",
    "sourceDecisionLedgerTemplate": "public/data/receivership/us-ca-source-decision-ledger-template.json",
    "sourceDecisionPacket": "public/data/receivership/us-ca-source-decision-packet.md"
  },
  "generatedAt": "2026-07-20T08:29:54.271Z",
  "github": {
    "commands": {
      "optional": [
        {
          "command": "PACER_CLIENT_CODE_VALUE='<optional PACER client code>'; if [ \"$PACER_CLIENT_CODE_VALUE\" = '<optional PACER client code>' ]; then echo 'Replace PACER_CLIENT_CODE_VALUE before setting PACER_CLIENT_CODE' >&2; false; else gh secret set PACER_CLIENT_CODE --app actions --repo 'charliecf/charts.fyi' --body \"$PACER_CLIENT_CODE_VALUE\"; fi",
          "configured": false,
          "kind": "secret",
          "name": "PACER_CLIENT_CODE",
          "placeholder": "<optional PACER client code>",
          "purpose": "PACER client code, when the account requires one for billable searches.",
          "required": false,
          "sourceIds": ["us-pacer-case-locator", "us-pacer-court-polling"]
        },
        {
          "command": "PACER_OTP_VALUE='<one-time PACER MFA code>'; if [ \"$PACER_OTP_VALUE\" = '<one-time PACER MFA code>' ]; then echo 'Replace PACER_OTP_VALUE before setting PACER_OTP' >&2; false; else gh secret set PACER_OTP --app actions --repo 'charliecf/charts.fyi' --body \"$PACER_OTP_VALUE\"; fi",
          "configured": false,
          "kind": "secret",
          "name": "PACER_OTP",
          "placeholder": "<one-time PACER MFA code>",
          "purpose": "One-time PACER MFA code for manual runs when TOTP is not configured.",
          "required": false,
          "sourceIds": ["us-pacer-case-locator"]
        },
        {
          "command": "PACER_TOTP_SECRET_VALUE='<optional PACER TOTP seed>'; if [ \"$PACER_TOTP_SECRET_VALUE\" = '<optional PACER TOTP seed>' ]; then echo 'Replace PACER_TOTP_SECRET_VALUE before setting PACER_TOTP_SECRET' >&2; false; else gh secret set PACER_TOTP_SECRET --app actions --repo 'charliecf/charts.fyi' --body \"$PACER_TOTP_SECRET_VALUE\"; fi",
          "configured": false,
          "kind": "secret",
          "name": "PACER_TOTP_SECRET",
          "placeholder": "<optional PACER TOTP seed>",
          "purpose": "PACER MFA TOTP seed for automated authentication.",
          "required": false,
          "sourceIds": ["us-pacer-case-locator"]
        }
      ],
      "required": [
        {
          "command": "PACER_PASSWORD_VALUE='<PACER password>'; if [ \"$PACER_PASSWORD_VALUE\" = '<PACER password>' ]; then echo 'Replace PACER_PASSWORD_VALUE before setting PACER_PASSWORD' >&2; false; else gh secret set PACER_PASSWORD --app actions --repo 'charliecf/charts.fyi' --body \"$PACER_PASSWORD_VALUE\"; fi",
          "configured": false,
          "kind": "secret",
          "name": "PACER_PASSWORD",
          "placeholder": "<PACER password>",
          "purpose": "PACER account password.",
          "required": true,
          "sourceIds": ["us-pacer-case-locator", "us-pacer-court-polling"]
        },
        {
          "command": "PACER_USERNAME_VALUE='<PACER username>'; if [ \"$PACER_USERNAME_VALUE\" = '<PACER username>' ]; then echo 'Replace PACER_USERNAME_VALUE before setting PACER_USERNAME' >&2; false; else gh secret set PACER_USERNAME --app actions --repo 'charliecf/charts.fyi' --body \"$PACER_USERNAME_VALUE\"; fi",
          "configured": false,
          "kind": "secret",
          "name": "PACER_USERNAME",
          "placeholder": "<PACER username>",
          "purpose": "PACER account username.",
          "required": true,
          "sourceIds": ["us-pacer-case-locator", "us-pacer-court-polling"]
        },
        {
          "command": "RECEIVERSHIP_CA_BC_CSO_IMPORT_PATH_VALUE='<path to authorized BC CSO new-case report export>'; if [ \"$RECEIVERSHIP_CA_BC_CSO_IMPORT_PATH_VALUE\" = '<path to authorized BC CSO new-case report export>' ]; then echo 'Replace RECEIVERSHIP_CA_BC_CSO_IMPORT_PATH_VALUE before setting RECEIVERSHIP_CA_BC_CSO_IMPORT_PATH' >&2; false; else gh variable set RECEIVERSHIP_CA_BC_CSO_IMPORT_PATH --repo 'charliecf/charts.fyi' --body \"$RECEIVERSHIP_CA_BC_CSO_IMPORT_PATH_VALUE\"; fi",
          "configured": false,
          "kind": "variable",
          "name": "RECEIVERSHIP_CA_BC_CSO_IMPORT_PATH",
          "placeholder": "<path to authorized BC CSO new-case report export>",
          "purpose": "Path to an authorized BC CSO new-case report export in JSON, NDJSON, or CSV form.",
          "required": true,
          "sourceIds": ["ca-bc-cso-new-cases"]
        },
        {
          "command": "RECEIVERSHIP_CA_BC_CSO_POLLING_ENABLED_VALUE='<true after approvals and controls are in place>'; if [ \"$RECEIVERSHIP_CA_BC_CSO_POLLING_ENABLED_VALUE\" = '<true after approvals and controls are in place>' ]; then echo 'Replace RECEIVERSHIP_CA_BC_CSO_POLLING_ENABLED_VALUE before setting RECEIVERSHIP_CA_BC_CSO_POLLING_ENABLED' >&2; false; else gh variable set RECEIVERSHIP_CA_BC_CSO_POLLING_ENABLED --repo 'charliecf/charts.fyi' --body \"$RECEIVERSHIP_CA_BC_CSO_POLLING_ENABLED_VALUE\"; fi",
          "configured": false,
          "kind": "variable",
          "name": "RECEIVERSHIP_CA_BC_CSO_POLLING_ENABLED",
          "placeholder": "<true after approvals and controls are in place>",
          "purpose": "Enables the approved BC CSO new-case polling/import workflow after terms review.",
          "required": true,
          "sourceIds": ["ca-bc-cso-new-cases"]
        },
        {
          "command": "RECEIVERSHIP_CA_BC_CSO_TERMS_APPROVED_VALUE='<true after terms/legal review>'; if [ \"$RECEIVERSHIP_CA_BC_CSO_TERMS_APPROVED_VALUE\" = '<true after terms/legal review>' ]; then echo 'Replace RECEIVERSHIP_CA_BC_CSO_TERMS_APPROVED_VALUE before setting RECEIVERSHIP_CA_BC_CSO_TERMS_APPROVED' >&2; false; else gh variable set RECEIVERSHIP_CA_BC_CSO_TERMS_APPROVED --repo 'charliecf/charts.fyi' --body \"$RECEIVERSHIP_CA_BC_CSO_TERMS_APPROVED_VALUE\"; fi",
          "configured": false,
          "kind": "variable",
          "name": "RECEIVERSHIP_CA_BC_CSO_TERMS_APPROVED",
          "placeholder": "<true after terms/legal review>",
          "purpose": "Records that public-reuse terms have been approved for the BC CSO new-case workflow.",
          "required": true,
          "sourceIds": ["ca-bc-cso-new-cases"]
        },
        {
          "command": "RECEIVERSHIP_CA_ON_COURTS_IMPORT_PATH_VALUE='<path to authorized Ontario court case/order export>'; if [ \"$RECEIVERSHIP_CA_ON_COURTS_IMPORT_PATH_VALUE\" = '<path to authorized Ontario court case/order export>' ]; then echo 'Replace RECEIVERSHIP_CA_ON_COURTS_IMPORT_PATH_VALUE before setting RECEIVERSHIP_CA_ON_COURTS_IMPORT_PATH' >&2; false; else gh variable set RECEIVERSHIP_CA_ON_COURTS_IMPORT_PATH --repo 'charliecf/charts.fyi' --body \"$RECEIVERSHIP_CA_ON_COURTS_IMPORT_PATH_VALUE\"; fi",
          "configured": false,
          "kind": "variable",
          "name": "RECEIVERSHIP_CA_ON_COURTS_IMPORT_PATH",
          "placeholder": "<path to authorized Ontario court case/order export>",
          "purpose": "Path to an authorized Ontario court case/order export in JSON, NDJSON, or CSV form.",
          "required": true,
          "sourceIds": ["ca-ontario-courts-public-portal"]
        },
        {
          "command": "RECEIVERSHIP_CA_ON_COURTS_POLLING_ENABLED_VALUE='<true after approvals and controls are in place>'; if [ \"$RECEIVERSHIP_CA_ON_COURTS_POLLING_ENABLED_VALUE\" = '<true after approvals and controls are in place>' ]; then echo 'Replace RECEIVERSHIP_CA_ON_COURTS_POLLING_ENABLED_VALUE before setting RECEIVERSHIP_CA_ON_COURTS_POLLING_ENABLED' >&2; false; else gh variable set RECEIVERSHIP_CA_ON_COURTS_POLLING_ENABLED --repo 'charliecf/charts.fyi' --body \"$RECEIVERSHIP_CA_ON_COURTS_POLLING_ENABLED_VALUE\"; fi",
          "configured": false,
          "kind": "variable",
          "name": "RECEIVERSHIP_CA_ON_COURTS_POLLING_ENABLED",
          "placeholder": "<true after approvals and controls are in place>",
          "purpose": "Enables Ontario court portal polling/import handoff after terms review.",
          "required": true,
          "sourceIds": ["ca-ontario-courts-public-portal"]
        },
        {
          "command": "RECEIVERSHIP_CA_ON_COURTS_TERMS_APPROVED_VALUE='<true after terms/legal review>'; if [ \"$RECEIVERSHIP_CA_ON_COURTS_TERMS_APPROVED_VALUE\" = '<true after terms/legal review>' ]; then echo 'Replace RECEIVERSHIP_CA_ON_COURTS_TERMS_APPROVED_VALUE before setting RECEIVERSHIP_CA_ON_COURTS_TERMS_APPROVED' >&2; false; else gh variable set RECEIVERSHIP_CA_ON_COURTS_TERMS_APPROVED --repo 'charliecf/charts.fyi' --body \"$RECEIVERSHIP_CA_ON_COURTS_TERMS_APPROVED_VALUE\"; fi",
          "configured": false,
          "kind": "variable",
          "name": "RECEIVERSHIP_CA_ON_COURTS_TERMS_APPROVED",
          "placeholder": "<true after terms/legal review>",
          "purpose": "Records that Ontario court portal automation and public-reuse terms have been approved.",
          "required": true,
          "sourceIds": ["ca-ontario-courts-public-portal"]
        },
        {
          "command": "RECEIVERSHIP_OSB_BIA_ACCOUNT_CONFIRMED_VALUE='<true after account access is confirmed>'; if [ \"$RECEIVERSHIP_OSB_BIA_ACCOUNT_CONFIRMED_VALUE\" = '<true after account access is confirmed>' ]; then echo 'Replace RECEIVERSHIP_OSB_BIA_ACCOUNT_CONFIRMED_VALUE before setting RECEIVERSHIP_OSB_BIA_ACCOUNT_CONFIRMED' >&2; false; else gh variable set RECEIVERSHIP_OSB_BIA_ACCOUNT_CONFIRMED --repo 'charliecf/charts.fyi' --body \"$RECEIVERSHIP_OSB_BIA_ACCOUNT_CONFIRMED_VALUE\"; fi",
          "configured": false,
          "kind": "variable",
          "name": "RECEIVERSHIP_OSB_BIA_ACCOUNT_CONFIRMED",
          "placeholder": "<true after account access is confirmed>",
          "purpose": "Records that OSB Bankruptcy and Insolvency Records Search account access is active.",
          "required": true,
          "sourceIds": ["ca-osb-bia-insolvency-records"]
        },
        {
          "command": "RECEIVERSHIP_OSB_BIA_DAILY_SEARCH_LIMIT_VALUE='<approved daily search count limit>'; if [ \"$RECEIVERSHIP_OSB_BIA_DAILY_SEARCH_LIMIT_VALUE\" = '<approved daily search count limit>' ]; then echo 'Replace RECEIVERSHIP_OSB_BIA_DAILY_SEARCH_LIMIT_VALUE before setting RECEIVERSHIP_OSB_BIA_DAILY_SEARCH_LIMIT' >&2; false; else gh variable set RECEIVERSHIP_OSB_BIA_DAILY_SEARCH_LIMIT --repo 'charliecf/charts.fyi' --body \"$RECEIVERSHIP_OSB_BIA_DAILY_SEARCH_LIMIT_VALUE\"; fi",
          "configured": false,
          "kind": "variable",
          "name": "RECEIVERSHIP_OSB_BIA_DAILY_SEARCH_LIMIT",
          "placeholder": "<approved daily search count limit>",
          "purpose": "Daily OSB BIA search count cap for cost control.",
          "required": true,
          "sourceIds": ["ca-osb-bia-insolvency-records"]
        },
        {
          "command": "RECEIVERSHIP_OSB_BIA_IMPORT_PATH_VALUE='<path to authorized OSB BIA saved-search export>'; if [ \"$RECEIVERSHIP_OSB_BIA_IMPORT_PATH_VALUE\" = '<path to authorized OSB BIA saved-search export>' ]; then echo 'Replace RECEIVERSHIP_OSB_BIA_IMPORT_PATH_VALUE before setting RECEIVERSHIP_OSB_BIA_IMPORT_PATH' >&2; false; else gh variable set RECEIVERSHIP_OSB_BIA_IMPORT_PATH --repo 'charliecf/charts.fyi' --body \"$RECEIVERSHIP_OSB_BIA_IMPORT_PATH_VALUE\"; fi",
          "configured": false,
          "kind": "variable",
          "name": "RECEIVERSHIP_OSB_BIA_IMPORT_PATH",
          "placeholder": "<path to authorized OSB BIA saved-search export>",
          "purpose": "Path to an authorized official OSB saved search result/details export in JSON, NDJSON, or CSV form.",
          "required": true,
          "sourceIds": ["ca-osb-bia-insolvency-records"]
        },
        {
          "command": "RECEIVERSHIP_OSB_BIA_PAID_SEARCH_APPROVED_VALUE='<true after paid search approval>'; if [ \"$RECEIVERSHIP_OSB_BIA_PAID_SEARCH_APPROVED_VALUE\" = '<true after paid search approval>' ]; then echo 'Replace RECEIVERSHIP_OSB_BIA_PAID_SEARCH_APPROVED_VALUE before setting RECEIVERSHIP_OSB_BIA_PAID_SEARCH_APPROVED' >&2; false; else gh variable set RECEIVERSHIP_OSB_BIA_PAID_SEARCH_APPROVED --repo 'charliecf/charts.fyi' --body \"$RECEIVERSHIP_OSB_BIA_PAID_SEARCH_APPROVED_VALUE\"; fi",
          "configured": false,
          "kind": "variable",
          "name": "RECEIVERSHIP_OSB_BIA_PAID_SEARCH_APPROVED",
          "placeholder": "<true after paid search approval>",
          "purpose": "Records approval to run paid OSB BIA searches.",
          "required": true,
          "sourceIds": ["ca-osb-bia-insolvency-records"]
        },
        {
          "command": "RECEIVERSHIP_OSB_BIA_SEARCH_BUDGET_CAD_VALUE='<approved CAD daily search budget>'; if [ \"$RECEIVERSHIP_OSB_BIA_SEARCH_BUDGET_CAD_VALUE\" = '<approved CAD daily search budget>' ]; then echo 'Replace RECEIVERSHIP_OSB_BIA_SEARCH_BUDGET_CAD_VALUE before setting RECEIVERSHIP_OSB_BIA_SEARCH_BUDGET_CAD' >&2; false; else gh variable set RECEIVERSHIP_OSB_BIA_SEARCH_BUDGET_CAD --repo 'charliecf/charts.fyi' --body \"$RECEIVERSHIP_OSB_BIA_SEARCH_BUDGET_CAD_VALUE\"; fi",
          "configured": false,
          "kind": "variable",
          "name": "RECEIVERSHIP_OSB_BIA_SEARCH_BUDGET_CAD",
          "placeholder": "<approved CAD daily search budget>",
          "purpose": "Daily OSB BIA search budget cap in CAD.",
          "required": true,
          "sourceIds": ["ca-osb-bia-insolvency-records"]
        },
        {
          "command": "RECEIVERSHIP_PACER_COURT_ALLOWLIST_VALUE='<comma-separated approved PACER court IDs>'; if [ \"$RECEIVERSHIP_PACER_COURT_ALLOWLIST_VALUE\" = '<comma-separated approved PACER court IDs>' ]; then echo 'Replace RECEIVERSHIP_PACER_COURT_ALLOWLIST_VALUE before setting RECEIVERSHIP_PACER_COURT_ALLOWLIST' >&2; false; else gh variable set RECEIVERSHIP_PACER_COURT_ALLOWLIST --repo 'charliecf/charts.fyi' --body \"$RECEIVERSHIP_PACER_COURT_ALLOWLIST_VALUE\"; fi",
          "configured": false,
          "kind": "variable",
          "name": "RECEIVERSHIP_PACER_COURT_ALLOWLIST",
          "placeholder": "<comma-separated approved PACER court IDs>",
          "purpose": "Court IDs approved for court-specific PACER docket polling.",
          "required": true,
          "sourceIds": ["us-pacer-court-polling"]
        },
        {
          "command": "RECEIVERSHIP_PACER_COURT_DAILY_COST_CAP_USD_VALUE='<approved USD daily cap>'; if [ \"$RECEIVERSHIP_PACER_COURT_DAILY_COST_CAP_USD_VALUE\" = '<approved USD daily cap>' ]; then echo 'Replace RECEIVERSHIP_PACER_COURT_DAILY_COST_CAP_USD_VALUE before setting RECEIVERSHIP_PACER_COURT_DAILY_COST_CAP_USD' >&2; false; else gh variable set RECEIVERSHIP_PACER_COURT_DAILY_COST_CAP_USD --repo 'charliecf/charts.fyi' --body \"$RECEIVERSHIP_PACER_COURT_DAILY_COST_CAP_USD_VALUE\"; fi",
          "configured": false,
          "kind": "variable",
          "name": "RECEIVERSHIP_PACER_COURT_DAILY_COST_CAP_USD",
          "placeholder": "<approved USD daily cap>",
          "purpose": "Daily court-specific PACER spend cap in USD.",
          "required": true,
          "sourceIds": ["us-pacer-court-polling"]
        },
        {
          "command": "RECEIVERSHIP_PACER_COURT_IMPORT_PATH_VALUE='<path to approved PACER court docket export>'; if [ \"$RECEIVERSHIP_PACER_COURT_IMPORT_PATH_VALUE\" = '<path to approved PACER court docket export>' ]; then echo 'Replace RECEIVERSHIP_PACER_COURT_IMPORT_PATH_VALUE before setting RECEIVERSHIP_PACER_COURT_IMPORT_PATH' >&2; false; else gh variable set RECEIVERSHIP_PACER_COURT_IMPORT_PATH --repo 'charliecf/charts.fyi' --body \"$RECEIVERSHIP_PACER_COURT_IMPORT_PATH_VALUE\"; fi",
          "configured": false,
          "kind": "variable",
          "name": "RECEIVERSHIP_PACER_COURT_IMPORT_PATH",
          "placeholder": "<path to approved PACER court docket export>",
          "purpose": "Path to an approved court-specific PACER CM/ECF docket export in JSON, NDJSON, or CSV form.",
          "required": true,
          "sourceIds": ["us-pacer-court-polling"]
        },
        {
          "command": "RECEIVERSHIP_PACER_COURT_MAX_DOCKET_PAGES_VALUE='<approved maximum docket pages per run>'; if [ \"$RECEIVERSHIP_PACER_COURT_MAX_DOCKET_PAGES_VALUE\" = '<approved maximum docket pages per run>' ]; then echo 'Replace RECEIVERSHIP_PACER_COURT_MAX_DOCKET_PAGES_VALUE before setting RECEIVERSHIP_PACER_COURT_MAX_DOCKET_PAGES' >&2; false; else gh variable set RECEIVERSHIP_PACER_COURT_MAX_DOCKET_PAGES --repo 'charliecf/charts.fyi' --body \"$RECEIVERSHIP_PACER_COURT_MAX_DOCKET_PAGES_VALUE\"; fi",
          "configured": false,
          "kind": "variable",
          "name": "RECEIVERSHIP_PACER_COURT_MAX_DOCKET_PAGES",
          "placeholder": "<approved maximum docket pages per run>",
          "purpose": "Maximum court-specific PACER docket pages per run.",
          "required": true,
          "sourceIds": ["us-pacer-court-polling"]
        },
        {
          "command": "RECEIVERSHIP_PACER_COURT_POLLING_ENABLED_VALUE='<true after approvals and controls are in place>'; if [ \"$RECEIVERSHIP_PACER_COURT_POLLING_ENABLED_VALUE\" = '<true after approvals and controls are in place>' ]; then echo 'Replace RECEIVERSHIP_PACER_COURT_POLLING_ENABLED_VALUE before setting RECEIVERSHIP_PACER_COURT_POLLING_ENABLED' >&2; false; else gh variable set RECEIVERSHIP_PACER_COURT_POLLING_ENABLED --repo 'charliecf/charts.fyi' --body \"$RECEIVERSHIP_PACER_COURT_POLLING_ENABLED_VALUE\"; fi",
          "configured": false,
          "kind": "variable",
          "name": "RECEIVERSHIP_PACER_COURT_POLLING_ENABLED",
          "placeholder": "<true after approvals and controls are in place>",
          "purpose": "Enables court-specific PACER docket polling after credentials and cost controls are configured.",
          "required": true,
          "sourceIds": ["us-pacer-court-polling"]
        },
        {
          "command": "RECEIVERSHIP_PACER_DAILY_COST_CAP_USD_VALUE='<approved USD daily cap>'; if [ \"$RECEIVERSHIP_PACER_DAILY_COST_CAP_USD_VALUE\" = '<approved USD daily cap>' ]; then echo 'Replace RECEIVERSHIP_PACER_DAILY_COST_CAP_USD_VALUE before setting RECEIVERSHIP_PACER_DAILY_COST_CAP_USD' >&2; false; else gh variable set RECEIVERSHIP_PACER_DAILY_COST_CAP_USD --repo 'charliecf/charts.fyi' --body \"$RECEIVERSHIP_PACER_DAILY_COST_CAP_USD_VALUE\"; fi",
          "configured": false,
          "kind": "variable",
          "name": "RECEIVERSHIP_PACER_DAILY_COST_CAP_USD",
          "placeholder": "<approved USD daily cap>",
          "purpose": "Daily PACER Case Locator spend cap in USD.",
          "required": true,
          "sourceIds": ["us-pacer-case-locator"]
        }
      ]
    },
    "notes": [
      "Commands contain placeholders only; replace placeholder values before running them.",
      "Use GitHub Actions Secrets for credential-like values and Variables for booleans, allowlists, budgets, page caps, and import paths.",
      "Do not commit authorized court, PACER, or OSB export files unless the source terms explicitly allow redistribution."
    ],
    "optionalSecretNames": [
      "PACER_CLIENT_CODE",
      "PACER_OTP",
      "PACER_TOTP_SECRET"
    ],
    "optionalVariableNames": [],
    "productionReadyWorkflow": ".github/workflows/receivership-us-ca-production-ready.yml",
    "refreshWorkflow": ".github/workflows/receivership-us-ca.yml",
    "repo": "charliecf/charts.fyi",
    "requiredSecretNames": ["PACER_PASSWORD", "PACER_USERNAME"],
    "requiredVariableNames": [
      "RECEIVERSHIP_CA_BC_CSO_IMPORT_PATH",
      "RECEIVERSHIP_CA_BC_CSO_POLLING_ENABLED",
      "RECEIVERSHIP_CA_BC_CSO_TERMS_APPROVED",
      "RECEIVERSHIP_CA_ON_COURTS_IMPORT_PATH",
      "RECEIVERSHIP_CA_ON_COURTS_POLLING_ENABLED",
      "RECEIVERSHIP_CA_ON_COURTS_TERMS_APPROVED",
      "RECEIVERSHIP_OSB_BIA_ACCOUNT_CONFIRMED",
      "RECEIVERSHIP_OSB_BIA_DAILY_SEARCH_LIMIT",
      "RECEIVERSHIP_OSB_BIA_IMPORT_PATH",
      "RECEIVERSHIP_OSB_BIA_PAID_SEARCH_APPROVED",
      "RECEIVERSHIP_OSB_BIA_SEARCH_BUDGET_CAD",
      "RECEIVERSHIP_PACER_COURT_ALLOWLIST",
      "RECEIVERSHIP_PACER_COURT_DAILY_COST_CAP_USD",
      "RECEIVERSHIP_PACER_COURT_IMPORT_PATH",
      "RECEIVERSHIP_PACER_COURT_MAX_DOCKET_PAGES",
      "RECEIVERSHIP_PACER_COURT_POLLING_ENABLED",
      "RECEIVERSHIP_PACER_DAILY_COST_CAP_USD"
    ]
  },
  "externalSetupPacket": {
    "activationQueue": [
      {
        "actionRequired": "Complete BC Court Services Online public-reuse terms review, then enable the approved polling/import workflow and provide the authorized new-case report import file path.",
        "billable": false,
        "importHandoffRequired": true,
        "legalReviewRequired": true,
        "missingRequiredEnv": [
          "RECEIVERSHIP_CA_BC_CSO_IMPORT_PATH",
          "RECEIVERSHIP_CA_BC_CSO_POLLING_ENABLED",
          "RECEIVERSHIP_CA_BC_CSO_TERMS_APPROVED"
        ],
        "order": 1,
        "owner": "operator_plus_legal_review",
        "priorityReason": "Non-billable terms/legal review can unblock an implemented collector or authorized import path before credentialed paid sources are configured.",
        "ready": false,
        "requiresUserControlledAccountOrPayment": false,
        "setupId": "setup:ca-bc-court-source",
        "sourceId": "ca-bc-cso-new-cases",
        "sourceName": "BC Court Services Online new cases",
        "status": "terms_review",
        "termsReviewRequired": true,
        "verificationCommands": [
          "npm run check:receivership:us-ca:bc-cso",
          "npm run check:receivership:us-ca:blockers",
          "npm run check:receivership:us-ca:config",
          "npm run check:receivership:us-ca:github-env",
          "npm run check:receivership:us-ca:import-templates",
          "npm run check:receivership:us-ca:production-blocker-issue",
          "npm run check:receivership:us-ca:production-env",
          "npm run check:receivership:us-ca:runbook",
          "npm run check:receivership:us-ca:setup-packet",
          "npm run check:receivership:us-ca:source-activation",
          "npm run check:receivership:us-ca:source-decision-ledger",
          "npm run check:receivership:us-ca:source-decision-ledger-template",
          "npm run check:receivership:us-ca:source-decision-packet",
          "npm run check:receivership:us-ca:source-health",
          "npm run fetch:receivership:us-ca",
          "npm run verify:receivership:us-ca",
          "npm run verify:receivership:us-ca:production"
        ],
        "workstream": "terms_and_legal_review"
      },
      {
        "actionRequired": "Complete Ontario Courts Public Portal automation/reuse review and authorized import handoff before enabling this source. Missing: RECEIVERSHIP_CA_ON_COURTS_TERMS_APPROVED=true after automation and reuse terms review, RECEIVERSHIP_CA_ON_COURTS_POLLING_ENABLED=true after polling/import workflow approval, RECEIVERSHIP_CA_ON_COURTS_IMPORT_PATH pointing to an authorized JSON, NDJSON, or CSV court case/order export.",
        "billable": false,
        "importHandoffRequired": true,
        "legalReviewRequired": true,
        "missingRequiredEnv": [
          "RECEIVERSHIP_CA_ON_COURTS_IMPORT_PATH",
          "RECEIVERSHIP_CA_ON_COURTS_POLLING_ENABLED",
          "RECEIVERSHIP_CA_ON_COURTS_TERMS_APPROVED"
        ],
        "order": 2,
        "owner": "operator_plus_legal_review",
        "priorityReason": "Non-billable terms/legal review can unblock an implemented collector or authorized import path before credentialed paid sources are configured.",
        "ready": false,
        "requiresUserControlledAccountOrPayment": false,
        "setupId": "setup:ca-on-court-source",
        "sourceId": "ca-ontario-courts-public-portal",
        "sourceName": "Ontario Courts Public Portal",
        "status": "terms_review",
        "termsReviewRequired": true,
        "verificationCommands": [
          "npm run check:receivership:us-ca:blockers",
          "npm run check:receivership:us-ca:config",
          "npm run check:receivership:us-ca:github-env",
          "npm run check:receivership:us-ca:import-templates",
          "npm run check:receivership:us-ca:production-blocker-issue",
          "npm run check:receivership:us-ca:production-env",
          "npm run check:receivership:us-ca:runbook",
          "npm run check:receivership:us-ca:setup-packet",
          "npm run check:receivership:us-ca:source-activation",
          "npm run check:receivership:us-ca:source-decision-ledger",
          "npm run check:receivership:us-ca:source-decision-ledger-template",
          "npm run check:receivership:us-ca:source-decision-packet",
          "npm run check:receivership:us-ca:source-health",
          "npm run fetch:receivership:us-ca",
          "npm run verify:receivership:us-ca",
          "npm run verify:receivership:us-ca:production"
        ],
        "workstream": "terms_and_legal_review"
      },
      {
        "actionRequired": "Complete OSB Bankruptcy and Insolvency Records Search account, paid-search, cost-control, and authorized import setup before enabling this source. Missing: RECEIVERSHIP_OSB_BIA_ACCOUNT_CONFIRMED=true after registering for OSB Bankruptcy and Insolvency Records Search, RECEIVERSHIP_OSB_BIA_PAID_SEARCH_APPROVED=true after approving paid OSB searches, RECEIVERSHIP_OSB_BIA_DAILY_SEARCH_LIMIT, RECEIVERSHIP_OSB_BIA_SEARCH_BUDGET_CAD, RECEIVERSHIP_OSB_BIA_IMPORT_PATH pointing to an authorized JSON, NDJSON, or CSV OSB search result/details export.",
        "billable": true,
        "importHandoffRequired": true,
        "legalReviewRequired": false,
        "missingRequiredEnv": [
          "RECEIVERSHIP_OSB_BIA_ACCOUNT_CONFIRMED",
          "RECEIVERSHIP_OSB_BIA_DAILY_SEARCH_LIMIT",
          "RECEIVERSHIP_OSB_BIA_IMPORT_PATH",
          "RECEIVERSHIP_OSB_BIA_PAID_SEARCH_APPROVED",
          "RECEIVERSHIP_OSB_BIA_SEARCH_BUDGET_CAD"
        ],
        "order": 3,
        "owner": "operator_with_account_and_budget_authority",
        "priorityReason": "National Canadian BIA coverage depends on paid OSB account setup plus an authorized saved-search import.",
        "ready": false,
        "requiresUserControlledAccountOrPayment": true,
        "setupId": "setup:ca-osb-bia-insolvency-records",
        "sourceId": "ca-osb-bia-insolvency-records",
        "sourceName": "Canada OSB Bankruptcy and Insolvency Records Search",
        "status": "skipped_credentials",
        "termsReviewRequired": false,
        "verificationCommands": [
          "npm run check:receivership:us-ca:blockers",
          "npm run check:receivership:us-ca:config",
          "npm run check:receivership:us-ca:github-env",
          "npm run check:receivership:us-ca:import-templates",
          "npm run check:receivership:us-ca:production-blocker-issue",
          "npm run check:receivership:us-ca:production-env",
          "npm run check:receivership:us-ca:runbook",
          "npm run check:receivership:us-ca:setup-packet",
          "npm run check:receivership:us-ca:source-activation",
          "npm run check:receivership:us-ca:source-decision-ledger",
          "npm run check:receivership:us-ca:source-decision-ledger-template",
          "npm run check:receivership:us-ca:source-decision-packet",
          "npm run check:receivership:us-ca:source-health",
          "npm run fetch:receivership:us-ca",
          "npm run verify:receivership:us-ca",
          "npm run verify:receivership:us-ca:production"
        ],
        "workstream": "canada_paid_account_and_import"
      },
      {
        "actionRequired": "Complete PACER Case Locator credentials and daily cost-cap setup before enabling bounded PCL ingestion. Missing: PACER_USERNAME and PACER_PASSWORD, RECEIVERSHIP_PACER_DAILY_COST_CAP_USD. PACER_OTP and PACER_CLIENT_CODE are optional depending on account settings.",
        "billable": true,
        "importHandoffRequired": false,
        "legalReviewRequired": false,
        "missingRequiredEnv": [
          "PACER_PASSWORD",
          "PACER_USERNAME",
          "RECEIVERSHIP_PACER_DAILY_COST_CAP_USD"
        ],
        "order": 4,
        "owner": "operator_with_account_and_budget_authority",
        "priorityReason": "National US bankruptcy backstop depends on PACER credentials and explicit daily cost controls.",
        "ready": false,
        "requiresUserControlledAccountOrPayment": true,
        "setupId": "credentials:pacer-case-locator",
        "sourceId": "us-pacer-case-locator",
        "sourceName": "PACER Case Locator",
        "status": "skipped_credentials",
        "termsReviewRequired": false,
        "verificationCommands": [
          "npm run check:pacer",
          "npm run check:receivership:us-ca:blockers",
          "npm run check:receivership:us-ca:config",
          "npm run check:receivership:us-ca:github-env",
          "npm run check:receivership:us-ca:import-templates",
          "npm run check:receivership:us-ca:production-blocker-issue",
          "npm run check:receivership:us-ca:production-env",
          "npm run check:receivership:us-ca:runbook",
          "npm run check:receivership:us-ca:setup-packet",
          "npm run check:receivership:us-ca:source-activation",
          "npm run check:receivership:us-ca:source-decision-ledger",
          "npm run check:receivership:us-ca:source-decision-ledger-template",
          "npm run check:receivership:us-ca:source-decision-packet",
          "npm run check:receivership:us-ca:source-health",
          "npm run fetch:receivership:us-ca",
          "npm run verify:receivership:us-ca",
          "npm run verify:receivership:us-ca:production"
        ],
        "workstream": "pacer_account_and_cost_controls"
      },
      {
        "actionRequired": "Complete PACER court-specific credentials, court allowlist, cost controls, polling approval, and authorized docket import setup before enabling this source. Missing: PACER_USERNAME and PACER_PASSWORD, RECEIVERSHIP_PACER_COURT_ALLOWLIST, RECEIVERSHIP_PACER_COURT_DAILY_COST_CAP_USD, RECEIVERSHIP_PACER_COURT_MAX_DOCKET_PAGES, RECEIVERSHIP_PACER_COURT_POLLING_ENABLED=true after credentials, allowlist, and cost controls are approved, RECEIVERSHIP_PACER_COURT_IMPORT_PATH pointing to an approved JSON, NDJSON, or CSV CM/ECF docket export.",
        "billable": true,
        "importHandoffRequired": true,
        "legalReviewRequired": false,
        "missingRequiredEnv": [
          "PACER_PASSWORD",
          "PACER_USERNAME",
          "RECEIVERSHIP_PACER_COURT_ALLOWLIST",
          "RECEIVERSHIP_PACER_COURT_DAILY_COST_CAP_USD",
          "RECEIVERSHIP_PACER_COURT_IMPORT_PATH",
          "RECEIVERSHIP_PACER_COURT_MAX_DOCKET_PAGES",
          "RECEIVERSHIP_PACER_COURT_POLLING_ENABLED"
        ],
        "order": 5,
        "owner": "operator_with_account_and_budget_authority",
        "priorityReason": "Court-specific PACER polling is the narrowest and most expensive remaining path, so it should run after account, allowlist, import, and cap decisions are settled.",
        "ready": false,
        "requiresUserControlledAccountOrPayment": true,
        "setupId": "setup:us-pacer-court-polling",
        "sourceId": "us-pacer-court-polling",
        "sourceName": "PACER specific-court docket polling",
        "status": "skipped_credentials",
        "termsReviewRequired": false,
        "verificationCommands": [
          "npm run check:receivership:us-ca:blockers",
          "npm run check:receivership:us-ca:config",
          "npm run check:receivership:us-ca:github-env",
          "npm run check:receivership:us-ca:import-templates",
          "npm run check:receivership:us-ca:production-blocker-issue",
          "npm run check:receivership:us-ca:production-env",
          "npm run check:receivership:us-ca:runbook",
          "npm run check:receivership:us-ca:setup-packet",
          "npm run check:receivership:us-ca:source-activation",
          "npm run check:receivership:us-ca:source-decision-ledger",
          "npm run check:receivership:us-ca:source-decision-ledger-template",
          "npm run check:receivership:us-ca:source-decision-packet",
          "npm run check:receivership:us-ca:source-health",
          "npm run fetch:receivership:us-ca",
          "npm run verify:receivership:us-ca",
          "npm run verify:receivership:us-ca:production"
        ],
        "workstream": "pacer_court_polling_and_import"
      }
    ],
    "finalVerificationCommands": [
      "npm run fetch:receivership:us-ca",
      "npm run check:receivership:us-ca:production-env",
      "npm run check:receivership:us-ca:github-env",
      "npm run check:receivership:us-ca:import-templates",
      "npm run check:receivership:us-ca:blockers",
      "npm run check:receivership:us-ca:production-blocker-issue",
      "npm run check:receivership:us-ca:setup-packet",
      "npm run check:receivership:us-ca:source-decision-ledger",
      "npm run check:receivership:us-ca:source-decision-ledger-template",
      "npm run check:receivership:us-ca:source-decision-packet",
      "npm run check:receivership:us-ca:source-activation",
      "npm run check:receivership:us-ca:source-health",
      "npm run check:receivership:us-ca:runbook",
      "npm run verify:receivership:us-ca:production"
    ],
    "generatedAt": "2026-07-20T08:29:54.271Z",
    "packetVersion": 1,
    "productionReady": false,
    "sourcePolicy": "first_party_only",
    "sources": [
      {
        "accountUrl": "https://justice.gov.bc.ca/cso/newCaseReport.do",
        "actionRequired": "Complete BC Court Services Online public-reuse terms review, then enable the approved polling/import workflow and provide the authorized new-case report import file path.",
        "activationSteps": [
          "Review the BC CSO e-search usage agreement and confirm public-reuse terms for automated new-case monitoring.",
          "Confirm payment/account requirements for any paid file-detail or document retrieval workflow.",
          "Save authorized BC CSO new-case report rows as JSON, NDJSON, or CSV and point RECEIVERSHIP_CA_BC_CSO_IMPORT_PATH at that file.",
          "Set RECEIVERSHIP_CA_BC_CSO_TERMS_APPROVED=true and RECEIVERSHIP_CA_BC_CSO_POLLING_ENABLED=true only after the review is complete."
        ],
        "billable": false,
        "costControlInputs": [],
        "githubCommands": [
          {
            "command": "RECEIVERSHIP_CA_BC_CSO_IMPORT_PATH_VALUE='<path to authorized BC CSO new-case report export>'; if [ \"$RECEIVERSHIP_CA_BC_CSO_IMPORT_PATH_VALUE\" = '<path to authorized BC CSO new-case report export>' ]; then echo 'Replace RECEIVERSHIP_CA_BC_CSO_IMPORT_PATH_VALUE before setting RECEIVERSHIP_CA_BC_CSO_IMPORT_PATH' >&2; false; else gh variable set RECEIVERSHIP_CA_BC_CSO_IMPORT_PATH --repo 'charliecf/charts.fyi' --body \"$RECEIVERSHIP_CA_BC_CSO_IMPORT_PATH_VALUE\"; fi",
            "configured": false,
            "kind": "variable",
            "name": "RECEIVERSHIP_CA_BC_CSO_IMPORT_PATH",
            "placeholder": "<path to authorized BC CSO new-case report export>",
            "required": true
          },
          {
            "command": "RECEIVERSHIP_CA_BC_CSO_POLLING_ENABLED_VALUE='<true after approvals and controls are in place>'; if [ \"$RECEIVERSHIP_CA_BC_CSO_POLLING_ENABLED_VALUE\" = '<true after approvals and controls are in place>' ]; then echo 'Replace RECEIVERSHIP_CA_BC_CSO_POLLING_ENABLED_VALUE before setting RECEIVERSHIP_CA_BC_CSO_POLLING_ENABLED' >&2; false; else gh variable set RECEIVERSHIP_CA_BC_CSO_POLLING_ENABLED --repo 'charliecf/charts.fyi' --body \"$RECEIVERSHIP_CA_BC_CSO_POLLING_ENABLED_VALUE\"; fi",
            "configured": false,
            "kind": "variable",
            "name": "RECEIVERSHIP_CA_BC_CSO_POLLING_ENABLED",
            "placeholder": "<true after approvals and controls are in place>",
            "required": true
          },
          {
            "command": "RECEIVERSHIP_CA_BC_CSO_TERMS_APPROVED_VALUE='<true after terms/legal review>'; if [ \"$RECEIVERSHIP_CA_BC_CSO_TERMS_APPROVED_VALUE\" = '<true after terms/legal review>' ]; then echo 'Replace RECEIVERSHIP_CA_BC_CSO_TERMS_APPROVED_VALUE before setting RECEIVERSHIP_CA_BC_CSO_TERMS_APPROVED' >&2; false; else gh variable set RECEIVERSHIP_CA_BC_CSO_TERMS_APPROVED --repo 'charliecf/charts.fyi' --body \"$RECEIVERSHIP_CA_BC_CSO_TERMS_APPROVED_VALUE\"; fi",
            "configured": false,
            "kind": "variable",
            "name": "RECEIVERSHIP_CA_BC_CSO_TERMS_APPROVED",
            "placeholder": "<true after terms/legal review>",
            "required": true
          }
        ],
        "importHandoff": {
          "acceptedFormats": ["csv", "json", "ndjson"],
          "exampleFiles": {
            "csv": "public/data/receivership/us-ca-import-template-bc-cso.csv"
          },
          "importPathEnv": "RECEIVERSHIP_CA_BC_CSO_IMPORT_PATH",
          "parserCheck": "npm run check:receivership:us-ca:import-templates",
          "title": "BC CSO authorized new-case report export"
        },
        "legalReviewRequired": true,
        "missingRequiredEnv": [
          "RECEIVERSHIP_CA_BC_CSO_IMPORT_PATH",
          "RECEIVERSHIP_CA_BC_CSO_POLLING_ENABLED",
          "RECEIVERSHIP_CA_BC_CSO_TERMS_APPROVED"
        ],
        "officialReferences": [
          {
            "label": "BC CSO new case report",
            "url": "https://justice.gov.bc.ca/cso/newCaseReport.do"
          },
          {
            "label": "BC CSO e-search usage agreement",
            "url": "https://justice.gov.bc.ca/cso/usageAgreement/index.do"
          },
          {
            "label": "BC CSO FAQ and fee schedule",
            "url": "https://justice.gov.bc.ca/cso/help/faq.do"
          }
        ],
        "priority": 1,
        "ready": false,
        "readyWhen": [
          "All required GitHub Actions Secrets and Variables for this source are configured.",
          "Any required account, paid-search, cost-control, or terms-review step is approved.",
          "The filled source decision ledger marks this source approved and ready, validates with npm run check:receivership:us-ca:source-decision-ledger, and is supplied to the production-ready workflow as RECEIVERSHIP_US_CA_SOURCE_DECISION_LEDGER_GZIP_BASE64.",
          "Required first-party import files validate against public/data/receivership/us-ca-import-templates.json.",
          "The source health row is ok/fresh after the next US/Canada refresh.",
          "The row-producing source collector is implemented, not preflight-only.",
          "The strict production verifier exits successfully."
        ],
        "requiredInputs": [
          {
            "configured": false,
            "githubKind": "variable",
            "name": "RECEIVERSHIP_CA_BC_CSO_TERMS_APPROVED",
            "purpose": "Records that public-reuse terms have been approved for the BC CSO new-case workflow.",
            "required": true
          },
          {
            "configured": false,
            "githubKind": "variable",
            "name": "RECEIVERSHIP_CA_BC_CSO_POLLING_ENABLED",
            "purpose": "Enables the approved BC CSO new-case polling/import workflow after terms review.",
            "required": true
          },
          {
            "configured": false,
            "githubKind": "variable",
            "name": "RECEIVERSHIP_CA_BC_CSO_IMPORT_PATH",
            "purpose": "Path to an authorized BC CSO new-case report export in JSON, NDJSON, or CSV form.",
            "required": true
          }
        ],
        "setupId": "setup:ca-bc-court-source",
        "sourceId": "ca-bc-cso-new-cases",
        "sourceName": "BC Court Services Online new cases",
        "status": "terms_review",
        "termsReviewRequired": true,
        "verificationCommands": [
          "npm run check:receivership:us-ca:bc-cso",
          "npm run check:receivership:us-ca:blockers",
          "npm run check:receivership:us-ca:config",
          "npm run check:receivership:us-ca:github-env",
          "npm run check:receivership:us-ca:import-templates",
          "npm run check:receivership:us-ca:production-blocker-issue",
          "npm run check:receivership:us-ca:production-env",
          "npm run check:receivership:us-ca:runbook",
          "npm run check:receivership:us-ca:setup-packet",
          "npm run check:receivership:us-ca:source-activation",
          "npm run check:receivership:us-ca:source-decision-ledger",
          "npm run check:receivership:us-ca:source-decision-ledger-template",
          "npm run check:receivership:us-ca:source-decision-packet",
          "npm run check:receivership:us-ca:source-health",
          "npm run fetch:receivership:us-ca",
          "npm run verify:receivership:us-ca",
          "npm run verify:receivership:us-ca:production"
        ]
      },
      {
        "accountUrl": "https://www.ontario.ca/page/search-court-cases-online",
        "actionRequired": "Complete Ontario Courts Public Portal automation/reuse review and authorized import handoff before enabling this source. Missing: RECEIVERSHIP_CA_ON_COURTS_TERMS_APPROVED=true after automation and reuse terms review, RECEIVERSHIP_CA_ON_COURTS_POLLING_ENABLED=true after polling/import workflow approval, RECEIVERSHIP_CA_ON_COURTS_IMPORT_PATH pointing to an authorized JSON, NDJSON, or CSV court case/order export.",
        "activationSteps": [
          "Review Ontario portal access, public court-file access guidance, and redistribution constraints for automated monitoring.",
          "Confirm the approved workflow needed for Commercial List and other receivership candidate discovery; Ontario court search-tool output cannot be saved, reproduced, or distributed unless the review authorizes the workflow.",
          "Save authorized Ontario court case/order records as JSON, NDJSON, or CSV and point RECEIVERSHIP_CA_ON_COURTS_IMPORT_PATH at that file.",
          "Set RECEIVERSHIP_CA_ON_COURTS_TERMS_APPROVED=true and RECEIVERSHIP_CA_ON_COURTS_POLLING_ENABLED=true only after the review is complete."
        ],
        "billable": false,
        "costControlInputs": [],
        "githubCommands": [
          {
            "command": "RECEIVERSHIP_CA_ON_COURTS_IMPORT_PATH_VALUE='<path to authorized Ontario court case/order export>'; if [ \"$RECEIVERSHIP_CA_ON_COURTS_IMPORT_PATH_VALUE\" = '<path to authorized Ontario court case/order export>' ]; then echo 'Replace RECEIVERSHIP_CA_ON_COURTS_IMPORT_PATH_VALUE before setting RECEIVERSHIP_CA_ON_COURTS_IMPORT_PATH' >&2; false; else gh variable set RECEIVERSHIP_CA_ON_COURTS_IMPORT_PATH --repo 'charliecf/charts.fyi' --body \"$RECEIVERSHIP_CA_ON_COURTS_IMPORT_PATH_VALUE\"; fi",
            "configured": false,
            "kind": "variable",
            "name": "RECEIVERSHIP_CA_ON_COURTS_IMPORT_PATH",
            "placeholder": "<path to authorized Ontario court case/order export>",
            "required": true
          },
          {
            "command": "RECEIVERSHIP_CA_ON_COURTS_POLLING_ENABLED_VALUE='<true after approvals and controls are in place>'; if [ \"$RECEIVERSHIP_CA_ON_COURTS_POLLING_ENABLED_VALUE\" = '<true after approvals and controls are in place>' ]; then echo 'Replace RECEIVERSHIP_CA_ON_COURTS_POLLING_ENABLED_VALUE before setting RECEIVERSHIP_CA_ON_COURTS_POLLING_ENABLED' >&2; false; else gh variable set RECEIVERSHIP_CA_ON_COURTS_POLLING_ENABLED --repo 'charliecf/charts.fyi' --body \"$RECEIVERSHIP_CA_ON_COURTS_POLLING_ENABLED_VALUE\"; fi",
            "configured": false,
            "kind": "variable",
            "name": "RECEIVERSHIP_CA_ON_COURTS_POLLING_ENABLED",
            "placeholder": "<true after approvals and controls are in place>",
            "required": true
          },
          {
            "command": "RECEIVERSHIP_CA_ON_COURTS_TERMS_APPROVED_VALUE='<true after terms/legal review>'; if [ \"$RECEIVERSHIP_CA_ON_COURTS_TERMS_APPROVED_VALUE\" = '<true after terms/legal review>' ]; then echo 'Replace RECEIVERSHIP_CA_ON_COURTS_TERMS_APPROVED_VALUE before setting RECEIVERSHIP_CA_ON_COURTS_TERMS_APPROVED' >&2; false; else gh variable set RECEIVERSHIP_CA_ON_COURTS_TERMS_APPROVED --repo 'charliecf/charts.fyi' --body \"$RECEIVERSHIP_CA_ON_COURTS_TERMS_APPROVED_VALUE\"; fi",
            "configured": false,
            "kind": "variable",
            "name": "RECEIVERSHIP_CA_ON_COURTS_TERMS_APPROVED",
            "placeholder": "<true after terms/legal review>",
            "required": true
          }
        ],
        "importHandoff": {
          "acceptedFormats": ["csv", "json", "ndjson"],
          "exampleFiles": {
            "csv": "public/data/receivership/us-ca-import-template-ontario-courts.csv"
          },
          "importPathEnv": "RECEIVERSHIP_CA_ON_COURTS_IMPORT_PATH",
          "parserCheck": "npm run check:receivership:us-ca:import-templates",
          "title": "Ontario authorized court case/order export"
        },
        "legalReviewRequired": true,
        "missingRequiredEnv": [
          "RECEIVERSHIP_CA_ON_COURTS_IMPORT_PATH",
          "RECEIVERSHIP_CA_ON_COURTS_POLLING_ENABLED",
          "RECEIVERSHIP_CA_ON_COURTS_TERMS_APPROVED"
        ],
        "officialReferences": [
          {
            "label": "Ontario Courts Public Portal",
            "url": "https://www.ontario.ca/page/ontario-courts-public-portal"
          },
          {
            "label": "Ontario court file and document access guidance",
            "url": "https://www.ontario.ca/document/access-court-files-documents-and-exhibits"
          }
        ],
        "priority": 2,
        "ready": false,
        "readyWhen": [
          "All required GitHub Actions Secrets and Variables for this source are configured.",
          "Any required account, paid-search, cost-control, or terms-review step is approved.",
          "The filled source decision ledger marks this source approved and ready, validates with npm run check:receivership:us-ca:source-decision-ledger, and is supplied to the production-ready workflow as RECEIVERSHIP_US_CA_SOURCE_DECISION_LEDGER_GZIP_BASE64.",
          "Required first-party import files validate against public/data/receivership/us-ca-import-templates.json.",
          "The source health row is ok/fresh after the next US/Canada refresh.",
          "The row-producing source collector is implemented, not preflight-only.",
          "The strict production verifier exits successfully."
        ],
        "requiredInputs": [
          {
            "configured": false,
            "githubKind": "variable",
            "name": "RECEIVERSHIP_CA_ON_COURTS_TERMS_APPROVED",
            "purpose": "Records that Ontario court portal automation and public-reuse terms have been approved.",
            "required": true
          },
          {
            "configured": false,
            "githubKind": "variable",
            "name": "RECEIVERSHIP_CA_ON_COURTS_POLLING_ENABLED",
            "purpose": "Enables Ontario court portal polling/import handoff after terms review.",
            "required": true
          },
          {
            "configured": false,
            "githubKind": "variable",
            "name": "RECEIVERSHIP_CA_ON_COURTS_IMPORT_PATH",
            "purpose": "Path to an authorized Ontario court case/order export in JSON, NDJSON, or CSV form.",
            "required": true
          }
        ],
        "setupId": "setup:ca-on-court-source",
        "sourceId": "ca-ontario-courts-public-portal",
        "sourceName": "Ontario Courts Public Portal",
        "status": "terms_review",
        "termsReviewRequired": true,
        "verificationCommands": [
          "npm run check:receivership:us-ca:blockers",
          "npm run check:receivership:us-ca:config",
          "npm run check:receivership:us-ca:github-env",
          "npm run check:receivership:us-ca:import-templates",
          "npm run check:receivership:us-ca:production-blocker-issue",
          "npm run check:receivership:us-ca:production-env",
          "npm run check:receivership:us-ca:runbook",
          "npm run check:receivership:us-ca:setup-packet",
          "npm run check:receivership:us-ca:source-activation",
          "npm run check:receivership:us-ca:source-decision-ledger",
          "npm run check:receivership:us-ca:source-decision-ledger-template",
          "npm run check:receivership:us-ca:source-decision-packet",
          "npm run check:receivership:us-ca:source-health",
          "npm run fetch:receivership:us-ca",
          "npm run verify:receivership:us-ca",
          "npm run verify:receivership:us-ca:production"
        ]
      },
      {
        "accountUrl": "https://www.ic.gc.ca/app/scr/bsf-osb/ins/login.html?lang=eng",
        "actionRequired": "Complete OSB Bankruptcy and Insolvency Records Search account, paid-search, cost-control, and authorized import setup before enabling this source. Missing: RECEIVERSHIP_OSB_BIA_ACCOUNT_CONFIRMED=true after registering for OSB Bankruptcy and Insolvency Records Search, RECEIVERSHIP_OSB_BIA_PAID_SEARCH_APPROVED=true after approving paid OSB searches, RECEIVERSHIP_OSB_BIA_DAILY_SEARCH_LIMIT, RECEIVERSHIP_OSB_BIA_SEARCH_BUDGET_CAD, RECEIVERSHIP_OSB_BIA_IMPORT_PATH pointing to an authorized JSON, NDJSON, or CSV OSB search result/details export.",
        "activationSteps": [
          "Register for OSB Bankruptcy and Insolvency Records Search access through the current GCKey or Sign-In Partner flow.",
          "Approve paid searches and configure a daily search limit plus CAD budget before enabling automation.",
          "Save authorized OSB search result/details exports as JSON, NDJSON, or CSV and point RECEIVERSHIP_OSB_BIA_IMPORT_PATH at that file.",
          "Set RECEIVERSHIP_OSB_BIA_ACCOUNT_CONFIRMED=true, RECEIVERSHIP_OSB_BIA_PAID_SEARCH_APPROVED=true, RECEIVERSHIP_OSB_BIA_DAILY_SEARCH_LIMIT, RECEIVERSHIP_OSB_BIA_SEARCH_BUDGET_CAD, and RECEIVERSHIP_OSB_BIA_IMPORT_PATH."
        ],
        "billable": true,
        "costControlInputs": [
          {
            "configured": false,
            "githubKind": "variable",
            "name": "RECEIVERSHIP_OSB_BIA_DAILY_SEARCH_LIMIT",
            "purpose": "Daily OSB BIA search count cap for cost control.",
            "required": true
          },
          {
            "configured": false,
            "githubKind": "variable",
            "name": "RECEIVERSHIP_OSB_BIA_SEARCH_BUDGET_CAD",
            "purpose": "Daily OSB BIA search budget cap in CAD.",
            "required": true
          }
        ],
        "githubCommands": [
          {
            "command": "RECEIVERSHIP_OSB_BIA_ACCOUNT_CONFIRMED_VALUE='<true after account access is confirmed>'; if [ \"$RECEIVERSHIP_OSB_BIA_ACCOUNT_CONFIRMED_VALUE\" = '<true after account access is confirmed>' ]; then echo 'Replace RECEIVERSHIP_OSB_BIA_ACCOUNT_CONFIRMED_VALUE before setting RECEIVERSHIP_OSB_BIA_ACCOUNT_CONFIRMED' >&2; false; else gh variable set RECEIVERSHIP_OSB_BIA_ACCOUNT_CONFIRMED --repo 'charliecf/charts.fyi' --body \"$RECEIVERSHIP_OSB_BIA_ACCOUNT_CONFIRMED_VALUE\"; fi",
            "configured": false,
            "kind": "variable",
            "name": "RECEIVERSHIP_OSB_BIA_ACCOUNT_CONFIRMED",
            "placeholder": "<true after account access is confirmed>",
            "required": true
          },
          {
            "command": "RECEIVERSHIP_OSB_BIA_DAILY_SEARCH_LIMIT_VALUE='<approved daily search count limit>'; if [ \"$RECEIVERSHIP_OSB_BIA_DAILY_SEARCH_LIMIT_VALUE\" = '<approved daily search count limit>' ]; then echo 'Replace RECEIVERSHIP_OSB_BIA_DAILY_SEARCH_LIMIT_VALUE before setting RECEIVERSHIP_OSB_BIA_DAILY_SEARCH_LIMIT' >&2; false; else gh variable set RECEIVERSHIP_OSB_BIA_DAILY_SEARCH_LIMIT --repo 'charliecf/charts.fyi' --body \"$RECEIVERSHIP_OSB_BIA_DAILY_SEARCH_LIMIT_VALUE\"; fi",
            "configured": false,
            "kind": "variable",
            "name": "RECEIVERSHIP_OSB_BIA_DAILY_SEARCH_LIMIT",
            "placeholder": "<approved daily search count limit>",
            "required": true
          },
          {
            "command": "RECEIVERSHIP_OSB_BIA_IMPORT_PATH_VALUE='<path to authorized OSB BIA saved-search export>'; if [ \"$RECEIVERSHIP_OSB_BIA_IMPORT_PATH_VALUE\" = '<path to authorized OSB BIA saved-search export>' ]; then echo 'Replace RECEIVERSHIP_OSB_BIA_IMPORT_PATH_VALUE before setting RECEIVERSHIP_OSB_BIA_IMPORT_PATH' >&2; false; else gh variable set RECEIVERSHIP_OSB_BIA_IMPORT_PATH --repo 'charliecf/charts.fyi' --body \"$RECEIVERSHIP_OSB_BIA_IMPORT_PATH_VALUE\"; fi",
            "configured": false,
            "kind": "variable",
            "name": "RECEIVERSHIP_OSB_BIA_IMPORT_PATH",
            "placeholder": "<path to authorized OSB BIA saved-search export>",
            "required": true
          },
          {
            "command": "RECEIVERSHIP_OSB_BIA_PAID_SEARCH_APPROVED_VALUE='<true after paid search approval>'; if [ \"$RECEIVERSHIP_OSB_BIA_PAID_SEARCH_APPROVED_VALUE\" = '<true after paid search approval>' ]; then echo 'Replace RECEIVERSHIP_OSB_BIA_PAID_SEARCH_APPROVED_VALUE before setting RECEIVERSHIP_OSB_BIA_PAID_SEARCH_APPROVED' >&2; false; else gh variable set RECEIVERSHIP_OSB_BIA_PAID_SEARCH_APPROVED --repo 'charliecf/charts.fyi' --body \"$RECEIVERSHIP_OSB_BIA_PAID_SEARCH_APPROVED_VALUE\"; fi",
            "configured": false,
            "kind": "variable",
            "name": "RECEIVERSHIP_OSB_BIA_PAID_SEARCH_APPROVED",
            "placeholder": "<true after paid search approval>",
            "required": true
          },
          {
            "command": "RECEIVERSHIP_OSB_BIA_SEARCH_BUDGET_CAD_VALUE='<approved CAD daily search budget>'; if [ \"$RECEIVERSHIP_OSB_BIA_SEARCH_BUDGET_CAD_VALUE\" = '<approved CAD daily search budget>' ]; then echo 'Replace RECEIVERSHIP_OSB_BIA_SEARCH_BUDGET_CAD_VALUE before setting RECEIVERSHIP_OSB_BIA_SEARCH_BUDGET_CAD' >&2; false; else gh variable set RECEIVERSHIP_OSB_BIA_SEARCH_BUDGET_CAD --repo 'charliecf/charts.fyi' --body \"$RECEIVERSHIP_OSB_BIA_SEARCH_BUDGET_CAD_VALUE\"; fi",
            "configured": false,
            "kind": "variable",
            "name": "RECEIVERSHIP_OSB_BIA_SEARCH_BUDGET_CAD",
            "placeholder": "<approved CAD daily search budget>",
            "required": true
          }
        ],
        "importHandoff": {
          "acceptedFormats": ["csv", "json", "ndjson"],
          "exampleFiles": {
            "csv": "public/data/receivership/us-ca-import-template-osb-bia.csv"
          },
          "importPathEnv": "RECEIVERSHIP_OSB_BIA_IMPORT_PATH",
          "parserCheck": "npm run check:receivership:us-ca:import-templates",
          "title": "OSB BIA authorized saved-search/details export"
        },
        "legalReviewRequired": false,
        "missingRequiredEnv": [
          "RECEIVERSHIP_OSB_BIA_ACCOUNT_CONFIRMED",
          "RECEIVERSHIP_OSB_BIA_DAILY_SEARCH_LIMIT",
          "RECEIVERSHIP_OSB_BIA_IMPORT_PATH",
          "RECEIVERSHIP_OSB_BIA_PAID_SEARCH_APPROVED",
          "RECEIVERSHIP_OSB_BIA_SEARCH_BUDGET_CAD"
        ],
        "officialReferences": [
          {
            "label": "OSB Bankruptcy and Insolvency Records Search",
            "url": "https://ised-isde.canada.ca/site/office-superintendent-bankruptcy/en/bankruptcy-and-insolvency-records-search/bankruptcy-and-insolvency-records-search"
          },
          {
            "label": "OSB search instructions and costs",
            "url": "https://ised-isde.canada.ca/site/office-superintendent-bankruptcy/en/bankruptcy-and-insolvency-records-search/instructions"
          }
        ],
        "priority": 3,
        "ready": false,
        "readyWhen": [
          "All required GitHub Actions Secrets and Variables for this source are configured.",
          "Any required account, paid-search, cost-control, or terms-review step is approved.",
          "The filled source decision ledger marks this source approved and ready, validates with npm run check:receivership:us-ca:source-decision-ledger, and is supplied to the production-ready workflow as RECEIVERSHIP_US_CA_SOURCE_DECISION_LEDGER_GZIP_BASE64.",
          "Required first-party import files validate against public/data/receivership/us-ca-import-templates.json.",
          "The source health row is ok/fresh after the next US/Canada refresh.",
          "The row-producing source collector is implemented, not preflight-only.",
          "The strict production verifier exits successfully."
        ],
        "requiredInputs": [
          {
            "configured": false,
            "githubKind": "variable",
            "name": "RECEIVERSHIP_OSB_BIA_ACCOUNT_CONFIRMED",
            "purpose": "Records that OSB Bankruptcy and Insolvency Records Search account access is active.",
            "required": true
          },
          {
            "configured": false,
            "githubKind": "variable",
            "name": "RECEIVERSHIP_OSB_BIA_PAID_SEARCH_APPROVED",
            "purpose": "Records approval to run paid OSB BIA searches.",
            "required": true
          },
          {
            "configured": false,
            "githubKind": "variable",
            "name": "RECEIVERSHIP_OSB_BIA_DAILY_SEARCH_LIMIT",
            "purpose": "Daily OSB BIA search count cap for cost control.",
            "required": true
          },
          {
            "configured": false,
            "githubKind": "variable",
            "name": "RECEIVERSHIP_OSB_BIA_IMPORT_PATH",
            "purpose": "Path to an authorized official OSB saved search result/details export in JSON, NDJSON, or CSV form.",
            "required": true
          },
          {
            "configured": false,
            "githubKind": "variable",
            "name": "RECEIVERSHIP_OSB_BIA_SEARCH_BUDGET_CAD",
            "purpose": "Daily OSB BIA search budget cap in CAD.",
            "required": true
          }
        ],
        "setupId": "setup:ca-osb-bia-insolvency-records",
        "sourceId": "ca-osb-bia-insolvency-records",
        "sourceName": "Canada OSB Bankruptcy and Insolvency Records Search",
        "status": "skipped_credentials",
        "termsReviewRequired": false,
        "verificationCommands": [
          "npm run check:receivership:us-ca:blockers",
          "npm run check:receivership:us-ca:config",
          "npm run check:receivership:us-ca:github-env",
          "npm run check:receivership:us-ca:import-templates",
          "npm run check:receivership:us-ca:production-blocker-issue",
          "npm run check:receivership:us-ca:production-env",
          "npm run check:receivership:us-ca:runbook",
          "npm run check:receivership:us-ca:setup-packet",
          "npm run check:receivership:us-ca:source-activation",
          "npm run check:receivership:us-ca:source-decision-ledger",
          "npm run check:receivership:us-ca:source-decision-ledger-template",
          "npm run check:receivership:us-ca:source-decision-packet",
          "npm run check:receivership:us-ca:source-health",
          "npm run fetch:receivership:us-ca",
          "npm run verify:receivership:us-ca",
          "npm run verify:receivership:us-ca:production"
        ]
      },
      {
        "accountUrl": "https://pacer.uscourts.gov/find-case/search-national-index",
        "actionRequired": "Complete PACER Case Locator credentials and daily cost-cap setup before enabling bounded PCL ingestion. Missing: PACER_USERNAME and PACER_PASSWORD, RECEIVERSHIP_PACER_DAILY_COST_CAP_USD. PACER_OTP and PACER_CLIENT_CODE are optional depending on account settings.",
        "activationSteps": [
          "Register or confirm a PACER account and billing responsibility.",
          "Set PACER_USERNAME and PACER_PASSWORD; add PACER_TOTP_SECRET, PACER_OTP, and PACER_CLIENT_CODE if the account requires them.",
          "Run npm run check:pacer before enabling billable Case Locator searches."
        ],
        "billable": true,
        "costControlInputs": [
          {
            "configured": false,
            "githubKind": "variable",
            "name": "RECEIVERSHIP_PACER_DAILY_COST_CAP_USD",
            "purpose": "Daily PACER Case Locator spend cap in USD.",
            "required": true
          }
        ],
        "githubCommands": [
          {
            "command": "PACER_PASSWORD_VALUE='<PACER password>'; if [ \"$PACER_PASSWORD_VALUE\" = '<PACER password>' ]; then echo 'Replace PACER_PASSWORD_VALUE before setting PACER_PASSWORD' >&2; false; else gh secret set PACER_PASSWORD --app actions --repo 'charliecf/charts.fyi' --body \"$PACER_PASSWORD_VALUE\"; fi",
            "configured": false,
            "kind": "secret",
            "name": "PACER_PASSWORD",
            "placeholder": "<PACER password>",
            "required": true
          },
          {
            "command": "PACER_USERNAME_VALUE='<PACER username>'; if [ \"$PACER_USERNAME_VALUE\" = '<PACER username>' ]; then echo 'Replace PACER_USERNAME_VALUE before setting PACER_USERNAME' >&2; false; else gh secret set PACER_USERNAME --app actions --repo 'charliecf/charts.fyi' --body \"$PACER_USERNAME_VALUE\"; fi",
            "configured": false,
            "kind": "secret",
            "name": "PACER_USERNAME",
            "placeholder": "<PACER username>",
            "required": true
          },
          {
            "command": "RECEIVERSHIP_PACER_DAILY_COST_CAP_USD_VALUE='<approved USD daily cap>'; if [ \"$RECEIVERSHIP_PACER_DAILY_COST_CAP_USD_VALUE\" = '<approved USD daily cap>' ]; then echo 'Replace RECEIVERSHIP_PACER_DAILY_COST_CAP_USD_VALUE before setting RECEIVERSHIP_PACER_DAILY_COST_CAP_USD' >&2; false; else gh variable set RECEIVERSHIP_PACER_DAILY_COST_CAP_USD --repo 'charliecf/charts.fyi' --body \"$RECEIVERSHIP_PACER_DAILY_COST_CAP_USD_VALUE\"; fi",
            "configured": false,
            "kind": "variable",
            "name": "RECEIVERSHIP_PACER_DAILY_COST_CAP_USD",
            "placeholder": "<approved USD daily cap>",
            "required": true
          },
          {
            "command": "PACER_CLIENT_CODE_VALUE='<optional PACER client code>'; if [ \"$PACER_CLIENT_CODE_VALUE\" = '<optional PACER client code>' ]; then echo 'Replace PACER_CLIENT_CODE_VALUE before setting PACER_CLIENT_CODE' >&2; false; else gh secret set PACER_CLIENT_CODE --app actions --repo 'charliecf/charts.fyi' --body \"$PACER_CLIENT_CODE_VALUE\"; fi",
            "configured": false,
            "kind": "secret",
            "name": "PACER_CLIENT_CODE",
            "placeholder": "<optional PACER client code>",
            "required": false
          },
          {
            "command": "PACER_OTP_VALUE='<one-time PACER MFA code>'; if [ \"$PACER_OTP_VALUE\" = '<one-time PACER MFA code>' ]; then echo 'Replace PACER_OTP_VALUE before setting PACER_OTP' >&2; false; else gh secret set PACER_OTP --app actions --repo 'charliecf/charts.fyi' --body \"$PACER_OTP_VALUE\"; fi",
            "configured": false,
            "kind": "secret",
            "name": "PACER_OTP",
            "placeholder": "<one-time PACER MFA code>",
            "required": false
          },
          {
            "command": "PACER_TOTP_SECRET_VALUE='<optional PACER TOTP seed>'; if [ \"$PACER_TOTP_SECRET_VALUE\" = '<optional PACER TOTP seed>' ]; then echo 'Replace PACER_TOTP_SECRET_VALUE before setting PACER_TOTP_SECRET' >&2; false; else gh secret set PACER_TOTP_SECRET --app actions --repo 'charliecf/charts.fyi' --body \"$PACER_TOTP_SECRET_VALUE\"; fi",
            "configured": false,
            "kind": "secret",
            "name": "PACER_TOTP_SECRET",
            "placeholder": "<optional PACER TOTP seed>",
            "required": false
          }
        ],
        "importHandoff": null,
        "legalReviewRequired": false,
        "missingRequiredEnv": [
          "PACER_PASSWORD",
          "PACER_USERNAME",
          "RECEIVERSHIP_PACER_DAILY_COST_CAP_USD"
        ],
        "officialReferences": [
          {
            "label": "PACER Case Locator",
            "url": "https://pacer.uscourts.gov/find-case/search-national-index"
          },
          {
            "label": "PACER registration FAQ",
            "url": "https://pacer.uscourts.gov/help/faqs/registration"
          },
          {
            "label": "PACER policy and fee information",
            "url": "https://pacer.uscourts.gov/policy-procedures"
          }
        ],
        "priority": 4,
        "ready": false,
        "readyWhen": [
          "All required GitHub Actions Secrets and Variables for this source are configured.",
          "Any required account, paid-search, cost-control, or terms-review step is approved.",
          "The filled source decision ledger marks this source approved and ready, validates with npm run check:receivership:us-ca:source-decision-ledger, and is supplied to the production-ready workflow as RECEIVERSHIP_US_CA_SOURCE_DECISION_LEDGER_GZIP_BASE64.",
          "Required first-party import files validate against public/data/receivership/us-ca-import-templates.json.",
          "The source health row is ok/fresh after the next US/Canada refresh.",
          "The row-producing source collector is implemented, not preflight-only.",
          "The strict production verifier exits successfully."
        ],
        "requiredInputs": [
          {
            "configured": false,
            "githubKind": "secret",
            "name": "PACER_USERNAME",
            "purpose": "PACER account username.",
            "required": true
          },
          {
            "configured": false,
            "githubKind": "secret",
            "name": "PACER_PASSWORD",
            "purpose": "PACER account password.",
            "required": true
          },
          {
            "configured": false,
            "githubKind": "variable",
            "name": "RECEIVERSHIP_PACER_DAILY_COST_CAP_USD",
            "purpose": "Daily PACER Case Locator spend cap in USD.",
            "required": true
          }
        ],
        "setupId": "credentials:pacer-case-locator",
        "sourceId": "us-pacer-case-locator",
        "sourceName": "PACER Case Locator",
        "status": "skipped_credentials",
        "termsReviewRequired": false,
        "verificationCommands": [
          "npm run check:pacer",
          "npm run check:receivership:us-ca:blockers",
          "npm run check:receivership:us-ca:config",
          "npm run check:receivership:us-ca:github-env",
          "npm run check:receivership:us-ca:import-templates",
          "npm run check:receivership:us-ca:production-blocker-issue",
          "npm run check:receivership:us-ca:production-env",
          "npm run check:receivership:us-ca:runbook",
          "npm run check:receivership:us-ca:setup-packet",
          "npm run check:receivership:us-ca:source-activation",
          "npm run check:receivership:us-ca:source-decision-ledger",
          "npm run check:receivership:us-ca:source-decision-ledger-template",
          "npm run check:receivership:us-ca:source-decision-packet",
          "npm run check:receivership:us-ca:source-health",
          "npm run fetch:receivership:us-ca",
          "npm run verify:receivership:us-ca",
          "npm run verify:receivership:us-ca:production"
        ]
      },
      {
        "accountUrl": "https://pacer.uscourts.gov/find-case",
        "actionRequired": "Complete PACER court-specific credentials, court allowlist, cost controls, polling approval, and authorized docket import setup before enabling this source. Missing: PACER_USERNAME and PACER_PASSWORD, RECEIVERSHIP_PACER_COURT_ALLOWLIST, RECEIVERSHIP_PACER_COURT_DAILY_COST_CAP_USD, RECEIVERSHIP_PACER_COURT_MAX_DOCKET_PAGES, RECEIVERSHIP_PACER_COURT_POLLING_ENABLED=true after credentials, allowlist, and cost controls are approved, RECEIVERSHIP_PACER_COURT_IMPORT_PATH pointing to an approved JSON, NDJSON, or CSV CM/ECF docket export.",
        "activationSteps": [
          "Register or confirm a PACER account and billing responsibility for court-specific CM/ECF access.",
          "Choose the bankruptcy court allowlist and set a daily cost cap plus docket-page cap.",
          "Save approved court-specific CM/ECF docket exports as JSON, NDJSON, or CSV and point RECEIVERSHIP_PACER_COURT_IMPORT_PATH at that file.",
          "Set RECEIVERSHIP_PACER_COURT_ALLOWLIST, RECEIVERSHIP_PACER_COURT_DAILY_COST_CAP_USD, RECEIVERSHIP_PACER_COURT_MAX_DOCKET_PAGES, and RECEIVERSHIP_PACER_COURT_POLLING_ENABLED=true only after cost controls are reviewed."
        ],
        "billable": true,
        "costControlInputs": [
          {
            "configured": false,
            "githubKind": "variable",
            "name": "RECEIVERSHIP_PACER_COURT_DAILY_COST_CAP_USD",
            "purpose": "Daily court-specific PACER spend cap in USD.",
            "required": true
          },
          {
            "configured": false,
            "githubKind": "variable",
            "name": "RECEIVERSHIP_PACER_COURT_MAX_DOCKET_PAGES",
            "purpose": "Maximum court-specific PACER docket pages per run.",
            "required": true
          }
        ],
        "githubCommands": [
          {
            "command": "PACER_PASSWORD_VALUE='<PACER password>'; if [ \"$PACER_PASSWORD_VALUE\" = '<PACER password>' ]; then echo 'Replace PACER_PASSWORD_VALUE before setting PACER_PASSWORD' >&2; false; else gh secret set PACER_PASSWORD --app actions --repo 'charliecf/charts.fyi' --body \"$PACER_PASSWORD_VALUE\"; fi",
            "configured": false,
            "kind": "secret",
            "name": "PACER_PASSWORD",
            "placeholder": "<PACER password>",
            "required": true
          },
          {
            "command": "PACER_USERNAME_VALUE='<PACER username>'; if [ \"$PACER_USERNAME_VALUE\" = '<PACER username>' ]; then echo 'Replace PACER_USERNAME_VALUE before setting PACER_USERNAME' >&2; false; else gh secret set PACER_USERNAME --app actions --repo 'charliecf/charts.fyi' --body \"$PACER_USERNAME_VALUE\"; fi",
            "configured": false,
            "kind": "secret",
            "name": "PACER_USERNAME",
            "placeholder": "<PACER username>",
            "required": true
          },
          {
            "command": "RECEIVERSHIP_PACER_COURT_ALLOWLIST_VALUE='<comma-separated approved PACER court IDs>'; if [ \"$RECEIVERSHIP_PACER_COURT_ALLOWLIST_VALUE\" = '<comma-separated approved PACER court IDs>' ]; then echo 'Replace RECEIVERSHIP_PACER_COURT_ALLOWLIST_VALUE before setting RECEIVERSHIP_PACER_COURT_ALLOWLIST' >&2; false; else gh variable set RECEIVERSHIP_PACER_COURT_ALLOWLIST --repo 'charliecf/charts.fyi' --body \"$RECEIVERSHIP_PACER_COURT_ALLOWLIST_VALUE\"; fi",
            "configured": false,
            "kind": "variable",
            "name": "RECEIVERSHIP_PACER_COURT_ALLOWLIST",
            "placeholder": "<comma-separated approved PACER court IDs>",
            "required": true
          },
          {
            "command": "RECEIVERSHIP_PACER_COURT_DAILY_COST_CAP_USD_VALUE='<approved USD daily cap>'; if [ \"$RECEIVERSHIP_PACER_COURT_DAILY_COST_CAP_USD_VALUE\" = '<approved USD daily cap>' ]; then echo 'Replace RECEIVERSHIP_PACER_COURT_DAILY_COST_CAP_USD_VALUE before setting RECEIVERSHIP_PACER_COURT_DAILY_COST_CAP_USD' >&2; false; else gh variable set RECEIVERSHIP_PACER_COURT_DAILY_COST_CAP_USD --repo 'charliecf/charts.fyi' --body \"$RECEIVERSHIP_PACER_COURT_DAILY_COST_CAP_USD_VALUE\"; fi",
            "configured": false,
            "kind": "variable",
            "name": "RECEIVERSHIP_PACER_COURT_DAILY_COST_CAP_USD",
            "placeholder": "<approved USD daily cap>",
            "required": true
          },
          {
            "command": "RECEIVERSHIP_PACER_COURT_IMPORT_PATH_VALUE='<path to approved PACER court docket export>'; if [ \"$RECEIVERSHIP_PACER_COURT_IMPORT_PATH_VALUE\" = '<path to approved PACER court docket export>' ]; then echo 'Replace RECEIVERSHIP_PACER_COURT_IMPORT_PATH_VALUE before setting RECEIVERSHIP_PACER_COURT_IMPORT_PATH' >&2; false; else gh variable set RECEIVERSHIP_PACER_COURT_IMPORT_PATH --repo 'charliecf/charts.fyi' --body \"$RECEIVERSHIP_PACER_COURT_IMPORT_PATH_VALUE\"; fi",
            "configured": false,
            "kind": "variable",
            "name": "RECEIVERSHIP_PACER_COURT_IMPORT_PATH",
            "placeholder": "<path to approved PACER court docket export>",
            "required": true
          },
          {
            "command": "RECEIVERSHIP_PACER_COURT_MAX_DOCKET_PAGES_VALUE='<approved maximum docket pages per run>'; if [ \"$RECEIVERSHIP_PACER_COURT_MAX_DOCKET_PAGES_VALUE\" = '<approved maximum docket pages per run>' ]; then echo 'Replace RECEIVERSHIP_PACER_COURT_MAX_DOCKET_PAGES_VALUE before setting RECEIVERSHIP_PACER_COURT_MAX_DOCKET_PAGES' >&2; false; else gh variable set RECEIVERSHIP_PACER_COURT_MAX_DOCKET_PAGES --repo 'charliecf/charts.fyi' --body \"$RECEIVERSHIP_PACER_COURT_MAX_DOCKET_PAGES_VALUE\"; fi",
            "configured": false,
            "kind": "variable",
            "name": "RECEIVERSHIP_PACER_COURT_MAX_DOCKET_PAGES",
            "placeholder": "<approved maximum docket pages per run>",
            "required": true
          },
          {
            "command": "RECEIVERSHIP_PACER_COURT_POLLING_ENABLED_VALUE='<true after approvals and controls are in place>'; if [ \"$RECEIVERSHIP_PACER_COURT_POLLING_ENABLED_VALUE\" = '<true after approvals and controls are in place>' ]; then echo 'Replace RECEIVERSHIP_PACER_COURT_POLLING_ENABLED_VALUE before setting RECEIVERSHIP_PACER_COURT_POLLING_ENABLED' >&2; false; else gh variable set RECEIVERSHIP_PACER_COURT_POLLING_ENABLED --repo 'charliecf/charts.fyi' --body \"$RECEIVERSHIP_PACER_COURT_POLLING_ENABLED_VALUE\"; fi",
            "configured": false,
            "kind": "variable",
            "name": "RECEIVERSHIP_PACER_COURT_POLLING_ENABLED",
            "placeholder": "<true after approvals and controls are in place>",
            "required": true
          },
          {
            "command": "PACER_CLIENT_CODE_VALUE='<optional PACER client code>'; if [ \"$PACER_CLIENT_CODE_VALUE\" = '<optional PACER client code>' ]; then echo 'Replace PACER_CLIENT_CODE_VALUE before setting PACER_CLIENT_CODE' >&2; false; else gh secret set PACER_CLIENT_CODE --app actions --repo 'charliecf/charts.fyi' --body \"$PACER_CLIENT_CODE_VALUE\"; fi",
            "configured": false,
            "kind": "secret",
            "name": "PACER_CLIENT_CODE",
            "placeholder": "<optional PACER client code>",
            "required": false
          }
        ],
        "importHandoff": {
          "acceptedFormats": ["csv", "json", "ndjson"],
          "exampleFiles": {
            "csv": "public/data/receivership/us-ca-import-template-pacer-court.csv"
          },
          "importPathEnv": "RECEIVERSHIP_PACER_COURT_IMPORT_PATH",
          "parserCheck": "npm run check:receivership:us-ca:import-templates",
          "title": "PACER court-specific CM/ECF docket export"
        },
        "legalReviewRequired": false,
        "missingRequiredEnv": [
          "PACER_PASSWORD",
          "PACER_USERNAME",
          "RECEIVERSHIP_PACER_COURT_ALLOWLIST",
          "RECEIVERSHIP_PACER_COURT_DAILY_COST_CAP_USD",
          "RECEIVERSHIP_PACER_COURT_IMPORT_PATH",
          "RECEIVERSHIP_PACER_COURT_MAX_DOCKET_PAGES",
          "RECEIVERSHIP_PACER_COURT_POLLING_ENABLED"
        ],
        "officialReferences": [
          {
            "label": "PACER find a case",
            "url": "https://pacer.uscourts.gov/find-case"
          },
          {
            "label": "PACER registration FAQ",
            "url": "https://pacer.uscourts.gov/help/faqs/registration"
          },
          {
            "label": "PACER policy and fee information",
            "url": "https://pacer.uscourts.gov/policy-procedures"
          }
        ],
        "priority": 5,
        "ready": false,
        "readyWhen": [
          "All required GitHub Actions Secrets and Variables for this source are configured.",
          "Any required account, paid-search, cost-control, or terms-review step is approved.",
          "The filled source decision ledger marks this source approved and ready, validates with npm run check:receivership:us-ca:source-decision-ledger, and is supplied to the production-ready workflow as RECEIVERSHIP_US_CA_SOURCE_DECISION_LEDGER_GZIP_BASE64.",
          "Required first-party import files validate against public/data/receivership/us-ca-import-templates.json.",
          "The source health row is ok/fresh after the next US/Canada refresh.",
          "The row-producing source collector is implemented, not preflight-only.",
          "The strict production verifier exits successfully."
        ],
        "requiredInputs": [
          {
            "configured": false,
            "githubKind": "secret",
            "name": "PACER_USERNAME",
            "purpose": "PACER account username.",
            "required": true
          },
          {
            "configured": false,
            "githubKind": "secret",
            "name": "PACER_PASSWORD",
            "purpose": "PACER account password.",
            "required": true
          },
          {
            "configured": false,
            "githubKind": "variable",
            "name": "RECEIVERSHIP_PACER_COURT_ALLOWLIST",
            "purpose": "Court IDs approved for court-specific PACER docket polling.",
            "required": true
          },
          {
            "configured": false,
            "githubKind": "variable",
            "name": "RECEIVERSHIP_PACER_COURT_DAILY_COST_CAP_USD",
            "purpose": "Daily court-specific PACER spend cap in USD.",
            "required": true
          },
          {
            "configured": false,
            "githubKind": "variable",
            "name": "RECEIVERSHIP_PACER_COURT_IMPORT_PATH",
            "purpose": "Path to an approved court-specific PACER CM/ECF docket export in JSON, NDJSON, or CSV form.",
            "required": true
          },
          {
            "configured": false,
            "githubKind": "variable",
            "name": "RECEIVERSHIP_PACER_COURT_MAX_DOCKET_PAGES",
            "purpose": "Maximum court-specific PACER docket pages per run.",
            "required": true
          },
          {
            "configured": false,
            "githubKind": "variable",
            "name": "RECEIVERSHIP_PACER_COURT_POLLING_ENABLED",
            "purpose": "Enables court-specific PACER docket polling after credentials and cost controls are configured.",
            "required": true
          }
        ],
        "setupId": "setup:us-pacer-court-polling",
        "sourceId": "us-pacer-court-polling",
        "sourceName": "PACER specific-court docket polling",
        "status": "skipped_credentials",
        "termsReviewRequired": false,
        "verificationCommands": [
          "npm run check:receivership:us-ca:blockers",
          "npm run check:receivership:us-ca:config",
          "npm run check:receivership:us-ca:github-env",
          "npm run check:receivership:us-ca:import-templates",
          "npm run check:receivership:us-ca:production-blocker-issue",
          "npm run check:receivership:us-ca:production-env",
          "npm run check:receivership:us-ca:runbook",
          "npm run check:receivership:us-ca:setup-packet",
          "npm run check:receivership:us-ca:source-activation",
          "npm run check:receivership:us-ca:source-decision-ledger",
          "npm run check:receivership:us-ca:source-decision-ledger-template",
          "npm run check:receivership:us-ca:source-decision-packet",
          "npm run check:receivership:us-ca:source-health",
          "npm run fetch:receivership:us-ca",
          "npm run verify:receivership:us-ca",
          "npm run verify:receivership:us-ca:production"
        ]
      }
    ],
    "status": "external_setup_required",
    "summary": {
      "billableSources": 3,
      "importHandoffSources": 4,
      "nextActivationSourceId": "ca-bc-cso-new-cases",
      "legalReviewSources": 2,
      "missingRequiredSecrets": ["PACER_PASSWORD", "PACER_USERNAME"],
      "missingRequiredVariables": [
        "RECEIVERSHIP_CA_BC_CSO_IMPORT_PATH",
        "RECEIVERSHIP_CA_BC_CSO_POLLING_ENABLED",
        "RECEIVERSHIP_CA_BC_CSO_TERMS_APPROVED",
        "RECEIVERSHIP_CA_ON_COURTS_IMPORT_PATH",
        "RECEIVERSHIP_CA_ON_COURTS_POLLING_ENABLED",
        "RECEIVERSHIP_CA_ON_COURTS_TERMS_APPROVED",
        "RECEIVERSHIP_OSB_BIA_ACCOUNT_CONFIRMED",
        "RECEIVERSHIP_OSB_BIA_DAILY_SEARCH_LIMIT",
        "RECEIVERSHIP_OSB_BIA_IMPORT_PATH",
        "RECEIVERSHIP_OSB_BIA_PAID_SEARCH_APPROVED",
        "RECEIVERSHIP_OSB_BIA_SEARCH_BUDGET_CAD",
        "RECEIVERSHIP_PACER_COURT_ALLOWLIST",
        "RECEIVERSHIP_PACER_COURT_DAILY_COST_CAP_USD",
        "RECEIVERSHIP_PACER_COURT_IMPORT_PATH",
        "RECEIVERSHIP_PACER_COURT_MAX_DOCKET_PAGES",
        "RECEIVERSHIP_PACER_COURT_POLLING_ENABLED",
        "RECEIVERSHIP_PACER_DAILY_COST_CAP_USD"
      ],
      "readySources": 0,
      "requiredGithubCommands": 19,
      "termsReviewSources": 2,
      "totalSources": 5
    },
    "targetCountries": ["US", "CA"]
  },
  "importHandoff": {
    "acceptedFormats": ["csv", "json", "ndjson"],
    "artifact": "public/data/receivership/us-ca-import-templates.json",
    "parserCheck": "npm run check:receivership:us-ca:import-templates",
    "templates": [
      {
        "acceptedFormats": ["csv", "json", "ndjson"],
        "activationEnv": {
          "optional": ["PACER_CLIENT_CODE"],
          "required": [
            "PACER_USERNAME",
            "PACER_PASSWORD",
            "RECEIVERSHIP_PACER_COURT_ALLOWLIST",
            "RECEIVERSHIP_PACER_COURT_DAILY_COST_CAP_USD",
            "RECEIVERSHIP_PACER_COURT_IMPORT_PATH",
            "RECEIVERSHIP_PACER_COURT_MAX_DOCKET_PAGES",
            "RECEIVERSHIP_PACER_COURT_POLLING_ENABLED"
          ]
        },
        "exampleFiles": {
          "csv": "public/data/receivership/us-ca-import-template-pacer-court.csv"
        },
        "fieldNames": [
          "court id",
          "case number",
          "debtor name",
          "chapter",
          "filed date",
          "document title",
          "docket text",
          "document url"
        ],
        "importPathEnv": "RECEIVERSHIP_PACER_COURT_IMPORT_PATH",
        "rowSelection": "Only rows with an allowlisted court ID plus company and bankruptcy/receivership/sale-process language become cases.",
        "setupId": "setup:us-pacer-court-polling",
        "sourceId": "us-pacer-court-polling",
        "title": "PACER court-specific CM/ECF docket export"
      },
      {
        "acceptedFormats": ["csv", "json", "ndjson"],
        "activationEnv": {
          "optional": [],
          "required": [
            "RECEIVERSHIP_OSB_BIA_ACCOUNT_CONFIRMED",
            "RECEIVERSHIP_OSB_BIA_PAID_SEARCH_APPROVED",
            "RECEIVERSHIP_OSB_BIA_DAILY_SEARCH_LIMIT",
            "RECEIVERSHIP_OSB_BIA_IMPORT_PATH",
            "RECEIVERSHIP_OSB_BIA_SEARCH_BUDGET_CAD"
          ]
        },
        "exampleFiles": {
          "csv": "public/data/receivership/us-ca-import-template-osb-bia.csv"
        },
        "fieldNames": [
          "debtor name",
          "procedure",
          "filing date",
          "estate number",
          "province",
          "record url"
        ],
        "importPathEnv": "RECEIVERSHIP_OSB_BIA_IMPORT_PATH",
        "rowSelection": "Only rows with a debtor/company name and company markers become cases; non-company debtors are skipped with parse warnings.",
        "setupId": "setup:ca-osb-bia-insolvency-records",
        "sourceId": "ca-osb-bia-insolvency-records",
        "title": "OSB BIA authorized saved-search/details export"
      },
      {
        "acceptedFormats": ["csv", "json", "ndjson"],
        "activationEnv": {
          "optional": [],
          "required": [
            "RECEIVERSHIP_CA_BC_CSO_TERMS_APPROVED",
            "RECEIVERSHIP_CA_BC_CSO_POLLING_ENABLED",
            "RECEIVERSHIP_CA_BC_CSO_IMPORT_PATH"
          ]
        },
        "exampleFiles": {
          "csv": "public/data/receivership/us-ca-import-template-bc-cso.csv"
        },
        "fieldNames": [
          "file number",
          "style of cause",
          "classification",
          "date opened",
          "court location",
          "electronic docs"
        ],
        "importPathEnv": "RECEIVERSHIP_CA_BC_CSO_IMPORT_PATH",
        "rowSelection": "Only rows with company markers and insolvency, receivership, CCAA, BIA, proposal, winding-up, or liquidation language become cases.",
        "setupId": "setup:ca-bc-court-source",
        "sourceId": "ca-bc-cso-new-cases",
        "title": "BC CSO authorized new-case report export"
      },
      {
        "acceptedFormats": ["csv", "json", "ndjson"],
        "activationEnv": {
          "optional": [],
          "required": [
            "RECEIVERSHIP_CA_ON_COURTS_TERMS_APPROVED",
            "RECEIVERSHIP_CA_ON_COURTS_POLLING_ENABLED",
            "RECEIVERSHIP_CA_ON_COURTS_IMPORT_PATH"
          ]
        },
        "exampleFiles": {
          "csv": "public/data/receivership/us-ca-import-template-ontario-courts.csv"
        },
        "fieldNames": [
          "case title",
          "company name",
          "case number",
          "event date",
          "document title",
          "court location",
          "source url"
        ],
        "importPathEnv": "RECEIVERSHIP_CA_ON_COURTS_IMPORT_PATH",
        "rowSelection": "Only rows with company markers and insolvency, receivership, CCAA, BIA, liquidation, winding-up, or Commercial List language become cases.",
        "setupId": "setup:ca-on-court-source",
        "sourceId": "ca-ontario-courts-public-portal",
        "title": "Ontario authorized court case/order export"
      }
    ]
  },
  "sourceDecisionLedger": {
    "checkCommand": "npm run check:receivership:us-ca:source-decision-ledger",
    "filledLedgerGzipBase64Env": "RECEIVERSHIP_US_CA_SOURCE_DECISION_LEDGER_GZIP_BASE64",
    "filledLedgerJsonEnv": "RECEIVERSHIP_US_CA_SOURCE_DECISION_LEDGER_JSON",
    "filledLedgerPathEnv": "RECEIVERSHIP_US_CA_SOURCE_DECISION_LEDGER_PATH",
    "githubCommandsPrintCommand": "npm run print:receivership:us-ca:source-decision-ledger-github-commands",
    "ledgerPrintCommand": "npm run print:receivership:us-ca:source-decision-ledger",
    "productionReadyWorkflow": ".github/workflows/receivership-us-ca-production-ready.yml",
    "templateArtifact": "public/data/receivership/us-ca-source-decision-ledger-template.json",
    "templateCheckCommand": "npm run check:receivership:us-ca:source-decision-ledger-template",
    "workflowDispatchInput": "source_decision_ledger_gzip_base64"
  },
  "productionTracker": {
    "issueTitle": "US/Canada receivership production setup blockers",
    "issueUrl": "https://github.com/charliecf/charts.fyi/issues/5",
    "maintainedByWorkflow": ".github/workflows/receivership-us-ca.yml",
    "purpose": "Tracks the external account, terms-review, cost-control, and authorized-import work required before US/Canada production coverage can be marked complete.",
    "status": "open",
    "verificationCommand": "npm run check:receivership:us-ca:production-blocker-issue"
  },
  "productionReady": false,
  "runbookVersion": 1,
  "sequence": [
    {
      "commands": ["npm run check:receivership:us-ca:source-activation"],
      "id": "review-source-activation",
      "order": 1,
      "title": "Review source activation rows, official references, legal review requirements, and account URLs."
    },
    {
      "commands": [
        "PACER_PASSWORD_VALUE='<PACER password>'; if [ \"$PACER_PASSWORD_VALUE\" = '<PACER password>' ]; then echo 'Replace PACER_PASSWORD_VALUE before setting PACER_PASSWORD' >&2; false; else gh secret set PACER_PASSWORD --app actions --repo 'charliecf/charts.fyi' --body \"$PACER_PASSWORD_VALUE\"; fi",
        "PACER_USERNAME_VALUE='<PACER username>'; if [ \"$PACER_USERNAME_VALUE\" = '<PACER username>' ]; then echo 'Replace PACER_USERNAME_VALUE before setting PACER_USERNAME' >&2; false; else gh secret set PACER_USERNAME --app actions --repo 'charliecf/charts.fyi' --body \"$PACER_USERNAME_VALUE\"; fi",
        "RECEIVERSHIP_CA_BC_CSO_IMPORT_PATH_VALUE='<path to authorized BC CSO new-case report export>'; if [ \"$RECEIVERSHIP_CA_BC_CSO_IMPORT_PATH_VALUE\" = '<path to authorized BC CSO new-case report export>' ]; then echo 'Replace RECEIVERSHIP_CA_BC_CSO_IMPORT_PATH_VALUE before setting RECEIVERSHIP_CA_BC_CSO_IMPORT_PATH' >&2; false; else gh variable set RECEIVERSHIP_CA_BC_CSO_IMPORT_PATH --repo 'charliecf/charts.fyi' --body \"$RECEIVERSHIP_CA_BC_CSO_IMPORT_PATH_VALUE\"; fi",
        "RECEIVERSHIP_CA_BC_CSO_POLLING_ENABLED_VALUE='<true after approvals and controls are in place>'; if [ \"$RECEIVERSHIP_CA_BC_CSO_POLLING_ENABLED_VALUE\" = '<true after approvals and controls are in place>' ]; then echo 'Replace RECEIVERSHIP_CA_BC_CSO_POLLING_ENABLED_VALUE before setting RECEIVERSHIP_CA_BC_CSO_POLLING_ENABLED' >&2; false; else gh variable set RECEIVERSHIP_CA_BC_CSO_POLLING_ENABLED --repo 'charliecf/charts.fyi' --body \"$RECEIVERSHIP_CA_BC_CSO_POLLING_ENABLED_VALUE\"; fi",
        "RECEIVERSHIP_CA_BC_CSO_TERMS_APPROVED_VALUE='<true after terms/legal review>'; if [ \"$RECEIVERSHIP_CA_BC_CSO_TERMS_APPROVED_VALUE\" = '<true after terms/legal review>' ]; then echo 'Replace RECEIVERSHIP_CA_BC_CSO_TERMS_APPROVED_VALUE before setting RECEIVERSHIP_CA_BC_CSO_TERMS_APPROVED' >&2; false; else gh variable set RECEIVERSHIP_CA_BC_CSO_TERMS_APPROVED --repo 'charliecf/charts.fyi' --body \"$RECEIVERSHIP_CA_BC_CSO_TERMS_APPROVED_VALUE\"; fi",
        "RECEIVERSHIP_CA_ON_COURTS_IMPORT_PATH_VALUE='<path to authorized Ontario court case/order export>'; if [ \"$RECEIVERSHIP_CA_ON_COURTS_IMPORT_PATH_VALUE\" = '<path to authorized Ontario court case/order export>' ]; then echo 'Replace RECEIVERSHIP_CA_ON_COURTS_IMPORT_PATH_VALUE before setting RECEIVERSHIP_CA_ON_COURTS_IMPORT_PATH' >&2; false; else gh variable set RECEIVERSHIP_CA_ON_COURTS_IMPORT_PATH --repo 'charliecf/charts.fyi' --body \"$RECEIVERSHIP_CA_ON_COURTS_IMPORT_PATH_VALUE\"; fi",
        "RECEIVERSHIP_CA_ON_COURTS_POLLING_ENABLED_VALUE='<true after approvals and controls are in place>'; if [ \"$RECEIVERSHIP_CA_ON_COURTS_POLLING_ENABLED_VALUE\" = '<true after approvals and controls are in place>' ]; then echo 'Replace RECEIVERSHIP_CA_ON_COURTS_POLLING_ENABLED_VALUE before setting RECEIVERSHIP_CA_ON_COURTS_POLLING_ENABLED' >&2; false; else gh variable set RECEIVERSHIP_CA_ON_COURTS_POLLING_ENABLED --repo 'charliecf/charts.fyi' --body \"$RECEIVERSHIP_CA_ON_COURTS_POLLING_ENABLED_VALUE\"; fi",
        "RECEIVERSHIP_CA_ON_COURTS_TERMS_APPROVED_VALUE='<true after terms/legal review>'; if [ \"$RECEIVERSHIP_CA_ON_COURTS_TERMS_APPROVED_VALUE\" = '<true after terms/legal review>' ]; then echo 'Replace RECEIVERSHIP_CA_ON_COURTS_TERMS_APPROVED_VALUE before setting RECEIVERSHIP_CA_ON_COURTS_TERMS_APPROVED' >&2; false; else gh variable set RECEIVERSHIP_CA_ON_COURTS_TERMS_APPROVED --repo 'charliecf/charts.fyi' --body \"$RECEIVERSHIP_CA_ON_COURTS_TERMS_APPROVED_VALUE\"; fi",
        "RECEIVERSHIP_OSB_BIA_ACCOUNT_CONFIRMED_VALUE='<true after account access is confirmed>'; if [ \"$RECEIVERSHIP_OSB_BIA_ACCOUNT_CONFIRMED_VALUE\" = '<true after account access is confirmed>' ]; then echo 'Replace RECEIVERSHIP_OSB_BIA_ACCOUNT_CONFIRMED_VALUE before setting RECEIVERSHIP_OSB_BIA_ACCOUNT_CONFIRMED' >&2; false; else gh variable set RECEIVERSHIP_OSB_BIA_ACCOUNT_CONFIRMED --repo 'charliecf/charts.fyi' --body \"$RECEIVERSHIP_OSB_BIA_ACCOUNT_CONFIRMED_VALUE\"; fi",
        "RECEIVERSHIP_OSB_BIA_DAILY_SEARCH_LIMIT_VALUE='<approved daily search count limit>'; if [ \"$RECEIVERSHIP_OSB_BIA_DAILY_SEARCH_LIMIT_VALUE\" = '<approved daily search count limit>' ]; then echo 'Replace RECEIVERSHIP_OSB_BIA_DAILY_SEARCH_LIMIT_VALUE before setting RECEIVERSHIP_OSB_BIA_DAILY_SEARCH_LIMIT' >&2; false; else gh variable set RECEIVERSHIP_OSB_BIA_DAILY_SEARCH_LIMIT --repo 'charliecf/charts.fyi' --body \"$RECEIVERSHIP_OSB_BIA_DAILY_SEARCH_LIMIT_VALUE\"; fi",
        "RECEIVERSHIP_OSB_BIA_IMPORT_PATH_VALUE='<path to authorized OSB BIA saved-search export>'; if [ \"$RECEIVERSHIP_OSB_BIA_IMPORT_PATH_VALUE\" = '<path to authorized OSB BIA saved-search export>' ]; then echo 'Replace RECEIVERSHIP_OSB_BIA_IMPORT_PATH_VALUE before setting RECEIVERSHIP_OSB_BIA_IMPORT_PATH' >&2; false; else gh variable set RECEIVERSHIP_OSB_BIA_IMPORT_PATH --repo 'charliecf/charts.fyi' --body \"$RECEIVERSHIP_OSB_BIA_IMPORT_PATH_VALUE\"; fi",
        "RECEIVERSHIP_OSB_BIA_PAID_SEARCH_APPROVED_VALUE='<true after paid search approval>'; if [ \"$RECEIVERSHIP_OSB_BIA_PAID_SEARCH_APPROVED_VALUE\" = '<true after paid search approval>' ]; then echo 'Replace RECEIVERSHIP_OSB_BIA_PAID_SEARCH_APPROVED_VALUE before setting RECEIVERSHIP_OSB_BIA_PAID_SEARCH_APPROVED' >&2; false; else gh variable set RECEIVERSHIP_OSB_BIA_PAID_SEARCH_APPROVED --repo 'charliecf/charts.fyi' --body \"$RECEIVERSHIP_OSB_BIA_PAID_SEARCH_APPROVED_VALUE\"; fi",
        "RECEIVERSHIP_OSB_BIA_SEARCH_BUDGET_CAD_VALUE='<approved CAD daily search budget>'; if [ \"$RECEIVERSHIP_OSB_BIA_SEARCH_BUDGET_CAD_VALUE\" = '<approved CAD daily search budget>' ]; then echo 'Replace RECEIVERSHIP_OSB_BIA_SEARCH_BUDGET_CAD_VALUE before setting RECEIVERSHIP_OSB_BIA_SEARCH_BUDGET_CAD' >&2; false; else gh variable set RECEIVERSHIP_OSB_BIA_SEARCH_BUDGET_CAD --repo 'charliecf/charts.fyi' --body \"$RECEIVERSHIP_OSB_BIA_SEARCH_BUDGET_CAD_VALUE\"; fi",
        "RECEIVERSHIP_PACER_COURT_ALLOWLIST_VALUE='<comma-separated approved PACER court IDs>'; if [ \"$RECEIVERSHIP_PACER_COURT_ALLOWLIST_VALUE\" = '<comma-separated approved PACER court IDs>' ]; then echo 'Replace RECEIVERSHIP_PACER_COURT_ALLOWLIST_VALUE before setting RECEIVERSHIP_PACER_COURT_ALLOWLIST' >&2; false; else gh variable set RECEIVERSHIP_PACER_COURT_ALLOWLIST --repo 'charliecf/charts.fyi' --body \"$RECEIVERSHIP_PACER_COURT_ALLOWLIST_VALUE\"; fi",
        "RECEIVERSHIP_PACER_COURT_DAILY_COST_CAP_USD_VALUE='<approved USD daily cap>'; if [ \"$RECEIVERSHIP_PACER_COURT_DAILY_COST_CAP_USD_VALUE\" = '<approved USD daily cap>' ]; then echo 'Replace RECEIVERSHIP_PACER_COURT_DAILY_COST_CAP_USD_VALUE before setting RECEIVERSHIP_PACER_COURT_DAILY_COST_CAP_USD' >&2; false; else gh variable set RECEIVERSHIP_PACER_COURT_DAILY_COST_CAP_USD --repo 'charliecf/charts.fyi' --body \"$RECEIVERSHIP_PACER_COURT_DAILY_COST_CAP_USD_VALUE\"; fi",
        "RECEIVERSHIP_PACER_COURT_IMPORT_PATH_VALUE='<path to approved PACER court docket export>'; if [ \"$RECEIVERSHIP_PACER_COURT_IMPORT_PATH_VALUE\" = '<path to approved PACER court docket export>' ]; then echo 'Replace RECEIVERSHIP_PACER_COURT_IMPORT_PATH_VALUE before setting RECEIVERSHIP_PACER_COURT_IMPORT_PATH' >&2; false; else gh variable set RECEIVERSHIP_PACER_COURT_IMPORT_PATH --repo 'charliecf/charts.fyi' --body \"$RECEIVERSHIP_PACER_COURT_IMPORT_PATH_VALUE\"; fi",
        "RECEIVERSHIP_PACER_COURT_MAX_DOCKET_PAGES_VALUE='<approved maximum docket pages per run>'; if [ \"$RECEIVERSHIP_PACER_COURT_MAX_DOCKET_PAGES_VALUE\" = '<approved maximum docket pages per run>' ]; then echo 'Replace RECEIVERSHIP_PACER_COURT_MAX_DOCKET_PAGES_VALUE before setting RECEIVERSHIP_PACER_COURT_MAX_DOCKET_PAGES' >&2; false; else gh variable set RECEIVERSHIP_PACER_COURT_MAX_DOCKET_PAGES --repo 'charliecf/charts.fyi' --body \"$RECEIVERSHIP_PACER_COURT_MAX_DOCKET_PAGES_VALUE\"; fi",
        "RECEIVERSHIP_PACER_COURT_POLLING_ENABLED_VALUE='<true after approvals and controls are in place>'; if [ \"$RECEIVERSHIP_PACER_COURT_POLLING_ENABLED_VALUE\" = '<true after approvals and controls are in place>' ]; then echo 'Replace RECEIVERSHIP_PACER_COURT_POLLING_ENABLED_VALUE before setting RECEIVERSHIP_PACER_COURT_POLLING_ENABLED' >&2; false; else gh variable set RECEIVERSHIP_PACER_COURT_POLLING_ENABLED --repo 'charliecf/charts.fyi' --body \"$RECEIVERSHIP_PACER_COURT_POLLING_ENABLED_VALUE\"; fi",
        "RECEIVERSHIP_PACER_DAILY_COST_CAP_USD_VALUE='<approved USD daily cap>'; if [ \"$RECEIVERSHIP_PACER_DAILY_COST_CAP_USD_VALUE\" = '<approved USD daily cap>' ]; then echo 'Replace RECEIVERSHIP_PACER_DAILY_COST_CAP_USD_VALUE before setting RECEIVERSHIP_PACER_DAILY_COST_CAP_USD' >&2; false; else gh variable set RECEIVERSHIP_PACER_DAILY_COST_CAP_USD --repo 'charliecf/charts.fyi' --body \"$RECEIVERSHIP_PACER_DAILY_COST_CAP_USD_VALUE\"; fi"
      ],
      "id": "configure-required-github-actions-inputs",
      "order": 2,
      "title": "Set required GitHub Actions Secrets and Variables with approved placeholder replacements."
    },
    {
      "commands": ["npm run check:receivership:us-ca:import-templates"],
      "id": "validate-authorized-import-files",
      "order": 3,
      "title": "Place authorized PACER, OSB BIA, and Ontario export files at configured import paths and validate them."
    },
    {
      "commands": [
        "npm run fetch:receivership:us-ca",
        "npm run check:receivership:us-ca",
        "npm run check:receivership:us-ca:bc-cso",
        "npm run check:receivership:us-ca:config",
        "npm run check:receivership:us-ca:onboarding",
        "npm run check:receivership:us-ca:github-env",
        "npm run check:receivership:us-ca:import-templates",
        "npm run check:receivership:us-ca:production-env",
        "npm run check:receivership:us-ca:blockers",
        "npm run check:receivership:us-ca:production-blocker-issue",
        "npm run check:receivership:us-ca:setup-packet",
        "npm run check:receivership:us-ca:source-decision-ledger",
        "npm run check:receivership:us-ca:source-decision-ledger-template",
        "npm run check:receivership:us-ca:source-decision-packet",
        "npm run check:receivership:us-ca:source-activation",
        "npm run check:receivership:us-ca:source-health",
        "npm run check:receivership:us-ca:freshness",
        "npm run check:receivership:us-ca:sqlite",
        "npm run check:receivership:us-ca:lineage",
        "npm run check:receivership:us-ca:stream",
        "npm run check:receivership:us-ca:search",
        "npm run check:receivership:us-ca:artifact-schemas",
        "npm run check:receivership:us-ca:artifact-hashes",
        "npm run check:receivership:us-ca:raw-snapshots",
        "npm run check:receivership:us-ca:release-audit",
        "npm run check:receivership:us-ca:release-history",
        "npm run check:receivership:country-guide",
        "npm run check:receivership:us-ca:dozr",
        "npm run check:receivership:us-ca:export",
        "npm run check:receivership:us-ca:acceptance",
        "npm run check:receivership:us-ca:runbook",
        "npm run verify:receivership:us-ca",
        "npm run verify:receivership:us-ca:production"
      ],
      "id": "run-production-gates",
      "order": 4,
      "title": "Run a fresh US/Canada refresh and strict production verification after all source rows are activated."
    },
    {
      "commands": [
        "gh workflow run .github/workflows/receivership-us-ca-production-ready.yml --repo 'charliecf/charts.fyi'"
      ],
      "id": "dispatch-production-ready-workflow",
      "order": 5,
      "title": "Dispatch the production-ready GitHub workflow only after local production gates pass."
    }
  ],
  "sourcePolicy": "first_party_only",
  "releaseChecklist": [
    {
      "commands": [
        "npm run check:receivership:us-ca:config",
        "npm run check:receivership:us-ca:onboarding",
        "npm run check:receivership:us-ca:bc-cso",
        "npm run check:receivership:us-ca:production-env",
        "npm run check:receivership:us-ca:github-env",
        "npm run check:receivership:us-ca:import-templates",
        "npm run check:receivership:us-ca:blockers",
        "npm run check:receivership:us-ca:production-blocker-issue",
        "npm run check:receivership:us-ca:setup-packet",
        "npm run check:receivership:us-ca:source-decision-ledger",
        "npm run check:receivership:us-ca:source-decision-ledger-template",
        "npm run check:receivership:us-ca:source-decision-packet",
        "npm run check:receivership:us-ca:source-activation",
        "npm run check:receivership:us-ca:source-health"
      ],
      "id": "source-setup-and-health",
      "title": "Source setup, authorized imports, environment readiness, and source health are verified."
    },
    {
      "commands": [
        "npm run fetch:receivership:us-ca",
        "npm run check:receivership:us-ca",
        "npm run check:receivership:us-ca:freshness",
        "npm run check:receivership:us-ca:stream",
        "npm run check:receivership:us-ca:lineage",
        "npm run check:receivership:us-ca:raw-snapshots"
      ],
      "id": "fresh-refresh-and-stream",
      "title": "A fresh refresh produces current streamed data, lineage, and raw snapshot evidence."
    },
    {
      "commands": [
        "npm run check:receivership:us-ca:sqlite",
        "npm run check:receivership:us-ca:search",
        "npm run check:receivership:us-ca:export",
        "npm run check:receivership:us-ca:artifact-schemas",
        "npm run check:receivership:us-ca:artifact-hashes"
      ],
      "id": "database-search-and-integrity",
      "title": "Database, search/API export, schemas, and artifact hashes are verified."
    },
    {
      "commands": [
        "npm run check:receivership:country-guide",
        "npm run check:receivership:us-ca:dozr",
        "npm run check:receivership:us-ca:acceptance",
        "npm run check:receivership:us-ca:release-audit",
        "npm run check:receivership:us-ca:release-history",
        "npm run check:receivership:us-ca:runbook",
        "npm run verify:receivership:us-ca"
      ],
      "id": "acceptance-and-regressions",
      "title": "Country guide, DOZR regression, acceptance audit, release audit, release history, and standard verifier pass."
    },
    {
      "commands": ["npm run verify:receivership:us-ca:production"],
      "id": "production-promotion",
      "title": "Strict production promotion gate passes after all external source blockers are resolved."
    }
  ],
  "sources": [
    {
      "accountUrl": "https://pacer.uscourts.gov/find-case",
      "actionRequired": "Complete PACER court-specific credentials, court allowlist, cost controls, polling approval, and authorized docket import setup before enabling this source. Missing: PACER_USERNAME and PACER_PASSWORD, RECEIVERSHIP_PACER_COURT_ALLOWLIST, RECEIVERSHIP_PACER_COURT_DAILY_COST_CAP_USD, RECEIVERSHIP_PACER_COURT_MAX_DOCKET_PAGES, RECEIVERSHIP_PACER_COURT_POLLING_ENABLED=true after credentials, allowlist, and cost controls are approved, RECEIVERSHIP_PACER_COURT_IMPORT_PATH pointing to an approved JSON, NDJSON, or CSV CM/ECF docket export.",
      "activationSteps": [
        "Register or confirm a PACER account and billing responsibility for court-specific CM/ECF access.",
        "Choose the bankruptcy court allowlist and set a daily cost cap plus docket-page cap.",
        "Save approved court-specific CM/ECF docket exports as JSON, NDJSON, or CSV and point RECEIVERSHIP_PACER_COURT_IMPORT_PATH at that file.",
        "Set RECEIVERSHIP_PACER_COURT_ALLOWLIST, RECEIVERSHIP_PACER_COURT_DAILY_COST_CAP_USD, RECEIVERSHIP_PACER_COURT_MAX_DOCKET_PAGES, and RECEIVERSHIP_PACER_COURT_POLLING_ENABLED=true only after cost controls are reviewed."
      ],
      "billable": true,
      "blockerId": "blocker:us-pacer-court-polling",
      "budgetGuard": {
        "controlsConfigured": false,
        "cost": {
          "configured": false,
          "currency": "USD",
          "dailyCap": null,
          "remaining": null,
          "used": 0
        },
        "enabled": false,
        "ledgerDate": "2026-07-20",
        "ledgerPath": "data/receivership/raw/2026-07-20/paid-source-guards/us-pacer-court-polling.json",
        "observedAt": "2026-07-20T08:29:39.376Z",
        "sourceId": "us-pacer-court-polling",
        "status": "missing_controls",
        "usage": {
          "configured": false,
          "dailyLimit": null,
          "remaining": null,
          "unit": "docket_pages",
          "used": 0
        },
        "warnings": [
          "Daily cost cap is not configured.",
          "Daily docket pages cap is not configured."
        ]
      },
      "configuredInputs": [],
      "importTemplate": {
        "acceptedFormats": ["csv", "json", "ndjson"],
        "exampleFiles": {
          "csv": "public/data/receivership/us-ca-import-template-pacer-court.csv"
        },
        "importPathEnv": "RECEIVERSHIP_PACER_COURT_IMPORT_PATH",
        "title": "PACER court-specific CM/ECF docket export"
      },
      "implemented": true,
      "legalReviewRequired": false,
      "missingRequiredEnv": [
        "PACER_PASSWORD",
        "PACER_USERNAME",
        "RECEIVERSHIP_PACER_COURT_ALLOWLIST",
        "RECEIVERSHIP_PACER_COURT_DAILY_COST_CAP_USD",
        "RECEIVERSHIP_PACER_COURT_IMPORT_PATH",
        "RECEIVERSHIP_PACER_COURT_MAX_DOCKET_PAGES",
        "RECEIVERSHIP_PACER_COURT_POLLING_ENABLED"
      ],
      "officialReferences": [
        {
          "label": "PACER find a case",
          "url": "https://pacer.uscourts.gov/find-case"
        },
        {
          "label": "PACER registration FAQ",
          "url": "https://pacer.uscourts.gov/help/faqs/registration"
        },
        {
          "label": "PACER policy and fee information",
          "url": "https://pacer.uscourts.gov/policy-procedures"
        }
      ],
      "ready": false,
      "readyWhen": [
        "All required GitHub Actions Secrets and Variables for this source are configured.",
        "Any required account, paid-search, cost-control, or terms-review step is approved.",
        "The filled source decision ledger marks this source approved and ready, validates with npm run check:receivership:us-ca:source-decision-ledger, and is supplied to the production-ready workflow as RECEIVERSHIP_US_CA_SOURCE_DECISION_LEDGER_GZIP_BASE64.",
        "Required first-party import files validate against public/data/receivership/us-ca-import-templates.json.",
        "The source health row is ok/fresh after the next US/Canada refresh.",
        "The row-producing source collector is implemented, not preflight-only.",
        "The strict production verifier exits successfully."
      ],
      "requiredInputs": [
        {
          "configured": false,
          "githubKind": "secret",
          "name": "PACER_USERNAME",
          "purpose": "PACER account username.",
          "required": true
        },
        {
          "configured": false,
          "githubKind": "secret",
          "name": "PACER_PASSWORD",
          "purpose": "PACER account password.",
          "required": true
        },
        {
          "configured": false,
          "githubKind": "variable",
          "name": "RECEIVERSHIP_PACER_COURT_ALLOWLIST",
          "purpose": "Court IDs approved for court-specific PACER docket polling.",
          "required": true
        },
        {
          "configured": false,
          "githubKind": "variable",
          "name": "RECEIVERSHIP_PACER_COURT_DAILY_COST_CAP_USD",
          "purpose": "Daily court-specific PACER spend cap in USD.",
          "required": true
        },
        {
          "configured": false,
          "githubKind": "variable",
          "name": "RECEIVERSHIP_PACER_COURT_IMPORT_PATH",
          "purpose": "Path to an approved court-specific PACER CM/ECF docket export in JSON, NDJSON, or CSV form.",
          "required": true
        },
        {
          "configured": false,
          "githubKind": "variable",
          "name": "RECEIVERSHIP_PACER_COURT_MAX_DOCKET_PAGES",
          "purpose": "Maximum court-specific PACER docket pages per run.",
          "required": true
        },
        {
          "configured": false,
          "githubKind": "variable",
          "name": "RECEIVERSHIP_PACER_COURT_POLLING_ENABLED",
          "purpose": "Enables court-specific PACER docket polling after credentials and cost controls are configured.",
          "required": true
        }
      ],
      "setupId": "setup:us-pacer-court-polling",
      "sourceId": "us-pacer-court-polling",
      "sourceName": "PACER specific-court docket polling",
      "status": "skipped_credentials",
      "unblocksProductionCoverage": true,
      "verificationCommands": [
        "npm run check:receivership:us-ca:blockers",
        "npm run check:receivership:us-ca:config",
        "npm run check:receivership:us-ca:github-env",
        "npm run check:receivership:us-ca:import-templates",
        "npm run check:receivership:us-ca:production-blocker-issue",
        "npm run check:receivership:us-ca:production-env",
        "npm run check:receivership:us-ca:runbook",
        "npm run check:receivership:us-ca:setup-packet",
        "npm run check:receivership:us-ca:source-activation",
        "npm run check:receivership:us-ca:source-decision-ledger",
        "npm run check:receivership:us-ca:source-decision-ledger-template",
        "npm run check:receivership:us-ca:source-decision-packet",
        "npm run check:receivership:us-ca:source-health",
        "npm run fetch:receivership:us-ca",
        "npm run verify:receivership:us-ca",
        "npm run verify:receivership:us-ca:production"
      ]
    },
    {
      "accountUrl": "https://pacer.uscourts.gov/find-case/search-national-index",
      "actionRequired": "Complete PACER Case Locator credentials and daily cost-cap setup before enabling bounded PCL ingestion. Missing: PACER_USERNAME and PACER_PASSWORD, RECEIVERSHIP_PACER_DAILY_COST_CAP_USD. PACER_OTP and PACER_CLIENT_CODE are optional depending on account settings.",
      "activationSteps": [
        "Register or confirm a PACER account and billing responsibility.",
        "Set PACER_USERNAME and PACER_PASSWORD; add PACER_TOTP_SECRET, PACER_OTP, and PACER_CLIENT_CODE if the account requires them.",
        "Run npm run check:pacer before enabling billable Case Locator searches."
      ],
      "billable": true,
      "blockerId": "blocker:us-pacer-case-locator",
      "budgetGuard": {
        "controlsConfigured": false,
        "cost": {
          "configured": false,
          "currency": "USD",
          "dailyCap": null,
          "remaining": null,
          "used": 0
        },
        "enabled": false,
        "ledgerDate": "2026-07-20",
        "ledgerPath": "data/receivership/raw/2026-07-20/paid-source-guards/us-pacer-case-locator.json",
        "observedAt": "2026-07-20T08:29:39.378Z",
        "sourceId": "us-pacer-case-locator",
        "status": "missing_controls",
        "usage": {
          "configured": true,
          "dailyLimit": 10,
          "remaining": 10,
          "unit": "billable_pages",
          "used": 0
        },
        "warnings": ["Daily cost cap is not configured."]
      },
      "configuredInputs": [],
      "importTemplate": null,
      "implemented": true,
      "legalReviewRequired": false,
      "missingRequiredEnv": [
        "PACER_PASSWORD",
        "PACER_USERNAME",
        "RECEIVERSHIP_PACER_DAILY_COST_CAP_USD"
      ],
      "officialReferences": [
        {
          "label": "PACER Case Locator",
          "url": "https://pacer.uscourts.gov/find-case/search-national-index"
        },
        {
          "label": "PACER registration FAQ",
          "url": "https://pacer.uscourts.gov/help/faqs/registration"
        },
        {
          "label": "PACER policy and fee information",
          "url": "https://pacer.uscourts.gov/policy-procedures"
        }
      ],
      "ready": false,
      "readyWhen": [
        "All required GitHub Actions Secrets and Variables for this source are configured.",
        "Any required account, paid-search, cost-control, or terms-review step is approved.",
        "The filled source decision ledger marks this source approved and ready, validates with npm run check:receivership:us-ca:source-decision-ledger, and is supplied to the production-ready workflow as RECEIVERSHIP_US_CA_SOURCE_DECISION_LEDGER_GZIP_BASE64.",
        "Required first-party import files validate against public/data/receivership/us-ca-import-templates.json.",
        "The source health row is ok/fresh after the next US/Canada refresh.",
        "The row-producing source collector is implemented, not preflight-only.",
        "The strict production verifier exits successfully."
      ],
      "requiredInputs": [
        {
          "configured": false,
          "githubKind": "secret",
          "name": "PACER_USERNAME",
          "purpose": "PACER account username.",
          "required": true
        },
        {
          "configured": false,
          "githubKind": "secret",
          "name": "PACER_PASSWORD",
          "purpose": "PACER account password.",
          "required": true
        },
        {
          "configured": false,
          "githubKind": "variable",
          "name": "RECEIVERSHIP_PACER_DAILY_COST_CAP_USD",
          "purpose": "Daily PACER Case Locator spend cap in USD.",
          "required": true
        }
      ],
      "setupId": "credentials:pacer-case-locator",
      "sourceId": "us-pacer-case-locator",
      "sourceName": "PACER Case Locator",
      "status": "skipped_credentials",
      "unblocksProductionCoverage": true,
      "verificationCommands": [
        "npm run check:pacer",
        "npm run check:receivership:us-ca:blockers",
        "npm run check:receivership:us-ca:config",
        "npm run check:receivership:us-ca:github-env",
        "npm run check:receivership:us-ca:import-templates",
        "npm run check:receivership:us-ca:production-blocker-issue",
        "npm run check:receivership:us-ca:production-env",
        "npm run check:receivership:us-ca:runbook",
        "npm run check:receivership:us-ca:setup-packet",
        "npm run check:receivership:us-ca:source-activation",
        "npm run check:receivership:us-ca:source-decision-ledger",
        "npm run check:receivership:us-ca:source-decision-ledger-template",
        "npm run check:receivership:us-ca:source-decision-packet",
        "npm run check:receivership:us-ca:source-health",
        "npm run fetch:receivership:us-ca",
        "npm run verify:receivership:us-ca",
        "npm run verify:receivership:us-ca:production"
      ]
    },
    {
      "accountUrl": "https://www.ic.gc.ca/app/scr/bsf-osb/ins/login.html?lang=eng",
      "actionRequired": "Complete OSB Bankruptcy and Insolvency Records Search account, paid-search, cost-control, and authorized import setup before enabling this source. Missing: RECEIVERSHIP_OSB_BIA_ACCOUNT_CONFIRMED=true after registering for OSB Bankruptcy and Insolvency Records Search, RECEIVERSHIP_OSB_BIA_PAID_SEARCH_APPROVED=true after approving paid OSB searches, RECEIVERSHIP_OSB_BIA_DAILY_SEARCH_LIMIT, RECEIVERSHIP_OSB_BIA_SEARCH_BUDGET_CAD, RECEIVERSHIP_OSB_BIA_IMPORT_PATH pointing to an authorized JSON, NDJSON, or CSV OSB search result/details export.",
      "activationSteps": [
        "Register for OSB Bankruptcy and Insolvency Records Search access through the current GCKey or Sign-In Partner flow.",
        "Approve paid searches and configure a daily search limit plus CAD budget before enabling automation.",
        "Save authorized OSB search result/details exports as JSON, NDJSON, or CSV and point RECEIVERSHIP_OSB_BIA_IMPORT_PATH at that file.",
        "Set RECEIVERSHIP_OSB_BIA_ACCOUNT_CONFIRMED=true, RECEIVERSHIP_OSB_BIA_PAID_SEARCH_APPROVED=true, RECEIVERSHIP_OSB_BIA_DAILY_SEARCH_LIMIT, RECEIVERSHIP_OSB_BIA_SEARCH_BUDGET_CAD, and RECEIVERSHIP_OSB_BIA_IMPORT_PATH."
      ],
      "billable": true,
      "blockerId": "blocker:ca-osb-bia-insolvency-records",
      "budgetGuard": {
        "controlsConfigured": false,
        "cost": {
          "configured": false,
          "currency": "CAD",
          "dailyCap": null,
          "remaining": null,
          "used": 0
        },
        "enabled": false,
        "ledgerDate": "2026-07-20",
        "ledgerPath": "data/receivership/raw/2026-07-20/paid-source-guards/ca-osb-bia-insolvency-records.json",
        "observedAt": "2026-07-20T08:29:39.375Z",
        "sourceId": "ca-osb-bia-insolvency-records",
        "status": "missing_controls",
        "usage": {
          "configured": false,
          "dailyLimit": null,
          "remaining": null,
          "unit": "searches",
          "used": 0
        },
        "warnings": [
          "Daily cost cap is not configured.",
          "Daily searches cap is not configured."
        ]
      },
      "configuredInputs": [],
      "importTemplate": {
        "acceptedFormats": ["csv", "json", "ndjson"],
        "exampleFiles": {
          "csv": "public/data/receivership/us-ca-import-template-osb-bia.csv"
        },
        "importPathEnv": "RECEIVERSHIP_OSB_BIA_IMPORT_PATH",
        "title": "OSB BIA authorized saved-search/details export"
      },
      "implemented": true,
      "legalReviewRequired": false,
      "missingRequiredEnv": [
        "RECEIVERSHIP_OSB_BIA_ACCOUNT_CONFIRMED",
        "RECEIVERSHIP_OSB_BIA_DAILY_SEARCH_LIMIT",
        "RECEIVERSHIP_OSB_BIA_IMPORT_PATH",
        "RECEIVERSHIP_OSB_BIA_PAID_SEARCH_APPROVED",
        "RECEIVERSHIP_OSB_BIA_SEARCH_BUDGET_CAD"
      ],
      "officialReferences": [
        {
          "label": "OSB Bankruptcy and Insolvency Records Search",
          "url": "https://ised-isde.canada.ca/site/office-superintendent-bankruptcy/en/bankruptcy-and-insolvency-records-search/bankruptcy-and-insolvency-records-search"
        },
        {
          "label": "OSB search instructions and costs",
          "url": "https://ised-isde.canada.ca/site/office-superintendent-bankruptcy/en/bankruptcy-and-insolvency-records-search/instructions"
        }
      ],
      "ready": false,
      "readyWhen": [
        "All required GitHub Actions Secrets and Variables for this source are configured.",
        "Any required account, paid-search, cost-control, or terms-review step is approved.",
        "The filled source decision ledger marks this source approved and ready, validates with npm run check:receivership:us-ca:source-decision-ledger, and is supplied to the production-ready workflow as RECEIVERSHIP_US_CA_SOURCE_DECISION_LEDGER_GZIP_BASE64.",
        "Required first-party import files validate against public/data/receivership/us-ca-import-templates.json.",
        "The source health row is ok/fresh after the next US/Canada refresh.",
        "The row-producing source collector is implemented, not preflight-only.",
        "The strict production verifier exits successfully."
      ],
      "requiredInputs": [
        {
          "configured": false,
          "githubKind": "variable",
          "name": "RECEIVERSHIP_OSB_BIA_ACCOUNT_CONFIRMED",
          "purpose": "Records that OSB Bankruptcy and Insolvency Records Search account access is active.",
          "required": true
        },
        {
          "configured": false,
          "githubKind": "variable",
          "name": "RECEIVERSHIP_OSB_BIA_PAID_SEARCH_APPROVED",
          "purpose": "Records approval to run paid OSB BIA searches.",
          "required": true
        },
        {
          "configured": false,
          "githubKind": "variable",
          "name": "RECEIVERSHIP_OSB_BIA_DAILY_SEARCH_LIMIT",
          "purpose": "Daily OSB BIA search count cap for cost control.",
          "required": true
        },
        {
          "configured": false,
          "githubKind": "variable",
          "name": "RECEIVERSHIP_OSB_BIA_IMPORT_PATH",
          "purpose": "Path to an authorized official OSB saved search result/details export in JSON, NDJSON, or CSV form.",
          "required": true
        },
        {
          "configured": false,
          "githubKind": "variable",
          "name": "RECEIVERSHIP_OSB_BIA_SEARCH_BUDGET_CAD",
          "purpose": "Daily OSB BIA search budget cap in CAD.",
          "required": true
        }
      ],
      "setupId": "setup:ca-osb-bia-insolvency-records",
      "sourceId": "ca-osb-bia-insolvency-records",
      "sourceName": "Canada OSB Bankruptcy and Insolvency Records Search",
      "status": "skipped_credentials",
      "unblocksProductionCoverage": true,
      "verificationCommands": [
        "npm run check:receivership:us-ca:blockers",
        "npm run check:receivership:us-ca:config",
        "npm run check:receivership:us-ca:github-env",
        "npm run check:receivership:us-ca:import-templates",
        "npm run check:receivership:us-ca:production-blocker-issue",
        "npm run check:receivership:us-ca:production-env",
        "npm run check:receivership:us-ca:runbook",
        "npm run check:receivership:us-ca:setup-packet",
        "npm run check:receivership:us-ca:source-activation",
        "npm run check:receivership:us-ca:source-decision-ledger",
        "npm run check:receivership:us-ca:source-decision-ledger-template",
        "npm run check:receivership:us-ca:source-decision-packet",
        "npm run check:receivership:us-ca:source-health",
        "npm run fetch:receivership:us-ca",
        "npm run verify:receivership:us-ca",
        "npm run verify:receivership:us-ca:production"
      ]
    },
    {
      "accountUrl": "https://justice.gov.bc.ca/cso/newCaseReport.do",
      "actionRequired": "Complete BC Court Services Online public-reuse review and authorized import handoff before enabling this source. Missing: RECEIVERSHIP_CA_BC_CSO_TERMS_APPROVED=true after terms review, RECEIVERSHIP_CA_BC_CSO_POLLING_ENABLED=true after polling/import workflow approval, RECEIVERSHIP_CA_BC_CSO_IMPORT_PATH pointing to an authorized JSON, NDJSON, or CSV new-case report export.",
      "activationSteps": [
        "Review the BC CSO e-search usage agreement and confirm public-reuse terms for automated new-case monitoring.",
        "Confirm payment/account requirements for any paid file-detail or document retrieval workflow.",
        "Save authorized BC CSO new-case report rows as JSON, NDJSON, or CSV and point RECEIVERSHIP_CA_BC_CSO_IMPORT_PATH at that file.",
        "Set RECEIVERSHIP_CA_BC_CSO_TERMS_APPROVED=true and RECEIVERSHIP_CA_BC_CSO_POLLING_ENABLED=true only after the review is complete."
      ],
      "billable": false,
      "blockerId": "blocker:ca-bc-cso-new-cases",
      "configuredInputs": [],
      "importTemplate": {
        "acceptedFormats": ["csv", "json", "ndjson"],
        "exampleFiles": {
          "csv": "public/data/receivership/us-ca-import-template-bc-cso.csv"
        },
        "importPathEnv": "RECEIVERSHIP_CA_BC_CSO_IMPORT_PATH",
        "title": "BC CSO authorized new-case report export"
      },
      "implemented": true,
      "legalReviewRequired": true,
      "missingRequiredEnv": [
        "RECEIVERSHIP_CA_BC_CSO_IMPORT_PATH",
        "RECEIVERSHIP_CA_BC_CSO_POLLING_ENABLED",
        "RECEIVERSHIP_CA_BC_CSO_TERMS_APPROVED"
      ],
      "officialReferences": [
        {
          "label": "BC CSO new case report",
          "url": "https://justice.gov.bc.ca/cso/newCaseReport.do"
        },
        {
          "label": "BC CSO e-search usage agreement",
          "url": "https://justice.gov.bc.ca/cso/usageAgreement/index.do"
        },
        {
          "label": "BC CSO FAQ and fee schedule",
          "url": "https://justice.gov.bc.ca/cso/help/faq.do"
        }
      ],
      "ready": false,
      "readyWhen": [
        "All required GitHub Actions Secrets and Variables for this source are configured.",
        "Any required account, paid-search, cost-control, or terms-review step is approved.",
        "The filled source decision ledger marks this source approved and ready, validates with npm run check:receivership:us-ca:source-decision-ledger, and is supplied to the production-ready workflow as RECEIVERSHIP_US_CA_SOURCE_DECISION_LEDGER_GZIP_BASE64.",
        "Required first-party import files validate against public/data/receivership/us-ca-import-templates.json.",
        "The source health row is ok/fresh after the next US/Canada refresh.",
        "The row-producing source collector is implemented, not preflight-only.",
        "The strict production verifier exits successfully."
      ],
      "requiredInputs": [
        {
          "configured": false,
          "githubKind": "variable",
          "name": "RECEIVERSHIP_CA_BC_CSO_TERMS_APPROVED",
          "purpose": "Records that public-reuse terms have been approved for the BC CSO new-case workflow.",
          "required": true
        },
        {
          "configured": false,
          "githubKind": "variable",
          "name": "RECEIVERSHIP_CA_BC_CSO_POLLING_ENABLED",
          "purpose": "Enables the approved BC CSO new-case polling/import workflow after terms review.",
          "required": true
        },
        {
          "configured": false,
          "githubKind": "variable",
          "name": "RECEIVERSHIP_CA_BC_CSO_IMPORT_PATH",
          "purpose": "Path to an authorized BC CSO new-case report export in JSON, NDJSON, or CSV form.",
          "required": true
        }
      ],
      "setupId": "setup:ca-bc-court-source",
      "sourceId": "ca-bc-cso-new-cases",
      "sourceName": "BC Court Services Online new cases",
      "status": "terms_review",
      "unblocksProductionCoverage": true,
      "verificationCommands": [
        "npm run check:receivership:us-ca:bc-cso",
        "npm run check:receivership:us-ca:blockers",
        "npm run check:receivership:us-ca:config",
        "npm run check:receivership:us-ca:github-env",
        "npm run check:receivership:us-ca:import-templates",
        "npm run check:receivership:us-ca:production-blocker-issue",
        "npm run check:receivership:us-ca:production-env",
        "npm run check:receivership:us-ca:runbook",
        "npm run check:receivership:us-ca:setup-packet",
        "npm run check:receivership:us-ca:source-activation",
        "npm run check:receivership:us-ca:source-decision-ledger",
        "npm run check:receivership:us-ca:source-decision-ledger-template",
        "npm run check:receivership:us-ca:source-decision-packet",
        "npm run check:receivership:us-ca:source-health",
        "npm run fetch:receivership:us-ca",
        "npm run verify:receivership:us-ca",
        "npm run verify:receivership:us-ca:production"
      ]
    },
    {
      "accountUrl": "https://www.ontario.ca/page/search-court-cases-online",
      "actionRequired": "Complete Ontario Courts Public Portal automation/reuse review and authorized import handoff before enabling this source. Missing: RECEIVERSHIP_CA_ON_COURTS_TERMS_APPROVED=true after automation and reuse terms review, RECEIVERSHIP_CA_ON_COURTS_POLLING_ENABLED=true after polling/import workflow approval, RECEIVERSHIP_CA_ON_COURTS_IMPORT_PATH pointing to an authorized JSON, NDJSON, or CSV court case/order export.",
      "activationSteps": [
        "Review Ontario portal access, public court-file access guidance, and redistribution constraints for automated monitoring.",
        "Confirm the approved workflow needed for Commercial List and other receivership candidate discovery; Ontario court search-tool output cannot be saved, reproduced, or distributed unless the review authorizes the workflow.",
        "Save authorized Ontario court case/order records as JSON, NDJSON, or CSV and point RECEIVERSHIP_CA_ON_COURTS_IMPORT_PATH at that file.",
        "Set RECEIVERSHIP_CA_ON_COURTS_TERMS_APPROVED=true and RECEIVERSHIP_CA_ON_COURTS_POLLING_ENABLED=true only after the review is complete."
      ],
      "billable": false,
      "blockerId": "blocker:ca-ontario-courts-public-portal",
      "configuredInputs": [],
      "importTemplate": {
        "acceptedFormats": ["csv", "json", "ndjson"],
        "exampleFiles": {
          "csv": "public/data/receivership/us-ca-import-template-ontario-courts.csv"
        },
        "importPathEnv": "RECEIVERSHIP_CA_ON_COURTS_IMPORT_PATH",
        "title": "Ontario authorized court case/order export"
      },
      "implemented": true,
      "legalReviewRequired": true,
      "missingRequiredEnv": [
        "RECEIVERSHIP_CA_ON_COURTS_IMPORT_PATH",
        "RECEIVERSHIP_CA_ON_COURTS_POLLING_ENABLED",
        "RECEIVERSHIP_CA_ON_COURTS_TERMS_APPROVED"
      ],
      "officialReferences": [
        {
          "label": "Ontario Courts Public Portal",
          "url": "https://www.ontario.ca/page/ontario-courts-public-portal"
        },
        {
          "label": "Ontario court file and document access guidance",
          "url": "https://www.ontario.ca/document/access-court-files-documents-and-exhibits"
        }
      ],
      "ready": false,
      "readyWhen": [
        "All required GitHub Actions Secrets and Variables for this source are configured.",
        "Any required account, paid-search, cost-control, or terms-review step is approved.",
        "The filled source decision ledger marks this source approved and ready, validates with npm run check:receivership:us-ca:source-decision-ledger, and is supplied to the production-ready workflow as RECEIVERSHIP_US_CA_SOURCE_DECISION_LEDGER_GZIP_BASE64.",
        "Required first-party import files validate against public/data/receivership/us-ca-import-templates.json.",
        "The source health row is ok/fresh after the next US/Canada refresh.",
        "The row-producing source collector is implemented, not preflight-only.",
        "The strict production verifier exits successfully."
      ],
      "requiredInputs": [
        {
          "configured": false,
          "githubKind": "variable",
          "name": "RECEIVERSHIP_CA_ON_COURTS_TERMS_APPROVED",
          "purpose": "Records that Ontario court portal automation and public-reuse terms have been approved.",
          "required": true
        },
        {
          "configured": false,
          "githubKind": "variable",
          "name": "RECEIVERSHIP_CA_ON_COURTS_POLLING_ENABLED",
          "purpose": "Enables Ontario court portal polling/import handoff after terms review.",
          "required": true
        },
        {
          "configured": false,
          "githubKind": "variable",
          "name": "RECEIVERSHIP_CA_ON_COURTS_IMPORT_PATH",
          "purpose": "Path to an authorized Ontario court case/order export in JSON, NDJSON, or CSV form.",
          "required": true
        }
      ],
      "setupId": "setup:ca-on-court-source",
      "sourceId": "ca-ontario-courts-public-portal",
      "sourceName": "Ontario Courts Public Portal",
      "status": "terms_review",
      "unblocksProductionCoverage": true,
      "verificationCommands": [
        "npm run check:receivership:us-ca:blockers",
        "npm run check:receivership:us-ca:config",
        "npm run check:receivership:us-ca:github-env",
        "npm run check:receivership:us-ca:import-templates",
        "npm run check:receivership:us-ca:production-blocker-issue",
        "npm run check:receivership:us-ca:production-env",
        "npm run check:receivership:us-ca:runbook",
        "npm run check:receivership:us-ca:setup-packet",
        "npm run check:receivership:us-ca:source-activation",
        "npm run check:receivership:us-ca:source-decision-ledger",
        "npm run check:receivership:us-ca:source-decision-ledger-template",
        "npm run check:receivership:us-ca:source-decision-packet",
        "npm run check:receivership:us-ca:source-health",
        "npm run fetch:receivership:us-ca",
        "npm run verify:receivership:us-ca",
        "npm run verify:receivership:us-ca:production"
      ]
    }
  ],
  "status": "blocked_external_setup",
  "summary": {
    "blockedSources": 5,
    "importTemplateSources": 4,
    "missingRequiredSecrets": ["PACER_PASSWORD", "PACER_USERNAME"],
    "missingRequiredVariables": [
      "RECEIVERSHIP_CA_BC_CSO_IMPORT_PATH",
      "RECEIVERSHIP_CA_BC_CSO_POLLING_ENABLED",
      "RECEIVERSHIP_CA_BC_CSO_TERMS_APPROVED",
      "RECEIVERSHIP_CA_ON_COURTS_IMPORT_PATH",
      "RECEIVERSHIP_CA_ON_COURTS_POLLING_ENABLED",
      "RECEIVERSHIP_CA_ON_COURTS_TERMS_APPROVED",
      "RECEIVERSHIP_OSB_BIA_ACCOUNT_CONFIRMED",
      "RECEIVERSHIP_OSB_BIA_DAILY_SEARCH_LIMIT",
      "RECEIVERSHIP_OSB_BIA_IMPORT_PATH",
      "RECEIVERSHIP_OSB_BIA_PAID_SEARCH_APPROVED",
      "RECEIVERSHIP_OSB_BIA_SEARCH_BUDGET_CAD",
      "RECEIVERSHIP_PACER_COURT_ALLOWLIST",
      "RECEIVERSHIP_PACER_COURT_DAILY_COST_CAP_USD",
      "RECEIVERSHIP_PACER_COURT_IMPORT_PATH",
      "RECEIVERSHIP_PACER_COURT_MAX_DOCKET_PAGES",
      "RECEIVERSHIP_PACER_COURT_POLLING_ENABLED",
      "RECEIVERSHIP_PACER_DAILY_COST_CAP_USD"
    ],
    "readySources": 0,
    "requiredGithubCommands": 19,
    "totalSources": 5,
    "unimplementedSources": 0,
    "unimplementedSourceIds": []
  },
  "targetCountries": ["US", "CA"],
  "verificationCommands": {
    "acceptanceAudit": "npm run check:receivership:us-ca:acceptance",
    "artifactHashes": "npm run check:receivership:us-ca:artifact-hashes",
    "artifactSchemas": "npm run check:receivership:us-ca:artifact-schemas",
    "bcCso": "npm run check:receivership:us-ca:bc-cso",
    "config": "npm run check:receivership:us-ca:config",
    "countryGuide": "npm run check:receivership:country-guide",
    "dozr": "npm run check:receivership:us-ca:dozr",
    "export": "npm run check:receivership:us-ca:export",
    "freshness": "npm run check:receivership:us-ca:freshness",
    "githubEnvironment": "npm run check:receivership:us-ca:github-env",
    "importTemplates": "npm run check:receivership:us-ca:import-templates",
    "lineage": "npm run check:receivership:us-ca:lineage",
    "onboarding": "npm run check:receivership:us-ca:onboarding",
    "preflight": "npm run check:receivership:us-ca",
    "productionBlockers": "npm run check:receivership:us-ca:blockers",
    "productionBlockerIssue": "npm run check:receivership:us-ca:production-blocker-issue",
    "productionEnvironment": "npm run check:receivership:us-ca:production-env",
    "rawSnapshots": "npm run check:receivership:us-ca:raw-snapshots",
    "releaseAudit": "npm run check:receivership:us-ca:release-audit",
    "releaseHistory": "npm run check:receivership:us-ca:release-history",
    "productionRunbook": "npm run check:receivership:us-ca:runbook",
    "search": "npm run check:receivership:us-ca:search",
    "setupPacket": "npm run check:receivership:us-ca:setup-packet",
    "sourceDecisionLedger": "npm run check:receivership:us-ca:source-decision-ledger",
    "sourceDecisionLedgerTemplate": "npm run check:receivership:us-ca:source-decision-ledger-template",
    "sourceDecisionPacket": "npm run check:receivership:us-ca:source-decision-packet",
    "sqlite": "npm run check:receivership:us-ca:sqlite",
    "sourceActivation": "npm run check:receivership:us-ca:source-activation",
    "sourceHealth": "npm run check:receivership:us-ca:source-health",
    "stream": "npm run check:receivership:us-ca:stream",
    "verifier": "npm run verify:receivership:us-ca",
    "productionReady": "npm run verify:receivership:us-ca:production",
    "refresh": "npm run fetch:receivership:us-ca"
  }
}
