Context
migrations/0180_decision_ledger.sql (#8843) shipped a hash-chained, append-only decision ledger and named its own honest limit up front: tamper-evident, not tamper-proof — an operator can still delete the chain wholesale and re-chain from genesis undetected, because nothing outside the operator's own database holds an independent record of any past tip. buildLedgerAnchorPayload (src/review/decision-record.ts:376) was written for exactly this and has been called from nowhere since. #9186's verification matrix and #9215's eval-interface spec both now state this gap in public-facing terms, which is what surfaced it as blocking.
Decision: which anchoring mechanisms to use, and why (research complete — see linked comment)
Full mechanism research (Rekor v2, CT/tlog-tiles + witness networks, Bittensor on-chain commitment, OpenTimestamps, git-commit anchoring) is posted as a decision-record comment on this issue. Summary:
- Ship Rekor v2 (
hashedrekord) + git-commit anchoring together, as complementary primary mechanisms. Both are free, need no new runtime dependencies (Rekor: one fetch + crypto.subtle ECDSA P-256, already native to Workers; git: reuses the existing GitHub App auth), and both are independently offline-verifiable or third-party-mirrored (GH Archive, Software Heritage).
- Add OpenTimestamps as a backstop, not a primary — free, needs zero trusted party at verification time, but hours of latency and the weakest verifier UX (needs Bitcoin block data).
- Defer tlog-tiles + witness-network anchoring — the strongest possible guarantee (genuine non-equivocation, defeats split-view/rewind) but requires either a Go sequencer or a hand-rolled implementation. Revisit exactly when
migrations/0180's own stated trigger fires: when tenants exist.
- Add Bittensor on-chain commitment as a fourth, optional backend — corrected after maintainer input (see comment below). Not disqualified: the "needs a trusted archive" concern is only a real problem if the archive belongs to someone else, and LoopOver's operator already runs dedicated node infrastructure for other purposes — querying their own archive for historical commitments is the same trust posture as the git-commit backend already accepts (GitHub is a trusted third party too; we just control the repo). Signing runs on that existing node infrastructure, not inside the Cloudflare Worker, using a dedicated hotkey managed as an operational secret exactly like every other credential this app already handles at runtime (never committed to the repo) — so it doesn't conflict with the house rule against committing wallets/hotkeys, and it sidesteps
@polkadot/api's Node-orientation entirely since it never needs to run in Workers. Scope: this is bonus corroboration for Gittensor/SN74-registered participants specifically, not a universal verification step — a repo owner or contributor with no Bittensor involvement has no reason to check it, so Rekor + git-commit remain the default every verifier is told to check; the on-chain anchor is additional, clearly-labeled-optional signal for the audience that already trusts subtensor.
Requirements (decomposed into sub-issues below)
- Row-lookup endpoint binding an anchored hash back to the live chain (the property that actually delivers tamper-proofness — without it an anchor proves a hash existed, not that it's this chain's hash at that seq)
- Versioned, signed anchor payload + key management
- Anchors persistence (including recording failed attempts publicly, so anchoring cannot be silently made to fail)
- Rekor v2 backend
- Git-commit backend
- Scheduling: checkpoint cadence, not per-record
- Bittensor on-chain commitment backend (optional, Gittensor-audience-specific)
- Docs: update the tamper-evident framing once anchoring ships, including the on-chain option's scope
Expected outcome
migrations/0180's own stated gap closes: an operator who deletes the ledger and re-chains from genesis produces anchors that independently and publicly fail to match, for every anchor already published.
maintainer-only — ledger/trust-boundary infrastructure.
Context
migrations/0180_decision_ledger.sql(#8843) shipped a hash-chained, append-only decision ledger and named its own honest limit up front: tamper-evident, not tamper-proof — an operator can still delete the chain wholesale and re-chain from genesis undetected, because nothing outside the operator's own database holds an independent record of any past tip.buildLedgerAnchorPayload(src/review/decision-record.ts:376) was written for exactly this and has been called from nowhere since. #9186's verification matrix and #9215's eval-interface spec both now state this gap in public-facing terms, which is what surfaced it as blocking.Decision: which anchoring mechanisms to use, and why (research complete — see linked comment)
Full mechanism research (Rekor v2, CT/tlog-tiles + witness networks, Bittensor on-chain commitment, OpenTimestamps, git-commit anchoring) is posted as a decision-record comment on this issue. Summary:
hashedrekord) + git-commit anchoring together, as complementary primary mechanisms. Both are free, need no new runtime dependencies (Rekor: onefetch+crypto.subtleECDSA P-256, already native to Workers; git: reuses the existing GitHub App auth), and both are independently offline-verifiable or third-party-mirrored (GH Archive, Software Heritage).migrations/0180's own stated trigger fires: when tenants exist.@polkadot/api's Node-orientation entirely since it never needs to run in Workers. Scope: this is bonus corroboration for Gittensor/SN74-registered participants specifically, not a universal verification step — a repo owner or contributor with no Bittensor involvement has no reason to check it, so Rekor + git-commit remain the default every verifier is told to check; the on-chain anchor is additional, clearly-labeled-optional signal for the audience that already trusts subtensor.Requirements (decomposed into sub-issues below)
Expected outcome
migrations/0180's own stated gap closes: an operator who deletes the ledger and re-chains from genesis produces anchors that independently and publicly fail to match, for every anchor already published.maintainer-only — ledger/trust-boundary infrastructure.