)]}'
{
  "commit": "b1708513c90d9f481aa3171e3b04a1fc6a994c62",
  "tree": "c50c9f17cd7802a1a10a094021348cec779bad5a",
  "parents": [
    "f0e02868e2e203fbb29ee08eecda734366575079"
  ],
  "author": {
    "name": "a",
    "email": "a@b.c",
    "time": "Fri Jul 03 23:30:27 2026 -0400"
  },
  "committer": {
    "name": "a",
    "email": "a@b.c",
    "time": "Fri Jul 03 23:30:27 2026 -0400"
  },
  "message": "fix: fail the deploy instead of masking reconcile restore errors\n\nAddresses review feedback on the concurrent-deploy reconcile logic. The\nauthoritative restore commands in reconcile_owned_paths previously used\n`|| true`, so if restoring an owned documentation path failed, the action\nwould silently stage and commit a deletion and publish broken/missing docs.\n\n- Owned purge/keep paths always exist in the deploy commit, so their\n  `git checkout`/`git add` restores are now unmasked: a failure fails the\n  job under `set -e` instead of committing a silent deletion. Only the\n  best-effort pre-clean `git rm --ignore-unmatch` stays lenient.\n- The \"latest\" yield path only restores from the remote when the remote\n  actually publishes it (guarded by `git ls-tree`); otherwise the staged\n  removal stands, avoiding an abort on a now-absent pathspec. The\n  `git ls-tree` check is unmasked so an invalid FETCH_HEAD fails closed.\n\nAssisted-by: claude-code:claude-4.8-opus\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "7075198a09317c6e0f6c090c7e4baffde327fc8f",
      "old_mode": 33261,
      "old_path": "deploy-github-pages/entrypoint.sh",
      "new_id": "fe24214d078d1204cd8e0818a1d0c7924855590f",
      "new_mode": 33261,
      "new_path": "deploy-github-pages/entrypoint.sh"
    }
  ]
}
