docs: purge the retired workstation from the knowledge base
Second half of the purge (the first covered the persona, AGENTS.md, README.md, and the distillation of the per-host pages). Every remaining identifier is gone: hostname, both LAN addresses, and the Wi-Fi SSID. 34 count-checked substitutions across 22 files — indexes, tool/research pages, the inventory census, the changelog, one generated HTML report, and five managed skills. Facts kept, names dropped: a history entry keeps its four-page listing as a nameless summary, the syslog excerpts keep every timestamp and line, and the census keeps the .zcompdump rows (the zsh version stamps are the useful part, the hostname was not). Deliberately unchanged: install.sh's --host case list and the packages/<hostname>.pkgs filename, where the hostname is the lookup key. Left out of scope by Frank's call: agent/memories/** — past-session records the learn pipeline rewrites. kb-lint: 0 violations. Residual grep for the hostname, its two IPs, and the SSID across omp-docs/ and agent/managed-skills/: no hits.
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
---
|
||||
name: freetoken-dankclaw-build
|
||||
description: "Build FreeToken on Dankclaw (Dankware) — installs CUDA toolkit, sets CUDA_HOME, handles nvcc/CUDA version mismatch"
|
||||
description: "Build FreeToken on Dankclaw — installs CUDA toolkit, sets CUDA_HOME, handles nvcc/CUDA version mismatch"
|
||||
---
|
||||
|
||||
## Build FreeToken on Dankclaw
|
||||
|
||||
@@ -29,6 +29,6 @@ Produce a self-contained HTML report of repo work in a time window and open it i
|
||||
- Literal `{}` in HTML text (e.g. `fallbackChains: {}`) inside an f-string is a SyntaxError — build that fragment by concatenation or double the braces.
|
||||
|
||||
## Delivery + verification
|
||||
- Write to `$HOME/Reports/<repo>-<window>-<date>.html` (outside repo, tree stays clean; create the dir — on Dankware that is /home/blank/Reports, on dank hosts /home/dank/Reports).
|
||||
- Write to `$HOME/Reports/<repo>-<window>-<date>.html` (outside repo, tree stays clean; create the dir — on a workstation account that is /home/blank/Reports, on dank hosts /home/dank/Reports).
|
||||
- Validate: python HTMLParser feed (parse errors) + open in headless browser (`write` JSON to xd://browser: open → run with `document.querySelectorAll` counts) → close tab. Element counts are sufficient proof; a fullPage screenshot of a long report returns a multi-MB raw pixel buffer dump — only screenshot short pages.
|
||||
- Open for Frank: `nohup firefox --new-tab file:///<path> >/dev/null 2>&1 & disown`.
|
||||
|
||||
@@ -6,7 +6,7 @@ description: "Edit live Noctalia v5 shell config on a fleet host over SSH: which
|
||||
# Noctalia config edit over SSH (v5 native, both fleet hosts)
|
||||
|
||||
## Current architecture (since 2026-09-10 unification)
|
||||
Both dankware and blankpad run the bare `noctalia` v5 binary as the desktop shell (launch: niri `spawn-at-startup "noctalia"`). The old Quickshell-hosted v4 architecture (`qs -c noctalia-shell`, JSON config) is retired on both hosts. Live config layer = TOML only:
|
||||
Both the workstation and blankpad run the bare `noctalia` v5 binary as the desktop shell (launch: niri `spawn-at-startup "noctalia"`). The old Quickshell-hosted v4 architecture (`qs -c noctalia-shell`, JSON config) is retired on both hosts. Live config layer = TOML only:
|
||||
- Hand-edit declarative layer: `~/.config/noctalia/<name>.toml` (e.g. `config.toml`).
|
||||
- Runtime state file `~/.local/state/noctalia/settings.toml` loads LAST and overrides declarative values for the same keys — never hand-edit it; UI/IPC writes land there.
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ description: "Runbook for password-auth SSH exec/file-ship to fleet hosts whose
|
||||
---
|
||||
|
||||
## When
|
||||
Running remote commands or shipping files over SSH to a host whose login shell is **fish** (blankpad: user `blank`, reachable only as mDNS FQDN `blankpad.local` / 192.168.0.83 — bare hostname does not resolve from Dankware).
|
||||
Running remote commands or shipping files over SSH to a host whose login shell is **fish** (blankpad: user `blank`, reachable only as mDNS FQDN `blankpad.local` / 192.168.0.83 — bare hostname does not resolve from the workstation).
|
||||
|
||||
## Procedure
|
||||
1. **Auth**: `SSHPASS='<pw>' sshpass -e ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no user@host '...'` — password via env, never argv (ps-visible).
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
---
|
||||
name: wol-wake-sleeping-fleet-host
|
||||
description: "Wake a sleeping fleet host (e.g. the FrankBook-Pro Mac mini) over the network with a Wake-on-LAN magic packet, and diagnose why it silently fails."
|
||||
---
|
||||
|
||||
Wake a sleeping fleet host over the network with a Wake-on-LAN (WoL) magic packet.
|
||||
|
||||
## When
|
||||
A fleet host is asleep (100% ping loss; `ip neigh show <ip>` shows STALE or FAILED) and you need it up — e.g. the Playwright e2e `11-admin` spec needs the Mac mini, or a service on it is down. Recurring on the FrankBook-Pro Mac mini, which sleeps and breaks the e2e suite.
|
||||
|
||||
## 1. Find the MAC (the host is asleep, so you can't ask it)
|
||||
- `ip neigh show <ip>` — even a **STALE** entry carries the MAC. Fastest source.
|
||||
- Fallback: Pi-hole / dnsmasq leases, the DHCP server, or fleet docs.
|
||||
- Known: **FrankBook-Pro Mac mini = 192.168.0.112, MAC `de:6b:6d:c1:52:23`.**
|
||||
|
||||
## 2. Send the magic packet
|
||||
- Format: `6×0xFF + 16×MAC` = 102 bytes, UDP to port **9** (and 7), broadcast.
|
||||
- **The workstation has TWO interfaces on 192.168.0.0/24:** a Wi-Fi link and a wired USB-Ethernet link (the default route, metric 100). A plain `sendto("255.255.255.255", 9)` leaves only the default-route interface. **Bind explicitly to each interface's local IP** and target the **subnet broadcast `192.168.0.255`** as well as `255.255.255.255`.
|
||||
- `wakeonlan` is not installed; use a raw UDP socket with `SO_BROADCAST=1`.
|
||||
- Send a burst (~15 packets per interface, ~0.2s apart).
|
||||
|
||||
## 3. Poll for the wake
|
||||
A Mac mini takes **30–90 s** to boot after a WoL wake. Poll `ping -c 1 -W 1 <ip>` every 5 s for ~2–3 min before concluding failure.
|
||||
|
||||
## 4. If it does NOT wake (the common case) — diagnose the setting
|
||||
macOS honors a WoL packet **only when BOTH are enabled on the mini**:
|
||||
- **System Settings → Battery → Options → "Wake for network access"** = ON, and
|
||||
- the active network port's **"Enable Wake for LAN"** (Network → [interface] → Details).
|
||||
|
||||
If either is off, **no packet from any source wakes it**, and you cannot change it while the host is asleep. A full power-off (smart plug cycled) also ignores WoL entirely. In that case: ask the user to toggle the setting (the durable fix so future wakes work), then re-fire the packet.
|
||||
|
||||
## Reference sender (raw socket, per-interface)
|
||||
```python
|
||||
import socket, time
|
||||
MAC = "de:6b:6d:c1:52:23"
|
||||
mac = bytes(int(x,16) for x in MAC.split(":"))
|
||||
pkt = b"\xff"*6 + mac*16 # 102 bytes
|
||||
for local, dest in [("192.168.0.83","192.168.0.255"),("192.168.0.104","192.168.0.255"),
|
||||
("192.168.0.83","255.255.255.255"),("192.168.0.104","255.255.255.255")]:
|
||||
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
|
||||
s.bind((local, 0))
|
||||
for _ in range(15):
|
||||
s.sendto(pkt,(dest,9)); s.sendto(pkt,(dest,7)); time.sleep(0.2)
|
||||
s.close()
|
||||
```
|
||||
Reference in New Issue
Block a user