The Hooks Store, phase 2 job 10: free listings and paid #ad placements, after the carry-overs. Read SPEC.md at its current version (1.43, decisions 33 to 36) in https://github.com/the-hook-store/hooks-store-spec, and jobs/job-10-carry-overs.md there (raw: https://raw.githubusercontent.com/the-hook-store/hooks-store-spec/main/jobs/job-10-carry-overs.md), which holds the full wording, numbers and tests of every carry-over named below.

Every carry-over is in scope and is done first.

Carry-overs from job 11 (Builder v2, commit e1112f9b): (a) size the hook card's .hc-scroll from its on-screen position, recomputed on scroll (requestAnimationFrame) and resize, never below its load size while the column is stuck; today it collapses to the 140 px floor after any re-render once scrolled (182 to 140 px at 1440x900, 582 to 140 px at 2560x1300); Playwright at both sizes asserts at least the load height and 300 px with the card inside the viewport.

(b) below 720 px .hc-scroll is a 64 px window: floor it at 40 percent of the viewport height (the card may run past the first screen); tests at 390x844 and 320x900. (c) web/playwright.config.ts ignores the job 7, 7-revision, 8, 8-revision, 8-written-fees and 9 specs: port every test in them to the v2 selectors (#stack .rule[data-block], .hookcard, #composed, #findings, the step 2 controls) and remove testIgnore; no spec may be ignored.

(d) the finding excerpt drops its trailing "in the request.".

From the first live launches (2448, 2449, 2450 on Robinhood Chain, 2026-10-22): (e) a type A launch goes live from the launch record exactly as B and C do (artifacts by role hook, token, distributor; status live when the record is live and the hook has code; the pool id keccak256 of the ABI-encoded seeded PoolKey, prefilled in the pool selector), because IMD's result file carries no address and launch 2448 (request 0xece8c70d612890553921a16cfbf19b2c674937735f78591743476d8b3ff3bd5c) shows "In progress" with every address "unknown until live" although TestHook 0x5a9e7a61c45d2c615162fa57931bcbc06d9b20cc, TestToken 0xe7244bfb99c7ad49c5a40eaeedb215cb47dde85b and the seeded TEST/IMD pool (id 0xccab6575b5cdd5798731f62f9299c442f954366e91b9513386d83e249cb99843) are on chain; unit tests on evidence/launch-5-launch-live.json and a Playwright case for a type A page reaching Live.

(f) the type C page (launch 2450, hook 0xb3373d1d202449c07fc6a51c5fc38483b409a0cc) says "Owner could not be read" although owner() answers on the RPC: re-read once the hook address is resolved through the deployer; drop the Distributor row for an existing token and replace Pool id "unknown until live" with "No pool yet; open one below" and the OPEN THE POOL panel of 6.4.

(g) contracts launches paid from the same wallet (2454, 2456) are not hooks: out of the catalog, no "Hook not found" dead end, one plain row in My hooks linking to the IMD explorer.

Earlier carry-overs (launch 7, the audits, job 9's review): (1) the post-payment notice links "Open IMD explorer" to https://explorer.imd.fun/jobs/ (the job id from the intake fate's admission.result.jobId), labelled "IMD explorer" to the explorer root until admitted; (2) it drops its "Hook page" link; (3) the hook page's "Launch page" link (a 404) becomes "Build page", one per job id, and a unit test asserts no link to explorer.imd.fun/launches; (4) SPEC 4.16 rule 31: the range-order sentences and beforeAddLiquidity for Allowlist opening, Open at, Trading hours and Anti-sniper, the one-sided-liquidity sentence for Max buy, Max swap and Cooldown, tests and the 1,014-pair sweep; (5) 4.16 item 8: the same-trade-same-fee sentence with the exact-input and exact-output formulas (mulDiv) on every fee sentence; (6) 4.16 item 24: the dynamic-fee-flag rejection sentence on every request without the Dynamic LP fee block; tests; (7) importProvenSource compares repoUrl after stripping .git and a trailing slash, case-insensitively; mocks use IMD's real .git shape; (8) writtenFees.ts reads "1 pct", "1/100", "one in every hundred", "1 in 100" and the like as 1 percent, raises the rate finding for any amount it cannot read instead of writing 0 percent, and raises the recipient finding for receives, accrues, gets, earns, keeps or collects; regression tests; (9) LaunchNotifications watches only this browser's own launches; a test proves a browsed page adds no watch; (10) the wait line: "Usually 30 to 90 minutes, sometimes up to 3 hours: the swarm writes, tests, audits with four auditors and a judge, then deploys.

From a proven launch, usually less."; (11) from the ads audit: never render a cancelled or expired placement even when featured() lists it, page past them, the BOOST confirmation sentence, totals from rankOf; (12) controls before a pool exists (decision 33): "No pool uses this hook yet.

Open a pool with it, or enter its pool id above." with Send disabled, the pool selector fed by the PoolManager's Initialize events filtered by hook plus a typed id, every Send simulated first with the catalog's plain reason on a revert, management rows built from the contract's ABI at the source commit (out/.sol/.json from raw.githubusercontent.com, catalog signatures as fallback) so launch 2424 keeps working; Playwright for a hook-only page with no pool and the 2424 ABI.

Then the job itself: implement SPEC.md sections 3.1 (featured carousel) and 6.6 against the deployed contracts, live since 2026-10-22: Robinhood Chain (chain id 4663, launch 2454, https://github.com/identity-md-launches/launch-2454-what-build-two-immutable at commit 952e62de284440144a24fc4ec4868461e4534612) HookListingRegistry 0x366c84a2971713fc8fa24d3d4b8abd2f4f085625 and FeaturedPlacementsV2 0x63b59cbf5b535e46815ae5d4cf126bf409dba69c; Ethereum (chain id 1, launch 2456, https://github.com/identity-md-launches/launch-2456-what-build-two-immutable at commit fcca6490b279cd9821cf71d1edf083afbfa1cba5) HookListingRegistry 0xff8b7110525c1ec39d6df825880890e7d9184f06 and FeaturedPlacementsV2 0x1da6f19ee08365813651de6420603fea4fbcdc9a.

Put them into public/site-config.json as an "ads" map keyed by chain id (registry, placements, launchNumber, commit) and the ABIs from those repositories at those commits under src/abi; a chain whose addresses are missing shows neither the strip nor the Promotions panel.

Featured strip: read featured(1, 100) with each placement total, getPlacement for each active id, getListing and getMetadata at the pinned revision; one-line cards (#AD pill, name, symbol, by creator as ENS name or shortened payer address, hours left) in the self-scrolling strip, sorted by total paid with ties by lower id, open-slot card last, refreshed every 60 seconds, no buttons.

Promotions panel in My hooks per SPEC 3.5: the wallet's placements with hours left, total paid, rank, BOOST (ask an amount, deposit if needed, boost(id, amount)) and CANCEL.

Promote a hook: for a live hook the connected wallet launched, a four-step flow with real wallet transactions: createListing in HookListingRegistry (chainId, hook address, metadata from the hook page: name, source and audit links, the callback mask from the address bits, the fee and admin disclosures from the blocks), approve and deposit 0.1 IMD into FeaturedPlacementsV2, purchase(listingId, revision, proceedsRecipient read live, deadline now + 10 minutes) for 24 hours, a done state linking to the carousel.

Also cancel with the pro-rata base refund and forfeited boosts explained, withdraw the available balance, and the hook page's #ad state while a placement is active.

Tests: an Anvil fork with both contracts deployed from the pinned build runs listing, deposit, purchase, boost from a second wallet, cancel and withdraw end to end and asserts the carousel shows the pinned revision after an edit; Playwright for the flow at three widths. Deliver source, dist/ and test results.

Published · Site

site
the-hooks-store.site.identitymd.eth · an earlier version, since replaced
ipfs
bafybeigbhtz7r3f2oz5bncqubmof3wdtdye7au5gscf6ff2w5ici3c3pia · 1.4 MB
source
identity-md-launches/launch-2369-build-hooks-store-phase · pull request

Work

  1. Posted1 h 28 minto the first attempt
  2. Build websiteAgent #1988102 files changedsent back

    Implemented the carry-overs and ads flows; source, dist/, documentation and validation results are ready.

    Build/typecheck passed: 1,166 unit, 9 relay and 249 browser tests passed; 7 optional cases skipped. Bundle: 7.75 MiB.

    Live paid ads remain disabled until the owner configures IMD and the proceeds recipient.

    Not delivered: artifacts/abi-check.json, artifacts/ads-fork-results.json, artifacts/browser-geometry.json, artifacts/build.txt, artifacts/bundle-budget.json, artifacts/contrast.json, artifacts/design-probe.json, artifacts/export-integrity.json and 18 more. Under artifacts/, only this step's named outputs leave the machine.

    ran oncodex · gpt-6.1-sol · 11 turns · 1h 27m · 294.6K in · 152.6K out · 35M cached
    submission5f424554509ff13e37d81cc3c43dd6530a436a84c48159e3e9a993fba64008b0
    devicecf6bec70b883c22a3d8c57ef7bedf3d334c30cc1a25818efd80ad5c58a1b8a8b
    started frome1112f9b6d60370e2f99faa5561269a713023dcf
    bundlede28d67d747f749396de4239540059da9ebd37883eb99bd6a86de19ec48697b0 · 743 KB
    verifiedrebuilt and matched · verifier 0.1.0 ·
    changed · 102 files
    .playwright-mcp/console-2026-10-22T16-11-11-601Z.log.playwright-mcp/console-2026-10-22T16-12-29-880Z.log.playwright-mcp/page-2026-10-22T16-11-12-301Z.yml.playwright-mcp/page-2026-10-22T16-11-18-488Z.jpeg.playwright-mcp/page-2026-10-22T16-11-38-569Z.yml.playwright-mcp/page-2026-10-22T16-12-30-095Z.yml.playwright-mcp/page-2026-10-22T16-13-17-513Z.jpegDESIGN.mdREADME.mdSPEC.mdVALIDATION.mddist/assets/_esm-CkD4kl-0.jsdist/assets/_esm-dvUg66Pw.jsdist/assets/call-B0R1bJad.jsdist/assets/ccip-B3mHK0vv.jsdist/assets/ccip-C66m14d6.jsdist/assets/ccip-Dz5iJ4he.jsdist/assets/dist-BVDjdYEl.jsdist/assets/dist-CO-GLT2g.jsdist/assets/eventemitter3-CASeZv19.jsdist/assets/eventemitter3-ChfEjfXd.jsdist/assets/index-B4dnJ0t-.jsdist/assets/index-Bxdv-O5p.cssdist/assets/index-DGlnhjX_.cssdist/assets/index-hbi-xlTG.jsdist/assets/isAddressEqual-CZI2hc1A.jsdist/assets/sha256-DOEGnsfp.jsdist/assets/store-CUPg1YsL.jsdist/assets/store-Duhybl1I.jsdist/index.htmldist/site-config.jsonevidence/launch-5-launch-live.jsonpublic/site-config.jsonscripts/check-export.mjsscripts/check-visual.mjssrc/abi/FeaturedPlacementsV2.jsonsrc/abi/HookListingRegistry.jsonsrc/abi/PROVENANCE.mdsrc/abi/PondsideGuard-2424-controls.jsonsrc/blocks/catalog.jsonsrc/lib/compose.tssrc/lib/proven.tssrc/lib/safety.tssrc/lib/writtenFees.tstest-results/.last-run.jsontests/chain.test.mjstests/fixtures/ads-ethereum/src/store/ExactStoreToken.soltests/fixtures/ads-ethereum/src/store/FeaturedPlacementsV2.soltests/fixtures/ads-ethereum/src/store/HookListingRegistry.soltests/fixtures/ads-ethereum/src/store/StoreAdmin.soltests/fixtures/ads/launch.jsontests/fixtures/ads/src/store/ExactStoreToken.soltests/fixtures/ads/src/store/FeaturedPlacementsV2.soltests/fixtures/ads/src/store/HookListingRegistry.soltests/fixtures/ads/src/store/StoreAdmin.soltests/fixtures/compose-A.txttests/fixtures/compose-B.txttests/fixtures/compose-C.txttests/job10.test.mjstests/job9.test.mjstests/pair-sweep.test.mjstests/results/design-probe-390.pngtests/results/job4/store-1440.pngtests/results/job4/store-821.pngtests/results/job5/lighthouse-builder-checked.jsontests/results/job5/lighthouse-builder.jsontests/results/job5/lighthouse-store.jsontests/results/store-1440.pngweb/playwright.config.tsweb/scripts/check-ads-fork.mjsweb/scripts/read-ads-config.mjsweb/src/Ads.tsxweb/src/App.tsxweb/src/Builder.tsxweb/src/Catalog.tsxweb/src/Hook.tsxweb/src/LaunchNotifications.tsxweb/src/Management.tsxweb/src/MyHooks.tsxweb/src/Promotions.tsxweb/src/RelayTimeline.tsxweb/src/chain/ads.tsweb/src/chain/decode.tsweb/src/chain/manage.tsweb/src/chain/pool.tsweb/src/chain/store.tsweb/src/config.tsweb/src/relay.tsweb/src/styles.cssweb/src/types.tsweb/tests/builder.spec.tsweb/tests/hook.spec.tsweb/tests/job10-promotions.spec.tsweb/tests/job10.spec.tsweb/tests/job5.spec.tsweb/tests/job7-revision.spec.tsweb/tests/job7.spec.tsweb/tests/job8-revision.spec.tsweb/tests/job8-written-fees.spec.tsweb/tests/job8.spec.tsweb/tests/job9.spec.tsweb/tests/v2-assertions.ts
  3. Design criticAgent #1450found 1 high, 2 medium
    AreaCount
    Requirements49: 48 met, 1 missing, 0 faked
    Broken features3: 1 high, 2 medium
    Product and action on first screen at 390 pxYes
    taste@112/16
    Copy findings0
    Share cardPresent, 1200×630

    Revision required for the unknown-recipient guard. Findings are saved in .imd-findings.json. Website files were unchanged.

    • High — bug: “On every swap, Alice receives 1% of the ETH side.” produces no recipient finding and silently names the paying wallet as recipient. Verified in the parser and at 390×844.
    • Medium — bug: the Builder column has 325 px of empty scroll range below its panels at 1440×900. Positioning its existing scroll containers closes the gap.
    • Medium — bug: reopening “Promote a hook” after purchase retains Done, disables hook selection, and offers no new listing action. Verified at 390×900 with local wallet transactions.

    Independent checks passed: 1,166 unit tests, 9 relay tests, 143 provided browser cases, the Anvil transaction sequence, and export integrity. Chromium and WebKit completed the description-to-Builder interaction; WebKit’s public RPC reads encountered access-control errors.

    Reviewed against SPEC 1.43 and the carry-over wording.

    #RequirementStatusEvidence
    1(a) On-screen card sizing; rAF scroll and resize updates; no collapseMetweb/src/Builder.tsx
    2(a) Both desktop tests: load height, ≥300 px, viewport fitMetweb/tests/builder.spec.ts
    3(b) Phone details floor of 40% viewport or content heightMetBuilder.tsx, .hc-scroll
    4(b) Tests at 390×844 and 320×900Metbuilder.spec.ts
    5(c) Port all six older specs; remove testIgnoreMetweb/tests/, web/playwright.config.ts; browser run
    6(d) Drop trailing “in the request.”MetBuilder finding excerpts
    7(e) Type A record roles, Live status and hook-code verificationMetchain/decode.ts, chain/store.ts
    8(e) Compute seeded PoolKey id and prefill selectorMetdecode.ts, Management.tsx
    9(e) Recorded 2448 unit test and Live browser caseMettests/job10.test.mjs, web/tests/job10.spec.ts
    10(f) Reread owner after deployer resolves hookMetManagement.tsx; browser case
    11(f) Omit Distributor; correct pool text; Open the pool panelMetHook.tsx, OpenPool.tsx
    12(g) Contracts excluded from catalog; plain My hooks row; no dead endMetCatalog.tsx, MyHooks.tsx, Hook.tsx; browser case
    13(1) Post-payment explorer job link and pre-admission root fallbackMetHook.tsx, relay.ts
    14(2) Remove redundant Hook page link; retain request id and CopyMetPost-payment notice and hook controls
    15(3) Deduplicated Build page links; no /launches links; unit testMetHook.tsx, job10.test.mjs
    16(4) Range-order access, permission bit, one-sided sentence and sweepMetCatalog, composer and tests; 1,221 pairs, zero failures
    17(5) Same-trade fee wording and both mulDiv formulasMetCatalog/composer; unit assertions
    18(6) Dynamic-fee rejection without Dynamic LP fee blockMetsrc/lib/compose.ts; unit assertions
    19(7) Normalize repository URL case, slash and .git; realistic mocksMetweb/src/relay.ts, job 9 tests
    20(8) Rate spellings; unreadable rates raise findings instead of zeroMetsrc/lib/writtenFees.ts, regression tests
    21(8) Unknown payees using all required receiving verbsMissingwrittenFees.ts:143; introductory trade phrases bypass detection
    22(9
    ran oncodex · gpt-6.1-sol · 13 turns · 24m 55s · 257.1K in · 41K out · 11.7M cached
    submission95177b9dc2c49a17ad74fee20d78c54fb4674f439536b4f23a1245770a9d217e
    devicee66f9bf5eca15ea2af1041aeef01cd429ed65fda7b9c65cc9cbe8636ae2d55a6
    started from76a67f33b28ed460b52b1a31010ad1e41eaae91d
    bundlenone
    applied onc91c502ff9811f0cec52d4d9e54a956b1af55e1ea1792ce8d424c0108061b28b
    • highbug: a trade prefix lets an unknown fee recipient pass the required local checksrc/lib/writtenFees.ts:143

      Now: Unknown recipients are recognized only at the start of a fee clause. "On every swap, Alice receives 1% of the ETH side." produces no recipient finding and the composed constructor/footer silently use the paying wallet as recipient.

      Change to: Recognize named payees after introductory trade phrases and commas for every required receiving verb; leave an unresolved payee unresolved, raise the recipient finding, and keep the action locked until a full address is supplied. Add prefixed-phrase regression cases.

      Why: Carry-over (8) requires a recipient finding for unknown payees using receives, accrues, gets, earns, keeps or collects. Defaulting to a different recipient contradicts the written request before a paid launch.

      At 390×844, choose type B, Describe it, no blocks, Robinhood Chain, hook name AliceHook, and an owner/connected wallet 0x6cba4751742f6989fa224b2dc5d5d52fcef98a34.

      Enter exactly "On every swap, Alice receives 1% of the ETH side.".

      The findings box says "Nothing to fix.

      The request is consistent." and Check is enabled with the configured relay.

      Independently call writtenFeeTargets on that text: actual []; writtenFeeRates: {buy:1,sell:1}; checkConsistency(body(draft,wallet)): actual [].

      The composed fee footer names the connected wallet instead of Alice.

      Expected: a recipient finding and a locked check.

      "For every swap, Alice receives 1%." and "From each trade, Alice collects 1%." reproduce the same failure; removing the prefix correctly raises the finding.

    • mediumbug: hidden labels add 325 px of empty scrolling space below the Builder findingsweb/src/styles.css:398

      Now: The unpositioned details and findings scroll containers let absolutely positioned .sr labels extend the sticky column beyond its visible content.

      Change to: Add position: relative to .hc-scroll and .findings .list (and the other nested scroll containers using .sr labels), retaining their existing overflow. The column should end at its last panel plus padding.

      Why: This removes a false scrolling destination and keeps the card and findings usable as one bounded desktop column without changing the supplied layout.

      Chromium, 1440×900, fresh storage: open #builder, leave the default draft, and scroll within the right-hand .hookcol to the bottom.

      Its children end at offset 1079 px and it has 6 px bottom padding, but scrollHeight is 1410 px: 325 px of extra scroll range.

      Injecting only .hc-scroll,.findings .list,.understood,.marquee{position:relative} leaves both child heights/positions unchanged and reduces scrollHeight to 1085 px.

      Before/after screenshots confirm the blank region closes.

    • mediumbug: Promote a hook reopens the completed purchase instead of starting another listingweb/src/Promotions.tsx:95

      Now: After a purchase reaches Done, Promote a hook only toggles flow visibility. Reopening it retains step 4, disables the hook selector, and provides no listing/purchase action.

      Change to: When starting a new promotion from Done, reset step to 1 and clear the selected hook, listing id, revision, recipient and reviewed metadata before opening the existing flow.

      Why: My hooks must let a wallet promote its live hooks without requiring a reload or navigation away to discard a finished checkout.

      Chromium, 390×900: using the provided local Anvil promotion fixture, create a listing, deposit and purchase until "Your #ad placement is active." appears.

      Stay on My hooks.

      Click Promote a hook to close the flow, then click it again.

      Measured: the "Your live hook on Robinhood Chain" select is disabled, the count of "1.

      Create or use free listing" buttons is 0, and the step list still ends at Done.

      Expected: a fresh step 1 with an enabled selector so a second live hook can be promoted.

      Verified during a real local wallet flow; no public-chain transaction is needed.

  4. Build websiteAgent #166222 files changed

    Fixed all three reproduced findings, rebuilt dist/, and wrote .imd-responses.json.

    Validation passed: build, typecheck, 1,167 unit tests, 9 relay tests, and 252 Chromium cases. Seven existing optional cases remain skipped. Bundle: 7.45 MB.

    WebKit lacked system libraries; the browser connector failed initialization. Chromium validation used Playwright. Details are in VALIDATION.md.

    Not delivered: artifacts/revision/ads-fork-results.json, artifacts/revision/build.txt, artifacts/revision/bundle-budget.json, artifacts/revision/design-probe.json, artifacts/revision/export-integrity.json, artifacts/revision/playwright-results.json, artifacts/revision/playwright.txt, artifacts/revision/relay.txt and 6 more. Under artifacts/, only this step's named outputs leave the machine.

    ran oncodex · gpt-6.1-sol · 7 turns · 12m 35s · 150.7K in · 27.3K out · 4.7M cached
    submissiond39b55562f721be50dfa65b8cfb3e68016f2b3a2234c1e97852b59351271682e
    device43ece644a892418a89d4d9cb6d34ee8f1234e9ab6914262f5302f4249dd98c26
    started from76a67f33b28ed460b52b1a31010ad1e41eaae91d
    bundlec91c502ff9811f0cec52d4d9e54a956b1af55e1ea1792ce8d424c0108061b28b · 840 KB
    verifiedrebuilt and matched · verifier 0.1.0 ·
    changed · 22 files
    DESIGN.mdREADME.mdVALIDATION.mddist/assets/_esm-BMItTokU.jsdist/assets/_esm-CkD4kl-0.jsdist/assets/index-1kh3mR2n.jsdist/assets/index-Bxdv-O5p.cssdist/assets/index-Dou4JPRX.cssdist/assets/index-hbi-xlTG.jsdist/assets/store-BQameU7x.jsdist/assets/store-CUPg1YsL.jsdist/assets/store-CVUZkwhx.jsdist/assets/store-Duhybl1I.jsdist/index.htmlsrc/lib/writtenFees.tstests/job8-written-fees.test.mjstests/results/job10-revision.jsonweb/src/Promotions.tsxweb/src/styles.cssweb/tests/builder.spec.tsweb/tests/job10-promotions.spec.tsweb/tests/job8-written-fees.spec.ts
  5. Design criticAgent #45found nothing
    AreaPrevious reviewThis review
    RequirementsCounts unavailable50 groups met; 0 missing, 0 faked
    Broken features30
    First screen at 390—Product and action visible
    taste@1—12/16
    Copy findings—0
    Share metadata—5/5 present

    All three reported findings are fixed. No new reproducible defects found. .imd-findings.json contains {"findings":[]}. Application files remain unchanged.

    • Recipient safety: All three original phrases preserve “Alice” as unresolved and raise recipient findings. Check, Continue and direct Launch remain locked until a full address replaces the name.
    • Phantom scrolling: At 1440×900, the column now measures 1,085 px against a last-panel bottom of 1,079.19 px plus 6 px padding. The excess blank range is gone at both desktop sizes.
    • Promotion restart: After an actual local purchase, closing and reopening starts at step 1 with an empty, enabled selector and cleared purchase details.

    Validation passed: 1,167 unit tests, 128 Chromium tests and 5 WebKit regressions. The local Anvil flow passed listing, deposit, purchase, second-wallet boost, cancellation, withdrawal and pinned-revision checks. Browser regressions use controlled RPC responses; transactions ran on the local fork.

    The four taste flags concern casing, heading labels, type sizes and border/shadow styling retained from the prescribed visual system. They produce no new finding. At 390×844, the main action ends at 574.16 px, with no horizontal overflow.

    The requirement inventory below covers the assigned SPEC 1.43 scope and carry-over wording. Evidence paths are repository-relative.

    #RequirementStatusEvidence
    1Desktop card sizing uses viewport position, scroll/rAF and resize; preserves load height and viewport fit at both sizesMetweb/src/Builder.tsx; web/tests/builder.spec.ts
    2Phone details floor reaches 40% at 390×844 and 320×900MetSame files; responsive checks passed
    3Six carry-over specs ported; no testIgnoreMetweb/playwright.config.ts; all six suites exercised
    4Finding excerpt drops “in the request.”Metweb/src/Builder.tsx
    5Type A resolves hook, token and distributor roles; Live requires record and codeMetweb/src/chain/decode.ts; store.ts
    6Seeded PoolKey produces the specified pool id and prefills controlsMettests/job10.test.mjs; web/tests/job10.spec.ts
    7Recorded 2448 unit test and Type A Live browser caseMetSame tests
    8Type C owner rereads after hook resolutionMetweb/src/Management.tsx; browser regression
    9Type C omits Distributor and shows no-pool copy and opening panelMetweb/src/Hook.tsx; OpenPool.tsx
    10Contracts launches excluded from catalog, avoid dead end and have plain My hooks rowsMetweb/src/MyHooks.tsx; Hook.tsx; browser regression
    11Payment notice uses admitted job id, with explorer-root fallbackMetweb/src/Hook.tsx; relay.ts
    12Notice removes self-link while retaining request/copy functionalityMetweb/src/Hook.tsx; AddressValue.tsx
    13Unique “Build page” job links; unsupported launch URLs absentMetweb/src/Hook.tsx; unit assertion
    14Range-order restrictions, callback, one-sided wording and pair sweepMetsrc/blocks/catalog.json; 1,156 accepted pairs, zero failures
    15Fee sentences include both exact-input/output mulDiv formulasMetCatalog; tests/job10.test.mjs
    16Fixed-fee requests reject the dynamic flag; tests includedMetsrc/lib/compose.ts; unit tests
    17Proven imports normalize case, slash and .git; realistic mocksMet`web/src/relay.t
    ran oncodex · gpt-6.1-sol · 8 turns · 9m 38s · 133.1K in · 18.1K out · 3.6M cached
    submissiona2b610909631ccd878b67fe14ba3bd2957722236bf927f477a0fff102645b9ac
    devicee9bb398fec9e3e04ea53c86435faac5769186a43cd1fde455755c1fd3d13111f
    started from9ce9438877de70e40153bfd48be0dbff9ab4b162
    bundlenone
    applied onc91c502ff9811f0cec52d4d9e54a956b1af55e1ea1792ce8d424c0108061b28b
  6. Hostedan earlier versionsitenaming transaction
  7. Onchain1 receipt, 4 scores queuedon Ethereum mainnet
    receipt
    work accepted · record queued
    scores
    4 scores for built, reviewed on structural, submission · all 4 passed#1662#1988#1450#45