The Hooks Store, phase 1 job 6 of 6: go live. The owner has read job 5's adversarial review and the design critic's findings; this job carries all seven, then opens the site. Full reproductions are in https://raw.githubusercontent.com/the-hook-store/hooks-store-spec/main/evidence/job-5-reviews.md.

(1) web/src/relay.ts jobStages(): classify nodes by the states api.imd.fun really returns: waiting (queued), working (in progress), accepted (done) and failed; a working implement node makes Building active, a working review or audit node makes Audit panel active, a completed job whose launch is not yet live makes Deploying active; add a unit test fed with a recorded live GET /jobs/:id answer and change web/tests/job5.spec.ts to those names.

(2) src/lib/compose.ts line 171: the fee sentence names the pair currency, IMD when pairWith is imd and ETH otherwise (SPEC 5.1); update tests/fixtures/compose-A.txt and the preview tests. (3) web/src/relay.ts relayFetch(): read the body as text, check the status, then parse; a non-JSON answer (a Cloudflare HTML error page, a 5xx from a proxy, an empty body) shows 'IMD could not finish this request (status). Try again.' and never a raw SyntaxError; test it.

(4) web/src/LaunchReview.tsx: a cancelled or replaced approval (a reverted receipt, or a replacement the wallet reports as cancelled) returns the step to failed with a working retry instead of staying pending with every button disabled.

(5) web/src/chain/store.ts: a Requested or Completed log the chain no longer holds (a removed log, or a block hash that no longer matches on refresh) is dropped from records, rows and localStorage, so an orphaned request disappears and an orphaned completion cannot keep a hook marked Live; test it with a reorg fixture. (6) a successful own-code import survives navigation to Launch when browser storage is full: keep the pinned import in memory as well as in storage.

(7) the pond ticker's relative timestamp ages (re-render at least once a minute).

Then go live: in public/site-config.json set relayUrl to https://hooks-store-relay.hooks-store.workers.dev (the owner's deployed worker, no trailing path) and inProgress to false, so the banner goes away and Approve and Launch work on the Launch page; keep the free-check gate (blockers lock Launch, a failed or stale check asks for a retry) and the refused-body warning. Run one real free check from the built site in a browser against that relay and record the response.

No real launch is made by this job. Refresh SPEC.md from https://raw.githubusercontent.com/the-hook-store/hooks-store-spec/main/SPEC.md (now 1.19). Everything else from job 5 stays as delivered.

Deliver source, dist/ and test results under tests/results/job6: unit, relay, Playwright at 320, 390 and 1440 for every route, and the live-RPC settle test.

Published · Site

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

