{
  "schema_version": "1.0",
  "latest_version": "v0.0.99-test-b403",
  "latest_url": "https://releases.bmh.ai/qs/v0.0.99-test-b403/qs-v0.0.99-test-b403.tar.gz",
  "latest_sha256": "d1dfbc6214d632ab64c5f7bcaff7242d76448b0b4c29616123e6822d27be99e1",
  "released_at": "2026-04-27T07:57:27Z",
  "released_by": "releases@bmh.ai",
  "minimum_version_supported": "v0.0.0",
  "requires_schema_migration": false,
  "migration_phase": "none",
  "required_env_vars_added": [],
  "breaking_changes": false,
  "release_notes_url": "https://releases.bmh.ai/qs/v0.0.99-test-b403/release-notes.html",
  "release_notes_summary": "v0.0.99-test-b403 — B4-03 Phase 1 self-test cut\n\nTrivial release for verification of release.sh changes from B4-03\nPhase 1 (commits e56a1ea, 473eacc, 19de2d5, ad65f15):\n\n- docker-compose.yml in TARBALL_PATHS_REQUIRED\n- preflight #10: tarball self-containment audit (output-side mirror\n  of the existing source-side cp gate)\n- per-version manifest at /qs/v0.0.99-test-b403/manifest.json\n  alongside the existing /qs/latest.json\n- dual upload with strict ordering: per-version artifacts land\n  before the channel pointer advances\n- preflight #11: per-version artifact immutability (HEAD-request\n  loop; aborts on any 200 with named-conflicting-URL die message)\n\nNot a real release. Will be cleaned via the manual recovery\nprocedure documented in\ndocs/Scoping/B4-03-implementation-plan.md after self-test 3\nvalidates the negative path.",
  "estimated_downtime_seconds": 45
}
