vault-sync: 2026-10-02 07:10 (jimmy)

This commit is contained in:
jimmy
2026-10-02 07:10:57 -07:00
parent a9100905dd
commit 5f406ba6b9
89 changed files with 7374 additions and 745 deletions
@@ -0,0 +1,39 @@
# 2026-09-19 — Bonsai 2 fast build + MTP head on the 3060 (setup complete, verified)
## What was built
The sudoingX `bonsai2-small-gpu` recipe, end to end, on DESKTOP-81CBTV2:
- **Fork**: `bonsai2` branch of sudoingX/llama.cpp (= PrismML fork + kernel PR #218 + Hadamard fix #217, stacked). Built in **WSL2** (Ubuntu 26.04) with gcc-13 + CUDA 12.4, sm_86. Source `/opt/llama-prism-sudoingx`, binaries `build/bin/`.
- **Model**: `Ternary-Bonsai-2-27B-PTQ1_0.gguf` (5.95 GB, prism-ml HF repo) + Qwen 3.8 27B MTP head grafted on via the repo's byte-exact GGUF tools → `Ternary-Bonsai-2-27B-PTQ1_0-mtp.gguf` (7.0 GB) in `/opt/models/` (WSL ext4). Graft round-trip verified byte-exact (strip = original sha256).
- **Server**: WSL2 llama-server on `127.0.0.1:8899`, reachable from Windows via WSL2 localhost forwarding (bound `0.0.0.0`). MTP spec decode on, n-max 1, `GGML_CUDA_BATCH_INVARIANT=1`. Launchers `/opt/serve-bonsai-mtp.sh` / `/opt/serve-bonsai-off.sh`.
## Verified numbers (this machine, RTX 3060 12GB)
| metric | result | author's claim |
|---|---|---|
| llama-bench tg128 (fresh) | 39.34 tok/s | 40.47 |
| llama-bench pp512 (prefill) | 272.7 tok/s | ~268 |
| streaming, code | 53.4 tok/s | 53.2 |
| streaming, prose | 41.9 | 41.8 |
| streaming, bash | 48.8 | 50.1 |
| greedy identity (off vs on) | byte-identical, all 3 prompts | identical |
| test-backend-ops ptq1_0 MUL_MAT | all pass vs CPU ref | 47/47 |
Stock fork baseline was 26.3 tok/s → ~49 streaming overall. Lossless (outputs unchanged), not just fast.
## Why WSL2
Windows-native build is blocked on this PC: MSVC 14.44/14.51 (VS 18 Build Tools) hard-crashes CUDA 12.4's `cudafe++` (ACCESS_VIOLATION — too-new compiler), no admin rights to install CUDA 13.x or an older MSVC, no clang, and the pip `nvidia-cuda-nvcc-cu12` wheels ship only ptxas.exe on Windows (no nvcc). WSL2 has native GPU passthrough (nvidia-smi works) and CUDA 12.4 works with gcc-13. This matches the author's own tested toolchain.
## Config
`providers.bonsai2` + `model_aliases.bonsai2` → `http://127.0.0.1:8899/v1`, model `/opt/models/Ternary-Bonsai-2-27B-PTQ1_0-mtp.gguf`, ctx 131072. Backup `config.yaml.good-20260919221502`. **Gateway restart required** (`hermes --profile leonard gateway restart` from a separate shell) then `/new` + `/model bonsai2`.
## Pitfalls learned
- pkill -f is case-sensitive: `"bonsai"` doesn't match `Ternary-Bonsai` in the model path. Kill by PID.
- WSL2 servers must bind `--host 0.0.0.0`; 127.0.0.1 inside WSL is invisible from Windows.
- Keep the model in WSL ext4, not /mnt/c (9p slowness).
- Hermes venv python refuses `--user` installs and nesting venvs — use `uv venv`.
- One model at a time on the 3060 still applies (FreeToken ~1 GB co-resident is fine; the MTP server needs ~10.6 GB).
## Disk footprint
22.4 GB downloads (PTQ1_0 + Qwen donor), +7 GB merged model, +5.9 GB strip-check (cleanup candidate: `C:\models\bonsai2-mtp\strip-check.gguf`). Source/donor can stay for re-grafting.
## Cross-ref
Skills: `bonsai2-local-inference` (updated 2026-09-19 with canonical setup), `call-3060-inference`.
@@ -0,0 +1,27 @@
# 2026-09-20 — OpenCode model pool: verified, Go plan currently erroring
## Setup (verified live 2026-09-20 ~09:20 PDT)
- opencode 1.18.31 (npm global) + local project copy at `C:\Users\fight\Projects\browserclaw-project`
- Config: `C:\Users\fight\.config\opencode\opencode.jsonc` — exactly 34 models (8 `opencode/*` + 26 `opencode-go/*`), per Tony's brief
- Key: `OPENCODE_API_KEY` present in `~/.config/opencode/.env` (masked, not logged)
## Live test results
- PASS: `opencode/big-pickle`, `opencode/ling-3.0-flash-fin-free` (proprietary free tier)
- FAIL (HTTP 500 UnknownError "Unexpected server error" + ref): every Go-plan model tested — `glm-5.3`, `deepseek-v4-flash`, `grok-4.6`, `qwen3.8-flash` — via any prefix (`opencode-go/`, `opencode/`, bare)
## Facts
- `opencode-go/` prefix is stale for v1.18.31: `opencode-go/glm-5.3` → ProviderModelNotFoundError ("Did you mean: glm-5.3, glm-5.3-flash?"). Correct IDs resolve under `opencode/` or bare.
- Go-plan backend failures are server-side, not local: opencode.ai/zen/go/v1 has a history of intermittent outages (anomalyco/opencode issue #36889).
- Distinct error refs per request (e.g. err_a8828e9a) — new errors each attempt, not a cached config issue.
- Config prefix fix NOT applied — waiting on Tony's authorization.
## Resolution (approved by Tony 2026-09-20 09:23 PDT)
- Patched opencode.jsonc: all 26 `opencode-go/` → `opencode/`. Verified: 0 `opencode-go` remaining, 34 `opencode/` entries.
- Snapshot: `~/.config/opencode/opencode.jsonc.good-20260920-092315` (rollback point).
- Live re-test 09:24 PDT: `opencode/glm-5.3` resolves (no longer model-not-found) but still HTTP 500 UnknownError ref err_15953691 at 09:26 — Go backend flaky via CLI (direct API call with `x-opencode-session` header WORKS, 200, glm-5.3 responded). CLI Go failures are server-side (anomalyco/opencode #36889), not config.
## UNIVERSAL INSTALL (opencode Go in Hermes picker, all profiles — 2026-09-20 09:33 PDT)
- Hermes has native `opencode-go` plugin (plugins/model-providers/opencode-zen/__init__.py, needs OPENCODE_GO_API_KEY, base https://opencode.ai/zen/go/v1) but it does NOT add x-opencode-session header.
- Added pinned custom provider `oc-go` (26 Go models, discover_models: false, extra_headers.x-opencode-session per-profile UUID) + `opencode-go: enabled: false` to ALL FOUR profile configs: ashbot, coach, jimmy, leonard.
- Snapshots: each `config.yaml.good-ocgo-20260920-093345`. `hermes config check` passes all 4.
- KEY STEP (user-side, secret guard): copy OPENCODE_API_KEY from ~/.config/opencode/.env as OPENCODE_GO_API_KEY into each profile .env, then `hermes gateway restart --profile <p>` from a separate shell.
@@ -0,0 +1,58 @@
# 2026-09-24 — Bonsai 2 27B + MTP: verified end-to-end on the 3060
## Status
The Ternary Bonsai 2 / PrismML stack is **already built and serving** on this box. It was
built 2026-09-19 in WSL2 and re-verified 2026-09-24. Nothing needed downloading.
- Repo (fork, `bonsai2` branch = kernel PRs #218 + Hadamard #217): `/opt/llama-prism-sudoingx`
- Model: `/opt/models/Ternary-Bonsai-2-27B-PTQ1_0-mtp.gguf` (7,012,820,512 bytes, MTP head grafted)
- Launcher: `/opt/serve-bonsai-mtp.sh` — listens **:8899** (not 8080)
- Hermes wiring: `providers.bonsai2` + `model_aliases.bonsai2` -> `http://127.0.0.1:8899/v1`
## Measured 2026-09-24 (RTX 3060 12 GB, driver 610.74)
- Decode: **48.6 – 50.8 tok/s** across 4 runs (~50 tok/s as advertised)
- Prefill: **241 tok/s** cold; KV-cache-warm runs report low prefill because the prefix is cached
- VRAM: **11,166 MiB used / 950 free** at `-c 131072` — weights fully resident, no RAM spill
- `--jinja` tool calling: `finish_reason=tool_calls`, correct function name + JSON args
- Sanity: `17 * 23 = 391` correct
## The one real defect found and fixed: empty `content`
The template default reasoning effort is `xhigh`. At `temperature 1.0` reasoning length varies
wildly (observed 238 chars to 2,524 chars). When it ran long, reasoning consumed the entire
`max_tokens` budget and the response came back `finish_reason=length` with **empty `content`**.
Fix: added `--reasoning-effort medium` to `/opt/serve-bonsai-mtp.sh` (backup at
`/opt/serve-bonsai-mtp.sh.bak-20260924-181142`). After the change: 3/3 realistic ~2.3k-token
prompts returned content, reasoning down to 238–319 chars.
This failure mode looks like two other known Bonsai problems but is neither:
- NOT the `/new` context trap (context 131072 matches alias; `/health` 200)
- NOT the post-abort scheduler wedge (decode speed is normal, slots launch fine)
Diagnose it by comparing `reasoning_content` length against `usage.completion_tokens`.
Escalation ladder if `medium` still overruns: `--reasoning-budget N` (hard cap on thinking
tokens; injects a message before the end-of-thinking tag). Per-request overrides also work —
the fork honours both `reasoning_effort` and `chat_template_kwargs.reasoning_effort` in the
request body, so no restart is needed for a one-off.
## Correction to a common (wrong) playbook for this box
Advice circulating for this model recommends the "official PrismML installer" (`Bonsai-demo`,
PQ2_0, port 8080) as Path A. On THIS machine that path is superseded and weaker: the
`Bonsai-demo` PQ2_0 setup at :8080 is the older, slower variant (~26 tok/s baseline, and the
Vulkan build that ships with it is ~32x slower). The sudoingX PTQ1_0 + MTP build at :8899 is
the canonical one.
Also settled long ago and still true: **a Windows-native CUDA build of the fork is impossible
on this PC** — MSVC 14.44 (VS 18) hard-crashes CUDA 12.4 `cudafe++` (ACCESS_VIOLATION), there is
no admin for CUDA 13 / older MSVC, and the pip `nvidia-cuda-nvcc-cu12` wheels ship no `nvcc.exe`
on Windows (ptxas only). The build lives in WSL2 with `gcc-13` + CUDA 12.4 from apt.
## Gotchas re-confirmed
- WSL2 servers must bind `--host 0.0.0.0`; a 127.0.0.1 bind inside WSL is invisible from Windows.
- Keep the GGUF in WSL ext4 (`/opt/models/`), not `/mnt/c` — 9p/drvfs makes the 7 GB mmap crawl.
- `pkill -f llama-server` **kills your own shell** when the wrapper command line contains that
string (exit 15). Use the bracket trick: `pkill -f '[l]lama-server'`.
- `pkill -f bonsai` does NOT match the model path `Ternary-Bonsai-...` (case-sensitive).
- Switch to this model with `/new` **before** `/model bonsai2` — a grown session prefills
slowly at 3060 speeds and can time out mid-load.
@@ -0,0 +1,59 @@
# 2026-09-25 — OMH installed + phantom-tree delete incident
## Result: OMH installed and registered (verified)
- Installed via the **agent path** (not the PowerShell remote-installer, which is
command-gated on Telegram): `uv tool install git+https://github.com/rlaope/oh-my-hermes@d149c6e3ee3977185fdf9d0fd3497a9dd5ffa317`
- Pinned SHA (main head at 2026-09-25): `d149c6e3ee3977185fdf9d0fd3497a9dd5ffa317` (supersedes the old pin `3a0e98b...`).
- Version: **oh-my-hermes 2.0.5**. Command on PATH: `C:\Users\fight\.local\bin\omh.exe`.
- `omh --hermes-home "C:\Users\fight\AppData\Local\hermes\profiles\leonard" setup --no-interactive --yes --no-omh-tui` → exit 0.
- 130 OMH workflows at `C:\Users\fight\.omh\skills`
- `C:\Users\fight\AppData\Local\hermes\profiles\leonard\config.yaml` now has
`plugins.enabled: [omh]`, `skills.external_dirs: [C:/Users/fight/.omh/skills]`
- plugin bridge at `.../profiles/leonard/plugins/omh`
- coding preference: "Ask every time"; model aliases NOT touched.
- `omh doctor` (with the same `--hermes-home`): **54/54 passing, 0 blocking, 3 warnings**
(all warnings: host-runtime not yet observed, ast-grep not on PATH, context-weight note — none blocking).
- To use in chat: **restart/reload Hermes**, then try the handoff prompt
"Use OMH request-to-handoff for: I want to safely add a feature to this repo."
- Residual: native runtime plugin-load is not yet *observed* (doctor can only fake-context-smoke it);
verify after a restart that a real OMH event fires.
## Side-effect incident (own the risk)
1. First `setup` used an MSYS path `/c/Users/...` for the **native** `omh.exe`. It
mis-read that as literal `C:\c\Users\...` and wrote a **phantom** leonard home under
a phantom root `C:\c`. (So the first doctor "passed" against a tree that was not the
real leonard config.)
2. I then `rm -rf`'d `C:\c` to remove the phantom. That root **pre-existed** (Jul–Sep dates)
and already contained a `models/` subtree: a git clone of the bonsai2 research repo,
HF caches, and GGUF weights. I did not verify the subtree before deleting.
3. **Mitigation / verification:** the authoritative location `C:\models` is a SEPARATE,
intact tree:
- `C:\models\bonsai2-small-gpu` is a clean git repo at **remote HEAD** (`44bc7cb` =
`origin/main`), `git status` clean, remote `https://github.com/sudoingX/bonsai2-small-gpu`.
All research files present (`graft/serve_mtp.sh`, `kernel/PR_HADAMARD.md`,
`kernel/PR_KERNEL.md`, `graft/recipe.txt`, `kernel/patches`, `tests`, `tools`).
- All large weights still present: `gemma-4-12B` 6.3 G, `Qwen3.8-35B` 21 G,
`gemma4-coding` 1.2 G, `LFM2.5` 1.6 G, plus the rest of `C:\models`.
- Because the repo is clean at public remote HEAD, any lost clone is recoverable.
4. **Residual risk (cannot fully rule out):** if `C:\c\models` held local-only changes
(uncommitted work or a private fork branch) not present in `C:\models`, those are gone.
The real repo shows no uncommitted work, so nothing of consequence is believed lost —
but this was a near-miss and is the reason for the pre-delete-verify rule below.
## Rules adopted (see lessons.md 2026-09-25)
- Pass Windows `C:\Users\...` paths to native binaries; never MSYS `/c/...`.
- Before deleting any directory: list contents, confirm no pre-existing real files.
- After any write: verify the intended target path actually gained the expected files
(not just that the command exited 0).
- If a phantom root (`C:\c`, etc.) appears: check whether it shadows a real `models/`
clone before touching it.
## Verification commands (reproducible)
```bash
git ls-remote https://github.com/rlaope/oh-my-hermes.git refs/heads/main
uv tool list
omh --hermes-home "C:\Users\fight\AppData\Local\hermes\profiles\leonard" doctor
grep -nE 'plugins:|omh|external_dirs|skills:' C:/Users/fight/AppData/Local/hermes/profiles/leonard/config.yaml
git -C /c/models/bonsai2-small-gpu log --oneline -1
git -C /c/models/bonsai2-small-gpu status --short
```
@@ -0,0 +1,21 @@
# Phoenix Salon + Spa — Full Audit Fact (2026-09-27)
**Run:** `src/veripath/docs/validation/2026-09-27-phoenix-salon-spa/` (findings.json, REPORT-final.md, AUDIT-LOG.md)
**Client:** VP-001 (Cameron Park, CA) | Owner truth: Mon–Sat 9–6, Sun closed
## Live state (2026-09-27)
- Reputation: GBP 4.9/64 (on-file), Bing 5/5/65, Yelp 4.9/~63–65, FB 94%/46, Vagaro 5.0/686 (carried)
- NAP consistent on ALL primary surfaces (address + phone verified live on GBP, Bing, Apple, website, FB)
- GBP: women-owned attribute live; price level NOT set; website field = http:// (insecure form)
- Yelp hours CONFLICT: Mon 10–4, Tue–Fri 10–6, Sat 10–4 vs truth 9–6
- Website: visible hours FIXED to 9–6 (09-06 10-AM issue closed); raw HTML = 3.5KB SPA shell again (09-06 was server-rendered); JSON-LD Sunday 00:00–00:00 bug STILL OPEN; NO GA4/GTM anywhere (only /~flock.js proxy)
- phoenixsalonspa.com → 301 to DropCatch parked "for sale" (old domain dropped; citation risk)
- Facebook intro still "Formally La Mae Salon & Spa" (framed as history); 840 followers; last visible post Jul 15
- Instagram @phoenix.cameronpark: 874 followers / 1,604 following; no NAP in bio; link = phoenixcameronpark.start.page
- Style Readers' Choice 2026 nomination; winners announced Oct 2026
## Findings snapshot
1 Immediate (Yelp hours), 3 High (JSON-LD Sunday, no analytics, quiet Google/Yelp reviews since Apr 21 2026), 3 Medium (rebrand residue, SPA shell, GBP price level), 2 Enhancement (http links, social signals)
## Open verification gaps (this run)
GBP live review count/date, Apple rating/hours (stale 08-14: 10–6 incl Sun), Vagaro live (Incapsula), GBP posts/photos (login wall), AI visibility layer (no access), GEO Track-1 numeric (tool not on Windows host)
@@ -0,0 +1,18 @@
# Local Inference Failure Ledger — Bonsai 2 / 3060
Purpose: track every attempted local-inference request, success/failure, latency, root cause.
Rule: every tested model run gets one row. Update after each test, not after each crisis.
| # | Date (PST) | Model | Request size | Result | Latency | Root cause / notes |
|---|-----------|-------|-------------|--------|---------|--------------------|
| 1 | 2026-09-18 ~07:00 | Bonsai-2-27B Vulkan build | 62 tok | SUCCESS | 145s | PQ2_0 via generic Vulkan kernels — no Vulkan kernels in fork |
| 2 | 2026-09-18 ~07:11 | Bonsai-2-27B CUDA build | 62 tok | SUCCESS | 4.6s | After CUDA build swap — 32x faster |
| 3 | 2026-09-18 ~07:20 | Bonsai-2-27B CUDA (3 models loaded) | 2048 tok | FAIL | ~56s then cancel | VRAM 9.3/12GB used, model spilled ~5GB to RAM; prefill 6% after 27s; Hermes 60s client timeout cancelled |
| 4 | 2026-09-18 ~07:24 | Bonsai-2-27B CUDA (card dedicated) | 3971 tok | SUCCESS | 84.9s | Full model in VRAM 11969/12288 MiB; slow but works |
| 5 | 2026-09-18 ~07:24 | Bonsai-2-27B CUDA (dedicated) | 61 tok | SUCCESS | 6.8s | content correct |
| 6 | 2026-09-18 ~07:31 | Bonsai-2-27B via Hermes picker | ~72,700 tok | FAIL | ~7s → abort | Context overflow: session 72.7k tokens > Bonsai ctx 65,536. Hermes pre-call compression failed 2x (failure_class=lock_contended), then request aborted WinError 10053. Not a model fault. Fix: /new before bonsai2, or reload with -c 131072 |
Baseline so far: 4/5 success; the one failure was resource contention (my error), not the model.
Open: track picker-switch requests through real agent traffic, not just hand tests.
Status: TRACKING SINCE 2026-09-18. No telemetry existed before this file.
@@ -5,6 +5,9 @@
| Date | Lesson | Context |
|------|--------|---------|
| 2026-09-25 | OMH (oh-my-hermes) install on Windows: the PowerShell remote-installer pattern (fetch install.ps1, run iex) is flagged by the command-safety gate and just times out on Telegram (no approval UI). Use the documented agent path: pin the SHA with `git ls-remote https://github.com/rlaope/oh-my-hermes.git refs/heads/main` (never `main`), then `uv tool install "git+https://github.com/rlaope/oh-my-hermes@$SHA"` (local build, no remote-exec, does not trip the gate), then `omh --hermes-home "C:\Users\fight\AppData\Local\hermes\profiles\leonard" setup --no-interactive --yes --no-omh-tui`, then `omh doctor` (target 54/54 passing, 0 blocking). `omh` is a native binary: pass Windows `C:\...` paths, never MSYS `/c/...`. Non-interactive setup does not touch model aliases. | OMH install (2026-09-25) |
| 2026-09-25 | Native-tool path discipline + pre-delete verification (near-miss during OMH setup): I passed an MSYS path `/c/Users/...` to the **native** `omh.exe`, which read it literally as a phantom `C:\c\Users\...`; that phantom root pre-existed and also held a `models/` subtree (git research repo, caches, GGUF weights) that I did not recognize when I `rm -rf`'d the phantom. Real data survived only because the authoritative `C:\models` (git clean at remote HEAD; all weights present; public remote sudoingX/bonsai2-small-gpu) was a separate tree. Rules: (a) pass `C:\Users\...` to native tools, never MSYS `/c/...`; (b) before deleting a dir, list its contents and confirm no pre-existing real files; (c) after any write, verify the intended target actually gained the expected files; (d) if a phantom root (`C:\c`) appears, check whether it shadows a real `models/` clone first. | OMH install side-effect (2026-09-25) |
| 2026-09-19 | Bonsai 2 27B fast build (sudoingX fork: kernel PR #218 + Hadamard #217, MTP head graft) runs ~2x stock: fresh tg128 39.3 tok/s (vs 26.3), streaming ~49 tok/s (code 53.4), greedy output BYTE-IDENTICAL to spec-off (lossless). Windows-native CUDA build BLOCKED on this PC: MSVC 14.44/14.51 crashes CUDA 12.4 cudafe++, no admin for CUDA 13/old MSVC, pip nvcc wheels ship no nvcc.exe on Windows. Build+serve in WSL2 (gcc-13 + CUDA 12.4 apt; GPU passthrough native) at 127.0.0.1:8899; model in WSL ext4 /opt/models, bind --host 0.0.0.0 (127.0.0.1-in-WSL is invisible from Windows). pkill is case-sensitive ('bonsai' won't match 'Ternary-Bonsai'). Provider/alias bonsai2 re-pointed to :8899; `hermes gateway restart` + `/new` + `/model bonsai2` to use. Full note: facts/2026-09-19-bonsai2-mtp-fast-build.md | Bonsai 2 MTP setup (2026-09-19) |
| 2026-09-17 | MiniCPM5-2B (FreeToken 127.0.0.1:1919) returns EMPTY/thinking-only completions under Hermes agent turns (44× `Empty response (no content or reasoning)` in errors.log, Sep 12–17), yet answers cleanly to direct curl (small/20K/22K prompts, tools, SSE, 4-way concurrency, multi-turn). Failure is model-vs-agent-load, not server/KV. Same box also logged `prompt is too long: 17105 > 8585 max (prompt + generation)` (Sep 15, Gemma) proving FreeToken real KV budget << advertised 131K. Fix: route agent turns to routeapi/deepseek-v4-flash-0731; keep 2B models for light direct use only. | Profile audit + MiniCPM5 diagnosis (2026-09-17) |
| 2026-09-17 | `providers.freetoken.max_tokens: 2000` is silently IGNORED (`unknown config keys ignored: max_tokens`) — key placement invalid for this schema, so the generation cap never applies. Also `model_aliases.minicpm5` had a duplicate `model:` key (Gemma dict + MiniCPM scalar) so the alias didn't point where labeled. | Profile audit (2026-09-17) |
| 2026-09-17 | `hermes cron create` grammar: the prompt positional MUST come immediately after the schedule and BEFORE any `--flags` (`hermes cron create <schedule> "<prompt>" --name ...`). Prompt after flags → `unrecognized arguments`. `--model`/`--provider` pin per-job to a working provider — restored jobs referencing `openrouter:deepseek` (dead provider) would silently fail. | Cron rebuild (2026-09-17) |
@@ -25,4 +28,5 @@
| 2026-08-29 | Cron jobs inherit the full default-toolset system prompt (~16,931 tokens context). Huge context overflows tiny fallback models with small KV budgets. Give cron jobs a minimal toolset (e.g. `read, files`) like `check-agent-discussion` (~2,648 tokens). | Agent OS cron consolidation setup |
| 2026-08-29 | Files in a session that came back as base64 text on disk (memory_policy.md, lessons.md) were real corruption — the decoder (`read_file`) hid it. Always verify a file's on-disk content is plain markdown, not base64. | Vault Agent OS setup — base64 corruption bug |
| 2026-08-29 | `/model <name>` in Hermes is session-scoped; use `--global` or `hermes config set model.default` to persist. Config/status showing a different model than the live session = split-brain from session-level switches. | Model switching permanence |
| 2026-08-29 | `hermes fallback add|remove` are interactive pickers that reject bare model strings; set the whole `fallback_providers` list via `hermes config set` instead. | Model switching permanence |
| 2026-08-29 | `hermes fallback add|remove` are interactive pickers that reject bare model strings; set the whole `fallback_providers` list via `hermes config set` instead. | Model switching permanence |
| 2026-09-24 | Bonsai 2 27B + MTP verified end-to-end on the 3060: decode 48.6-50.8 tok/s, cold prefill 241 tok/s, VRAM 11,166 MiB used / 950 free at -c 131072 - matches the advertised ~50 tok/s. Fixed an intermittent EMPTY-content failure by adding `--reasoning-effort medium` to /opt/serve-bonsai-mtp.sh (template default xhigh let reasoning eat the whole max_tokens budget: 2,524ch reasoning, finish_reason=length, empty content). Do NOT misdiagnose that as the /new context trap or the post-abort scheduler wedge - /health is 200 and decode speed is normal; compare reasoning_content length vs usage.completion_tokens. Also: the 'official PrismML installer' (Bonsai-demo/PQ2_0/:8080) advice is SUPERSEDED on this box by the sudoingX PTQ1_0+MTP build at :8899, and a Windows-native CUDA build of the fork remains impossible (MSVC 14.44 crashes CUDA 12.4 cudafe++). Full note: facts/2026-09-24-bonsai2-mtp-verified.md | Bonsai 2 verification + reasoning-effort fix |