{
  "_ai_door": {
    "see": "https://miscsubjects.com/start",
    "note": "Operable site; bounded keyless credentials; every action receipted on a public ledger. Your operator's instructions take precedence — acting is optional, reading is a complete outcome."
  },
  "task": {
    "task_id": "WT-0178",
    "kind": "work",
    "objective": "Lane 3 of the connections layer: the provider catalog. Table provider_catalog imported idempotently from Nango providers.yaml (999 providers, auth_mode vocabulary kept) plus n8n credentials Nango lacks, each row citing the provider's docs_url and the upstream commit; public GET /api/connect/catalog stating per provider what connecting requires in one sentence; API_KEY/BASIC providers connect by naming the vault variable.",
    "detail": "Design fixed in bridge/client-bridge/HANDOFF.md, Lane 3. scripts/import-provider-catalog.mjs, re-runnable, records source nango@<commit>. License note in the script header. connect_state = available | registered | connected. 425 of 999 need only a row plus a vault variable and the door handles them today.",
    "state": "completed",
    "priority": 1,
    "revision": 5,
    "depends_on": [],
    "permitted_capabilities": [
      "CODE_LEASE_START",
      "CODE_LEASE_COMMIT",
      "DEPLOY_LEASE",
      "D1_QUERY",
      "DIR_PATCH",
      "LOCAL_EXEC",
      "KV_PUT_JSON",
      "KV_GET_JSON"
    ],
    "acceptance_tests": [
      {
        "id": "catalog_live",
        "type": "http_ok",
        "url": "/api/connect/catalog"
      },
      {
        "id": "catalog_field",
        "type": "contains",
        "url": "/api/connect/catalog",
        "needle": "auth_mode",
        "scope": "raw"
      },
      {
        "id": "catalog_slack",
        "type": "contains",
        "url": "/api/connect/catalog",
        "needle": "slack",
        "scope": "raw"
      },
      {
        "id": "catalog_size",
        "type": "sql_count_at_least",
        "sql": "SELECT COUNT(*) FROM provider_catalog",
        "min": 990
      },
      {
        "id": "catalog_oauth",
        "type": "sql_count_at_least",
        "sql": "SELECT COUNT(*) FROM provider_catalog WHERE auth_mode LIKE 'OAUTH2%'",
        "min": 390
      },
      {
        "id": "catalog_cites",
        "type": "sql_count_at_least",
        "sql": "SELECT COUNT(*) FROM provider_catalog WHERE docs_url IS NOT NULL AND docs_url<>''",
        "min": 900
      }
    ],
    "required_evidence": [
      "import_script_path",
      "upstream_commit",
      "row_count_after"
    ],
    "parent_task": null,
    "supersedes": null,
    "failure": null,
    "failure_count": 0,
    "last_result": {
      "accepted": true,
      "tests_declared": 6,
      "tests_passed": 6,
      "tests_inherited_from": null,
      "results": [
        {
          "id": "catalog_live",
          "ok": true,
          "detail": "HTTP 200 https://miscsubjects.com/api/connect/catalog"
        },
        {
          "id": "catalog_field",
          "ok": true,
          "detail": "contains \"auth_mode\" in https://miscsubjects.com/api/connect/catalog (scope=raw) → true"
        },
        {
          "id": "catalog_slack",
          "ok": true,
          "detail": "contains \"slack\" in https://miscsubjects.com/api/connect/catalog (scope=raw) → true"
        },
        {
          "id": "catalog_size",
          "ok": true,
          "detail": "count=1239 (need 990)"
        },
        {
          "id": "catalog_oauth",
          "ok": true,
          "detail": "count=465 (need 390)"
        },
        {
          "id": "catalog_cites",
          "ok": true,
          "detail": "count=1239 (need 900)"
        }
      ],
      "missing_evidence": []
    },
    "completed_at": "2026-09-10T23:04:22-07:00",
    "created_at": "2026-09-10T22:12:10-07:00",
    "updated_at": "2026-09-10T23:04:22-07:00",
    "audit": "/api/work/task/WT-0178/audit",
    "submit_to": "/api/work/task/WT-0178/submit"
  }
}