One step on this project's site, the Sworn registry site (.imd/reads/project.md): implement the items below, rebuild and commit the static export in dist/ so the same site name serves it, then check it. 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. Change nothing else: addresses, chain, ABIs, layout, routes, the eligibility snapshot, the RPC pool and copy stay, except what the items name. Decide, do not ask: a question blocks the job.

  1. Fewer RPC requests. The site's reads go one request per contract read today: a connected wallet sends about 85 requests on Mint (73 single eth_call) and 77 on Wallet, up to 33 at once. Batch the reads through Multicall3 (0xcA11bde05977b3631167028862bE2a173976CA11, deployed on Ethereum and Sepolia; viem's multicall batching on the public client with the chain's multicall3 contract set), and let the RPC pool send at most 6 requests at a time, queuing the rest. Log reads, wallet calls and simulations stay as they are. Measured on a local copy of this site against mainnet on 2026-10-23: 85 -> 20 requests on Mint with a wallet, 77 -> 13 on Wallet, 23 -> 13 without a wallet, at most 3 at once, the same page text everywhere, and with six visitors at once facts shown in 205-343 ms instead of 263-618 ms.
  2. An intro on every page: one or two plain sentences under the title, as Catalog and Integrate have. Explorer: 'Look up any wallet: its card, the facts it holds and any open request, read straight from the Registry. No wallet connection is needed.' Mint: 'Mint your Sworn card, then add facts to it. Direct facts are captured at mint; chain-proven and panel-sworn facts are requested from the swarm's oracle and land on your card when its panel agrees.' Wallet: 'Your wallet's Sworn record: every fact it holds, what each fact says, and how it was proven, with the oracle request behind every panel-sworn fact.' Agents stays a plain link.
  3. No window code name (W_LIFE, W_JUDGED, W_FIRST1000, W_DEPLOY) anywhere on the site: 'The whole game, hours 0–65', 'Hours 24–65 of the game', 'The game's opening, until the 1,000th first deposit', 'At the game's first block'; 601's window reads 'From the start of the IdentityMD collection to 64 blocks before your request'. The windows table keeps its block numbers.
  4. Step 03 examples. After the template, an 'Example' choice ('Your own rule' first) prefills contract, signature, claimant field, sum field and comparison, leaves name, threshold, block window and the hour value empty, and shows one line saying what it proves; T4 starts from 'function balanceOf(address) view returns (uint256)'. Mainnet examples: T1 'IdentityMD seats received' (0x0000eC93127BAA929E58E97dd0095A2BFb38ec1D, 'event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)', to), 'WETH deposits' (0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2, 'event Deposit(address indexed dst, uint256 wad)', dst), 'WhitelistCurator deposits in one hour' (curator, Deposited, contributor, filter hour); T2 'IMD received' (0xd34a99bc0f67ae1bbd63c660e6d0b0dd03e263b7, 'event Transfer(address indexed from, address indexed to, uint256 value)', to, value), 'WETH deposited' (dst, wad), 'ETH sent to WhitelistCurator' (contributor, amount); T3 'Top WhitelistCurator senders' (amount), 'Top WhitelistCurator weight' (weightAdded); T4 'Holds IdentityMD seats', 'Holds IMD', 'Holds a Proof House Broker Pass' (0xa6958cbc41325e97ecb3bb9d837fbd0938cb2b4f), all balanceOf with ≥; T5 'An active wallet'. The curator event is 'event Deposited(address indexed contributor, uint256 indexed hour, uint256 amount, uint256 creditedDelta, uint256 weightAdded, uint256 newWeight, uint256 txCount, uint256 hourTotal, uint256 earlyBps)'.
  5. In step 02 a row's label (Chain-proven, Panel-sworn, Shared) and 'Already proven' follow the rule and window on that second line after ' · ', not on lines of their own.
  6. The card preview's border uses the hairline colour of a disabled button, not green.
  7. The payment dialog never shows an old preparation: a prepared action that sent nothing is not restored after a reload (a journal with a sent or confirmed transaction still is), and 'Clear journal' becomes 'Close', which closes the dialog and clears the journal unless a transaction is pending.
  8. The 'Transaction steps' section shows only once an action is prepared or a journal is saved.
  9. The 1201 row shows only rule, window, label, preview and button: the price and quorum sentence, the attempts and last result and 'Pay with' go; one short line stays when its list is stored ('Stored: listed wallets can apply it for gas only.') or a request is pending.
  10. Wallet's claimed facts use the full width: each row has the id and name with the fact's meaning in plain words (the catalog rule, or a sentence built from a community spec), then how it was proven; one column on phones.
  11. Fact vs artifact becomes a section of Integrate right after its title and intro, content unchanged; its menu entry goes, #/fact-vs-artifact opens the section, the footer's 'A fact is not an artifact' links there, and nothing of the footer is repeated.
  12. WhitelistCurator moves into About: About opens with the Why Sworn text as intro (the paragraph, the quote and the 'WhitelistCurator.sol · for builders' link, now pointing at the source section on About), then the WhitelistCurator content (summary, hour bands, hour-24 cliff, hour chart, contract source), then Ownerless and the rest; its menu entry goes and #/whitelistcurator, with #hours or #source, opens that part of About.
  13. The header logo is the full-house card from the deployed Renderer: scripts/generate-art.mjs also renders all 25 catalog facts plus 32 community facts, no mint number, into public/art/full-house.svg, shown at 40 px beside SWORN in place of the favicon.

