josie / alder-tools

rename: adler -> alder (Alder Lake spelling) across both tools

Case-sensitive rename of the tool names only; the CPU codename
'Alder Lake' (capital A) was already correct and untouched.

- Cargo.toml/lock name fields, config filenames, src/config.rs
  search paths, src/main.rs doc comment, powercap-pl-rules.sh
  udev rule paths, TUI title strings in alderbench/src/ui.rs
- All .md docs (README, architecture, design, mapfile, nextchat,
  project-memory, to-do)
- alderbench README cross-repo path ../adlermon -> ../aldermon
  (now a sibling dir within this repo)

Both crates build clean: cargo build in aldermon/ and alderbench/.

f24503a3caf6f35f5e69a06ef8ba4312c2acc98f
josie <josie@example.com> · 2026-09-03T20:22 · browse files at this commit

parents: 48871a5

diff --git a/alderbench/Cargo.lock b/alderbench/Cargo.lock
index 1d4239a..a2af345 100644
--- a/alderbench/Cargo.lock
+++ b/alderbench/Cargo.lock
@@ -3,7 +3,7 @@
 version = 4
 
 [[package]]
-name = "adlerbench"
+name = "alderbench"
 version = "0.1.0"
 dependencies = [
  "crossterm",
diff --git a/alderbench/Cargo.toml b/alderbench/Cargo.toml
index d3d131f..16e8b50 100644
--- a/alderbench/Cargo.toml
+++ b/alderbench/Cargo.toml
@@ -1,5 +1,5 @@
 [package]
-name = "adlerbench"
+name = "alderbench"
 version = "0.1.0"
 edition = "2021"
 
diff --git a/alderbench/README.md b/alderbench/README.md
index 50936c6..7b5e2c8 100644
--- a/alderbench/README.md
+++ b/alderbench/README.md
@@ -1,11 +1,11 @@
-# adlerbench
+# alderbench
 
-Sister app to [adlermon](../adlermon) for the same Alder Lake box
+Sister app to [aldermon](../aldermon) for the same Alder Lake box
 (i5-12600KF, ASRock Z690M ITX/ax). Runs **comparative benchmarks and CPU
 stress tests** across stock vs OC/UV configurations, with a live TUI and
 a JSON report file on exit.
 
-Standalone — no shared code with adlermon. Sensor conventions and the
+Standalone — no shared code with aldermon. Sensor conventions and the
 config parser shape are mirrored, not linked.
 
 ## Usage
@@ -32,8 +32,8 @@ pluggable via the `Workload` trait but not yet implemented — see
 
 ## Config
 
-`adlerbench.conf` is read from the working directory, then
-`~/.config/adlerbench/adlerbench.conf`. Simple `KEY = VALUE` lines; `#`
+`alderbench.conf` is read from the working directory, then
+`~/.config/alderbench/alderbench.conf`. Simple `KEY = VALUE` lines; `#`
 comments; unknown keys ignored. All values optional — defaults target the
 i5-12600KF / Z690M ITX box.
 
@@ -58,11 +58,11 @@ report.
 ## Package power (RAPL)
 
 `energy_uj` is root-only on this kernel. To read watts as a normal user,
-install adlermon's udev rule once (it covers both apps — same box, same
+install aldermon's udev rule once (it covers both apps — same box, same
 device):
 
 ```sh
-doas ../adlermon/powercap-pl-rules.sh
+doas ../aldermon/powercap-pl-rules.sh
 doas usermod -aG adm $USER   # then re-login
 ```
 
diff --git a/alderbench/adlerbench.conf b/alderbench/alderbench.conf
similarity index 91%
rename from alderbench/adlerbench.conf
rename to alderbench/alderbench.conf
index 4a07d04..bdb0580 100644
--- a/alderbench/adlerbench.conf
+++ b/alderbench/alderbench.conf
@@ -1,6 +1,6 @@
-# adlerbench.conf — sample (i5-12600KF / ASRock Z690M ITX/ax)
+# alderbench.conf — sample (i5-12600KF / ASRock Z690M ITX/ax)
 # Simple KEY = VALUE lines; # comments; unknown keys ignored.
