From 82e6b1e1f6feb7058b1bf2a44a6263823324082b Mon Sep 17 00:00:00 2001 From: igneum-labs <337424239+igneum-labs@users.noreply.github.com> Date: Wed, 7 Oct 2026 17:56:36 +0000 Subject: [PATCH] The miner's chain key from the shared legend export (key-22, 7 October 2026): IgneumDag.legend({mine}) and renderLegend(el, {mine}) in scene/live-dag.js (2.0.5) carry the one list of entries with each state's token and shape (Pending, Included, Excluded, Selected chain, Proven, Locked checkpoint; the app adds Your blocks, ringed, first); the app's chain card renders its key from it at mount with the source line kept (the Included swatch had been ember while the scene draws included blocks in --included, and "pending" was lower-case), its CSS colours a swatch only from the entry's token; the copies synced; tools/scene/legend.test.mjs on the gate's scene line: the export's entries, order, tokens and shapes, every colour the scene draws has an entry, the app key is the export, and the /live key equals the export minus the ruled exceptions (no Pending, no Your blocks) with the same wording, token and shape on every shared entry, binding on master where the site deploys from and a diagnostic on a release branch whose site tree is the frozen cut; the site is not edited (main's correction: the project lead's ask was the miner's key) Co-Authored-By: Claude Fable 5.1 --- app/igneum-app/ui/app.css | 15 ++++---- app/igneum-app/ui/app.js | 2 ++ app/igneum-app/ui/index.html | 2 +- app/igneum-app/ui/live-dag.js | 24 ++++++++++++- scene/live-dag.js | 24 ++++++++++++- site/live-dag.js | 24 ++++++++++++- tools/ci/pre-push.sh | 2 +- tools/scene/legend.test.mjs | 68 +++++++++++++++++++++++++++++++++++ 8 files changed, 149 insertions(+), 12 deletions(-) create mode 100644 tools/scene/legend.test.mjs diff --git a/app/igneum-app/ui/app.css b/app/igneum-app/ui/app.css index 8c707b21d..76244e793 100644 --- a/app/igneum-app/ui/app.css +++ b/app/igneum-app/ui/app.css @@ -674,13 +674,14 @@ body.drawer-open .toast{bottom:calc(var(--drawer-h) + 16px)} .legend{display:flex;flex-wrap:wrap;gap:8px 16px;margin-top:var(--s-3);font-size:var(--t-sm);color:var(--ash);align-items:center} .legend span{display:inline-flex;align-items:center;gap:7px} /* the DAG legend swatches, scoped to the legend (a bare .lg reached label.switch.lg until 7 October 2026) */ -.legend .lg{width:10px;height:10px;border-radius:3px;display:inline-block;border:1.5px solid var(--ash);background:var(--row)} -.legend .lg.you{border-color:var(--molten);box-shadow:0 0 0 2px var(--molten-40)} -.legend .lg.pending{border-color:var(--ash)} -.legend .lg.included{border-color:var(--ember)} -.legend .lg.excluded{border-color:var(--ash);opacity:.45} -.legend .lg.proven{background:var(--ember);border-color:var(--ember)} -.legend .lg.locked{border-color:var(--ember);border-radius:50%;box-shadow:0 0 0 2px var(--ember-40)} +/* the key's swatches (key-22, 7 October 2026): the entries, order and tokens come from IgneumDag.legend; a swatch takes its + colour from --lg (set by renderLegend to the entry's token) and its shape from the class, so no state is coloured here */ +.legend .lg{--lg:var(--ash);width:10px;height:10px;border-radius:3px;display:inline-block;border:1.5px solid var(--lg);background:var(--lg-fill,var(--row));position:relative;flex:none} +.legend .lg.faded{opacity:.45} +.legend .lg.circle{border-radius:50%;box-shadow:0 0 0 2px color-mix(in srgb,var(--lg) 40%,transparent)} +.legend .lg.ringed{box-shadow:0 0 0 2px color-mix(in srgb,var(--lg) 40%,transparent)} +.legend .lg.tick{border-color:var(--line-2)} +.legend .lg.tick::after{content:"\2713";position:absolute;left:0;top:-4px;font-size:11px;line-height:1;color:var(--lg)} /* Cards: the Tuning strip above the list */ .tune-strip{padding:var(--s-4) var(--card-pad)} .ts-row{display:flex;align-items:center;gap:var(--s-4);flex-wrap:wrap} diff --git a/app/igneum-app/ui/app.js b/app/igneum-app/ui/app.js index d2e928d5f..8e995b7d6 100644 --- a/app/igneum-app/ui/app.js +++ b/app/igneum-app/ui/app.js @@ -1981,6 +1981,8 @@ if (typeof document !== 'undefined') (function () { } function mountDag() { if (dag || typeof IgneumDag === 'undefined' || !$('dag-live')) return; + // key-22: the key renders from the scene's one legend export (Your blocks first for this machine's view); the source line stays after it + if (IgneumDag.renderLegend) document.querySelectorAll('[data-legend]').forEach(function (el) { IgneumDag.renderLegend(el, { mine: el.getAttribute('data-legend') === 'mine' }); }); try { dag = IgneumDag.mount($('dag-live'), { compact: true, window: 60, fps: 60, poll: false, mine: mineFn, tooltip: $('dag-tip'), chip: $('dag-chip'), pauseButton: $('dag-pause'), onSelect: function (b, why) { if (b && why !== 'update') openFull(b.hash); }, diff --git a/app/igneum-app/ui/index.html b/app/igneum-app/ui/index.html index 242c5280e..5d27fb6f1 100644 --- a/app/igneum-app/ui/index.html +++ b/app/igneum-app/ui/index.html @@ -246,7 +246,7 @@ -
Your blockspendingIncludedExcludedProvenLocked checkpoint
+