Skip to content

Promote: the tracker panel holds one size, and the ZRC-20 ledger reaches a page - #31

Merged
bitcoinuniverseadmin merged 12 commits into
mainfrom
develop
Aug 30, 2026
Merged

bitcoinuniverseadmin merged 12 commits into
mainfrom
develop

Conversation

@bitcoinuniverseadmin

@bitcoinuniverseadmin bitcoinuniverseadmin commented Aug 30, 2026

Copy link
Copy Markdown

Promotes develop (d124f4f9f) to main.

What ships

Two lanes, both merged into develop and green there.

#29, the transaction route's layout shift. It was the only route over the layout budget, and it was over for one shift. The tracker panel painted at 46px with its rows empty, then grew to 193px when the transaction arrived, pushing div.bottom-panel down 148px and shrinking it by the same. Every row in that panel is now reserved at two lines of value, so the loading, pending and confirmed states all settle at the same box and nothing below moves.

#20, the ZRC-20 ledger. The whole ledger for every token, under two disagreeing rulesets, was a JSON string in a table cell that the page declined to show. It now reaches a page under both readings.

Measured on the live origin before this promotion

Against https://explorer.bitcoinuniverse.io running e21a26d5c, at 390x844 with the processor throttled four times, on a real confirmed transaction:

t= 1000ms  panel 45.3   data 0    rows []       bottom-panel top 288.7
t= 1500ms  panel 193.3  data 140  rows [72,68]  bottom-panel top 436.7

layout shift on the live origin: 0.108
  shift 0.107 at 2050ms from div.bottom-panel

That is the defect this promotion removes, reproduced on production rather than on a fixture. The same check is the post-deploy verification: it fails today and must pass after cutover.

Validation

Both source pull requests carried the full suite green, including the deep visual matrix, the mobile and adaptive layout job that runs the performance gate, and WebKit and Firefox. The performance gate after the tracker change, full route set:

route            LCP      CLS   long tasks
home             19004ms  0.011  8
blocks           11348ms  0.046  4
tx               19100ms  0.001  5
dogecoin-tx      12420ms  0.011  3

The recorded layout exception on tx is removed. KNOWN_LAYOUT_DEBT keeps its mechanism and is now empty, so the route is held to the plain 0.1 budget rather than to a recorded figure.

Compatibility

Frontend templates, stylesheets and a reading module, plus a CI gate and documentation. No API, schema, migration, dependency or protocol rule is changed, so no indexer or overlay release is required. The overlay stays on backend-apis-5e2f6b1e.

Production faults fixed on the host alongside this

The hourly production smoke has failed since 2026-08-29 on index-doge-tap is configured but published no checkpoint. Three stacked faults, diagnosed and recorded in index-doge-tap#24:

  1. The overlay's source entry used http://127.0.0.1:3013 against a TLS listener, so every probe got an empty reply and the authority was published as unreachable. Corrected to the certificate's own SAN name over loopback, with the certificate added to the overlay's trust rather than verification being turned off.
  2. The overlay carried the reader's bearer token, not the per-authority one the marketplace endpoints check, so every checkpoint request was a 401. Corrected by copying the existing credential; nothing was created, rotated or regenerated.
  3. With both corrected the authority answers honestly, 503 Canonical authority snapshot is unavailable, because the TAP builder proves custody against ord inscriptions and the replacement Ord-Dogecoin index is mid-rebuild at block 5,782,213 against Core's 6,353,213, advancing. No checkpoint is achievable until it reaches the tip, and the reindex is not interrupted.

The authority now reports degraded rather than unreachable, which is the truthful state. Every other synthetic check passes. That one check stays red on purpose: turning it green today would mean either withdrawing a protocol we intend to serve or interrupting the reindex.

🤖 Generated with Claude Code