-# Loaded from ./ then ~/.config/adlerbench/adlerbench.conf (first wins).
+# Loaded from ./ then ~/.config/alderbench/alderbench.conf (first wins).
 
 # Sensor sample period + cooldown between workloads.
 poll_ms     = 250
diff --git a/alderbench/src/config.rs b/alderbench/src/config.rs
index 2d9c2c1..19cb0a7 100644
--- a/alderbench/src/config.rs
+++ b/alderbench/src/config.rs
@@ -3,9 +3,9 @@
 //! Unknown keys are ignored (forward compatibility). Loaded once at
 //! startup.
 //!
-//! Mirrors adlermon's config.rs shape (same parser, same conf locations)
-//! but the key set is adlerbench's own — no rails (adlerbench doesn't
-//! display the board rail map; adlermon does), and the workload list is
+//! Mirrors aldermon's config.rs shape (same parser, same conf locations)
+//! but the key set is alderbench's own — no rails (alderbench doesn't
+//! display the board rail map; aldermon does), and the workload list is
 //! first-class.
 
 use std::path::PathBuf;
@@ -84,7 +84,7 @@ fn spec(name: &str, duration_secs: u64, cores: &str) -> WorkloadSpec {
 }
 
 /// Parse one config line over a Config (mutates in place). Shape matches
