The wallet's History row: a block under a locked checkpoint is finalised even in a pause; the window audit records the founder's v2.0.1 calls
docs/spec/finality-guarantees.md section 9: one vocabulary, included, executed, proven, finalised; the network's pause
is the network's word, never a transaction's. The wallet's History row read the node's "finality not active" word for a
transaction under a locked checkpoint while finality was paused; it reads "finalised" now, with the pause in the why
("under a locked checkpoint, not yet verified here; finality is paused on the network above it"). Known-failed first on
build-2 (view.test.mjs: the row's word and the vocabulary set); 21 wallet UI tests green.
docs/design/app-audit-2026-10-08.md gains section 7: the founder's reversals and additions for v2.0.1 (the Cards tab
back, the first-block card once per address, the four words, one positioning line, the watchdog's waiting words), each
with where it lands (branch cards-201 on release-2.0.1; this branch for the wallet).
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
parent
510879a7a8
commit
ffdb709bbf
3 changed files with 21 additions and 3 deletions
|
|
@ -141,7 +141,9 @@ var View = (function () {
|
|||
case 'executed': return { word: 'executed', tone: 'ink', why: 'in ' + blk };
|
||||
case 'proven': return { word: 'proven', tone: 'ink', why: 'in ' + blk + ', proof paid' };
|
||||
case 'finalised': return { word: 'finalised', tone: 'ink', why: 'under a locked checkpoint, not yet verified here' };
|
||||
case 'finality not active': return { word: 'finality not active', tone: 'ink', why: 'under a locked checkpoint; finality is paused on the network' };
|
||||
// section 9 of docs/spec/finality-guarantees.md: a block under a locked checkpoint is finalised even while the network's
|
||||
// finality is paused; the pause is the network's word, never a transaction's
|
||||
case 'finality not active': return { word: 'finalised', tone: 'ink', why: 'under a locked checkpoint, not yet verified here; finality is paused on the network above it' };
|
||||
case 'unknown': return { word: 'pending', tone: '', why: 'not in any block the node holds' };
|
||||
}
|
||||
if (e.finality === 'in_block') return { word: 'included', tone: '', why: 'in ' + blk };
|
||||
|
|
|
|||
|
|
@ -103,7 +103,10 @@ test('one state word per row: the wallet\'s verified final wins, failed from the
|
|||
assert.deepEqual(V.stateWord(e, 'proven'), { word: 'proven', tone: 'ink', why: 'in block 140,262, proof paid' });
|
||||
// the node says finalised but this wallet has not verified the certificate: the word, not the molten tone
|
||||
assert.deepEqual(V.stateWord(e, 'finalised'), { word: 'finalised', tone: 'ink', why: 'under a locked checkpoint, not yet verified here' });
|
||||
assert.deepEqual(V.stateWord(e, 'finality not active'), { word: 'finality not active', tone: 'ink', why: 'under a locked checkpoint; finality is paused on the network' });
|
||||
// section 9 of docs/spec/finality-guarantees.md (8 October 2026): a block under a locked checkpoint is finalised even while
|
||||
// the network's finality is paused; the pause is the network's state word, never a transaction's. Known-failed first: the
|
||||
// node's "finality not active" word was shown on the row.
|
||||
assert.deepEqual(V.stateWord(e, 'finality not active'), { word: 'finalised', tone: 'ink', why: 'under a locked checkpoint, not yet verified here; finality is paused on the network above it' });
|
||||
assert.equal(V.stateWord(e, 'unknown').word, 'pending');
|
||||
// no node word yet (the public RPC, or not asked): the wallet's label
|
||||
assert.deepEqual(V.stateWord(e, ''), { word: 'included', tone: '', why: 'in block 140,262' });
|
||||
|
|
@ -114,7 +117,7 @@ test('one state word per row: the wallet\'s verified final wins, failed from the
|
|||
assert.deepEqual(V.stateWord(r, ''), { word: 'executed', tone: 'ink', why: 'in block 140,201' });
|
||||
assert.equal(V.stateWord(entry({ hash: 'proving-1-0', kind: 'proving', finality: 'final', checkpoint: 9 }), '').word, 'finalised');
|
||||
// never a stronger word than the chain's: the words the row can show are exactly the node's plus failed
|
||||
const words = new Set(['pending', 'included', 'executed', 'proven', 'finalised', 'finality not active', 'failed']);
|
||||
const words = new Set(['pending', 'included', 'executed', 'proven', 'finalised', 'failed']);
|
||||
for (const w of ['pending', 'included', 'executed', 'proven', 'finalised', 'finality not active', 'unknown', '']) assert.ok(words.has(V.stateWord(e, w).word), w);
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -346,3 +346,16 @@ Defaults stand unless a word comes by the time given.
|
|||
| D5 | The chain scene stays on Mine as the live graph; the block inspector stays behind Inspect | stays | 17:00 BST |
|
||||
|
||||
Captures: `~/Desktop/igneum-previews-2026-10-08/audit/01-overview-live-dark.png` to `13-settings-light.png`.
|
||||
|
||||
## 7. The founder's reversals and additions, v2.0.1 (8 October 2026, 18:1x BST)
|
||||
|
||||
Recorded as the founder's call, read through the shipper; they override section 4 where they touch it.
|
||||
|
||||
| Id | Call | What changes | Where |
|
||||
|---|---|---|---|
|
||||
| F1 | The Cards tab is back in the rail as its own page | every card row moves out of Mine into Cards: the state, the hash rate, the power, the temperature, the tune state (one line, the Tune page's words), the enable switch, the 16 GB proving note; Mine keeps the headline rate and the chain status (the hero tiles, the chain scene, the node line, Activity); D4 of section 6 is reversed | `app/igneum-app/ui` on release-2.0.1, branch cards-201; `View.cardsRowWords`; the once-test "v2.0.1: the Cards page holds every card row" |
|
||||
| F2 | The first-block celebration shows once per payout address, ever | keyed on the lower-case address and persisted in settings.json (`first_block_shown[address] = {hash, at}`), so it survives runs, updates and a reinstall that keeps the wallet; a new address shows it once again; a dev-fee block never raises it | `app/igneum-app/src/config.rs`, `ladder.rs`, `engine.rs`, `server.rs` on the same branch |
|
||||
| F3 | The four interface words on the wallet and the window | included, executed, proven, finalised (docs/spec/finality-guarantees.md section 9); a locked block is finalised even in a pause, the pause sits on the status strip, no block reads "finality not active" | the window's block inspector and the scene's words (cards-201); the wallet's History row (`app/igneum-wallet/ui/app.js` stateWord, branch wallet-words-20 on master) |
|
||||
| F4 | One positioning line | the hero keeps it; `#s-positioning` under Updates is gone | cards-201 |
|
||||
| F5 | The watchdog's words while the node serves no epoch state stream | "waiting for the node's execution state for this epoch", never "the worker did not load its program" | `app/igneum-app/src/watchdog.rs` on cards-201 |
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue