{"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":"74206482-15fa-45b9-b6af-455571dcc1f1","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"afc588d10fcc81e5d91a1d51afa9b19489c714bd85b058d72ea0fc61e180d530","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":"770d1e57aa5cff6ea99fa1a79cf25af7a1b648d6b68c25379206b29a49ee6ed0","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":"8a8764fff8c250abfec749443388a48fada962fc764865e84e38bc71650eeca3","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":"One step on this project's site, the Sworn registry site (.imd/reads/project.md): implement items 1 to 7 below in the oracle feed (the swarm progress panel on the claim page and in the dialog), rebuild and commit the static export in dist/ so the same site name serves the new version, then check the items. Change nothing else: addresses, chain, ABIs, layout and existing copy stay, except the texts items 6 and 7 name. Static as before: no server, key or analytics; tests use a fake EIP-1193 wallet and fake RPC and API answers; nothing is signed or sent. Decide, do not ask: a question blocks the job. (1) For a fact about one wallet, the feed accepts an oracle request only if its question field names the connected wallet's full address (any letter case), whichever way it was found (exact, matched, confirmed by the Registry). When the Intake answer or the Verified event names a request whose question names another wallet, the feed shows 'This request is not about your wallet.' and no panel answers. The feed shows the wallet the question names, shortened to its first 6 and last 4 characters. Shared facts are found as before. Listing entries of /oracle/requests carry question and jobId but no consumer or questionHash. (2) From a confirmed fact request until its oracle request is found and the panel is listed, the feed shows a loading indicator with the text 'Waiting for the swarm to pick up the request…'. (3) Every listed seat that has not answered shows a loading indicator next to 'Awaiting answer' until that seat answers; when the request is attested or failed, rows without an answer stop loading and read 'No answer'. With reduced motion the indicator does not move. (4) Below the line 'Oracle request: <id> · <how found>' a link 'View on the IMD explorer' opens https://explorer.imd.fun/jobs/<jobId> (the oracle request's jobId; the explorer shows each oracle request on its panel job page) in a new tab; no link while jobId is unknown. (5) The feed shows the oracle request's question: a question longer than about two lines shows a preview with 'Show full question', which expands it, and 'Show less', which collapses it; a short question is shown in full with no control. (6) For a true/false question the summary counts the seats' answers itself: '<answered> / <panel> answers · unavailable agree / <quorum> quorum' becomes '<answered> / <panel> answers · <true answers> true / <quorum> needed'. When the true answers reach the quorum, before the attestation arrives, the feed shows 'Panel agreed: <true answers> of <quorum> needed said true. Finishing: the oracle signs the answer and delivers it to the Registry; the fact appears on your card once the Registry stores it.' When the false answers reach the quorum it shows 'Panel agreed: false. The fact is not proven.' Once attested, the existing attested and delivered texts follow. For other answer types the summary keeps the plane's agreement number and reads 'no agreement yet' while there is none. (7) Seat rows 'Answer: <answer> · Figure: <figure>' become 'Answer: <answer>'; no seat row shows a figure.","parentJobId":"27f78bb1-1809-42c2-8d7b-6bb1d26947fe","planHash":"2d60e2fc08518156b4d292e03f39781e93721da90731d8d5358f49acf2e8d591","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"4f2565af-3ba6-4fde-9444-473ed6b1ee68","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-2412-workflow-frontend-stage-context"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"51516","feedbackHash":"812a1bfa0b292c4b8134f13098c2c4a9db4e95747beb9c549d006e61088e6904","nodeKey":"build_website","submissionHash":"afc588d10fcc81e5d91a1d51afa9b19489c714bd85b058d72ea0fc61e180d530","tag1":"verification:structural","tag2":"acceptance-v2","value":1},{"agentId":"51406","feedbackHash":"e0234ee679968c3f6b832ffcea2f86f2ed1ad8687ca01b89906ded5328e78f38","nodeKey":"design_critic","submissionHash":"770d1e57aa5cff6ea99fa1a79cf25af7a1b648d6b68c25379206b29a49ee6ed0","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51880","feedbackHash":"bc8c7746f4b28cec834c7ca562dfc6767b590543270cee595f5163e544ac5f91","nodeKey":"site_content_check","submissionHash":"8a8764fff8c250abfec749443388a48fada962fc764865e84e38bc71650eeca3","tag1":"review:submission","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"2f4478243eeabf1db7901be130590ae2ec4f839335ca9634123e2821bedbeee2","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":null,"device":"ce823f211d29a38d","findings":[{"citation":"resolved","description":"Now: when a rejected question contains a contract address before its subject wallet, questionWallet falls back to the first address and labels the contract as Wallet. The shipped Pretrained and Still Here question templates both have this order.\nChange to: identify the subject address in the supported question templates and use that address for the refusal label; add mismatch cases using the real multi-address templates.\nWhy: item 1 requires the feed to show the wallet the question names, shortened to its first 6 and last 4 characters. Correctly refusing the answers does not make the incorrect wallet label accurate.","line":19,"path":"web/src/oracle-progress.mjs","reproduction":"Chromium 156 and WebKit 27.2, 390×844, static dist export, fake EIP-1193 wallet 0x2000000000000000000000000000000000000001 and fake pending 1301 / Pretrained request. Have the Intake admission select wrong-exact, whose detail.question is templates/fixtures/1301-not-born-yesterday.json question with its claimant 0x000000000000000000000000000000000000c1a1 replaced by 0xabcdef0123456789abcdef0123456789abcdef01; the question retains the earlier WhitelistCurator contract 0xcb0b0531e86a9ac36fa865ca8e3dbccf047fda91. Connect the fake browser wallet on #/claim and inspect Swarm progress. Actual: This request is not about your wallet. followed by Wallet: 0xcb0b…da91; zero seat rows. Expected: the same refusal with Wallet: 0xabcd…ef01. Repeated with a Verified event selecting 23474d49-bf7c-40e0-8dad-41636c73ea84 and the same question: identical wrong label.","severity":"medium","snippet":"    named.find((address) => same(address, pending.wallet)) || named[0] || null","title":"bug: wrong-wallet refusals identify the contract as the wallet"},{"citation":"resolved","description":"Now: the matched path uses a listing-only jobId for rendering but never saves it to identities. When the same request is subsequently found through Verified or Intake, detail() cannot recover that known jobId and the explorer link disappears.\nChange to: persist the listing jobId in the per-oracle-request identity cache and preserve it when later detail responses omit jobId, including matched-to-exact and matched-to-confirmed transitions.\nWhy: item 4 requires the explorer link for the oracle request jobId and permits hiding it only while that jobId is unknown; this request already supplied its jobId.","line":137,"path":"web/src/oracle-progress.mjs","reproduction":"Chromium 156 and WebKit 27.2, 390×844, committed dist export. Use the fake wallet/RPC setup and record(confirmedId) fixture from web/tests/oracle-feed-browser.mjs (oracle id 23474d49-bf7c-40e0-8dad-41636c73ea84, Registry request 0x followed by a1 repeated 32 times, connected wallet 0x2000000000000000000000000000000000000001). Intake returns entries: []; /oracle/requests returns id, createdAt, question and jobId panel-job-for-23474d49-bf7c-40e0-8dad-41636c73ea84; request detail returns the normal matching fixture except jobId is omitted. On #/claim, connect the fake wallet: the matched feed correctly has one link to https://explorer.imd.fun/jobs/panel-job-for-23474d49-bf7c-40e0-8dad-41636c73ea84. Then supply a Registry Verified event for the same request, traitId 601, claimant equal to the wallet, oracleRequestId 0x23474d49bf7c40e08dad41636c73ea84 followed by 16 zero bytes, and invoke the five-second poll. Actual: the label becomes confirmed by the Registry and the explorer-link count becomes 0. Expected: the provenance updates and the existing link remains (count 1), because the oracle id and known jobId did not change.","severity":"medium","snippet":"    const value = { ...r, jobId: r.jobId ?? identities.get(id)?.jobId };","title":"bug: a known explorer link disappears when the Registry confirms the request"}],"hash":"770d1e57aa5cff6ea99fa1a79cf25af7a1b648d6b68c25379206b29a49ee6ed0","nodeId":"f6719523-8c3f-4a4d-bdd1-693b476c9f90","outcome":"completed","summary":"| Area | Result |\n|---|---|\n| Requirements | 26 checked: 23 met, 2 missing, 0 faked, 1 after review |\n| Broken features | 2 medium bugs |\n| First screen at 390px | Product and main action visible |\n| taste@1 | 14/16 passed; 2 preserved-design exceptions |\n| Copy | 0 separate findings |\n| Share card | 5/5 metadata checks passed |\n\nSaved both findings in [.imd-findings.json](/home/imd-worker/.identitymd/work/74206482-15fa-45b9-b6af-455571dcc1f1/f6719523-8c3f-4a4d-bdd1-693b476c9f90/.imd-findings.json):\n\n- **bug: wrong-wallet refusals identify the contract as the wallet.** Actual Pretrained questions name the contract before the wallet; the refusal displays that contract’s address. Extract the question’s subject wallet instead.\n- **bug: a known explorer link disappears when the Registry confirms the request.** A listing-only `jobId` is not retained across discovery transitions. Preserve it in the request identity cache.\n\nBoth reproduced at **390×844 in Chromium and WebKit**. The report contains exact inputs, source lines, snippets and expected versus actual results.\n\nEvidence below refers to the reader (`web/src/oracle-progress.mjs`), feed (`web/src/swarm.tsx`), styles (`web/src/styles.css`) and notes (`web/TEST-NOTES.md`).\n\n| Explicit requirement | Status and evidence |\n|---|---|\n| Full connected address, any case, across all discovery paths | **Met** — reader wallet guard |\n| Intake/Verified mismatch refusal with no answers | **Met** — feed refusal state |\n| Show the question’s wallet, first 6/last 4 characters | **Missing** for multi-address mismatch questions — finding 1 |\n| Shared facts found as before | **Met** — reader shared-request tests |\n| Listings without consumer/questionHash | **Met** — listing/detail fixtures |\n| Waiting indicator and exact pickup text | **Met** — feed waiting state |\n| Each unanswered seat loads beside “Awaiting answer” | **Met** — seat rows |\n| Terminal unanswered rows stop and say “No answer” | **Met** — attested/failed states |\n| Reduced-motion indicator stays still | **Met** — styles and browser measurements |\n| Explorer link below request line, correct job URL, new tab | **Missing** persistence after confirmation; other behavior met — finding 2 |\n| No link while jobId is unknown | **Met** — unknown-job fixture |\n| Long-question preview, expand and collapse | **Met** — question disclosure |\n| Short question fully shown without control | **Met** — short-question fixture |\n| Boolean summary counts true answers itself | **Met** — reader counts and feed summary |\n| Exact true-quorum finishing explanation | **Met** — quorum fixture |\n| Exact false-quorum explanation | **Met** — quorum fixture |\n| Existing attested/delivered behavior follows | **Met** — feed and settlement regression checks |\n| Other types retain agreement or “no agreement yet” | **Met** — nonboolean fixtures |\n| Answer-only seat rows; no figures | **Met** — rendered rows |\n| Changes implemented in claim panel and dialog | **Met** — shared feed component |\n| Rebuilt static export committed in `dist/` | **Met** — tracked export; manifest verified |\n| Same site name serves the new version | **After review** — publication step |\n| Preserve addresses, chain, ABIs, layout and unrelated copy | **Met** — source diff and deployment comparison |\n| Static; no server, key or analytics | **Met** — export and request inspection |\n| Fake wallet/RPC/API testing; nothing signed or broadcast | **Met** — browser fixtures and signing checks |\n| Per-item tests and browser observations recorded | **Met** — notes matrix |\n\nThe 17 focused unit tests and all ten feed scenarios passed in each browser. The two additional transition/template cases exposed the reported bugs. No site files were changed.\n\nSworn presents a wallet-fact registry through a compact green terminal interface and its distinctive hive card.","treeHash":null,"usage":{"cachedInputTokens":3191936,"inputTokens":129389,"model":"gpt-6-astra","outputTokens":17232,"runtime":"codex","turns":8,"wallClockMs":590570}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"09078b7cdfb673fe","findings":[{"citation":"resolved","description":"The Explorer page mounts Settlement without onCheckSwarm (web/src/pages.tsx:519), so 'Check swarm' sets localFact and mounts SwarmFeed for any visitor, connected or not. SwarmFeed passes wallet: address from useAccount(); with no wallet connected address is undefined. For a personal (non-zero claimant) request, isAboutWallet (web/src/oracle-progress.mjs:22-27) compares every address in the question against undefined, finds none, and WalletQuestionMismatch is thrown, so the feed prints 'This request is not about your wallet.' plus 'Wallet: 0x…' although the visitor has no wallet. The message is misleading in that state; the safe outcome (no panel answers shown) is otherwise correct, so this is advisory. Items 1-7 themselves were verified: dist/assets/* are byte-identical to a fresh vite build from web/src; node --test tests/oracle-feed.test.mjs passes 17/17; tests/oracle-feed-browser.mjs run in real Chromium (headless shell 1248) against the export passes all 10 groups, and screenshots in test/scratch/oracle-feed-chromium show the waiting indicator, 'View on the IMD explorer', 'Wallet: 0X2000…0001', '9 / 11 answers · 7 true / 7 needed', the 'Panel agreed: 7 of 7 needed said true…' text, 'Show full question', seat rows 'Answer: true' with no figure, and 'Awaiting answer' spinners. The export's scripts contain no iframe, eval, remote code loading, seed-phrase prompt or undisclosed endpoint beyond wallet SDKs, the listed RPCs, api.imd.fun and explorer.imd.fun.","line":201,"path":"web/src/swarm.tsx","reproduction":"Open the Explorer page in the export with no wallet connected, look up a card whose facts.pending holds a non-zero requestId for a personal fact (claimant is a real address), and press 'Check swarm' in that pending request's Settlement panel. With the API detail for the request's question naming the claimant's address, expected: a waiting or 'connect a wallet' state, since there is no connected wallet to compare. Actual: the feed shows 'This request is not about your wallet.' and 'Wallet: <claimant shortened>'. Cause: swarm.tsx:201 sends wallet: undefined and oracle-progress.mjs:25 same(address, undefined) is false for every address.","severity":"low","snippet":"          { ...pending, wallet: address },","title":"Explorer settlement feed says 'This request is not about your wallet.' when no wallet is connected"}],"hash":"8a8764fff8c250abfec749443388a48fada962fc764865e84e38bc71650eeca3","nodeId":"1b9f4bc6-e075-4736-8fd5-c5839ca491fe","outcome":"completed","summary":"Review complete. The findings file holds one low finding; nothing blocks hosting.\n\n**What I checked**\n\n- **Export matches source.** A fresh Vite build from `web/src` produced the four assets in `dist/assets` byte for byte, and the same index page. The committed export is what the source says it is.\n- **Scripts read.** The bundle references only wallet SDK hosts, the two pinned RPCs plus wallet-provided ones, api.imd.fun, explorer.imd.fun, GitHub and docs links. No iframe, eval, remote code loading, seed-phrase prompt or undisclosed endpoint. Signing methods present are the ordinary wallet ones used by wagmi.\n- **Unit tests.** The oracle feed and swarm unit suites pass, 17 of 17.\n- **Real browser.** I installed the Playwright Chromium headless shell and its missing system libraries outside the repository, then ran the project's ten-group feed check against the export. All ten groups pass. Screenshots in test/scratch show item 2's waiting indicator, item 3's per-seat spinners and \"No answer\" after attestation or failure, item 4's explorer link, item 5's two-line preview with \"Show full question\", item 6's \"9 / 11 answers · 7 true / 7 needed\" and the \"Panel agreed\" texts, and item 7's \"Answer: true\" rows with no figure. Item 1's wallet guard, including uppercase matching and the mismatch message with the named wallet, passes in both the matched and the Intake or Verified paths, and in the confirmed-result dialog.\n\n**Finding (low, advisory)**\n\n- The Explorer page mounts the feed from its settlement panel without a connected wallet. For a personal request the feed then shows \"This request is not about your wallet.\" with the claimant's shortened address, because `web/src/swarm.tsx:201` passes an undefined wallet into the comparison. No panel answers are shown, which is the safe outcome, but the message is misleading. Reproduction is in the findings file.\n\nNo files in the tree were changed. The only writes were the findings file and the scratch screenshots under test/scratch, which are not kept.","treeHash":null,"usage":{"cachedInputTokens":834844,"inputTokens":450,"model":"claude-fable-5-1","outputTokens":15873,"runtime":"claude","turns":28,"wallClockMs":294466}},{"artifacts":[],"attempt":1,"bundleHash":"057fcddc4b2e9e5dc0e4dd357a8843f1c6cca02ea4aedf98870f037906a3fad6","device":"c0f94d5c3d395bef","findings":[],"hash":"afc588d10fcc81e5d91a1d51afa9b19489c714bd85b058d72ea0fc61e180d530","nodeId":"3fa7b7cc-6dc1-4cd2-899f-a6f5fb65bee8","outcome":"completed","summary":"Implemented all seven oracle-feed changes and rebuilt `dist/`.\n\nBuild, typecheck, 70 unit/export tests and Chromium interaction/layout checks passed. Per-item browser results and design review are recorded in `web/TEST-NOTES.md`. The bundle is 7.91 MiB.\n\nWebKit could not launch because required runtime libraries were unavailable.","treeHash":"7d04879fbc2488c7faaa2b5a58f096a064cb5208","usage":{"cachedInputTokens":7230080,"inputTokens":193361,"model":"gpt-6.1-sol","outputTokens":45989,"runtime":"codex","turns":8,"wallClockMs":1232515}}],"verification":[{"checks":[],"detail":"paths and tree verified; no suite was run for this kind of work","evaluation":"structural","profile":"none","status":"accepted","submissionHash":"afc588d10fcc81e5d91a1d51afa9b19489c714bd85b058d72ea0fc61e180d530","verifiedTreeHash":"7d04879fbc2488c7faaa2b5a58f096a064cb5208","verifierVersion":"0.1.0+560ab6a2"}]}