Operator decision at review: 15 min is aggressive for config churn; hourly
keeps the stale-window acceptable (<=1 h) with a fifth of the wakeups.
Timer unit, tier law, and failure-table wording aligned.
The checkout IS the deployment and symlinks make live state (memories,
auto-learned skills, agent config, desktop settings) dirty tracked files
continuously; no commit law covered machine churn, so it accumulated
unpushed for weeks — one disk held the only copy of ~61 managed skills,
a settings fix stayed local-only, and dirty trees refused merges.
scripts/live-sync.sh (systemd user timer, ~15 min) commits ONLY the
allowlisted machine/desktop-live tiers with hooks armed, merges
origin/main, pushes, and reaps wt/* worktrees older than 7 days. Task
dirt outside the allowlist is never staged; conflicts abort and alert
via ntfy; branch guard refuses off main; never --no-verify, never force.
Black-box contract pinned by tests/live-sync.bats (9 tests, suite 36/36).
Refs #11
Trunk-based SDLC gains the delivery habit: xdg-open the PR URL the moment
it's filed (mirrors dank/serverAppConfigs step 6, riding their PR #6).
Changelog entry added.
Single-dev repo: develop bought nothing and cost a back-merge every
release. New law: branch off freshest origin/main per work item, PRs
target main directly, --no-ff merges kept, tags vX.Y.Z straight on main.
No release branches, no back-merges. Changelog entry added.
Census against serverAppConfigs-docs + read-only ssh probes on both boxes
(2026-10-18). Corrections to OURS, flags only for THEIRS:
- Hardware drift: RTX 3090 moved dankserver->dankclaw 2026-09; dankserver
now 2x Radeon AI PRO R9700 (Ryzen 7 7700X stays), 246 GiB RAM, no swap;
dankclaw 121 GiB RAM + 64 GiB swap. Served: frank-archon radiance TP=2
(:7770 dankserver), frank-dragoon halogen NATIVE v2 (:7770 dankclaw
iGPU), frank-zealot llama.cpp PrismML Ternary-Bonsai-2-27B PQ2_0
(:7771 dankclaw, 3090). Kernel 7.0.0-38 both; dankclaw :7770 no auth.
- Gitea: gitea-caddy quadlet retired (fleet Caddy fronts the domain);
data tree moved to /home/dank/Containers/gitea/ (2026-09-01 standard),
/opt/gitea is a do-not-use leftover; LAN IP + live domain.
- pi-era pages (core/settings, pi/models + role tables) demarcated as
ARCHIVE with banners; llama-cpp fleet note modernized.
- AGENTS.md machine-facts table corrected (it still routed prod warnings
at frank-default-large).
Their-side staleness flagged in the changelog entry for the operator,
not edited: OMP Harness thresholdPercent 70 (live is 95), Ubuntu 24.04
OS table, 2026-09-03 stack mapping, superseded pi-KB backlink.
Refs #5
Full-source re-verification of pi/statusline.md against dist/cli.js plus a
live screenshot matrix. False and corrected: claude's top rule is NOT the
context meter (meter is box/band only; rule elsewhere is a session-accent
filler); 'Tern-only' composer-bar claim (real knob: composer.tokenRate);
segmentOptions gated to preset custom (they merge under every preset - only
the arrays are gated); mode segment yolo (states are Plan/Prewalk/Goal/
Vibe/Loop). Expanded: 7-preset defaults table, per-shape statusAttachment/
bottomBar model incl. plugin shape registry, contextLine per-value behavior,
27-segment catalog with triggers and options, segmentOptions schema, full
statusLine.*/composer.* knob registry. Changelog entry added.
Refs #5
Left group keeps the where-am-I identity (host, path, git, pr); the right
cluster carries what's-running (model) plus cost and elapsed time, painted
in array order. context_pct verified to hoist into the inline meter spacer
regardless of array position. Docs + changelog updated.
Band merges the segment groups into one row above the editor and paints
the labeled inline context meter (60% - 200K); the session title rides
the working row. Cumulative token totals live in /session - off the bar.
Docs and changelog updated to the band final state.
stripWorkPrefix true: worktree sessions show projectName/worktreeName with
the worktree glyph instead of the on-disk cwd; matches the live bar tuned
and screenshot-approved 2026-10-18.
Named presets silently ignore leftSegments/rightSegments - the nerd
preset's baked arrays were what we saw, and the configured arrays were
dead. preset: custom with explicit arrays: chip (right) = token_in,
token_out, cost, context_pct, time_spent; strip (left) = session_name,
vim, mode, hostname, model, path, git (branch text off - worktree
branches are autogenerated; dirty badges kept), pr. Cut tok/s duplicate,
clock, cache trio, context_total, subagents, session hash. Composer
shape stays claude after live box/band/rule trials. models.yml display
name frank-archon drops the (dankserver) suffix; id untouched.
Docs: pi/statusline.md records the preset-vs-custom trap, shape->segment
routing, and the context-meter truth.
Mod+R now cycles 1/4 <-> 1/2 only, matching the quarter-based
preset-window-heights; verified live (840px quarter / 1696px half on the
3440px panel). Mod+F still maximizes a column.
- set-column-width / set-window-height nudges 10% -> 5% (Mod+-/= and
Mod+Shift+-/=).
- New preset-window-heights { 1/4, 1/2 } in layout.kdl; Mod+Ctrl+Shift+R
no longer falls back to the width-preset ladder.
- Mod+Ctrl+Left/Right (and H/L) retargeted swap-window-* ->
consume-or-expel-window-*, matching Mod+brackets; swap-window now unbound.
Validated with niri validate; live via hot-reload.
Live census 2026-10-14: every flameshot mode on this box captures via
xdg-desktop-portal-gnome → niri's single-output API (niri#4313) — full
AND screen hang ~15 s and error docked (verified: exit 124, no file).
Replace all six flameshot binds with niri-native equivalents:
all-monitors script (Print/Ctrl+Shift+1/Mod+Shift+S), screenshot-screen
(Alt+Print/Ctrl+Shift+2), interactive screenshot UI (Ctrl+Print/
Ctrl+Shift+3). Absolute script paths everywhere: niri's spawn-sh PATH
is system-only, ~/.local/bin absent — the bare screenshot-desk.sh and
desk.sh binds were silently dead. bats 27/27.
flameshot full dies docked: its portal path hits niri's
screenshot_all_outputs ensure!(outputs.len()==1) (upstream niri#4313,
niri 26.04), so every Print press on the home desk produces error
bubbles. niri's built-in screenshot UI selects only one output, so add
scripts/screenshot-desk.sh: per-monitor focus + screenshot-screen with
explicit --path, focus restored, one PNG per monitor in
~/Pictures/Screenshots. Bind Mod+Shift+S (Frank's call); noctalia
settings moves to Mod+Shift+O. Restore screenshot-path (was null, now
root-level as config.screenshot_path requires) for UI saves. Live-
verified docked: valid 1920x1080 PNGs for eDP-1 + DP-2, focus restored;
bats 27/27 incl. niri validate on both desk profiles.
learned.md: noctalia v5 bar layering + hot-reload loop; secret-gate self-match convention (quoted literals redacted per the convention the line itself states); niri 26.04 event-stream has no hotplug event. New managed skills: git-repo-secret-audit, omp-system-prompt-retrieval.
Imports the Git Workflow / Testing law from dank/serverAppConfigs: pull+clean tree, atomic early commits, bats+secret gate as commit precondition, push on green, imperative messages with Refs #N.
Bar start = launcher, wallpaper, workspaces, taskbar; center keeps only the cat plugin widget. settings.toml is the GUI-override layer, symlinked from this repo.
live store wired 2026-10-09: provider custom -> frank-secondary @
192.168.0.143:7771, prompt default_improve_transcriptions,
post_process on, self-autostart off (niri owns it)
- desk.sh: list/current/switch/cycle/match/capture over cfg/desk-*.kdl
profiles; apply = relink display.kdl, niri validate (rollback on fail),
load-config-file, noctalia notification; match scores // requires: lines
(EDID long names) against live niri msg outputs
- desk-autoswitch.sh: watch niri msg --json event-stream for
OutputsChanged, debounced desk.sh match --apply, reconnect loop
- blankpad-desk-autoswitch.service: ConditionHost=blankpad user unit
- gen-keybinds.sh: keybinds.kdl -> markdown cheat sheet (sections from
// --- headers, hotkey-overlay-title preferred over action)
- tests/: 27 bats cases, all green (desk 16, gen-keybinds 6,
niri-config 5 incl. real niri validate on the assembled tree with
each desk profile active)