-/// adlermon's apply_line: strip `#` comments, trim, split on `=`, match
+/// aldermon's apply_line: strip `#` comments, trim, split on `=`, match
 /// the key. Unknown keys silently ignored.
 fn apply_line(cfg: &mut Config, line: &str) {
     let line = line.split('#').next().unwrap_or("").trim();
@@ -140,8 +140,8 @@ fn parse_workload_list(val: &str) -> Vec<WorkloadSpec> {
 pub fn load() -> Config {
     let mut cfg = Config::default();
     let candidates = [
-        Some(PathBuf::from("adlerbench.conf")),
-        dirs_home().map(|h| h.join(".config/adlerbench/adlerbench.conf")),
+        Some(PathBuf::from("alderbench.conf")),
+        dirs_home().map(|h| h.join(".config/alderbench/alderbench.conf")),
     ];
     let mut indexed: Vec<WorkloadSpec> = Vec::new();
     let mut saw_indexed = false;
diff --git a/alderbench/src/report.rs b/alderbench/src/report.rs
index 4b040ab..7926296 100644
--- a/alderbench/src/report.rs
+++ b/alderbench/src/report.rs
@@ -1,6 +1,6 @@
 //! JSON report writer. One file per workload run, under `report_dir`
 //! (`./runs/` by default). Schema v2: run metadata, workload verdict,
-//! and the perf score. No sensor fields — adlermon owns sensors; this
+//! and the perf score. No sensor fields — aldermon owns sensors; this
 //! report only records what the workload itself produced.
 //!
 //! Incremental flush: the whole file is rewritten on each call. A v2
diff --git a/alderbench/src/run.rs b/alderbench/src/run.rs
index ac426b3..838bba3 100644
--- a/alderbench/src/run.rs
+++ b/alderbench/src/run.rs
@@ -1,4 +1,4 @@
-//! Run orchestration — the new core (adlermon has no equivalent). Owns
+//! Run orchestration — the new core (aldermon has no equivalent). Owns
 //! the sweep lifecycle: for each workload in the config, cooldown →
 //! workload.start() → wait for exit (polling is_running) → workload.stop()
 //! if needed → workload.wait() for verdict → workload.score() for the
diff --git a/alderbench/src/ui.rs b/alderbench/src/ui.rs
index 3536b3b..0282987 100644
--- a/alderbench/src/ui.rs
+++ b/alderbench/src/ui.rs
@@ -5,7 +5,7 @@
 //!  - **Sweep**: consume `run::Run::tick()` every `poll_ms`, render the
 //!    current workload + progress + a results table. q/Esc quits.
 //!
-//! NO sensor meters — adlermon owns sensors. adlerbench records scores.
+//! NO sensor meters — aldermon owns sensors. alderbench records scores.
 
 use std::io;
 use std::time::Duration;
@@ -89,7 +89,7 @@ const PICKER_ROWS: &[(&str, &str)] = &[
 // ---------------------------------------------------------------------------
 
 /// Entry point. Owns raw mode via ratatui::init/restore (same pattern as
-/// adlermon). The mode loop: draw → poll events (poll_ms timeout) →
+/// aldermon). The mode loop: draw → poll events (poll_ms timeout) →
 /// dispatch by mode. q/Esc at the picker quits; during the sweep it
 /// cancels back to the picker (if the sweep was launched from there) or
 /// quits (if launched from --preset/--tui directly).
@@ -115,7 +115,7 @@ pub fn run_tui(cfg: Config) {
             // every tick — the render loop steals CPU from the workload,
             // which on single-core runs extends the wall time enough to
             // cause false Stopped verdicts. The user can see CPU load via
-            // adlermon. We only re-draw on state transitions (workload
+            // aldermon. We only re-draw on state transitions (workload
             // started / finished / sweep done) + during cooldown (when
             // the CPU is idle anyway).
             let should_draw = match &outcome {
@@ -569,7 +569,7 @@ fn draw_picker(f: &mut Frame, state: &PickerState) {
             Block::default()
                 .borders(Borders::ALL)
                 .border_style(Style::default().fg(Color::DarkGray))
-                .title(Span::styled(" adlerbench — choose a sweep ", Style::default().fg(Color::Cyan))),
+                .title(Span::styled(" alderbench — choose a sweep ", Style::default().fg(Color::Cyan))),
         );
     f.render_widget(list, area);
     // Footer with keybinds.
@@ -600,7 +600,7 @@ fn draw_editor(f: &mut Frame, state: &EditorState) {
     // Header.
     f.render_widget(
         Paragraph::new(Line::from(Span::styled(
-            "adlerbench — custom sweep editor",
+            "alderbench — custom sweep editor",
             Style::default().add_modifier(Modifier::BOLD),
         ))),
         chunks[0],
@@ -753,11 +753,11 @@ fn draw_header(f: &mut Frame, area: Rect, app: &App) {
         format!("loop {loop_idx}/{loop_total}")
     };
     let title = if app.run.is_done() {
-        format!("adlerbench — sweep complete: {} workloads", app.results.len())
+        format!("alderbench — sweep complete: {} workloads", app.results.len())
     } else if current == 0 {
-        format!("adlerbench — starting (0/{total})  {loop_str}")
+        format!("alderbench — starting (0/{total})  {loop_str}")
     } else {
-        format!("adlerbench — workload {current}/{total}  {loop_str}")
+        format!("alderbench — workload {current}/{total}  {loop_str}")
     };
     f.render_widget(
         Paragraph::new(Line::from(Span::styled(
@@ -837,7 +837,7 @@ fn draw_current(f: &mut Frame, area: Rect, app: &App) {
         // Running: the duration is a display-only estimate ("this will
         // probably take X seconds"). No progress bar — the workload runs
         // until it self-exits or the user quits. The user can see CPU
-        // load via adlermon.
+        // load via aldermon.
         [
             Line::from(vec![
                 Span::styled(format!("{:<20}", spec.name), Style::default().add_modifier(Modifier::BOLD)),
@@ -858,7 +858,7 @@ fn draw_current(f: &mut Frame, area: Rect, app: &App) {
                 ),
             ]),
             Line::from(Span::styled(
-                "running... (watch CPU load in adlermon, press q to cancel)",
+                "running... (watch CPU load in aldermon, press q to cancel)",
                 Style::default().fg(Color::DarkGray),
             )),
         ]
diff --git a/aldermon/Cargo.lock b/aldermon/Cargo.lock
index 6970958..da3716b 100644
--- a/aldermon/Cargo.lock
+++ b/aldermon/Cargo.lock
@@ -3,7 +3,7 @@
 version = 4
 
 [[package]]
-name = "adlermon"
+name = "aldermon"
 version = "0.1.0"
 dependencies = [
  "crossterm",
diff --git a/aldermon/Cargo.toml b/aldermon/Cargo.toml
index 558959f..2b9925a 100644
--- a/aldermon/Cargo.toml
+++ b/aldermon/Cargo.toml
@@ -1,5 +1,5 @@
 [package]
-name = "adlermon"
+name = "aldermon"
 version = "0.1.0"
 edition = "2021"
 
diff --git a/aldermon/README.md b/aldermon/README.md
index 8b1ed58..49699d0 100644
--- a/aldermon/README.md
+++ b/aldermon/README.md
@@ -1,4 +1,4 @@
-# adlermon
+# aldermon
 
 btop-style TUI monitor for Alder Lake (i5-12600KF), built around real vCore
 voltage for overclock-safety work.
@@ -19,8 +19,8 @@ sections, footer max frequency.
 
 ## Config
 
-`adlermon.conf` is read from the working directory, then
-`~/.config/adlermon/adlermon.conf`. Simple `KEY = VALUE` lines; `#`
+`aldermon.conf` is read from the working directory, then
+`~/.config/aldermon/aldermon.conf`. Simple `KEY = VALUE` lines; `#`
 comments; unknown keys are ignored. All values optional — built-in defaults
 target an ASRock Z690M ITX/ax (nct6798).
 
@@ -45,7 +45,7 @@ rail.in5.hide  = true        # hide unwired/floating inputs
 ```
 
 Rail labels for this board were confirmed against the BIOS and differential
-stress-ng probing (2026-08-29); see comments in `adlermon.conf`. The only
+stress-ng probing (2026-08-29); see comments in `aldermon.conf`. The only
 remaining guess is in4 = VCCIO.
 
 ## Package power (RAPL) — one-time setup
diff --git a/aldermon/adlermon.conf b/aldermon/aldermon.conf
similarity index 100%
rename from aldermon/adlermon.conf
rename to aldermon/aldermon.conf
diff --git a/aldermon/powercap-pl-rules.sh b/aldermon/powercap-pl-rules.sh
index 0c0d931..c852ef8 100755
--- a/aldermon/powercap-pl-rules.sh
+++ b/aldermon/powercap-pl-rules.sh
@@ -1,5 +1,5 @@
 #!/bin/sh
-# powercap-pl-rules.sh - one-shot installer for RAPL access (adlermon).
+# powercap-pl-rules.sh - one-shot installer for RAPL access (aldermon).
 #
 # RAPL energy_uj is 0400 root-only on this kernel, which gates the power
 # panel. This installs a udev rule + helper so any user in group `adm`
@@ -11,8 +11,8 @@
 
 set -eu
 
-HELPER=/usr/local/sbin/adlermon-powercap-chmod
-RULE=/etc/udev/rules.d/60-adlermon-powercap.rules
+HELPER=/usr/local/sbin/aldermon-powercap-chmod
+RULE=/etc/udev/rules.d/60-aldermon-powercap.rules
 
 # Helper: relax energy_uj to 0440, group adm, on every powercap dir.
 cat > "$HELPER" <<'EOF'
diff --git a/aldermon/src/config.rs b/aldermon/src/config.rs
index 81bcc62..30b47b9 100644
--- a/aldermon/src/config.rs
+++ b/aldermon/src/config.rs
@@ -179,10 +179,10 @@ fn set_rail(cfg: &mut Config, input: &str, label: &str, hide: Option<bool>) {
 
 pub fn load() -> Config {
     let mut cfg = Config::default();
-    // Search order: ./adlermon.conf then ~/.config/adlermon/adlermon.conf
+    // Search order: ./aldermon.conf then ~/.config/aldermon/aldermon.conf
     let candidates = [
-        Some(std::path::PathBuf::from("adlermon.conf")),
-        dirs_home().map(|h| h.join(".config/adlermon/adlermon.conf")),
+        Some(std::path::PathBuf::from("aldermon.conf")),
+        dirs_home().map(|h| h.join(".config/aldermon/aldermon.conf")),
     ];
     for path in candidates.into_iter().flatten() {
         if let Ok(text) = std::fs::read_to_string(&path) {
diff --git a/aldermon/src/main.rs b/aldermon/src/main.rs
index e0d9bac..7a8b439 100644
--- a/aldermon/src/main.rs
+++ b/aldermon/src/main.rs
@@ -1,4 +1,4 @@
-//! adlermon — Alder Lake monitor.
+//! aldermon — Alder Lake monitor.
 //!
 //! Currently a dump tool: prints a one-shot sensor snapshot to stdout. The
 //! TUI consumes the same `sensors` layer once the vCore source spike is done.