{
  "schema_version": 1,
  "captured_at": "2026-07-28T17:35:54.786Z",
  "severity": "P0",
  "classification": "BUG",
  "category": "publication_engine_302_blind",
  "customer_impact": "The AcmeTest tech lead can reach the mastery_gate report now, but cannot trust the shared publication surface because publishing mastery_gate overwrote the adaptive_diagnostic canonical identity.",
  "production_impact": "The shared primary alias serves attempt-8 mastery bytes, the dedicated and master mastery origins serve stale attempt-7 mastery bytes, and the adaptive_diagnostic canonical address actively serves attempt-8 mastery content; publication cannot preserve both fan values.",
  "blast_radius": "The failing helper belongs to the shared publication engine. Other publication-dependent cells can repeat the same failure, and downstream consumers of the mastery_gate canonical URL are tainted until identity verification passes.",
  "observations": {
    "dedicated_fan_deployed": true,
    "dedicated_fan_url": "https://alphatest-blueprint-qc-mastery-gate.vercel.app",
    "dedicated_fan_status": 200,
    "dedicated_fan_title": "Blueprint mastery_gate API · Surface QC",
    "dedicated_fan_bundle": "attempt-7",
    "canonical_status": 200,
    "canonical_title": "Blueprint mastery_gate API · Surface QC",
    "primary_alias_status": 200,
    "primary_alias_title": "Blueprint mastery_gate API · Surface QC",
    "primary_alias_bundle": "attempt-8",
    "primary_alias_audit_scope": "blueprint/integrator_api/surface_qc@mastery_gate",
    "mastery_fan_audit_scope": "blueprint/integrator_api/surface_qc@mastery_gate",
    "adaptive_fan_title": "Blueprint mastery_gate API · Surface QC",
    "adaptive_fan_bundle": "attempt-8-mastery-at-adaptive-path",
    "adaptive_fan_audit_scope": "blueprint/integrator_api/surface_qc@mastery_gate",
    "canonical_verifier_exit": 1,
    "canonical_verifier_observed_at": "2026-07-28T17:35:54.786Z",
    "deployment_hash_response": 302,
    "deployment_hash_observed_at": "2026-07-28T12:35:32Z",
    "deployment_hash_response_classification": "Vercel SSO / Deployment Protection"
  },
  "root_cause": {
    "helper": "ensure_vercel_public_if_401",
    "caller": "deploy_to_vercel",
    "behavior": "The helper attempts protection remediation only for HTTP 401. A protected deployment-hash URL returns 302, so the caller rejects the successful deployment as non-200 before summary/state promotion and master rewrite regeneration."
  },
  "repair_options": [
    "Recognize Vercel SSO 302/303 redirects as Deployment Protection, disable protection, and recheck the deployment-hash URL.",
    "Use the public stable project alias for the post-deploy 200 check while retaining the hash deployment URL as provenance."
  ],
  "acceptance": [
    "The post-deploy check returns 200.",
    "summary.json and module state record the dedicated mastery_gate deployment.",
    "The master rewrite is regenerated from that state.",
    "The unmodified credential-free verify-hosting.mjs exits 0, including exact report/matrix/audit byte matches between this mastery_gate bundle and both mastery canonical URLs."
  ],
  "grid_routing": {
    "rollback_target": null,
    "reason": "The publication engine is outside the fixed architecture-to-integration deliverable grid; no artifact-cell rollback can repair this helper.",
    "on_recurrence": "Available watchdog logs contain exactly 21 unique mastery-gate HTTP 302 failures in the bounded 2026-07-28T06:58:31Z–15:44:10Z window; reviewers recorded the 23rd during attempt 6's driver deploy at 2026-07-28T16:19:18Z and the 24th during attempt 7's driver deploy at 2026-07-28T17:03:39Z. Notify, mark the publication-dependent cell escalated, and park that engine path under the watchdog livelock guard instead of scheduling another content rebuild.",
    "scheduler_scope": "Engine-scoped: guard other publication-dependent work from repeating this helper failure until the engine probe is repaired.",
    "downstream_taint": "Do not credit integration or QC that consumes either Blueprint QC fan while verify-hosting.mjs exits nonzero. Parked means isolated pending repair, not acceptable steady state."
  },
  "secrets_retained": false
}
