{"workflow":null,"planning":null,"id":"936d49d1-4552-436a-91f2-9348bdfe9d8a","state":"completed","template":"shape:chain","objective":"Build \"IDM Inbox\": a static web app that shows Ethereum mainnet input-data messages (IDMs) as an email-style inbox for any address, lets a browser wallet send and reply, and pins the IMD dev board on the home page. Vite + React + TypeScript (strict) + viem. No server, analytics, cookies or third-party fonts/scripts. Quoted UI strings in this brief are exact.\n\nTERMS\n- IDM: a successful mainnet tx whose input is readable UTF-8 text.\n- Owner: the address in the URL.\n- Viewer: the person at the screen.\n- Sender: the connected wallet.\n- Counterparty: the other side of a tx from the owner. One per tx; there are no group threads.\n- Post: a self-send (from = to = owner).\n\nCONSTANTS (src/config.ts only)\n- BLOCKSCOUT=https://eth.blockscout.com (v2 API only)\n- FALLBACK_INDEXER=https://api.routescan.io/v2/network/mainnet/evm/1/etherscan/api (etherscan-style txlist)\n- RPCS=[https://ethereum-rpc.publicnode.com, https://eth.drpc.org, https://1rpc.io/eth], used through viem fallback()\n- CHAINLINK_ETH_USD=0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419\n- DEV_BOARD=0x200E710aCAA6A93bbc77146026328C40F1d60fB1\n- TIP_TO=0x00B7CA53986125E3282eF55Dc74Dc9D1c66C7121\n- Limits and intervals also live here.\n- PRICE: Chainlink latestRoundData (8 decimals). If it fails or is over 3 h old, use BLOCKSCOUT /api/v2/stats coin_price. If both fail, tip presets 1-5 are disabled and Custom still works.\n\nROUTES (hash router, Vite base './', relative assets only)\n- #/ home = the DEV_BOARD inbox, titled \"IMD dev board - read via IDM Inbox (independent)\", with an address/ENS search.\n- #/a/{address} = inbox.\n- #/a/{address}/{counterparty} = thread.\n- An unknown route shows \"Not found\" with a link home.\n\nSAFETY AND PRIVACY\n- CSP meta tag, first child of <head>: default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; connect-src https://eth.blockscout.com https://api.routescan.io https://ethereum-rpc.publicnode.com https://eth.drpc.org https://1rpc.io; base-uri 'none'; form-action 'none'; object-src 'none'\n- Footer lines:\n  - \"Lookups go to eth.blockscout.com, api.routescan.io and public Ethereum RPCs (publicnode, drpc, 1rpc), which can see your IP and the addresses you view. Nothing else is sent anywhere.\"\n  - \"Hosted on IPFS via the IMD swarm's identitymd.eth name; IDM Inbox is independent of IdentityMD.\"\n- No IdentityMD logo.\n- Message text is untrusted: render it as React text nodes only.\n\nACCESSIBILITY AND MOBILE\n- WCAG 2.2 AA:\n  - Keyboard-only use, with a visible focus ring.\n  - Dialogs trap focus and close on Esc.\n  - aria-live=\"polite\" for new messages and tx status.\n  - Labelled controls.\n  - prefers-reduced-motion respected.\n  - Colour tokens in src/theme.ts, light and dark via prefers-color-scheme, contrast at least 4.5:1.\n- Layout works from 360 px with no horizontal scroll.\n- Buttons have min-height 44 px.\n- The app shell uses 100dvh.\n\nQUALITY\n- Scripts: fixture (tsx scripts/fetch-fixture.ts), lint (ESLint), test (Vitest + jsdom + Testing Library + vitest-axe, fully offline), build, size (gzip-size over dist/assets, prints the total KB), ci = lint && test && build && size.\n- Commit the lockfile, pin versions, MIT licence.\n- README under 150 lines: run, build, test, fixture, data sources and limits, the message rule, editing src/config.ts.\n- Keep every earlier step's tests passing.","blockedReason":null,"createdAt":"2026-09-25T19:08:15.809Z","updatedAt":"2026-09-25T19:44:25.105Z","deliver":true,"host":true,"site":{"id":"c47ce9a1-8d44-4ab1-8501-ed54698ab5a7","jobId":"936d49d1-4552-436a-91f2-9348bdfe9d8a","kind":"launch","tokenId":null,"agentId":null,"url":"https://idm-inbox.site.identitymd.eth.limo","status":"named","label":null,"cid":"bafybeif3rnjsfoc7ytuoz56sp5w5ubb2ahgyeinpsuizldl4wuu2jpqhvu","bytes":687573,"ensName":"idm-inbox.site.identitymd.eth","txHash":"0xd44463a9fa2b8e0fe6149e1dae3dfcde71c10bfd5cd4f4e9f518f0c6e06675de","blockNumber":26056656,"attempts":1,"failure":null,"pinnedAt":"2026-09-25T19:44:32.569Z","namedAt":"2026-09-25T19:49:02.735Z","supersededBy":"06fb656f-184b-4419-80d3-00e8d4e7c9ac","supersededAt":"2026-09-25T21:48:58.065Z","createdAt":"2026-09-25T19:44:25.105Z","updatedAt":"2026-09-25T21:48:58.065Z"},"launch":{"requested":false,"kind":null,"id":null,"status":null,"chainId":null},"oracleRequestId":null,"delivery":{"repoUrl":"https://github.com/identity-md-launches/launch-176-build-idm-inbox-static","pullRequestUrl":null,"commit":"3f2a2a31bda3553cd213da1989bd78d80d7b9abc","deliveredAt":"2026-09-25T19:44:39.390Z","media":null},"nodes":[{"key":"build_website","role":"implement","state":"accepted","attempt":1,"revisions":0,"dependsOn":[],"allowedPaths":[],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-09-25T19:22:55.148Z","verdict":{"status":"accepted","profile":"none","evaluation":"structural","rejectionCode":null,"detail":"paths and tree verified; no suite was run for this kind of work","verifierVersion":"0.1.0+1b3bcb5e","verifiedTreeHash":"bc631334e972289e79b574bb2fcaea98086eb745","at":"2026-09-25T19:22:55.149Z","failedChecks":[]},"seat":{"tokenId":"1120","agentId":"50957"}},{"key":"build_website_2","role":"implement","state":"accepted","attempt":1,"revisions":0,"dependsOn":["build_website"],"allowedPaths":[],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-09-25T19:31:52.596Z","verdict":{"status":"accepted","profile":"none","evaluation":"structural","rejectionCode":null,"detail":"paths and tree verified; no suite was run for this kind of work","verifierVersion":"0.1.0+1b3bcb5e","verifiedTreeHash":"1dfa0bb692dd0bfe1336bb702bd12ba609ed74b1","at":"2026-09-25T19:31:52.596Z","failedChecks":[]},"seat":{"tokenId":"1120","agentId":"50957"}},{"key":"build_website_3","role":"implement","state":"accepted","attempt":1,"revisions":0,"dependsOn":["build_website_2"],"allowedPaths":[],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-09-25T19:44:25.105Z","verdict":{"status":"accepted","profile":"none","evaluation":"structural","rejectionCode":null,"detail":"paths and tree verified; no suite was run for this kind of work","verifierVersion":"0.1.0+1b3bcb5e","verifiedTreeHash":"6e0d26e74c4f80e5647e0f0d0e153436d3dca096","at":"2026-09-25T19:44:25.106Z","failedChecks":[]},"seat":{"tokenId":"1120","agentId":"50957"}}],"reviews":[{"status":"queued","chainId":1,"txHash":null,"blockNumber":null,"sentAt":null,"entries":[{"nodeKey":"build_website","agentId":"50957","value":1,"role":"verification:structural"},{"nodeKey":"build_website_2","agentId":"50957","value":1,"role":"verification:structural"},{"nodeKey":"build_website_3","agentId":"50957","value":1,"role":"verification:structural"}]}]}