Add blankpad-host auto-learn skills and memory store

Tracked the harness artifacts accumulated on blankpad (blank@), matching
the existing convention for the --home-dank-* memory stores and the 36
already-tracked managed-skills.

managed-skills (9): authentik-proxy-provider-app-link,
dankclaw-guard-chain-layer-diagnosis, e2e-arr-rawip-reachability-triage,
halogen-kv-pool-fit, lan-client-split-dns-fix, noctalia-reference,
rootless-quadlet-log-retrieval, ssh-key-bootstrap-no-sshpass,
swapfile-resize-safe-ordering.

memories (2 stores): --home-blank-.omp-- (dotfiles_git, handy_lifecycle,
input_permissions) and --home-blank-Projects-serverAppConfig--
(frank_large_quadlet).

Secret sweep before staging: no PEM blocks, no credential literals.
Content is fleet topology/IPs only, same class as the tracked dank stores.
This commit is contained in:
Frank committed 2026-09-13 00:25:29 -07:00
1 parent b60e95158c
commit 4b82f35354
37 files changed
+669

No files matched your search

@@ -0,0 +1,35 @@
# Consolidated Memory
## OMP Harness & Server App Config
- **Location**: `~/.omp` (config/dotfiles), `~/Projects/serverAppConfig` (cloned).
- **Repository Details**: Remote repo `serverAppConfigs` (plural), local dir `serverAppConfig` (singular). Head `701ab14` on `main` (tracks `origin/main`). HTTP transport with embedded dank token, no SSH keys.
- **Structure** (308 files, 4.2 MB):
- `dankclaw/`: Dankclaw stack definitions.
- `dankserver/`: Inference backend config.
- `frankbook-pro/`: 7 quadlet units (sonarr, radarr, lidarr, readarr, prowlarr, qbittorrent, gluetun).
- `shared/`: Homepage (html/css/js + services.json), alloy, loki, prometheus, searxng.
- `tests/`: 47 files, E2E suite.
- `serverAppConfigs-docs/`: 115 files, Architecture KB (deployment flow, network/storage/testing policy, container netns, Dankclaw service pages).
- `old/`, `report/`, `scripts/`, `.githooks/`, `AGENTS.md`: Legacy, reports, tooling, hooks.
- **Recent Commits**: Observability quadlet cutover (loki/alloy/comfyui images, grafana OAuth secret per-service env seeding, docs commit recording exposure posture + unconfigured state).
## Dotfiles & Git Workflow
- **State Inspection**: `git status --short | git branch --show-current | git log --oneline HEAD..@{u}`. Untracked dirs: `.pre-pull-backup/`, `home/`.
- **Modified Configs**: `alacritty.toml`, `config.ghostty`, `noctalia.css` (gtk3/4), niri `.kdl` files. Shift to noctalia theme.
- **Ghostty Fix**: Replace `font-hinting = hinting` with `freetype-load-flags = hinting,light` (line 10).
- **Commit/Push Pattern**: `git add <file> && git commit -m "<msg>" && git push`. Mitigate LFS lock warnings via `git config lfs.http://<repo>/info/lfs.locksverify true`.
- **Process Reload**: Ghostty reload via USR1: `pgrep ghostty | while read pid; do /usr/bin/kill -USR1 "$pid"; done`.
## Handy Application Lifecycle
- **Binary**: `/usr/bin/handy`.
- **Kill**: `pkill -f handy`.
- **Start**: `hub op=start, application=/usr/bin/handy, pty=true, persist=true, ready={log:'.*', timeout:10}`.
- **Status**: Persistent daemon running. 69 catalog models seeded.
## Device & Input Permissions
- **Issue**: `Platform error: permission denied opening 16 device node(s) under /dev/input` causing keyboard listener failure.
- **Diagnosis**: `/dev/input/*` owned by `root:input` with `crw-rw----` (660). User `blank` was missing the `input` group.
- **Resolution**: `sudo usermod -aG input blank`.
- **Pitfalls**:
1. `usermod` without `sudo` fails to lock `/etc/passwd`.
2. `sudo` password entry in CLI environment requires PTY for reliable input.
@@ -0,0 +1,4 @@
- Frank's Gitea lives on Dankclaw at http://192.168.0.143:3000, single org/user dank. Repo inventory (verified 2026-09-12 via /api/v1/user/repos): agent (default master), command-center (main — this is the ~/.omp dotfiles/KB repo), frank-llm-bench (main), serverAppConfigs (main), vllmScripts (main). LESSON — never clone from a repo name Frank states verbally; resolve the exact full_name via the Gitea API first. He said "serverAppConfig"; the real repo is serverAppConfigs (plural). Cloning the guessed name would 404 with no useful signal. Working procedure: read the dank HTTP token from the existing origin URL in ~/.omp (git remote -v) — do NOT copy that token into memory, docs, or skills; reference its location only. Then GET /api/v1/user/repos and match on the real name/case/plurality before cloning. Local-vs-remote naming: the clone was placed at ~/Projects/serverAppConfig (singular, as Frank explicitly requested) while origin points at the plural repo. The path mismatch is intentional, not drift — pull/push work normally. Repo layout: dankclaw/, dankserver/, frankbook-pro/ (7 quadlet units: sonarr, radarr, lidarr, readarr, prowlarr, qbittorrent, gluetun), shared/ (homepage, alloy, loki, prometheus, searxng), tests/ (47-file E2E suite), serverAppConfigs-docs/ (115-file KB — read its index.md before touching the stack). _(context: Frank asked to "pull my serverAppConfig repository into ~/Projects/serverAppConfig"; Gitea API revealed the plural name. Credential handling: token reused from existing ~/.omp remote, deliberately not persisted here.)_
- Ghostty 1.3.1 (and the 1.3.x line) has NO font-hinting and NO font-subpixel-render config key. The only font-smoothing key is freetype-load-flags, a comma-separated list: hinting, force-autohint, monochrome, autohint, light (each default-enabled except monochrome/force-autohint; prefix no- to disable). Ground truth: /usr/share/ghostty/doc/ghostty.5.md:598-628. To actually DISABLE anti-aliasing you need freetype-load-flags = hinting,monochrome (docs line 617: monochrome = 1-bit rendering, disables AA). Note hinting,light is a NO-OP — both are already Ghostty defaults. Verification workflow before editing any ghostty key: ghostty +validate-config (exit 0 = valid) plus grep the manpage for the key name; an unknown key silently does nothing useful and +validate-config is the authoritative gate. This matters because a poisoned memory claim about font-subpixel-render/font-hinting caused 3 wasted commits (4c84f02, df33310, 268dcbd) editing a nonexistent key on 2026-09-11. _(context: Verified 2026-09-12 against ghostty 1.3.1-arch2.2 manpage and ghostty +validate-config on Dankware. Corrects contradictory entries in agent/memories/--home-blank-.omp--/learned.md (line 2 asserts font-subpixel-render is the key; it is not).)_
- Ghostty's font antialiasing is controlled by font-hinting = no-hinting in the config file, not font-subpixel-render = off as the Noctalia reference skill states. When editing ghostty config, check /usr/share/ghostty/doc/ghostty.5.md or src/config/Config.zig — ghostty's --help confirms this. Invalid field causes font-subpixel-render: unknown field on restart. _(context: Discovered when user reported "font-subpixel-render: unknown field" after my initial edit to ghostty config)_
- Noctalia is a Niri-based desktop environment at /usr/bin/noctalia. Config: ~/.config/noctalia/config.toml. Provides IPC via 'noctalia msg', launcher, lock screen, session menu, and 19 app templates (GTK, Ghostty, Alacritty, Hyprland, Sway, WezTerm, Helix, Btop, Starship, Qt, KDE, Cava, scroll, mango, umbriel, foot, emacs, kitty, alacritty). Templates under /usr/share/noctalia/assets/templates/. Color palette generator: 'noctalia theme [image]'. Text antialiasing: Ghostty uses 'font-subpixel-render' config key (set to 'off' to disable). Alacritty uses 'font.antialias = false' in alacritty.toml.
@@ -0,0 +1 @@
Current state: OMP harness at ~/.omp, serverAppConfig cloned to ~/Projects (HTTP/dank token, head 701ab14). Git workflow relies on state inspection, USR1 ghostty reloads, and LFS lock mitigation. Handy runs as persistent hub daemon (69 models). Input permissions fixed for user 'blank' (root:input group, 660 perms). Dotfiles shifted to noctalia theme with Ghostty font-hinting adjustment. Reference consolidated details for repo structure, commit patterns, and CLI sudo/PTY pitfalls.
@@ -0,0 +1,33 @@
# Raw Memories
## 01a09618-6a77-71d5-a5b2-36e82045b695
updated_at: 1789227719
OMP harness config/dotfiles repo located at ~/.omp.
Cloned serverAppConfig to ~/Projects/serverAppConfig (HEAD 701ab14, main tracks origin/main, HTTP transport with embedded dank token, no SSH keys).
Local dir is singular (serverAppConfig), remote repo is plural (serverAppConfigs).
Structure (308 files, 4.2 MB):
- dankclaw/: Dankclaw stack defs.
- dankserver/: Inference backend config.
- frankbook-pro/: 7 quadlet units (sonarr, radarr, lidarr, readarr, prowlarr, qbittorrent, gluetun).
- shared/: Homepage (html/css/js + services.json), alloy, loki, prometheus, searxng.
- tests/: 47 files, E2E suite.
- serverAppConfigs-docs/: 115 files, Architecture KB (deployment flow, network/storage/ testing policy, container netns, Dankclaw service pages).
- old/, report/, scripts/, .githooks/, AGENTS.md: legacy, reports, tooling, hooks.
Recent commits: observability quadlet cutover (loki/alloy/comfyui images, grafana OAuth secret per-service env seeding, docs commit recording exposure posture + unconfigured state).
Pitfall: Local dir name mismatch vs remote repo name (trivial, pull/push unaffected).
## 01a08f58-4d8f-7356-8bcc-63a767971a5a
updated_at: 1789224571
[GIT_WORKFLOW] State check: git status --short | git branch --show-current | git log --oneline HEAD..@{u}. Branch: main. Untracked dirs: .pre-pull-backup/, home/.
[DOTFILES_STATE] Modified: alacritty.toml, config.ghostty, noctalia.css (gtk3/4), niri .kdl files. Shift to noctalia theme.
[GHOSTTY_FIX] Config edit: replace font-hinting = hinting with freetype-load-flags = hinting,light (line 10).
[COMMIT_PUSH] Pattern: git add <file> && git commit -m "<msg>" && git push. Remote LFS lock warning present; mitigate via git config lfs.http://<repo>/info/lfs.locksverify true.
[RELOAD] Ghostty reload via USR1: pgrep ghostty | while read pid; do /usr/bin/kill -USR1 "$pid"; done.
## 01a08f59-61c3-7103-bd4f-18ea24369233
updated_at: 1789111781
Target: handy app. Binary: /usr/bin/handy. Kill: pkill -f handy. Start: hub op=start, application=/usr/bin/handy, pty=true, persist=true, ready={log:'.*', timeout:10}. Result: Persistent daemon, 69 catalog models seeded.
## 01a08f50-c405-7763-8a24-b52be5af422f
updated_at: 1789110966
Error: 'Platform error: permission denied opening 16 device node(s) under /dev/input' causing handy keyboard listener failure. Diagnosis: ls -la /dev/input confirms devices are root:input with crw-rw---- (660). groups shows user 'blank' missing 'input'. Resolution: sudo usermod -aG input blank. Pitfalls: 1. usermod without sudo fails to lock /etc/passwd; 2. sudo password entry in this CLI environment requires PTY for reliable input.
@@ -0,0 +1,4 @@
thread_id: 01a08f50-c405-7763-8a24-b52be5af422f
updated_at: 1789110966
Fix 'permission denied opening device node(s)' in /dev/input by adding user to the 'input' group. Root cause: /dev/input/* devices are owned by root:input (660 permissions); user was missing 'input' group. Resolution: sudo usermod -aG input $USER. Note: sudo password handling in CLI requires PTY, and usermod needs sudo to lock /etc/passwd.
@@ -0,0 +1,4 @@
thread_id: 01a08f58-4d8f-7356-8bcc-63a767971a5a
updated_at: 1789224571
Durable git workflow for dotfile repositories: state inspection (short status, unpushed check), targeted config edits (Ghostty font-hinting fix), commit/push with LFS lock awareness, and USR1 process reloads.
@@ -0,0 +1,4 @@
thread_id: 01a08f59-61c3-7103-bd4f-18ea24369233
updated_at: 1789111781
Restart 'handy' application (/usr/bin/handy). Kill via pkill -f handy, start via hub daemon (pty:true, persist:true, ready timeout 10s). Status: Up, 69 catalog models seeded.
@@ -0,0 +1,4 @@
thread_id: 01a09618-6a77-71d5-a5b2-36e82045b695
updated_at: 1789227719
OMP harness lives at ~/.omp. Cloned serverAppConfig to ~/Projects/serverAppConfig (remote serverAppConfigs, HTTP/dank token transport). 308 files across dankclaw/, dankserver/, frankbook-pro/ (7 quadlets), shared/, tests/ (47 E2E), serverAppConfigs-docs/ (115). Recent work: observability quadlet cutover (loki/alloy/comfyui, grafana OAuth env seeding).
@@ -0,0 +1 @@
Workflow for managing dotfiles and serverAppConfig repos. Includes state inspection, targeted config edits, commit/push with LFS awareness, and USR1 process reloads.
@@ -0,0 +1 @@
Fix Ghostty font rendering by replacing 'font-hinting = hinting' with 'freetype-load-flags = hinting,light' at line 10 of config.ghostty.
@@ -0,0 +1,4 @@
#!/bin/bash
# Checks git status, branch, and unpushed logs
# Outputs short status, current branch, and HEAD vs upstream diff
git status --short | git branch --show-current | git log --oneline HEAD..@{u}
@@ -0,0 +1,3 @@
#!/bin/bash
# Sends USR1 signal to reload Ghostty config
grep ghostty | while read pid; do /usr/bin/kill -USR1 "$pid"; done
@@ -0,0 +1,4 @@
#!/bin/bash
# Standard commit/push pattern with LFS lock mitigation
LFS_VERIFY=true git config lfs.http://$(git remote get-url origin)/info/lfs.locksverify true
git add "$1" && git commit -m "$2" && git push
@@ -0,0 +1 @@
Manage the handy application daemon. Covers binary paths, pkill termination, hub startup with persistent/PTY settings, and readiness timeout.
@@ -0,0 +1 @@
Status: Up. Catalog models seeded: 69. Persistent daemon. Ready timeout: 10s.
@@ -0,0 +1,3 @@
#!/bin/bash
# Gracefully terminates handy process
pkill -f handy
@@ -0,0 +1,3 @@
#!/bin/bash
# Starts handy via hub with PTY and persistence
hub op=start, application=/usr/bin/handy, pty=true, persist=true, ready={log:'.*', timeout:10}
@@ -0,0 +1 @@
Resolve /dev/input permission denied errors. Targets root:input group assignment (660 permissions), sudo/PTY requirements, and /etc/passwd locking.
@@ -0,0 +1,2 @@
1. usermod without sudo fails to lock /etc/passwd.
2. sudo password entry in CLI requires PTY for reliable input.
@@ -0,0 +1,3 @@
#!/bin/bash
# Adds user to input group, requires sudo to lock /etc/passwd and PTY for CLI password
sudo usermod -aG input $USER
@@ -0,0 +1,3 @@
Diagnose /dev/input/* nodes: ls -la /dev/input
Check groups: groups $USER
Expected: root:input with crw-rw---- (660)