diff --git a/DESIGN.md b/DESIGN.md index ceed93a..b824eba 100644 --- a/DESIGN.md +++ b/DESIGN.md @@ -31,13 +31,13 @@ H1 is 64px on desktop and 36px on phones. Title eyebrows use bold Arial at 14px/ ## Layout -The content maximum is 1200px, with 20px desktop and 16px phone gutters. Flyer panels have 24px padding, 24px gaps and thick colored frames. Forms and details group within panels. The Vault, Deposit and Redeem title panels share one pop-out layout. The heading and sentence (and the eyebrow on Deposit and Redeem) sit in the left column, centred top to bottom. The character stands at the right end on the checker strip, her head rising above the panel's top edge, with her speech bubble beside her head. Her picture is 390px high, 340px at 999px and below. At 660px and below she stands on her own yellow shelf at the top of the panel (300px high, 270px below 360px): on Vault the heading starts 17px under her shelf with the sentence below it; on Deposit and Redeem the eyebrow and heading stand beside her and the sentence follows below. The checker strip stays at least 24px below the title text at every width. +The content maximum is 1200px, with 20px desktop and 16px phone gutters. Flyer panels have 24px padding, 24px gaps and thick colored frames. Forms and details group within panels. The Vault, Deposit and Redeem title panels share one pop-out layout. The Vault heading sits alone in the left column, centred top to bottom. Deposit and Redeem keep their heading, sentence and eyebrow in that column. The character stands at the right end on the checker strip, her head rising above the panel's top edge, with her speech bubble beside her head. Her picture is 390px high, 340px at 999px and below. At 660px and below she stands on her own yellow shelf at the top of the panel (300px high, 270px below 360px): on Vault the heading starts 17px under her shelf with no sentence; on Deposit and Redeem the eyebrow and heading stand beside her and the sentence follows below. The checker strip stays at least 24px below the title text at every width. -The Stock shelves labels fill as many columns as fit (5 big and 7 small labels a row at 1440px, 2 big and 3 small on a 375px phone; 2 small at 360px and below, 1 big at 320px). At 960px, role and owner grids become one column. At 660px, forms, docs and claims use one column; the menu retains four legible hanging signs. The Deposit page is one column at every width: the form, then "Before you deposit" under it. A Deposit row is one line (the stock with its balance, the amount box, Max, Remove) and two lines at 660px and below (the stock and its balance, then the amount box, Max and Remove); rows are split by space and a thin line, not boxed. With a wallet connected the header shows the chain label, the short address and a small Disconnect button on the address line; Disconnect is as tall as that line, so the header keeps its height and nothing leaves the first phone screen (measured in Chromium from 343px up; on narrower phones Disconnect takes a second line and the header is 34px taller). Metric panels retain two columns. Each stock is a shelf label with its words written out, never a horizontally scrolling table. The data refresh action stays beside its status. Phones omit the duplicate global transaction summary, keeping the status beside its action. Phone header, title and shelf spacing is reduced so task guidance appears sooner. Long addresses wrap. Required screenshots cover 1440px and 375px; additional checks and their limits are recorded with validation. +The Stock shelves labels fill as many columns as fit (5 big and 7 small labels a row at 1440px, 2 big and 3 small on a 375px phone; 2 small at 360px and below, 1 big at 320px). At 960px, role and owner grids become one column. At 660px, forms, docs and claims use one column; the menu retains four legible hanging signs. Deposit and Redeem are one column at every width. Deposit has the form, then "Before you deposit" under it. Redeem has its form and the conditional claims presentation beneath. A Deposit row is one line (the stock with its balance, the amount box, Max, Remove) and two lines at 660px and below (the stock and its balance, then the amount box, Max and Remove); rows are split by space and a thin line, not boxed. With a wallet connected the header shows the chain label, the short address and a small Disconnect button on the address line; Disconnect is as tall as that line, so the header keeps its height and nothing leaves the first phone screen (measured in Chromium from 343px up; on narrower phones Disconnect takes a second line and the header is 34px taller). Metric panels retain two columns. Each stock is a shelf label with its words written out, never a horizontally scrolling table. The data refresh action stays beside its status. Phones omit the duplicate global transaction summary, keeping the status beside its action. Phone header, title and shelf spacing is reduced so task guidance appears sooner. Long addresses wrap. Required screenshots cover 1440px and 375px; additional checks and their limits are recorded with validation. ## Elevation & Depth -This is a flat print-inspired system. Flyer panels use a 5px sunshine border with a 3px red outer frame. Nested panels use 2px royal-blue borders. The sign and hanging menu use solid offset ink shadows. Text stays in normal document flow. On the Stock shelves the shelf signs, the share stickers and the CLOSED stamp sit slightly tilted, like stickers on a shelf edge. Only the overflow-clipped slogan track moves continuously; the shelf labels swing once (see Components). White receipt/data panels contain no decorative texture. +This is a flat print-inspired system. Flyer panels use a 5px sunshine border with a 3px red outer frame. Nested panels use 2px royal-blue borders. The sign and hanging menu use solid offset ink shadows. Text stays in normal document flow. On the Stock shelves the shelf signs, the share stickers and the CLOSED stamp sit slightly tilted, like stickers on a shelf edge. The overflow-clipped slogan track and the owner-approved Deposit sign move continuously; the shelf labels swing once (see Components). White receipt/data panels contain no decorative texture. ## Shapes @@ -49,17 +49,24 @@ Panels and receipts are rectangular; controls use 3px corner radii and at least - `Scenery.tsx`: `Marquee` and `StoreShelf`. The two decorative shelf rows use empty-alt local images: the first 14 food SVGs in manifest order above, then the next 19 below, each list repeated five times and clipped without motion. The light-blue back wall is `#c4e7ff`; red planks have ink edges. Desktop icons are 40px squares with 12px gaps in a 120px strip. Phones use 22px squares, 8px gaps and 3px planks in a 50px strip, with a 4px gap above the shelf frame; this preserves the previous above-fold messages at 375×812. Both shelf locations share this system. - `Marquee` has two identical halves, each holding eight copies of the unchanged slogan line (720px wide in VT323 at 24px). Each half shows only its first k lines, k being the fewest whole lines that cover the window: 1 up to 720px wide, 2 up to 1440px, 3 up to 2160px, and so on up to 8 above 5040px. So there is no blank space in the window and the text runs on across the seam with the normal word gap. Since v10 the two halves share one grid cell and each moves on its own, as a Web Animation started by `Marquee` (no CSS animation): from translateX(100%) to translateX(−100%) of its own width, linear and endless, the second half half a cycle behind the first. So the halves always sit edge to edge, each jumps back only while it is wholly off screen, and no `animationiteration` event fires at a reset. Each moving block is one half (k lines, at most the window plus one line) with no `will-change` and no 3D transform (a very wide moving block stops being drawn on iPhones); the track itself stays put. Only `overflow: hidden` clips the window. The speed is exactly 16px per second (a half's cycle is 2 × k × 45 seconds), 64px per second at 660px and below; the cycle is computed from the measured half width and re-timed when the width, the phone breakpoint or the web font changes. There is no pause, stop or hide control, per the owner’s decision. Under `prefers-reduced-motion: reduce` both animations are cancelled and the halves stand still side by side from the left edge. - Title characters: each picture keeps its manifest width/height ratio with `object-fit: contain`, bottom-aligned, standing on the checker strip (on her shelf on phones). The bubble's tail points at her mouth; the bubble stays clear of her face, hands and held items, and no word is split across lines. Speech stays still in white rounded bubbles with ink borders, in Flyer at 20px (18px at 999px and below, 16px on phones); copy retains its supplied case. 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?". Each picture has its assigned descriptive alt text. No image is cropped, stretched, recolored or animated. -- `Vault.tsx`: metric cards, the Stock shelves and `DepositState`. The Stock shelves are a store shelf unit (light-blue back wall, royal-blue uprights, the food strip as its top shelf) with every stock as a yellow shelf-edge label clipped onto a red shelf edge, in two groups under red shelf signs: "In the basket" (held, or held amount unreadable: big labels, biggest share first) and "On the shelf, not held" (small labels, listing order). Every label shows the ticker, the feed price as a red flyer price and the status in words; no label shows when its price updated (feeds post only on a 0.5% move or every 24 hours, so a price time looked stale when it was not) (Open, Closed to deposits, Retired, or "Open · not taking deposits" with the price reason in a chip); big labels add the share sticker and bar, the value and the amount held. Only a feed price missing or too old (reason 9) is dimmed with an "old price" tag, without a time; under reasons 10 and 11 the price passed the age check, so it shows normally and the chip gives the reason. Warnings (check this pairing, balance check) print on the label. Tapping a label opens a drawer under its row with the feed, feed price (no age), pool check, held amount, share, owed amount and the Stock Token and price feed links (Close or Escape). Filters All / Open / Closed / Held with counts and a search by ticker or address narrow the shelves; while one is on, "Show all" brings every stock back. Money uses `usd()`, cut to the cent like the NAV figure. The labels of each row swing once on their clips when the row first comes into view and lift 4px on hover or focus; nothing moves under reduced motion, and filtering or searching stops the swing for good. Price status comes from contract reasons (fifteen, in `BaskVault.Reason` order); reasons 9–11 explicitly say the pool check was not run. `DepositState` (also on Deposit) prints the hours in words (New York time, or UTC-5/UTC-4 under Dst 1/2), and for reason 3 says when deposits reopen (weekday, time, date, a countdown from block time and the visitor's local time) and for reason 14 that they wait for a price update, computed by `newYork.ts` from `settings()` and the latest block timestamp. Once the opening is reached it re-reads the vault and says deposits may be open. Unreadable values are spelled out, never shown as a real zero. +- `Vault.tsx`: metric cards, the Stock shelves and `DepositState`. The Stock shelves are a store shelf unit (light-blue back wall, royal-blue uprights, the food strip as its top shelf) with every stock as a yellow shelf-edge label clipped onto a red shelf edge, in two groups under red shelf signs: "In the basket" (held, or held amount unreadable: big labels, biggest share first) and "On the shelf, not held" (small labels, listing order). Every label shows the ticker, the feed price as a red flyer price and the status in words; no label shows when its price updated (feeds post only on a 0.5% move or every 24 hours, so a price time looked stale when it was not) (Open, Closed to deposits, Retired, or "Open · not taking deposits" with the price reason in a chip); big labels add the share sticker and bar, the value and the amount held. Only a feed price missing or too old (reason 9) is dimmed with an "old price" tag, without a time; under reasons 10 and 11 the price passed the age check, so it shows normally and the chip gives the reason. Warnings (check this pairing, balance check) print on the label. Tapping a label opens a drawer under its row with the feed, feed price (no age), pool check, held amount, share, owed amount and the Stock Token and price feed links (Close or Escape). Filters All / Open / Closed / Held with counts and a search by ticker or address narrow the shelves; while one is on, "Show all" brings every stock back. Money uses `usd()`, cut to the cent like the NAV figure. The labels of each row swing once on their clips when the row first comes into view and lift 4px on hover or focus; nothing moves under reduced motion, and filtering or searching stops the swing for good. Price status comes from contract reasons (fifteen, in `BaskVault.Reason` order); reasons 9–11 explicitly say the pool check was not run. The owner’s final v12 decision removes normal status altogether. Vault shows a compact plain “Vault status: Closed” for known closures, or unreadable plus Retry vault for unknown data. Its empty wrapper is hidden. Deposit shows the Closed LED sign and one approved short sentence, with no status heading or extra details. For the existing Sunday-8pm-to-Friday-8pm schedule, an outside-hours closure reads “Deposits reopen when the stock feed prices update around 8pm on Sundays.” Other closures use “Deposits will be back open when [issue] is resolved.” with the existing short reason substituted in typographic double quotes. The page omits parenthetical detail, stock-at-fault, countdown, local-time and hours paragraphs. Changed schedules use the generic outside-hours reason. The existing clock and refresh-at-opening behavior remain unchanged. Loading and the reopening boundary render no notice; unknown status, incomplete stock data and unknown setup retain unreadable plus Retry without a sign. The capacity figure is labelled “Maximum Basket Capacity”, with the owner’s “(eligible to be raised)” subline in smaller type beneath it. The original value expression and Deposit aside’s Size limit are unchanged. +- The approved Deposit LED sign is a local SVG, 176px wide and capped to the available width, with a black rounded face, red dot lettering and a blue dotted border. Its only visible word is CLOSED and its accessible image name is Closed. Border chase and letter glow each last 3.2 seconds per cycle. Both stop under reduced motion, leaving the static sign readable. No Open sign or normal-operation message is shown; no asset file, read or request is added. - `Docs.tsx`: plain explanations of the vault; an FAQ panel after Redemption answers what happens when a stock can’t be sent on redeem (the Redeem page itself carries no such note). -- `Flows.tsx`: a small royal-blue tag first in the Deposit and Redeem forms, always shown: "Redemptions are open 24/7. Deposit hours apply to deposits only." (white on royal blue, 15px, the first sentence bold; each sentence starts its own line when it wraps); decimal amount fields, exact balance controls (Max on Deposit, Use full balance on Redeem), previews immediately after selected amounts, named approval steps and owed-first claim cards. Deposit since v11: one status line "Deposits are open." with the hours while the vault takes deposits, the full `DepositState` box otherwise; the wallet's open stocks as rows, largest dollar value first (ticker in Flyer, wallet balance and "about $..." value, amount box, a quiet Max and a quieter Remove), holdings under one cent behind "Show small balances (N)"; a stock the vault refuses right now is a muted row with the reason and a Refresh button; one search box "Add another stock" (ticker or token address, at most six "Add TICKER" matches, Enter adds the first) and under it a closed native details list "All stocks you can deposit (N)" with every open stock by ticker, A to Z; an estimated total of the typed amounts; under a confirmed deposit "You received ... BASK." from that deposit's receipt. The rows are display only: Preview and Deposit read the typed amounts in the vault's own order. Redeem empties its amount box after a confirmed redeem. Claim all precedes the cards; zero balances fold away. Receivers remain full, wrapped and labelled. Preview data is invalidated when inputs/accounts change and after successful deposits. +- `Flows.tsx`: a small royal-blue tag first in the Deposit and Redeem forms, always shown: "Redemptions are open 24/7. Deposit hours apply to deposits only." (white on royal blue, 15px, the first sentence bold; each sentence starts its own line when it wraps, and the bold sentence can break between words for wide fallback fonts); decimal amount fields, exact balance controls (Max on Deposit, Use full balance on Redeem), previews immediately after selected amounts, named approval steps and owed-first claim cards. Deposit in v12: the Closed sign and one short closure sentence immediately after the 24/7 pill, with only unreadable and Retry for unknown data and no notice during normal operation, loading or the reopening boundary, under the owner’s latest decision. The form retains the wallet's open stocks as rows, largest dollar value first (ticker in Flyer, wallet balance and "about $..." value, amount box, a quiet Max and a quieter Remove), holdings under one cent behind "Show small balances (N)"; a stock the vault refuses right now is a muted row with the reason and a Refresh button; one search box "Add another stock" (ticker or token address, at most six "Add TICKER" matches, Enter adds the first) and under it a closed native details list "All stocks you can deposit (N)" with every open stock by ticker, A to Z; an estimated total of the typed amounts; under a confirmed deposit "You received ... BASK." from that deposit's receipt. The rows are display only: Preview and Deposit read the typed amounts in the vault's own order. Redeem empties its amount box after a confirmed redeem. Redeem is one column with no secondary aside. The owner removed the wallet instruction line beginning “Showing” from both Deposit and Redeem. Claim all precedes the owed cards; zero stocks are omitted. The full Claims panel appears only when there is owed, unreadable or claim-result information and then remains for the account’s visit, including navigation away and back. Hidden Claims effects pause. Before it has appeared, no-wallet and finished-empty states use the approved quiet line. Refreshes retain the previous presentation. The batch note appears only with multiple owed stocks. Receivers remain full, wrapped and labelled. Preview data is invalidated when inputs/accounts change and after successful deposits. - `Owner.tsx`: `ActionForm`, pairing cards, genesis sequence (`listGenesis`, `finalizeGenesis`), settings and pending proposal cards built from `pendingProposals` ids and `proposal(id)`, executable from two to nine days after creation. The Hours setting shows the current schedule in words and raw seconds and takes From and To as a weekday plus New York time (or "Always open"), previewing value, value2 and words; Dst shows its three rule words; FreshCount and FreshHours explain the market-holiday closure. Proposals send the `BaskVault.Action` struct. Forms use native details disclosures. Stock selectors begin on Choose a stock, retain an existing choice across reads and clear it when the stock disappears. Launch folds to one done line; Pause, Pending and Immediate precede proposal forms. Jump controls scroll and focus without a route change. Finalize stays disabled until the listing rows are pasted and every pasted row is listed with the same values. Consequential irreversible actions require an explicit checkbox; unauthorized controls remain visible and disabled. Financial buttons use system text rather than display lettering. -All controls use native elements and visible labels. Focus has a 3px ink perimeter with a sunshine surround. Hash navigation focuses the page H1; a skip link reaches main content. Errors use alert regions, transaction progress uses a status region, and read failures offer Retry. Disabled buttons have nearby reasons and recovery controls. Primary hover/focus/active states explicitly keep white text on ink; disabled primary buttons use the same legible muted palette as other disabled controls. Action-local status retains transaction links and reports confirmed refreshes, proposal IDs/ready times and remaining owed amounts. Loading says Reading...; failure says unreadable with Retry. Balance and claim Retry controls appear only after failed reads; a complete, successful empty claim read says that nothing is owed. Incomplete stock reads say “Owed balances unreadable. Retry vault.” with Retry vault. Claim and loss result scopes include the token address so equal symbols cannot overwrite one another’s result. Motion is limited to the continuously running slow marquee, the Stock shelves labels' one-time restocking swing and 4px lift (all off when reduced motion is requested) and color-only control feedback. Buttons no longer scale text on press. Forced-colors focus uses the system Highlight color. +All controls use native elements and visible labels. Focus has a 3px ink perimeter with a sunshine surround. Hash navigation focuses the page H1; a skip link reaches main content. Errors use alert regions, transaction progress uses a status region, and read failures offer Retry. Disabled buttons have nearby reasons and recovery controls. Primary hover/focus/active states explicitly keep white text on ink; disabled primary buttons use the same legible muted palette as other disabled controls. Action-local status retains transaction links and reports confirmed refreshes, proposal IDs/ready times and remaining owed amounts. Loading says Reading...; failure says unreadable with Retry. Balance and claim Retry controls appear only after failed reads; a complete, successful empty claim read initially shows “Nothing is owed to this wallet.” without the Claims panel. A panel already shown for the account retains its confirmation or error until the account changes or the page reloads. Incomplete stock reads say “Owed balances unreadable. Retry vault.” with Retry vault. Claim and loss result scopes include the token address so equal symbols cannot overwrite one another’s result. Motion is limited to the continuously running slow marquee, the Deposit sign’s border chase and letter glow, the Stock shelves labels' one-time restocking swing and 4px lift (all off when reduced motion is requested) and color-only control feedback. The static sign and its accessible state remain when reduced motion is requested. Buttons no longer scale text on press. Forced-colors focus uses the system Highlight color. ## Do's and Don'ts Start new content with `PageTitle` and a `.panel`, then reuse the existing grid and card primitives. Keep the banner, full addresses, issuer-prefix cleaning and `check this pairing` text intact. Use Stock Tokens in prose. Keep all real quantities and transaction warnings in plain data surfaces, with the correct on-chain decimals. -Keep the supermarket immediately recognizable on every page. Art must be original SVG/CSS plus the manifest files kept byte for byte: the owner’s character and Fluent Emoji food (MIT). Load manifest art only through local `./art/...` image sources in TSX; never inline, import, re-encode or reference it from CSS. Avoid astronomical imagery, arcade styling, brand/product logos, numerical decoration, performance slogans and implied claims about returns, safety or market opening. Shopping slogans remain about baskets, aisles and carts. Docs may state the published schedule ("deposits open Sunday 8 pm to Friday 8 pm New York time, closed on US market holidays, redemptions always open"); everything else reads `settings()` and `depositStatus` and never the browser time zone. +Keep the supermarket immediately recognizable on every page. Art must be original SVG/CSS plus the manifest files kept byte for byte: the owner’s character and Fluent Emoji food (MIT). Load manifest art only through local `./art/...` image sources in TSX; never inline, import, re-encode or reference those manifest files from CSS. The separately pinned share JPEG composes the unchanged Vault character with the approved headline and project sign. Avoid astronomical imagery, arcade styling, brand/product logos, numerical decoration, performance slogans and implied claims about returns, safety or market opening. Shopping slogans remain about baskets, aisles and carts. Docs may state the published schedule ("deposits open Sunday 8 pm to Friday 8 pm New York time, closed on US market holidays, redemptions always open"); everything else reads `settings()` and `depositStatus` and never the browser time zone. Native Windows Chrome/Edge at 100%, 125% and 150% display scaling and physical phones require external verification; Linux Chromium DPR geometry checks do not establish their rasterization behavior. See the validation report for actual results. + +## v12 presentation details + +The Vault title is “Always in stock”, without a full stop, eyebrow or subline; PageTitle omits an absent paragraph. Its heading occupies the former heading-and-sentence space, in one or two lines, with unchanged character speech and frame. Deposit and Redeem title geometry is unchanged. The Deposit aside shows both approved paragraphs directly; its separate stock list stays collapsed until pressed. The Docs first panel adds the four approved paragraphs without changing Numbers. + +The link preview is a 1200×630 JPEG of the blue framed panel, red Basket Protocol sign and Vault character, with only “ALWAYS IN STOCK” and the project name. Both copies and the exact share-tag shell are pinned by check-bundle; manifest art remains unchanged. diff --git a/README.md b/README.md index 798c57d..38cd09b 100644 --- a/README.md +++ b/README.md @@ -20,14 +20,14 @@ The build writes `dist/` at the repository root. `vite.config.ts` sets `base: '. ## Publish -Publish the **contents of the committed `dist/` directory** to the existing static host or IPFS deployment for `basket-protocol.site.identitymd.eth`. Keep `index.html` with its `assets/`, `art/` (including the food MIT license), fonts/license files and favicon. Test the export at a subpath such as `/preview/`; do not publish `web/`, package caches or test fixtures. The publisher serves the export without rebuilding. This assignment prepares the export and does not publish it. +Publish the **contents of the committed `dist/` directory** to the existing static host or IPFS deployment for `basket-protocol.site.identitymd.eth`. Keep `index.html` with its `assets/`, `art/` (including the food MIT license), fonts/license files, favicon and share-card.jpg. Test the export at a subpath such as `/preview/`; do not publish `web/`, package caches or test fixtures. The publisher serves the export without rebuilding. This assignment prepares the export and does not publish it. ## Integration - Vault reads and simulations use 30,000,000 gas. Asset metadata is batched through Multicall3 only after checking its deployment. Heavy aggregate reads remain independent. - Every send checks wallet account, chain 4663, public RPC chain and vault runtime hash, then simulates. Chain and account are checked again before requesting the transaction. Deposit, redemption and claim use estimated gas increased by 30%. - `allAssets()` supplies `managedBalance`, `owedBalance`, `balanceReadable`, `shortfall` (short means shortfall above zero), prices, price reasons and pool prices. Failed aggregate reads fall back to `assetTokens()` and `asset(token)` per stock; pool checks and reasons remain unreadable. One `depositStatus([])` supplies the global status, and the latest block timestamp is read with every snapshot because the vault's hours and freshness use block time. -- Deposit hours are seconds since Sunday 00:00 New York time (`hoursFrom` inclusive, `hoursTo` exclusive; both zero means always open), with the `dst` setting choosing the US daylight saving rule, never daylight saving (UTC-5) or always daylight saving (UTC-4). `web/src/newYork.ts` ports `NewYorkTime.sol`; the deposit status says when deposits reopen (reason 3) or that they wait for a price update (reason 14), computed from `settings()` and the latest block, never the browser time zone. +- Deposit hours are seconds since Sunday 00:00 New York time (`hoursFrom` inclusive, `hoursTo` exclusive; both zero means always open), with the `dst` setting choosing the US daylight saving rule, never daylight saving (UTC-5) or always daylight saving (UTC-4). `web/src/newYork.ts` ports `NewYorkTime.sol`; the existing clock still computes reopening from `settings()` and the latest block, never the browser time zone, and refreshes when the opening is reached. The visible closure notice uses the owner’s short wording described under v12. - Deposits use token/amount arrays, exact short approvals, wallet receiver, 0.5% minimum-share tolerance and a ten-minute deadline. The contract preview checks the size limit. Successful deposits clear inputs and the old preview. - Redemption refreshes its preview immediately before sending, uses a selected nonzero receiver other than the vault, and 0.1% minimum amounts in current `assetTokens` order. Unsent stocks are owed to that receiver (explained in the Docs FAQ). Claims read every listed token and send groups of at most ten; one failing stock reverts its whole batch, nothing is lost, and each stock has its own Claim button. - Genesis listings use `listGenesis`, show each row as it is checked, preserve row order and re-read each listing after confirmation. Whether a token is listed comes from `assetTokens()` because `asset()` reverts for unlisted tokens. A set pool requires a `minLiquidity` above zero. Current `poolWindow` pool liquidity and pool/feed gap are checked before listing; failed or marked rows need correction. A declined prompt can resume after checks. Submitted hashes survive receipt timeouts in session storage; listing compares pending/latest nonces after reload and prefers the node's record of the saved transaction's nonce over the count saved before the prompt. @@ -81,9 +81,9 @@ Fonts are Anton and VT323 under the SIL Open Font License; notices are in `web/p The slogan strip always runs, with no pause control, except when the visitor requests reduced motion. Local art is loaded through relative image URLs; the shipped export makes no outside requests except chain RPC reads. The two food shelves, the title characters and the slogan strip are documented in [DESIGN.md](DESIGN.md). -To compare phone visibility to a saved previous export, run `BASKET_BASELINE_DIST=/absolute/path/to/previous/dist node scripts/check-visibility.mjs` from `web/`. It checks six routes at 375×812, both without a wallet and with a read-only injected connection to the live owner. +To compare phone visibility to a saved previous export, run `BASKET_BASELINE_DIST=/absolute/path/to/previous/dist node scripts/check-visibility.mjs` from `web/`. It checks six routes at 375×812, both without a wallet and with an injected synthetic account whose balances and claims are answered locally. The v12 baseline is the v11 export. -## Site update v9 +## Site update v9 (historical) Look: @@ -123,7 +123,7 @@ What the checks allow in this update: The fork runner's 24 screenshots were set to JPEG quality 36 in this update (40 before; 32 since v11, see below): with the Docs FAQ and the longer Owner texts the quality-40 set no longer fits the 8 MiB delivery budget. So run `run-browser.mjs` before `check-bundle.mjs` (as in the list above): until the runner rewrites the 24 screenshots, the tree still holds the quality-40 set and the bundle reads over the limit. -## Site update v10 +## Site update v10 (historical) - Docs: the deposits sentence starts with a capital letter: "Deposits open Sunday 8 pm to Friday 8 pm New York time, closed on US market holidays, redemptions always open". - Deposit and Redeem: a small royal-blue tag at the top of the form, shown whether deposits are open or closed: "Redemptions are open 24/7. Deposit hours apply to deposits only." The Redeem title now reads "Receive your share of every stock." The Vault and Deposit closed messages still end "Redemptions are always open." @@ -138,7 +138,7 @@ What the checks allow in this update: - Slogan strip: `check-art.mjs` (Chromium and WebKit, 23 widths 320-5,760px) and `check-motion.mjs` (three display scales) check that the halves are the only moving blocks, each k whole lines, each its own endless Web Animation at exactly the speed, with no CSS animation, `will-change` or 3D and no endless CSS animation on the page; that at loop phases just before, at and just after each half's reset the window is covered with the normal word gap at every join and at the seam; and that real playback across both resets fires no `animationiteration` event. `check-art.mjs`, `inspect-export.mjs`, `run-browser.mjs` and `check-visibility.mjs` check that reduced motion leaves no animation and a still, full strip. - `check-visibility.mjs` (baseline: the v9 build): nothing may leave the first phone screen, and the slogan strip keeps its place and height. -## Site update v11 +## Site update v11 (historical) - Deposit, the form: the page is one column, the form first and "Before you deposit" under it. Once a wallet is connected the form opens with the open listed stocks that wallet holds, largest dollar value first. Each row has the ticker, the wallet balance and its dollar value, an amount box, Max (on this page it was "Use full balance") and Remove. Holdings worth under one cent wait behind "Show small balances (N)". A row whose stock the vault refuses right now is greyed, says why and has a Refresh button; Preview is still what decides. - Deposit, adding a stock: one search box, "Add another stock", replaces the grid of Add buttons. It takes a ticker or a token address and shows at most six matches as "Add TICKER" buttons; Enter adds the first match and never starts a preview. Under it a closed list, "All stocks you can deposit (N)", holds every open stock by ticker, A to Z. A press adds that stock; a stock already in the form stays in the list, switched off. The list is the vault's own list of open stocks, read from the chain with every vault read, so a newly listed stock appears by itself and a closed or retired one drops out. @@ -161,3 +161,21 @@ What the checks allow in this update: - `check-art.mjs`: the built scripts hold the fixed v11 words ("Add another stock", "Disconnect", "Show small balances", "You received", "Deposits are open.", "All stocks you can deposit", "Press a stock to add it to your deposit.") and no longer "Search to add stocks". Its v9 and v10 checks still run, the 24/7 tag first in the Deposit form among them. - `check-visibility.mjs` (baseline: the v10 build): nothing may leave the first phone screen (375x812), with or without a wallet, so at that width the header with its Disconnect button may not grow. - `run-browser.mjs`: the fork walk-through drives the new Deposit form (rows from the wallet without any Add press, Max, Remove, the search and its six-match limit, the list of every stock (closed until pressed, all 25 tickers, a stock in the form switched off, a press adds its row), small balances, a greyed row, the running total against the preview, "You received" against the Deposit event of the receipt, the rows kept after a deposit), the emptied Redeem box, the one-line status and Disconnect (forget, reload, connect again). Every check of the earlier walk-through still runs and its wallet sends are the same, send for send, apart from the deadline argument of deposit and redeem, which follows the clock. It asserts that Disconnect makes no wallet request and no send, and that the whole walk asks the wallet only for accounts, the chain id and sends. Its 24 screenshots are JPEG quality 32 (36 since v9): the Deposit pictures now have a row for every stock in the wallet and are much taller, and the quality-36 set no longer fits the 8 MiB delivery budget. As before, run it before `check-bundle.mjs`. + +## Site update v12 + +The historical update notes above describe their own baselines. The current patch is applied to v11, commit a6e1b4d2eb5988ab8eb7cfc404161f035aa96d84. +- Vault: “Always in stock” replaces the old heading, with no sentence or empty paragraph. The heading alone is centred in the existing framed title panel; the character and speech are unchanged. Deposit and Redeem title panels retain their geometry. Under the owner’s latest decision, Vault shows only “Vault status: Closed” for a known closure, or the existing unreadable wording and Retry vault for an unknown state. No notice appears while deposits operate normally, during loading or at the reopening boundary awaiting a refreshed status. Deposit carries the short closure sentence. The Vault figure is labelled “Maximum Basket Capacity” with “(eligible to be raised)” beneath it in smaller type. The value and Deposit aside’s “Size limit” wording are unchanged. +- Docs: “What Basket is” retains its first paragraph and adds the four approved paragraphs about the changing mix, backing and trading, ITEM fees and ITEM not being live. The Numbers panel and every other Docs panel are unchanged. +- Deposit: “Before you deposit” shows its two approved paragraphs directly, without Transaction details. The complete stock list remains a fold. The owner’s final status design shows only the approved CLOSED LED sign and one short sentence for a known closure, immediately after the first-child 24/7 pill. For the existing Sunday-8pm-to-Friday-8pm schedule, an outside-hours closure reads “Deposits reopen when the stock feed prices update around 8pm on Sundays.” Other closures use “Deposits will be back open when [issue] is resolved.” with the existing short reason substituted in typographic double quotes. The page omits parenthetical detail, stock-at-fault, countdown, local-time and hours paragraphs. Changed schedules use the generic outside-hours reason. The existing clock and refresh-at-opening behavior remain unchanged. There is no OPEN sign, operational line or normal/loading/boundary notice. Unreadable status, incomplete stock data or unknown setup show only the existing unreadable wording and Retry vault, without a sign. The sign’s accessible name is Closed; both animations stop under reduced motion. No read, request or transaction preparation is added. The wallet instruction line beginning “Showing” is removed from both Deposit and Redeem. +- Redeem: one column, no “Take your basket home” box, and no wallet instruction line, following the owner’s latest decision. Claims initially shows only a quiet connection or nothing-owed line, or neither while the first read runs. Owed stocks, failed owed reads, an incomplete list, a running claim or a claim result reveal the full panel. Once shown it remains for the connected account until an account change or reload. The owner approved preserving it across navigation with React Activity: hidden effects pause, so other routes gain no owed reads. Re-reads preserve the visible rows. The zero-stock fold is gone; the approved batch note appears only for multiple owed stocks. +- The 1200×630 share JPEG is at most 45,000 bytes, has no metadata and uses only the approved headline and project name. The source shell adds eight Open Graph/Twitter tags, including the absolute image URL on basket-protocol.sites.imd.fun. check-bundle pins the shell and both JPEG copies by SHA-256, alongside the unchanged favicon pins. +- Speed up: after the receipt wait and cancellation/replacement check, statuses, links and the confirmed-deposit receipt read use receipt.transactionHash. A separate Connect/Disconnect counter drops a late account answer after Disconnect. The existing startup account guard remains unchanged. The bold 24/7 sentence may wrap at word boundaries. +- No transaction inputs or send preparation change. No chain read, wallet request, storage key or application network call is added. send() through its receipt wait is byte-identical to v11; its tail has only the individually pinned mined-hash replacements. Approvals, previews, transaction buttons, Claim all and the owed read remain byte-identical. + +What the checks allow in this update: + +- check-calldata permits exactly Vault, components, Docs, Flows, wallet and the approved main mounting change. Every other TypeScript source and the ABI equal HEAD. Exact pieces restore HEAD, while independent raw protected-block comparisons, connect/disconnect text, counter uses, ordered call hashes, transaction-state writes and reviewed source hashes remain outside regeneration. All chain/parser/encoding/send calls, provider methods, page-load sinks and storage uses equal HEAD. Differential encoding retains 496 identical and 1,773 mutually refused cases. +- check-bundle additionally allows styles, the exact share-tag shell and only share-card.jpg as a new public file. Existing public assets, configuration, packages, lockfile, pinned source and contracts remain protected. The delivery limit remains 8,388,608 bytes. +- check-art retains manifest, pixel collision, title, strip and shelf assertions, adds the exact approved words and a portable widened 24/7 case, and checks the Vault heading and panel through 320–2560px. check-visibility compares v11 at 375×812, retaining header, strip and character geometry and documenting the original v12 removals and Docs displacement together with the later approved issue-only Vault/Deposit status, Closed sign and removal of both wallet instruction lines. Final measurements are recorded in the build evidence. +- check-fixes retains the pending-transaction tests and exercises Claims blank/quiet/full states, failed reads, retry, retained results, refresh, hidden navigation and account resets. The fork keeps all 74 earlier check positions and the same 70 page sends. Two status-result names change. Of 149 inherited assertion calls, 140 remain byte-identical and ordered; nine status-presentation assertions are replaced explicitly to check no normal notice, the Closed sign and exact short sentences, and absence of the removed label/hours detail. All transaction and on-chain Hours/Dst checks remain. The v12 cases also check the compact Vault notice and both removed wallet instruction lines, along with text/layout, served share image, same-nonce deposit repricing, widened label and late Connect. It expects 84 checks, 70 page sends and 24 screenshots; generated artifacts record actual results. The 24 screenshots use JPEG quality 26 (32 in v11); final evidence records the complete delivery budget and the next-higher-quality comparison. diff --git a/web/index.html b/web/index.html index 1f963c3..89dad7e 100644 --- a/web/index.html +++ b/web/index.html @@ -8,6 +8,23 @@ name="description" content="Basket Protocol. View the BASK vault, deposit Stock Tokens, redeem and manage claims." /> + + + + + + + +
>-~u
zz-cw=-y#10uF&hx9x7BR<|+#;RbWN^lSR}6xYk)V%M#5a6R|qMrBB*Q*&4&05$n(L
z>)Q Yq
zoikb=ZG@}MhV2<`$u{G>H**|UX+90Qbx{i4Ig
z|5})BjUNy!q<-kws(zz;A4#{C(Pzk|p7MMhtID!<=bc1e7{2R8S?W=w_&BVd4auP@
zdE!=T<23Cjmr7MUY)a_{!2#rT@5oE(=us}VLrJWwOyl?O{t#05FGbq|_V6@|5Li42K{2ThdhegSA2Ffkt_}7H$_Gf3BPxDSjMV
zvSXM&AShR(@Iv--pD_DJq4{>J;feydBUHF2tWF^y_ELaM$j#<=7JK;Z>rtV8m$AxI
z6N)BP<`^e2X_R4SAxuwPb?Gm7?wy)ZLMs(N&CTnJ3rZ~QB&}2zfHG)194KMzV*@>}
zcJaEaf;>y-R)^wcq4oEihQ15u@$bv>2Yh9B=Z$owiu51Ieeufq#ou7C|`&Kb&UO5xu^WTVZ_DQ5TgBD
z=ycd&;1YK&%`V##-2EP{Q9S?`?KcB4M*t;ND+YSh!DdZSIk;p4VY*XRm10b<1>JXi
zAL!`*-&VU#8l(fJ8}p~N4^7LUsfXPyK@#^