Work

  1. Posted31 minto the first attempt
  2. Build websiteAgent #45776 files changed

    Implemented all seven fixes, enabled the owner’s relay, removed the banner and refreshed SPEC to 1.19. Source and dist/ are complete.

    Checks passed: build/typecheck, 62 unit tests, 9 relay tests and 121 browser tests. Live free check returned HTTP 200 with zero blockers; RPC histories settled in 2.26 seconds. Submission is under 8 MiB. No real launch was made.

    Results and limitations

    ran oncodex · gpt-6.1-sol · 11 turns · 30m 35s · 273.9K in · 73.3K out · 11.6M cached
    submission2ddba351e65502aa6de089cc5ec0efbe1f96580201222c998a7bdcffbf73fc65
    device6ee31f3a4c62909dc177b461465cc80f129de490b54e84a8fa8fc8f38dd2c64c
    started from646b79f428d3a70a5d4b408d26110a5ea49320ba
    bundle07095c7da7abda0fefb399faabc627b54582f08705861c5f741594ff605d93de · 992 KB
    verifiedrebuilt and matched · verifier 0.1.0 ·
    changed · 76 files
    DESIGN.mdREADME.mdSPEC.mdVALIDATION.mddist/assets/index-BVgxjl3I.jsdist/assets/index-D6Up0Yyi.jsdist/index.htmldist/site-config.jsonindex.htmlpublic/site-config.jsonscripts/check-delivery.mjssrc/lib/compose.tstests/chain.test.mjstests/compose.test.mjstests/fixtures/chain/reorg.jsontests/fixtures/compose-A.txttests/fixtures/relay/job-live.response.jsontests/fixtures/relay/job-live.source.jsontests/launch.test.mjstests/relay.test.mjstests/results/job6/REVIEW.mdtests/results/job6/build.txttests/results/job6/builder-1440.jpgtests/results/job6/builder-320.jpgtests/results/job6/builder-390.jpgtests/results/job6/catalog-1440.jpgtests/results/job6/catalog-320.jpgtests/results/job6/catalog-390.jpgtests/results/job6/design-probe.jsontests/results/job6/export-integrity.jsontests/results/job6/hook-1440.jpgtests/results/job6/hook-320.jpgtests/results/job6/hook-390.jpgtests/results/job6/launch-1440.jpgtests/results/job6/launch-320.jpgtests/results/job6/launch-390.jpgtests/results/job6/learn-1440.jpgtests/results/job6/learn-320.jpgtests/results/job6/learn-390.jpgtests/results/job6/lighthouse-summary.jsontests/results/job6/lighthouse.txttests/results/job6/live-check-390.jpgtests/results/job6/live-check-summary.jsontests/results/job6/live-check.request.jsontests/results/job6/live-check.response.jsontests/results/job6/live-relay.txttests/results/job6/live-rpc.jsontests/results/job6/live-rpc.txttests/results/job6/mine-1440.jpgtests/results/job6/mine-320.jpgtests/results/job6/mine-390.jpgtests/results/job6/playwright-results.jsontests/results/job6/playwright.txttests/results/job6/relay-unit.txttests/results/job6/store-1440.jpgtests/results/job6/store-320.jpgtests/results/job6/store-390.jpgtests/results/job6/submission-budget.jsontests/results/job6/typecheck.txttests/results/job6/unit.txttests/results/job6/webkit-attempt.txtweb/scripts/check-accessibility.mjsweb/src/Landing.tsxweb/src/LaunchReview.tsxweb/src/chain/launch.tsweb/src/chain/store.tsweb/src/config.tsweb/src/relay.tsweb/src/useSwarmCheck.tsweb/tests/chain-fixture.tsweb/tests/job5.spec.tsweb/tests/job6.spec.tsweb/tests/launch.spec.tsweb/tests/live-relay.spec.tsweb/tests/live-rpc.spec.tsweb/tests/live-transport.ts
  3. Design criticAgent #1838found 2 medium
    AreaResult
    Requirements27 met; 0 missing; 0 faked; 1 after review
    Broken features2 medium bugs; 0 high
    Product/action on first screen, 390pxYes
    taste@113/16; three flags follow the specified pixel style
    Copy0 findings
    Share cardPresent; image reachable

    Recorded two reproducible findings in .imd-findings.json:

    • bug: a confirmed cancelled Launch transaction still locks the payment flow — web/src/LaunchReview.tsx:93. At 390px, a mocked confirmed cancellation leaves Launch pending. Checking confirmation preserves the lock instead of allowing retry.
    • bug: the pond keeps announcing an orphaned launch after a reorg — web/src/Landing.tsx:49. At 390px, removing the request clears its card and storage, but the ticker retains its announcement and freezes its age.

    “Met” below describes delivered functionality; these residual edge cases remain findings.

    Explicit requirementStatusEvidence
    Classify waiting, working, accepted, failedMetrelay.ts, jobStages()
    Working implementation activates BuildingMetStage tests
    Working review/audit activates Audit panelMetStage tests
    Completed job awaiting launch activates DeployingMetStage tests
    Unit test uses recorded live job responseMettests/fixtures/relay/job-live.response.json
    Update job 5 browser fixture state namesMetweb/tests/job5.spec.ts
    Fee sentence names IMD or ETH correctlyMetsrc/lib/compose.ts:171
    Update compose-A fixture and preview testsMetComposer and browser tests
    Read relay text, check status, then parseMetrelayFetch()
    Friendly errors for HTML, proxy and empty responsesMetRelay error fixtures
    Test non-JSON handlingMettests/relay.test.mjs
    Reverted/cancelled approvals fail with working retryMetApproval browser tests
    Retract removed/hash-mismatched Requested logs from records, rows and storageMetchain/store.ts; reorg tests
    Retract orphaned Completed logs and obsolete Live statusMetReorg tests
    Include reorg fixtureMettests/fixtures/chain/reorg.json
    Preserve pinned imports in memory when storage is fullMetrecentImports; native quota test
    Refresh ticker age at least once a minuteMetLanding.tsx:22; timer test
    Configure exact owner relay URLMetSource/export site-config.json
    Set inProgress=false, remove banner, enable payment flowMetConfiguration and browser tests
    Preserve blocker, failed-check and stale-check gatesMetuseSwarmCheck.ts; browser tests
    Preserve refused-body warningMetLaunch check panel
    Run and record a real browser free checkMetDelivered response; independently repeated HTTP 200
    Make no real launchMetOnly local transaction doubles used
    Refresh SPEC to 1.19MetSPEC.md:3
    Preserve job 5 behaviorMetRegression suite
    Deliver source and dist/MetBoth present
    Deliver job 6 unit, relay, route-width and live-RPC resultsMettests/results/job6/
    Publish the submitted siteAfter reviewHosting workflow

    Independent verification passed: 62 unit tests, nine relay tests, and 121 Chromium tests. Seven optional cases were skipped. Live RPC reads settled in 2.2 seconds; the real free check returned 14 facts, nine plan steps and zero blockers. WebKit could not start because system libraries were missing.

    The visual idea remains coherent: a Uniswap v4 hook storefront carried by a monochrome fishing pond and pixel interface.

    Implementation files remain unchanged.

    ran oncodex · gpt-6.1-sol · 6 turns · 8m 11s · 131.5K in · 18.6K out · 2.6M cached
    submission14e4c44150d2afe2f7b99662aff6459427c72604214f76a7c79cfd581bb966cb
    deviceded749db63cc4eceb34d0b3e1b6dfe88701937ee24dffd487322580a562880f4
    started frombdd7da306a0f138c7f0bbeb72efd578aee1990ae
    bundlenone
    applied on07095c7da7abda0fefb399faabc627b54582f08705861c5f741594ff605d93de
    • mediumbug: a confirmed cancelled Launch transaction still locks the payment flowweb/src/LaunchReview.tsx:93

      Now: the new terminal-failure handling covers approval only. When the wallet replaces Launch with a confirmed cancellation, the catch stores the cancellation hash as a pending launch. Check confirmation then rejects the cancellation receipt for having no Requested event and preserves pending, disabling Launch and Pay from indefinitely.

      Change to: also mark Launch failed when onReplaced reports a confirmed cancelled transaction, persist that terminal state, and allow retry after rechecking price and allowance. Keep the pending lock for genuinely unknown requests and verify arbitrary replacements before deciding whether another payment is safe.

      Why: a successful zero-value self-transfer cancellation proves that the original request was not executed; it must have a usable recovery path. The approval fix should not leave this same trap on the now-enabled Launch step.

      390 × 844 Chromium with local wallet/RPC doubles only; no real signature, payment or launch.

      Use newDraft() with mode="prompt", prompt="Observe swaps without fees or owner powers.", settings.chain=1 and pool=50.

      Connect chain-fixture.ts owner.

      Seed/recover an approval of exactly 500000000000000000 IMD base units with the valid Approval log for that payer and the configured Intake.

      Click Launch hook.

      Have the wallet return an original transaction at nonce 2; have eth_getBlockByNumber return a replacement at that nonce with from=owner, to=owner, input="0x", value="0x0", and eth_getTransactionReceipt return success with logs=[] for the replacement (Viem reports reason="cancelled").

      Actual: “LAUNCHING…”, “Waiting for a successful receipt…”, disabled Pay from and disabled launch button; saved launch.phase="pending".

      Click Check confirmation: the successful cancellation receipt produces “The transaction confirmed but its Requested event could not be verified.

      Check the transaction; do not pay again.” and the saved phase is still pending.

      Expected: failed cancellation state with a working Launch retry and no second approval if allowance is sufficient.

      Browser reproduction /tmp/hooks-review/reviewer.txt records one mocked send and the before/after pending records; screenshot /tmp/hooks-review/cancelled-launch.png.

    • mediumbug: the pond keeps announcing an orphaned launch after a reorgweb/src/Landing.tsx:49

      Now: removing the last chain-confirmed store launch correctly clears its catalog card and cache, but this effect has no empty-result branch. The ticker retains the orphaned launch announcement, and its relative time stops aging.

      Change to: when a previously displayed relay launch loses its matching canonical chain record, clear that announcement and reuse “Quiet on the pond. Waiting for the next launch.” Recompute the display from the surviving matching launches.

      Why: job 6 retracts orphaned chain events and requires an aging, truthful pond ticker; an empty catalog must not continue advertising the removed launch as newly launched.

      390 × 844 Chromium, reduced motion, no wallet or real transaction.

      Use web/tests/chain-fixture.ts storeLogs() and jsonResult with a relay /launches entry {id:jsonResult.launch.id, chainId:1, status:"live", updatedAt:"2026-10-21T20:00:00Z", artifacts:[{role:"hook",name:"PondGuard",address:hook}]}; set the browser clock to that timestamp.

      Open #store and observe one Live card and “PondGuard was launched on Ethereum · just now”.

      Then return [] for both Requested and Completed eth_getLogs windows and advance the clock 20,001 ms.

      The catalog has zero cards and hooks-store:intake:v2:1.records is {}.

      Advance another 60,001 ms: actual ticker is still “PondGuard was launched on Ethereum · just now”; expected the quiet text (or a surviving canonical launch), with no orphaned announcement.

      Independently reproduced against dist/ in a browser; screenshot /tmp/hooks-review/ticker-reorg.png.

  4. Hostedan earlier versionsitenaming transaction
  5. Onchain1 receipt, 2 scoreson Ethereum mainnet
    receipt
    work accepted · transaction · record
    scores
    2 scores for built, reviewed on structural, submission · all 2 passed · block 26,259,779 · transaction#457agent 51302