{"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":"092127a8-1baf-4ed8-b04a-028732344597","kind":"skill:site-content-check","nodes":[{"acceptedSubmissionHash":"f0909eab4e5f191ee587536539f31915b54847d2fce2b9e225c697426502e5a8","dependsOn":[],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"8189a3059fc9bb774ad7dcee66b87f32e25d781025f0e9f82a4c75182fe0ef19","skillId":"site-content-check","tools":[]},"key":"site_content_check","kind":"code","role":"review","skillHash":"8189a3059fc9bb774ad7dcee66b87f32e25d781025f0e9f82a4c75182fe0ef19","skillId":"site-content-check","state":"accepted"}],"objective":"Host this repository's root on IPFS, as it is. This is a finished static export (plain HTML/CSS/JS, no build step, no backend): index.html, main.js, style.css and assets/ at the repo root. Check its content, then pin and name it; do not build, change, rewrite or add anything.","parentJobId":null,"planHash":"fe1a2f047d2012471b977022aa71cb06eaed3d240f4ec7dd2609fced3c9771bf","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"092127a8-1baf-4ed8-b04a-028732344597","publication":{"commit":null,"deliveredAt":null,"repoUrl":null},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"52693","feedbackHash":"43843543bcb29e696318bb8716bc813dce493d5624f1038bab95655d7e2a010b","nodeKey":"site_content_check","submissionHash":"f0909eab4e5f191ee587536539f31915b54847d2fce2b9e225c697426502e5a8","tag1":"review:submission","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"057d1bb6036f3d5140e65a2b878629d9fdf6ac89fa528782b20f6e88500f37d3","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":null,"device":"8b602925834006c1","findings":[{"citation":"resolved","description":"For rewards that trigger a swarm check, doerPutInText includes checkFeeImd as a prepaid cost and the swarm receipt books it as income, but the doer Profit line reports the entire post-protocol-fee reward without deducting this expense. The doer-win receipt at line 205 and fake-caught Loss line at line 212 also omit the cost. Consequently the displayed net gain is overstated, or loss understated, by 0.5 IMD on every large dare. The cost is disclosed elsewhere in the receipt; this is an advisory accounting error, not substantiated intentional deception or a hosting blocker.","line":201,"path":"main.js","reproduction":"Open index.html, scroll to \"How a dare works\", select USDC, click the $300 preset, and choose \"No dispute\". The doer receipt shows a 1.68 IMD bond plus a nonrefundable 0.5 IMD (~$3.83) swarm check under Put in, returns only the bond, but shows \"Profit: $270 reward\". At the demo price of $7.65/IMD, expected net profit is $270 minus 0.5 IMD, approximately $266.18. Switch to \"Fake caught\": expected total loss is the bond plus 0.5 IMD (approximately $16.65); the displayed loss is only 1.68 IMD (~$12.83).","severity":"medium","snippet":"      out.push({ label: \"Doer\", lines: [putIn(doerPutInText(r)), backLine(fmtImdUsd(r.doerBondBack)), profit(fmtCur(r.doerUsd, cur) + \" reward\")] });","title":"Large-dare profit and loss totals omit the nonrefundable swarm-check fee"},{"citation":"resolved","description":"The three NFT images have alternative text naming Mirror Saint, Cipher Body, and Noise Oracle, but the text embedded in assets/img/nft-1.svg, assets/img/nft-1000.svg, and assets/img/nft-4.svg reads NOISE ORACLE, NOISE ORACLE, and NULL ARCHIVE respectively. Screen-reader visitors receive different NFT descriptions from sighted visitors. This is an advisory content/accessibility defect, not a reason to block hosting.","line":106,"path":"index.html","reproduction":"Open index.html and inspect the images under \"Disputes go to NFT holders\" using a screen reader or the browser accessibility inspector. The accessible names say \"identity.md #1, archetype Mirror Saint\", \"identity.md #1000, archetype Cipher Body\", and \"identity.md #4, archetype Noise Oracle\". Open their SVG files and read the ID/archetype text: \"ID/0001 / NOISE ORACLE\", \"ID/1000 / NOISE ORACLE\", and \"ID/0004 / NULL ARCHIVE\". Expected: each alternative description matches its displayed artwork.","severity":"low","snippet":"    <img src=\"assets/img/nft-1.svg\" width=\"180\" height=\"180\" alt=\"identity.md #1, archetype Mirror Saint\" loading=\"lazy\">\n    <img src=\"assets/img/nft-1000.svg\" width=\"180\" height=\"180\" alt=\"identity.md #1000, archetype Cipher Body\" loading=\"lazy\">\n    <img src=\"assets/img/nft-4.svg\" width=\"180\" height=\"180\" alt=\"identity.md #4, archetype Noise Oracle\" loading=\"lazy\">","title":"NFT alternative text identifies different archetypes from the displayed artwork"},{"citation":"resolved","description":"The input handler calls setUsd on every keystroke. setUsd immediately clamps a partial number below the minimum and writes the replacement back into the active field. Entering an otherwise valid reward starting with 1, 2, 3, or 4 therefore changes the intended amount before the remaining digits can be entered. The resulting calculator receipts describe a different reward. Validate/clamp after the edit is committed, or preserve the editing value separately. This is an advisory calculator defect.","line":359,"path":"main.js","reproduction":"Open index.html in Chromium, scroll to \"How a dare works\", and leave the currency at USDC. Focus the reward field, press Ctrl+A (Command+A on macOS), and type 20 using ordinary sequential keystrokes. Expected: the field and calculator use $20. Actual: entering 2 replaces it with 5, then entering 0 produces $50. Repeat with 100: the field ends at $500. Reproduced with Playwright keyboard.type, not fill/paste.","severity":"low","snippet":"  function setUsd(v) {\n    var min = minUsdFor(state.currency);\n    v = Math.round(v);\n    if (v < min) v = Math.ceil(min);\n    if (v > 1000) v = 1000;\n    state.usd = v;\n    amountInput.value = v;\n    slider.value = Math.min(v, +slider.max);","title":"Reward input rewrites ordinary multi-digit amounts while the visitor is typing"}],"hash":"f0909eab4e5f191ee587536539f31915b54847d2fce2b9e225c697426502e5a8","nodeId":"d3bdc098-82d9-4aab-b2fd-c84678d949d2","outcome":"completed","summary":"Reviewed the complete static export. Found three advisory defects: omitted calculator fees, reward-entry corruption, and mismatched NFT alternative text. No critical or high hosting blockers found.\n\nSaved verified findings to [.imd-findings.json](/home/seat/.identitymd/work/092127a8-1baf-4ed8-b04a-028732344597/d3bdc098-82d9-4aab-b2fd-c84678d949d2/.imd-findings.json). All 25 original files remain unchanged.","treeHash":null,"usage":{"cachedInputTokens":2323712,"inputTokens":99473,"model":"gpt-6-astra","outputTokens":13915,"runtime":"codex","turns":7,"wallClockMs":403801}}],"verification":[]}