chore(memory): snapshot auto-learned memory and renamed workstation skills

--home-blank-.omp--: MEMORY.md +140 / learned.md / memory_summary.md /
raw_memories.md +1002 rewritten by auto-learn after the model rename,
frank-medium split-balance and bottleneck studies. Skills renamed to
single-topic buckets: dotfile-git-workflow -> ghostty-text-aa +
niri-display-rotation + noctalia-theme, handy-service-mgmt ->
handy-flm-inference, inference-runtime -> llama-cpp-parallelism.

--home-blank-Projects-serverAppConfig--: 38 new rollout summaries,
raw_memories.md/MEMORY.md refreshed, skills re-bucketed (bench-protocol,
llm-fleet-model-swap, rootless-quadlet-log-retrieval, orchestration-quadlet).

Per-worktree bucket (wt-20261006-122204) is now gitignored, not committed.
This commit is contained in:
Frank committed 2026-10-09 13:17:53 -07:00
1 parent a34322aeb0
commit 5b08896e4e
72 files changed
+1461 -175

No files matched your search

@@ -1 +0,0 @@
Standardized workflow for dotfile configuration management, Git state verification, LFS-aware pushing, and application reloading.
@@ -1 +0,0 @@
Updated niri layouts to match noctalia palette and IPC commands.
@@ -1 +0,0 @@
git add $1 && git commit -m "$2" && git push
@@ -1 +0,0 @@
pgrep ghostty | while read pid; do /usr/bin/kill -USR1 "$pid"; done
@@ -1 +0,0 @@
freetype-load-flags = hinting,light
@@ -1 +0,0 @@
:root { --accent: #b267e4; }
@@ -0,0 +1,13 @@
# Ghostty Text AA Fix
Ghostty font AA is controlled by `freetype-load-flags`, NOT `font-hinting`.
## Fix
- Replace `font-hinting = hinting` with `freetype-load-flags = hinting,light` in `~/.config/ghostty/config`.
## Reload
- Send USR1 to all ghostty processes: `pgrep ghostty | while read pid; do kill -USR1 "$pid"; done`
## Related
- Alacritty text AA: `font.antialias=false` in its config.
- Noctalia crispness: niri compositor AA only affects corner rounding (`niri_rounding_alpha()`); text AA is client-side. No nearest-neighbor resample knob in this build.
@@ -0,0 +1,17 @@
# Handy + FLM NPU Inference
## Handy app
- Binary: `/usr/bin/handy`
- Start: `hub op=start` with `application=/usr/bin/handy`, `pty=true`, `persist=true`, `ready={log:'.*', timeout:10}`
- Result: persistent daemon, 69 catalog models seeded
- Restart: `pkill -f handy`, then re-run hub op=start
## FLM NPU (Dankclaw)
- gemma4-it:e4b on port 7771
- Accepts PNG/JPEG; rejects WebP (convert first with ImageMagick `convert`)
- Requires `thinkingLevelMap` in models.json
- FIFO queue; ~7-11s model switch
- Pitfall: missing `.xclbin` symlinks under `~/.config/flm/xclbins/` cause failures
## Related
- Dotfile repo: `~/.omp` (Gitea `dank/command-center`, 192.168.0.143:3000)
@@ -1 +0,0 @@
Lifecycle and dependency management for the handy daemon, covering hub deployment, model seeding, and /dev/input permission fixes.
@@ -1 +0,0 @@
Resolved 'permission denied opening device node(s)' by adding user to 'input' group (660 perms). Sudo requires PTY.
@@ -1 +0,0 @@
sudo usermod -aG input blank
@@ -1 +0,0 @@
pkill -f handy; hub op=start, application=/usr/bin/handy, pty=true, persist=true, ready={log:'.*', timeout:10}
@@ -1 +0,0 @@
application: /usr/bin/handy\npty: true\npersist: true\nready: {log: '.*', timeout: 10}
@@ -1 +0,0 @@
Manages frank-large/small inference routing, FLM NPU constraints, and Halogen runtime kwargs for thinking block preservation.
@@ -1 +0,0 @@
Pinned sampler: temp=1.0, top_p=0.95, top_k=20. Live config read on next cycle.
@@ -1 +0,0 @@
ls -l ~/.config/flm/xclbins/ | grep -E '\.xclbin' || echo 'Missing symlinks'
@@ -1 +0,0 @@
curl -s localhost:7771/status | jq .queue
@@ -1 +0,0 @@
enable_thinking: true\npreserve_thinking: true\nreasoning_effort: medium
@@ -1 +0,0 @@
{"thinkingLevelMap": true, "gemma4-it": "e4b"}
@@ -0,0 +1,23 @@
# llama.cpp Multi-GPU Parallelism
## Split modes (--split-mode / -sm)
- **layer** (default): Pipeline parallelism. Each GPU holds a contiguous layer slice. Token flows sequentially through GPUs. Minimizes inter-GPU data movement; tolerates slow interconnects (PCIe fine). Best for prefill and fitting large models. Weakness: needs many tokens to keep pipeline full, poor low-batch latency.
- **tensor** (experimental): True tensor parallelism. Splits each layer's weights AND KV cache across all GPUs via 'meta device', doing cross-GPU all-reduce per layer (NCCL). Minimizes latency, parallelizes any workload size. Heavily bottlenecked by interconnect speed (wants NVLink + NCCL). Best for fast token generation.
- **row** (deprecated): Row-split dense weights only. Predecessor to tensor; comparatively poor performance.
- **none**: Single GPU, selected via --main-gpu.
## Key constraints on tensor mode
- Requires flash attention ON (-fa on)
- KV cache must be non-quantized: f32/f16/bf16 only
- NOT implemented for: MoE/hybrid, Mamba/SSM, and several other architectures (hard-fails with SPLIT_MODE_TENSOR not implemented)
- --fit is disabled; must size --ctx-size / --parallel manually
## Separate axis (NOT model parallelism)
- **--parallel / -np**: Number of concurrent server slots (each with own KV cache). Serving-level concurrency/batch parallelism. On single GPU this is the main throughput knob.
- **CPU+GPU offload** (--n-gpu-layers, --n-cpu-moe): Hybrid inference when model exceeds VRAM. Device-distribution strategy, not 'parallelism' in the strict sense.
## What does NOT exist in llama.cpp
- No first-class context/sequence parallelism mode (unlike vLLM/TensorRT-LLM). If that term is applied to llama.cpp, it's loose third-party language.
## Hardware context (this environment)
- Single RTX 4070 Max-Q (~12 GB VRAM). Multi-GPU split modes do not apply. Relevant knobs: --parallel for concurrency, CPU+GPU offloading for models >12 GB.
@@ -0,0 +1,26 @@
# Niri Display Rotation Workflow
Used to rotate/flip external monitors in portrait mode.
## Workflow
1. `niri msg outputs` — capture current transform, logical size, scale, position.
2. Read `~/.config/niri/cfg/display.kdl`.
3. Edit `transform` values.
4. `niri validate -c ~/.config/niri/cfg/display.kdl` — dry-run validation.
5. `niri msg action load-config-file` — hot-reload (no restart).
6. `niri msg outputs | grep -E '^Output|Transform|Logical|Scale'` — verify.
7. `git add && git commit && git push` in dotfiles repo (`~/.omp`).
## Critical pitfall
- In portrait, "flip 180°" = swap `90° counter-clockwise` ↔ `270° counter-clockwise`.
- Setting `transform "180"` on a portrait monitor kicks it to landscape-upside-down.
- Niri transform values are absolute, NOT modular arithmetic.
## Verified layout (blankpad, 83c9c92)
- DP-2: x=0, portrait 1200x1920, transform 90° CCW, scale 1
- HDMI-A-1: x=1200, portrait 1200x1920, transform 270° CCW, scale 1
- eDP-1: x=2400, 1536x864, scale 1.25
## Config split
- `~/.config/niri/cfg/*.kdl` (Noctalia-style includes).
- Display config lives in `~/.config/niri/cfg/display.kdl`.
@@ -0,0 +1,21 @@
# Noctalia Theme Editing
Noctalia is a Niri-based DE (`/usr/bin/noctalia`).
## Config locations
- Main config: `~/.config/noctalia/config.toml`
- Niri config: `~/.config/niri/cfg/noctalia.kdl`
- IPC: `noctalia msg <command>` (direct, not qs wrapper). Key cmds: panel-toggle, session, lock, launcher.
- App templates: `/usr/share/noctalia/assets/templates/` (gtk, ghostty, alacritty, wezterm, helix, btop, starship, qt, cava, scroll, mango, umbriel, foot, emacs, kitty, etc.)
- Palette generation: `noctalia theme [image]`
- GTK accent default: #b267e4
## Changing an accent (e.g. yellow → red)
1. Locate and edit the generated Noctalia palette/theme source BEFORE hardcoding per-app colors.
2. If Ghostty is set to `theme = noctalia`, direct terminal color overrides are less durable than updating the theme itself.
3. Terminal text color must match the chosen accent in BOTH the Noctalia palette and any terminal-specific override.
4. Hot-reload: `noctalia msg action load-config-file` (or equivalent config load action).
## Related
- Niri display config: `~/.config/niri/cfg/display.kdl`.
- Dotfile git workflow: `git add && git commit && git push` in `~/.omp`.