bitcoinuniverseadmin and others added 7 commits August 29, 2026 14:20
Live at /zcash/protocols/zrc20 right now, in a table cell:

  rulesets
  {"zord":{"max_supply":"21000000000000000000000000","mint_limit":"10000000
  00000000000000","minted":"21000000000000000000000000","burned":"0",...

The authority indexes every ZRC-20 token twice, once under `zord` and once
under `zecscriptions`, publishes both ledgers, names the fields the two
disagree on, and carries prose about rules that neither reading evaluates. None
of it reaches a page: `rulesets` is an object of objects, the fact reader stops
one level above the figures, and a table cannot hold a structure. The whole
ledger for all 159 tokens is a field the page declines to show.

This is the reading. Three rules hold it.

Quantities are shifted by the token's own `decimals`, and the kinds are an
allowlist rather than a pattern. A pattern is what printed a DRC-20 supply of
100000000000 as `1,000 DOGE` by matching a field that was not an amount, and
the opposite mistake is available here: `max_supply` of
21000000000000000000000000 is twenty-one million with eighteen decimals applied
and twenty-one septillion without. `holders` is a number of things and is never
shifted at all. A token whose `decimals` cannot be read as a plain non-negative
integer shows no amount rather than an unshifted one, because a wrong quantity
is worse than a missing one and there is no partial credit for being close.

A ruleset field this build has no kind for is named, not dropped. Reproducing
the defect this reading exists to fix, one level further down, would be worse
for being deliberate. `mint_progress` is skipped by name instead, because it
restates two figures already shown and is not something the page cannot read.

Where the readings disagree, both figures are kept, lens first. For ZERO they
agree on every quantity and disagree only on how many mints count and therefore
on how many holders there are: zord 21,120 and 2,330, zecscriptions 21,000 and
2,539. Choosing one would be the explorer inventing a consensus the chain does
not have.

Divergence is observed from the figures and kept apart from what the authority
says diverges, so a summary drifting from the data behind it stays visible
rather than being taken as the data.

The spec is `/api/v1/zcash/protocols/zrc20/ZERO` as it answered on 2026-08-29,
carrying only the fields this reading looks at, with the spellings, nesting and
digits unchanged. A fixture written in the shape we expected is how this became
a field the page declined to show.

This commit is the reading and its spec only. The pages that render it follow.
The transaction route was the one route over the layout budget, at 0.103 on
develop and 0.108 with the mobile shell, and it was over for a single shift.

The panel under the tracker bar painted at 46 pixels with its rows empty. At
about three seconds, when the transaction's own data arrived, two rows appeared
in it and it grew to 193. The bottom panel is flex-grow inside a
viewport-height column, so it took that as a move and a shrink at once, 148
pixels of each, and that one shift was the whole figure.

Reserving the room needs one height, and the note recorded with the exception
said the states did not have one. Measured at 390 by 844 they nearly do. A
pending transaction settles at two 48px rows, first seen and an ETA. A confirmed
one settles at 72 and 68, because below 992px the confirmed timestamp puts its
relative time on a second line and the confirmation count is a button rather
than a line of text. The replaced shape the note also listed is not on this
path at all: this.replaced is only ever set from the txReplaced socket event,
so a cold load never starts there.

So the row gets the reservation rather than the block. Every row in the panel is
two lines of value tall, because the tallest of them is: 4.5em a row, 9em for
the pair, held by the block itself so the box survives the waiting state that
has no rows in it, and filled by skeleton rows while the transaction is being
read. Rows taller than their content centre it, because baseline alignment pins
the label to the value's first line and left "Confirmed at" sitting above the
relative time instead of beside the pair of them.

Measured after, on the same throttle: loading, pending and confirmed all settle
at panel 197.3, data 144, rows 72 and 72, bottom panel top 440.7. Nothing moves.
The route reads 0.001, twice, against 0.108. The pending panel is 48 pixels
taller than it was, which is the cost the old note asked to have measured, and
the live pending to confirmed transition no longer jumps 44 pixels at the moment
the tracker exists to show.

The recorded exception goes with it. The debt table keeps its mechanism and its
reasoning and is now empty. The design system records the rule rather than the
exception, and the two paragraphs there that still described the performance
gate as it was before the runner fix now describe what it does.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The reading model existed and nothing called it. The list page fell
through to the generic table, which named rulesets and divergence as
structures it was holding back, and the token page dumped the same
ledger as a JSON string in a cell.

Now the token page states the decimals once, shows every figure under
each ruleset side by side, marks the rows where the readings disagree,
cross-checks the authority's own divergence summary against the figures,
and carries the authority's prose about rules neither reading evaluates.
The list page shows four chosen figures per token, names the five it
holds back, stacks both readings in any cell where they disagree, and
links each token to its page, which nothing did before.

The fixtures are captured from the live origin, trimmed and otherwise
unedited, and the model checks assert invariants rather than values: an
amount is shifted only by the token's own decimals, a count is never
shifted, and divergence is observed from the figures rather than trusted
from the summary. The visual matrix gains both pages as gated routes,
with a fixture token whose readings disagree, one that agrees, and one
with zero decimals.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The registry lists dunes, the capability document reports it, and the
chain navigation omitted it: the coverage panel could only say there
was no page to open. Now there is one, and it does not run the ledger
through the generic table, because a dune's arithmetic is 128-bit and
each dune carries its own divisibility. The generic path would have
shown supplies unshifted or, worse, shifted by Dogecoin's eight
decimals, which is the DRC-20 supply mistake with a different name.

The catalog page shows supply, mints and burned per dune, names the
figures it holds back, and links each dune to its page. The dune page
states the divisibility once, shifts every quantity by it and never by
the chain's decimals, keeps counts unshifted, renders the etching as a
link and the mint window as a verdict, and names any field this build
has no kind for. A dune whose divisibility cannot be read shows no
shifted quantity at all.

The visual matrix gains both pages as gated routes, with an open mint,
a closed one with no symbol, and a zero-divisibility dune whose
unshifted figure is on the page deliberately.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…-its-rows

The tracker panel moved the page when the transaction arrived
The Dogecoin and Zcash mempool pages were a table beside a Bitcoin page
that draws projected blocks. Copying that projection would be false in
the units and in the claim, so the cubes here draw the weaker statement
the overlay actually publishes: candidate buckets, grouped under each
chain's own fee rules, with the semantics stated above the row.

Dogecoin's cubes are the pending set ordered by fee per kilobyte, and
the copy says they are not a forecast. Zcash's cubes are ZIP-317
eligibility tiers, labeled as verdicts each transaction carries on its
own, because its block producers select randomly and drawing a queue
would invent a consensus. The cadence line names the chain's target
spacing and never a countdown; colors map each bucket's own quantiles
onto the theme ramp by position, because absolute thresholds in
koinu/kB or zatoshi-per-action would be numbers this explorer made up;
a disclosure id this build has no copy for renders as its id rather
than vanishing.

The cube grammar itself is the Bitcoin one: the same face, skewed top
and side, and projected-block palette, so the product reads as one
thing across chains while each chain keeps its own truth. The bucket
request failing renders no cubes and the list stands alone; the
fixture states keep the cubes and the list in agreement, including an
empty pending set and an authority outage.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@bitcoinuniverseadmin

Copy link
Copy Markdown
Author

Coordination (session mempool-34): I have PR 20 (ZRC-20 pages) finishing its frontend build now, with two stacked branches behind it (feat/dunes-presentation, feat/candidate-cubes) and a batched explorer+overlay release planned after they merge. No conflict with this promotion; if you are cutting a release for the tracker fix, go ahead - I will promote and cut a single combined release afterwards rather than racing it. Claiming the next release lane after this promotion merges.

bitcoinuniverseadmin and others added 4 commits August 30, 2026 11:30
The ZRC-20 ledger is a JSON string on the live site
The chain protocols page fell through to the generic path: the
registry manifest as a seven-column table, and each authority's
operational record flattened into facts like "Confirmed history
configured: No" beside "blockbook-unconfigured", which left a reader
to reassemble the sentence themselves.

Every one of those facts is kept and given its place. The manifest is
a designed table: each protocol with its page, its release verdict in
the registry's own vocabulary translated without being softened, the
authority that serves it, and its coverage. Below it, each authority
reports about itself verdict first: what it is, whether it answers,
the block it stands at, when it last answered, and any failure under
the exact code the source reported, because a paraphrase cannot be
checked against the service and the code can.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@bitcoinuniverseadmin bitcoinuniverseadmin changed the title Promote: the tracker panel holds one size Promote: the tracker panel holds one size, and the ZRC-20 ledger reaches a page Aug 30, 2026
Dunes pages, and cubes for the pending set under each chain's own fee rules
@bitcoinuniverseadmin
bitcoinuniverseadmin merged commit a2ae438 into main Aug 30, 2026
16 of 17 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant