{"workflow":null,"planning":null,"id":"9d7bffba-141b-4e33-be9c-1bfa450d9384","state":"completed","template":"shape:chain","objective":"Basket Protocol vault: an index vault for Stock Tokens on Robinhood Chain (chain id 4663). Contracts only: no launch token, pool or website. BASK is the vault's own ERC-20 share (18 decimals). Write \"Stock Tokens\", never \"tokenized\"; no Robinhood name, logo or ticker beyond the chain's name.\nToken name: Basket\nToken symbol: BASK\nTotal supply: 0 at deployment, no cap: deposit mints, redeem burns\n\nBUILD RULES\n- Simplest code that satisfies this text: add no feature, role, setting or safeguard.\n- solc 0.8.26, optimizer on, 200 runs, evm cancun, bytecode_hash none; custom errors.\n- If BaskVault exceeds 24,000 bytes of runtime, move views into BaskLens(address vault = $contract:BaskVault); never drop a check.\n- Constructors call no other contract. Time is block.timestamp, never block.number.\n- No proxy, delegatecall, selfdestruct, rescue or sweep. User-facing state changes are nonReentrant and emit events.\n\nMANIFEST\n1. BaskVault(address owner_, address guardian_): owner_ = 0x30B57ECf51D19ABcED7F6f70974e6fBb6f3b9Da3, guardian_ = 0x5ed39AF86f2C00ad99913B5d727bD68f2A904B68, written as these literals. Reverts if either is zero or they are equal.\nSTOCK_FACTORY = 0x4783C67b63dE2B358Ac5951a7D41F47A38F3C046 is a source constant.\n\nOutside contracts (on chain 4663 only; tests mock exactly these functions under test/; no fork tests, no vm.env):\n- Stock Token: ERC-20, 18 decimals, uid() returns bytes32, oraclePaused() returns bool.\n- STOCK_FACTORY.tokenAddress(bytes32 uid) returns address.\n- Feed: Chainlink proxy: decimals() is 8, aggregator() returns address, latestRoundData(); answer = USD per whole token.\n\nASSETS: a list of (token, feed, open, retired, minAnswer, maxAnswer, listedAt), at most 64, empty at deployment, never removed. managed[token] is the accounting balance: value never uses balanceOf and tokens sent directly are ignored.\nListing checks, at proposal and again at execution: token not listed; token.decimals() == 18; STOCK_FACTORY.tokenAddress(token.uid()) == token; feed.decimals() == 8; feed.aggregator() != 0; feed not used by another asset; answer > 0. On listing open = true, minAnswer = answer / 4, maxAnswer = answer * 4.\nGenesis: until the owner calls finalizeGenesis() (once, needs 3 or more assets), proposeAsset(token, feed) and proposeAssets(tokens[], feeds[]) list at once and deposits are impossible. Deposits open 72 hours after finalizeGenesis().\nOwner proposals (genesis listing is direct): list an asset; replace an asset's feed (feed checks and new answer inside the band, both times); re-centre a band on the answer at execution, under 26 hours old; reopen an asset (cancelled by any later close); retire an asset (closed both times); replace the guardian; raise NAV_CAP. A proposal waits 7 days, then anyone may execute it; it lapses 7 days later; the owner may cancel it, as may the guardian unless it replaces the guardian. One listing or feed replacement executes per 24 hours. An asset listed after genesis is on probation for 30 days. A retired asset is closed for good, skipped by every deposit check, 0 in NAV.\n\nPRICE is valid only if the feed read succeeds, answer > 0, minAnswer <= answer <= maxAnswer, updatedAt <= now, now - updatedAt <= 26 hours, and token.oraclePaused() returns false. value(amount) = amount * answer / 1e8, rounded down (USD, 18 decimals). USD limits below are dollars times 1e18.\n\ndeposit(token, amount, receiver, minSharesOut, deadline) requires:\n- deposits open and not paused; token listed and open, vault balance >= totalOwed[token]; receiver not the vault;\n- market gate: (now / 86400 + 4) % 7 is 1 to 5 (0 = Sunday) and 55800 <= now % 86400 < 70200; and 3 or more listed assets have feed updatedAt within the last 4 hours;\n- a valid price for this token and every asset with managed > 0; no asset short or unreadable (see LOSSES).\nPull the tokens; the vault balance must rise by exactly amount. NAV = sum of value(managed) before the deposit; v = value(amount).\ngross = v if totalSupply is 0, else v * totalSupply / NAV rounded down (revert if NAV is 0). fee = gross * 50 / 10000, rounded up: minted to feeRecipient, or not minted while that is unset. The receiver gets gross - fee; on the first deposit 1e15 of that goes to address(0xdEaD) instead. The receiver's amount must be > 0 and >= minSharesOut.\nCaps after the deposit, with NAV2 = NAV + v:\n- NAV2 <= NAV_CAP (starts 1,000,000; the owner lowers it at once, cancelling pending raises, raises it by proposal, never above 10,000,000,000);\n- value(managed[token]) <= max(NAV2 * 5 / 100, 25,000), or max(NAV2 / 100, 5,000) on probation;\n- bucket <= max(NAV2 * 25 / 100, 100,000): one bucket for all deposits, which first decays (bucket -= bucket * elapsed / 86400, floor 0), then adds v.\n\nredeem(shares, minAmountsOut[], deadline) reads no price, ignores every pause and gate, and never reverts because of an asset. fee = shares * 50 / 10000 rounded up: transferred to feeRecipient, or burned with the rest while unset. net = shares - fee is burned. Per asset: available = balanceOf(vault) - totalOwed[token], floor 0 (low-level static call, 50,000 gas, copying 32 bytes; any other outcome: unreadable, available = managed); leg = min(managed, available) * net / totalSupplyBeforeBurn, rounded down; require leg >= minAmountsOut[i] (missing entry = 0); managed -= leg. Each leg is paid to msg.sender by an external function only the vault itself may call, given 250,000 gas, which reverts unless the transfer succeeds, returns nothing or true, and the vault balance falls by exactly leg. If it fails, owed[msg.sender][token] and totalOwed[token] grow by leg. claim(token, to) pays min(caller's owed, vault balance) by the same function with no gas limit.\n\nLOSSES. An asset is short when available < managed. Nothing lowers managed automatically. flagDeficit(token), by anyone, records shortfall and time if larger than recorded. recognizeLoss(token), by anyone 7 days or more later, lowers managed by min(recorded, current shortfall) and clears the record. A deposit clears unretired records.\n\nWho can call what:\n- Owner (two-step transfer, no renounce): the proposals; cancel; close an asset to deposits at once; pause and unpause deposits; lower NAV_CAP; setFeeRecipient(address) once, not zero or the vault, final. The vault never calls feeRecipient.\n- Guardian: pause deposits, close an asset, cancel proposals as stated.\n- Nobody can move assets, block redeem or claim, mint outside deposit, change a fee or upgrade.\nUpgrades and pausing: none except the deposit pause and per-asset close.\nNumbers the contracts enforce: all constants except NAV_CAP.\n\nVIEWS: all assets with feed, answer, updatedAt, band, open, retired, probation, managed, short, totalOwed; previewDeposit; previewRedeem; depositStatus(token): a reason code and the asset at fault, as in deposit's revert; pending proposals.\n\nREVIEW. Accepted design, note only, add no mechanism: (1) deposit-then-redeem profit when a feed lags more than the 1% round-trip fee; (2) the owner pairs each token with its true feed; (3) an untransferable asset keeps its feed value until deposits are paused; (4) a retired asset counts 0 in NAV. MUST ATTACK: redeem with paused, blocked or upgraded tokens (64 assets in any state: under 28,000,000 gas); any way a role blocks redeem.","blockedReason":null,"createdAt":"2026-10-07T05:16:08.188Z","updatedAt":"2026-10-07T06:22:39.489Z","paidBy":"0x30b57ecf51d19abced7f6f70974e6fbb6f3b9da3","via":"api.imdnotdead.fun","parentJobId":null,"project":{"id":"9d7bffba-141b-4e33-be9c-1bfa450d9384","head":"ac7c29a2-6580-4ff3-ab80-edf03654b094","running":null,"versions":[{"jobId":"9d7bffba-141b-4e33-be9c-1bfa450d9384","workflowId":null,"objective":"Basket Protocol vault: an index vault for Stock Tokens on Robinhood Chain (chain id 4663). Contracts only: no launch token, pool or website. BASK is the vault's own ERC-20 share (18 decimals). Write \"Stock Tokens\", never \"tokenized\"; no Robinhood name, logo or ticker beyond the chain's name.\nToken name: Basket\nToken symbol: BASK\nTotal supply: 0 at deployment, no cap: deposit mints, redeem burns\n\nBUILD RULES\n- Simplest code that satisfies this text: add no feature, role, setting or safeguard.\n- solc 0.8.26, optimizer on, 200 runs, evm cancun, bytecode_hash none; custom errors.\n- If BaskVault exceeds 24,000 bytes of runtime, move views into BaskLens(address vault = $contract:BaskVault); never drop a check.\n- Constructors call no other contract. Time is block.timestamp, never block.number.\n- No proxy, delegatecall, selfdestruct, rescue or sweep. User-facing state changes are nonReentrant and emit events.\n\nMANIFEST\n1. BaskVault(address owner_, address guardian_): owner_ = 0x30B57ECf51D19ABcED7F6f70974e6fBb6f3b9Da3, guardian_ = 0x5ed39AF86f2C00ad99913B5d727bD68f2A904B68, written as these literals. Reverts if either is zero or they are equal.\nSTOCK_FACTORY = 0x4783C67b63dE2B358Ac5951a7D41F47A38F3C046 is a source constant.\n\nOutside contracts (on chain 4663 only; tests mock exactly these functions under test/; no fork tests, no vm.env):\n- Stock Token: ERC-20, 18 decimals, uid() returns bytes32, oraclePaused() returns bool.\n- STOCK_FACTORY.tokenAddress(bytes32 uid) returns address.\n- Feed: Chainlink proxy: decimals() is 8, aggregator() returns address, latestRoundData(); answer = USD per whole token.\n\nASSETS: a list of (token, feed, open, retired, minAnswer, maxAnswer, listedAt), at most 64, empty at deployment, never removed. managed[token] is the accounting balance: value never uses balanceOf and tokens sent directly are ignored.\nListing checks, at proposal and again at execution: token not listed; token.decimals() == 18; STOCK_FACTORY.tokenAddress(token.uid()) == token; feed.decimals() == 8; feed.aggregator() != 0; feed not used by another asset; answer > 0. On listing open = true, minAnswer = answer / 4, maxAnswer = answer * 4.\nGenesis: until the owner calls finalizeGenesis() (once, needs 3 or more assets), proposeAsset(token, feed) and proposeAssets(tokens[], feeds[]) list at once and deposits are impossible. Deposits open 72 hours after finalizeGenesis().\nOwner proposals (genesis listing is direct): list an asset; replace an asset's feed (feed checks and new answer inside the band, both times); re-centre a band on the answer at execution, under 26 hours old; reopen an asset (cancelled by any later close); retire an asset (closed both times); replace the guardian; raise NAV_CAP. A proposal waits 7 days, then anyone may execute it; it lapses 7 days later; the owner may cancel it, as may the guardian unless it replaces the guardian. One listing or feed replacement executes per 24 hours. An asset listed after genesis is on probation for 30 days. A retired asset is closed for good, skipped by every deposit check, 0 in NAV.\n\nPRICE is valid only if the feed read succeeds, answer > 0, minAnswer <= answer <= maxAnswer, updatedAt <= now, now - updatedAt <= 26 hours, and token.oraclePaused() returns false. value(amount) = amount * answer / 1e8, rounded down (USD, 18 decimals). USD limits below are dollars times 1e18.\n\ndeposit(token, amount, receiver, minSharesOut, deadline) requires:\n- deposits open and not paused; token listed and open, vault balance >= totalOwed[token]; receiver not the vault;\n- market gate: (now / 86400 + 4) % 7 is 1 to 5 (0 = Sunday) and 55800 <= now % 86400 < 70200; and 3 or more listed assets have feed updatedAt within the last 4 hours;\n- a valid price for this token and every asset with managed > 0; no asset short or unreadable (see LOSSES).\nPull the tokens; the vault balance must rise by exactly amount. NAV = sum of value(managed) before the deposit; v = value(amount).\ngross = v if totalSupply is 0, else v * totalSupply / NAV rounded down (revert if NAV is 0). fee = gross * 50 / 10000, rounded up: minted to feeRecipient, or not minted while that is unset. The receiver gets gross - fee; on the first deposit 1e15 of that goes to address(0xdEaD) instead. The receiver's amount must be > 0 and >= minSharesOut.\nCaps after the deposit, with NAV2 = NAV + v:\n- NAV2 <= NAV_CAP (starts 1,000,000; the owner lowers it at once, cancelling pending raises, raises it by proposal, never above 10,000,000,000);\n- value(managed[token]) <= max(NAV2 * 5 / 100, 25,000), or max(NAV2 / 100, 5,000) on probation;\n- bucket <= max(NAV2 * 25 / 100, 100,000): one bucket for all deposits, which first decays (bucket -= bucket * elapsed / 86400, floor 0), then adds v.\n\nredeem(shares, minAmountsOut[], deadline) reads no price, ignores every pause and gate, and never reverts because of an asset. fee = shares * 50 / 10000 rounded up: transferred to feeRecipient, or burned with the rest while unset. net = shares - fee is burned. Per asset: available = balanceOf(vault) - totalOwed[token], floor 0 (low-level static call, 50,000 gas, copying 32 bytes; any other outcome: unreadable, available = managed); leg = min(managed, available) * net / totalSupplyBeforeBurn, rounded down; require leg >= minAmountsOut[i] (missing entry = 0); managed -= leg. Each leg is paid to msg.sender by an external function only the vault itself may call, given 250,000 gas, which reverts unless the transfer succeeds, returns nothing or true, and the vault balance falls by exactly leg. If it fails, owed[msg.sender][token] and totalOwed[token] grow by leg. claim(token, to) pays min(caller's owed, vault balance) by the same function with no gas limit.\n\nLOSSES. An asset is short when available < managed. Nothing lowers managed automatically. flagDeficit(token), by anyone, records shortfall and time if larger than recorded. recognizeLoss(token), by anyone 7 days or more later, lowers managed by min(recorded, current shortfall) and clears the record. A deposit clears unretired records.\n\nWho can call what:\n- Owner (two-step transfer, no renounce): the proposals; cancel; close an asset to deposits at once; pause and unpause deposits; lower NAV_CAP; setFeeRecipient(address) once, not zero or the vault, final. The vault never calls feeRecipient.\n- Guardian: pause deposits, close an asset, cancel proposals as stated.\n- Nobody can move assets, block redeem or claim, mint outside deposit, change a fee or upgrade.\nUpgrades and pausing: none except the deposit pause and per-asset close.\nNumbers the contracts enforce: all constants except NAV_CAP.\n\nVIEWS: all assets with feed, answer, updatedAt, band, open, retired, probation, managed, short, totalOwed; previewDeposit; previewRedeem; depositStatus(token): a reason code and the asset at fault, as in deposit's revert; pending proposals.\n\nREVIEW. Accepted design, note only, add no mechanism: (1) deposit-then-redeem profit when a feed lags more than the 1% round-trip fee; (2) the owner pairs each token with its true feed; (3) an untransferable asset keeps its feed value until deposits are paused; (4) a retired asset counts 0 in NAV. MUST ATTACK: redeem with paused, blocked or upgraded tokens (64 assets in any state: under 28,000,000 gas); any way a role blocks redeem.","baseCommit":"0243d7da4a4337ae8b16bcdf15bb4ead736fd68f","state":"completed","createdAt":"2026-10-07T05:16:08.188Z"},{"jobId":"88af5a8c-2e49-4266-ab48-04ae593392fc","workflowId":null,"objective":"Add a website for this project's deployed vault, BaskVault at 0x518aa023c1b982a0a64b207b7d3a19bf973796e1 on Robinhood Chain (chain id 4663). The project is called Basket Protocol; use that as the site title. Its token is Basket, ticker BASK. Do not change or redeploy any contract. Simplest site that does what is written here; add no page or feature it does not state.\n\nRules. Static site: public RPC reads and wallet transactions only; the wallet must be on chain 4663 to send. Read every address outside this launch from the vault's views. Make few RPC calls: use the vault's aggregate views, and Multicall3 if it exists on the chain. Write \"Stock Tokens\" (never \"tokenized ...\"); no Robinhood name, logo or ticker beyond the chain's name. Show a Stock Token by its symbol() only, never its name(). Text read from chain, such as a feed's description(), is shown exactly as it is. Take every function name, struct field and reason code from the deployed ABI and the repository README, not from this text.\nAny read can revert or run out of gas (allAssets and depositStatus call every feed): give each read a gas limit of 10,000,000 (with 25 stocks, allAssets, depositStatus and previewDeposit each need over 1,000,000, and about 3,000,000 with 64), and send those three each as its own eth_call, never inside a Multicall3 batch; show what failed as \"unreadable\" and keep the rest of the page working. If allAssets() fails, read assetCount(), assets(i), managed(token) and totalOwed(token) one by one and each feed's latestRoundData() directly.\nBanner on every page: \"Not for US persons. Stock Tokens are not offered in the United States and are restricted in other countries. Basket Protocol is not affiliated with the issuer of Stock Tokens.\"\n\nPages.\n1. Vault. The vault has no NAV view: compute NAV on the page as the sum of managed x answer / 1e8 over every asset that is not retired, and NAV per BASK as NAV / totalSupply(). Show both, and NAV against NAV_CAP; mark them stale when a held stock's price is more than 26 hours old. Each stock: symbol, price, age of the price, share of NAV, status (open, closed or retired), on probation or not, short or not, amount owed. Say once that a retired stock counts 0 in NAV and for new deposits but is still paid out on redemption. For each open stock, whether it takes deposits now, from depositStatus(token) (it needs a listed token; the zero address always reads \"not listed\"); if not, the reason in plain words and the stock at fault (none when the returned address is zero). State the hours: Monday to Friday, 15:30 to 19:30 UTC, closed on US market holidays.\n2. Deposit. Choose an open stock and an amount; show the preview, the 0.5% fee and the BASK received (if previewDeposit reverts with DepositUnavailable(reason, asset), show that reason in plain words, not \"unreadable\"; the NAV, per-stock and daily caps appear only this way); approve, then deposit with minSharesOut 0.5% under the preview and a 10-minute deadline. Next to the button: \"Deposits are credited at the on-chain feed price, which can differ from the market by about 0.5% either way.\"\n3. Redeem. Enter BASK; show every stock amount from the preview, retired stocks included, and the 0.5% fee; redeem with each minimum 0.1% under the preview and a 10-minute deadline. Whenever a wallet is connected, not only after a redeem, list every stock, retired ones included, where owed(wallet, token) is above zero (wallet first, token second), each with a claim button that calls claim(token, to); to is the connected wallet unless the user enters another address (never the zero address), which is needed when the token refuses the wallet. A claim fails while the issuer pauses the stock; say it can be retried later. Say plainly that redemption is always open and pays a share of every stock.\n4. Owner. Visible to everyone; each button works only for the wallet the contract allows and shows who that is: owner() for everything except close and pause (owner() or guardian()), Cancel (see below), accept ownership (pendingOwner()) and Execute (anyone).\n   - Launch: a box to paste lines of \"TICKER tokenAddress feedAddress\" and a button that lists them all in one transaction. Then a table of what is listed: token symbol, the feed's description() and its current price side by side, so each pairing can be checked. Then \"Finalize genesis\", with a confirmation that it cannot be undone, that listed stocks can never be removed, and that deposits open 72 hours later.\n   - Later: forms to propose a new stock, a replacement feed, a band re-centre, reopening a stock, retiring a closed stock, a new guardian and a higher NAV cap (typed in dollars and sent as dollars x 1e18). Retire asks for confirmation that it cannot be undone: the stock is closed for good and counts 0 for new deposits, while redemption still pays it out, so new depositors take a share of its value from current holders. A list of pending proposals, read in pages with pendingProposals, showing what each does (for a new stock or a replacement feed: the token's symbol, the new feed's description() and its current price side by side, so the pairing can be checked before anyone executes it) and when it can be executed. Before showing Execute (anyone may press it), simulate the call; if it would revert, show the reason instead of the button. Cancel for the owner, or the guardian except on a new-guardian proposal.\n   - Controls: close a stock, pause and unpause deposits, lower the NAV cap (typed in dollars and sent as dollars x 1e18; this also cancels every pending raise), set the fee recipient (once, with a warning that it is final), transfer and accept ownership (with a warning that the new owner must not be the guardian).\n5. Losses. For each stock that is short, retired ones included: the shortfall, and the flag and recognise buttons anyone can press, with the date recognition becomes possible.\n\nCheck before delivery: every button reaches the right function with the right arguments against the deployed contract on a local fork or the live chain in read-only mode; the page works with no wallet connected; nothing is hidden from visitors who are not the owner.\n\nThe look: Grocery store theme to match the name Basket: shopping-basket and shelf price-tag motifs, warm fresh colours; still clean and easy to read, with numbers and warnings kept plain.","baseCommit":"3b1fe81cab5e4d6b148399ce2af5d84ebefeacb4","state":"completed","createdAt":"2026-10-07T15:38:06.239Z"},{"jobId":"7f4652b8-9f63-417c-840a-c589052dfe55","workflowId":null,"objective":"Update this project's website so it serves Basket Protocol's new vault, BaskVault at 0xd77a5f93f9d85e6990f389147713a9ad8ce5764c on Robinhood Chain (chain id 4663), deployed by launch 929 from https://github.com/identity-md-launches/launch-929-basket at commit b12f8ecdaac0acc13e47646441b4f312a2aab160. Keep the site's address, title (Basket Protocol), look, banner, wording rules and pages, and change only what this text says. Do not change or deploy any contract.\n\nThe vault this site was built for, 0x518aa023c1b982a0a64b207b7d3a19bf973796e1, is abandoned: it must not appear in any page, source or dist/ file. This repository's src/ and README describe that old vault: do not build anything from them. Take every function name, argument, struct field, enum, error and event from launch-929-basket's src/BaskVault.sol (solc 0.8.26, via_ir) and its README, and regenerate every hard-wired copy from them: VAULT, RUNTIME_HASH and ABI_HASH in web/src/deployment.ts (RUNTIME_HASH, the keccak256 of the deployed code, is 0x62b326b6d8b9191a8777932f5beb87bc1dd07765fdb83bad3c4463924da402d0), web/src/vault.abi.json, the reason list and error words in web/src/chain.ts, the proposal kinds and states, and the values in web/scripts/validate.ts and web/validation/WebsiteFork.t.sol. Keep checking the chain and the code hash before every send.\n\nWhat changed in the vault:\n- Reads whose shape changed (the site's code still reads them the old vault's way; results with several values come back by position): previewDeposit returns (shares, fee, locked), shares being what the receiver gets, with no value or gross; previewRedeem returns (amounts, fee), net = shares - fee; pendingProposals returns ids only, so read proposals(id) = (kind, token, target, value, createdAt, epoch, cancelled, executed) and proposalState(id) for each; losses(token) is now deficits(token) = (amount, since); assets(i) = (token, feed, open, retired, minAnswer, maxAnswer). Update every caller, and web/scripts/make-browser-fixture.ts to match.\n- No per-stock limit, no probation, no listedAt. Remove \"On probation\", the per-stock cap and any limit per stock: one stock may be any share of the vault.\n- Reason codes of depositStatus and DepositUnavailable(reason, asset), from 0: Ok, Genesis, WarmingUp, Paused, Unlisted, Retired, Closed, BalanceUnreadable, OwedUnderfunded, MarketClosed, TooFewFreshFeeds, FeedUnreadable, NonPositivePrice, OutsideBand, FuturePrice, StalePrice, OracleUnreadable, OraclePaused, Deficit, ZeroNAV. Show each in plain words.\n- previewDeposit does not check the size limit or the daily limit; deposit reverts with CapExceeded() or BucketExceeded(). On the Deposit page, before the button, with value = amount x answer / 1e8 and NAV as the page computes it: over the size limit when NAV + value > NAV_CAP; over today's limit when decayedBucket() + value > max((NAV + value) / 4, 100,000e18). Say how much fits now and that the daily limit refills over 24 hours. Then, once the allowance covers the amount, simulate the deposit from the wallet; if it would revert, show the reason in plain words instead of sending.\n- Proposal kinds, from 0: List, Feed, Band, Reopen, Retire, Guardian, NavCap. proposalState, from 0: Missing, Waiting, Ready, Expired, Cancelled, Executed, Voided. A retired stock voids its proposals; lowering the cap voids pending raises. The cap functions are proposeNavCap and lowerNavCap. Keep simulating Execute before showing it. Execute reverts InvalidProposal(id) whenever proposalState is not Ready, Waiting included, so when it fails show proposalState in words (Waiting: \"waiting, executable from <date>\"), never \"no longer pending\".\n- A feed may serve only one unretired stock; a retired stock's feed may be reused.\n- Anyone may execute a ready proposal in the same transaction as a deposit. Beside every pending List, Feed, Band or Retire proposal show: \"Pause deposits before this can be executed and keep them paused until it is executed and checked.\"\n\nFeed names. Wherever a feed's description() is shown, remove a leading \"Robinhood \" or, failing that, a leading \"RH\" when what follows starts with the stock's symbol: \"Robinhood AAPL / USD\" shows \"AAPL / USD\", \"RHSPY / USD\" shows \"SPY / USD\", \"Robinhood SGOV-USD\" shows \"SGOV-USD\". Mark the row \"check this pairing\" in the warning colour when the cleaned text does not start with the stock's symbol followed by a space, \"/\" or \"-\".\n\nFixes:\n- Owner page: after lines are pasted, and before List is offered, show the pairing table for the pasted lines, read from chain: symbol(), cleaned feed description, current price and the mark above. List stays disabled while any line fails to read or is marked \"check this pairing\", and sends exactly the lines the table shows; editing the lines redoes the table.\n- After a listing whose receipt wait fails or times out, read the vault again and show what is listed before offering List again; never offer List for a token already listed.\n- Deposit page: check the wallet's balance of the stock before Approve; if it is short, say so instead of approving.\n\nNew Docs page, in the menu and linked from the footer, in plain words and short sections:\n- What Basket is: one token, BASK, backed by a basket of Stock Tokens held in a vault on Robinhood Chain. Anyone deposits one listed Stock Token and receives BASK; redeeming BASK pays a share of every stock in the vault.\n- Deposits: Monday to Friday 15:30 to 19:30 UTC, closed on US market holidays; need at least three stock prices updated in the last four hours; priced by each stock's on-chain feed, which can differ from the market by about 0.5% either way.\n- Redemption: always open, never paused; pays a share of every stock, retired ones included. A stock that cannot be sent at that moment is kept for you as owed and claimed later on this site.\n- NAV: each stock the vault holds times its feed price, added up; retired stocks count 0.\n- Numbers: fees 0.5% on deposit and 0.5% on redemption, fixed; one daily limit for all deposits together, the larger of 25% of NAV and $100,000, refilling over 24 hours; vault size limit $1,000,000 at start, raised only by a 7-day proposal, never above $10 billion; up to 64 stocks.\n- Safety: new stocks, new feeds, new price bands, reopening, retiring, a new guardian and a higher size limit wait 7 days and the guardian can cancel them (except its own replacement); a new owner, the fee recipient (set once), a lower size limit and unpausing deposits take effect at once; the owner or guardian can pause deposits or close a stock at once; a closed stock can be retired by a 7-day proposal (it then counts 0 for new deposits while redemption still pays it out); a shortfall can be flagged by anyone and recognised 7 days later; no one can move the stocks, mint BASK outside deposits, change a fee or upgrade the vault.\n- Risks: feeds lag the market; the issuer of Stock Tokens can pause, block, burn or change them; there is no per-stock limit, so one stock may be most of the vault and its problems reach every holder; smart contracts can fail; not for US persons.\n- The vault address, linked to https://robin.etherscan.io/address/0xd77a5f93f9d85e6990f389147713a9ad8ce5764c, and the project's X account, https://x.com/Basket_IMD.\nFooter: add the X link https://x.com/Basket_IMD.\n\nCheck before delivery: on a fork of the live chain after block 82708976, every button reaches the right function with the right arguments on 0xd77a5f93f9d85e6990f389147713a9ad8ce5764c and the code hash check passes; no page, source or dist/ file contains 518aa023; every page works with no wallet connected; nothing is hidden from visitors who are not the owner.\n\nThe look: Grocery store theme to match the name Basket: shopping-basket and shelf price-tag motifs, warm fresh colours; still clean and easy to read, with numbers and warnings kept plain.","baseCommit":"af71e1cc0ba475c38de9067abc5ca21f39c0af7f","state":"completed","createdAt":"2026-10-07T20:24:38.956Z"},{"jobId":"b08aced8-cb0c-43cf-93ce-564e37465247","workflowId":null,"objective":"Redesign the look of this project's website and make the few changes below. Keep every page's purpose, every transaction and its arguments, every read, every check before a send (chain 4663, account, code hash, simulation), the vault address 0xd77a5f93f9d85e6990f389147713a9ad8ce5764c, the banner, the wording rules (\"Stock Tokens\", never \"tokenized\"; no Robinhood name, logo or ticker beyond the chain's name; tokens by symbol() only; feed descriptions without the \"Robinhood \"/\"RH\" prefix) and all existing warnings exactly as they are. Change only what this text says. Do not change or deploy any contract.\n\nChanges:\n- Menu: the main menu is Vault, Deposit, Redeem, Docs. The Owner page and the Losses page move out of the main menu to small footer links, \"Owner controls\" and \"Losses\". Both pages stay public at the same addresses (#owner, #losses) and keep everything they show and do. Claims stay on the Redeem page.\n- Deposit fix: after a deposit is confirmed, clear the preview and the amount, show \"Deposit confirmed\" with the transaction link, and do not offer Approve or Deposit again until the user enters an amount and asks for a new preview. Never show an old preview as current after any confirmed transaction.\n- Phones: at 375 px wide, every page works without sideways page scrolling; the Owner page's pairing tables and the Vault page's stock table show as stacked cards (one stock per card, with the same fields, prices and \"check this pairing\" mark) instead of wide tables; every link and button, footer links included, is at least 44 px tall to tap.\n\nThe words on it: keep every text of the current site as it is (Docs page, warnings, labels, confirmations, the banner); the only new words are the menu and footer labels and \"Deposit confirmed\" named above.\n\nThe look: A lively 1990s neighbourhood supermarket crossed with a Googie space-age arcade at night. Night-sky header: deep starry navy, soft purple searchlight beams, a glowing orange flying-saucer awning, lime-green and hot-pink neon script headings, a yellow ringed planet as the shop sign, retro rockets and arcade-screen panels. Below it the store: Memphis-style 90s patterns (squiggles, zigzags, triangles, confetti dots, grid paper) in teal, hot pink, sunshine yellow, purple and lime; aisle signs for the menu, checkerboard floor stripes, starbursts, shopping carts, shelves of colourful plain boxes, bags and cans. Decoration never shows numbers, prices or currency signs (no made-up price cards or price tags), so it can never be mistaken for the vault's real figures, which sit in plain panels clearly apart from the decoration. All artwork original, drawn in SVG or CSS in the site's own files: no real brand, product or company names or logos on any item, and no names, logos or characters from any film. Numbers, warnings, the banner and owner buttons stay plain, high-contrast (WCAG AA) and easy to read; small animations only, off when the device asks for reduced motion; fast and tidy on phones, no new outside services.\n\nCheck before delivery: rerun the site's existing validation (the fork test, the live read-only check and the browser transaction checks) and show that every transaction and read is unchanged; take screenshots of every page at desktop width and at 375 px; confirm no brand or film names, no numbers or currency signs in decoration, and that the deposit preview is cleared after a confirmed deposit.","baseCommit":"764a897a48a80527c79a94f50bdb689cc332b92d","state":"completed","createdAt":"2026-10-07T22:28:50.200Z"},{"jobId":"23842d8f-4cdf-4f06-be9d-9f68a265120c","workflowId":null,"objective":"Update this project's website to serve Basket Protocol's vault 5, BaskVault 0x4e19d7472e650399b06eeaa5ccc29da9b8efbebd on Robinhood Chain (chain id 4663), source https://github.com/identity-md-launches/launch-1020-basket at commit 0a88bde. Keep the address, title, banner, menu, footer, wording rules (\"Stock Tokens\", never \"tokenized\"), feed-name cleaning and \"check this pairing\" mark, every check before a send, the deposit-preview fix, phone cards and 44 px taps. Change no contract.\n\nVault 3 is abandoned: no page, source, artifact or dist/ file may contain d77a5f93 or 518aa023; update README.md and DESIGN.md. Vault 5 is a rewrite: take every name, argument, field order, enum, error and event from launch-1020-basket's src/ and README, and regenerate every hard-wired copy (RUNTIME_HASH 0x0419f8e9496a55eaafb9b3fa203d459cc7f82fdac17359c11f51c2e59a5f64fe: all five src files, foundry.toml settings (drop constantOptimizer: false), transferTopic filled); replace check-preservation.mjs. Drop what vault 5 lacks: decayedBucket, depositsOpenAt, assetIndexPlusOne, the 72 h, 64 cap, setFeeRecipient, proposalState, fixed 8 decimals (use tokenDecimals and feedDecimals), the page's own 26 h stale rule, fixed hours, holidays, 7-day proposal wait, 14-day expiry and 24 h cooldown. allAssets, depositStatus, previewDeposit, previewRedeem and send simulations get 30,000,000 gas.\n\nReason words, 0 to 13: OK; genesis not finished; deposits paused; outside deposit hours; not listed; closed or retired; listed twice; balance unreadable; vault short of this stock; feed price missing or too old; price outside its band; paused by its issuer; pool check failed (over 3% off, unreadable, under its floor or quote feed bad); too few fresh prices.\n\nVault page, from allAssets(): NAV = sum over unretired assets of managed x answer / 10^(tokenDecimals + feedDecimals), \"indicative\" unless every held row has reason 0; NAV per BASK; per stock: symbol, cleaned feed name, price and age, held, share of NAV, closed/retired, owed, reason, and the pool check (poolPrice = dollars per whole token, 18 decimals, 0 if failed; else beside the feed price with the gap in %). If allAssets fails, read each stock alone, pool check \"unreadable\". Vault status from one depositStatus([]); hours from settings() (0-0: \"open at all hours\"); size limit; \"no fees yet\" while feeRecipient is zero.\n\nDeposit page: one or more open stocks with amounts in one deposit(tokens, amounts, receiver = wallet, minSharesOut = preview less 0.5%, deadline). Check balances, set each short allowance to exactly its amount, then simulate. previewDeposit(tokens, amounts) returns (BASK received, fee in BASK, dollar value) and checks the size limit (CapExceeded); first deposit: 0.001 BASK is locked forever. Show any revert in words.\n\nRedeem page: previewRedeem(shares) just before sending gives (amounts in assetTokens order, fee); minAmountsOut[i] = amounts[i] less 0.1%, 0 where 0; receiver = wallet, editable, never zero or the vault. Say unsent stocks are owed to the receiver and only that wallet can claim them. Claims: owed(wallet, token) for every listed token; claim(tokens, to) per stock or \"Claim all\" in batches of 10. Redeem and claim send gas = estimate x 1.3.\n\nOwner controls:\n- Listing, before finalize: paste lines \"TICKER token feed pool quoteFeed minLiquidity\" (no pool: zero addresses and 0). The pairing table adds the pool's two token symbols and the quote feed's cleaned name (shown, never marked; quote feeds may repeat, only stock feeds must be unique). List stays disabled while a line fails or is marked. It sends one genesisList(token, feed, pool, quoteFeed, minLiquidity) per row in order (\"row n of N\", one prompt each), skips rows already listed (asset(token).token not zero), re-reads after each, never sends a row twice. Finalize only with 3 or more listed and reason 0 on every allAssets() row, else name the failing rows; confirm: irreversible, deposits can start at once, later stocks only by List proposal.\n- Proposals: propose(action, token, data), one form per action, encoded per the README table (global actions: token = address(0)); NavCap in dollars; Setting shows current values by settings() field name (Hours sets two) and bounds; Hours as two UTC times; FeeRecipient: never unset, fees start once executed. Pending: pendingProposals(start, 50) over 1..proposalCount, action, stock and data in words, \"waiting, executable from <readyAt>\" or \"ready until <readyAt + 7 days>\". Execute: owner only, when ready, simulated first; Retire and Resync only while deposits are paused. Cancel: owner, or guardian except Guardian actions. Resync form: \"Pause deposits before proposing; unpause after it executes.\"\n- Immediate: pauseDeposits and close (owner or guardian); unpauseDeposits and lowerNavCap in dollars (owner); removeRetired (anyone); transferOwnership (never to the guardian), acceptOwnership.\nA failed read says so, with Retry; never show 0 as if real.\n\nDocs page: same sections, updated in plain words: deposits take one or more listed Stock Tokens at once and are open at all hours unless the owner sets hours; prices come from each stock's on-chain feed, which updates on weekdays only; every stock deposited or held must pass a pool check (30-minute pool average within 3% of the feed, enough liquidity; no pool: feed under 26 hours old), so deposits can stop, mostly at weekends; redemption is always open, and anything not sent at once is kept as owed and claimed on the Redeem page; fees 0.5% in and 0.5% out, only once the owner sets a fee recipient; size limit $1,000,000, raisable to $10 billion; up to 250 stocks; owner changes wait 2 days, only the owner executes them (within 7 days), the guardian can cancel them (not its own replacement); pause, close and a lower limit act at once; a retired stock counts 0 for new deposits but is still paid out; no one can move the stocks, mint BASK outside deposits, change the fee rate or upgrade the vault; risks: feeds lag the market, the issuer can pause, block, burn or change Stock Tokens, one stock may be most of the vault, thin pools can be pushed to stop deposits, smart contracts can fail, not for US persons.\n\nCheck before delivery: on a fork after block 83448310, every button reaches the right function with the right arguments on vault 5 and the code-hash check passes; rerun all validation; screenshots of every page at desktop width and 375 px.\n\nThe look: a loud, cheerful 1990s supermarket weekly flyer come to life, and nothing else: no space, stars, planets, rockets, saucers, neon night scenes or arcade elements. Sky-blue page; every section a boxed flyer panel with thick sunshine-yellow and fire-engine-red borders, royal-blue and white panels inside; chunky condensed all-caps headline lettering (an open-licence font in the site's own files) and a small pixel-style font for accents; a big store-sign header with the name Basket and a shopping-basket mark; starburst stickers with words only (WOW!, Fresh!, New!); a slow scrolling marquee strip of playful shopping slogans along the top (about baskets, aisles and carts only, never about returns, safety, prices or opening times); an original cartoon store-clerk mascot with a bow tie on the Vault page; hanging aisle signs for the menu; fluorescent lights, stocked shelves of plain boxes, cans and bottles, produce crates, carts, a checkout belt and a checkerboard floor strip as panel art. The supermarket must be obvious at first glance on every page. Decoration never shows numbers, prices or currency signs; the vault's real figures sit in plain white panels clearly apart from it. All artwork original SVG or CSS in the site's own files: no real brand, store, product or company names or logos, nothing from any film. Numbers, warnings, the banner and owner buttons stay plain, high-contrast (WCAG AA) and easy to read; small animations only, off for reduced motion; fast on phones.","baseCommit":"ed56b54dc28f26bb0ce5119ab4b04139224bed8e","state":"completed","createdAt":"2026-10-08T16:50:54.160Z"},{"jobId":"15696011-9cac-4cd3-832c-edcfc310743a","workflowId":null,"objective":"Improve this project's website for Basket Protocol, BaskVault 0x4e19d7472e650399b06eeaa5ccc29da9b8efbebd on Robinhood Chain (chain id 4663). Change no contract. Keep: the vault address, code-hash check and ABI; every transaction's function and arguments and every check before a send (chain, account, code hash, simulation), allowances, minimums, deadlines and gas rules; the listing and Finalize rules; the title, banner text, six pages (Vault, Deposit, Redeem, Docs in the menu; Owner controls and Losses in the footer); the wording rules (\"Stock Tokens\", never \"tokenized\"; no Robinhood name except \"Robinhood Chain\"); the 1990s supermarket weekly-flyer look and its art rules (no space or arcade art; decoration never shows numbers, prices, currency signs or real brand names; all art original SVG or CSS in the site's files). No new services, trackers or cookies.\n\nFix the art:\n1. Slogan strip: on desktop the text starts in place and fills under half the strip. Make the slogans enter at the right edge and run fully across in a seamless loop with no empty stretch at any width up to 2,560 px. Phones already work: keep them as they are.\n2. Clerk on the Vault page: the waving hand floats off the end of the arm. Redraw so the hand joins the wrist, with sensible proportions.\n3. Deposit page picture: a cart standing on the checkout belt with its wheels sunk in the belt makes no sense. Replace it with a clear scene, e.g. a shopper unloading a basket onto the belt.\n4. Redeem page: its own picture, not the Deposit one, e.g. a cashier handing over a full bag.\n5. Letters shake and glitch while scrolling, worst on Redeem (the blue title panel: small top line, big heading, line under it), also on other pages. Find the cause (suspects: the strip's endless transform animation repainting the page, text on fractional pixels under Windows display scaling, the rotated sign and stickers) and make all text stay still while scrolling in Chrome and Edge on Windows at 100%, 125% and 150% scaling, and on phones.\n6. The shelf strip under the header fills its frame at desktop width, without stretching the art.\n\nMake it easier to use:\n7. Progress and result beside each action, not only at the top: checking, waiting for wallet, submitted (explorer link), confirmed, refreshing. Name each approval (\"Approval 2 of 3: SYMBOL\") and claim batch; after approvals say \"Approvals done: press Deposit\"; never call a step done after a rejection or timeout. After a redeem or claim, re-read and show what is still owed and to whom. After a proposal, show its id and ready time read back from chain.\n8. Redeem: the owed-stocks warning sits beside the receiver field. Above Redeem and above each Claim button show the full receiver address, wrapped, labelled \"your connected wallet\" or \"a different wallet\"; say a different receiver must connect to claim.\n9. Owner: every stock dropdown starts on \"Choose a stock\" and its button stays disabled until a stock is chosen; never fall back to the first stock (today Close would hit the first stock). Show the chosen symbol and full token address; keep the choice across refreshes; if it disappears, ask again.\n10. States: \"Reading...\" while loading; \"unreadable\" with Retry only after a failure; plain words for an empty vault (\"No Stock Tokens are listed yet. Deposits start after the owner finishes setup.\") versus a finalized vault with every stock closed. Beside every grey button say why (connect, switch to Robinhood Chain, balance too low, approval pending, data missing, not your role) with the fix next to it. Never show a failed read as 0.\n11. Wallet: show \"Connecting...\" and ignore double clicks. With no wallet in the browser: \"Open this page in your wallet app's browser\" and a Copy site link button. Keep the one standard wallet connection; no wallet picker, no relay.\n12. Owner page order: deposit pause state with Pause/Unpause, then Pending proposals, then the other immediate controls, then the proposal forms, each folded until opened; jump links to Launch, Pause, Pending, Immediate, Propose (scroll and focus, no route change); after Finalize, Launch shrinks to one done line.\n13. With 25 stocks: Vault stock cards compact with a Details toggle (symbol, state, held, share and any failed check always visible) and a search box; Deposit: search to add stocks, amounts kept while searching, Preview right below the chosen stocks; Claims: Claim all and owed stocks first, unreadable ones visible, zero ones folded (\"Nothing owed for N other stocks\"). Display order never changes what is sent.\n14. Phones: less header, shelf and title spacing so the first form or message shows on the first 375x812 screen; text readable, inputs 16 px, taps 44 px.\n15. Settings in plain units beside the raw value, current and proposed: poolDeviation 300 = 3%; noPoolAge 93,600 s = 26 hours; band 4 = centre /4 to x4; Hours as UTC clock times: say plainly that 00:00 to 00:00 means always open and any other pair means Monday to Friday only (00:00 to 24:00 is not \"always\"); what directLimit does. Same field names, bounds and encoding.\n16. \"Use full balance\" beside every stock amount and the BASK amount, filled with the exact balance (no rounding, no commas).\n17. Listing check: \"Checking row n of N\", each row's result as it finishes, earlier results kept when a row fails, the failing row named; a marked or failed row says \"Needs correction\", never \"Ready to list\". List rules unchanged.\n18. Plain steps first. Deposit: status, then \"choose amounts, preview, approve each stock, press Deposit\" above the form. Redeem: the estimate is read again just before sending, minimums are 0.1% under it, stocks not sent stay owed to the receiver. Order, simulation and gas details go in a folded \"Transaction details\".\n\nFixes found by our check:\n19. Primary blue buttons (Preview deposit, Deposit, Redeem) lose their label on hover: the generic button:hover background wins over the primary style, white text on near-white. Keep every button readable on hover, focus and after a tap on phones.\n20. Pairing table: also show each row's pool, quote feed and minLiquidity, and for pool rows the pool's current 30-minute liquidity (observe([1800,0]), the vault's formula) as a multiple of minLiquidity and the pool-vs-feed gap in %. Mark \"Needs correction\" (List disabled) when the liquidity is under minLiquidity or the gap is over poolDeviation; warn when under 1.5x.\n21. Every parser refusal names its line (bad address, checksum, minLiquidity).\n22. An already-listed row is compared with its line (feed, pool, quoteFeed, minLiquidity); a difference is marked, not \"will skip\".\n23. Never prompt a row whose earlier transaction may still be pending: keep the hash after a receipt timeout and wait for it; after a reload, compare the owner's pending and latest nonce and say \"a transaction is still pending\" until they match.\n24. After a declined prompt, offer \"Resume listing\" from that row (re-check first) instead of a dead List button.\n25. Finalize shows how many stocks are listed with their symbols; if the pasted list still has unlisted rows, it stays disabled and names them.\n26. When the reason is 9, 10 or 11 the pool was not read: show \"Pool check: not run\" instead of \"Failed · poolPrice 0\".\n\nCheck before delivery: rerun all validation and the fork walk-through of every button against vault 5 (same calldata as before for the same inputs), including a 25-row listing on a fork with a declined prompt, a pending transaction and a reload; screenshots of every page at 1440 and 375 px, empty and with 25 stocks; the strip, clerk, both pictures and scrolling checked at 125% and 150% Windows scaling.","baseCommit":"7f8045d4134f592b5147f5e96647f6ec96eb59d7","state":"completed","createdAt":"2026-10-08T19:36:16.627Z"},{"jobId":"e5af4f31-5c30-4936-9fef-56bf2708c8ef","workflowId":null,"objective":"Improve this project's website for Basket Protocol on Robinhood Chain (chain id 4663). Change only the art, the speech bubbles of item 2, the slogan strip (item 4), the checks and docs of item 5 and the fixes of item 6; change no contract. Keep every read, transaction, check before a send, page, route, other visible text and form layout exactly as now, except item 6. In web/src change only Scenery.tsx, styles.css and the Scenery imports and picture lines of item 2 in Flows.tsx and Vault.tsx, and the lines item 6 names; same inputs, same calldata as now. Keep the flyer frames, colours, checkerboard floor, BasketIcon and word-only WOW!/Fresh! bursts. Decoration never shows numbers, prices, currency signs or real brand names (the character's name badge reads BASKET PROTOCOL, the project's own name: allowed); no space or arcade art; wording \"Stock Tokens\", never \"tokenized\"; no Robinhood name except \"Robinhood Chain\". No new packages, plugins, services, trackers or cookies.\n\n1. Art files. Download https://gateway.pinata.cloud/ipfs/bafkreibnejmdxnivk72bfjujjwexz7b3xa45ggcq7vtwu3ihi3gwdjmi7i (art-manifest.json) and check that its SHA-256 is 2d22583bb51557f412a6894d897cfc3bb839d31850fd676a6d0746cd61a588fa; if a gateway.pinata.cloud url fails, use the same path on ipfs.filebase.io. It lists 37 files (path, url, sha256, bytes; .webp also width, height): the owner's character (art/character/vault.webp, deposit.webp, redeem.webp), 33 Microsoft Fluent Emoji flat food SVGs and their MIT licence (art/food/). Download each url, check its SHA-256 and size, save it byte for byte under web/public/ at its path. If any hash, size or download is wrong, stop and report; never substitute, re-encode, optimise or edit a file. Save the manifest byte for byte as artifacts/art-manifest.json. Pages load the files only as ./art/... from img src in .tsx, never via CSS url(), imports or inlining; no outside request at run time.\n\n2. People. Delete the hand-drawn Clerk() and Checkout() SVGs in Scenery.tsx and their imports, the .clerk rule (styles.css 416-418) and the .checkout rule (765-767); keep the base .clerk-panel and .clerk-panel .burst rules. Each img gets width/height from the manifest; display:block; width:100%; height as below; object-fit:contain; object-position:50% 100%, so a narrow frame makes it smaller, never thinner. Use the files as given (scale only).\n- Vault (Vault.tsx:63-66): in the .clerk-panel box (sun, red border, WOW!) show vault.webp, alt \"Cheerful store worker beside a produce crate\", on the box's bottom edge: 300 px tall on desktop, 260 px at 661-960 px; the title's checker strip stays at its bottom. At 660 px and below the box becomes full width right under the title, picture 200 px, WOW! kept; drop the corner-clerk rules (styles.css 955-970, 1275-1277).\n- Deposit (Flows.tsx:484) and Redeem (Flows.tsx:697): replace the checkout scene at the top of the aside panel with a picture stage (sun, 4 px red border), picture centred on its bottom edge: deposit.webp, alt \"Store worker holding out a shopping basket\"; redeem.webp, alt \"Store worker handing over a full grocery bag\". 320 px tall on desktop, 260 px at 661-960 px, 240 px on phones.\n- Speech bubble with each picture: white, rounded, 3 px ink border, a tail pointing at her mouth; ink text in the Flyer font, about 18 px (15 px on phones), exactly as written below (no case change), in free space beside her head inside the frame, never covering her face, hands, props or WOW!; the box may grow to fit. Vault: \"I was hoping you would come through my aisle\". Deposit: \"Go ahead and put it in hehe\". Redeem: \"are you sure that’s all you came here for?\". Each bubble stays still (no rotation or motion).\n\n3. Shelf strip. StoreShelf (in .shop-window under the header, and its unframed copy in the Vault \"Stock shelves\" panel, Vault.tsx:128) shows two food shelves instead of drinks: light-blue back wall, each row standing on a red plank with ink edges. Top shelf: the first 14 art/food SVGs in manifest order (packaged goods, bread to bagel); bottom shelf: the next 19 (fresh food, apple to green-apple). Each row repeats its list across the frame's full inner width at every width, no empty end, clipped, never moving; rows of img elements, no CSS transform on an SVG <pattern> (iOS ignores it). Icons square, never stretched: about 40 px with even gaps on desktop (strip about 120 px tall), 22-24 px on phones with thin planks (strip about 64 px). Decorative: aria-hidden, alt \"\". Merge the duplicated .store-shelf size rules (styles.css 330-334, 540-546, 914-916, 1050-1053, 1112-1114, 1238-1243) into one set.\n\n4. Slogan strip (Marquee, Scenery.tsx:2-32). On iPhone it shows the first slogans, a blank stretch, then restarts: .marquee-window's contain: paint and isolation: isolate make iOS paint only what was on screen at the start. Remove both; clip with overflow: hidden only; give the moving track will-change: transform. One seamless loop at every width up to 2,560 px: two identical halves, each at least as wide as the strip, moving 0 to -50%, never a blank stretch. It always runs: remove the Pause/Resume button, the paused state and class and their CSS; the text window takes the full width; add no other pause, stop or hide control (owner's decision). Keep the animation inside @media (prefers-reduced-motion: no-preference), so it stays still only under reduced motion. Keep the slogans and the 180 s desktop / 45 s phone loops.\n\n5. Checks and rules. Add \".webp\": \"image/webp\" to the MIME maps in web/scripts/inspect-export.mjs, check-motion.mjs, check-guards.mjs and run-browser.mjs. Update checks that refer to the old art; never disable, skip or loosen one. Byte budget (artifacts/bundle-check.json, lib included): 7,708,907 of 8,388,608 bytes today, art counted twice (web/public, dist); stay under, if needed by retaking the 24 screenshots at lower JPEG quality (not under 35); add no other images to artifacts. Rewrite every DESIGN.md and README.md line this contradicts (clerk, shopper and cashier scenes, phone corner clerk, pausable, optional or paint-contained marquee, \"original SVG/CSS\" only); keep \"no ... borrowed characters\". New rule: art is original SVG/CSS plus the manifest files kept byte for byte: the owner's character (the only person on the site) and Fluent Emoji food (MIT). Add a dated entry to artifacts/validation.md.\n\n6. Site-check fixes (calldata unchanged). Deposit gas: wallet.tsx:208 sends redeem and claim with estimate x 1.3; add deposit (a 3-stock deposit ran out of gas on a fork) and the note at Flows.tsx:713. Claims (Flows.tsx:829-838): when s.complete is false say \"Owed balances unreadable. Retry vault.\", never \"Nothing is owed\". directLimit words (governance.ts:344): all or nothing: with at most N held stocks every leg is tried now, with more every leg is owed. Pending listing (wallet.tsx:55-103): clear the saved hash once the account nonce has moved past it (Speed up/Cancel), so the tab is not stuck.\n\nCheck before delivery: every file in web/public/art and dist/art matches its manifest SHA-256 (list them); network check (six pages, 1440 and 375 px): no outside request but the chain RPC; the strip at 1440, 800 and 375 px (both shelves full, square icons, no empty end, Vault copy too); the pictures whole, not stretched or cropped; each bubble's line, covering nothing; on a 375x812 screen every form or message that showed without scrolling still does (else shrink the strip, never text); no horizontal overflow at 320-1440 px; the slogan strip loops with no blank stretch in Chromium and WebKit at 375 and 2,560 px, stays still under reduced motion, no Pause button; check-motion.mjs passes at DPR 1, 1.25 and 1.5; all validation and the fork walk-through of every button against the site's current vault rerun with the same calldata as now; a 3-stock deposit passes on the fork; no change to chain, model, contract or package files, nor to wallet.tsx beyond item 6.","baseCommit":"5d42f6269699a253600d4bce3aebd23b7456a0ea","state":"completed","createdAt":"2026-10-09T01:06:17.201Z"},{"jobId":"079c9385-a16b-4e83-b01c-67edc7e2c977","workflowId":null,"objective":"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.\n\n1. 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 <commit>\". Run SOLC=<solc> npx tsx scripts/regenerate-abi.ts; never hand-edit its outputs; if the hash differs, stop and report.\n\n2. Interface.\n- 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.\n- 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.\n- 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).\n- 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.\n- 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.\n\n3. 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.\n\n4. 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.\n\n5. 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 <weekday> <time> New York time (<date>, in <h> h <m> min; your time <local>). 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 <N> must have updated in the last <H> 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:\noffset(t) = 4 h if dst = 2 or (dst = 0 and daylight(t)), else 5 h\nweekSecond(t) = (t + 4 days + W - offset(t)) mod W\ninside(t) = (from = to = 0) or from <= weekSecond(t) < to\nnextOpening(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.\nWeekday 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).\n\n6. 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.\n\n7. 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\".\n\nUpdate 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.","baseCommit":"35b090059515b7d17ede221248a268ebe251bdf7","state":"completed","createdAt":"2026-10-09T03:41:52.674Z"},{"jobId":"7fd5c4e3-467f-44bb-a3ae-698020dfaa52","workflowId":null,"objective":"Update this project's website for Basket Protocol (vault 6, BaskVault 0x739fD5B653aA092a434534FA1aDE67C1770b5a5B on Robinhood Chain, chain id 4663) from one patch file. Change no contract. The patch is already built and checked against this project's current commit c57830e: apply it exactly, rebuild, rerun the checks and deliver. It changes no transaction: every send keeps its function, arguments and calldata for the same inputs; the only new behaviour near a send is a refusal before the wallet prompt (the four refusals listed under Fixes below).\n\n1. Patch. Download https://gateway.pinata.cloud/ipfs/bafybeievv3nrpn3pagxusvug3wfcavnt4xejxl6lo3yc6otui2lpckj6a4 (if that fails: https://ipfs.filebase.io/ipfs/bafybeievv3nrpn3pagxusvug3wfcavnt4xejxl6lo3yc6otui2lpckj6a4). It must be 306,218 bytes with SHA-256 136c66b2707c009280aaf5ff593a6be3a3202accaf4289acdba99ac835e92115; if not, stop and report. On c57830e run git apply --check, then git apply. Apply it as it is: do not restyle, re-time, re-word or rewrite anything it changes, and never change the look or a text to make a check pass. It touches only web/src, web/scripts, web/public/favicon.svg, web/validation/README.md, README.md and DESIGN.md.\n\n2. What it does (already implemented; for your records):\n- Vault, Deposit, Redeem: the store-worker picture stands at the right end of the blue title panel, head and raised hand above its top edge, speech bubble beside her head with the tail at her mouth; on phones she stands on her own shelf at the top of the panel. The yellow picture boxes and the WOW! burst are gone (Fresh! stays). Lines: Vault \"I was hoping you would come through my aisle\", Deposit \"Go ahead and put it in\", Redeem \"are you sure that’s all you came here for?\"; bubbles never split a word.\n- The footer tagline and the Vault eyebrow line are removed.\n- Redeem: the yellow note about unsent stocks is removed; the different-wallet receiver label says it must connect here to claim. Docs: a FAQ panel after Redemption (\"What if a stock can’t be sent when I redeem?\").\n- Vault, Stock shelves panel: the stocks are yellow shelf-edge labels on red store shelves. Held stocks come first on big labels (price, price age, status, share of the basket, value, amount held), the rest on small labels; filters All/Open/Closed/Held with counts, search, and a details drawer per label with everything the old cards showed. Each shelf row swings once when it first comes into view; nothing moves under reduced motion.\n- Slogan strip: each half holds only as many whole lines as cover the screen (no stretched blank space, no will-change), same speeds; this removes the gap on wide screens and the blank text on iPhone.\n- Favicon: red panel, yellow frame, the header's basket.\n- Fixes: minLiquidity at most uint128 in proposal forms; BalanceGas/PayGas bounds show the vault's combined rules and current maximum; UTC-5/UTC-4 wording under Dst 1/2; claim errors name the stock; words for MathOverflow and InvalidTick; the reopen countdown ticks and re-reads at zero (\"may be open now\" at the boundary); dates in words (starts rounded up, ends rounded down); FreshCount 0 words; hours line without raw seconds on Vault/Deposit; \"Listed stocks unreadable\"; redeem preview legs by index; reason-12 and pairing labels from settings(); pending/replaced/cancelled listing messages; Finalize disabled while the paste box is empty (rows kept in localStorage); an Hours start of Sunday 2:00-2:59 am refused under Dst 0; the vault address refused as new owner, Guardian or FeeRecipient.\n- Checks: gates re-scoped and hardened (every send, request and argument source pinned; fixed-clock deadline check), check-art/check-motion/check-visibility updated for the new layout, strip rule and favicon; run-browser.mjs forks block 83874298 (vault 6 still empty and unfinalized, same code) through a built-in read-only proxy to an archive RPC (default https://robinhood.api.pocket.network, override BASKET_RPC; BASKET_FORK_BLOCK must stay at an empty-vault block) and saves its 24 screenshots at JPEG quality 36 to stay under 8 MiB.\n\n3. The live vault now has 25 Stock Tokens listed and is not finalized (it may be finalized when you run). Do not depend on its state; the walk-through uses the pinned block and needs outbound HTTPS to the archive RPC.\n\n4. Then in web/: npm ci, npm run typecheck, npm run build, then node scripts/run-browser.mjs before the other checks (must pass: 61 checks, 70 wallet sends, 24 screenshots; it regenerates the screenshots that check-bundle counts), then every check: validate, check-preservation, check-interface, check-calldata, check-art, check-motion, inspect-export, check-guards, check-fixes, check-visibility (baseline = the c57830e dist), check-bundle. Commit the rebuilt dist and every regenerated artifact (incl. artifacts/phone-visibility.json) with the patched sources. The build should give dist/assets/index-CLHhkE-M.js (SHA-256 a44be771be2176f9bcd62618208d441db32f49107b169e30776969223d42e80b) and dist/assets/index-B0l62uGD.css (SHA-256 a9403561f24ebf9368cd5ebe46b19ce63c78a454c7aa008a53c2a1c7a93f5354); if it differs, say how. Never loosen a check; if one fails, report it instead of changing the patched code.\n\n5. Add a dated artifacts/validation.md entry. Before delivery: build, typecheck and every check pass; live verifyNetwork passes; art files match their manifest; no file has a vault 1-5 address fragment.","baseCommit":"c57830eb230dc6755529c03823410f2785f5e7f1","state":"completed","createdAt":"2026-10-09T15:38:08.637Z"},{"jobId":"f71a1021-15ee-4101-9315-c526dec88dc6","workflowId":null,"objective":"Update this project's website for Basket Protocol (vault 6, BaskVault 0x739fD5B653aA092a434534FA1aDE67C1770b5a5B on Robinhood Chain, chain id 4663) from one patch file. Change no contract. The patch is already built and checked against this project's current commit 7aea768: apply it exactly, rebuild, rerun the checks and deliver. It changes no transaction, read or argument: every send keeps its function, arguments and calldata for the same inputs.\n\n1. Patch. Download https://gateway.pinata.cloud/ipfs/bafkreibkrptdvaztppyb5zzxapdorzw4s2vvhu5gzktxthr732oe2enzme (if that fails: https://ipfs.filebase.io/ipfs/bafkreibkrptdvaztppyb5zzxapdorzw4s2vvhu5gzktxthr732oe2enzme). It must be 153,792 bytes with SHA-256 2a8be63a83337bf01ee73703c6e8e6dc96ab53d3a6caa7799e3fde9c4d11b961; if not, stop and report. On 7aea768 run git apply --check, then git apply. Apply it as it is: do not restyle, re-time, re-word or rewrite anything it changes, and never change the look or a text to make a check pass.\n\n2. What it does (already implemented; for your records):\n- Slogan strip: the two identical halves now sit in one place and each moves as its own animation, half a cycle apart, so each one jumps back only while it is fully off screen; same text, look and speed (16 px/s, 64 px/s on phones), still under reduced motion, no will-change. This removes the flicker at the loop reset.\n- Docs, Deposits panel: \"Deposits open Sunday 8 pm to Friday 8 pm New York time, closed on US market holidays, redemptions always open\" (capital D).\n- Deposit and Redeem: a small blue pill first in the form, always shown: \"Redemptions are open 24/7. Deposit hours apply to deposits only.\" The Redeem intro now reads \"Receive your share of every stock.\"\n- Vault, Stock shelves: no price age on the labels or in the details drawer (the row is \"Feed price\"); a stock whose price the vault refuses as too old keeps its \"old price\" tag, without a time.\n- Checks: gates re-scoped to this update (calldata and sends must equal 7aea768; the strip rules for the new loop; the pill, Docs and shelf texts pinned).\n\n3. Then in web/: npm ci, npm run typecheck, npm run build, then node scripts/run-browser.mjs before the other checks (must pass: 61 checks, 70 wallet sends, 24 screenshots, fork block 83874298 through its read-only proxy as in v9; needs outbound HTTPS to the archive RPC), then every check: validate, check-preservation, check-interface, check-calldata, check-art, check-motion, inspect-export, check-guards, check-fixes, check-visibility (baseline = the 7aea768 dist), check-bundle. Commit the rebuilt dist and every regenerated artifact with the patched sources. The build should give dist/assets/index-DJaEP2OT.js (SHA-256 3dd75e0037c6c23adf7535fae4216a9f4b5baead3de59526ed69f68a6f33f288) and dist/assets/index-CizpQbvD.css (SHA-256 1c601e5a9a136fd523a2d22c3c1d92690fd620d25448e6c09dc053d01cd25f58); if it differs, say how. Never loosen a check; if one fails, report it instead of changing the patched code.\n\n4. Add a dated artifacts/validation.md entry. Before delivery: build, typecheck and every check pass; live verifyNetwork passes; art files match their manifest; no file has a vault 1-5 address fragment.","baseCommit":"7aea768c2197cde37353107b8d1a49533e33c942","state":"completed","createdAt":"2026-10-09T21:47:37.423Z"},{"jobId":"1be7239d-66a9-42dc-a289-f5c77bb6d6c6","workflowId":null,"objective":"Update this project's website for Basket Protocol (vault 6, BaskVault 0x739fD5B653aA092a434534FA1aDE67C1770b5a5B on Robinhood Chain, chain id 4663) from one patch file. Change no contract. The patch is already built and checked against this project's current commit 507f2b1: apply it exactly, rebuild, rerun the checks and deliver. It changes no transaction: every send keeps its function, arguments and calldata for the same inputs. It adds one chain read (the receipt of the visitor's own confirmed deposit, to show the BASK received) and no wallet request. Disconnect forgets the connection on this page; the visitor can remove the site's saved permission in the wallet app.\n\n1. Patch. Download https://gateway.pinata.cloud/ipfs/bafkreialgxix5c44nx7prq64afjx3qxchcn3mqmevqdbhws42src7moebm (if that fails: https://ipfs.filebase.io/ipfs/bafkreialgxix5c44nx7prq64afjx3qxchcn3mqmevqdbhws42src7moebm). It must be 246,058 bytes with SHA-256 0b35d17e8b9c6dfef8c3dc01537dc2e2389bb64184ac0613da5cd4a22fb1c40b; if not, stop and report. On 507f2b1 run git apply --check, then git apply. Apply it as it is: do not restyle, re-word or rewrite anything it changes, and never change the look or a text to make a check pass. It touches only web/src (Flows.tsx, wallet.tsx, main.tsx, styles.css), web/scripts (check-calldata, check-bundle, check-visibility, check-art, run-browser), web/validation/README.md, README.md and DESIGN.md.\n\n2. What it does (already implemented; for your records):\n- Deposit: the form opens with the listed open stocks the connected wallet holds, largest dollar value first, one row each with balance, dollar value, amount box, Max and Remove. Balances worth under one cent sit behind \"Show small balances\". A stock whose own price check fails is greyed with the reason and a Refresh. One search box \"Add another stock\" (ticker or token address, at most six matches) replaces the grid of Add buttons. A running dollar total, called an estimate. The status is one line while deposits are open and the full box otherwise. The page is one column.\n- Deposit: a closed list \"All stocks you can deposit (N)\" with every open stock of the vault's own list, A to Z; a press adds that stock to the form.\n- Deposit: after a confirmed deposit, \"You received X BASK.\" from the Deposit event of that transaction's receipt.\n- Redeem: the BASK amount box is emptied after a confirmed redeem.\n- Header: a small Disconnect button beside the address. The page forgets the wallet, stays disconnected after a reload until Connect wallet is pressed and answered, and makes no wallet request or delayed permission change.\n- Checks: gates re-scoped to this update without loosening them. check-calldata: every source but Flows, wallet and main is byte-identical to 507f2b1 and those three equal it once their listed pieces are put back; send(), approveAll and every onSubmit and getSpec equal 507f2b1; the one new read is pinned to its place, no wallet request is added, and the initial account reply is guarded against overwriting a newer connection action or account event; network and page-load sinks are scanned; complete ordered added calls and direct or aliased transaction-state writes are independently pinned outside the regenerated lists. run-browser.mjs keeps its 61 checks, adds 13 for the new pages, and its 70 wallet sends are the same as before, send for send (only deadlines follow the clock). Its 24 screenshots are now JPEG quality 32 (36 before): the Deposit pictures with a row per stock are much taller and the quality-36 set no longer fits the 8 MiB delivery budget.\n\n3. Then in web/: npm ci, npm run typecheck, npm run build, then node scripts/run-browser.mjs before the other checks (must pass: 74 checks, or 75 when it starts outside the vault's deposit hours and adds its own time-warp check as before; 70 wallet sends; 24 screenshots; fork block 83874298 through its read-only proxy as in v9 and v10; needs outbound HTTPS to the archive RPC; it rewrites the screenshots that check-bundle counts), then every check: validate, check-preservation, check-interface, check-calldata, check-art, check-motion, inspect-export, check-guards, check-fixes, check-visibility (baseline = the 507f2b1 dist), check-bundle. Commit the rebuilt dist and every regenerated artifact with the patched sources. The build should give dist/assets/index-O9B-ydQc.js (SHA-256 b00c8fc2424b865d0cad1562d1a719509f2d59283c42a5c455b638b5a3f7c9ef) and dist/assets/index-D1E9mcXX.css (SHA-256 cc2fbd60fd75bf20cf245e771ba6062f4f5a6e3b9e306ce8d9d0544ecd2c4330); if it differs, say how. Never loosen a check; if one fails, report it instead of changing the patched code.\n\n4. Add a dated artifacts/validation.md entry. Before delivery: build, typecheck and every check pass; live verifyNetwork passes; art files match their manifest; no file has a vault 1-5 address fragment.","baseCommit":"507f2b164160ed7b1361bac55b67bac76a0f3d38","state":"blocked","createdAt":"2026-10-12T20:24:50.748Z"},{"jobId":"563679e7-fae2-4066-8abc-02b10e852340","workflowId":null,"objective":"Owner's answer to the v11 review (job 1be7239d, blocked at \"needs input\"): no replacement patch and no exception for the four findings. Apply the same patch exactly, as below, and deliver it. Do not change Vault.tsx, wallet.tsx, styles.css, web/index.html or any preservation pin for those findings. The first build of v11 already did this right: patch applied unchanged, both expected output hashes matched, 74 checks, 70 wallet sends, 24 screenshots, bundle 8,247,243 bytes. Repeat that and deliver. The owner has read the four findings and declines them for this update: (1) the character panel before the vault figures on phones is this site's approved design, not a defect; (2) a delayed Connect reply undoing a later Disconnect needs an accountsChanged event during a pending eth_requestAccounts and a Disconnect press before that request answers, a window of milliseconds in real wallets, so it waits for a later update; (3) Open Graph tags belong to the frozen page shell and wait for a later update; (4) the one-line 24/7 label is the approved v10 design and overflows only where Arial, Helvetica and a metric-compatible fallback are all missing and sans-serif falls back to DejaVu Sans; it waits for a later update. One narrow exception: if check-art fails only on \"redeem 661: tag words split or outside\" because of that fallback font, record it in artifacts/validation.md and deliver anyway. Review step: these four findings are known and accepted by the owner; list them if you must, but they are not grounds to send the build back. The exact-patch rule below stands over any design-bar item.\n\nUpdate this project's website for Basket Protocol (vault 6, BaskVault 0x739fD5B653aA092a434534FA1aDE67C1770b5a5B on Robinhood Chain, chain id 4663) from one patch file. Change no contract. The patch is already built and checked against this project's current commit 507f2b1: apply it exactly, rebuild, rerun the checks and deliver. It changes no transaction: every send keeps its function, arguments and calldata for the same inputs. It adds one chain read (the receipt of the visitor's own confirmed deposit, to show the BASK received) and no wallet request. Disconnect forgets the connection on this page; the visitor can remove the site's saved permission in the wallet app.\n\n1. Patch. Download https://gateway.pinata.cloud/ipfs/bafkreialgxix5c44nx7prq64afjx3qxchcn3mqmevqdbhws42src7moebm (if that fails: https://ipfs.filebase.io/ipfs/bafkreialgxix5c44nx7prq64afjx3qxchcn3mqmevqdbhws42src7moebm). It must be 246,058 bytes with SHA-256 0b35d17e8b9c6dfef8c3dc01537dc2e2389bb64184ac0613da5cd4a22fb1c40b; if not, stop and report. On 507f2b1 run git apply --check, then git apply. Apply it as it is: do not restyle, re-word or rewrite anything it changes, and never change the look or a text to make a check pass. It touches only web/src (Flows.tsx, wallet.tsx, main.tsx, styles.css), web/scripts (check-calldata, check-bundle, check-visibility, check-art, run-browser), web/validation/README.md, README.md and DESIGN.md.\n\n2. What it does (already implemented; for your records):\n- Deposit: the form opens with the listed open stocks the connected wallet holds, largest dollar value first, one row each with balance, dollar value, amount box, Max and Remove. Balances worth under one cent sit behind \"Show small balances\". A stock whose own price check fails is greyed with the reason and a Refresh. One search box \"Add another stock\" (ticker or token address, at most six matches) replaces the grid of Add buttons. A running dollar total, called an estimate. The status is one line while deposits are open and the full box otherwise. The page is one column.\n- Deposit: a closed list \"All stocks you can deposit (N)\" with every open stock of the vault's own list, A to Z; a press adds that stock to the form.\n- Deposit: after a confirmed deposit, \"You received X BASK.\" from the Deposit event of that transaction's receipt.\n- Redeem: the BASK amount box is emptied after a confirmed redeem.\n- Header: a small Disconnect button beside the address. The page forgets the wallet, stays disconnected after a reload until Connect wallet is pressed and answered, and makes no wallet request or delayed permission change.\n- Checks: gates re-scoped to this update without loosening them. check-calldata: every source but Flows, wallet and main is byte-identical to 507f2b1 and those three equal it once their listed pieces are put back; send(), approveAll and every onSubmit and getSpec equal 507f2b1; the one new read is pinned to its place, no wallet request is added, and the initial account reply is guarded against overwriting a newer connection action or account event; network and page-load sinks are scanned; complete ordered added calls and direct or aliased transaction-state writes are independently pinned outside the regenerated lists. run-browser.mjs keeps its 61 checks, adds 13 for the new pages, and its 70 wallet sends are the same as before, send for send (only deadlines follow the clock). Its 24 screenshots are now JPEG quality 32 (36 before): the Deposit pictures with a row per stock are much taller and the quality-36 set no longer fits the 8 MiB delivery budget.\n\n3. Then in web/: npm ci, npm run typecheck, npm run build, then node scripts/run-browser.mjs before the other checks (must pass: 74 checks, or 75 when it starts outside the vault's deposit hours and adds its own time-warp check as before; 70 wallet sends; 24 screenshots; fork block 83874298 through its read-only proxy as in v9 and v10; needs outbound HTTPS to the archive RPC; it rewrites the screenshots that check-bundle counts), then every check: validate, check-preservation, check-interface, check-calldata, check-art, check-motion, inspect-export, check-guards, check-fixes, check-visibility (baseline = the 507f2b1 dist), check-bundle. Commit the rebuilt dist and every regenerated artifact with the patched sources. The build should give dist/assets/index-O9B-ydQc.js (SHA-256 b00c8fc2424b865d0cad1562d1a719509f2d59283c42a5c455b638b5a3f7c9ef) and dist/assets/index-D1E9mcXX.css (SHA-256 cc2fbd60fd75bf20cf245e771ba6062f4f5a6e3b9e306ce8d9d0544ecd2c4330); if it differs, say how. Never loosen a check; if one fails, report it instead of changing the patched code.\n\n4. Add a dated artifacts/validation.md entry. Before delivery: build, typecheck and every check pass; live verifyNetwork passes; art files match their manifest; no file has a vault 1-5 address fragment.","baseCommit":"507f2b164160ed7b1361bac55b67bac76a0f3d38","state":"completed","createdAt":"2026-10-12T23:31:06.396Z"},{"jobId":"962bebc3-8852-4f69-ac51-7be85719aad1","workflowId":null,"objective":"Update this project's website for Basket Protocol (vault 6, BaskVault 0x739fD5B653aA092a434534FA1aDE67C1770b5a5B on Robinhood Chain, chain id 4663) from one patch file. Change no contract. The patch is already built and checked against this project's current commit a6e1b4d: apply it exactly, rebuild, rerun the checks and deliver. It changes no transaction: every send keeps its function, arguments and calldata for the same inputs. It adds no chain read, no wallet request, no storage key and no network call.\n\n1. Patch. Download https://gateway.pinata.cloud/ipfs/bafybeifqld4r6jdqr4ncmwqhzp53o5bpadu73l2mrx6alwhak3paypnnr4 (if that fails: https://ipfs.filebase.io/ipfs/bafybeifqld4r6jdqr4ncmwqhzp53o5bpadu73l2mrx6alwhak3paypnnr4). It must be 395,142 bytes with SHA-256 881cb6eb0973fca89e36e9df2a72502e319b7b83557f57036a32718d39029230; if not, stop and report. On a6e1b4d run git apply --check, then git apply (it carries one new binary file, web/public/share-card.jpg, as a GIT binary patch; git apply handles it). Apply it as it is: do not restyle, re-word or rewrite anything it changes, and never change the look or a text to make a check pass. It touches 18 files: web/src (Vault.tsx, components.tsx, Docs.tsx, Flows.tsx, wallet.tsx, main.tsx, styles.css), web/index.html, the new web/public/share-card.jpg, web/scripts (check-art, check-bundle, check-calldata, check-fixes, check-visibility, run-browser), web/validation/README.md, README.md and DESIGN.md.\n\n2. What it does (already implemented; for your records):\n- Vault: the heading is \"Always in stock\" (the page shows it in capitals) with no sentence under it; the \"Size limit\" label is now \"Maximum Basket Capacity\" with \"(eligible to be raised)\" smaller underneath.\n- Docs, \"What Basket is\": four paragraphs added after the first (no set weights; how traders keep BASK near its backing; the 0.5% fee is set to go to ITEM staking once ITEM is live; ITEM is not live yet).\n- Deposit: the \"Before you deposit\" box says its two sentences directly, without a fold. No status area in normal operation; during a known closure an animated CLOSED sign and one short sentence. The Vault page then shows a small \"Vault status: Closed\" line.\n- Redeem: one column; the \"Take your basket home\" box is removed, and the wallet-switch instruction line is removed from Deposit and Redeem. \"Claim owed stocks\" shows only when something is owed, could not be read, is being claimed or was claimed this visit; otherwise one line, \"Nothing is owed to this wallet.\" Once shown it stays for that account until reload or account change, also after navigating away and back. The \"Nothing owed for N other stocks\" fold is gone; the batches note is one line, shown only with more than one stock owed.\n- Link preview: Open Graph and Twitter card tags in web/index.html and the picture share-card.jpg (1200x630, 44,831 bytes).\n- Three fixes: after a wallet Speed up the page shows and reads the mined hash from the receipt, so \"You received X BASK.\" and the links follow the mined transaction; the 24/7 label may wrap at a word boundary with a wide fallback font; a Connect answer that arrives after a later Disconnect is dropped.\n- Checks: gates re-scoped to this update without loosening them. check-calldata: every web/src source outside the seven files is byte-identical to a6e1b4d and those seven equal it once their listed pieces are put back; the head of send() through the receipt wait is byte-identical and only its tail replaces the wallet's hash by the receipt's; connect() and disconnect() are pinned and the new counter is advanced only there; approveAll, every onSubmit and getSpec, the Claim all handler and the owed read equal a6e1b4d; no new read, wallet request, storage key or network sink; 496 identical and 1,773 mutually refused calldata cases as before. run-browser.mjs keeps its 74 checks in order (two re-worded for the approved status display) and adds 10; its 70 wallet sends are the same as before, send for send (only deadlines follow the clock). Its 24 screenshots are JPEG quality 26 (32 before) to stay inside the 8 MiB delivery budget. check-bundle pins web/index.html and both copies of share-card.jpg.\n\n3. Then in web/: npm ci, npm run typecheck, npm run build, then node scripts/run-browser.mjs before the other checks (must pass: 84 checks, or 85 when it starts outside the vault's deposit hours and adds its own time-warp check as before; 70 wallet sends; 24 screenshots; fork block 83874298 through its read-only proxy as before; needs outbound HTTPS to the archive RPC; it rewrites the screenshots that check-bundle counts), then every check: validate, check-preservation, check-interface, check-calldata, check-art, check-motion, inspect-export, check-guards, check-fixes, check-visibility (baseline = the a6e1b4d dist), check-bundle (8,069,862 of 8,388,608 bytes here). Commit the rebuilt dist and every regenerated artifact with the patched sources. The build should give dist/assets/index-BFEYBx6O.js (SHA-256 c88a2cacd5068291197cc2526850ca31223184004fb827d37a52a169f745f7f6), dist/assets/index-DMUMxJ0Z.css (0480e963e928ad5adf873a0fd9b6285aedf474e209d20f0881b508a5210087f8), dist/assets/ccip-DaOwsnsF.js (1b46776c8efcfa1ab8458bb97b1e31acb5230bcd5d589cc80f33ac82f88f4164), dist/index.html (a60077e0ad16890a0d21be2051b52d38153e202a69a1db6acb4c307ae2e1b6c9) and dist/share-card.jpg (dc14dd6f4068ec9325426583104b1c6ae8748fbb17d8326863c9612280eacd85); if it differs, say how. Never loosen a check; if one fails, report it instead of changing the patched code.\n\n4. Add a dated artifacts/validation.md entry. Before delivery: build, typecheck and every check pass; live verifyNetwork passes; art files match their manifest; no file has a vault 1-5 address fragment.\n\n5. Review step. These are the owner's decisions, accepted, and not grounds to send the build back: the Vault heading stands alone with no sentence under it; on phones the character panel comes before the vault figures; there is no Change wallet button; the Docs sentence about ITEM is the owner's wording and ITEM is not live; the claims panel is hidden when nothing is owed; there is no OPEN sign or normal-operation status line, only the CLOSED sign during a known closure. List them if you must. The exact-patch rule above stands over any design-bar item.","baseCommit":"a6e1b4d2eb5988ab8eb7cfc404161f035aa96d84","state":"completed","createdAt":"2026-10-13T07:14:01.257Z"},{"jobId":"a0ddfeb5-2eeb-4dbc-82a9-39b228194332","workflowId":null,"objective":"Update this project's website for Basket Protocol (vault 6, BaskVault 0x739fD5B653aA092a434534FA1aDE67C1770b5a5B on Robinhood Chain, chain id 4663) from one patch file. Change no contract. The patch is already built and checked against this project's current commit 586998c: apply it exactly, rebuild, rerun the checks and deliver. It changes no transaction: every send keeps its function, arguments and calldata for the same inputs. It adds no chain read, no wallet request, no storage key and no network call.\n\n1. Patch. Download https://gateway.pinata.cloud/ipfs/bafkreibqo6zgtkky647sxsvnvenpd6kfbp6jutlju5i5xsp346wtc5h4au (if that fails: https://ipfs.filebase.io/ipfs/bafkreibqo6zgtkky647sxsvnvenpd6kfbp6jutlju5i5xsp346wtc5h4au). It must be 97,425 bytes with SHA-256 3077b269a958f73f2bcaada91af1f9450bfc9a4d69a751dbc9fbe7ad3174fc05; if not, stop and report. On 586998c run git apply --check, then git apply. Apply it as it is: do not restyle, re-word or rewrite anything it changes, and never change the look or a text to make a check pass. It touches 10 files: web/src (Flows.tsx, wallet.tsx, styles.css), web/scripts (check-bundle, check-calldata, check-visibility, run-browser), web/validation/README.md, README.md and DESIGN.md. No new file.\n\n2. What it does (already implemented; for your records):\n- Deposit: while the form is empty (no wallet connected, or a connected wallet that holds no listed stock and has no row), the list \"All stocks you can deposit (N)\" is shown open across the panel, with its heading as a plain line instead of a fold, the same two sentences and the same stock buttons in the existing grid. Once shown for an account it stays open for that account until the account changes or the page is reloaded, also after a press has added a row. A wallet that holds listed stock sees the closed fold exactly as before. No words change.\n- Redeem: the result line after a confirmed Claim all (and after a redeem that left stock owed) reads \"Still owed to <receiver>: <the stocks still owed, or Nothing owed.>\" and no longer counts the stocks that are not owed; the unused count is removed from the tail of send().\n- Checks: gates re-scoped to this update without loosening them. check-calldata: Vault.tsx, components.tsx, Docs.tsx and main.tsx are frozen again; every web/src source outside Flows.tsx and wallet.tsx is byte-identical to 586998c and those two equal it once their listed pieces are put back; the head of send() through the receipt wait is byte-identical and its tail has exactly one pinned replacement (the result detail); the five mined-hash state writes, connect() and disconnect(), the counter uses, approveAll, every onSubmit and getSpec, the Claim all handler and the owed read equal 586998c; no new read, wallet request, storage key or network sink; four reviewed display-only added calls in DepositPage and one removed count call in send() are pinned by digest; 496 identical and 1,773 mutually refused calldata cases as before. check-bundle's source scope is Flows, wallet and styles. check-visibility compares the 586998c dist at 375x812 and names one exception, the open Deposit list. run-browser.mjs keeps its 84 checks in order and adds 2; its 70 wallet sends are the same as before, send for send; its 24 screenshots are unchanged in name, order and quality (26).\n\n3. Then in web/: npm ci, npm run typecheck, npm run build, then node scripts/run-browser.mjs before the other checks (must pass: 86 checks, or 87 when it starts outside the vault's deposit hours and adds its own time-warp check as before; 70 wallet sends; 24 screenshots; fork block 83874298 through its read-only proxy as before; needs outbound HTTPS to the archive RPC; it rewrites the screenshots that check-bundle counts), then every check: validate, check-preservation, check-interface, check-calldata, check-art, check-motion, inspect-export, check-guards, check-fixes, check-visibility (baseline = the 586998c dist), check-bundle (8,055,484 of 8,388,608 bytes here). Commit the rebuilt dist and every regenerated artifact with the patched sources. The build should give dist/assets/index-CFIsCDgK.js (SHA-256 14991f60318eacd64a0070b0e1cb29b591ce744ecbbb3cce6a44101b7ee8a973), dist/assets/index-93wOgsf7.css (de331fa183d2be573ade7f790289f8acfc79ee4a2322f3877520f9b4f349d281), dist/assets/ccip-DK1SzuxE.js (0ed8570a07accffdac034dec8c85a73f16b158e1e2576cad29024e7197482e19), dist/index.html (416333c1c6fc7f8918e84e783bd95b82a0df99ebf868c25335cd4eea404e3a56) and the unchanged dist/share-card.jpg (dc14dd6f4068ec9325426583104b1c6ae8748fbb17d8326863c9612280eacd85); if it differs, say how. Never loosen a check; if one fails, report it instead of changing the patched code. If the archive RPC refuses the fork block again, report it as in v12 and deliver with the other checks passing: the walkthrough record of this patch exists outside your run.\n\n4. Add a dated artifacts/validation.md entry. Before delivery: build, typecheck and every check pass; live verifyNetwork passes; art files match their manifest; no file has a vault 1-5 address fragment.\n\n5. Review step. These are the owner's decisions, accepted, and not grounds to send the build back: the Deposit stock list is shown open across the panel while the form is empty and stays open for that account, while a wallet with stock keeps the closed fold; the Vault heading stands alone with no sentence under it; on phones the character panel comes before the vault figures; there is no Change wallet button; the Docs sentence about ITEM is the owner's wording and ITEM is not live; the claims panel is hidden when nothing is owed; there is no OPEN sign or normal-operation status line, only the CLOSED sign during a known closure. List them if you must. The exact-patch rule above stands over any design-bar item.","baseCommit":"586998cf5eb2a6ccce05615ddf7f44874813042c","state":"completed","createdAt":"2026-10-13T15:52:03.597Z"},{"jobId":"4200ae72-cb68-48c6-86fc-661b87269484","workflowId":null,"objective":"Update this project's website for Basket Protocol (vault 6, BaskVault 0x739fD5B653aA092a434534FA1aDE67C1770b5a5B on Robinhood Chain, chain id 4663) from one patch file. Change no contract. The patch is already built and checked against this project's current commit 2b7d55b: apply it exactly, rebuild, rerun the checks and deliver. It changes no transaction: every send keeps its function, arguments and calldata for the same inputs. It adds no wallet request, no storage key and no network call; its one optional chain read (ITEM statistics) stays switched off while the ITEM addresses are null.\n\n1. Patch. Download https://gateway.pinata.cloud/ipfs/bafkreiaice3ri4pdev6ymhqjeplnugtimckifg4jjyabiyjzinm6ags7gu (if that fails: https://ipfs.filebase.io/ipfs/bafkreiaice3ri4pdev6ymhqjeplnugtimckifg4jjyabiyjzinm6ags7gu). It must be 195,568 bytes with SHA-256 0811371471e3257d861e0923d6da1a686094829b894e001461394359e01a5f35; if not, stop and report. On 2b7d55b run git apply --check, then git apply. Apply it as it is: do not restyle, re-word or rewrite anything it changes, and never change the look or a text to make a check pass. It touches 21 files: web/src (Docs.tsx, Flows.tsx, styles.css; new Tokenomics.tsx, tokenomicsData.ts, BaskGuide.tsx, baskGuideData.ts), web/scripts (check-art, check-bundle, check-calldata, check-visibility, run-browser; new check-tokenomics.tsx, check-tokenomics-live.mjs, check-bask-guide.tsx, tokenomics-browser.mjs, bask-guide-browser.mjs, bask-guide-content.md), web/validation/README.md, README.md and DESIGN.md.\n\n2. What it does (already implemented; for your records):\n- Docs: three local tabs (Docs, Tokenomics, BASK) with keyboard navigation and linked ARIA panels; Docs is the default. \"What Basket is\" says the fee goes to ITEM staking and no longer says ITEM is not live. Five new panels after \"Risks\" and before \"Find Basket\": ITEM; Earn ITEM by providing liquidity (with the gauge table); Earn BASK by staking ITEM; Rewards FAQ; ITEM risks. Written as a live product; no addresses.\n- Tokenomics tab: ITEM supply allocation chart, four-year release chart, both tables and the approved copy; its statistics block renders and reads nothing while any of its five addresses is null (all are).\n- BASK tab: BASK supply, NAV and backing, minting and redemption arithmetic with four worked examples, and the arbitrage flywheel with a fifth; static illustrations with exact integer arithmetic, no wallet, storage or network use.\n- Deposit, wider than 960px: the panel has two columns, the form with the \"Before you deposit\" notes under it on the left and the stock list always open on the right. At 960px and below nothing changes. The sentence \"Grey stocks are already in the form above.\" is removed; the warning note reads \"Issuer restrictions and pool checks can temporarily halt deposits.\"\n- Checks: gates re-scoped to this update without loosening them. check-calldata: every web/src source outside Docs.tsx and Flows.tsx is byte-identical to 2b7d55b and those two equal it once their listed pieces are put back; the four new sources are pinned by reviewed digests and scanned for wallet, storage, network and send sinks; send(), connect(), disconnect(), approveAll, every onSubmit and getSpec, the Claim all handler and the owed read equal 2b7d55b; 496 identical and 1,773 mutually refused calldata cases as before. The three module checks prove its numbers against the brief and the canonical text. check-visibility compares the 2b7d55b dist at 375x812 (phones unchanged). run-browser.mjs keeps all 86 checks in order (three re-worded for the desktop layout) and adds the tab checks and one for the ITEM panels; its 70 wallet sends are the same, send for send; its 24 screenshots keep their names and order at JPEG quality 18 (26 before) to stay inside the 8 MiB delivery budget.\n\n3. Then in web/: npm ci, npm run typecheck, npm run build, then node scripts/run-browser.mjs before the other checks (must pass: 91 checks, or one more when it starts outside the vault's deposit hours and adds its own time-warp check as before; 70 wallet sends; 24 screenshots; fork block 83874298 through its read-only proxy as before; needs outbound HTTPS to the archive RPC), then every check: npx tsx scripts/check-tokenomics.tsx, node scripts/check-tokenomics-live.mjs, npx tsx scripts/check-bask-guide.tsx, validate, check-preservation, check-interface, check-calldata, check-art, check-motion, inspect-export, check-guards, check-fixes, check-visibility (baseline = the 2b7d55b dist), check-bundle (7,954,426 of 8,388,608 bytes here). Commit the rebuilt dist and every regenerated artifact with the patched sources. The build should give dist/assets/index-Ci2_uPd-.js (SHA-256 d2ff471dd8d267fe2abcd5e41a21faa1b9c89a2228dfabc3968c8d301716e70f), dist/assets/index-C-PJiW18.css (cd80da1b5cb5635d72956b51b8f384df4272b5cf06d38f48e9458c391eed706a), dist/assets/ccip-DNB2G4hs.js (3385feafe463caa18c2023daa3b27350a9f2f0ccb459ffdeeb7f10d3c2123c43), dist/index.html (2ee5b1006266a0982382731b0e731fd2b9f089db39ec69ed9cebb25257bc3f2b) and the unchanged dist/share-card.jpg (dc14dd6f4068ec9325426583104b1c6ae8748fbb17d8326863c9612280eacd85); if it differs, say how. Never loosen a check; if one fails, report it instead of changing the patched code. If the archive RPC refuses the fork block again, report it and deliver with the other checks passing: the walkthrough record of this patch exists outside your run.\n\n4. Add a dated artifacts/validation.md entry. Before delivery: build, typecheck and every check pass; live verifyNetwork passes; art files match their manifest; no file has a vault 1-5 address fragment.\n\n5. Review step. These are the owner's decisions, accepted, and not grounds to send the build back: the Docs page has local tabs and its ITEM, Tokenomics and BASK text is written as a live product without addresses or pre-launch warnings; on desktop the Deposit stock list is always open in the right-hand column with the notes under the form, phones keep one column; the Vault heading stands alone; on phones the character panel comes before the vault figures; there is no Change wallet button; the claims panel is hidden when nothing is owed; there is no OPEN sign or normal-operation status line, only the CLOSED sign during a known closure. List them if you must. The exact-patch rule above stands over any design-bar item.","baseCommit":"2b7d55bc32d09610fed936d963d9a8c492f4eecf","state":"completed","createdAt":"2026-10-13T20:14:27.855Z"},{"jobId":"01bfb7d2-f3ef-46a3-b6a0-f5c26496fba3","workflowId":null,"objective":"Update this project's website for Basket Protocol (vault 6, BaskVault 0x739fD5B653aA092a434534FA1aDE67C1770b5a5B on Robinhood Chain, chain id 4663) from one patch file. Change no contract. The patch is already built and checked against this project's current commit c05c174: apply it exactly, rebuild, rerun the checks and deliver. It changes style rules for phones only, 39 lines added at the end of web/src/styles.css. No script file changes: every other web/src file is byte-identical to c05c174, so no transaction, wallet request, chain read, storage key or network call changes, and no word or picture.\n\n1. Patch. Download https://gateway.pinata.cloud/ipfs/bafkreiegjgay7nxqmzmmenx323t36ph7pmfzddcmypj46oeelj6bcfnnqy (if that fails: https://ipfs.filebase.io/ipfs/bafkreiegjgay7nxqmzmmenx323t36ph7pmfzddcmypj46oeelj6bcfnnqy). It must be 97,146 bytes with SHA-256 8649818fb6f06658c236fbd6e7bf3cff7b0b918c4cc3d3cf38845a7c1115ad86; if not, stop and report. On c05c174 run git apply --check, then git apply. Apply it as it is: do not restyle, re-word or rewrite anything it changes, and never change the look or a text to make a check pass. It touches 9 files: web/src/styles.css, web/scripts (check-art, check-bundle, check-calldata, check-visibility, run-browser), web/validation/README.md, README.md and DESIGN.md.\n\n2. What it does (already implemented; for your records). Both are the owner's decisions from his own phone screenshots; desktop is unchanged.\n- Vault, 660px and below: the title picture stands in the middle of the panel (it and its bubble were centred as one group, which left her in the left half). Her bubble is 138px wide, keeps its three lines and its place beside her head; from 375px up she is exactly in the middle, narrower only as far left as the bubble needs to stay 4px inside the frame. Her shelf line runs across the panel and the heading is centred. No height or vertical place changes.\n- Deposit and Redeem, 660px and below: iPhone browsers draw the focus marker around the heading after a tab is tapped (the page moves the focus to the heading). While the marker is drawn, her shelf line sits 3px lower and ends at the marker's outer edge, so it meets the marker's lower left corner as one line. Without the marker the line is where it was. The marker and the focus move are unchanged.\n- Checks: gates re-scoped to this update without loosening them. check-calldata: HEAD is c05c174, no edited script file, every web/src source frozen whole, the module and source digests kept, the added style rules pinned by one digest and scanned; 496 identical and 1,773 mutually refused calldata cases as before. check-bundle: only styles.css may change, no new file. check-visibility compares the c05c174 dist at 375x812 with no exception: every first-screen element keeps its words and vertical place; the Vault title is asserted across the panel. check-art keeps every assertion at every width from 320 to 2560px in both engines and adds the Vault phone layout, every title against the c05c174 title, and the focus marker meeting the shelf line, each rejecting the old look. run-browser.mjs keeps all 91 checks under the same names in order, none added; its 70 wallet sends are the same, send for send; its 24 screenshots keep their names and order at JPEG quality 18.\n\n3. Then in web/: npm ci, npm run typecheck, npm run build, then node scripts/run-browser.mjs before the other checks (must pass: 91 checks, or one more when it starts outside the vault's deposit hours and adds its own time-warp check as before; 70 wallet sends; 24 screenshots; fork block 83874298 through its read-only proxy as before; needs outbound HTTPS to the archive RPC), then every check: npx tsx scripts/check-tokenomics.tsx, node scripts/check-tokenomics-live.mjs, npx tsx scripts/check-bask-guide.tsx, validate, check-preservation, check-interface, check-calldata, check-art, check-motion, inspect-export, check-guards, check-fixes, check-visibility (baseline = the c05c174 dist), check-bundle (7,969,177 of 8,388,608 bytes here). Commit the rebuilt dist and every regenerated artifact with the patched sources. The build should give dist/assets/index-Ilfw5yUx.js (SHA-256 87776ebd6738dc3ab4f15f6a3a8f591ce5549e120fffe48a1e110046f352ef34), dist/assets/index-BRdefnhV.css (6d9deadc70d0c2350019458324a868b605b929425e3f5352864dddc9bc97fa80), dist/assets/ccip-DYKMBxXZ.js (c2ba7ecb68f43ee4c208425c879b63d3a4c2ca346111396c24850bc327171e60), dist/index.html (e73b2083579cda0f83ed66fefbff058f62204911182f5e57bfdfe7c119e0ecb1) and the unchanged dist/share-card.jpg (dc14dd6f4068ec9325426583104b1c6ae8748fbb17d8326863c9612280eacd85); if it differs, say how. Never loosen a check; if one fails, report it instead of changing the patched code. If the archive RPC refuses the fork block again, report it and deliver with the other checks passing: the walkthrough record of this patch exists outside your run.\n\n4. Add a dated artifacts/validation.md entry. Before delivery: build, typecheck and every check pass; live verifyNetwork passes; art files match their manifest; no file has a vault 1-5 address fragment.\n\n5. Review step. These are the owner's decisions, accepted, and not grounds to send the build back: on phones the Vault picture stands in the middle of its panel with the heading centred under it and the shelf line across the panel; the heading's focus marker stays as it is and the shelf line meets its corner; desktop is unchanged; the Docs page has local tabs and its ITEM, Tokenomics and BASK text is written as a live product without addresses; on desktop the Deposit stock list is always open in the right-hand column; the Vault heading stands alone; on phones the character panel comes before the vault figures; there is no Change wallet button; the claims panel is hidden when nothing is owed; there is no OPEN sign or normal-operation status line. List them if you must. The exact-patch rule above stands over any design-bar item.","baseCommit":"c05c174f639d352fb6184636bcc6e083031daa65","state":"completed","createdAt":"2026-10-13T22:30:52.473Z"},{"jobId":"97385706-aa93-4acf-9beb-e945d6cc0a4a","workflowId":null,"objective":"Update this project's website for Basket Protocol (vault 6, BaskVault 0x739fD5B653aA092a434534FA1aDE67C1770b5a5B on Robinhood Chain, chain id 4663) from one patch file. Change no contract. The patch is already built and checked against this project's current commit 5110ca9: apply it exactly, rebuild, rerun the checks and deliver. It changes no transaction: every send keeps its function, arguments and calldata for the same inputs. It adds no wallet request, chain read, storage key or network call. Two display sources change (the Tokenomics chart and its words) and one check script is corrected.\n\n1. Patch. Download https://gateway.pinata.cloud/ipfs/bafkreidqwshimqipmcibcmhfff5eryki2q3dteemgoq732ruloopnkeghy (if that fails: https://ipfs.filebase.io/ipfs/bafkreidqwshimqipmcibcmhfff5eryki2q3dteemgoq732ruloopnkeghy). It must be 75,439 bytes with SHA-256 70b48e86410f60901130e5297a48e148d43639908c33a1fdea345b9cf6a8863e; if not, stop and report. On 5110ca9 run git apply --check, then git apply. Apply it as it is: do not restyle, re-word or rewrite anything it changes, and never change the look or a text to make a check pass. It touches 11 files: web/src (Tokenomics.tsx, tokenomicsData.ts), web/scripts (check-art, check-bundle, check-calldata, check-motion, check-visibility, run-browser), web/validation/README.md, README.md and DESIGN.md.\n\n2. What it does (already implemented; for your records).\n- Tokenomics tab, release chart (the owner's decision): one blue line, the total ITEM available, captioned \"Total ITEM available\", with one legend line, \"260 million at launch\", an arrow, \"1 billion by year four\". The dashed liquidity-rewards line and the red development line and their legend entries are removed. The table keeps the full breakdown under \"Liquidity rewards released\", \"Development unlocked\" and \"Total ITEM available\". The introduction and the note describe the schedule with liquidity providers staked in both reward pools from launch; one allocation term reads \"Released over four years, with more rewards at the start\". Every number, formula, allocation and vesting date is unchanged; styles are unchanged.\n- check-motion.mjs (your reviewer's finding on the last build): its loop test counted every animationiteration event on the page, so it failed while the Deposit page showed the CLOSED sign. It now counts only events from the slogan strip itself; the strip's reset is asserted as before. With the sign forced here, the old script fails (\"Loop ends 1920\", events 2) and the new one passes.\n- Checks: gates re-scoped to this update without loosening them. check-calldata: HEAD is 5110ca9; every web/src source outside Tokenomics.tsx and tokenomicsData.ts is byte-identical to it, styles.css included, and those two equal it once their listed pieces are put back; their calls and declarations that changed are written out, their new digests pinned, the sink scans and the null-address guard kept; 496 identical and 1,773 mutually refused calldata cases as before. check-bundle: only those two sources may change, no new file. check-visibility and check-art compare the 5110ca9 site and expect equality (the Vault title's phone placing is still asserted on its own, and the older placing put back is still rejected). run-browser.mjs keeps every check of the previous walk under the same name in order; its 70 wallet sends are the same, send for send; its 24 screenshots keep their names and order at JPEG quality 18.\n\n3. Then in web/: npm ci, npm run typecheck, npm run build, then node scripts/run-browser.mjs before the other checks (must pass: 91 checks, or one more when it starts outside the vault's deposit hours and adds its own time-warp check as before; 70 wallet sends; 24 screenshots; fork block 83874298 through its read-only proxy as before; needs outbound HTTPS to the archive RPC), then every check: npx tsx scripts/check-tokenomics.tsx, node scripts/check-tokenomics-live.mjs, npx tsx scripts/check-bask-guide.tsx, validate, check-preservation, check-interface, check-calldata, check-art, check-motion, inspect-export, check-guards, check-fixes, check-visibility (baseline = the 5110ca9 dist), check-bundle (8,027,333 of 8,388,608 bytes here). Commit the rebuilt dist and every regenerated artifact with the patched sources. The build should give dist/assets/index-7uhBO_VC.js (SHA-256 036b131f57d9f0127c26722bc03a5e799b06285bf4279d54f33e0cbb350c07d2), dist/assets/index-BRdefnhV.css (6d9deadc70d0c2350019458324a868b605b929425e3f5352864dddc9bc97fa80, unchanged), dist/assets/ccip-CsUE1brP.js (d6f00d46b4d91b8ae6f65164f8d72d7be969dfcd5b401bf7988d91c1bcdfaff4), dist/index.html (8d081d507edc3b60c38e9cd268bd7da86fb8660a75337c2ca3840da8febdedfe) and the unchanged dist/share-card.jpg (dc14dd6f4068ec9325426583104b1c6ae8748fbb17d8326863c9612280eacd85); if it differs, say how. Never loosen a check; if one fails, report it instead of changing the patched code. If the archive RPC refuses the fork block again, report it and deliver with the other checks passing: the walkthrough record of this patch exists outside your run.\n\n4. Add a dated artifacts/validation.md entry. Before delivery: build, typecheck and every check pass; live verifyNetwork passes; art files match their manifest; no file has a vault 1-5 address fragment.\n\n5. Review step. These are the owner's decisions, accepted, and not grounds to send the build back: the Tokenomics release chart shows one total line with its breakdown in the table, written as a live product without addresses; on phones the Vault picture stands in the middle of its panel and the heading's focus marker meets the shelf line; the Docs page has local tabs; on desktop the Deposit stock list is always open in the right-hand column; the Vault heading stands alone; on phones the character panel comes before the vault figures; there is no Change wallet button; the claims panel is hidden when nothing is owed; there is no OPEN sign or normal-operation status line. List them if you must. The exact-patch rule above stands over any design-bar item.","baseCommit":"5110ca96c434441cdffaec727413c54ede26dafe","state":"completed","createdAt":"2026-10-13T23:43:52.635Z"},{"jobId":"add328ec-6f3d-4636-b947-7407fe9e4b88","workflowId":null,"objective":"Update this project's website for Basket Protocol (vault 6, BaskVault 0x739fD5B653aA092a434534FA1aDE67C1770b5a5B on Robinhood Chain, chain id 4663) from one patch file. Change no contract. The patch is already built and checked against this project's current commit 27315d9: apply it exactly, rebuild, rerun the checks and deliver. It changes no transaction: every send keeps its function, arguments and calldata for the same inputs. It adds no wallet request, chain read, storage key or network call. Two display sources change: the footer and the Docs page gain the project's contact links.\n\n1. Patch. Download https://gateway.pinata.cloud/ipfs/bafkreih7v7sb2xpafbkpwthnooqtgclyerioidbh3ttvtla3xzc2lzinzi (if that fails: https://ipfs.filebase.io/ipfs/bafkreih7v7sb2xpafbkpwthnooqtgclyerioidbh3ttvtla3xzc2lzinzi). It must be 38,635 bytes with SHA-256 ffafe41d5de02854fb4ced73a13309782450e40c27dce759ac1bbe45a5e50dca; if not, stop and report. On 27315d9 run git apply --check, then git apply. Apply it as it is: do not restyle, re-word or rewrite anything it changes, and never change the look or a text to make a check pass. It touches 7 files: web/src (main.tsx, Docs.tsx), web/scripts (check-calldata, check-bundle), web/validation/README.md, README.md and DESIGN.md.\n\n2. What it does (already implemented; for your records). The owner's decision of 2026-10-15: the footer's link row gains two links after \"Basket Protocol on X\": \"Basket Protocol on Telegram\" (https://t.me/basket_protocol, opened in a new tab like the X link) and the project e-mail protocolbasket@gmail.com as a mailto link. The Docs page's \"Find Basket\" panel shows the same two under its X link, the e-mail as \"Contact: protocolbasket@gmail.com\". Explorers that list token information require the project's e-mail on its website; this is that line. Same link style as the X link; no rule added to styles.css; no other word, picture, script or layout changes. The two check scripts are re-scoped to this change, never loosened: check-calldata freezes every web/src source except main.tsx and Docs.tsx, pins both by reviewed digest and by generated pieces that give the current commit's text back, allows no added call, acting attribute, import, state, storage use or wallet request in them, and lists the four added links as the only additions to what a page loads or opens; check-bundle limits source changes to the same two files.\n\n3. Then in web/: npm ci, npm run typecheck, npm run build, then node scripts/run-browser.mjs before the other checks (must pass: 91 checks, or one more when it starts outside the vault's deposit hours and adds its own time-warp check as before; 70 wallet sends; 24 screenshots; fork block 83874298 through its read-only proxy as before; needs outbound HTTPS to the archive RPC), then every check: npx tsx scripts/check-tokenomics.tsx, node scripts/check-tokenomics-live.mjs, npx tsx scripts/check-bask-guide.tsx, validate, check-preservation, check-interface, check-calldata, check-art, check-motion, inspect-export, check-guards, check-fixes, check-visibility (baseline = the 27315d9 dist), check-bundle (7,954,339 of 8,388,608 bytes here with the current screenshots). Commit the rebuilt dist and every regenerated artifact with the patched sources. The build should give dist/assets/index-CI-SOoQ1.js (SHA-256 6b14104f752b8acbbcf50aab5ca80ddcb995045beca2d59413bdefe376770282), dist/assets/index-BRdefnhV.css (6d9deadc70d0c2350019458324a868b605b929425e3f5352864dddc9bc97fa80, unchanged), dist/assets/ccip-9XcyZzby.js (7d0a6c92ef8c45351ab69f3eb5fa729b7fc6f91908acb86cdf80cc9e8ed70924), dist/index.html (7a016413136b5ac1c7c143e6c8834a5a4b43c5806c9daf25e431aa55f7fa603b) and the unchanged dist/share-card.jpg (dc14dd6f4068ec9325426583104b1c6ae8748fbb17d8326863c9612280eacd85); if it differs, say how. Never loosen a check; if one fails, report it instead of changing the patched code. If the archive RPC refuses the fork block again, report it and deliver with the other checks passing: the walkthrough record of this site exists outside your run and nothing in this patch touches a page the walk exercises beyond two footer links.\n\n4. Add a dated artifacts/validation.md entry. Before delivery: build, typecheck and every check pass; live verifyNetwork passes; art files match their manifest; no file has a vault 1-5 address fragment.\n\n5. Review step. These are the owner's decisions, accepted, and not grounds to send the build back: the footer and the Docs Find Basket panel show the Telegram link and the project e-mail beside the X link; the Tokenomics release chart shows one total line with its breakdown in the table, written as a live product without addresses; on phones the Vault picture stands in the middle of its panel and the heading's focus marker meets the shelf line; the Docs page has local tabs; on desktop the Deposit stock list is always open in the right-hand column; the Vault heading stands alone; on phones the character panel comes before the vault figures; there is no Change wallet button; the claims panel is hidden when nothing is owed; there is no OPEN sign or normal-operation status line. List them if you must. The exact-patch rule above stands over any design-bar item.","baseCommit":"27315d9974a065935f260dec29a52fa30fc7a109","state":"completed","createdAt":"2026-10-15T02:08:05.298Z"},{"jobId":"9f62cdd5-1e78-47d4-9911-9fdb7471b1e4","workflowId":null,"objective":"Update this project's website for Basket Protocol (vault 6, BaskVault 0x739fD5B653aA092a434534FA1aDE67C1770b5a5B on Robinhood Chain, chain id 4663) from one patch file. Change no contract. The patch is already built and checked against this project's current commit (the v17 site): apply it exactly, rebuild, rerun the checks and deliver. It changes no transaction: every send keeps its function, arguments and calldata for the same inputs. It adds one wallet request and nothing else of that kind: wallet_watchAsset (EIP-747), sent only when the visitor presses \"Add BASK to MetaMask\" on the Docs page. That request asks the wallet to list the BASK token with its logo; it signs nothing, sends no transaction and moves nothing. No chain read beyond two eth_chainId reads before it, no storage key, no network call.\n\n1. Patch. Download https://gateway.pinata.cloud/ipfs/bafkreib6kwqaveewdzl2smdpnuiptc6ff7grmpc2ftfybzpzbfgr5qzmzi (if that fails: https://ipfs.filebase.io/ipfs/bafkreib6kwqaveewdzl2smdpnuiptc6ff7grmpc2ftfybzpzbfgr5qzmzi). It must be 43,532 bytes with SHA-256 3e55a00a90961e57a9306f6d10f98bc52fcd163c5a2ccb80e5f9094d1ec32cca; if not, stop and report. On the current commit run git apply --check, then git apply. Apply it as it is: do not restyle, re-word or rewrite anything it changes, and never change the look or a text to make a check pass. It touches 8 files: web/src (wallet.tsx, main.tsx, Docs.tsx), web/scripts (check-calldata, check-bundle), web/validation/README.md, README.md and DESIGN.md.\n\n2. What it does (already implemented; for your records). The owner's decision of 2026-10-15: the Docs page's \"Find Basket\" panel ends with one button, \"Add BASK to MetaMask\", after the \"Contact:\" line, and one sentence under it: \"Asks your wallet to list BASK with its logo. No transaction.\" Pressing it: with no wallet in the page the status line says \"Open this page in your wallet app's browser\"; if the wallet is on another network the site's existing Switch to Robinhood Chain flow runs (wallet_switchEthereumChain, then wallet_addEthereumChain on code 4902, both already in the site), and if the wallet is still elsewhere the status line says \"Switch your wallet to Robinhood Chain (4663), then press Add BASK to MetaMask again.\" and nothing more happens; otherwise the one wallet_watchAsset request is made with type ERC20, the vault address, symbol BASK, 18 decimals and the logo picture at its IPFS address, the wallet shows its own confirmation, and the status line reports its answer (\"The wallet accepted the request to list BASK.\", \"The wallet did not add BASK.\", or the usual declined text). In wallet.tsx, useWallet gains addToWallet() with exactly that (two eth_chainId reads, the existing switchChain(), the one request, two status messages), the Provider type admits an object as request params, and one module constant holds the logo address; main.tsx hands addToWallet to the Docs page; Docs.tsx shows the button and the sentence. Same button style as the rest of the site; no rule added to styles.css; no other word, picture, script or layout changes. The two check scripts are re-scoped to this change, never loosened: check-calldata freezes every web/src source except the three, pins each by reviewed digest and by generated pieces that give the current commit's text back, and writes out every addition with its place (the three guarded calls, the provider uses, the named methods, the two new uses of the setMessage state setter, the complete ordered added-call list with its digest, the two action attributes with their reasons, the one module constant, the hook's return list with addToWallet after switchChain); send(), connect(), disconnect() and switchChain() keep their byte pins; nothing a page loads or opens changes; Docs.tsx and main.tsx still contain no send or request; check-bundle limits source changes to the same three files.\n\n3. Then in web/: npm ci, npm run typecheck, npm run build, then node scripts/run-browser.mjs before the other checks (must pass: 91 checks, or one more when it starts outside the vault's deposit hours and adds its own time-warp check as before; 70 wallet sends; 24 screenshots; fork block 83874298 through its read-only proxy as before; needs outbound HTTPS to the archive RPC), then every check: npx tsx scripts/check-tokenomics.tsx, node scripts/check-tokenomics-live.mjs, npx tsx scripts/check-bask-guide.tsx, validate, check-preservation, check-interface, check-calldata, check-art, check-motion, inspect-export, check-guards, check-fixes, check-visibility (baseline = the current commit's dist), check-bundle (7,975,483 of 8,388,608 bytes here with the current screenshots). Commit the rebuilt dist and every regenerated artifact with the patched sources. The build should give dist/assets/index-CvjHh67d.js (SHA-256 91f57b4a37cbf3a7e2845e580d270868f083a742edc7ddbee28488eeb20cf3cc), dist/assets/index-BRdefnhV.css (6d9deadc70d0c2350019458324a868b605b929425e3f5352864dddc9bc97fa80, unchanged), dist/assets/ccip-D_yNKjHn.js (5db326b6af802d44490cb7deca6eccde60ed1b3fe7d2f076db37d7782a707458), dist/index.html (8d961d84dd17d0c293ce2b9bafc33f4c1e6f152fac5d4c8603673e9404d459f2) and the unchanged dist/share-card.jpg (dc14dd6f4068ec9325426583104b1c6ae8748fbb17d8326863c9612280eacd85); if it differs, say how. Never loosen a check; if one fails, report it instead of changing the patched code. If the archive RPC refuses the fork block again, report it and deliver with the other checks passing: the walkthrough record of this site exists outside your run, and this patch adds one button to the Docs page that the walk does not press.\n\n4. Add a dated artifacts/validation.md entry. Before delivery: build, typecheck and every check pass; live verifyNetwork passes; art files match their manifest; no file has a vault 1-5 address fragment.\n\n5. Review step. These are the owner's decisions, accepted, and not grounds to send the build back: the Docs Find Basket panel ends with the Add BASK to MetaMask button and its one sentence, and that button's wallet_watchAsset request is the one wallet request this update adds; the footer and the Docs Find Basket panel show the Telegram link and the project e-mail beside the X link; the Tokenomics release chart shows one total line with its breakdown in the table, written as a live product without addresses; on phones the Vault picture stands in the middle of its panel and the heading's focus marker meets the shelf line; the Docs page has local tabs; on desktop the Deposit stock list is always open in the right-hand column; the Vault heading stands alone; on phones the character panel comes before the vault figures; there is no Change wallet button; the claims panel is hidden when nothing is owed; there is no OPEN sign or normal-operation status line. List them if you must. The exact-patch rule above stands over any design-bar item.","baseCommit":"974ddd3ae983ba181df285f3b9791ac955b694a5","state":"completed","createdAt":"2026-10-15T03:05:03.400Z"},{"jobId":"d6b1e9bf-1525-4a2f-92cc-9806574111d0","workflowId":null,"objective":"Update this project's website for Basket Protocol (vault 6, BaskVault 0x739fD5B653aA092a434534FA1aDE67C1770b5a5B on Robinhood Chain, chain id 4663) from one patch file. Change no contract. The patch is already built and checked against this project's current commit (the v18 site, ec5fa83): apply it exactly, rebuild, rerun the checks and deliver. It is display only: no transaction, wallet request, chain read, storage key or network call changes, and every send keeps its function, arguments and calldata for the same inputs.\n\n1. Patch. Download https://gateway.pinata.cloud/ipfs/bafkreicwduwa6nxzhxpzuiuj2am6eid45vgxjm6x6my2tkden4qmklwxkm (if that fails: https://ipfs.filebase.io/ipfs/bafkreicwduwa6nxzhxpzuiuj2am6eid45vgxjm6x6my2tkden4qmklwxkm). It must be 48,823 bytes with SHA-256 561d2c0f36f93ddf9a2289d019e2207ced4d74b3d7f331a9a8646f20c52ed753; if not, stop and report. On the current commit run git apply --check, then git apply. Apply it as it is: do not restyle, re-word or rewrite anything it changes, and never change the look or a text to make a check pass. It touches 8 files: web/src (main.tsx, Docs.tsx), web/scripts (check-calldata, check-bundle, check-visibility), web/validation/README.md, README.md and DESIGN.md.\n\n2. What it does (already implemented; for your records). The owner's decision of 2026-10-15 on how visitors reach the Losses page, where anyone can flag a stock shortfall and recognise the loss seven days later. A shortfall is rare, but while an unretired stock is short the vault refuses deposits, so the way to the page should appear where people look at that moment instead of in the footer. (a) The footer no longer links to the Losses page; the page and its address #losses are unchanged. (b) While any unretired stock is short (the snapshot's own short flag), one warning note stands above the Vault and Deposit pages in the existing \"note warning\" style: \"Deposits are paused: the vault is short of <symbols>. Anyone can start the fix.\" The last sentence links to #losses. Nothing shows otherwise. (c) The Docs page gains one panel right after Safety, \"If a stock goes missing\", that explains the flag, the 7-day wait and the recognise step, with one link to the Losses page. No rule added to styles.css; no other word, picture, script or layout changes. The check scripts are re-scoped to this change, never loosened: check-calldata freezes every web/src source except the two (wallet.tsx is frozen again: v18's additions are this commit's own), pins each by reviewed digest and by generated pieces that give the current commit's text back, pins the notice's three display calls (filter, map, join) by their ordered list and digest, and writes out what a page opens: the Losses link removed once from the footer and added once in the notice (main.tsx, App), and the one link of the new Docs panel (Docs.tsx, DocsPage); check-bundle limits source changes to the two files; check-visibility expects the one new Docs panel after Safety (every panel before it equals the baseline in place and size, every panel after it keeps its size and moves down by it) and keeps every other comparison.\n\n3. Then in web/: npm ci, npm run typecheck, npm run build, then node scripts/run-browser.mjs before the other checks (must pass: 91 checks, or one more when it starts outside the vault's deposit hours and adds its own time-warp check as before; 70 wallet sends; 24 screenshots; fork block 83874298 through its read-only proxy as before; needs outbound HTTPS to the archive RPC), then every check: npx tsx scripts/check-tokenomics.tsx, node scripts/check-tokenomics-live.mjs, npx tsx scripts/check-bask-guide.tsx, validate, check-preservation, check-interface, check-calldata, check-art, check-motion, inspect-export, check-guards, check-fixes, check-visibility (baseline = the current commit's dist), check-bundle (8,027,863 of 8,388,608 bytes here with the current artifacts). Commit the rebuilt dist and every regenerated artifact with the patched sources. The build should give dist/assets/index-C7kCGuGo.js (SHA-256 95a973e1ba6804d0f88857713350e3e5539a95cbdd1b0e1ddb09398e41e7b997), dist/assets/index-BRdefnhV.css (6d9deadc70d0c2350019458324a868b605b929425e3f5352864dddc9bc97fa80, unchanged), dist/assets/ccip-yLdmA1De.js (e5c63129a46f8d32a96b28920d39cac03fc08e723d5655b42fb6948fcf7a3bc9), dist/index.html (67c1079e20f3c46d43107648708aa6006517298ffa791caaf2bd179c43b5d5c1) and the unchanged dist/share-card.jpg (dc14dd6f4068ec9325426583104b1c6ae8748fbb17d8326863c9612280eacd85); if it differs, say how. Never loosen a check; if one fails, report it instead of changing the patched code. If the archive RPC refuses the fork block again, report it and deliver with the other checks passing: the walkthrough record of this site exists outside your run, this patch changes no transaction, and its notice shows only while a stock is short.\n\n4. Add a dated artifacts/validation.md entry. Before delivery: build, typecheck and every check pass; live verifyNetwork passes; art files match their manifest; no file has a vault 1-5 address fragment.\n\n5. Review step. These are the owner's decisions, accepted, and not grounds to send the build back: the footer no longer links to the Losses page; the short-stock notice stands above the Vault and Deposit pages only while an unretired stock is short, and links to the Losses page; the Docs page has the panel \"If a stock goes missing\" after Safety; the Docs Find Basket panel ends with the Add BASK to MetaMask button and its one sentence; the footer and the Docs Find Basket panel show the Telegram link and the project e-mail beside the X link; the Tokenomics release chart shows one total line with its breakdown in the table, written as a live product without addresses; on phones the Vault picture stands in the middle of its panel and the heading's focus marker meets the shelf line; the Docs page has local tabs; on desktop the Deposit stock list is always open in the right-hand column; the Vault heading stands alone; on phones the character panel comes before the vault figures; there is no Change wallet button; the claims panel is hidden when nothing is owed; there is no OPEN sign or normal-operation status line. List them if you must. The exact-patch rule above stands over any design-bar item.","baseCommit":"ec5fa83ce47dd1a361cda55e086ef503d10f2deb","state":"completed","createdAt":"2026-10-16T02:14:16.876Z"},{"jobId":"6dab48f3-775d-4be4-8db2-62ec7d8c66ee","workflowId":null,"objective":"Update this project's website for Basket Protocol (vault 6, BaskVault 0x739fD5B653aA092a434534FA1aDE67C1770b5a5B on Robinhood Chain, chain id 4663) from one patch file. Change no contract. The patch is already built and checked against this project's current commit (the v19 site, 8f88184): apply it exactly, rebuild, rerun the checks and deliver. It changes no source, word, picture or layout: the built site must stay byte-identical to the current commit's dist. It repairs the two checks your v19 run reported as timing out, check-art and check-motion, exactly as diagnosed in that run's artifacts/validation.md.\n\n1. Patch. Download https://gateway.pinata.cloud/ipfs/bafkreihxpjvdvy2mwx2rxqehatf256atxuwtjhlm4ucbw63midg3crr73q (if that fails: https://ipfs.filebase.io/ipfs/bafkreihxpjvdvy2mwx2rxqehatf256atxuwtjhlm4ucbw63midg3crr73q). It must be 30,049 bytes with SHA-256 f77a6a3ae34cb5f51bc08704cbaef813bd2d349d6ce5041b7b6c40cdb1463fdc; if not, stop and report. On the current commit run git apply --check, then git apply. Apply it as it is: do not rewrite anything it changes, and never change the look or a text to make a check pass. It touches 7 files: web/scripts (check-art, check-motion, check-calldata, check-bundle, check-visibility), web/validation/README.md and README.md. No file in web/src changes.\n\n2. What it does (already implemented; for your records). check-art (its routeShown helper) and check-motion waited for a route to be shown by looking for its current-page navigation link, a[aria-current=\"page\"][href=\"#<route>\"]. Since v19 no link carries that mark for the Losses page (the footer link went; the short-stock notice and the Docs panel link to it), so both timed out on #losses. They now count the Losses route as shown once location.hash is #losses and the page title's heading (main .page-title > h1) reads \"Losses\"; every other route still waits for its current navigation link, and nothing either check asserts has changed. The other three scripts return to \"equal to the current commit\" now that v19's changes are its own: check-calldata freezes every web/src source whole (main.tsx and Docs.tsx included) with every exception list empty and its 496 identical / 1,773 refused comparison unchanged; check-bundle allows no source change; check-visibility compares every Docs panel with the current commit for equality again and asserts that \"If a stock goes missing\" stands right after Safety. Nothing is loosened.\n\n3. Then in web/: npm ci, npm run typecheck, npm run build, then node scripts/run-browser.mjs before the other checks (must pass: 91 checks, or one more when it starts outside the vault's deposit hours and adds its own time-warp check as before; 70 wallet sends; 24 screenshots; fork block 83874298 through its read-only proxy as before; needs outbound HTTPS to the archive RPC), then every check: npx tsx scripts/check-tokenomics.tsx, node scripts/check-tokenomics-live.mjs, npx tsx scripts/check-bask-guide.tsx, validate, check-preservation, check-interface, check-calldata, check-art, check-motion, inspect-export, check-guards, check-fixes, check-visibility (baseline = the current commit's dist), check-bundle (8,041,210 of 8,388,608 bytes here with the current artifacts). check-art and check-motion must pass now; here check-art passed (74 art files, browser layout in Chromium and WebKit) and check-motion passed (39 checks). The build must give exactly the current commit's dist: dist/assets/index-C7kCGuGo.js (SHA-256 95a973e1ba6804d0f88857713350e3e5539a95cbdd1b0e1ddb09398e41e7b997), dist/assets/index-BRdefnhV.css (6d9deadc70d0c2350019458324a868b605b929425e3f5352864dddc9bc97fa80), dist/assets/ccip-yLdmA1De.js (e5c63129a46f8d32a96b28920d39cac03fc08e723d5655b42fb6948fcf7a3bc9), dist/index.html (67c1079e20f3c46d43107648708aa6006517298ffa791caaf2bd179c43b5d5c1) and dist/share-card.jpg (dc14dd6f4068ec9325426583104b1c6ae8748fbb17d8326863c9612280eacd85); if any dist file differs, say how. Commit every regenerated artifact with the patched scripts. Never loosen a check; if one fails, report it instead of changing the patched code. If the archive RPC refuses the fork block again, report it and deliver with the other checks passing: the walkthrough record of this site exists outside your run, and this patch changes no source.\n\n4. Add a dated artifacts/validation.md entry. Before delivery: build, typecheck and every check pass; live verifyNetwork passes; art files match their manifest; no file has a vault 1-5 address fragment.\n\n5. Review step. These are the owner's decisions, accepted, and not grounds to send the build back: the footer does not link to the Losses page; the short-stock notice stands above the Vault and Deposit pages only while an unretired stock is short, and links to the Losses page; the Docs page has the panel \"If a stock goes missing\" after Safety; the Docs Find Basket panel ends with the Add BASK to MetaMask button and its one sentence; the footer and the Docs Find Basket panel show the Telegram link and the project e-mail beside the X link; the Tokenomics release chart shows one total line with its breakdown in the table, written as a live product without addresses; on phones the Vault picture stands in the middle of its panel and the heading's focus marker meets the shelf line; the Docs page has local tabs; on desktop the Deposit stock list is always open in the right-hand column; the Vault heading stands alone; on phones the character panel comes before the vault figures; there is no Change wallet button; the claims panel is hidden when nothing is owed; there is no OPEN sign or normal-operation status line. List them if you must. The exact-patch rule above stands over any design-bar item.","baseCommit":"8f88184b6dbcfd2c11f7a762c4c25cce55d8d230","state":"completed","createdAt":"2026-10-16T04:37:51.160Z"},{"jobId":"833805dd-670e-466c-b230-1f22d80673dc","workflowId":null,"objective":"Update this project's website for Basket Protocol (vault 6, BaskVault 0x739fD5B653aA092a434534FA1aDE67C1770b5a5B on Robinhood Chain, chain id 4663) from one patch file. Change no contract. The patch is already built and checked against this project's current commit (the v20 site, f86e5d8): apply it exactly, rebuild, rerun the checks and deliver.\n\n1. Patch. Download https://gateway.pinata.cloud/ipfs/bafkreibgjxbebx3vh2whwamfyhproabanjvblmlk7pu6idcmj5dtqv5mxi (if that fails: https://ipfs.filebase.io/ipfs/bafkreibgjxbebx3vh2whwamfyhproabanjvblmlk7pu6idcmj5dtqv5mxi). It must be 84,113 bytes with SHA-256 264dc240df753eac7b0185c1df1700206a6a15b16afbe9e40c4c4f473857acba; if not, stop and report. On the current commit run git apply --check, then git apply. Apply it as it is: do not rewrite anything it changes, and never change the look or a text to make a check pass. It touches 9 files: web/src/wallet.tsx, web/src/Flows.tsx, web/src/Owner.tsx, web/scripts/check-calldata.mjs, web/scripts/check-bundle.mjs, web/scripts/run-browser.mjs, web/scripts/check-fixes.mjs, web/validation/README.md and README.md. No other file changes; no picture, no stylesheet.\n\n2. What it does (already implemented; for your records). Three fixes from an independent audit of the live site. (a) wallet.tsx: every wallet send except genesis listing first settles the transaction saved in this tab (sessionStorage basket-pending-4663, written by every send since v12): a receipt, or its nonce passed by the node's record of the hash, or the count saved before the prompt passed while nothing is queued (the listing flow's own second guard). While it is unresolved the press is refused with the existing words \"Receipt timed out or unreadable. This transaction may still be pending. Wait for its receipt before retrying.\" and its link, and no wallet prompt opens (an RPC error of that check also refuses the press and keeps the record: only the node's \"not found\" answer counts as the hash being absent); once it is found mined or replaced the record goes, the vault is read again, and that press is refused once with \"The earlier transaction is finished (confirmed or replaced). Refresh the vault before retrying.\"; the next press sends. The listing flow (listingPending, waitPending, Resume listing) is unchanged. (b) Flows.tsx: the Redeem press still re-reads previewRedeem, and now refuses with the existing \"Redemption changed. Preview again.\" when the fee differs from the preview's, the leg count differs, or any fresh leg is under 99.9% of the leg shown; the minimums passed to the vault are 0.1% under the amounts shown (quote.amounts), as the page's sentence says and as Deposit has always done with its 0.5%. The Deposit press re-reads previewDeposit with the previewed tokens and amounts and refuses with the existing \"Deposit changed. Preview again.\" when its fee differs from the preview's. (c) Owner.tsx: the roles panel gains a fourth row, Fee recipient: the address, None while it is zero, unreadable when the read failed. No other word, picture or layout changes; the built CSS is byte-identical to the current commit's.\n\n3. Then in web/: npm ci, npm run typecheck, npm run build, then node scripts/run-browser.mjs before the other checks (must pass: 95 checks, or one more when it starts outside the vault's deposit hours and adds its own time-warp check as before; 70 wallet sends; 24 screenshots; fork block 83874298 through its read-only proxy as before; needs outbound HTTPS to the archive RPC; the walk's own Docs panel list, stale since v19, is corrected by the patch), then every check: npx tsx scripts/check-tokenomics.tsx, node scripts/check-tokenomics-live.mjs, npx tsx scripts/check-bask-guide.tsx, validate, check-preservation, check-interface, check-calldata (the gate: wallet.tsx, Flows.tsx and Owner.tsx are the documented files, pinned by generated pieces, reviewed digests and the new semantic pins; the 496 identical / 1,773 refused comparison unchanged; nothing loosened), check-art, check-motion, inspect-export, check-guards, check-fixes (44 regressions: the six saved-record modes now also meet a non-listing send, four RPC-error modes keep the record, and the fixture's provider records that no press asks the wallet for anything but its account and chain id), check-visibility (baseline = the current commit's dist), check-bundle (8,291,062 of 8,388,608 bytes here with the current artifacts). The build must give: dist/assets/index-ClAUmb7a.js (SHA-256 cf125ce8584d7a1620b691c547b2010cd4b00add5ea1f9db56fad3e9dccedcbd), dist/assets/index-BRdefnhV.css (6d9deadc70d0c2350019458324a868b605b929425e3f5352864dddc9bc97fa80, unchanged), dist/assets/ccip-BjiNo5WX.js (80692856b234c08b0834808beeb2b5a0e2d23c96bdf8f6f6d5895640f2bb3105), dist/index.html (49e706ca8d8698c36c8a69cfe6601c214afa47fb1a37f5e724cdb86a4a638206) and dist/share-card.jpg (dc14dd6f4068ec9325426583104b1c6ae8748fbb17d8326863c9612280eacd85, unchanged); if any dist file differs, say how. Commit every regenerated artifact with the patched files. Never loosen a check; if one fails, report it instead of changing the patched code. If the archive RPC refuses the fork block again, report it and deliver with the other checks passing: the walkthrough record of this patch exists outside your run.\n\n4. Add a dated artifacts/validation.md entry. Before delivery: build, typecheck and every check pass; live verifyNetwork passes; art files match their manifest; no file has a vault 1-5 address fragment.\n\n5. Review step. These are the owner's decisions, accepted, and not grounds to send the build back: a wallet send is refused while an earlier one of this tab has no receipt, and refused once more when that one is found finished; the Redeem press is refused when the fresh estimate is under the previewed one or the fee changed, and the Deposit press when the fee changed; the Owner roles panel shows the fee recipient and says None while there is no fee; the footer does not link to the Losses page; the short-stock notice stands above the Vault and Deposit pages only while an unretired stock is short, and links to the Losses page; the Docs page has the panel \"If a stock goes missing\" after Safety; the Docs Find Basket panel ends with the Add BASK to MetaMask button and its one sentence; the footer and the Docs Find Basket panel show the Telegram link and the project e-mail beside the X link; the Tokenomics release chart shows one total line with its breakdown in the table, written as a live product without addresses; on phones the Vault picture stands in the middle of its panel and the heading's focus marker meets the shelf line; the Docs page has local tabs; on desktop the Deposit stock list is always open in the right-hand column; the Vault heading stands alone; on phones the character panel comes before the vault figures; there is no Change wallet button; the claims panel is hidden when nothing is owed; there is no OPEN sign or normal-operation status line. List them if you must. The exact-patch","baseCommit":"f86e5d80e53174c37f5cd4e14cf6df453ffa33c6","state":"completed","createdAt":"2026-10-17T22:44:31.770Z"},{"jobId":"6c54d47e-9ab3-4b94-a952-c494910178e7","workflowId":null,"objective":"Update this project's website for Basket Protocol (vault 6, BaskVault 0x739fD5B653aA092a434534FA1aDE67C1770b5a5B on Robinhood Chain, chain id 4663) from one patch file. Change no contract. The patch is already built and checked against this project's current commit (the v22 site, 3038c97): apply it exactly, rebuild, rerun the checks and deliver. It adds the pages for ITEM, the reward token this account launched in job f74046f2-c50a-427c-95b4-3f8762f59392 (source https://github.com/identity-md-launches/launch-2241-item at commit f0f84fcd6637ea334d50af06b8f694c19b643461): an Earn page, a Transparency page and a Find ITEM panel in Docs, with reads of the five ITEM contracts and 17 wallet sends to them and to the Uniswap v2 router. Every existing vault send keeps its calldata for the same inputs; the vault's reads, wallet flows, pending-transaction guard and storage keys are unchanged.\n\n1. Patch. Download https://gateway.pinata.cloud/ipfs/bafybeigp7ajnbc43kawwhuvacs74cqyilrigptywhlia3zndjo4pu4ai7e (if that fails: https://ipfs.filebase.io/ipfs/bafybeigp7ajnbc43kawwhuvacs74cqyilrigptywhlia3zndjo4pu4ai7e). It must be 8,040,187 bytes with SHA-256 95255121cde00b4958ed1a0ef69f566ca108105a480dea76b644c70f944a1e35; if not, stop and report. On 3038c97 run git apply --check, then git apply (it carries binary files). Apply it as it is: do not restyle, re-word or rewrite anything it changes, never change the look or a text to make a check pass. It touches 96 files: 16 under web/src, 13 check and walk scripts, two pictures and the font licence under web/public (line endings normalised), three notes, and under artifacts/ the final run's evidence, so every check below can pass from the patch alone (a walk run here regenerates it).\n\n2. Addresses (all in web/src/itemConstants.ts, the only place an ITEM address lives, each with its pinned runtime code hash checked on chain before every ITEM send): ITEM 0x4F1b7a5aAF3768F7500E9ab5CBBF3762834e8B57; ItemStaking 0x7e82d352d3f6336e474ba28040785414a8e2e1d3; BaskUsdgGauge 0xf5ebbf7a60b22fb38270ab4942585ad1654a9a11; ItemEthGauge 0x5a2fc207f7d9f84426b8c0f7908a492450e0add6; DevVesting 0xf1670d095d32b1011aa843e7b7d44eeb7ba222c7; ITEM/ETH Uniswap v2 pair 0x9a2B386290Cbfeb40be6EDA694de73B97D66B269 (= getPair(ITEM, WETH)); BASK/USDG pair 0xCC23688c49D58c5FF1f3Bf77e3cAB1927cBa6e70; Uniswap v2 router 0x89e5DB8B5aA49aA85AC63f691524311AEB649eba (hash pinned too, as USDG's).\n\n3. What it does. Earn (#earn; in the navigation): a Pool selector (BASK/USDG, ITEM/ETH) shows one of two pool cards; a pool card has tabs Add liquidity, Stake, Manage, Pool stats (Approve for the exact amount to that gauge only, Stake, Withdraw, Claim ITEM, off until the gauge starts; Add liquidity: one amount typed, the other matched from the reserves read at the press, exact approvals to the router only, minimums 0.5% under, a 600-second deadline, off without a wallet or an unseeded pool; a link to Uniswap); the ITEM staking card has tabs Stake, Manage, Staking stats (the wallet's stake and unclaimed BASK with an indicative USD value; Approve to ItemStaking only, Stake, Unstake, Claim BASK). Figures: ITEM per day per pool token and for the wallet; the BASK fee pot, the wallet's share and estimated BASK. Transparency (#transparency; footer link, not in the navigation): one \"Contracts and source\" panel. Docs: a \"Find ITEM\" panel after \"ITEM risks\"; \"the Earn page\" in the ITEM panels links to #earn; the Tokenomics live figures now show; the footer and Find Basket gain a \"Basket Protocol on Medium\" link (medium.com/@protocolbasket, new tab) after Telegram. Sends, 17: approve, stake, withdraw, claim on each gauge; approve, stake, unstake, claim(BASK) on ItemStaking; BASK, USDG and ITEM approve to the router; the router's addLiquidity and addLiquidityETH (the only send carrying ETH); approvals exact, never unlimited; no start, fund, release, sync, swap or removeLiquidity. Each ITEM send checks chain id 4663, the account and the target's code hash and simulates before the wallet prompt. New reads: the existing RPC path plus eth_getBalance; no polling. Checks, re-scoped, nothing loosened: check-calldata has HEAD 3038c97, unlisted web/src sources byte-identical, the vault's sends equal case by case (496 identical, 1,773 refused), the 17 ITEM actions, 51 encodings and 15 null-slot guards pinned, no vault send builder carries a value; check-visibility and check-art compare with 3038c97 outside the new parts, v22's assertions kept; run-browser.mjs keeps every previous check in order and its 70 sends.\n\n4. First copy the 3038c97 dist outside the tree; BASKET_BASELINE_DIST=<that copy> for the vault walk, check-art and check-visibility. Then in web/: npm ci, npm run typecheck, npm run build. The vault walk first, on a build with every LAUNCH value in src/itemConstants.ts null (its fork block 83874298 predates ITEM): copy the file outside the tree, null the values, npm run build, npx tsx scripts/run-browser.mjs (95 checks, one more outside the vault's deposit hours; 70 sends; 24 screenshots; needs the archive RPC and Python 3 with Pillow, or BASKET_SCREENSHOT_PYTHON), then restore the copy and npm run build. Then the ITEM walk: item-walk.json, outside the tree, = every LAUNCH entry of src/itemConstants.ts as written (15 keys) plus \"RPC\":\"https://rpc.mainnet.chain.robinhood.com\" and \"BLOCK_NUMBER\":\"92775649\"; BASKET_ITEM_CONFIG=<its path> npx tsx scripts/run-item-browser.mjs (anvil forks that block; 45 checks, 17 sends, 23 states). Then every check in web/validation/README.md, plus npx tsx scripts/check-item.ts and check-calldata also with BASKET_ITEM_FINAL=1; check-bundle (7,904,218 of 8,388,608 bytes here). Commit the rebuilt dist and every regenerated artifact with the patched sources; the build should give index-Dj-S4okR.js 9f2e0d70df68479406373cc0ecb4c57114f0907ac820d4d9fc2d661bcf34e420, index-iwMuzi_G.css c5fffa787f4bd972bb636887fe5051064164cca4e6b2e25cb7593251071f4e9d, index.html 2de25c03b3afd9ceeee78f95d9938273d7911feb63bedfac9bbf77067bda8409; the ccip chunk only re-points to the new index file, the share card unchanged (say how if any differs). Never loosen a check; if one fails, report it instead of changing the patched code. Only a walk this machine cannot run (no archive RPC, no Pillow) may be skipped, reported: both walk records and every capture in the patch are from the final run.\n\n5. Add a dated artifacts/validation.md entry. Before delivery: build, typecheck and every check pass; live verifyNetwork passes; art files match their manifest; no file has a vault 1-5 address fragment; no ITEM address outside web/src/itemConstants.ts and the generated artifacts.\n\n6. Review step. The owner's decisions, accepted, not grounds to send the build back: Transparency is not in the navigation; no setup page or button (the owner sets up by hand); the ITEM staking card shows BASK rewards only, with a USD estimate from the vault's figures; the Add liquidity form has no zap, swap, removal or APR; ITEM firs","baseCommit":"3038c97b30503df69fd4760381e208df2ba54f34","state":"completed","createdAt":"2026-10-19T17:25:49.232Z"},{"jobId":"a61da376-1b24-4b3d-94f0-26d25f20d8b9","workflowId":null,"objective":"Update this project's Basket Protocol website (vault 6, BaskVault 0x739fD5B653aA092a434534FA1aDE67C1770b5a5B on Robinhood Chain, chain id 4663) from one exact patch. Base commit: 736affca69ad6aefe27b27d7e0ceeb405c236a96, the delivery of job 6c54d47e-9ab3-4b94-a952-c494910178e7. Change no contract. Apply exactly, rebuild, run the static/read-only checks and deliver.\n\n1. Patch. Download https://gateway.pinata.cloud/ipfs/bafybeibkfqu3tp2szvwxzy73phpybhotask5p7pksyrz7zwsfljawlm6by (fallback: https://ipfs.filebase.io/ipfs/bafybeibkfqu3tp2szvwxzy73phpybhotask5p7pksyrz7zwsfljawlm6by). It must be 9,031,613 bytes with SHA-256 6ccd127737ab3bf5d26a77c3efa46a1e191c61b3ab88ba3df67ab4737e3019b1. If it differs, stop and report. Check out the exact base above. Run git apply --check, then git apply. Do not rewrite the patch or change a word, drawing or layout to pass a check. Checked on a fresh clone of the base: all 278 delivered files matched after application. Runtime changes are limited to web/src/main.tsx, Earn.tsx, itemReads.ts, itemFormat.ts, itemConstants.ts and styles.css, with supporting checks, generated restoration pieces, validation documentation/evidence and rebuilt dist. Dependencies, lockfiles, contracts, original art and wallet transaction code are unchanged.\n\n2. Approved behavior. The shared header shows the two 20 px inline token logos and prices on every page, below the brand/wallet row and above navigation. BASK shows both Pool (BASK/USDG trading price) and NAV (vault stock value per share); ITEM shows its ITEM/ETH pool price. The caption is exactly: \"Pool prices and BASK stock value, read at the last refresh.\" Add no other sentence. Both pool cards and ITEM staking use Claim/Withdraw as the former Manage tab's name. Existing Unstake ITEM/Unstake action wording stays. The Pool dropdown and its visible side label become two adjacent native radio choices, BASK/USDG and ITEM/ETH; selected yellow, keyboard operable, one pool card visible, both mounted with their independent form state preserved.\n\nPrices use the existing chain client: pair reserves and token0, multiplied by USDG/USD or ETH/USD Chainlink round data with feed decimals. BASK displays two dollar decimals, ITEM six; positive values below the display unit use the less-than convention. Empty/bad reserves, unknown token order, failed reads, nonpositive/incomplete/future feed rounds or feeds older than 26 hours show an em dash. Failures are independent. NAV reuses the existing vault snapshot and supply, with unreadable/loading/incomplete/stale inputs or zero supply shown as a dash. No polling, saved quote, guessed price, chart or history. Read on load/navigation and manual Refresh; discard obsolete responses. Outside Earn, the only added reads are the two pairs and two feeds; account/gauge/staking reads stay on Earn. Earn reuses its fresh reserves and adds only the four feed calls. Earn Refresh also updates the vault snapshot for NAV. No wallet method, approval amount, transaction calldata or send guard changes.\n\n3. In web/: npm ci; npm run typecheck; npm run build; npx tsx scripts/check-item.ts; npx tsx scripts/check-prices.tsx; node scripts/check-prices-live.mjs; node scripts/check-calldata.mjs; then BASKET_ITEM_FINAL=1 node scripts/check-calldata.mjs. Also run npx tsx scripts/check-tokenomics.tsx, node scripts/check-tokenomics-live.mjs, npx tsx scripts/check-bask-guide.tsx, npm run validate, node scripts/check-preservation.mjs, npx tsx scripts/check-interface.ts, node scripts/check-art.mjs, node scripts/check-motion.mjs, node scripts/inspect-export.mjs, node scripts/check-guards.mjs, node scripts/check-fixes.mjs, node scripts/check-visibility.mjs and node scripts/check-bundle.mjs. Use external Playwright. Set BASKET_BASELINE_DIST to the untouched base export for art and visibility. Do not run run-browser.mjs or run-item-browser.mjs, and do not add a review-agent pass: this update is static/read-only by decision. Historical fork records are v23, not fresh v24 evidence.\n\nAll listed checks passed in the prepared build: ITEM 71; price units 15; live price UI eight routes at 1440/375 with failed-feed clearing/recovery; calldata 17 actions, 51 encodings, 15 null-slot guards, 255 refusals, plus vault 496 identical / 1,773 jointly refused; art 78 hashes / 56 checks; motion 39; export 24; fixes 44; guards four refusals / zero sends. Visibility retains 70 earlier first-screen elements after the exact header-strip displacement, with no other page geometry or copy exception. The source gate verifies independent v24 digests and generated v24-to-v23 restoration before every inherited transaction comparison. Never loosen any assertion; report a failure.\n\n4. The build should give:\ndist/assets/index-BfIl7glJ.css SHA-256 0daff0579c31d87ecf2281da4e61b9d5f838bdf9e07f7557867d2ce9be7a0f68\ndist/assets/index-CYI-6Qll.js SHA-256 00dee82aae19bdafded2d97ec92c5fb67ee01419cd308905e2cc773a8e701c15\ndist/index.html SHA-256 e009dc75371d08d339c96c5fe40c7d37b8a869c0a108c2e490c8cadca0d00208\ndist/assets/ccip-BvpA7xm5.js SHA-256 bc420bc6544a137d2aba7a0015ae200b891fa7b78b4a1816bc08e57e1f38a694\nThe CCIP change is only its index import. All other 45 files in the 49-file export are byte-identical to the base. Commit the regenerated evidence with the patched files. Add a dated artifacts/validation.md entry that accurately distinguishes static/read-only checks from historical fork evidence. The full delivery cap remains 8,388,608 bytes; the prepared tree is 8,220,641 bytes, leaving 167,967 bytes. Retain the patched historical captures: 22 JPEGs and eight WebPs optimized losslessly (175,052 bytes saved); dimensions and decoded pixels unchanged (checked in Pillow, Chromium and WebKit); filenames, states and RGBA hashes unchanged. artifacts/v24-compression.json records before/after bytes and hashes; only encoded WebP sizes/hashes changed in screenshot-packaging.json. Every check and its cap are unchanged. Regenerate the normal DPR evidence and append the dated validation entry within the available headroom. Add no tooling or extra screenshots. Lossless JSON whitespace compaction is allowed; removing evidence values is not. If any expected export hash differs, report exactly how.\n\n5. Review step. Accepted decisions: prices belong in the shared header on every page; both BASK figures appear with Pool/NAV labels; the two supplied logo drawings remain unchanged; the caption is exactly as quoted; no dash explanation is added; Claim/Withdraw is the tab label for both LP and ITEM staking cards; the action inside ITEM staking still says Unstake; two yellow-selected LP choices replace the dropdown and visible Pool label. Existing artwork, page copy, wallet behavior, approvals, contract addresses and calldata remain as delivered in v23 except for the explicit display/read changes above. No Add ITEM to MetaMask button or other ITEM icon placement. These decisions are not reasons to redesign the patch. The exact-patch rule stands over any design-bar item.","baseCommit":"736affca69ad6aefe27b27d7e0ceeb405c236a96","state":"completed","createdAt":"2026-10-19T21:34:53.697Z"},{"jobId":"ac7c29a2-6580-4ff3-ab80-edf03654b094","workflowId":null,"objective":"Update this project's Basket Protocol website (vault 6, BaskVault 0x739fD5B653aA092a434534FA1aDE67C1770b5a5B on Robinhood Chain, chain id 4663) from one exact patch. Base commit: 66bf0100cbc5b333b6184cd9b87071886d04742e, the delivery of job a61da376-1b24-4b3d-94f0-26d25f20d8b9. Change no contract. Apply exactly, rebuild, run the static/read-only checks and deliver.\n\n1. Patch. Download https://gateway.pinata.cloud/ipfs/bafybeigpxy5qvthnmymrvbkpv4hd52zqaka6ibfaw7whnc6jztblosqdue (fallback: https://ipfs.filebase.io/ipfs/bafybeigpxy5qvthnmymrvbkpv4hd52zqaka6ibfaw7whnc6jztblosqdue). It must be 1,904,208 bytes with SHA-256 1ecdcb373e62067624ef8615f28605ddb86d7bc7b034c332f2abe99d5e0a7793. If it differs, stop and report. Check out the exact base above. Run git apply --check, then git apply. Do not rewrite the patch or change a word, drawing or layout to pass a check. Checked on a fresh clone of the base: all 282 delivered files matched after application. Runtime changes are limited to web/src/Vault.tsx (three wrapper pieces), styles.css (the Earn focus corner and the appended stats styles) and the two new files VaultStats.tsx and vaultStatsReport.tsx, with the new check scripts check-vault-stats-source.mjs and v25-restore.mjs, narrow extensions of check-calldata, check-v24-source, check-bundle and check-visibility, validation documentation/evidence and the rebuilt dist. main.tsx, dependencies, lockfiles, contracts, artwork and wallet transaction code are unchanged.\n\n2. Approved behavior. The Vault page keeps its title, character and the five main navigation entries Vault, Deposit, Redeem, Earn and Docs. Beneath the title sit two child tabs, Overview and Stats (one labelled tablist, roving tab stop, arrow/Home/End keys). Overview opens by default with the unchanged vault figures and Stock shelves; both views stay at #vault; the stats report mounts only while Stats is selected. Stats fetches the public report from https://monitor-production-2eae.up.railway.app/api/vault-stats with one plain GET per opening, period change (1D, 7D, 30D, All) or Refresh, without credentials, referrer or polling; superseded responses are ignored and unmount aborts the request. The response is validated and rebuilt as React elements from a tag/attribute/class allowlist, never inserted as HTML; period links switch the period, Robinhood Etherscan transaction links open in a new tab with noopener, any other link becomes plain text. While the report loads, the existing figures stay; a failed request clears them and offers Retry. The monitor owns every financial calculation and exact figure; the site adds no arithmetic. On phones, the Earn title's yellow shelf line now joins the focused EARN heading's bottom-left corner through the existing v15 Deposit/Redeem rule. No wallet method, approval amount, transaction calldata, send guard, chain read or page wording elsewhere changes.\n\n3. In web/: npm ci; npm run typecheck; npm run build; node scripts/check-vault-stats-source.mjs; npx tsx scripts/check-item.ts; npx tsx scripts/check-prices.tsx; node scripts/check-prices-live.mjs; node scripts/check-calldata.mjs; then BASKET_ITEM_FINAL=1 node scripts/check-calldata.mjs. Also run npx tsx scripts/check-tokenomics.tsx, node scripts/check-tokenomics-live.mjs, npx tsx scripts/check-bask-guide.tsx, npm run validate, node scripts/check-preservation.mjs, npx tsx scripts/check-interface.ts, node scripts/check-art.mjs, node scripts/check-motion.mjs, node scripts/inspect-export.mjs, node scripts/check-guards.mjs, node scripts/check-fixes.mjs, node scripts/check-visibility.mjs and node scripts/check-bundle.mjs. Use external Playwright. Set BASKET_BASELINE_DIST to the untouched base export for art and visibility. Do not run run-browser.mjs or run-item-browser.mjs, and do not add a review-agent pass: this update is static/read-only by decision. No check opens the stats endpoint; the Stats tab's live data is not part of the checks.\n\nAll listed checks passed in the prepared build: stats source gate (29 originals byte-identical, five exact pieces, pinned appended styles, two new sources); ITEM 71; price units 15; live price UI eight routes at 1440/375; calldata 17 actions, 51 encodings, 15 null-slot guards, 255 refusals, plus vault 496 identical / 1,773 jointly refused, after exact v25 then v24 restoration; art 78 hashes / 56 checks; motion 39; export 24; fixes 44; guards four refusals / zero sends; visibility 48 previous first-screen elements unchanged after the measured header strip and, on Vault, the measured tab-bar displacement. Never loosen any assertion; report a failure.\n\n4. The build should give:\ndist/assets/index-wqZRUeaL.css SHA-256 67c0ffc06c1245f57beafb6f51a8eefa2f60b1d11f6b5971447b31de5a6038a2\ndist/assets/index-BizfU3zC.js SHA-256 12f8ff483f42e6eeaf00befd1ca7721ba3ac366bb23b4e2514ce534c7f4f938d\ndist/index.html SHA-256 5a03c45efd8ff5a25183f9a3a132589f80a961997b22c9219bbc626e7cd86048\ndist/assets/ccip-DVSpff_c.js SHA-256 6c1b950fbe36ef47072e3a56ff59f70459a3804f5bb439ef681786a36ab01ccf\nAll other 45 files in the 49-file export are byte-identical to the base. Commit the regenerated evidence with the patched files. Add a dated artifacts/validation.md entry that accurately distinguishes static/read-only checks from historical fork evidence. The full delivery cap remains 8,388,608 bytes; the prepared tree is 8,308,196 bytes, leaving 80,412 bytes. Regenerate the normal DPR evidence and append the dated validation entry within that headroom. Add no tooling or extra screenshots. Lossless JSON whitespace compaction is allowed; removing evidence values is not. If any expected export hash differs, report exactly how.\n\n5. Review step. Accepted decisions: Stats is a child tab inside Vault, not a main navigation entry; Overview is the default; the report's content, periods and words come from the monitor; the stats styles use the site's existing fonts, white panels, navy borders, royal blue and yellow; the Earn corner fix reuses the v15 rule. Existing artwork, page copy, wallet behavior, approvals, contract addresses and calldata remain as delivered in v24 except for the explicit display changes above. These decisions are not reasons to redesign the patch. The exact-patch rule stands over any design-bar item.","baseCommit":"66bf0100cbc5b333b6184cd9b87071886d04742e","state":"completed","createdAt":"2026-10-20T01:44:51.646Z"}]},"deliver":true,"host":false,"site":null,"launch":{"requested":true,"kind":"evm_contracts","id":"10aca822-5003-4a53-89b2-f15f770befcb","status":"live","chainId":4663},"oracleRequestId":null,"delivery":{"repoUrl":"https://github.com/identity-md-launches/launch-877-basket","pullRequestUrl":"https://github.com/identity-md-launches/launch-877-basket/pull/1","commit":"3b1fe81cab5e4d6b148399ce2af5d84ebefeacb4","deliveredAt":"2026-10-07T06:23:13.468Z","media":null},"media":null,"nodes":[{"key":"audit_economics","role":"review","state":"accepted","attempt":1,"revisions":0,"judgeRevisions":0,"dependsOn":["build_contract_project"],"allowedPaths":[],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-07T05:49:30.151Z","verdict":null,"seat":{"tokenId":"852","agentId":"52167"},"live":null},{"key":"audit_flow","role":"review","state":"accepted","attempt":1,"revisions":0,"judgeRevisions":0,"dependsOn":["build_contract_project"],"allowedPaths":[],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-07T05:42:50.501Z","verdict":null,"seat":{"tokenId":"39","agentId":"52157"},"live":null},{"key":"audit_judge","role":"review","state":"accepted","attempt":1,"revisions":1,"judgeRevisions":1,"dependsOn":["build_contract_project","write_foundry_tests","manifest","audit_math","audit_permissions","audit_economics","audit_flow"],"allowedPaths":[],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-07T06:22:39.489Z","verdict":null,"seat":{"tokenId":"1803","agentId":"52179"},"live":null},{"key":"audit_math","role":"review","state":"accepted","attempt":1,"revisions":0,"judgeRevisions":0,"dependsOn":["build_contract_project"],"allowedPaths":[],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-07T05:45:10.185Z","verdict":null,"seat":{"tokenId":"363","agentId":"51428"},"live":null},{"key":"audit_permissions","role":"review","state":"accepted","attempt":1,"revisions":0,"judgeRevisions":0,"dependsOn":["build_contract_project"],"allowedPaths":[],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-07T05:43:37.295Z","verdict":null,"seat":{"tokenId":"808","agentId":"52166"},"live":null},{"key":"build_contract_project","role":"implement","state":"accepted","attempt":1,"revisions":1,"judgeRevisions":1,"dependsOn":[],"allowedPaths":[],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-07T06:11:32.280Z","verdict":{"status":"accepted","profile":"foundry","evaluation":"checks","rejectionCode":null,"detail":"all checks passed","verifierVersion":"0.1.0+be003835","verifiedTreeHash":"914f5859b996759af131019e2ae0ca80ce1da0c3","at":"2026-10-07T06:11:32.380Z","failedChecks":[]},"seat":{"tokenId":"434","agentId":"51149"},"live":null},{"key":"manifest","role":"integrate","state":"accepted","attempt":1,"revisions":1,"judgeRevisions":1,"dependsOn":["build_contract_project"],"allowedPaths":["launch.json"],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-07T06:14:39.626Z","verdict":{"status":"accepted","profile":"foundry","evaluation":"checks","rejectionCode":null,"detail":"all checks passed","verifierVersion":"0.1.0+be003835","verifiedTreeHash":"362435de6c54c0f6b4407ff3f2d1c9fd89887533","at":"2026-10-07T06:14:39.626Z","failedChecks":[]},"seat":{"tokenId":"1433","agentId":"50990"},"live":null},{"key":"write_foundry_tests","role":"tests","state":"accepted","attempt":1,"revisions":1,"judgeRevisions":1,"dependsOn":["build_contract_project"],"allowedPaths":["test","test/**"],"failureReason":null,"dispatchNote":null,"dispatchNoteAt":null,"updatedAt":"2026-10-07T06:17:02.017Z","verdict":{"status":"accepted","profile":"foundry","evaluation":"checks","rejectionCode":null,"detail":"all checks passed","verifierVersion":"0.1.0+be003835","verifiedTreeHash":"221eafd365f5a6c675db089778712b39273d0176","at":"2026-10-07T06:17:02.031Z","failedChecks":[]},"seat":{"tokenId":"1580","agentId":"50997"},"live":null}],"reviews":[{"status":"sent","chainId":1,"txHash":"0xa157b0a4b9fd192569a6574ea8a96c68647d587b7ec2eae3dbeeb8a100905bff","blockNumber":26221985,"sentAt":"2026-10-18T20:57:37.669Z","entries":[]},{"status":"sent","chainId":1,"txHash":"0xb1ea72b929176916c4052f0b8554ff4e3618b547a80682858ba4c2d3034bb783","blockNumber":26138690,"sentAt":"2026-10-07T06:23:06.058Z","entries":[{"nodeKey":"audit_economics","agentId":"52167","value":1,"role":"review:submission"},{"nodeKey":"audit_flow","agentId":"52157","value":1,"role":"review:submission"},{"nodeKey":"audit_judge","agentId":"52179","value":1,"role":"review:submission"},{"nodeKey":"audit_judge","agentId":"51291","value":1,"role":"review:submission"},{"nodeKey":"audit_math","agentId":"51428","value":1,"role":"review:submission"},{"nodeKey":"audit_permissions","agentId":"52166","value":1,"role":"review:submission"},{"nodeKey":"build_contract_project","agentId":"52141","value":1,"role":"verification:checks"},{"nodeKey":"build_contract_project","agentId":"51149","value":1,"role":"verification:checks"},{"nodeKey":"manifest","agentId":"50990","value":1,"role":"verification:checks"},{"nodeKey":"manifest","agentId":"51414","value":1,"role":"verification:checks"},{"nodeKey":"write_foundry_tests","agentId":"51150","value":1,"role":"verification:checks"},{"nodeKey":"write_foundry_tests","agentId":"50997","value":1,"role":"verification:checks"}]}]}