Commit Graph

541 Commits

Author SHA1 Message Date
vh bc084edbee memory: snapshot for /clear — worldtree b168/#384/#385 arc complete
Collapsed the completed-arc bloat out of Current state / in-flight (line 125:
6487->1073 chars; runbooks moved to persistent-memory.d/2026-08-03-worldtree-b168-384-385-arc.md).
Added the 2026-08-03 arc Recent-decisions entry. Auto-archived 20 oldest
Recent-decisions entries (2026-07-08..07-14) to archival-memory.md (index 345->308
lines). Refreshed the b169-deploy watch, unpushed-count, and handoff.
2026-08-03 00:12:59 -07:00
vh 4be87f1a94 memory: b169 pull-fail was a shared-containerd race, NOT disk; dont prune in-use img
corviduo-dev demo+personal+pinned share one containerd; concurrent pull of b169's
torch layer failed personal mid-race while demo completed. Image 6e34a87 fully
valid (demo running it healthy). Fix = re-run. NEAR-MISS: prune/rmi 6e34a87 would
have downed demo. Lesson: docker ps running images before any prune cleanup.
2026-08-02 23:57:48 -07:00
vh 45594e3891 memory: config-delta pre-sync rule — only config/ is bind-mounted, agents/ in-image
Verified via docker inspect: worldtree containers bind-mount only config/ host-side
(providers/model_roles/matrix/policies/defaults/env.public = pre-syncable set);
agents/ (schemas.yaml) + code ship in-image. So b169's schemas.yaml delta needs
no host pre-sync; only config/*.yaml changes are boot-blocking-pre-syncable.
2026-08-02 23:40:39 -07:00
vh 523b28f12f memory: production sweep DONE — 785 April DCC dupes deleted, arc complete
Operator-approved: backed up 785 rows (reversible) -> deleted job_id=b59c147c5ce0
from main (4009->3224, target cleared) -> bounced api (HNSW reload) -> confirmed
search fiction-only. #384/#385 closed, worldtree arc complete.
2026-08-02 23:12:21 -07:00
vh b4ef0600d2 memory: BrokenPipe wing-git watch CLOSED (round-2 commits clean, chown enabled)
worldtree-dev closed the watch with git evidence: both round-2 wing commits
landed clean under exec -u 1000; loose-object chown enabled it. Self-healed as
predicted; last thread of the reindex-as-root fallout closed.
2026-08-02 22:54:32 -07:00
vh 3a829890c5 memory: worldtree #384/round-2 arc COMPLETE + #381 restart fired
Both books terminal (DCC 705 / P&P 667 indexed, 0 failures, #385 budget fix
validated); #381 restart-after-ingest fired, api healthy, wing retrievable
(search_library returns DCC+P&P from fiction). ratatoskr verify handed off.
Delete-sweep precondition now met (stale main rows = genuine duplicates).
2026-08-02 22:53:01 -07:00
vh d72597bade memory: /health W_OK blind-spot for root-owned job subdirs (muninn-dev)
os.access(ingestion_root, W_OK) tests only the root dir, so a root-owned job
subdir passes requeue guards + /health both while being unclaimable by uid 1000.
muninn-dev added an ownership column to the post-move check.
2026-08-02 22:47:51 -07:00
vh 8bc5be35ce memory: reindex-as-root contaminated KB tree; adopt docker exec -u 1000 rule
sudo docker exec --reindex ran as root (app=uid 1000), leaving a root-owned
.old- dir (blocked uid-1000 rmtree) + 60 root-owned git objects. Fixed: rm -rf
.old- (tar'd first) + chown 1000:1000 the objects. RULE: docker exec that writes
pipeline state uses -u 1000. GOTCHA: don't head a scope-defining find (.old- had
153 files, head-20 hid the 60 git objects).
2026-08-02 22:45:33 -07:00
vh 3790669fb5 memory: round-2 sequencing (mimir-dev drives, muninn-dev confirms, infra-ops #381)
muninn-dev HOLD LIFTED (guard-verified 02:36Z). Recorded who owns what:
round-2 requeue = mimir-dev browser flow (op ruling pending); muninn-dev = gate
confirmer / post-move board-check custody; infra-ops = #381 restart after both
terminal + later supervised sweep.
2026-08-02 19:40:04 -07:00
vh 9bd5f2a4b1 memory: mv -t is the real guard (trailing slash is a false guard); dont-tidy note
muninn-dev tested on coreutils 9.1: mv src failed/ with failed/ missing STILL
silently renames (rc=0) — trailing slash buys nothing. mv -t <dir> <src> refuses
a missing target loudly (rc=1). Adopted as house convention. Also: DCC+P&P rest
in failed/ with manifest=complete until round-2 (requeue keys on dir placement) —
deliberate, don't tidy.
2026-08-02 19:38:08 -07:00
vh 4eb2724712 memory: add silent-failure-mode note to the mv lesson (muninn-dev)
A misplaced ingestion-state move is silent (list_jobs OK, files inert; sole
symptom = job absent from board, job_row->None/404). Verify job is on the board
+ job.dispatch.json survived after any move; don't trust mv exit codes.
2026-08-02 19:36:06 -07:00
vh f8d0f3081d memory: lesson — mv into nonexistent failed/ renamed the job dir
worldtree-dev round-2 unblock: mv job complete/->failed/ assumed failed/
existed; it didn't on personal, so mv renamed job1 to 'failed' + nested job2.
Caught + reconstructed via complete/ scratch, no data loss. Lesson: verify dir
exists with [ -d ] before mv-into (empty ls is ambiguous); guard peer fs cmds
with mkdir -p.
2026-08-02 19:30:18 -07:00
vh 11f9856cd5 memory: wing-git = self-healing watch; pending prod delete-sweep heads-up
worldtree-dev accepted #384 recovery. Wing-git BrokenPipeError ruled a
watch-item (self-heals on DCC round-2 re-run; escalate only if 2-in-a-row).
Recorded a heads-up for a future production delete-by-job_id of 785 April-era
DCC orphans (job_id=b59c147c5ce0, 'main' collection) — to be handled supervised
(backup + scope-confirm + operator-in-loop) after ratatoskr's verify.
2026-08-02 19:17:56 -07:00
vh c3b6630684 memory: #384 recovery on personal DONE (reindex+restart+verify)
b168 preflight-confirmed live; reindex exit0 (97 concepts); #381 restart
healthy; metadata verify 5/5 fiction rows carry note_id+path. Open item:
wing git commit BrokenPipeError (kb_ingest_degraded, reconcile-visible) —
worldtree-dev's call. Recorded chroma-verify runbook (docker exec -i).
2026-08-02 19:15:39 -07:00
vh 62d5a45182 memory: b168 pushed + pending #384 reindex/#381 restart on personal
worldtree-dev pushed the train (main + tags v1.0.0b168/staging) and verified my
pre-sync matches the commit byte-for-byte. Recorded the next pending op: after
b168 CI-lands on personal, run --reindex of job mimir-6351554e8e8f + #381 restart
on their exact commands.
2026-08-02 19:03:12 -07:00
vh e0b616b946 memory: providers.yaml summarization pre-sync DONE (#384/#385 b168)
Synced the boot-gating summarization block + deep-reasoning desc to demo +
personal via deploy-wt-config (health-gated); replied GO. Recorded gotchas:
unpushed-commit fetch falls back to default branch (verify SHA exists), and
paste-sourced YAML needs indent/validate (8-space desc was invalid).
2026-08-02 19:01:30 -07:00
vh b901468752 memory: track pending providers.yaml summarization pre-sync (#384/#385)
worldtree-dev advance notice: #384/#385 train adds a boot-blocking
'summarization' capability block (vastblueai-gateway/gen) that in-image
muninn/config.yaml references. Must pre-sync into providers.yaml on demo
+ personal via deploy-wt-config BEFORE the image deploy, from the exact
commit. ACKed; recorded as an open watch.
2026-08-02 18:11:28 -07:00
vh a713d3f2c4 memory: #381 restart DONE — fiction wing retrieval-visible on personal
DCC job mimir-6351554e8e8f complete; restarted worldtree-personal-worldtree-api-1
(healthz/readyz 200); Mimir search_library on wings=[fiction] returns 10 DCC hits
(retrieval visibility confirmed, not grounding — ratatoskr runs grounding verify).
Recorded the Mimir-session probe runbook (SSE stream, tool-events).
2026-08-02 14:41:31 -07:00
vh f30c41409f memory: track pending #381 restart (DCC re-ingest, worldtree-dev)
worldtree-dev gave advance notice: standing #381 restart of
worldtree-personal-worldtree-api-1 will be requested when DCC re-ingest
job mimir-6351554e8e8f (fiction wing) goes terminal in a few hours.
ACKed no scheduling constraints; recorded as an open watch so a fresh
session catches the request.
2026-08-02 13:24:31 -07:00
vh 9b2c47602d memory: donut onyx-58 multi-clip ref reverted; emotion-away-from-clone lesson
A/B (5 pinned-seed neutral pairs) showed original single-clip seg000
(16.3s) beats the 52s 4-take concat on timbre fidelity — reverted live +
build-source to seg000-alone. Recorded two craft lessons: more reference
audio is not automatically better when takes vary; emotion steering pulls
output away from a cloned voice fast (keep clones emotion-neutral).
2026-08-02 13:22:41 -07:00
vh cac381a114 memory: donut voice expanded with onyx-58 clips (16.3s->52s ref)
Folded the onyx-58 Booth bundle (seg101/seg110/seg148, all Princess Donut
per operator-confirmed misdiarization of seg148) into the Zonos gateway
donut voice reference alongside the original 65-frost seg000. New ref =
52.0s @ 44.1kHz mono s16, deployed to irv-ml1 live bind-mount +
build-source tree; old ref backed up. A/B audition in booth donut-onyx58.
2026-08-02 13:14:12 -07:00
vh 1ab5465293 memory: snapshot — mimir-inbox/#377 read-path arc (deploy + #380/#381/#382 + donut voice); archived 11 old entries 2026-08-02 07:33:49 -07:00
vh a02ef5d851 docs: note worldtree #383 tier3_wings parity-fold pending (next config sync) 2026-08-01 19:39:26 -07:00
vh dfcf223ff1 docs: park Audio8 TTS-zoo addition (operator, non-blocking) 2026-08-01 17:34:51 -07:00
vh 8a824f85a3 docs(muninn-gate): Dockerfile comment — dispatch pin now 0.1.5, SHA-tag note
Gate rebuilt off vh/muninn-gate main (bc04c4c) for the muninn-dispatch
0.1.4->0.1.5 bump (concept_schema/concept_schema_source row fields). Gate
version unchanged at 0.0.14; note to also tag the image with the source SHA
for traceability, and that the pin is authoritative in pyproject.
2026-08-01 17:27:14 -07:00
vh 0441995ac8 docs(muninn-gate): sync example to reality — mimir-inbox key control scope + staging live (#377)
The mimir-inbox deploy changed two things the committed example documents:
the mimir-inbox key gained the control scope (2026-08-01, for cancel/retry),
and the staging root is no longer a placeholder — it's the real shared dir on
corviduo-dev, path-agreement probe PASS (muninn-dev). Bind was already correct
at :8090 (the stale :8080 was only in the gate repo's own example).
2026-08-01 14:36:31 -07:00
vh 4b54a32d64 feat(mimir-inbox): book-ingestion UI stack on corviduo-dev:8091 (#377)
WG-internal FastAPI+HTMX front end for large-document ingestion into the
Muninn KB, over the muninn-gate API (browser -> mimir-inbox -> staging ->
path-addressed POST /jobs). Co-located on corviduo-dev with the gate (:8090)
and the worldtree-personal muninn watcher per the operator's 2026-08-01
co-location ruling (reversing the earlier off-box/NFS plan; worldtree-dev
approved the box placement).

- Dockerfile: python:3.11-slim + uv sync --no-dev --frozen (--no-dev is
  load-bearing; the dev group's muninn-dispatch path source is absent in-image
  and INV-MI-7 forbids importing it). Single-stage by design — src/ stays in
  the final image (uv installs the project editable-linked to src/).
- compose.yaml: uid 1000, host-net bind 10.250.50.152:8091, staging :rw,
  TCP-liveness healthcheck (deliberately not coupled to gate reachability).
- Built from vh/mimir-inbox HEAD c8ab38f; deployed + healthy.

Records the open-in-place claim semantics (worldtree-dev, runner.py:362-367)
and the INV-MI-19 retention rule (staged files persist until job terminal;
gate retry returns a false-200 on a swept source) in persistent memory.
2026-08-01 14:31:14 -07:00
vh e6eabc1dde memory: snapshot — session close (muninn-gate #377 deployed on corviduo-dev, wtsdk 1.1.0 published + vh token, kimi-k3 reasoning-cap fix relayed to heid, magpie TTS rejected) 2026-07-31 21:27:13 -07:00
vh 786462ac9c feat(muninn-gate): WG-internal Muninn ingestion front door stack (#377)
Deployed on corviduo-dev, co-located with the worldtree-personal muninn
watcher. ingestion_root=/data/state/ingestion (shared state volume, byte-
identical to the watcher); runs as uid 1000 to write the queue; staging
bound :ro at the ratified /mnt/muninn-staging/mimir-inbox (local placeholder
until the shared mount + mimir-inbox writer land). Boot verified: /ping
{"service":"ok"}, /health watcher.running=true (byte-identity proven).

Image built out-of-band with the Gitea read token as a BuildKit secret.
Real config (bearer keys) lives on-server at /opt/docker/conf 0600.
2026-07-30 21:33:29 -07:00
vh 17d776fc90 memory: snapshot — multi-day infra session close (config repo + boundary, Zed FIM route, muninn #377, Kimi, herald, Booth v0.1.4) 2026-07-30 06:39:57 -07:00
vh 792aa2852c docs(zed-fim-proxy): source-IP allowlist stays OFF by design (Zed roams WG 10.0.0.0/8) 2026-07-27 22:58:22 -07:00
vh a300cdcd26 feat: Zed edit-predictions keyless FIM route (Qwen2.5-Coder-1.5B / coder-fast)
Deep-research-picked Qwen2.5-Coder-1.5B (BASE, Apache-2.0, native FIM) as a
low-latency inline-completion seat:
- stacks/vllm: vllm-coder service (ana-ml2 GPU1 :8020) + granite shrunk
  (util 0.27->0.13, max-len 131072->16384, seqs 1024->256; granite phasing out)
  to free GPU1 room.
- stacks/litellm: coder-fast alias -> :8020 (mode: completion, /v1/completions).
- stacks/zed-fim-proxy (NEW): keyless /v1/completions front door on ana-docker
  :4141 for Zed (which can't send an auth header) — POST + path + model
  allowlist, injects a coder-fast-scoped virtual key -> LiteLLM :4000. Anon
  /ping liveness. Verified keyless FIM end-to-end.

Zed api_url = http://10.250.50.70:4141/v1, model coder-fast, prompt_format qwen.
Source-IP allowlist off pending the Mac's observed source IP.
2026-07-27 22:55:21 -07:00
vh 8822a0bb81 memory: Worldtree #377 CLOSED — muninn watcher acceptance passed 2026-07-27 08:35:08 -07:00
vh 038e455897 memory: #377 durability resolved (COMPOSE_PROFILES=muninn) + env.public config-as-code extension 2026-07-27 08:27:47 -07:00
vh e06a96fc3e memory: Muninn ingestion-watcher sidecar deployed on personal Worldtree (#377) 2026-07-27 08:21:05 -07:00
vh 8944531ba0 memory: jackdaw-compose.service decommissioned (AI Composer cut from JackDAW v1) 2026-07-27 06:59:21 -07:00
vh 557d0b56d9 memory: demo BIFROST_CLIENT_ALLOWED_HOSTS delta (wyrd-dev provider) + env-change recreate/image-pin foot-gun 2026-07-26 22:17:20 -07:00
vh a5e2d91dfd memory: record nh3-extdev herald install + Booth v0.1.4 download feature 2026-07-25 17:49:36 -07:00
vh 91a031fdb3 feat(booth): downloadable booths — whole-booth zip + ?dl force-download (v0.1.4)
A verbatim index.html booth (e.g. edict-design-brief: a rendered brief + its
.md) had no download affordance — the page is served raw with no gallery/per-file
chrome. Adds:
  - GET /b/<name>/?download=1 -> streams the whole booth as <name>.zip (attachment)
  - GET /b/<name>/<file>?dl=1 -> forces Content-Disposition: attachment (html/md/
    text otherwise render inline with no easy save)
  - a download link on the index card (the accessible spot for verbatim booths)
    and the gallery header
Tests for both; verified live against edict-design-brief on nh3-dev :8090.
booth-v0.1.4
2026-07-25 17:49:11 -07:00
vh df1d87935d memory: wire bil-smithy-dev althing pane route + record the zellij-window-ping mechanism 2026-07-25 11:25:20 -07:00
vh 60accf4cf6 memory: correct Kimi K3 record — coding endpoint primary, gen-api variant kept 2026-07-25 11:01:12 -07:00
vh 9e2f787567 fix(litellm): route kimi-k3 to the Kimi Code (coding) endpoint
The Heid panel plan uses Kimi's coding endpoint, not the general Moonshot API.
kimi-k3 now → openai/k3 @ https://api.kimi.com/coding/v1 (KIMI_CODE_API_KEY,
Vivace); the original general-endpoint entry is kept as kimi-k3-gen-api
(api.moonshot.ai, MOONSHOT_API_KEY). Both verified live through the gateway.
Same k3 constraints on both: temperature MUST be 1 (else 400), reasoning model
(reasoning_content vs content, needs adequate max_tokens).
2026-07-25 11:00:15 -07:00
vh 0b0c915dc9 memory: record Kimi K3 gateway wiring (temp=1 + reasoning-model constraints) 2026-07-25 10:54:28 -07:00
vh edaa9a9c50 feat(litellm): front Kimi K3 (Moonshot) as a paid gateway passthrough
Adds model_name kimi-k3 → openai/kimi-k3 @ https://api.moonshot.ai/v1
(OpenAI-compatible), keyed by MOONSHOT_API_KEY (compose env + .env.example
placeholder; real key on server only). Verified live through the gateway.

Two Moonshot constraints captured in the config comment + pinned: K3 accepts
ONLY temperature=1 (else 400), and it is a reasoning model (CoT in
reasoning_content, answer in content — needs adequate max_tokens or content
returns empty). Model id confirmed via /v1/models.
2026-07-25 10:53:43 -07:00
vh 1fc8016988 memory: WT config-as-code repo shipped + boundary agreed
vh/worldtree-instance-configs (infra-ops) built, pushed, validated; deploy-wt-config
tool (diff/deploy/capture + health-gate + rollback). worldtree-dev agreed the
authoritative-writer boundary (no live-edits to /opt/<instance>/config; admin-API
DB ops carve-out). pinned confirmed out-of-scope (no bind-mount).
2026-07-25 02:45:02 -07:00
vh fd98122b33 memory: snapshot — infra-ops WT config-repo build queued; Booth shipped; #376 closed
Centered on the resume task: build the infra-ops-owned Worldtree per-deployment
config repo + deploy tooling (operator-directed) with the one-time
worldtree-dev boundary agreement. Also records: The Booth shipped (v0.1.3), the
jackdaw-compose nh3-dev deploy, and the Worldtree #376 arc closed (per-instance
config ruled by-design). Two detail files + the /tmp handoff.
2026-07-25 02:22:42 -07:00
vh cd4d52e871 docs(nh3-dev): add Booth + jackdaw-compose to the running-services inventory
Two user-systemd services stood up on nh3-dev this session weren't in the
"What runs here" list:
- The Booth (:8090, booth.service) — eshpfi services/booth ephemeral media board.
- jackdaw-compose (:8787, jackdaw-compose.service) — JackDAW /compose AI backend
  hosted for jackdaw-dev, Origin-gated, fronted by the :4500 bench proxy.
Keyless entries (the jackdaw unit's key stays server-side, uncommitted).
2026-07-23 08:44:19 -07:00
vh d813f152ce feat(booth): copy-id button on the pickup banner (v0.1.3)
Adds a "⧉ copy" button next to the pickup id that copies the id to the
clipboard (flips to "✓ copied"). The Booth serves over plain HTTP on a LAN IP,
where navigator.clipboard is undefined (secure-context only) — so the handler
falls back to a hidden-textarea execCommand('copy') that works over HTTP.
Verified on the LAN-IP (non-secure) path: isSecureContext=false, clipboard API
absent, button state flips, no errors. Reusable via any .copy-btn[data-copy].
2026-07-22 17:51:43 -07:00
vh 966324c5f1 docs(ana-ml2): refresh snapshot + sync README to live GPU state
The README's running-stacks table had drifted well behind reality (still listed
llama-swap + only the embed/rerank/reward trio). Regenerated system-details.txt
and rewrote the stacks + GPU-allocation sections from a live docker ps +
nvidia-smi (2026-07-22):

- GPU 0 (hot): vllm-aeon-gen (qwen3.6-35b-a3b-heretic, NVFP4) + vllm-charrp-
  reasoning-nvfp4 (char-rp-reasoning, NVFP4), ~42+45 GB.
- GPU 1 (on-demand): granite-4.1-8b, selene-1-mini-8b, Skywork reward,
  Qwen3 embed/rerank, and the Magidonia-24B char-RP GGUF (llama-charrp), ~91 GB.
- Recorded the dormant on-disk stacks and llama-swap's retirement.
2026-07-22 15:24:55 -07:00
vh 603d0ad555 feat(booth): image viewer page with Fit/1:1, download, Esc-back (v0.1.2)
Clicking a gallery image now opens a dedicated viewer instead of dumping you on
the raw file.

- GET /b/<name>/view?f=<img> — full-viewport viewer (registered before the file
  catch-all so /view wins; non-image f 307-redirects to the raw file, traversal
  and missing f 404).
- Fit (downscale-only) / 1:1 (natural pixels, scroll-to-pan) toggle that only
  appears when the image is larger than the viewport — when it already fits,
  Fit ≡ 1:1 so the toggle is hidden. Re-evaluates on resize.
- Download button + ✕/Esc back to the gallery. Australis-themed, progressive
  JS (degrades to fit-only, no-JS still shows the image + download + back).
- 5 new tests (34 total, all green); verified Fit/1:1/hidden-toggle states in a
  real browser.
2026-07-20 22:10:46 -07:00