app-ia-26: the pill's rest word names heat mode; the three UI test files outside the gate line join it

The shipper read ui/heat-region.test.mjs red on 7e60442e: the item-1 pill said "Resting" where the heat lane's rule
wants "Resting · heat mode" (never a bare rest word on a resting card). The pill reads the rule's words again; the
once-test says why. heat-region.test.mjs, fold.test.mjs and ui-ota.test.mjs were not in the gate's UI line, which is
how the red passed the gate; they are in it now (both lines of tools/ci/pre-push.sh).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
igneum-labs 2026-10-08 14:13:26 +00:00
parent 7e60442e22
commit cf997e766e
3 changed files with 4 additions and 4 deletions

View file

@ -818,7 +818,7 @@ var View = (function () {
if ((s.jobs && s.jobs.active) || m.state === 'held') return { text: 'Job running', tone: '' };
if (tuningCard(m.cards)) return { text: 'Tuning', tone: 'on' };
if (m.state === 'mining') return { text: 'Mining', tone: 'on' };
if (s.heat && s.heat.on && s.heat.phase === 'resting') return { text: 'Resting', tone: '' };
if (s.heat && s.heat.on && s.heat.phase === 'resting') return { text: 'Resting · heat mode', tone: '' }; // never a bare rest word (the heat lane's rule)
if (m.state === 'paused') return { text: 'Paused', tone: '' };
if (n.state === 'syncing' || n.state === 'starting') return { text: 'Syncing', tone: '' };
if (n.state === 'restarting' || n.state === 'behind' || n.state === 'no peers' || n.state === 'failed' || n.state === 'stopped' || n.state === 'stub') return { text: 'Node down', tone: 'bad' };

View file

@ -59,7 +59,7 @@ test('T-R8: the pill is a state word, the rate lives on Mine', () => {
assert.deepEqual(V.pill({ ...base, mining: { state: 'mining', hash_total: 100, cards: [] }, jobs: { active: true } }), { text: 'Job running', tone: '' });
for (const st of ['restarting', 'behind', 'no peers', 'failed', 'stopped', 'stub']) assert.deepEqual(V.pill({ ...base, mining: { state: 'waiting', hash_total: 0, cards: [] }, node: { state: st } }), { text: 'Node down', tone: 'bad' }, st);
assert.deepEqual(V.pill({ ...base, mining: { state: 'mining', hash_total: 1, cards: [{ state: 'tuning' }] } }), { text: 'Tuning', tone: 'on' });
assert.deepEqual(V.pill({ ...base, heat: { on: true, phase: 'resting' }, mining: { state: 'paused', hash_total: 0, cards: [] } }), { text: 'Resting', tone: '' });
assert.deepEqual(V.pill({ ...base, heat: { on: true, phase: 'resting' }, mining: { state: 'paused', hash_total: 0, cards: [] } }), { text: 'Resting · heat mode', tone: '' }, 'a rest names heat mode, never a bare word (heat-region.test.mjs)');
assert.deepEqual(V.pill({ ...base, mining: { state: 'idle', hash_total: 0, cards: [] } }), { text: 'Not mining', tone: '' });
assert.deepEqual(V.pill({ ...base, setup_done: false, detecting: true }), { text: 'Detecting cards', tone: '' });
assert.deepEqual(V.pill({ ...base, quitting: true }), { text: 'Stopping', tone: '' });

View file

@ -109,11 +109,11 @@ tree_checks() {
run "the interface and the app entries are one UI tree (version pair; self-test, then the staged manifest when one is given)" bash -c 'node tools/ui-ota/pair-check.mjs --self-test && { [ -z "${IGNEUM_MANIFEST:-}" ] || node tools/ui-ota/pair-check.mjs "$IGNEUM_MANIFEST"; }'
run "heat gate reader self-test (a known hold passes, a known drift fails)" node tools/heat-gate.mjs --self-test
run "relay unit tests" node --test relay/test/parse.test.mjs relay/test/auth.test.mjs relay/test/wake.test.mjs relay/test/ember.test.mjs
run "miner app notice strip and update card tests" node --test app/igneum-app/tiers/class-v5-tiers.test.mjs app/igneum-app/ui/notices.test.mjs app/igneum-app/ui/update-card.test.mjs app/igneum-app/ui/view.test.mjs app/igneum-app/ui/once.test.mjs app/igneum-app/ui/tune-line.test.mjs app/igneum-app/ui/ui-ota.test.mjs app/igneum-app/ui/fold.test.mjs
run "miner app notice strip and update card tests" node --test app/igneum-app/tiers/class-v5-tiers.test.mjs app/igneum-app/ui/notices.test.mjs app/igneum-app/ui/update-card.test.mjs app/igneum-app/ui/view.test.mjs app/igneum-app/ui/once.test.mjs app/igneum-app/ui/tune-line.test.mjs app/igneum-app/ui/heat-region.test.mjs app/igneum-app/ui/fold.test.mjs app/igneum-app/ui/ui-ota.test.mjs app/igneum-app/ui/ui-ota.test.mjs app/igneum-app/ui/fold.test.mjs
run "the opening window size: the one rule for both hosts (primary work area, 1920 and 16:10 caps, a remembered frame kept only when it fits)" bash -c 'cc -std=c99 -Wall -Wextra -o "${TMPDIR:-/tmp}/opening_size_test.$$" app/windows/opening_size_test.c && "${TMPDIR:-/tmp}/opening_size_test.$$"; rc=$?; rm -f "${TMPDIR:-/tmp}/opening_size_test.$$"; exit $rc'
run "the Intel rotate-fold rewrite: Intel gets the shift form, AMD and NVIDIA untouched (proto-opencl/test_intel_rotr.c)" bash -c 'cc -std=c99 -Wall -Wextra -o "${TMPDIR:-/tmp}/test_intel_rotr.$$" proto-opencl/test_intel_rotr.c && "${TMPDIR:-/tmp}/test_intel_rotr.$$"; s=$?; rm -f "${TMPDIR:-/tmp}/test_intel_rotr.$$"; exit $s'
run "no secret file names and no 64-hex secrets in the tree" bash -c 'bash tools/ci/no-secrets-check.sh --self-test && bash tools/ci/no-secrets-check.sh'
run "miner app notice strip and update card tests" node --test app/igneum-app/tiers/class-v5-tiers.test.mjs app/igneum-app/ui/notices.test.mjs app/igneum-app/ui/update-card.test.mjs app/igneum-app/ui/view.test.mjs app/igneum-app/ui/once.test.mjs app/igneum-app/ui/tune-line.test.mjs
run "miner app notice strip and update card tests" node --test app/igneum-app/tiers/class-v5-tiers.test.mjs app/igneum-app/ui/notices.test.mjs app/igneum-app/ui/update-card.test.mjs app/igneum-app/ui/view.test.mjs app/igneum-app/ui/once.test.mjs app/igneum-app/ui/tune-line.test.mjs app/igneum-app/ui/heat-region.test.mjs app/igneum-app/ui/fold.test.mjs app/igneum-app/ui/ui-ota.test.mjs
run "launch gates: every row with its check, the handoff text clean (self-test, then the tree)" bash -c 'node tools/ci/launch-gates-check.mjs --self-test && node tools/ci/launch-gates-check.mjs'
run "income per tier: the public table equals its inputs, the schedule arithmetic" bash -c 'node tools/launch/income-tiers.mjs --check && node --test tools/launch/income-tiers.test.mjs'
run "hash-origin report: a known-finished day and a known-failed day" node --test tools/observer/hash-origin.test.mjs