{"assessments":[],"deployments":[],"fuzz":[],"identity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"interpretation":"Records acceptance and evidence. Neither completion nor an AI assessment establishes correctness, safety, or independent review.","jobId":"fc6cef21-4640-483a-83d9-a07eac95bbe6","kind":"skill:build-website","nodes":[{"acceptedSubmissionHash":"aba16b31334d734ccdf4e273f5fa621e3fbb9ee6a3b2daa59fc0cb65b30b6989","dependsOn":[],"execution":{"mustProduce":["dist/index.html"],"network":true,"optionalTools":["browser"],"profile":"none","requires":["network"],"skillHash":"a60bc8b42446c13d993341179fe13c712a5addb118fc532fb2d15e71f912efc8","skillId":"build-website","tools":[]},"key":"build_website","kind":"code","role":"implement","skillHash":"a60bc8b42446c13d993341179fe13c712a5addb118fc532fb2d15e71f912efc8","skillId":"build-website","state":"accepted"},{"acceptedSubmissionHash":"2798a092d95f3d64af3c523f6c897df55a0236f3accf9c79540d4cae30191466","dependsOn":["build_website"],"execution":{"network":true,"optionalTools":["browser"],"profile":"none","requires":["network"],"skillHash":"fd33b6741366d364a55a4c0ba2bc4f5d329cec0b62f27a83289dc5b30ab03575","skillId":"design-critic","tools":[]},"key":"design_critic","kind":"code","role":"review","skillHash":"fd33b6741366d364a55a4c0ba2bc4f5d329cec0b62f27a83289dc5b30ab03575","skillId":"design-critic","state":"accepted"}],"objective":"Build a frontend for ERC20T, an Ethereum mainnet token launch platform using a shared Uniswap v4 tax hook. Users can deploy and launch in one transaction or deploy first and launch later, choose ETH, IMD, FWA, or another eligible base, set a starting price, and retain 0–20% of supply; the remainder seeds permanently locked, token-only liquidity without requiring a base-token deposit.\n\nTokens have a configurable 0.3–5% resting buy/sell tax and optional launch decay starting at 99%, dropping one percentage point every chosen interval. Fees are automatically converted to ETH: an included 0.15% protocol component, the resting tax minus 0.15% to the regular recipient, and tax above resting to a separate decay recipient.\n\nInclude token discovery, launch previews, live tax information, and owner controls for fee recipients, distributors, external liquidity, and pairing permissions. Ordinary direct wallet transfers are untaxed; other transfers are restricted, and swaps support exact input only.\n\nResearch the deployed contracts and their ABIs for implementation details: hook 0xed9a04fa6693e754661a22502524df9b1857e544, factory 0x801411c6acec4fa80c75c5d3c0eae13c84f8a173, implementation 0x2df7dcf4d19a7924e00ae96629cc1d1261670eee.\n\n\nThe style should resemble https://www.s02.works/ or https://token.works, minimalist and clean","parentJobId":null,"planHash":"931ce7f7bef421628b229c5764826525ab6de01ae91fc27736d026fb7a3c90be","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"fc6cef21-4640-483a-83d9-a07eac95bbe6","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-2044-build-frontend-erc20t-ethereum"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"51211","feedbackHash":"8033f87c7812850af515c39e4ea9a03b41ff60b42b611ef9e5834840487110f1","nodeKey":"build_website","submissionHash":"aba16b31334d734ccdf4e273f5fa621e3fbb9ee6a3b2daa59fc0cb65b30b6989","tag1":"verification:structural","tag2":"acceptance-v2","value":1},{"agentId":"51284","feedbackHash":"dab6bf4797994ff0a7f0351532230954e8b58c991732b34639181a9893079627","nodeKey":"design_critic","submissionHash":"2798a092d95f3d64af3c523f6c897df55a0236f3accf9c79540d4cae30191466","tag1":"review:submission","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"e348fac4e186a7f27cb8cd40cabf7bcf17541bf2d5e8879560064ac5d36032e1","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":null,"device":"2fe9efd0790ef9c3","findings":[{"citation":"resolved","description":"Now: Discovery renders its RPC error only when no tokens are loaded. A failed Refresh with existing rows silently leaves the old taxes and Live badges, and an empty filter then renders neither results nor an empty/error state.\nChange to: Show an inline error whenever query.isError is true, including when cached rows exist, using “Refresh failed. Showing previously fetched tokens and taxes.” with the existing retry action. Allow the no-matches state to render for an empty filter while cached data exists. Keep cached rows in place.\nWhy: A live-tax discovery interface must distinguish a successful refresh from a failed one; every reached failure and empty state should say what the application knows.","line":161,"path":"src/Explore.tsx","reproduction":"At 390×844 in Chromium, open /#/explore online and wait for real factory-token rows (six in this run). Then use browser request interception to return HTTP 503 for both https://ethereum-rpc.publicnode.com/** and https://eth.drpc.org/** and click Refresh. Wait until Refresh is enabled again. Actual: all six rows and their 2%/5% taxes remain, the fetched block stays 26,209,435, and there are zero role=alert elements or failure messages. Click “Not launched”: the result area is completely blank, with no “No matching tokens” or failure notice. Expected: an explicit failed-refresh/stale-data message plus the normal empty-filter state. Source gates the failure on !all.length at line 161 and the empty state on !query.isError at line 233. No wallet or signature is involved.","severity":"medium","snippet":"      {query.isError && !all.length && (","title":"bug: discovery silently keeps stale taxes after a failed refresh"},{"citation":"resolved","description":"Now: The creation tool is headed “Launch on your terms.”, discovery is “An open field of ideas.”, and owner settings are “Built to be yours.”; their section headings add another layer of slogans.\nChange to: Use “Create an Ethereum token”, “Explore ERC20T tokens”, “Manage your token”, and “How ERC20T works” as the route headings; use “Token details” on the token-detail route. In Launch, use “Token details”, “Token economics”, and “Review deployment”. Remove the desktop “One shared hook. A world of possibilities.” note and let the task heading occupy that row. Replace Explore’s secondary heading with “Recent deployments” and remove Manage’s redundant “Your token. Your controls.” heading so its lookup moves up.\nWhy: The supplied copy checklist calls for tools and dashboards to name the task plainly without a voice line. These replacements keep the existing layout and explain what the user can do.","line":24,"path":"src/App.tsx","reproduction":"At 390×844 and 1440×900, open /#/create, then Explore and Manage. Read h1 and the next h2 before interacting. The create headings are “Launch on your terms.” and “Make it yours.”; Explore renders “An open field of ideas.” and “Fresh from the factory.”; Manage renders “Built to be yours.” and “Your token. Your controls.”. At 1440, the header also displays the two-line “One shared hook. A world of possibilities.” note. Expected: each task screen names its action directly. These exact strings are rendered from App.tsx:24–31, Launch.tsx:171–175, Explore.tsx:95 and Manage.tsx:259.","severity":"medium","snippet":"  const headingText =\n    page === \"explore\" || page === \"token\"\n      ? \"An open field of ideas.\"\n      : page === \"manage\"\n        ? \"Built to be yours.\"\n        : page === \"about\"\n          ? \"Simple rules. On-chain.\"\n          : \"Launch on your terms.\";","title":"taste: task screens use slogans instead of descriptive headings"},{"citation":"resolved","description":"Now: The allocation graphic sets aria-label on a generic div with no role. Axe reports aria-prohibited-attr in both Chromium and WebKit; the same percentages are already written immediately beneath it.\nChange to: Remove aria-label from .allocation-line and mark this decorative bar aria-hidden=\"true\". Keep the existing liquidity and creator percentage labels.\nWhy: Generic div elements do not support accessible naming. The existing text provides the allocation information without an invalid or duplicate graphic label.","line":295,"path":"src/Launch.tsx","reproduction":"At 390×844, open /#/create, enter token name “Review token” and symbol “REVIEW”, press Continue, and set Creator allocation to 20. Run axe-core on the Economics step in Chromium or WebKit. Actual: one aria-prohibited-attr violation targets .allocation-line with “aria-label attribute cannot be used on div elements with no valid role attribute.” The DOM has aria-label=\"80% liquidity, 20% creator allocation\" on that div; the adjacent visible labels already say “80% locked liquidity” and “20% yours”. Expected: no invalid ARIA naming attribute and those text labels remain available.","severity":"low","snippet":"                <div\n                  className=\"allocation-line\"\n                  aria-label={`${100 - kept}% liquidity, ${kept}% creator allocation`}\n                >","title":"accessibility: the allocation graphic has an invalid ARIA label"}],"hash":"2798a092d95f3d64af3c523f6c897df55a0236f3accf9c79540d4cae30191466","nodeId":"5a7d4c55-70bd-4b4a-b9f6-5e3d4f0344bf","outcome":"completed","summary":"| Area | Result |\n|---|---|\n| Requirements | 30 met; 0 missing; 0 faked |\n| Broken features | 1 |\n| First screen at 390px | Product and Continue visible |\n| taste@1 | 15/16 passed; 1 false positive |\n| Copy | 1 finding |\n| Share card | Present; 5/5 metadata checks |\n\nSaved **3 findings: 2 medium, 1 low, none high** in [.imd-findings.json][findings]. Site files remain unchanged.\n\n- **Medium — bug:** Failed discovery refreshes silently retain old taxes; selecting an empty filter then shows a blank results area.\n- **Medium — taste:** Task screens use slogans instead of descriptive headings.\n- **Low — accessibility:** The allocation graphic applies an unsupported ARIA label to a generic `div`.\n\nThe JSON includes exact source excerpts, fixes, and measured reproductions.\n\n| Explicit requirement | Status | Evidence |\n|---|---|---|\n| “ERC20T, an Ethereum mainnet token launch platform using a shared Uniswap v4 tax hook” | Met | [App][app], [mainnet configuration][config] |\n| “deploy and launch in one transaction” | Met | [Launch][launch]: `createAndLaunchAtPrice` |\n| “deploy first and launch later” | Met | [Launch][launch]: deploy mode; [Manage][manage]: launch controls |\n| “choose ETH, IMD, FWA, or another eligible base” | Met | [Base picker][launch]; [eligibility checks][chain] |\n| “set a starting price” | Met | [Price field and effective-price review][launch] |\n| “retain 0–20% of supply” | Met | [Allocation field][launch]; [validation][model] |\n| “remainder seeds … token-only liquidity” | Met | [Deployment allocation mapping][chain] |\n| “permanently locked” | Met | [Launch acknowledgement][launch]; [protocol guide][app] |\n| “without requiring a base-token deposit” | Met | [Launch][launch]: zero deposit and `value: 0n` |\n| “configurable 0.3–5% resting buy/sell tax” | Met | [Economics fields][launch]; [owner tax controls][manage] |\n| “optional launch decay starting at 99%” | Met | [Decay toggle and preview][launch] |\n| “dropping one percentage point every chosen interval” | Met | [Interval field and chart][launch]; [decay calculations][model] |\n| “Fees are automatically converted to ETH” | Met | [Verified contract research][research]; [fee information][launch] |\n| “included 0.15% protocol component” | Met | [Fee split][model]; preview |\n| “resting tax minus 0.15% to the regular recipient” | Met | [Fee split][model]; recipient controls |\n| “tax above resting to a separate decay recipient” | Met | [Decay recipient field][launch]; [independent owner control][manage] |\n| “token discovery” | Met | [Explore][explore]; six real deployments loaded |\n| “launch previews” | Met | [Launch][launch]; contract-derived prices returned |\n| “live tax information” | Met | [TokenDetail][explore]; block-labelled readings and refresh |\n| “owner controls for fee recipients” | Met | [Manage][manage]: regular and decay recipients |\n| “distributors” | Met | [Manage][manage]: approve, remove, inspect and global-registry controls |\n| “external liquidity” | Met | [Manage][manage]: permission toggle |\n| “pairing permissions” | Met | [Manage][manage]: pairing toggle and eligibility restriction |\n| “Ordinary direct wallet transfers are untaxed” | Met | [Protocol guide][app]; verified contract research |\n| “other transfers are restricted” | Met | [Protocol guide][app]; permission controls |\n| “swaps support exact input only” | Met | [Protocol guide][app] and token-detail notice |\n| Research hook `0xed9a04fa6693e754661a22502524df9b1857e544` | Met | [Hook ABI][hook]; exact match to verified source |\n| Research factory `0x801411c6acec4fa80c75c5d3c0eae13c84f8a173` | Met | [Factory ABI][factory]; exact match to verified source |\n| Research implementation `0x2df7dcf4d19a7924e00ae96629cc1d1261670eee` | Met | [Token ABI][token]; exact match to verified source |\n| Resemble the references; “minimalist and clean” | Met | [Styles][styles]; compared with [token.works](https://www.token.works/) and [s02.works](https://www.s02.works/) |\n\nERC20T is a tool for launching Ethereum toke","treeHash":null,"usage":{"cachedInputTokens":6974976,"inputTokens":209169,"model":"gpt-6-astra","outputTokens":32082,"runtime":"codex","turns":8,"wallClockMs":807385}},{"artifacts":[],"attempt":1,"bundleHash":"18996cf1bfc9e537f53b882edc5c5817a3a7d30a7f5f9bbc7065f94152239211","device":"c0f339153549a92d","findings":[],"hash":"aba16b31334d734ccdf4e273f5fa621e3fbb9ee6a3b2daa59fc0cb65b30b6989","nodeId":"dddb4f3d-f81c-4341-931c-4b6f07f8c690","outcome":"completed","summary":"Implemented the ERC20T frontend with launch flows, discovery, tax previews, wallet connections, and owner controls.\n\n- Static export: `dist/`\n- Build/typecheck passed; 9 unit tests and 23 browser checks passed.\n- Complete deliverable: 1.60 MB, below 8 MiB.\n- README, DESIGN.md, contract research, and validation records included.\n\nMainnet transactions remain unverified because RPC endpoints returned HTTP 403; transaction flows passed isolated fixture tests.","treeHash":"ad279445288bded3c13889a0fe957db74e56d7fd","usage":{"cachedInputTokens":11699968,"inputTokens":325341,"model":"gpt-6-astra","outputTokens":110044,"runtime":"codex","turns":13,"wallClockMs":2647183}}],"verification":[{"checks":[],"detail":"paths and tree verified; no suite was run for this kind of work","evaluation":"structural","profile":"none","status":"accepted","submissionHash":"aba16b31334d734ccdf4e273f5fa621e3fbb9ee6a3b2daa59fc0cb65b30b6989","verifiedTreeHash":"ad279445288bded3c13889a0fe957db74e56d7fd","verifierVersion":"0.1.0+9c4e4b92"}]}