igneum-labs
d55dfd003f
0.3.25: the AMD core-clock and power-cap knob for Ember Tune (main's order of 8 October 2026: PC 1's RX 9070 XT measured 18.9 MH/s at 202 W and stopped, "no knob on AMD"; the card is latency-bound on the whole class v4 ladder, so a core-clock cap is the lever as on NVIDIA). Two findings behind the stop: the app's AMD lever (--tune, --set-gmax, --set-plimit, --reset in igneum-gpu-telemetry: ADLX IADLXManualGraphicsTuning2 and IADLXManualPowerTuning on Windows, pp_od_clk_voltage and hwmon power1_cap on Linux) was built on 5 October ( 620296b2) and never left branch opencl-rdna4-telemetry, so the kit's exe answers no tune line and every AMD tune fell to "measure only"; and the 9070 XT's max clock is an OFFSET range (gmax 0, gmax_range -500 1000), which the engine read as "no clock knob". Now: proto-opencl/gpu-telemetry.c takes 620296b2's tool whole (a superset of the shipped one); src/ember.rs amd_knob turns the tune line and the card's stock clock under load into the knob (clock ladder stock down to stock + gmax_min, power ladder on the percent scale 100 + plimit range; absolute-MHz drivers pass through), amd_limits, amd_gmax_arg (the apply sends the offset), and "not available (<reason>)" with nothing set for no AMD device, a tune line that read an error, Linux (root under /sys, a later cut), or a stock clock not yet known; Plan::full takes a narrow range (the floor above the 45 percent rung) as the fine ladder alone in 100 MHz steps, so the 9070 XT runs 2870, 2770, 2670, 2570, 2470 under a 2,970 MHz stock, the stop rule at the knee or a faulted row, lock_result and the lock_* fields as on NVIDIA. ADLX manual tuning needs no elevation (PC 1, 5 October 2026, an unelevated job), so the no-prompt rule holds with no Power Helper verb; nothing of the engine runs elevated. engine.rs carries the whole tune line in TuneProbe.amd_tune and the card's amd_stock_mhz and amd_gmax_offset. Tests known-failed first: the_amd_knob_reports_not_available_with_its_reason_and_sets_nothing, the_9070_xt_gets_a_power_ladder_and_a_clock_ladder_from_its_stock_clock, the_9070_xt_ladder_locks_at_the_knee (a declared ladder in the card's shape, not a measurement). Owed: the kit's igneum-gpu-telemetry.exe rebuilt from this source (MSVC on a PC or build-1, the ADLX SDK at vendor/adlx beside the tree), then the first measured grid on PC 1 by job when the hash lane's queue is clear
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 08:42:15 +00:00
igneum-labs
1411411e00
ember tests: the efficient-point plan counts the knob's seven fine steps on the 5090 (1 + 6 + 7), the two features meeting on release-0.3.24
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 06:17:13 +00:00
igneum-labs
2caf39c1b0
Ember Tune: the core-clock knob (0.3.24, main's order of 7 October 2026): the clock ladder continues below 45 percent in 100 MHz steps to a 20 percent floor; the search stops at the knee (the first row more than the tolerance under the cap point's rate) or on a faulted row (a rejected or mismatched hash: the fingerprint check), the best MH per watt within tolerance is the point; lock_result and the card's lock_* fields for the UI; tests known-failed first on a fake helper
...
ember.rs: CLOCK_FLOOR_PCT 45 -> 20 (the PC 1 passes of 7 October: the 5090's best MH/W at 1,200 to 1,300 MHz, 39 to 42 percent of 3,090, under the old floor), CLOCK_FINE_STEP_MHZ 100, Plan.clock_fine, Plan::cap_row, Plan::clock_stop_reason ("rate fell 5.2 percent at 1200 MHz", "fingerprint mismatch at 2163 MHz, clocks reset", "the floor at 700 MHz"), the stop rule in Plan::next, LockResult + lock_result (lock_mhz/mhs/w/mhw, unlocked_mhs/w, lock_note; "no lever" without a clock maximum). state.rs: CardState lock_mhz, lock_mhs, lock_w, lock_mhw, unlocked_mhs, unlocked_w, lock_step, lock_steps, lock_at, lock_note. engine.rs: sweep_finish fills them (Baseline: "no lever" on Apple or without a maximum clock), the progress tick fills lock_step/lock_steps while a clock step runs. Tests: the ladder to the floor (2,781 .. 1,390, 1,300 .. 700), the knee at 1 and 1.5 percent on the measured 5090 rows (1,854 and 1,300 as the points), a Faulted clock row ends the search and the note says so, and the Run-level fake helper: a mismatch during 2,163's hold -> the row Faulted, no next step, the final Apply is the chosen 2,472 (the reset), Finished; the existing full-plan test updated to the stop rule. The 18 Ember tests green on box 2.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit c3edc63c1d )
2026-10-08 06:14:47 +00:00
igneum-labs
4b1c3ecf79
0.3.24: the Windows node-source pin moves to dfbd1e10 (the v5 floor cut from the named move minute 02:00 BST: DAA 39,600, epoch 11)
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 23:55:29 +00:00
igneum-labs
e73880c4c7
0.3.24: the Windows node-source pin moves to c9e385eb (the v5 floor re-cut to DAA 32,400, epoch 9; the 28,800 floor lost to the clock)
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 22:33:14 +00:00
igneum-labs
36f2ec00d3
Merge power-helper-24 f2b52b6e into release-0.3.24 (a deferred install takes the task's unattended form through the registered helper itself, no click; the S4U proof and reprobe playbooks)
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 22:08:49 +00:00
igneum-labs
f2b52b6ec4
0.3.24: a job's install takes the Power Helper's unattended form through the registered helper itself (PC 2, 7 October 2026: the deferred rule left every new right to "the next interactive start", which on a PC with nobody at the desk never comes, so an update by job could never take the S4U form without a click). rights::install, in the deferred branch: when every missing right is one the registered helper can take (HELPER_TAKEABLE = power-helper-task@unattended) it starts the task, waits for the heartbeat, writes "<seq> reregister" and waits 20 s for the helper's own "reregister ok" line (the helper re-registers from the running build's script, now S4U + Highest, elevated, no prompt), then records the right in the manifest; anything else stays deferred as before. Playbooks: pc2-s4u-proof.ps1 (unelevated: an S4U probe task started from the job's session, read by stamp file, LastTaskResult and LastRunTime, then unregistered; the real task read only) and pc1-helper-reprobe.ps1 (installed version, heartbeat first, one dev line, the log line within 15 s: answers or not). Test known-failed first: a_job_install_takes_the_task_form_through_the_registered_helper_and_defers_the_rest
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 22:06:10 +00:00
igneum-labs
7b7aaed2e5
0.3.24: the Windows node-source pin moves to 47b9b229 (the 0.3.24 node pin: the class v5 object by height on Devnet 3, the chain id at the v5 floor, the testnet re-cut at 18 decimals with the final message)
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 22:04:35 +00:00
igneum-labs
24c00cabee
Merge power-helper-24 4b7b38f8 into release-0.3.24 (the engine never runs an elevated helper of its own on Windows; the task registered S4U with the right power-helper-task@unattended)
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 22:02:08 +00:00
igneum-labs
4b7b38f835
0.3.24 Power Helper (main's two orders, 7 October 2026, PC 1): (1) the engine never runs an elevated helper of its own on Windows. The tune's legacy branch (helper.ps1 written into the sweep folder and run through the administrator prompt) and the cap's elevated step (register-power-task.ps1 plus ELEVATE through the window host) are deleted; helper_route decides Task, Unix or Unavailable, and a missing task is the one event "power control: helper not available (the Igneum Power Helper task is not registered, or its exe is gone): run the installer's rights step" with no script, no process and no prompt; the tune's task path waits for the heartbeat before its dev line. The Windows helper script in sweep.rs goes with the branch. (2) The task is registered to run whether or not a user is logged on (-LogonType S4U, RunLevel Highest, the user's own token, no stored password), so a start from a job's session or the engine's own tune is accepted; a new right id power-helper-task@unattended makes a 0.3.23 install take the form once at the update. (3) The helper logs "cmd.txt changed (N lines) but nothing to run: ..." when a changed file yields nothing (PC 1's 0.3.20 silence read in its own log). Tests known-failed first: the_engine_never_runs_an_elevated_helper_of_its_own_on_windows (the literals grepped gone, the route, event before return before any file), the_registration_is_per_user_highest_no_trigger_fixed_action (S4U, Interactive gone), the_unattended_task_form_is_one_new_right_for_a_0_3_23_install, a_two_line_rewrite_over_a_two_line_start_runs_and_a_silent_change_is_logged. Owed to the Windows gate: the S4U registration taken through the scheduler on a box and PC 2 by job (PC 2 is under stand-down tonight)
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 21:59:49 +00:00
igneum-labs
5a76f3e873
Merge power-helper-24 79ae802e into release-0.3.24 (the Power Helper logs its facts at start and its exit reason; the engine names a helper that is not running; the cap and remove lines written after the heartbeat)
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 21:53:15 +00:00
igneum-labs
2e189abd26
publish-public.sh: the public manifest leaves the signed interface entry out (the apps read it from the token manifest; the --public arm had refused every publish since interface 1.0.1 because the entry carried the token)
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 21:49:03 +00:00
igneum-labs
e558acc498
0.3.24: igneum-pow and the class v5 packs from the frozen class-v5 dba17a0a (rule 7: the node, the pool daemon and the app's CPU re-check pair against the pinned igneum-pow; the packs pin travels with the generator); the sub-version 3 packs unchanged
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 21:44:18 +00:00
igneum-labs
79ae802e12
Power Helper: a helper that dies says why, and the engine shows it (PC 1, 7 October 2026, 22:08 BST: six "helper started" lines, no command run after any, no exit line, the task reading Running with no process, the engine toggling nothing and saying nothing). The helper logs its facts after the start line (exe, version, pid, folder, whether cmd.txt is readable and how many lines) and writes every end to helper.exit as "<unix> <code> <reason>": quit, remove, idle, an unwritable folder (exit 2), and a panic caught by run_guarded (FAULT helper: panicked: <msg>, exit 101). ensure_running returns the helper's own exit reason from this start when the heartbeat does not come, else what no reason means (ended from outside or crashed before it ran; Event Viewer Application 1000, TaskScheduler/Operational 201/202), as "power control: helper not running (<reason>)"; the tune and cap paths show that line as an error event, never a silent toggle. Two ordering fixes of the same class as 6 October's (C): the cap path writes its command lines only after the heartbeat (it wrote them right after Start-ScheduledTask, which a fresh helper skips as present at start), and Power control off starts the helper and waits for its heartbeat BEFORE writing remove (a remove present at the start was skipped, so the task never unregistered itself). Tests known-failed first: a_helper_that_dies_at_start_leaves_its_reason_and_the_engine_names_it, remove_is_written_after_the_heartbeat_not_before_the_start
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 21:40:42 +00:00
igneum-labs
f8bdb812c7
Merge pool-finish-22 2ea2402e into release-0.3.24 (the pool daemon reconnects its node connections after a node restart; rejections by code in STATUS and /api/stats; dn3-split-read.mjs as the pool lane's)
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 21:39:35 +00:00
igneum-labs
fbb955faf8
Merge dash-24 f1d4b8bc into release-0.3.24 (the .screen cap 1280 px at a 1440p window, 1440 px at 4K; Settings in two columns at the wide cap)
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 21:37:45 +00:00
igneum-labs
8283781112
0.3.24: version strings first (rule 15; the six places), the tree after 0.3.23's cut: class v5 by height on Devnet 3, the chain id at the v5 floor, the dashboard width caps, the pool daemon's reconnect and counters
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 21:37:44 +00:00
igneum-labs
4c3413eb78
Merge install-close-23 db4cc51a into release-0.3.23 (the installer runs the payload's stop step with -Install, refuses a misnamed installer, clears a stale flag; packaging, tools/ci and docs only; the crate stays f041b465's)
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 21:34:45 +00:00
igneum-labs
db4cc51afb
Merge remote-tracking branch 'build/release-0.3.23' into install-close-23
2026-10-07 21:31:34 +00:00
igneum-labs
0b9f3cce5f
0.3.23: the installer runs ITS OWN stop step, with the install dir (PC 2, 0.3.23 take 1, 22:07 BST: PrepareToInstall preferred the installed 0.3.21 stop-igneum.ps1, which only asked the engine to quit; the window host lived on, Inno could not replace it, the host's restart ladder started the old engine 45 s later and every file stayed 0.3.21, while the crate's text tests passed). Igneum-Miner.iss: always ExtractTemporaryFile and run the payload's script with -Install "{app}" (and once more for an old admin dir), Log lines for the step and its exit (3 = a file stayed locked, CloseApplications is the fallback); InitializeSetup refuses an installer whose file name carries another version than it installs, and clears a stale install-running.flag with a line. stop-igneum.ps1: param Install (its own folder only the default, since the installer runs it from {tmp}), exit 3 when a file stays locked. tools/ci/installer-stop-check.sh (pre-push, self-test on tonight's shape, known-failed first on the tree): payload script, -Install, host by path before api/quit, unlock wait. Release rule 14 and the CI README row: an installer is tested by running it end to end on a Windows box over a running older app (installed versions, process set, first upload); a text test is a lint
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 21:31:34 +00:00
igneum-labs
2ea2402ef9
Pool daemon: every node connection reconnects by itself after the node restarts (connect_reconnecting: the gRPC client reconnect flag, off in GrpcClient::connect; 7 October 2026, the Devnet 3 sweep minute with daemons running on across their nodes restart); pool.md 10.5d row
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 21:17:57 +00:00
igneum-labs
1c9c7d7e56
docs/plans/pool.md 10.5c: the members exec roots read, AGREE with the hub at executed block 5512 (21:10:34Z, through the fleet tunnels); the hour condition reads complete
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 21:11:32 +00:00
igneum-labs
5a6dff73de
docs/plans/pool.md 10.5c and 10.5d: the members part of the hour from their logs (pool-b twenty minutes, no rejected line), the prepare stall and its two halves with the fork commit, the two rejected counters and what each counts
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 21:07:07 +00:00
igneum-labs
4249784968
Pool daemon: rejections by code in STATUS and /api/stats, the ledger's life and this run apart (7 October 2026, Devnet 3 pool-b: STATUS rejected=235,016 was the ledger's lifetime across the daemon's eras while the member had no rejected line in the hour; the two counters now say what they count)
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 21:04:25 +00:00
igneum-labs
c2270fd815
0.3.23: packaging/windows/host.sha256 takes PC 1's MSVC 0.3.23 window host 365d3210 (the kit at f041b465)
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 20:57:06 +00:00
igneum-labs
e5114f8863
docs/plans/pool.md 10.5c and 10.5d: the Devnet 3 hour's read (1,278 chain blocks, 99 pool blocks under two keys, the hub's roots, the members' roots pending the tunnels, the implied height 20,409 and the shipper's ruling), the tag collision and its rename, the pairing rule, the sweep
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 20:47:02 +00:00
igneum-labs
f1d4b8bce6
The dashboard's width cap scales with the window (dash-24, 7 October 2026, main's order after the screenshots showed gutters inside the app at its 1440p and 4K opening sizes): .screen stays 1080 px to 1699, 1280 px at a 1440p-class window from 1700, 1440 px at a 4K-class window from 2500; Settings gains a second column at the wide cap with its cards never past 640 px (the Interface card spans), the list pages read at the full cap; fold.test.mjs measures #screen-dashboard at 1920 by 1080 and 1920 by 1200 on build-2 (known-failed first: 1080 against 1280) and view.test.mjs checks the rules (known-failed first); prepared off release-0.3.23's f041b465 for release-0.3.24
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 20:38:51 +00:00
igneum-labs
ca78ebec4d
dn3-split-read: --tags names the two tags to look for (IGNH,IGNW by default; IGNS,IGNP for the Devnet 3 pair's hour on the earlier daemons)
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 20:36:20 +00:00
igneum-labs
f041b465e2
0.3.23: the three version places the bump missed (igneum-app.rc FILEVERSION, PRODUCTVERSION, FileVersion, ProductVersion; Info.plist; the installer's AppVersion); build.rs caught the .rc on the box cross
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 20:32:49 +00:00
igneum-labs
6f234587c3
0.3.23: version strings (the tree after 0.3.22's cut: the rights step at install, the unattended driver install, the check labels, the .next token read, per-monitor DPI, the network step, the installer closing the host; node pin 2720d8d2)
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 20:23:57 +00:00
igneum-labs
38c694d89b
Merge install-close-23 5d76448d into release-0.3.23 (main's order: an installer over a running app ends the window host first and waits for the unlock; the engine and host refuse a relaunch while an installer runs)
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 20:19:19 +00:00
igneum-labs
9da8e68559
Merge network-23 69e6f9e3 into release-0.3.23 (the first-run network step: the manifest's default_network, the testnet card present and refused until testnet_open; igneum-testnet-1 by --testnet --netsuffix=1 with the seeds as --addpeer; view.test.mjs as the union of the check-labels and network tests)
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 20:14:37 +00:00
igneum-labs
5d76448d3f
0.3.23: an install over the running app returns the new version (PC 2, 7 October 2026, 20:54 BST: a job's silent 0.3.22 install quit the engine through api/quit, the 0.3.21 window host's restart ladder started the old engine 10 s later, Inno could not replace the locked host and every file stayed 0.3.21). (1) The installer's stop step ends the window host FIRST by its path, then asks the engine to quit, then ends what is left by path, and waits up to 30 s for every exe to open for write, naming the one that stays locked; CloseApplicationsFilter and SetupMutex set. (2) The engine prints "EXIT update" when an installer or its own OTA stopped it and the host then ends itself instead of restarting; the installer writes install-running.flag beside app.url for its whole run and the update helper's every launch and the host's restart ladder hold while it is there (a marker older than 15 min is a dead installer, ignored with a FAULT line). Tests known-failed first: exit_line, relaunch_allowed with tonight's sequence, the stop step's order and unlock wait, the host's and the installer's text
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 20:14:08 +00:00
igneum-labs
b8ebcb2578
Open pool on the renamed coinbase tags IGNH and IGNW (the fork's pool-tags-node 7455b8d5): the read tool, the chain's tests, README, pool.md and spec 09 follow
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 19:48:24 +00:00
igneum-labs
66fb625cf8
dn3-split-read: the window by header time (--from-ms/--to-ms), the hour as the fleet lane names it
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 19:43:14 +00:00
igneum-labs
69e6f9e3c9
The network step (0.3.23, main's design with two corrections, 7 October 2026): a fourth first-run screen before the address step and a Settings card, two cards, Devnet 3 (igneum-devnet-3, chain id 4463; staging: the chain may reset, coins have no value) and igneum-testnet-1 (the public test chain: coins have no value, resets are announced); a fresh install selects the manifest's default_network (Devnet 3 until the go), the testnet card reads not yet open and is refused until the manifest's testnet_open names it open, a manifest naming the testnet default before the open is refused by the parser; an existing install keeps the network it runs and sees the step as the Settings card; nothing switches a running miner but the user's click and the confirm that names what resets (the node's data and the mining state; the key and the address stay); the choice lives in settings.network, read before the runtime so igneum-testnet-1 starts the node with --testnet --netsuffix=1 and the three seeds as --addpeer (no DNS seeders compiled; no override file on the testnet), taking effect at the next start; api/network, Cmd::Network, config::network_switch with its tests, manifest default_network_rules, the Rust round trips, two view tests known-failed first
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 19:36:38 +00:00
igneum-labs
43ce914600
proto-cuda packs from the 0.3.22 re-pin c79f6d96 beside its igneum-pow: the packs the recheck tests pin were the pre-amend export in the release-0.3.22 tree (program id 12071054473004869770 against the sub-version 3 generator's 1892128023569472608 on packs-ca3-v4/v4-devnet-epoch0); generator and packs travel as one tree
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 19:36:05 +00:00
igneum-labs
ce0bdeefef
Merge dpi-23 a7af1c75 into release-0.3.23 (per-monitor DPI awareness for the Windows host: the manifest, WM_DPICHANGED, the opening size in logical pixels)
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 19:34:08 +00:00
igneum-labs
8a1b79e41f
0.3.23: the Windows node-source pin moves to 2720d8d2 (the 0.3.23 node pin: the cache-rung digest fix and the three Devnet 3 heights)
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 19:31:03 +00:00
igneum-labs
e4447e8418
Merge ota-token-23 ba2d6c8b into release-0.3.23 (publish.mjs reads the dl token by the .next rule)
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 19:31:01 +00:00
igneum-labs
0f9ba80539
igneum-pow from the 0.3.22 re-pin c79f6d96 (class v4 sub-version 3, object byte 7, the tree Devnet 3's node 69d1b56e and the paired miner run): the pool daemon's share check draws the chain's program, not the release-0.3.22 repo tree's older generator (the Devnet 3 pair, 19:27Z: identical seeds, WRONG HASH on every share, the miner's pack at attempt 4)
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 19:29:03 +00:00
igneum-labs
a7af1c754f
Per-monitor DPI awareness for the Windows host (dpi-23, 7 October 2026, PC 2's 5120 by 2160 at 200 percent rendered stretched and blurry): host.manifest declares PerMonitorV2 (and true/pm), embedded by host.rc as RT_MANIFEST with the link at /MANIFEST:NO; SetProcessDpiAwarenessContext at start as the runtime path for a Windows that ignores the manifest, SetProcessDPIAware as the last fallback; WM_DPICHANGED takes the suggested rectangle so WebView2 re-renders at the new monitor's scale; the opening-size rule now runs in logical pixels (opening_size.h igneum_opening_size_scaled: the primary monitor's physical work area and its DPI from GetDpiForMonitor, looked up at run time, LOGPIXELSX as the fallback), so the 1440 by 900 and 1920 caps mean CSS pixels as on the Mac (PC 2 opens 1625 by 1016 logical, 3250 by 2032 physical, sharp); the remembered frame is logical on both hosts (the unaware host read virtualised coordinates), kept as it is, with a WindowUnits marker from here; six scaled cases in opening_size_test.c (the test could not compile before the function existed); tools/windows/dpi-check.ps1 is the read-only PC-job check (awareness, rectangle, monitor DPI, logical size; -Expect PerMonitorV2 fails on the 0.3.22 host, which reads Unaware); host.cpp touched
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 19:28:34 +00:00
igneum-labs
0769f828e0
Merge check-labels-23 331f023d into release-0.3.23 (Settings: Check for an update, Check for jobs; each handler's route asserted)
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 19:24:10 +00:00
igneum-labs
ba2d6c8bcb
ui-ota publish: the dl token follows packaged-config.sh's .next rule (IGNEUM_DL_TOKEN_FILE, else dl-token.next while a rotation runs, else dl-token), so a bundle staged during the rotation lands in the new folder and --verify reads the new URL; tokenFile and readToken exported, token.test.mjs on the gate, known-failed first on the direct read (7 October 2026, the dl token rotates with 0.3.22)
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 19:20:28 +00:00
igneum-labs
331f023d49
Settings: "Check for an update" and "Check for jobs" (7 October 2026, main's ruling after a press of the jobs button for the update check: the two sat as "Check" and "Check now"); the view test asserts each label and that each handler posts its own route (api/update/check, api/jobs/check), known-failed first on the old labels; for the 0.3.23 tree
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 19:19:39 +00:00
igneum-labs
70b7c555f6
Merge driver-hold-22 60a30738 into release-0.3.23 (the unattended driver install through the Power Helper task; the driver-install-task right)
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 19:15:45 +00:00
igneum-labs
2df643a078
Merge boot-start-22 cd9ceca4 into release-0.3.23 (the rights step at install, deferred in a job or session-less install; the WebView2 right webview2-runtime@109.0.1518.78)
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 19:15:45 +00:00
igneum-labs
de8be6e038
Driver check plan: the driver-install-task right taken into rights::RIGHTS on boot-start-22 332b82eb; the merge point and the prompt rule recorded
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 19:12:57 +00:00
igneum-labs
cd9ceca499
Rights step: asks only in an interactive session that is not a job's (SESSIONNAME set, no IGNEUM_JOB_* in the environment), else "rights: deferred" and the next interactive start asks once (the project lead, 7 October 2026: no PC job may need a click); the WebView2 runtime as the right webview2-runtime@<min> with the host loader's minimum in app/windows/version.h (IGNEUM_WEBVIEW2_MIN 109.0.1518.78, read at build time), the elevated step reading the Edge WebView2 client key (HKLM WOW6432Node and HKCU) and running the bundled evergreen bootstrapper silently when absent or below it (make-payload.sh carries the bootstrapper only when it matches packaging/windows/webview2.sha256); the driver lane's right driver-install-task in the list; tests known-failed first (a job's install defers, a session-less one defers, the person at the PC asks once; absent or older runtime installs, equal or newer does not, a raised minimum is exactly one new right)
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 19:09:55 +00:00
igneum-labs
406a7fe1d8
pool/tools/dn3-split-read.mjs from pool-finish-22 c15b39b0 (the Devnet 3 read for the split's activation; the merge did not apply, the one file taken as is)
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 19:05:54 +00:00