{
  "schema": "huanxi.upgrade-package.v1",
  "upgrade_kind": "runtime_only",
  "source_release": "0.8.13.32",
  "target_release": "0.8.13.33",
  "source_schema": "0.8.2-runtime-tables.84",
  "target_schema": "0.8.2-runtime-tables.84",
  "forward_sql": "forward.sql",
  "rollback_sql": "rollback.sql",
  "forward_sha256": "cd999ca152070b1b43de9627ebd9342932dcbcd1e1367f91c0bec63b0224654f",
  "rollback_sha256": "cd999ca152070b1b43de9627ebd9342932dcbcd1e1367f91c0bec63b0224654f",
  "rollback_mode": "logical",
  "service_stop_required": true,
  "database_backup_required": true,
  "preserve_tables": [
    "employees",
    "projects",
    "assignments",
    "assignment_results",
    "runtime_conversation_messages",
    "input_commands"
  ],
  "append_only_tables": [],
  "notes": "Runtime-only release hop 0.8.13.32 -> 0.8.13.33, schema unchanged at 0.8.2-runtime-tables.84. Rolls up the PRs landed on main after the v0.8.13.32 version bump (dfa12e76): reclaim pooled connections orphaned by ephemeral one-shot executor threads (huanxi-tool-io / huanxi-model-deadline / huanxi-tool-deadline) via per-thread release + a strong-dict reaper backstop, fixing the checked_out 32/32 pool exhaustion that stranded queued assignments (#988 #993); portal independent projection loading with reliable Run details and scoped message queries (#994); and self-heal continuable runs with a pairable resumable pause decision plus A0 escalation retry to the strongest model on an exhausted provider chain, writer-busy yield settling as non-failure 'stopped', and a same-cause circuit breaker settling a continuable decision (#980 #981 #982 #992); and lazy-load recovery of compaction-folded chat history via chat_history(offset) (#997). Touches runtime .py and dashboard front-end; no DDL. forward/rollback are an advisory lock plus a source-marker guard, identical bytes, rollback_mode=logical (marker never moves). Rollback is runtime-only: swap the retained previous runtime/manifest and restart. Database, configuration references, credentials and workspaces preserved. Touches dashboard front-end, so the bundle must build and ship dashboard/dist and refresh the Portal (not wheel-only)."
}
