{
  "_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": "WF-0020",
    "kind": "failure",
    "objective": "Repair: engine_challenge_reported_as_no_results",
    "detail": "A failure object attached to WT-0478. Close it by enforcing the missing invariant at the shared layer, repairing every affected object, adding the regression test and the deploy blocker, then submitting runtime evidence.",
    "state": "open",
    "priority": 1,
    "revision": 1,
    "depends_on": [],
    "permitted_capabilities": [
      "dispatch",
      "d1",
      "bridge",
      "sheets",
      "receipts"
    ],
    "acceptance_tests": [
      {
        "type": "evidence_present",
        "id": "commit",
        "field": "commit"
      },
      {
        "type": "evidence_present",
        "id": "live",
        "field": "verification"
      },
      {
        "type": "evidence_present",
        "id": "matrix",
        "field": "test_matrix_results"
      },
      {
        "type": "http_ok",
        "id": "net",
        "url": "https://ops.miscsubjects.com/api/net"
      }
    ],
    "required_evidence": [
      "repair",
      "regression_test",
      "deploy_blocker",
      "repaired_objects",
      "runtime_evidence"
    ],
    "parent_task": "WT-0478",
    "supersedes": null,
    "failure": {
      "failure_class": "engine_challenge_reported_as_no_results",
      "layer": "bridge/bridge-run.py net() search (engines ddg, mojeek) — no rate limiting, no challenge detection, no engine rotation",
      "missing_invariant": "A search tool that runs on one residential line must (1) rate-limit itself below the engines’ thresholds, (2) recognise an engine’s challenge/anomaly page (DuckDuckGo html answers HTTP 202 with an anomaly page after ~70 searches in 25 minutes) and answer engine_blocked with retry_after and the engine name, never no_results, (3) rotate to another engine (mojeek, brave with a key, exa opt-in, or a self-hosted SearXNG on the Mac) and record which engine answered in the receipt.",
      "evidence": "2026-09-23 05:5x: the same query returned 5 results from ddg; 06:00-06:20 after 24-cell bursts every search through every surface answered ERR:http:502 / no_results; 06:22 direct check from the Mac: html.duckduckgo.com → HTTP 202, page contains anomaly ×67; mojeek empty; exa opt-in still answers. Google sheet 1cUE88DdjzeLMmBKnlF0lI0KOEWxVFLYuSMp1M2AhtoY tab UNIVERSAL DISPATCH, rows STARLINK · after the burst … and STARLINK · what DuckDuckGo answers this line right now.",
      "fix": "in bridge-run.py net(): detect challenge pages (status 202/403, anomaly/captcha markers) → error engine_blocked {engine, retry_after_s}; per-engine token bucket (e.g. 10/min ddg); engine rotation order ddg → mojeek → brave (BRAVE_API_KEY in the vault) → exa (opt-in only); optional local SearXNG; surface engines_used and blocked engines in every answer; a fixture test that replays the saved anomaly page"
    },
    "failure_count": 0,
    "last_result": null,
    "completed_at": null,
    "created_at": "2026-09-22T23:19:55-07:00",
    "updated_at": "2026-09-22T23:19:55-07:00",
    "audit": "/api/work/task/WF-0020/audit",
    "submit_to": "/api/work/task/WF-0020/submit"
  }
}