Caverio

build-0: the first real front end of the companion

A browser-side runtime that reads the contract v3 fixture JSON and draws the component library (MASTER section 4.4, P1 and P2) and four pages from it. No framework, no bundler, no build step: static HTML, tokens.css, components.css, ES modules in lib/. Every value on every page comes from fixtures/*.json; where a fixture has no value the page prints the fixture's reason instead of a number.

Built 2026-09-27 overnight by W-build0. Direction A ("Instrument") is provisional: Thomas, 01:41, "option A is much closer, still needs some work". Verification, fixture gaps and the choices made are in CHECKS.md.

The four pages

The gallery and the token file

How to open it

Over http (the Cloudflare Pages path /build-0/, or python3 -m http.server from the folder above) everything works. From file://: this index works in any browser; the other pages need their ES modules, which Chrome refuses on file:// unless started with --allow-file-access-from-files. With that flag every page builds, and the fixtures load through a script-tag fallback because browsers refuse fetch on file://. All links and imports are relative.

What is provisional

What is illustrative

Carried from the fixtures' illustrative flags. Every one of these is also tagged "illus." where it renders.

182 fields across the five fixtures carry illustrative: true. Generated from the fixtures by scripts/build0-fixtures.py; every one of them is also tagged "illus." where it renders.

fixtures/spring.json 35 illustrative fields
situations[0].lights[4]638 wallets in within 5 min of tape start
situations[0].lights[5]recurring launch wallets in the early cohort
situations[0].lights[6]a new 1 h high on our tape
situations[0].bandvalue 1m_10m (band follows the illustrative cap (design-options fixture assumes 1B supply))
situations[0].market.provider.marketCapvalue 2660000 (design-options fixture: assumes 1B supply)
situations[0].market.provider.liquidityvalue 84000
situations[0].diffs[0].changed[1]Holders light on: recurring launch wallets in the early cohort.
situations[0].diffs[0].changed[2]Momentum light on: a new 1 h high on our tape.
situations[0].diffs[0].stillIntact[0]No caller call yet; the five caller channels were read 2 min ago.
situations[0].diffs[0].stillIntact[2]Safety checks unchanged since the first read.
situations[0].diffs[0].stillIntact[2].beforevalue mint renounced, LP locked
situations[0].diffs[0].stillIntact[2].aftervalue mint renounced, LP locked
situations[0].diffs[0].unknown[0]Early-cohort retention unknown: balance reads not run this hour.
situations[0].diffs[1].checkpoint.snapshot.measures.pricevalue 0.00204
situations[0].diffs[1].changed[0]Momentum light on: a new 1 h high on our tape.
situations[0].diffs[1].changed[1]Price 0.00204 at entry to 0.00266 on our tape.
situations[0].diffs[1].changed[1].beforevalue 0.00204
situations[0].diffs[1].stillIntact[2]No caller call yet.
situations[0].diffs[1].unknown[0]Early-cohort retention unknown: balance reads not run this hour.
situations[0].pools[0].coveredBlockvalue 4818203
situations[0].pools[0].sourceHeadvalue 4818205 (measured 2026-09-14T17:27:29Z)
situations[0].pools[0].lagSecvalue 2
situations[0].pools[0].lastTradeAtvalue 2026-09-14T17:26:58Z
situations[0].events[0]balance reads not run this hour
situations[0].events[4]contract checks read: mint renounced, LP locked 30 d
situations[0].events[4].values.mintvalue renounced
situations[0].events[4].values.lpvalue locked 30 d
situations[0].events[7]no changed provider print for 6 min
situations[0].events[8]you looked
situations[0].events[10]recurring launch wallets in the first-30-minute cohort
situations[0].events[10].values.recurringvalue 260 (T5 count over the 876 wallets before 17:08, computed 25 Sep over later launches too; the 16:57 count is not stored)
situations[0].events[12]you marked in
situations[0].events[12].values.pricevalue 0.00204
situations[0].events[14]caller channels read, no call
situations[0].events[15]a new 1 h high on our tape
fixtures/agrippa.json 56 illustrative fields
situations[0].lights[3]mentions per hour at the band's p90
situations[0].lights[4]wallets in per minute above the band's p90
situations[0].lights[5]top-20 share falling fast while the early cohort held, and recurring wallets present
situations[0].lights[6]a new high on our tape
situations[0].bandvalue 1m_10m
situations[0].market.provider.marketCapvalue 1900000
situations[0].market.provider.liquidityvalue 140000
situations[0].holders.earlyCohortRetentionvalue 31 (RPC truth on 22 Sep was 8 held, 13 reduced, 117 exited of 142; the 19 Sep reads are not stored)
situations[0].diffs[0].checkpoint.snapshot.measures.earlyCohortRetentionvalue 64
situations[0].diffs[0].checkpoint.snapshot.measures.callerStancevalue positive
situations[0].diffs[0].changed[0]State: Attention first to Early money leaving.
situations[0].diffs[0].changed[1]Early-cohort retention 64% to 31% of 142 wallets, by RPC read.
situations[0].diffs[0].changed[1].beforevalue 64
situations[0].diffs[0].changed[1].aftervalue 31
situations[0].diffs[0].changed[2]The first caller's stance: positive to neutral.
situations[0].diffs[0].changed[2].beforevalue positive
situations[0].diffs[0].changed[2].aftervalue neutral
situations[0].diffs[0].changed[3]Attention light on again: mentions per hour at the band's p90.
situations[0].diffs[0].changed[6]Tape light off: wallets in per minute back under the band's p90.
situations[0].diffs[0].changed[7]Momentum light off: no new high since the first hour.
situations[0].diffs[0].changed[9]A Fomo-profiled trader reduced by half.
situations[0].diffs[0].changed[9].beforevalue in
situations[0].diffs[0].changed[9].aftervalue reduced by half
situations[0].diffs[0].stillIntact[0]Safety checks unchanged.
situations[0].diffs[0].stillIntact[0].beforevalue mint renounced, LP locked
situations[0].diffs[0].stillIntact[0].aftervalue mint renounced, LP locked
situations[0].diffs[0].stillIntact[1]Holders light still on: top-20 share fell 1.00 to 0.37 in the first hour.
situations[0].diffs[0].unknown[0]Telegram preview missed an hour of messages overnight; mentions may be under-counted.
situations[0].diffs[0].unknown[2]One provider print did not trade on our tape; it is left out of the range.
situations[0].diffs[0].unknown[2].aftervalue 0.000121
situations[0].pools[0].coveredBlockvalue 4990110
situations[0].pools[0].sourceHeadvalue 4990118 (measured 2026-09-19T18:09:55Z)
situations[0].pools[0].lagSecvalue 8
situations[0].pools[0].lastTradeAtvalue 2026-09-19T18:02:10Z
situations[0].events[1]contract checks read: mint renounced, LP locked 30 d
situations[0].events[6]mentions per hour at the band's p90
situations[0].events[8]a second caller call
situations[0].events[12]recurring launch wallets among the wallets in after the call
situations[0].events[12].values.recurringAftervalue 157 (T5 count, computed 25 Sep over later launches too)
situations[0].events[14]early cohort (142 wallets) 64% holding
situations[0].events[14].values.retentionvalue 64
situations[0].events[15]you started watching
situations[0].events[18]Telegram preview missed messages for an hour
situations[0].events[19]early cohort 61% holding
situations[0].events[19].values.retentionvalue 61
situations[0].events[20]a provider print at 0.29x of both neighbours; no swap at that price on our tape
situations[0].events[20].values.printvalue 0.000121
situations[0].events[21]early cohort 61% to 39% holding, a 22-point step
situations[0].events[21].values.retentionvalue 39
situations[0].events[21].values.stepPtsvalue 22
situations[0].events[22]the first caller's stance: positive to neutral
situations[0].events[23]a Fomo-profiled trader reduced by half
situations[0].events[24]mentions per hour at the band's p90 again
situations[0].events[25]early cohort 31% holding
situations[0].events[25].values.retentionvalue 31
situations[0].events[26]contract checks re-read: unchanged
fixtures/mossy.json 26 illustrative fields
situations[0].lights[0]a tracked wallet in
situations[0].identityrow MOSSY
situations[0].bandvalue under_250k
situations[0].age.poolAgevalue 22
situations[0].market.pricevalue 0.000186
situations[0].market.changeFromFirstSeenvalue 35
situations[0].market.drawdownFromHighvalue -4
situations[0].market.volume1hvalue 52000
situations[0].market.netFlow1hvalue 9100
situations[0].market.walletsIn1hvalue 212
situations[0].market.provider.marketCapvalue 180000
situations[0].market.provider.liquidityvalue 31000
situations[0].diffs[0].stillIntact[0]One tracked wallet in; nothing else lit.
situations[0].diffs[0].unknown[0]Holders: cannot see on this chain.
situations[0].pools[0].coveredBlockvalue 372004410
situations[0].pools[0].sourceHeadvalue 372004512 (measured 2026-09-27T07:19:59Z)
situations[0].pools[0].lagSecvalue 40
situations[0].pools[0].lastTradeAtvalue 2026-09-27T07:19:20Z
situations[0].pools[0].firstSeenAtvalue 2026-09-27T06:58:06Z
situations[0].events[1]first swap on our tape
situations[0].events[2]Holders: cannot see on this chain.
situations[0].events[3]contract checks read: mint and freeze renounced
situations[0].events[4]a tracked wallet in
situations[0].events[4].values.sizeUsdvalue 1400
situations[0].events[5]you started watching
situations[0].events[6]Telegram preview sweep, no mention
fixtures/now.json 58 illustrative fields
now.value.sections.happening_now[0].headline.marketCapvalue 2660000 (design-options fixture: assumes 1B supply)
now.value.sections.happening_now[1].headline.marketCapvalue 1900000
now.value.sections.happening_now[2]row KESTREL
now.value.sections.happening_now[2].headline.agevalue 360
now.value.sections.happening_now[2].headline.marketCapvalue 2300000
now.value.sections.happening_now[2].headline.changevalue 44
now.value.sections.happening_now[3]row LANTERN
now.value.sections.happening_now[3].headline.agevalue 180
now.value.sections.happening_now[3].headline.marketCapvalue 410000
now.value.sections.happening_now[3].headline.changevalue 18
now.value.sections.happening_now[4]row QUILL
now.value.sections.happening_now[4].headline.agevalue 540
now.value.sections.happening_now[4].headline.marketCapvalue 1100000
now.value.sections.happening_now[4].headline.changevalue 12
now.value.sections.newly_developing[0].headline.marketCapvalue 180000
now.value.sections.newly_developing[0].headline.changevalue 35
now.value.sections.newly_developing[1]row TOLLAN
now.value.sections.newly_developing[1].headline.agevalue 41
now.value.sections.newly_developing[1].headline.marketCapvalue 96000
now.value.sections.newly_developing[1].headline.changevalue 8
now.value.sections.newly_developing[2]row BRAMBLE
now.value.sections.newly_developing[2].headline.agevalue 60
now.value.sections.newly_developing[2].headline.marketCapvalue 220000
now.value.sections.newly_developing[2].headline.changevalue -9
now.value.sections.newly_developing[3]row ORRIS
now.value.sections.newly_developing[3].headline.agevalue 120
now.value.sections.newly_developing[3].headline.marketCapvalue 340000
now.value.sections.newly_developing[3].headline.changevalue 3
now.value.sections.changed_since_you_looked[0]row PLUMB
now.value.sections.changed_since_you_looked[0].headline.agevalue 2880
now.value.sections.changed_since_you_looked[0].headline.marketCapvalue 2700000
now.value.sections.changed_since_you_looked[0].headline.changevalue -22
now.value.sections.changed_since_you_looked[0].changesvalue 1
now.value.sections.cooling[0]row FENNEL
now.value.sections.cooling[0].headline.agevalue 1500
now.value.sections.cooling[0].headline.marketCapvalue 140000
now.value.sections.cooling[0].headline.changevalue -40
now.value.sections.cooling[1]row LUMEN
now.value.sections.cooling[1].headline.agevalue 2100
now.value.sections.cooling[1].headline.marketCapvalue 520000
now.value.sections.cooling[1].headline.changevalue -18
now.value.hiddenCountvalue 19 (newly developing rows below the list ceiling)
market.value.lines[0]{"value": 44, "reason": null, "unit": "count", "basis": "tape", "illustrative":
market.value.lines[0].valuevalue 44
market.value.lines[1]{"value": 1.4, "reason": null, "unit": "ratio", "basis": "tape", "illustrative":
market.value.lines[1].valuevalue 1.4
market.value.lines[2]{"value": 31, "reason": null, "unit": "pct", "basis": "tape", "illustrative": tr
market.value.lines[2].valuevalue 31
market.value.lines[3]{"value": -19, "reason": null, "unit": "pct", "basis": "provider:geckoterminal",
market.value.lines[3].valuevalue -19
market.value.lines[4]{"value": 21000, "reason": null, "unit": "count", "basis": "rpc", "illustrative"
market.value.lines[4].valuevalue 21000
market.value.lines[5]{"value": 1200000000.0, "reason": null, "unit": "usd", "basis": "rpc", "illustra
market.value.lines[5].valuevalue 1200000000.0
market.value.lines[6]{"value": 58.1, "reason": null, "unit": "pct", "basis": "provider:coingecko", "s
market.value.lines[6].valuevalue 58.1
market.value.lines[7]{"value": 0.01, "reason": null, "unit": "pct", "basis": "provider:exchanges", "s
market.value.lines[7].valuevalue 0.01
fixtures/board.json 7 illustrative fields
board.value.rows[0].checkpoint.snapshot.measures.pricevalue 0.00204
board.value.rows[1].checkpoint.snapshot.measures.earlyCohortRetentionvalue 64
board.value.rows[1].checkpoint.snapshot.measures.callerStancevalue positive
board.value.rows[3].checkpoint.snapshot.measures.earlyCohortRetentionvalue 64
board.value.rows[3].checkpoint.snapshot.measures.callerStancevalue positive
board.value.rows[5]row PLUMB
board.value.rows[5].frozenRoomvalue /record/frozen/robinhood:ILLUSPLUMB#2026-09-23T08:02:00Z~cca44834

Screenshots

shots/ holds 1280 and 390 wide JPEGs of now, situation x3, hold, board, gallery and this index, plus SPRING under theme B. Regenerate with NODE_PATH=/home/botbox/node_modules node scripts/build0-shots.cjs; resync fixtures with python3 scripts/build0-fixtures.py.