{"_archive_ends_one_deploy_back":"BY CONSTRUCTION, the archive below cannot contain the deploy that shipped it: a build's hash is not knowable until after it is installed, and the row is appended post-deploy. So _live_module_hash matching the archive's last entry means this canister has NOT been redeployed since that row was written, and a mismatch is the expected state immediately after a deploy — not evidence of tampering. Cross-check against `icp canister info`.","_authority":"NOT AUTHORITATIVE. This canister is describing itself. The certified controller set and current module hash come from the IC: `icp canister status idm75-kaaaa-aaaac-a67ja-cai -e ic`. If it disagrees with this file, believe the IC.","_live_module_hash":"80d8a8ff9f8c046438ebc81a877c2654137f2bf6ebbf53e096aceaddfb7eab93","_live_module_hash_note":"The module hash this canister reports for ITSELF at runtime, read from canister_status and cached. null means the cache is cold — every upgrade clears it and the first signing call repopulates it. null is 'not known right now', never 'no hash' and never 'same as the archive'.","_served_by":"idm75-kaaaa-aaaac-a67ja-cai","archive":{"_maintenance":"Appended to automatically by scripts/deploy-backend.sh after a successful backend deploy (see the 'source' field on each entry). Frontend deploys are not yet wrapped by an equivalent script, so frontend history is not auto-appended; its current hash below was captured by a manual live query. Every module_hash value in this file must be an exact substring of docs/UPGRADE_LOG.md (for backend entries sourced from the log) or independently re-verified against a live 'icp canister status' call (for entries sourced live). Do not invent or infer a hash that is not explicitly recorded somewhere.","_purpose":"Machine-readable archive of every deployed module hash for the DeltaRates canisters, consolidated from docs/UPGRADE_LOG.md. It exists because the IC's canister_info() returns only the last 20 changes for a canister — history older than that is unrecoverable from the chain unless archived off-chain before it rolls off. This file is the zero-infrastructure version of that archive: it costs nothing to run, but (unlike a watcher canister) it only advances when someone appends to it. See docs/CONTROLLERS.md for what a module hash does and does not prove, and docs/TRUST_MODEL.md section 5.3 (\"Overflow canister_info History\") and section 7 (watcher canister) for the failure mode this is a partial mitigation for.","canisters":{"block_oracle":{"_note":"TRACKED FROM 2026-09-10 ONLY, and the reason is the point. Until that day the oracle had NO reproducible build path at all: no build.rs, no row here, and scripts/build-reproducible.sh covered only the backend. So every earlier oracle module embedded an absolute build directory and NOBODY COULD REBUILD IT AND CONFIRM, while this canister sits in the trust chain for date-anchored balance attestations. Earlier hashes are deliberately NOT backfilled: they are not reproducible and listing them here would imply they had been checked. Deploy it with scripts/deploy-oracle.sh, never a bare `icp deploy`.","canister_id":"ylpxr-2qaaa-aaaac-bd42q-cai","current_module_hash":"0x184da88200e36d83db629c1959ed38cc3b2dfc51d5f0b4e74f42693fdaca212d","current_source_revision":"d55bce4","current_verified_at":"2026-09-10","current_verified_via":"scripts/build-reproducible.sh block_oracle in a detached worktree at /tmp/ora_v4, a DIFFERENT path from the deploy, at the deployed revision; SHA256 byte-identical.","history":[{"date":"2026-09-10","module_hash":"0xe70518d51465b56eb15a471ae2584f02fca4a857af2732741d3eca7b113ef462","module_hash_complete":true,"note":"The first reproducible oracle module. Redeployed the same day purely to make the hash reproducible: the code was already live as 0x716abe968607a7ed0c57ff0c176bbd2fb0d1a1baefad8ca5e9ecb81034190f45 from the timer-lifecycle deploy, which was built without path remapping and so cannot be reproduced by anyone. Verified byte-identical from a worktree at a different path. --no-snapshot was used deliberately: a snapshot of this exact state was taken two hours earlier (the timer upgrade changed no state), and the oracle's data is a DERIVED index fully reproducible from data/block_oracle_data.bin, which is the premise of the editor's option (a) decision the same day.","source":"scripts/deploy-oracle.sh","source_revision":"2981ad9","upgrade_log_section":"2026-09-10 — the block oracle becomes reproducible"},{"date":"2026-09-10","module_hash":"0xab3104b52bc1060174515ff470311504fc3189b45d6a50fa6e9104cd3a4c9f93","module_hash_complete":true,"note":"Closes the zero-timestamp class IN the canister rather than only in the data. Four guards: get_block_timestamp refuses a stored 0 for any block but genesis; the resolver refuses when the newest block is a hole; the search walks BACK from a holed match to the nearest real timestamp, never forward; and an exhausted walk is refused rather than returned as genesis. Genesis is exempted by INDEX, never by value, asserted by a source scan. Deployed the same day the corruption was found and repaired: 635 blocks had held timestamp 0, one run of exactly 500 (a single failed upload batch), and the canister had been serving them.","source":"scripts/deploy-oracle.sh","source_revision":"60a3e59","upgrade_log_section":"2026-09-10 — a stored zero is a hole, not a timestamp"},{"date":"2026-09-10","module_hash":"0x184da88200e36d83db629c1959ed38cc3b2dfc51d5f0b4e74f42693fdaca212d","module_hash_complete":true,"note":"Adds the public index_integrity query. A full scan of 25,946,595 entries completes inside ONE query in 1.25s and reports 0 interior zeros and 0 non-monotonic steps. Capped and cursored so a partial scan reports complete=false rather than trapping: interior_zeros of 0 with complete=false is a statement about the scan, not the index. Third oracle deploy of the day; the drift check in verify-deploy.sh caught this hash before it was recorded, which is the check working.","source":"scripts/deploy-oracle.sh","source_revision":"d55bce4","upgrade_log_section":"2026-09-10 — index_integrity: a hole becomes visible before a lookup finds it"}]},"deltarates_backend":{"canister_id":"idm75-kaaaa-aaaac-a67ja-cai","current_module_hash":"0x2f86c9fd40bea5295b46214fd19cc40afff0af805cc3a8c0f491553182e22cc2","current_source_revision":"a06d73e3b908","current_verified_at":"2026-09-15","current_verified_via":"scripts/deploy-backend.sh (icp canister status, post-deploy)","history":[{"date":"2026-06-10","module_hash":null,"module_hash_complete":false,"note":"Deployed to mainnet (both canisters). UPGRADE_LOG.md does not record the resulting module hash for this upgrade. Left null rather than guessed — this exact kind of gap is why this file exists starting now, and why it cannot be back-filled further than the log allows.","source":"docs/UPGRADE_LOG.md","source_revision":null,"upgrade_log_section":"2026-06-10 — Full security & UX remediation"},{"date":"2026-08-03","module_hash":"0xbc75bbf2…6d46cbf","module_hash_complete":false,"note":".did-only change (no Rust logic changed); module hash still rotated because the .did ships as canister metadata. Only a truncated hash is recorded in the log; reproduced verbatim here, not reconstructed.","previous_module_hash":"0xac91f6e4…dae7ca","previous_module_hash_complete":false,"source":"docs/UPGRADE_LOG.md","source_revision":null,"upgrade_log_section":"2026-08-03 — Candid result-variant casing fix (.did only; no Rust change)"},{"date":"2026-08-04","module_hash":"0xc73443aa3f4483f7c87639907d8b8f581ff6c4d2a307db2ba5c0cdd875c18b54","module_hash_complete":true,"previous_module_hash":"0xbc75bbf2…6d46cbf","previous_module_hash_complete":false,"source":"docs/UPGRADE_LOG.md","source_revision":"a95252977ddf","upgrade_log_section":"2026-08-04 — Yield liveness monitoring, trapped-attempt visibility, code_version provenance, DefiLlama cross-check"},{"date":"2026-08-04","module_hash":"0x094e39f12c514ffb20ac9af4570956ffd71b06063af322c8e11dae42b5c0d0ab","module_hash_complete":true,"note":"Second backend deploy on the same calendar date as the entry above; UPGRADE_LOG.md records them as two separate sections and this file preserves that as two separate entries. The truncated previous_module_hash here is consistent with the full module_hash of the prior entry (same prefix/suffix).","previous_module_hash":"0xc73443aa…5c18b54","previous_module_hash_complete":false,"source":"docs/UPGRADE_LOG.md","source_revision":"79347d4d6316","upgrade_log_section":"2026-08-04 (later) — MVP hardening: public-endpoint cycle floor, cycle monitoring, replay.py fix"},{"date":"2026-08-06","module_hash":"0x6738b904efc0eda21741f8982e618ce2fef47940cb10452aafd50c5a644a697a","module_hash_complete":true,"note":"This section of the log covers three sequential deploys (a heap-only throttle fix, a failed timer-migration attempt, and a rollback). Only the final resulting hash is stated in the log, so only that final state is recorded here — the intermediate (failed timer) hash is not recoverable from the log.","source":"docs/UPGRADE_LOG.md","source_revision":null,"upgrade_log_section":"2026-08-06 — Cycle burn root-caused to the heartbeat; first timer attempt rolled back"},{"date":"2026-08-06","module_hash":"0x5d9eda0ab8d6011657c1a4b91a4c9c58d9daed1eb623979ffcf8863a7c603ff2","module_hash_complete":true,"source":"docs/UPGRADE_LOG.md","source_revision":"adfbb0d","upgrade_log_section":"2026-08-06 (later) — Timer migration SUCCEEDED: 1,160 B/day → 8.8 B/day"},{"date":"2026-08-07","module_hash":"0x6c37c8b0fa02f900d98d370d4e2335b7cf401a22ab7040c05b20fa74357f5d2e","module_hash_complete":true,"source":"docs/UPGRADE_LOG.md","source_revision":"9eb7d2431434","upgrade_log_section":"2026-08-07 — Security review remediation: CRITICAL + 3 HIGH, deployed","verified_against_live_status_at":"2026-08-07"},{"date":"2026-08-10","module_hash":"0x7360be9cfed6c83d6027acb89bfe69592da9748db66bb1090f9a92eb3b78da08","module_hash_complete":true,"note":"Auto-appended immediately after a successful mainnet deploy. Add a matching docs/UPGRADE_LOG.md entry by hand for the why — this file only ever captures the what.","source":"scripts/deploy-backend.sh (auto-appended)","source_revision":"3f4b9d29c70f","upgrade_log_section":null},{"date":"2026-08-10","module_hash":"0xce1979bf3cc88acfa4ac7773b98a5b6b0a7e09655b44f1c790ffc580f046f5d4","module_hash_complete":true,"note":"Auto-appended immediately after a successful mainnet deploy. Add a matching docs/UPGRADE_LOG.md entry by hand for the why — this file only ever captures the what.","source":"scripts/deploy-backend.sh (auto-appended)","source_revision":"7e59cdfd2702","upgrade_log_section":null},{"date":"2026-08-10","module_hash":"0xb6b6c3a218874e117c97eef5980d959a9e23a4e4de72054757067d36fce7f085","module_hash_complete":true,"note":"Auto-appended immediately after a successful mainnet deploy. Add a matching docs/UPGRADE_LOG.md entry by hand for the why — this file only ever captures the what.","source":"scripts/deploy-backend.sh (auto-appended)","source_revision":"e7ad1384c366","upgrade_log_section":null},{"date":"2026-08-10","module_hash":"0x2239cd717437c3a4973a2ad1661bbf2bfbc435c61c729d8715f8c87da659de22","module_hash_complete":true,"note":"Auto-appended immediately after a successful mainnet deploy. Add a matching docs/UPGRADE_LOG.md entry by hand for the why — this file only ever captures the what.","source":"scripts/deploy-backend.sh (auto-appended)","source_revision":"cbb820cdbf1c","upgrade_log_section":null},{"date":"2026-08-10","module_hash":"0x74559be6e474de54e23b974c095c3514065ef20a66dd161bc1da700eca29d350","module_hash_complete":true,"note":"Auto-appended immediately after a successful mainnet deploy. Add a matching docs/UPGRADE_LOG.md entry by hand for the why — this file only ever captures the what.","source":"scripts/deploy-backend.sh (auto-appended)","source_revision":"4a9f84610801","upgrade_log_section":null},{"date":"2026-08-11","module_hash":"0x8bd0660fdd035995d87818dc59d9fcaf2ae3878c5d8e3636d7711673bb008a83","module_hash_complete":true,"note":"Auto-appended immediately after a successful mainnet deploy. Add a matching docs/UPGRADE_LOG.md entry by hand for the why — this file only ever captures the what.","source":"scripts/deploy-backend.sh (auto-appended)","source_revision":"bf551877ea94","upgrade_log_section":null},{"date":"2026-08-11","module_hash":"0x2109a9f45f0400f6a5511258875b076e75b8488a8395fc6d4b1afd4eaef089a7","module_hash_complete":true,"note":"Auto-appended immediately after a successful mainnet deploy. Add a matching docs/UPGRADE_LOG.md entry by hand for the why — this file only ever captures the what.","source":"scripts/deploy-backend.sh (auto-appended)","source_revision":"a45ff1030885","upgrade_log_section":null},{"date":"2026-08-12","module_hash":"0x8ddc3f2d177f348e997ea0d82f04a5bfc725d6d647919012968c53f09da5b822","module_hash_complete":true,"note":"Auto-appended immediately after a successful mainnet deploy. Add a matching docs/UPGRADE_LOG.md entry by hand for the why — this file only ever captures the what.","source":"scripts/deploy-backend.sh (auto-appended)","source_revision":"f582084260a8","upgrade_log_section":null},{"date":"2026-08-12","module_hash":"0x655dc6b184c5e1e7d33fb07247dc30f4e101470af57d8ee1f6eb9e4fc6718f51","module_hash_complete":true,"note":"Auto-appended immediately after a successful mainnet deploy. Add a matching docs/UPGRADE_LOG.md entry by hand for the why — this file only ever captures the what.","source":"scripts/deploy-backend.sh (auto-appended)","source_revision":"31acbb748755","upgrade_log_section":null},{"date":"2026-08-12","module_hash":"0x3e85476e5a505bf43e220df900296ec7e3e35269cad592db4d97095a50cbb1e6","module_hash_complete":true,"note":"Auto-appended immediately after a successful mainnet deploy. Add a matching docs/UPGRADE_LOG.md entry by hand for the why — this file only ever captures the what.","source":"scripts/deploy-backend.sh (auto-appended)","source_revision":"9ffe50218ca5","upgrade_log_section":null},{"date":"2026-08-13","module_hash":"0xe839e0d1ff9d73e226fafb994501f9c01cebd2b620494fa2642ee73877e8d7ae","module_hash_complete":true,"note":"Auto-appended immediately after a successful mainnet deploy. Add a matching docs/UPGRADE_LOG.md entry by hand for the why — this file only ever captures the what.","source":"scripts/deploy-backend.sh (auto-appended)","source_revision":"fad9e4b89c14","upgrade_log_section":null},{"date":"2026-08-13","module_hash":"0xd7d151fe637d42640f4eba8f3bad88c2ebce5e1bf4b715f50e1e5d8ded669c56","module_hash_complete":true,"note":"Auto-appended immediately after a successful mainnet deploy. Add a matching docs/UPGRADE_LOG.md entry by hand for the why — this file only ever captures the what.","source":"scripts/deploy-backend.sh (auto-appended)","source_revision":"dd10277f3d77","upgrade_log_section":null},{"date":"2026-08-13","module_hash":"0xf1d3fd3614c2890bf87fa9ff2923fbcfaec46991f2d8b4b50ad073286b516657","module_hash_complete":true,"note":"Auto-appended immediately after a successful mainnet deploy. Add a matching docs/UPGRADE_LOG.md entry by hand for the why — this file only ever captures the what.","source":"scripts/deploy-backend.sh (auto-appended)","source_revision":"db1df4e51bfe","upgrade_log_section":null},{"date":"2026-08-13","module_hash":"0x595085f08fc27381aed42daee4274d4a30d58ca62884b336639f1cac92aabf16","module_hash_complete":true,"note":"Auto-appended immediately after a successful mainnet deploy. Add a matching docs/UPGRADE_LOG.md entry by hand for the why — this file only ever captures the what.","source":"scripts/deploy-backend.sh (auto-appended)","source_revision":"9f58b97752ac","upgrade_log_section":null},{"date":"2026-08-13","module_hash":"0xdfc3e674f09876ebfd2ebc094172850eb1a7846b4b7b3284c370bcd7747fcf54","module_hash_complete":true,"note":"Auto-appended immediately after a successful mainnet deploy. Add a matching docs/UPGRADE_LOG.md entry by hand for the why — this file only ever captures the what.","source":"scripts/deploy-backend.sh (auto-appended)","source_revision":"c70d3b423ba7","upgrade_log_section":null},{"date":"2026-08-13","module_hash":"0x028c07d98385b59c869458674ed03944909ac85fe2b56c70cdb1b63cf5b8f9e9","module_hash_complete":true,"note":"Auto-appended immediately after a successful mainnet deploy. Add a matching docs/UPGRADE_LOG.md entry by hand for the why — this file only ever captures the what.","source":"scripts/deploy-backend.sh (auto-appended)","source_revision":"e5d33c3b5bdf","upgrade_log_section":null},{"date":"2026-08-14","module_hash":"0x505137428dc10f48c7d896b0675950434c63c319ce686db5e1140a6a0f213e17","module_hash_complete":true,"note":"Auto-appended immediately after a successful mainnet deploy. Add a matching docs/UPGRADE_LOG.md entry by hand for the why — this file only ever captures the what.","source":"scripts/deploy-backend.sh (auto-appended)","source_revision":"cf02c8756ff5","upgrade_log_section":null},{"date":"2026-08-15","module_hash":"0xd7a85cf0f66638b09d761d08a1f6a5c79cbc8f7003331f1547cb24d25ace55b9","module_hash_complete":true,"note":"Auto-appended immediately after a successful mainnet deploy. Add a matching docs/UPGRADE_LOG.md entry by hand for the why — this file only ever captures the what.","source":"scripts/deploy-backend.sh (auto-appended)","source_revision":"eaec679985c3","upgrade_log_section":null},{"date":"2026-08-15","module_hash":"0xb08f4952159d62894a7d93fedd698f0b31a1854ee554fb40dcfde01eb8c919a5","module_hash_complete":true,"note":"Auto-appended immediately after a successful mainnet deploy. Add a matching docs/UPGRADE_LOG.md entry by hand for the why — this file only ever captures the what.","source":"scripts/deploy-backend.sh (auto-appended)","source_revision":"b94d6704649a","upgrade_log_section":null},{"date":"2026-08-20","module_hash":"0x49c3c85b301b1f07313dd53665f673cac19315dac79a21d1fdb6ac71b14bea79","module_hash_complete":true,"note":"Auto-appended immediately after a successful mainnet deploy. Add a matching docs/UPGRADE_LOG.md entry by hand for the why — this file only ever captures the what.","source":"scripts/deploy-backend.sh (auto-appended)","source_revision":"16b53164294c","upgrade_log_section":null},{"date":"2026-08-20","module_hash":"0x06110cab32fc7af974e2161b6cd719687317268b8a0d39d9d6d1006c59394413","module_hash_complete":true,"note":"Auto-appended immediately after a successful mainnet deploy. Add a matching docs/UPGRADE_LOG.md entry by hand for the why — this file only ever captures the what.","source":"scripts/deploy-backend.sh (auto-appended)","source_revision":"f1d8bc057ae8","upgrade_log_section":null},{"date":"2026-08-20","module_hash":"0x3f4c117b7426690031c26dbafd396bb50fd9431a72e846ecd230018bb1c03104","module_hash_complete":true,"note":"Auto-appended immediately after a successful mainnet deploy. Add a matching docs/UPGRADE_LOG.md entry by hand for the why — this file only ever captures the what.","source":"scripts/deploy-backend.sh (auto-appended)","source_revision":"dae4024a8313","upgrade_log_section":null},{"date":"2026-09-06","module_hash":"0xcaafbf69711f9f1d9398ae61051b60f3c0a119506cdb6c1c2ecb6628e444f4c6","module_hash_complete":true,"note":"Auto-appended immediately after a successful mainnet deploy. Add a matching docs/UPGRADE_LOG.md entry by hand for the why — this file only ever captures the what.","source":"scripts/deploy-backend.sh (auto-appended)","source_revision":"405f27b2d0f9","upgrade_log_section":null},{"date":"2026-09-06","module_hash":"0x7148c6d4363964f0e48a72a32e4dfdce6248e92a35d5f4136331c63fe9a35dc3","module_hash_complete":true,"note":"Auto-appended immediately after a successful mainnet deploy. Add a matching docs/UPGRADE_LOG.md entry by hand for the why — this file only ever captures the what.","source":"scripts/deploy-backend.sh (auto-appended)","source_revision":"7387ac0f9dff","upgrade_log_section":null},{"date":"2026-09-09","module_hash":"0x210903552450316dd27940421b3729fb551ecbc86742da9d61ad48ebf28578c1","module_hash_complete":true,"note":"Auto-appended immediately after a successful mainnet deploy. Add a matching docs/UPGRADE_LOG.md entry by hand for the why — this file only ever captures the what.","source":"scripts/deploy-backend.sh (auto-appended)","source_revision":"725cbe0b05f7-dirty","upgrade_log_section":null},{"date":"2026-09-09","module_hash":"0x316a2709f6326a590cfef9fd3216134c165969699d0a3226b7a116ab13826f80","module_hash_complete":true,"note":"Auto-appended immediately after a successful mainnet deploy. Add a matching docs/UPGRADE_LOG.md entry by hand for the why — this file only ever captures the what.","source":"scripts/deploy-backend.sh (auto-appended)","source_revision":"725cbe0b05f7-dirty","upgrade_log_section":null},{"date":"2026-09-09","module_hash":"0x9cb422a4afe1fd53957e4486df077102d91d6677f99f14dd36c11f93ccebf6f2","module_hash_complete":true,"note":"Auto-appended immediately after a successful mainnet deploy. Add a matching docs/UPGRADE_LOG.md entry by hand for the why — this file only ever captures the what.","source":"scripts/deploy-backend.sh (auto-appended)","source_revision":"588ae15aa7a6","upgrade_log_section":null},{"date":"2026-09-09","module_hash":"0x2d364a4e5d97cb319a56e419daaef8baa3b864a16e6e4da1152338eeb05bd249","module_hash_complete":true,"note":"Auto-appended immediately after a successful mainnet deploy. Add a matching docs/UPGRADE_LOG.md entry by hand for the why — this file only ever captures the what.","source":"scripts/deploy-backend.sh (auto-appended)","source_revision":"5a6c715939d0","upgrade_log_section":null},{"date":"2026-09-10","module_hash":"0x8254d97b23f61c2ac8c9a857b13bb4acd598b939dfe949fb36a1aed8ea9b7a5f","module_hash_complete":true,"note":"Auto-appended immediately after a successful mainnet deploy; the narrative entry was added by hand the same day. Reproducibility confirmed independently: rebuilt at this revision in a detached worktree at a different path, SHA256 byte-identical.","source":"scripts/deploy-backend.sh (auto-appended)","source_revision":"4e67af8dff97","upgrade_log_section":"2026-09-10 — #74: a signed record's account of where its own figure came from"},{"date":"2026-09-10","module_hash":"0x2815e5d4068d968a9f1e61aa4ebf3617625626dde8d69b6014aa9e3422045969","module_hash_complete":true,"note":"Adds /trust/v1/non-goals.md, the third include_str!'d trust document, so the boundaries a reader relies on ride the module hash they are checking. Its envelope is the inverse of controllers.md's, deliberately: serving a statement of our own limits is what makes it binding, and there is no external authority to defer to. Shipped alongside a frontend palette shift for WCAG AA contrast.","source":"scripts/deploy-backend.sh (auto-appended)","source_revision":"d34a1e894365","upgrade_log_section":"2026-09-10 — the non-goals become a served document, and the palette becomes accessible"},{"date":"2026-09-10","module_hash":"0x383b0f5280e54701374ebbcaba92c5efbb2a9beaeec68333cb7a167f2d3ce235","module_hash_complete":true,"note":"Migrates off ic_cdk::caller, ic_cdk::id, ic_cdk::call, api::management_canister::{ecdsa,http_request,main} and canister_balance128: 62 build deprecations to 0, clippy 103 to 17. TOUCHES THE SIGNING PATH, so the acceptance test was that get_attester_public_key still returns the pinned key -- it does, byte-identical -- and that a real signature still verifies, which independent-verify.py confirmed with --expect-key. Reproducible byte-identical from a worktree at a different path.","source":"scripts/deploy-backend.sh (auto-appended)","source_revision":"692603b23641","upgrade_log_section":"2026-09-10 — off every deprecated ic-cdk API, with the derived key unchanged"},{"date":"2026-09-10","module_hash":"0xa6d74958af5425eeeb720746d9a72c9010792b694fee512e1eda0b2dae99ca7c","module_hash_complete":true,"note":"Auto-appended immediately after a successful mainnet deploy. Add a matching docs/UPGRADE_LOG.md entry by hand for the why — this file only ever captures the what.","source":"scripts/deploy-backend.sh (auto-appended)","source_revision":"06bc0711a538","upgrade_log_section":null},{"date":"2026-09-14","module_hash":"0xef26293f21059747dd4c0bbc78d5de796f1bfd53b006110b59fb7c6aab4a0aed","module_hash_complete":true,"note":"Auto-appended immediately after a successful mainnet deploy. Add a matching docs/UPGRADE_LOG.md entry by hand for the why — this file only ever captures the what.","source":"scripts/deploy-backend.sh (auto-appended)","source_revision":"d1616d786b00","upgrade_log_section":null},{"date":"2026-09-14","module_hash":"0x8634dbdc8eb45ea3532f538d094eaa6d27fe7caa49ea79fb5d24d25d24b9dc6a","module_hash_complete":true,"note":"Auto-appended immediately after a successful mainnet deploy. Add a matching docs/UPGRADE_LOG.md entry by hand for the why — this file only ever captures the what.","source":"scripts/deploy-backend.sh (auto-appended)","source_revision":"c2609799f47f","upgrade_log_section":null},{"date":"2026-09-15","module_hash":"0xbb6dde49fde75c1d4ae671c6e030e84c1055cf5f50f9ed3583cf16d169ca2666","module_hash_complete":true,"note":"Auto-appended immediately after a successful mainnet deploy. Add a matching docs/UPGRADE_LOG.md entry by hand for the why — this file only ever captures the what.","source":"scripts/deploy-backend.sh (auto-appended)","source_revision":"b627dabd5ab3","upgrade_log_section":null},{"date":"2026-09-15","module_hash":"0x2f86c9fd40bea5295b46214fd19cc40afff0af805cc3a8c0f491553182e22cc2","module_hash_complete":true,"note":"Auto-appended immediately after a successful mainnet deploy. Add a matching docs/UPGRADE_LOG.md entry by hand for the why — this file only ever captures the what.","source":"scripts/deploy-backend.sh (auto-appended)","source_revision":"a06d73e3b908","upgrade_log_section":null}]},"deltarates_frontend":{"canister_id":"zhwph-eqaaa-aaaac-bdxma-cai","current_module_hash":"0x04e565b3425fe7510ee16b02adcfe3f01abc9a2725c82a21cb08969241debd62","current_source_revision":null,"current_verified_at":"2026-08-07","current_verified_via":"icp canister status deltarates_frontend -e ic","history":[],"note":"docs/UPGRADE_LOG.md records that the frontend was redeployed alongside the backend on several dates (2026-06-10, 2026-08-03, 2026-08-04 x2, 2026-08-07) but never states the resulting frontend module hash on any of them, so no dated frontend history can be reconstructed without guessing. This file begins tracking the frontend's module hash from the current live value only; the pre-2026-08-07 frontend history is an acknowledged gap, not a zero. The frontend is a lower-stakes trust surface than the backend — it never signs anything — but a controller could still alter what a visitor is shown, so its hash is tracked here too."}},"generated":"2026-08-07"}}