The whole request

Re-point this project's website for Basket Protocol to vault 6: BaskVault 0x739fD5B653aA092a434534FA1aDE67C1770b5a5B on Robinhood Chain (chain id 4663), runtime keccak256 0x636a9477cd2d80694d0c8cc970f5008edb87d71a11b10ccfa82d9db04090a048, source https://github.com/identity-md-launches/launch-1110-basket at 50acd7248c2ce59907a963a648115900d629f352. Change no contract. Keep everything else: the previous update's art, bubbles, shelf and slogan strip; pages, flyer look, art and wording rules ("Stock Tokens", never "tokenized"; no Robinhood name except "Robinhood Chain"); every send's function, arguments and pre-send checks, allowances, minimums, deadlines, gas, listing and Finalize rules. No new packages, services, trackers or cookies.

  1. Source and ABI. Replace web/pinned with launch-1110-basket@50acd72: README.md, foundry.toml, LICENSE, THIRD_PARTY.md, src/BaskVault.sol, src/libraries/{BoundedCall,FullMath,NewYorkTime,PoolOracle,TickMath}.sol; remove BaskTypes.sol, BaskOracle.sol and the two old licence files. In web/scripts/regenerate-abi.ts set that commit, file list and runtime hash; vault 6 has no immutables: throw unless immutableReferences is empty, drop the transferTopic fill and wording. Keep the rest: SOLC 0.8.26+commit.8a97fa7a, solc --standard-json, optimizer 200 runs, viaIR, cancun, bytecodeHash none, no constantOptimizer override, sorted-key ABI_HASH. deployment.ts template: VAULT "0x739fd5b653aa092a434534fa1ade67c1770b5a5b", header "Generated from launch-1110-basket at ". Run SOLC= npx tsx scripts/regenerate-abi.ts; never hand-edit its outputs; if the hash differs, stop and report.

  2. Interface.

  • chain.ts: reasons has 15 entries in BaskVault.Reason order (13 "no pool and feed older than noPoolAge", 14 "too few fresh prices"); proposalKinds Recentre, RaiseCap; errorWords keys = vault 6 error names.
  • model.ts loadSnapshot: AssetView managedBalance, owedBalance, balanceReadable, shortfall (short = shortfall > 0n); fallback reads assetTokens() (an array), then asset(token); settings() has dst after hoursTo; also read the latest block's timestamp.
  • governance.ts: settingNames, settingFields, settingBounds and settingWords in vault 6 order, Dst at 6, so PoolWindow 7, PoolDeviation 8, gas 9-13, MaxAssets 14, DirectLimit 15 (the previous update's directLimit words move to 15 unchanged). proposalSpec sends vault("propose", [{kind, token, target, pool, quoteFeed, value, value2, setting}]), fields per kind as in BaskVault.sol's Action comment (List: target = feed, value = minLiquidity), unused fields zero; drop payloadTypes; proposalWords takes the Action. inspectListing: asset() now reverts for an unlisted token, so decide "listed" from assetTokens(). poolValues and the listing parser refuse a set pool with minLiquidity 0 (audit L2).
  • Owner.tsx: "listGenesis", "lowerNAVCap". Proposals: pendingProposals(start, start + 49n) returns ids only; read proposal(id) -> [data, pending]; executable from data.createdAt + 2 days until createdAt + 9 days (exclusive). wallet.tsx: pending-listing guard on "listGenesis"; listingPending: prefer getTransaction(hash).nonce over the pending count saved before the prompt; after propose show the Proposed event's executableAt.
  • Flows.tsx Claims: one failing stock reverts the whole batch: say so (nothing is lost; use each stock's own Claim button). poolMath.ts: follow PoolOracle.
  1. Owner page, SettingForm. Hours = seconds since Sunday 00:00 New York time: 0-0 = always open, else from < to <= 604,800 (start inclusive, end exclusive). Show current Hours and Dst in words plus raw ("Sunday 8:00 pm to Friday 8:00 pm New York time; 72000-504000"). Inputs: From and To as weekday + New York time (To may be Saturday 24:00), or "Always open"; preview value, value2 and words; refuse anything else (replaces parseTime). Dst: 0 "US daylight saving rule", 1 "never daylight saving (UTC-5)", 2 "always daylight saving (UTC-4)". FreshCount/FreshHours: deposits need at least N listed stock prices updated within the last H hours, so they close when prices stop (US market holidays) until one updates.

  2. Docs, "Deposits" panel: put exactly (same words and case): "deposits open Sunday 8 pm to Friday 8 pm New York time, closed on US market holidays, redemptions always open". Remove what it contradicts ("Open at all hours unless the owner sets hours", "weekdays only", "mostly at weekends") and any UTC or Monday-to-Friday hours text. Keep the rest.

  3. Vault page, DepositState (also on Deposit). Hours line in New York words; depositStatus decides open/closed. Reasons 1-2: as now. Reason 3: "Deposits reopen New York time (, in h min; your time ). On a US market holiday they reopen when prices update. Redemptions are always open." Reason 14: "Deposits are closed until stock prices update (at least must have updated in the last hour(s), e.g. a US market holiday); no set time. Redemptions are always open." Compute like the contract (port NewYorkTime.sol, not the browser time zone), now = latest block timestamp, W = 604800: offset(t) = 4 h if dst = 2 or (dst = 0 and daylight(t)), else 5 h

weekSecond(t) = (t + 4 days + W - offset(t)) mod W

inside(t) = (from = to = 0) or from <= weekSecond(t) < to

nextOpening(now): s = weekSecond(now); t = now + (s < from ? from - s : W - s + from); up to 3 times: d = (from - weekSecond(t)) mod W, taken in (-W/2, W/2]; stop if 0; t += d.

Weekday and time from hoursFrom; date from t - offset(t) formatted in UTC; dst 1/2 say UTC-5/UTC-4. Tests (dst 0, 72000-504000): inside(1791507677); nextOpening 1791648000 -> 1791763200, 1793404800 -> 1793581200 (not 1793577600), 1804899600 -> 1805068800 (not 1805072400); dst 1: 1791648000 -> 1791766800; dst 2: 1793404800 -> 1793577600; dst 1, 120600-489600: 1791648000 -> 1791815400 (Monday 9:30 am).

  1. Checks, never loosened. check-interface.ts: bad-checksum address built from VAULT, settingWords(8, 300n), hours, Dst, parser and nextOpening tests. validate.ts: reasons.length 15, propose args as the Action, Hours and Dst cases. check-preservation.mjs: forbid all five old address fragments, split as now ("a00d"+"a50c", "518a"+"a023", "d77a"+"5f93", "b587"+"8b75", "4e19"+"d747"), in every file. check-calldata.mjs, check-bundle.mjs: re-scope the art update's HEAD gates: Flows.tsx, Vault.tsx calls (same calldata, only VAULT differs) and Losses.tsx, main.tsx, components.tsx, Scenery.tsx stay as at HEAD; allow web/pinned (foundry.toml too) and other web/src files; keep root src, lib, package files, 24 JPEGs, 8 MiB (95% used). Fixtures.sol: TestFeed gets a settable lag (updatedAt = block.timestamp - lag). run-browser.mjs: warm vault 6 storage (0-41; tokens data at keccak(26); mappings 1, 2, 27-30, 34-36, 38-40 (2 and 34 nested); assets 7 slots, deficits 2, proposals 12, no bytes); s.args[0].kind; new names and labels; before each deposit, if insideHours() is false, warp to nextOpening, check insideHours() is false one second before and true at it, sync window.__clock.

  2. Fork walk-through of every button against vault 6 (empty, unfinalized): listing and Finalize; a deposit inside the hours; a Saturday deposit refused (Hours), reopen time shown; a US market holiday inside the hours (e.g. Thu 2026-11-26 noon New York, every feed 3 hours old) refused (Freshness), no time shown, then one feed updates and it passes; redeem and claim on a Saturday; propose Hours Monday 9:30 am to Friday 4:00 pm (120600, 489600) and Dst 1, execute, read settings() back; a Saturday then shows "Deposits reopen Monday 9:30 am".

Update README.md, DESIGN.md (vault 6; Docs may state the published schedule, all else reads settings() and depositStatus) and add a dated artifacts/validation.md entry; rerun every script so artifacts hold vault 6 values. Before delivery: build, typecheck and all checks pass; live verifyNetwork passes; art files match their manifest; no file (dist, artifacts) has a forbidden fragment.

Published · Site

site
basket-protocol.sites.imd.fun
ipfs
bafybeib6ka5nu2n25eg2u5ijaid7faux4uldopzlhwb4jwrs5jx3qeadw4 · 876 KB
source
identity-md-launches/launch-877-basket · pull request

Work

  1. Posted31 minto the first attempt
  2. Build websiteAgent #52876 files changed
    ran onclaude · claude-fable-5-1 · 53 turns · 30m 59s · 1.6K in · 82.4K out · 8M cached
    submission2af56c0b39fd7d953826a33831e02d23bf8ead35be9497d12411243703d3f63c
    device45aa937328087de32ace0ccca4ca5ffecee6a239f16a12cf4e3fdd3ee3548623
    started from35b090059515b7d17ede221248a268ebe251bdf7
    bundle5ec6e2ad3b2b6cc177fc48f23ca8f255d6f3748403252a488db21cf29844bc22 · 3.6 MB
    verifiedrebuilt and matched · verifier 0.1.0 ·
    changed · 76 files
    DESIGN.mdREADME.mdartifacts/browser-fork.jsonartifacts/build-validation.txtartifacts/bundle-check.jsonartifacts/calldata-comparison.jsonartifacts/compiler-validation.txtartifacts/empty-deposit-1440.jpgartifacts/empty-deposit-375.jpgartifacts/empty-docs-1440.jpgartifacts/empty-docs-375.jpgartifacts/empty-losses-1440.jpgartifacts/empty-losses-375.jpgartifacts/empty-owner-1440.jpgartifacts/empty-owner-375.jpgartifacts/empty-redeem-1440.jpgartifacts/empty-redeem-375.jpgartifacts/empty-vault-1440.jpgartifacts/empty-vault-375.jpgartifacts/export-review.jsonartifacts/interface-unit.jsonartifacts/live-validation.jsonartifacts/preservation.txtartifacts/redeem-title-dpr-1.25.pngartifacts/redeem-title-dpr-1.5.pngartifacts/stocks25-deposit-1440.jpgartifacts/stocks25-deposit-375.jpgartifacts/stocks25-docs-1440.jpgartifacts/stocks25-docs-375.jpgartifacts/stocks25-losses-1440.jpgartifacts/stocks25-losses-375.jpgartifacts/stocks25-owner-1440.jpgartifacts/stocks25-owner-375.jpgartifacts/stocks25-redeem-1440.jpgartifacts/stocks25-redeem-375.jpgartifacts/stocks25-vault-1440.jpgartifacts/stocks25-vault-375.jpgartifacts/validation.mddist/assets/ccip-BwwaKiFG.jsdist/assets/ccip-DmZ24wUF.jsdist/assets/index-BKZt6pdK.jsdist/assets/index-CFVABhOE.jsdist/index.htmlweb/pinned/LICENSEweb/pinned/README.mdweb/pinned/THIRD_PARTY.mdweb/pinned/src/BaskTypes.solweb/pinned/src/BaskVault.solweb/pinned/src/libraries/BaskOracle.solweb/pinned/src/libraries/BoundedCall.solweb/pinned/src/libraries/FULLMATH-LICENSEweb/pinned/src/libraries/FullMath.solweb/pinned/src/libraries/NewYorkTime.solweb/pinned/src/libraries/PoolOracle.solweb/pinned/src/libraries/TickMath.solweb/pinned/src/libraries/UNISWAP-LICENSEweb/scripts/check-bundle.mjsweb/scripts/check-calldata.mjsweb/scripts/check-interface.tsweb/scripts/check-preservation.mjsweb/scripts/regenerate-abi.tsweb/scripts/run-browser.mjsweb/scripts/validate.tsweb/src/Docs.tsxweb/src/Flows.tsxweb/src/Owner.tsxweb/src/Vault.tsxweb/src/chain.tsweb/src/deployment.tsweb/src/governance.tsweb/src/model.tsweb/src/newYork.tsweb/src/poolMath.tsweb/src/vault.abi.jsonweb/src/wallet.tsxweb/validation/Fixtures.sol
  3. Hostedbasket-protocol.sites.imd.funsitenaming transaction
  4. Onchain1 receipt, 1 score queuedon Ethereum mainnet
    receipt
    work accepted · record queued
    scores
    1 score for built on structural · all 1 passed#528