{"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":"2003efe5-6251-490d-96f3-a65c850d2b3d","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"3af8c4bee64c95eec8f097996e2bb82ec6fdbe21afd52cf7bd0b93aed1b65cd4","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":"6bca51965820b767ea53834184e2107d195eb1714a4e05466d8882bfff065ce5","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"},{"acceptedSubmissionHash":"6aa0e840bf138b42eff70e2561d04a1493a28f4cd18fb1e67975b8efd9e7511f","dependsOn":["build_website"],"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":"Sworn, host the next version of the site under this project's name, sworn. Replace the hosted files with the dist/ folder of https://github.com/banse/sworn/tree/sworn-fact-check-site at commit f6e80c156946020d5eb411a22fbf9ff962615438 (a public repository; dist/ holds 90 files with index.html at its root, built there from web/ by that repository's own build), used unchanged: no file added, changed or left out, and no build run here. The page under this name currently serves the previous version, the dist/ of the same repository at commit f4e16276a954f0c9c7327733ba6adee298279fa6 (85 files); this version replaces it entirely and keeps the name. The site is a static app that reads Ethereum mainnet over public RPCs, api.imd.fun and IPFS gateways from the visitor's browser. Decide, do not ask: a question blocks the job.","parentJobId":"a8de2d29-06dc-4ffe-a014-46e17f2e5a58","planHash":"68299dfc74d810e8dc57463c6edf914d417692a2802cc93b1edddd2c2801812c","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"c3792acf-e0c4-4268-9eea-c533b7c87935","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-2147-launch-sworn-registry-symbol"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"51212","feedbackHash":"4e4da7eff1d6e71673823ad7a64779cac73859e97052cea22150cdfb56d5ec20","nodeKey":"build_website","submissionHash":"3af8c4bee64c95eec8f097996e2bb82ec6fdbe21afd52cf7bd0b93aed1b65cd4","tag1":"verification:structural","tag2":"acceptance-v2","value":1},{"agentId":"51284","feedbackHash":"45be3fd10d5611c2803f15059e3e0597dfd760ea1ba1c50bbf79bdc51d1141b8","nodeKey":"design_critic","submissionHash":"6bca51965820b767ea53834184e2107d195eb1714a4e05466d8882bfff065ce5","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"55426","feedbackHash":"0b283c3135fc2b243e41964ce23664ab6e387b2e691e22d55701db7a352619e0","nodeKey":"site_content_check","submissionHash":"6aa0e840bf138b42eff70e2561d04a1493a28f4cd18fb1e67975b8efd9e7511f","tag1":"review:submission","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"731321b4b9008cc0b743788ea4a56284860771d56dedde686f1397a6ad9908a1","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":"ba9fee9933f3a411969b0bdb7d13fbbbbdcb86ebbfe8243e8cf1783300937866","device":"613f0b69bde9876a","findings":[],"hash":"3af8c4bee64c95eec8f097996e2bb82ec6fdbe21afd52cf7bd0b93aed1b65cd4","nodeId":"936ffd4c-71e1-4420-a2c5-edb2dec4fe64","outcome":"completed","summary":"Replaced `dist/` with the exact 90-file release from `f6e80c1`, plus matching source and updated documentation.\n\nTypecheck, 272 tests and 59 browser checks passed. No rebuild ran. Bundle size is under 8 MiB.\n\n[Validation report](/root/.identitymd/work/2003efe5-6251-490d-96f3-a65c850d2b3d/936ffd4c-71e1-4420-a2c5-edb2dec4fe64/artifacts/validation.md) records retained accessibility findings and unavailable WebKit checks.","treeHash":"d6f71edac381a6e6528d845ddee5e9f232f4abaa","usage":{"cachedInputTokens":4275968,"inputTokens":241044,"model":"gpt-6.1-sol","outputTokens":41641,"runtime":"codex","turns":8,"wallClockMs":1450917}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"d73e8b10d7617d88","findings":[{"citation":"resolved","description":"The configured Coinbase SDK is shipped in dist/assets/dist-rG0n5I1c.js (line 1). With no injected Coinbase wallet, selecting this connector opens https://keys.coinbase.com/connect. The resulting wallet window loads JavaScript from keys.coinbase.com and fp.coinbase.com and sends requests to as.coinbase.com/amp. These destinations are neither public Ethereum RPCs, api.imd.fun, nor IPFS gateways, so the pinned export does not satisfy the stated external-request restriction for its connection flow. The scripts run in the Coinbase popup, not the Sworn document; this is a disclosed wallet choice rather than evidence of a drainer or a hosting-blocking malicious payload.","line":30,"path":"web/src/wallet.tsx","reproduction":"Serve the unchanged dist/ over HTTP and open it in a fresh Chromium profile without wallet extensions. Record network requests for the browser context (including newly opened windows). Click the header Connect button, then Coinbase Wallet. Before connecting an account or signing anything, a window opens at https://keys.coinbase.com/connect?sdkName=%40coinbase%2Fwallet-sdk&sdkVersion=4.3.7&origin=...&coop=null. Observe requests to keys.coinbase.com/static/main.*.js, fp.coinbase.com/web/v4/..., and as.coinbase.com/amp. Expected: the site connection flow remains within the three allowed destination classes and loads no external scripts. Actual: these additional origins are contacted by the SDK-opened wallet window.","severity":"medium","snippet":"      coinbaseWallet({\n        appName: \"Sworn\",\n        appLogoUrl: new URL(\"favicon.svg\", document.baseURI).href,\n        preference: { options: \"all\" },\n      }),","title":"Coinbase connection exceeds the permitted external-request destinations"},{"citation":"resolved","description":"This global rule is present in the hosted dist/assets/index-jlO75_Ep.css (line 1) and removes the resting underline from prose links rendered by dist/assets/index-CK9qS_xu.js. On the home page, the IMD agents link has only 1.01:1 contrast against its surrounding text; four links in How it works have 2.23:1. They have no other resting visual distinction. Visitors who cannot distinguish these colors can miss the links. Hover-only underlining does not solve discovery on touch devices. This is an accessibility advisory, not a reason to block hosting.","line":57,"path":"web/src/styles.css","reproduction":"Open the unchanged dist/index.html at 390 px, with the pointer away from links. Inspect the IMD agents link in the introductory paragraph and the Mint Card, Mint Facts, Mint Rule and Read hasTrait links in How it works. Computed text-decoration-line is none. Run axe-core 4.14.0 with rule link-in-text-block: the home page produces five violations, reporting 1.01:1 or 2.23:1 contrast with adjacent text, below the 3:1 alternative to another visual distinction. Expected: prose links have a persistent non-color cue, such as an underline, or sufficient adjacent-text distinction. Actual: only color distinguishes them until hover.","severity":"low","snippet":"a {\n  color: var(--accent);\n  text-decoration: none;\n}","title":"Inline prose links are distinguishable only by color"},{"citation":"resolved","description":"The hosted dist/assets/FactCheckLive-BCIE2MnG.js accepts a non-address wallet query and invokes getEnsAddress, but its runtime client, constructed in dist/assets/index-CK9qS_xu.js, defines only multicall3 in chain.contracts. The bundled viem resolver requires ensUniversalResolver and throws before sending an ENS resolution call. Consequently every ENS wallet link falls into the generic unresolved-name message even when mainnet reads are healthy. This is a functional advisory, not unsafe content.","line":73,"path":"web/src/chain.ts","reproduction":"Serve dist/ unchanged and open /#/fact-check?wallet=vitalik.eth. The page displays \"This wallet name could not be resolved. Enter its Ethereum address below.\" Reading the production SiteContext client and calling client.getEnsAddress({name:\"vitalik.eth\"}) throws ChainDoesNotSupportContract: Chain \"Ethereum\" does not support contract \"ensUniversalResolver\" (viem 2.57.7); its chain.contracts contains only multicall3. Expected: the ENS lookup branch can resolve a valid Ethereum name and load the resulting wallet. Actual: it fails locally for every name because the resolver address is absent.","severity":"low","snippet":"      contracts: { multicall3: { address: MULTICALL3 } },","title":"Fact Check ENS links always fail because the client lacks the ENS resolver"},{"citation":"resolved","description":"The Curator consumer in dist/assets/index-CK9qS_xu.js clears its previous result, then returns immediately for an empty address. The form has neither a required attribute nor an empty-input error. Pressing its enabled Check eligibility button therefore appears to do nothing, leaving visitors without a correction or explanation. This is a usability advisory.","line":59,"path":"web/src/controllers/useCurator.ts","reproduction":"Open /#/curator in the unchanged export, select Consume facts, leave Wallet to check empty, and press Check eligibility. The panel text is unchanged after submission: there is no .curator-consumption result, no alert, and no invalid input. Expected: a visible address-format/required-field error and an associated invalid field (or a disabled action until input is supplied). Actual: consume returns at if(!address)return with no feedback.","severity":"low","snippet":"  if(!address)return;","title":"Submitting an empty Curator wallet gives no validation feedback"}],"hash":"6aa0e840bf138b42eff70e2561d04a1493a28f4cd18fb1e67975b8efd9e7511f","nodeId":"7e11507b-8c35-40fb-a7fe-6a22e4378aa7","outcome":"completed","summary":"Review complete: **no critical or high findings**. Recorded **1 medium and 3 low findings** in [.imd-findings.json](/home/imdworker/.identitymd/work/2003efe5-6251-490d-96f3-a65c850d2b3d/7e11507b-8c35-40fb-a7fe-6a22e4378aa7/.imd-findings.json): Coinbase requests outside the permitted destinations, broken ENS lookup, color-only links, and missing empty-input feedback.\n\nAll 90 exported files match the pinned commit. Initial page checks passed at 1280 and 390 px without console errors. No build ran; site files remain unchanged.","treeHash":null,"usage":{"cachedInputTokens":5511040,"inputTokens":253865,"model":"gpt-6-astra","outputTokens":22324,"runtime":"codex","turns":8,"wallClockMs":966570}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"2fe9efd0790ef9c3","findings":[{"citation":"resolved","description":"Now: Fact History renders the raw RPC exception, including \"Payment blocked\" and \"Version: viem@2.57.7\", even for a disconnected visitor making only a public read. This is inherited unchanged from the requested commit.\nChange to: In a future upstream release, map this history-read failure to \"Fact history is unavailable because Ethereum providers could not agree. Try again.\" and retain the existing \"Retry history\" button; keep this task's pinned dist/ unchanged.\nWhy: The message should explain the failed read without implying that the visitor attempted a payment. This is informational because the current brief explicitly requires the supplied export to be used unchanged.","line":55,"path":"web/src/fact-check/history-controller.ts","reproduction":"At 390x844 in Chromium, with no wallet connected, open /#/fact-check?wallet=0x887b86B6B6957F7bbeA88B8CEfD392f39236A88C. For a deterministic reproduction, intercept the four public RPCs: answer eth_chainId with 0x1; answer ethereum-rpc.publicnode.com eth_getLogs with result []; return HTTP 503 for eth_getLogs at the other three RPCs; let other requests proceed. After 14 log requests, the alert reads \"Fact history could not be fully loaded: An unknown RPC error occurred. Details: Historical logs need two agreeing RPCs; logs were not read in full. Payment blocked. Version: viem@2.57.7 Retry history\". The alert is at x=16, y=452.28, width=358, height=127.19 CSS pixels. Expected: a history-read explanation without a payment claim or library version. The same wording was observed with unmodified live requests. Restore successful log responses and click Retry history: the alert clears and reads resume (8 new log calls measured), so the finding concerns the message, not retry or external service availability.","severity":"info","snippet":"const reason = (error: unknown) =>\n  error instanceof Error ? error.message : \"The read is unavailable.\";","title":"bug: a public Fact History read reports a blocked payment"},{"citation":"resolved","description":"Now: Whenever health is null, all three paid-fact sections of Catalog say \"Cost: oracle price per request, simulated here\" beside the Mint Facts link, although this export is the live Ethereum client. The condition also occurs during normal initial loading. This wording is inherited from the pinned release.\nChange to: In a future upstream release, replace that fallback with \"Live oracle quote unavailable. Request fees are paid in IMD.\" while keeping the existing Mint Facts link and fee disclosures. Preserve the current pinned dist/ for this assignment.\nWhy: An unavailable quote does not put the app into simulation mode. The copy should report only the unavailable read, particularly beside an action that can spend real funds. This is an informational upstream note because the brief requires an unchanged export.","line":239,"path":"web/src/pages.tsx","reproduction":"At 390x844 in a fresh Chromium context, abort external HTTPS requests and open /#/catalog. Scroll through Chain-proven, Shared facts and Panel-sworn. All three .cost-line elements display \"Cost: oracle price per request, simulated here · Mint Facts ↗\"; measured count is 3, each 358x57.59 CSS pixels, at document y=2208.61, 3488.42 and 3981.30 respectively. The footer simultaneously says \"Cannot read the chain, retrying.\" Expected: quote-unavailable wording, not a claim of simulation. web/src/pages.tsx selects this text solely when health is null; web/src/chain.ts loads the Ethereum runtime and dist/imd-deployment.json specifies chainId 1. No wallet connection or signing is needed to reproduce.","severity":"info","snippet":"              {health\n                ? `${imd(health.price)} IMD · live oracle quote`\n                : \"Cost: oracle price per request, simulated here\"}{\" \"}","title":"bug: unavailable Catalog quotes are described as simulated"}],"hash":"6bca51965820b767ea53834184e2107d195eb1714a4e05466d8882bfff065ce5","nodeId":"8eea8bee-4672-4b89-a191-6a3060beeb8a","outcome":"completed","summary":"| Area | Result |\n|---|---|\n| Requirements | 8 met; 2 after review; 0 missing/faked |\n| Broken features | 0 confirmed |\n| First screen | Product and action visible at 390px |\n| taste@1 | 14/16 passed; 2 design overrides |\n| Copy | 2 informational findings |\n| Share card | 5/5 checks passed |\n\n| Explicit requirement | Status and evidence |\n|---|---|\n| Host under “sworn” | **After review** — publication must retain `sworn.site.identitymd.eth`. |\n| Use the specified repository’s `dist/` at `f6e80c1…` | **Met** — compared against the downloaded [pinned commit](https://github.com/banse/sworn/tree/f6e80c156946020d5eb411a22fbf9ff962615438/dist). |\n| “90 files” | **Met** — export inventory contains exactly 90. |\n| “index.html at its root” | **Met** — `dist/index.html` exists and renders. |\n| “No file added, changed or left out” | **Met** — every export path and SHA-256 matches upstream. |\n| “No build run here” | **Met** — reviewed the supplied export without rebuilding. |\n| Replace the previous 85-file hosted version entirely | **After review** — replacement package is ready; all four obsolete bundles are absent. |\n| “Static app” | **Met** — served directly from `dist/`. |\n| Browser reads mainnet RPCs, `api.imd.fun` and IPFS | **Met** — verified client implementations in `rpc.mjs`, `oracle-progress.mjs` and `canvas-model.mjs`; live wallet reads succeeded. |\n| “Decide, do not ask” | **Met** — completed without questions. |\n\nSworn presents wallet facts through a green honeycomb card and a monospace registry explorer.\n\nChromium and WebKit completed public wallet lookup, navigation and wallet prompts. No horizontal overflow appeared at the tested widths. RPC availability limited live history verification; controlled failure and retry checks exercised those states. No transactions were signed.\n\nThe “used unchanged” requirement overrides the probe’s monospace and capitalization flags. Two inherited copy defects remain informational:\n\n- **bug:** Fact History reports “Payment blocked” during a public read.\n- **bug:** Catalog describes unavailable live quotes as “simulated here.”\n\nExact source citations, replacement copy and measured reproductions are in [.imd-findings.json](/home/worker/.identitymd/work/2003efe5-6251-490d-96f3-a65c850d2b3d/8eea8bee-4672-4b89-a191-6a3060beeb8a/.imd-findings.json). Site files remain unchanged.","treeHash":null,"usage":{"cachedInputTokens":4017664,"inputTokens":128650,"model":"gpt-6-astra","outputTokens":26763,"runtime":"codex","turns":9,"wallClockMs":1779818}}],"verification":[{"checks":[],"detail":"paths and tree verified; no suite was run for this kind of work","evaluation":"structural","profile":"none","status":"accepted","submissionHash":"3af8c4bee64c95eec8f097996e2bb82ec6fdbe21afd52cf7bd0b93aed1b65cd4","verifiedTreeHash":"d6f71edac381a6e6528d845ddee5e9f232f4abaa","verifierVersion":"0.1.0+c667aade"}]}