{
 "deploys": [
  {
   "at": "2026-11-03T14:24:03Z",
   "commit": "70ee1ef6004343603730b8b468e60571b362044f",
   "checks_passed": 32,
   "checks_total": 32,
   "failed": [],
   "run": "https://github.com/calory89/webs-estaticas/actions/runs/41652393401",
   "result": "pass",
   "wait_s": 265,
   "changes": [
    "70ee1ef60043"
   ]
  },
  {
   "at": "2026-11-03T14:18:20Z",
   "commit": "c8c0ca38330bce71738ed3221b6e7780ea8175d3",
   "checks_passed": 32,
   "checks_total": 32,
   "failed": [],
   "run": "https://github.com/calory89/webs-estaticas/actions/runs/41651374105",
   "result": "pass",
   "wait_s": 163,
   "changes": [
    "c8c0ca38330b"
   ]
  },
  {
   "at": "2026-11-03T14:14:13Z",
   "commit": "4f3f4de28a54c427b4b608f8d2b6c9af371506b0",
   "checks_passed": 32,
   "checks_total": 32,
   "failed": [],
   "run": "https://github.com/calory89/webs-estaticas/actions/runs/41649441712",
   "result": "pass",
   "wait_s": 666,
   "changes": [
    "75a4b5b020a7"
   ]
  },
  {
   "at": "2026-11-03T14:01:48Z",
   "commit": "97e53bb6f34b218ec1dc152a8c12243191fb1b57",
   "checks_passed": 32,
   "checks_total": 32,
   "failed": [],
   "run": "https://github.com/calory89/webs-estaticas/actions/runs/41649109545",
   "result": "pass",
   "wait_s": 144,
   "changes": [
    "36b72eb2ab6d",
    "97e53bb6f34b"
   ]
  },
  {
   "at": "2026-11-03T13:54:23Z",
   "commit": "aa744b330cb9db55d7783fe3ead74ff6d6f0a20e",
   "checks_passed": 32,
   "checks_total": 32,
   "failed": [],
   "run": "https://github.com/calory89/webs-estaticas/actions/runs/41647982942",
   "result": "pass",
   "wait_s": 103,
   "changes": [
    "aa744b330cb9"
   ]
  },
  {
   "at": "2026-11-03T13:51:40Z",
   "commit": "bb6378b6a8621c6d575eba30be6902bdd2b8cf85",
   "checks_passed": 32,
   "checks_total": 32,
   "failed": [],
   "run": "https://github.com/calory89/webs-estaticas/actions/runs/41647693121",
   "result": "pass",
   "wait_s": 103,
   "changes": [
    "bb6378b6a862"
   ]
  },
  {
   "at": "2026-11-03T13:43:27Z",
   "commit": "360ac56f0e7180051ade39a036386fd689bdc4e6",
   "checks_passed": 32,
   "checks_total": 32,
   "failed": [],
   "run": "https://github.com/calory89/webs-estaticas/actions/runs/41645974498",
   "result": "pass",
   "wait_s": 1,
   "changes": [
    "703da60829ad",
    "360ac56f0e71"
   ]
  },
  {
   "at": "2026-11-03T13:42:17Z",
   "commit": "0c52d1ba340db3730471769188c38a572f5b81ea",
   "checks_passed": 32,
   "checks_total": 32,
   "failed": [],
   "run": "https://github.com/calory89/webs-estaticas/actions/runs/41645641046",
   "result": "pass",
   "wait_s": 346,
   "changes": [
    "0c52d1ba340d"
   ]
  },
  {
   "at": "2026-11-03T13:31:48Z",
   "commit": "81ffab7329247111da13c095f2dab1bd707b728d",
   "checks_passed": 32,
   "checks_total": 32,
   "failed": [],
   "run": "https://github.com/calory89/webs-estaticas/actions/runs/41644576548",
   "result": "pass",
   "wait_s": 0,
   "changes": [
    "81ffab732924"
   ]
  },
  {
   "at": "2026-11-03T13:30:35Z",
   "commit": "c93cf76973c81bbe87f429d5e72be737b825085a",
   "checks_passed": 32,
   "checks_total": 32,
   "failed": [],
   "run": "https://github.com/calory89/webs-estaticas/actions/runs/41644188264",
   "result": "pass",
   "wait_s": 224,
   "changes": [
    "ce57f0f1e420",
    "74c7bb55d0b1",
    "16d084f5164d",
    "ff2e3eab6266",
    "83a30dc3add5",
    "c93cf76973c8"
   ]
  },
  {
   "at": "2026-11-03T13:25:28Z",
   "commit": "734ded8a3ce38204e41de45450e32b088a089dd8",
   "checks_passed": 32,
   "checks_total": 32,
   "failed": [],
   "run": "https://github.com/calory89/webs-estaticas/actions/runs/41643713454",
   "result": "pass",
   "wait_s": 21,
   "changes": [
    "eb27b20a61ca",
    "7ea629d1d3d7",
    "734ded8a3ce3"
   ]
  },
  {
   "at": "2026-11-03T13:23:47Z",
   "commit": "fcfeb297f914b9a35f35dd57267858f98f6f738b",
   "checks_passed": 32,
   "checks_total": 32,
   "failed": [],
   "run": "https://github.com/calory89/webs-estaticas/actions/runs/41643265707",
   "result": "pass",
   "wait_s": 183,
   "changes": [
    "3923e0458900",
    "34087139fe23",
    "72d6ce9abd95",
    "62ee62d01d40"
   ]
  },
  {
   "at": "2026-11-03T13:19:32Z",
   "commit": "8571e982ba90aaece0dd1274db2c2ba95912a3cf",
   "checks_passed": 32,
   "checks_total": 32,
   "failed": [],
   "run": "https://github.com/calory89/webs-estaticas/actions/runs/41642665573",
   "result": "pass",
   "wait_s": 163,
   "changes": [
    "523df4010865",
    "1f6893da03a2",
    "5b394720dec8",
    "c33f957b0ba6"
   ]
  },
  {
   "at": "2026-11-03T13:15:41Z",
   "commit": "88192a35ff5eff533e8769c080937fde04e04a92",
   "checks_passed": 32,
   "checks_total": 32,
   "failed": [],
   "run": "https://github.com/calory89/webs-estaticas/actions/runs/41642119615",
   "result": "pass",
   "wait_s": 185,
   "changes": [
    "eddf5f599bc0",
    "40e1d843cfff",
    "f61cec3d82a1",
    "88192a35ff5e"
   ]
  },
  {
   "at": "2026-11-03T13:11:03Z",
   "commit": "3233db0b00f7e08b1ef80b92720ee66f8459a43d",
   "checks_passed": 32,
   "checks_total": 32,
   "failed": [],
   "run": "https://github.com/calory89/webs-estaticas/actions/runs/41641500386",
   "result": "pass",
   "wait_s": 163,
   "changes": [
    "026d8623e18c",
    "5acd15a9ce4c",
    "1e18d6978e83",
    "22317aa1e898",
    "3b6b97c4c37a",
    "2811e4e37d81",
    "3233db0b00f7"
   ]
  },
  {
   "at": "2026-11-03T13:03:24Z",
   "commit": "fdda8e20288ec163dd61e87401aa06f7695467db",
   "checks_passed": 32,
   "checks_total": 32,
   "failed": [],
   "run": "https://github.com/calory89/webs-estaticas/actions/runs/41640400670",
   "result": "pass",
   "wait_s": 41,
   "changes": [
    "cc3d1782c064",
    "9e501fbfae67",
    "45a62595c091",
    "fdda8e20288e"
   ]
  },
  {
   "at": "2026-11-03T13:00:45Z",
   "commit": "0c2bc1f808739aa348e975e8080e871267677d08",
   "checks_passed": 32,
   "checks_total": 32,
   "failed": [],
   "run": "https://github.com/calory89/webs-estaticas/actions/runs/41639826061",
   "result": "pass",
   "wait_s": 243,
   "changes": [
    "0c2bc1f80873"
   ]
  }
 ],
 "drills": [],
 "about": "Post-deploy guard for kolaboro.com. After each push GitHub Actions waits for the commit to be live, runs the public smoke checks (/open/deploy-smoke.mjs) and, if they fail twice, restores the files changed since the last passing commit. Code: /open/deploy-guard.py.",
 "canary": "Cloudflare Pages sends each push to all visitors at once and offers no percentage canary, so none is claimed. A bad push can be visible for a few minutes until the rollback is live.",
 "rollback_mode": "Rollback: a git commit restoring the files changed since the last passing commit; Pages deploys it in about 1 to 2 minutes. An instant Cloudflare API rollback is built in but needs a Pages-scoped token, not configured yet.",
 "latest_checks": {
  "at": "2026-11-03T14:24:03.565Z",
  "commit": "70ee1ef6004343603730b8b468e60571b362044f",
  "checks": [
   {
    "name": "build: live commit",
    "ok": true,
    "detail": "live 70ee1ef60043"
   },
   {
    "name": "page /",
    "ok": true,
    "detail": "200, 71530 bytes"
   },
   {
    "name": "page /check/",
    "ok": true,
    "detail": "200, 55587 bytes"
   },
   {
    "name": "page /database/",
    "ok": true,
    "detail": "200, 31461 bytes"
   },
   {
    "name": "page /pricing/",
    "ok": true,
    "detail": "200, 25228 bytes"
   },
   {
    "name": "page /p/BALI-021",
    "ok": true,
    "detail": "200, 20607 bytes"
   },
   {
    "name": "page /log/",
    "ok": true,
    "detail": "200, 26188 bytes"
   },
   {
    "name": "page /verify/",
    "ok": true,
    "detail": "200, 35823 bytes"
   },
   {
    "name": "page /status/",
    "ok": true,
    "detail": "200, 36102 bytes"
   },
   {
    "name": "page /changelog/",
    "ok": true,
    "detail": "200, 39570 bytes"
   },
   {
    "name": "page /docs/api/",
    "ok": true,
    "detail": "200, 19990 bytes"
   },
   {
    "name": "page /investors/",
    "ok": true,
    "detail": "200, 47261 bytes"
   },
   {
    "name": "page /trust/",
    "ok": true,
    "detail": "200, 23180 bytes"
   },
   {
    "name": "page /investors/dossier/",
    "ok": true,
    "detail": "200, 20572 bytes"
   },
   {
    "name": "api /api/open/stats",
    "ok": true,
    "detail": "891 projects"
   },
   {
    "name": "api /api/open/projects",
    "ok": true,
    "detail": "updated,license,note,total,offset,limit"
   },
   {
    "name": "api /api/kb/health",
    "ok": true,
    "detail": "database up"
   },
   {
    "name": "api /api/open/checkpoint",
    "ok": true,
    "detail": "tree size 2"
   },
   {
    "name": "api /api/x/l/trust",
    "ok": true,
    "detail": "{\"controls\":13,\"pass\":12,\"warn\":1,\"fail\":0,\"stale\":0,\"unknown\":0}"
   },
   {
    "name": "tls: plain http redirects to https",
    "ok": true,
    "detail": "301 to https://kolaboro.com/"
   },
   {
    "name": "tls: HSTS at least 180 days",
    "ok": true,
    "detail": "max-age=15552000"
   },
   {
    "name": "signature on /api/open/stats",
    "ok": true,
    "detail": "key kb-f2e04da5878f8c51"
   },
   {
    "name": "browser 1440px /",
    "ok": true,
    "detail": "200, no JS errors"
   },
   {
    "name": "browser 1440px /check/",
    "ok": true,
    "detail": "200, no JS errors"
   },
   {
    "name": "browser 1440px /p/BALI-021",
    "ok": true,
    "detail": "200, no JS errors"
   },
   {
    "name": "browser 1440px /trust/",
    "ok": true,
    "detail": "200, no JS errors"
   },
   {
    "name": "browser 1440px /investors/dossier/",
    "ok": true,
    "detail": "200, no JS errors"
   },
   {
    "name": "browser 390px /",
    "ok": true,
    "detail": "200, no JS errors"
   },
   {
    "name": "browser 390px /check/",
    "ok": true,
    "detail": "200, no JS errors"
   },
   {
    "name": "browser 390px /p/BALI-021",
    "ok": true,
    "detail": "200, no JS errors"
   },
   {
    "name": "browser 390px /trust/",
    "ok": true,
    "detail": "200, no JS errors"
   },
   {
    "name": "browser 390px /investors/dossier/",
    "ok": true,
    "detail": "200, no JS errors"
   }
  ]
 },
 "last_checked": "70ee1ef6004343603730b8b468e60571b362044f",
 "last_good": "70ee1ef6004343603730b8b468e60571b362044f",
 "updated": "2026-11-03T14:24:03Z"
}