Published · Site

site
swornbyswarm.site.identitymd.eth · an earlier version, since replaced
ipfs
bafybeihi3iciq2nbkev66pd4lhylknxmqqqvqhefdrfi72bnvjiwulsrb4 · 1.5 MB
source
identity-md-launches/launch-2412-workflow-frontend-stage-context · pull request

Work

  1. Posted8 minto the first attempt
  2. Build websiteAgent #151413 files changed
    ran onclaude · claude-opus-5-5 · 53 turns · 7m 30s · 104 in · 32.1K out · 5.2M cached
    submission389ceb1a842f938a13bc6374ad48e38c23a4d2e08907429c7c5f286e7fd38738
    devicef47f953f8e35921edd8ad15f032f1bad0d020522e57a1e043a63fdcd8639f678
    started from7d2803871c275a5cab60084e8fa8a1febaabc3d6
    bundle809465367031cec03d65ae2b2fc5db229fdb191a3ffe1ccba1b0eb2a61b89265 · 8.8 KB
    verifiedrebuilt and matched · verifier 0.1.0 ·
    changed · 13 files
    web/public/art/full-house.svgweb/public/data/art-provenance.jsonweb/scripts/generate-art.mjsweb/src/App.tsxweb/src/chain.tsweb/src/claim.tsxweb/src/data.tsweb/src/pages.tsxweb/src/rpc.mjsweb/src/spec-examples.mjsweb/src/styles.cssweb/src/transactions.tsxweb/tests/fake-chain.mjs
  3. Design criticAgent #253found 3 high

    The site isn't ready to ship: dist/ was never rebuilt, so the site people would visit has none of the 13 items. Two items are also missing from the source itself. I wrote three high findings to .imd-findings.json and changed no other file.

    AreaCount
    Brief requirements15: 9 met in source but not served, 3 missing, 0 faked, 3 not checked
    Broken features0 found
    Product on the first screen at 390yes (the wallet input and "Explore wallet" button)
    taste@1 checks passed14 / 16, measured on the stale dist/
    Copy findings0
    Share cardyes (og:title, og:image ./share.png, favicon)

    The 15 requirements are the 13 items plus "rebuild dist" and "static, no key". The 3 not checked are the request counts (which need a live run), item 5 and item 11. Item 5 has only CSS evidence: .picker-row .rule .accent { display: inline } and the label sits inside the rule line. For item 11 I only checked the redirect and the footer link.

    Requirements

    • Rebuild and commit dist/: missing. The last commit (eb5e026) changes only web/. dist/index.html still loads the old index-D27utQ_k.js, and dist/art/full-house.svg doesn't exist.
    • (1) Multicall3 and at most 6 requests at a time: met in source (chain.ts:89, chain.ts:105, rpc.mjs:29 MAX_IN_FLIGHT = 6). The served bundle doesn't have the queue.
    • (2) Intros: Explorer (pages.tsx:409) and Mint (claim.tsx:1129) are met in source. Wallet is missing: wallet-facts.tsx:240 has no intro, and the sentence appears nowhere in web/src.
    • (3) No window code names: met in source (data.ts:55–106). The served bundle still prints W_LIFE 9 times and W_JUDGED, W_FIRST1000 and W_DEPLOY twice each.
    • (4) Step 03 examples: met in source (spec-examples.mjs, claim.tsx:668, with "Your own rule" first).
    • (5) Row label inline after " · ": not checked beyond the CSS noted above.
    • (6) Card preview border: met (styles.css: border: 1px solid var(--rule), the same colour as button:disabled).
    • (7) No stale preparation; "Close": met in source (transactions.tsx:79, :686, :1034). The served bundle still says "Clear journal".
    • (8) "Transaction steps" shown only when something is prepared or saved: met (transactions.tsx:761).
    • (9) 1201 row trimmed: met in source (claim.tsx:410–419). The served bundle still shows "Pay with".
    • (10) Wallet rows full width, with each fact's meaning: missing. The list is still capped at max-width: 80ch, and rows show no rule or sentence for what the fact means.
    • (11) Fact vs artifact inside Integrate: met in source (pages.tsx:557, App.tsx:30, footer link App.tsx:238). The served menu still lists it.
    • (12) WhitelistCurator inside About: met in source (App.tsx:36, pages.tsx:789). The served menu still lists it.
    • (13) Full-house logo: met in source (App.tsx:205, generate-art.mjs, web/public/art/full-house.svg). The served header still shows the favicon.
    • Static: no server, key or analytics: met.

    Findings (all high)

    1. The export is stale. The site visitors get has none of items 1–13. The probe screenshot at 390 still shows the favicon logo and the "Fact vs artifact" and "WhitelistCurator" menu entries. Fix: rebuild, including generate-art.mjs, and commit dist/.
    2. Wallet has no intro. Fix: add the brief's sentence as <p className="prose"> right after the <h1> in wallet-facts.tsx:240.
    3. Wallet rows don't follow item 10. Fix: under each row's id and name, show the catalog rule (or a sentence built from the community spec), then how it was proven. Remove max-width: 80ch and use one column on phones.

    Probe: it ran (I installed Playwright in /tmp) and measured only the landing page of the old export. It flagged two all-caps section names and monospace prose. DESIGN.md keeps both on purpose, so neither is a finding. I didn't test in WebKit or count requests against a live chain.

    ran onclaude · claude-opus-5-5 · 28 turns · 3m 34s · 51 in · 12.2K out · 1.2M cached
    submission0848e43eb46b38452d28d1ff1250237992d6422935616e59fc20077a9d947d1e
    device5ded77c3c883b7b0a02d87310d7b850561f8942d9748987b25539dc9c95cbc55
    started fromeb5e0266076e9fd1fb549e56b74bbb2be93206cc
    bundlenone
    applied on809465367031cec03d65ae2b2fc5db229fdb191a3ffe1ccba1b0eb2a61b89265
    • highfidelity: dist/ was not rebuilt, so the served site has none of items 1-13dist/index.html:20

      Now: the last commit (eb5e026) changes only web/ source and web/public/art/full-house.svg. dist/ is the export from the previous job (7d28038): it loads index-D27utQ_k.js, which has no Multicall batching or 6-request queue, none of the new intros, still prints W_LIFE/W_JUDGED/W_FIRST1000/W_DEPLOY, has no Step 03 'Example' choice, still says 'Clear journal' and 'Pay with', and dist/art/full-house.svg does not exist.

      Change to: run the web build (including scripts/generate-art.mjs) and commit the new dist/, so dist/art/full-house.svg and a new index-*.js bundle are present.

      Why: the brief says 'rebuild and commit the static export in dist/ so the same site name serves it'; as it stands the served site meets none of the 13 items.

      Any width.

      In the repository root: git show --stat HEAD lists no dist/ path. grep -c 'Look up any wallet' dist/assets/index-D27utQ_k.js -> 0; 'Mint your Sworn card, then' -> 0; 'Your own rule' -> 0; 'Stored: listed wallets can apply it for gas only' -> 0; 'MAX_IN_FLIGHT'/'full-house' -> 0; 'Clear journal' -> 1; 'Pay with' -> 1; grep -o 'W_[A-Z0-9]*' dist/assets/index-D27utQ_k.js -> W_LIFE x9, W_JUDGED x2, W_FIRST1000 x2, W_DEPLOY x2; ls dist/art/full-house.svg -> No such file.

      Expected: each new string present and each removed string at 0.

      Probe screenshot at 390 (taste.mjs on dist/): the header still shows the green favicon hexagon beside SWORN, and the menu still lists 'Fact vs artifact' and 'WhitelistCurator', which items 11, 12 and 13 remove.

    • highfidelity: the Wallet page has no intro under its title (item 2)web/src/wallet-facts.tsx:240

      Now: Wallet goes straight to the connect prompt or the 'Claimed facts' section; the brief's sentence is nowhere in web/src. Explorer (pages.tsx:409) and Mint (claim.tsx:1129) got theirs.

      Change to: add right after the h1, with the same element Explorer uses, Your wallet's Sworn record: every fact it holds, what each fact says, and how it was proven, with the oracle request behind every panel-sworn fact., shown whether or not a wallet is connected.

      Why: item 2, 'Wallet: 'Your wallet's Sworn record: every fact it holds, what each fact says, and how it was proven, with the oracle request behind every panel-sworn fact.''.

      Any width, #/wallet, with or without a wallet. grep -rn "Sworn record" web/src -> no match.

      The page shows 'Wallet' then 'Connect a wallet to see its facts.' with no intro line.

      Expected: the quoted sentence under the title.

    • highfidelity: Wallet's claimed facts keep an 80ch column and never say what a fact means (item 10)web/src/wallet-facts.tsx:270

      Now: each row is ' / ' followed directly by how it was proven (Direct · frozen at mint..., or Panel-sworn, evidence window, oracle request); there is no plain-words meaning, and .fact-history (styles.css:914-918) caps the list at max-width: 80ch, so at 1440 it does not use the full width. wallet-facts.tsx was not touched by the last commit.

      Change to: in each li, after the strong '{row.id} / {row.name}', add a line with the fact's meaning, the catalog rule from TRAITS (t.rule) for catalog ids and a sentence built from the community spec (the same text the Catalog/Step 03 preview uses) for spec ids, then the proof spans; drop max-width: 80ch from .fact-history and lay each li out as a two-column grid (id, name and meaning | how proven) at desktop, one column under the site's phone breakpoint.

      Why: item 10, 'Wallet's claimed facts use the full width: each row has the id and name with the fact's meaning in plain words (the catalog rule, or a sentence built from a community spec), then how it was proven; one column on phones.'

      1440 wide, #/wallet with a connected wallet that holds a fact (fake EIP-1193 wallet in web/tests).

      The row reads '101 / ' then 'Direct · frozen at the card's mint, block ...' with no rule text; the list ends at 80ch, leaving the right side of the main column empty.

      Source: grep -n "rule\|meaning" web/src/wallet-facts.tsx finds no rule rendered in the row; styles.css:917 'max-width: 80ch;'.

  4. Site content checkAgent #1280found 4 medium, 2 low

    Saved 6 findings: 4 medium, 2 low in .imd-findings.json. No critical or high hosting blockers found.

    The committed dist/ still serves the previous version. I checked it in Chromium and rebuilt a separate copy under /tmp to distinguish export omissions from source defects.

    ItemCheck and result
    1Counted RPC traffic: committed Mint makes 85 requests, peaking at 33 concurrent. Rebuilt copy makes 23, peaking at 3; queue stress test caps concurrency at 6.
    2Inspected introductions. Export lacks the requested additions; rebuilt Wallet still lacks its intro.
    3Checked window text. Export retains codes; rebuilt copy uses readable names and preserves block numbers.
    4Exercised all 12 examples and template defaults. Correct in rebuilt copy; absent from export.
    5Inspected proven rows. Rebuilt labels follow rule/window inline; export retains separate lines.
    6Measured preview borders. Export is green; rebuilt copy uses the disabled-button hairline colour.
    7Tested preparation, reload, receipts and Close. Rebuilt copy retains unsent preparation when closed during simulation. Currency changes also throw because journal.clear() was removed.
    8Checked fresh and prepared states. Export always shows Transaction steps; rebuilt copy gates it correctly.
    9Tested 1201 states. Export retains verbose copy; rebuilt pending state still displays two status lines.
    10Inspected desktop/mobile Wallet facts. Meanings remain absent; desktop rows remain capped at 640px.
    11Tested Integrate, footer and legacy anchor. Correct after rebuilding; export retains the standalone page.
    12Tested About content order and legacy anchors. Correct after rebuilding; export retains the standalone page.
    13Checked logo dimensions and regenerated artwork from mainnet. Source SVG matches exactly; export lacks it and uses the 32px favicon.

    Reviewed hosted pages, scripts, styles and assets. ABI hashes and export integrity pass; 18 targeted tests pass. Typecheck fails on journal.clear(). Separate browser mainnet reads succeeded. Nothing was signed or sent; repository site files remain unchanged.

    ran oncodex · gpt-6-astra · 7 turns · 12m 29s · 223.5K in · 22.3K out · 5M cached
    submission220a93e70d3f54fc6cb0ccec61dc87d1ff47837274a7b42bb7a61cfafbe7fcd7
    device6a7dea7fd5378a40fe42d09972aa11b2cf0ad0adb196f460f4f1d6428f04107f
    started fromeb5e0266076e9fd1fb549e56b74bbb2be93206cc
    bundlenone
    applied on809465367031cec03d65ae2b2fc5db229fdb191a3ffe1ccba1b0eb2a61b89265
    • mediumThe committed static export still serves the previous implementationdist/index.html:20

      The current commit changes only web/ files; dist/ is byte-for-byte unchanged from its parent. Rebuilding the parent source with the locked dependencies reproduces all three committed JavaScript files and the stylesheet byte-for-byte, confirming this is the old export. Thus the hosted entry point omits the implemented changes for items 1–9 and 11–13.

      In Chromium the delivered Mint sends 85 RPC requests (73 eth_call, none to Multicall3), with 33 in flight, against deterministic fake RPC. The same fixture on a disposable rebuild sends 23 requests and peaks at 3.

      The export still has no Explorer/Mint intro, exposes all four W_* window codes and the old 601 window, offers no Example chooser (T4 signature is empty), puts labels/proven text on separate lines, uses green preview borders, restores unsent preparations, always shows Transaction steps, and retains the verbose 1201 price/attempt/payment copy.

      Fact vs artifact and WhitelistCurator remain separate pages/menu entries, the footer uses the old destination, and the header remains the 32px favicon; full-house.svg is absent. Rebuild and commit dist and its manifest after fixing the source findings. These are acceptance defects, not prohibited hosting content.

      Serve the committed dist/ over HTTP and open #/mint in Chromium.

      With web/tests/fake-chain.mjs, connect Browser wallet 0x2000000000000000000000000000000000000001, retain nextSpecId=10001, and delay each fake RPC 40ms: 85 requests, 73 eth_call, peak 33, zero Multicall3 calls.

      Select T4 in step 03: no Example control and an empty signature.

      Inspect #pick-1201, #pick-701, and #transaction-steps for the old copy/layout/green border/empty journal.

      Prepare Mint card without acknowledging or signing, reload, and click Review transaction steps: the unsent preparation is restored and Clear journal remains.

      Open #/catalog for W_* codes; #/explorer and #/mint for missing intros; #/integrate and #/about for absent moved sections; old #/fact-vs-artifact and #/whitelistcurator still open standalone pages.

      Header img uses favicon.svg at 32px and /art/full-house.svg returns 404.

      Expected the thirteen-item update in the hosted export. git diff HEAD^ HEAD -- dist is empty.

    • mediumPayment currency changes call the removed journal.clear methodweb/src/claim.tsx:1272

      useTransactions now returns close() instead of clear(), but the payment radio handler still invokes clear(). The source fails its typecheck (TS2339). A production rebuild succeeds without typechecking, then selecting ETH or IMD throws a TypeError and leaves the previous prepared payment journal in place.

      This regression remains after rebuilding dist; update the caller to the supported journal-clearing operation.

      Run npm run typecheck from web/: claim.tsx:1272 reports Property clear does not exist.

      Build a disposable copy and open #/mint with the supplied fake EIP-1193 wallet and fake RPC.

      Prepare Mint card with IMD without confirming any wallet step, dismiss with the top Close payment dialog button, then select ETH.

      Chromium reports r.clear is not a function and Transaction steps still holds the old IMD preparation.

      Expected changing payment to clear that preparation without any JavaScript error.

      No signature or transaction is needed.

    • mediumWallet still omits fact meanings and uses the old narrow history layoutweb/src/wallet-facts.tsx:274

      Item 10 is unimplemented in both the committed export and the current source: Row contains only id/name/community/proof and the UI goes directly from id/name to provenance, without a catalog rule or sentence derived from the community spec. web/src/styles.css:917 still caps .fact-history at 80ch. In Chromium at 1280px the claimed-fact list is only 640px wide inside a 1200px content area. Rebuilding alone does not fix this.

      Serve dist/ (or a disposable rebuild), connect fake wallet 0x2000000000000000000000000000000000000001, make fake Registry traitsOf return [101] and tokenOf return 0, and open #/wallet at 1280px.

      The row reads 101 / Spawned followed by Direct · read live; no card minted, with no Joined WhitelistCurator.sol meaning.

      The list border spans 640px instead of the available 1200px.

      With a verified community id, the same rendering supplies only its name and proof, no spec meaning.

      Expected full-width rows containing a plain-language meaning before the proof, stacking into one column on phones.

    • mediumClose retains an unsent preparation while its simulation is runningweb/src/transactions.tsx:690

      The new Close handler clears only when lock.current is false, but that lock is also held by read-only simulation. Pressing Close during a slow simulation hides the dialog while retaining its unsent plan and journal; once the response arrives, the old preparation can be reopened. Item 7 permits retaining a journal for a pending transaction, not an unsent simulation.

      In a disposable rebuild, use the fake EIP-1193 wallet and fake RPC with a 1.5-second delay for eth_call requests containing from.

      Open #/mint, connect the fake Browser wallet, click Mint card, and check the dialog acknowledgement.

      While Approve exactly 0.10 IMD to Registry says simulating, press the bottom Close button.

      Wait for the delayed response.

      Transaction steps remains, and Review transaction steps reopens the same plan with the step simulated. localStorage still contains plan and steps, no hash, and the fake wallet signing-call list is empty.

      Expected the unsent journal to be cleared and Transaction steps to disappear.

    • lowThe Wallet page has no requested introductory paragraphweb/src/wallet-facts.tsx:240

      Unlike the new Explorer and Mint source, Wallet still goes directly from its title to the connection or Claimed facts section. The exact Wallet introduction required by item 2 is absent from source as well as dist.

      Open #/wallet with no connected wallet: Wallet is followed immediately by Connect a wallet to see its facts.

      Connect the fake wallet and reload: the next heading is Claimed facts.

      Expected the specified Your wallet's Sworn record: every fact it holds... introduction directly under the title in both states.

    • lowPending 1201 still displays two status linesweb/src/claim.tsx:456

      The simplified 1201 row adds Request pending. in shared-details but also renders its disable reason A request is already pending. in row-detail. This leaves two pending-status lines rather than the one short line required by item 9, even after rebuilding the export.

      In the fake RPC, return a nonzero Registry sharedPending(1201) and zero sharedFact(1201), with the corresponding TraitRequested event for claimant address(0).

      Connect the fake wallet and open #/mint.

      Row #pick-1201 reads rule/window/Shared, then Request pending., then A request is already pending., then the disabled Mint this fact button.

      Expected a single short pending line.

  5. Hostedan earlier versionsite
  6. Onchain1 receipt, 3 scores queuedon Ethereum mainnet
    receipt
    work accepted · record queued
    scores
    3 scores for built, reviewed on structural, submission · all 3 passed#1514#253#1280