{
  "_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-0143",
    "kind": "repair",
    "objective": "A ship whose process dies must not leave the deploy lock to a dead pid: a new ship on the same host takes over a lock whose pid is gone",
    "detail": "2026-09-07 19:19 PDT: the growth-spine session hit its usage limit inside ship.mjs post-gates; the KV lock locks:deploy:loop-safe-miscsubjects stayed held by pid 72345 (dead) for its 30-minute TTL and KV_DEL is refused by the auto-mode classifier, so nothing governed could clear it. Failure class: a liveness token with no liveness check. Layer: scripts/ship.mjs acquireDeployLease records host and pid but never tests them. Invariant: a lock is valid only while its holder is alive on its host. Repair: on acquire, if the lock names this host and kill -0 <pid> fails, take it over and ledger a DEPLOY_LEASE takeover row; regression test from the exact lock JSON of 2026-09-07.",
    "state": "open",
    "priority": 2,
    "revision": 1,
    "depends_on": [],
    "permitted_capabilities": [],
    "acceptance_tests": [
      {
        "id": "takeover_receipt_shape",
        "type": "evidence_present",
        "field": "regression_test"
      }
    ],
    "required_evidence": [
      "regression_test",
      "ship_deployment"
    ],
    "parent_task": null,
    "supersedes": null,
    "failure": null,
    "failure_count": 0,
    "last_result": null,
    "completed_at": null,
    "created_at": "2026-09-07T21:44:38-07:00",
    "updated_at": "2026-09-07T21:44:38-07:00",
    "audit": "/api/work/task/WT-0143/audit",
    "submit_to": "/api/work/task/WT-0143/submit"
  }
}