> HISTORICAL DRAFT — This file predates the agent-only mint and fully on-chain art requirements. The NFT contract is not deployed, and owner controls remain undecided. Refer to the website status, not this file, for current launch status.

# Deployment runbook

Current state: **not deployed**. Deployment is disabled while the requested owner-editable controls are being specified and tested. The instructions below describe the prior draft and must not be used for a mainnet deployment yet. Deployer `0x01c72483c256125E93e5D3cB620Fec8b623c4d48` is the user-selected temporary owner/treasury. Funding target: 0.025 BNB on chain 56, estimate only; gas can change. Check the address and chain independently before transferring.

1. Protect and back up `.secrets/deployer.keystore.json` and its password separately. Never publish either. Install dependencies and Foundry, compile and test: `npm install`, `cd contracts && forge test -vv`.
2. Upload `assets/generated/agent-eggs-metadata.car` to a reliable IPFS pinning provider and ensure **both CAR roots** are pinned (metadata and images). A provider may require separate root pins. Confirm provider status; gateway fetch alone cannot prove durable pinning. Then `npm run verify-pinning -- --gateway https://YOUR_GATEWAY --pin-confirmed` checks all manifest file hashes. Replicate independently and monitor pin health.
3. Fund and rehearse on BSC testnet using the real wrapper; test mint, wait 24 hours, request hatch, verify callback, transfer and fees. This has not been done. Independent contract review is recommended.
4. `npm run preflight -- --network mainnet`; inspect network, wrapper, wallet, balance and metadata. `npm run deploy:mainnet -- --confirm` deploys and locks with public mint **closed**. The script saves a submitted transaction record before waiting. If interrupted, inspect `deployments/56.json` and the explorer; **do not rerun or delete the record blindly**. Confirm code, constructor parameters, lock and sale status on-chain. If lock failed, recover with the owner after verifying contract address; do not deploy a duplicate.
5. Verify source: set `ETHERSCAN_API_KEY` (not public) and `FORGE_BIN` if needed, then `npm run verify -- --network mainnet --run`. Rebuild/redeploy website after the public deployment record is updated. Monitor wrapper status and pinning.
6. Opening mint is a separate sensitive action: only after independent review, rehearsal, durable pins and launch approval, run `npm run open-mint -- --network mainnet --confirm`. It is not part of deploy. `npm run monitor -- --network mainnet` reports state.

Emergency: owner can close new minting; transfers and hatching cannot be paused. There is no retry for a stuck VRF request and no upgrade path. The `--allow-unpinned` bypass is unsafe and should not be used for launch.
