# Evidence manifest - Sepolia rehearsal, cycles 7 and 8 Public artifacts a reviewer can fetch, hash and compare against the chain without access to the server. Runtime files are not in git; this manifest is the portable index. Chain: Sepolia (11155111). Every command below runs from a clean checkout after `npm ci`; none needs a secret. ## Deployment the cycles ran on | role | address | |---|---| | governance NFT (seats and operators named in the signed records) | `0xEE2ea3C723bBdf4F24cE0CAC03BdA87D78495Ec2` | | ProposalRegistry | `0x3Ca9b8e015d8EBc44A4c46e6900F55c573A16EB3` | | PayoutDistributor | `0x4A079cbBb2A936Cb5bb521a1a31668b883d8BC50` | | treasury Safe, 2 of 3, owners are the three Ledger keys in ADDRESSES.md | `0xd2688b648b7fC0a16F745F0d038F942ea574cb15` | The mint rehearsal contract `0xAb0940FC4CC8B8B11a90E85d56579DC5137847F0` is the current Disorderly721 deployment (2026-09-02); the governance cycles kept using the older collection above because that is where the rehearsal tokens were minted. ADDRESSES.md section 4 labels both deployments. ## Cycle 7, proposal 7 (2026-09-09), passed 3-0, mandate killed at stage 0 | artifact | value | |---|---| | calendar on Arweave | `vw7ENP2uw4Y6HhqnKkv5aRNXcjl78UqG5psCzgMT1Qw` | | deliberation record | https://disorderly.ai/deliberations/proposal-7-record.json | | deliberation archive on Arweave | `AzkWRD7Ps4-uM7YmbY8tP1e3yx3j1FxQHpxJcyKiFNs` | | registry id (derived, version 2) | `14021284337944698012289867705748056448751202785518936247936041169531075118389` | | deliberation hash | `0x217e0f7f176499fb1a114e88dabdb62db5fed8cfbc61808a7882a2d2693ca810` | | prompt hash | `0xad908785c397baa9cb6f0bfa2464fafb44cddd77e8af08ac922da983aef6bd32` | | commitDeliberation tx, block 11669936, 19:17:00 UTC inside the 19:00 to 19:45 window | `0x3e514dacf7f1012a349e25a9ef82b9a2fdbb5159c226fc8c31dd25012fea946f` | | closed record (version 3) | https://disorderly.ai/api/proposal/record/frozen?id=7 | | record hash | `0xb45510f4358cfafda35e7ee7f76f892b6c2d324c7c9447ba3b7c26b77ae79b64` | | publish tx, block 11670491 | `0x11f73727227c1f86ba40d1ce87a5ff19d038b59bf2297dcce47f63a9a19cde2e` | | council decisions | https://disorderly.ai/decisions/award-5-round-1.json, gate-500-round-1.json, continue-7-round-1.json | | stage 0 work record | https://disorderly.ai/work/mandate-5/stage-0-record.json | ## Cycle 8, proposal 8 (2026-09-09), not passed 1-2, holder-path acceptance | artifact | value | |---|---| | calendar on Arweave | `QCQMItqb8i7kpBwmMy_ccjXJC08FLv0ZgakBF3lq-oI` | | deliberation record | https://disorderly.ai/deliberations/proposal-8-record.json | | deliberation archive on Arweave | `mxfQENcIcviAjKT0o1IkquS-HHKa2wieQpqLyhb1j9k` | | registry id (derived, version 2) | `80741603187152849594286727473975518516530771235842972504127864579104032150870` | | deliberation hash | `0x6622f9685de16118818434db3f4e9c5e0ad7a05943f732a9213c5fcc5b703e51` | | commitDeliberation tx, block 11670816, 22:19:24 UTC inside the 22:15 to 23:00 window | `0x10473c29428b30aa01feb5ab7e9124e7a0f876b7f49791fc54ab2623ab53233e` | | closed record (version 3) with holder signatures on tokens 2 (manual), 3 and 101 (proxy-approved) | https://disorderly.ai/api/proposal/record/frozen?id=8 | | record hash | `0x90d1656ce93ce85566f191cfe357f3357af80213eddd933609a7c0241f7ed3be` | | publish tx, block 11671083 | `0xfba1c3c33366c12b9dce3cbd3c9a586dc9d16d4422384b1188710fedee1e0ff2` | | continuation decision | https://disorderly.ai/decisions/continue-8-round-1.json | ## Funded payouts and claims (legacy record format) No rehearsal has yet carried a version 3 record from a manual vote through a funded payout and a claim in one cycle: cycle 7's mandate was killed before payout and cycle 8's vote failed. The funded payout and claim paths were rehearsed earlier, under the legacy record format: | artifact | value | |---|---| | cycle 4 close record (version 1), 2 claimants, 0.08 ETH | https://disorderly.ai/rehearsal/sepolia/cycles/cycle-4-record.json and `cycle-4-proofs.json` beside it | | cycle 4 merkle root | `0x55b8807d0eeef78ca10da706e9b97067e5ee02d54eb63980da4268210eecda3c` | | cycle 4 record hash | `0x594b2aba0a629959824359f5d14419b216fd6ac82120189d2c4237b5e37414c5` | | cycle 4 Safe batch, openCycle and publishCycle in one transaction | `0x590b8a306e19c598f5e1aaf789ee200a931c35d644f688f56b056b4da059c997` | | mandate 3 settlement round 1, 4 claimants, 0.05 ETH, recorded by the clock on chain detection | https://disorderly.ai/rehearsal/sepolia/cycles/settlements/mandate-3-round-1-record.json and `-receipt.json` | | round 1 distribution id | `1606938044258990275541962092341162602522202993782805720203265` | | round 1 merkle root / record hash | `0x71c98208d177fcf76d3126f7edcd548a26899a99ddd10e5bbbbdb0d860a9319b` / `0x247ab856ee0d103d98592428f8e000e3aa48061dfcbb5ccfe982a0ab3dba5936` | | round 1 openCycle / publishCycle transactions (two, both executed by the Safe) | `0xa5de9b0419869d471318b432924e09614ab8ca446a995a4688ff12f96968b2a9` / `0x14acd3284d9ff9b2ef2834116108d6211821f37bdd86ed21a1b4dec1f582974a` | Both are checked with `verify-cycle.js` (below); the distributor's `cycles` view for each id shows the root, total and claimed amounts. On 2026-09-10 the round 1 record verified against the current contracts with the two hashes supplied (receipts addressed to the Safe, the events decoded from their logs); cycle 4 needs the legacy contract addresses from ADDRESSES.md. The public endpoint returned the receipts on the third attempt, which is the behaviour the known-issues note in the brief describes. ## Earlier cycles Cycles 1 to 6 ran under the legacy commitment format (registry id equals the proposal number; no frozen terms in the commitment). Their records are served under https://disorderly.ai/rehearsal/sepolia/ and remain historical evidence with the limitations `docs/VERIFY.md` states; they are not claimed as evidence for the version 2 and 3 formats. ## Mint and reveal at production scale (2026-09-14) A fresh rehearsal `Disorderly721` on Sepolia, minted out across both tiers from 303 generated wallets by `contracts/scripts/rehearse-mint.js`, then finalized, committed, revealed, and its metadata frozen. The deployer was treasury and owner for this deployment only, so `withdraw()` recycled about 8 ETH of float through the whole sale; mainnet uses the Safe for both. Full report: `docs/MINT-REHEARSAL-2026-09-14.md`. | artifact | value | |---|---| | rehearsal Disorderly721 | `0x12E33CCBD077E2D41510f458e206B4C9d8228a7d` (deployed at block 11703700) | | council root / operator root | `0x1d1ba5d5c5e935782ec862a40c68fffed2e6cb3dd105bb6e5cd4c6b5582fd867` / `0xebb4c8a3164a79bb146da3ed6d1969181f0d8f96d12460ffbef7293dae39fb58` | | minted | 100 council, 1,011 operators; 814 transactions, 69,585,214 gas | | reveal target block / starting index | 11704129 / 657 | | provenance hash | the Sepolia placeholder in `.env`, not the final artwork | Ten negative checks reverted as required (council mint without a proof or with the wrong payment, public mint before the window, a sixth operator for one wallet, any mint after sell-out, a root change after finalize, a second commit inside the window, setStartingIndex before the target, a freeze with an empty base URI, a base URI change after the freeze). The starting index was recomputed from `blockhash(11704129)` and the contract address and matched; all 1,111 `metadataId` values matched the tier formula and form a bijection per tier. Verify the draw yourself: node -e "const {JsonRpcProvider,keccak256,concat}=require('ethers');const p=new JsonRpcProvider('');p.getBlock(11704129).then(b=>{let i=BigInt(keccak256(concat([b.hash,'0x12E33CCBD077E2D41510f458e206B4C9d8228a7d'])))%1111n;console.log(i===0n?1n:i)})" To be repeated on the phase 1 code with the final provenance hash before `openMint` on mainnet. Note (2026-09-15): this rehearsal ran on the single-index reveal mapping. The contract now draws one offset per tier from the same block hash (see `docs/AUDIT-BRIEF.md` section 5), so the command above verifies THIS deployment only; the repeat rehearsal records the new recomputation (`rehearse-mint.js` checks all three values). ## How to verify Closed record against its own evidence and the registry (exit 0 only when anchored, latest for its slot, commitment inside the window, tally equal): curl -s "https://disorderly.ai/api/proposal/record/frozen?id=8" > p8.json node scripts/verify-proposal.js p8.json --rpc --registry 0x3Ca9b8e015d8EBc44A4c46e6900F55c573A16EB3 Pre-close commitment alone: curl -s https://disorderly.ai/deliberations/proposal-8-record.json > d8.json node scripts/verify-proposal.js --commitment d8.json --rpc --registry 0x3Ca9b8e015d8EBc44A4c46e6900F55c573A16EB3 A payout record against the distributor and registry (exit 0 verified, 1 mismatch, 2 incomplete): CHAIN_ID=11155111 RPC_URL= PROPOSAL_REGISTRY=0x3Ca9b8e015d8EBc44A4c46e6900F55c573A16EB3 PAYOUT_DISTRIBUTOR=0x4A079cbBb2A936Cb5bb521a1a31668b883d8BC50 node scripts/verify-cycle.js Arweave: `https://arweave.net/` for any id above; the bundle's contents hash to the values in the corresponding record.