diff --git a/archival-memory.md b/archival-memory.md index d6c10fb..100a854 100644 --- a/archival-memory.md +++ b/archival-memory.md @@ -193,6 +193,61 @@ _Entries moved out of persistent-memory.md to keep the active file scannable. Re parsing for Kokoro /dev/captioned_speech multi-line responses. _Archived 2026-06-01._ +- `[2026-05-31]` Dia2 deployed as **two fixed-model instances** + (`dia2-2b` :8200, `dia2-1b` :8202) from `local/dia:v2`, retiring + legacy Dia 1.6B; catalog `dia` entry **removed → dia2-2b + dia2-1b** + (breaking for asset-engine). Rationale: the devnen wrapper is + single-model and IGNORES the OpenAI `model` field (verified on its live + OpenAPI), so the only way to offer both Dia2 models as real per-request + asset-engine choices is one fixed endpoint per model. `3139e81` + (deploy), `db15638` (catalog swap). + _Archived 2026-06-03._ + +- `[2026-05-31]` Both dia2 catalog entries route to the wrapper's richer + **`/tts`** endpoint (not `/v1/audio/speech`) to expose the full control + surface (cfg_scale/temperature/top_p/cfg_filter_top_k/voice_mode/clone); + all defaults sourced from the wrapper's `CustomTTSRequest` Pydantic + blessed values. Voice default is `voice_mode: clone` + + `clone_reference_filename: Abigail.wav` so a stable (non-random-gender) + voice is the out-of-box behavior. `55602b7`, `5c47843`. + _Archived 2026-06-03._ + +- `[2026-05-31]` Zonos REST adapter (`stacks/zonos/adapter/`, + `local/zonos-api`) — thin OpenAI-ish `/v1/audio/speech` FastAPI in front + of the Gradio-only Zonos SDK; JSON-envelope `{audio, audio_format, + seed}` (Zonos is the fleet's first seedable TTS). Port 8203 (moved off + 8201 — collided with csm). Built; NOT deployed (stack down for VRAM). + Also fixed the upstream image's missing CMD (`71df6f7`). `81efa8d`. + _Archived 2026-06-03._ + +- `[2026-05-31]` Catalog schema regenerated: added `CatalogLifecycle` + + `reproducibility.seed_field` (`b7b2130`). Resolves the stale-schema + hand-off; catalog now validates clean. (asset_engine `catalog.py` + Pydantic already supported both — schema file was just behind.) + _Archived 2026-06-03._ + +- `[2026-05-31]` TTS bench expanded with `stacks/{dia,zonos,csm}` + (`666f7f3` dia+zonos, `a4b8c2a` csm). The bench already had Fish + S2-Pro / Chatterbox-Turbo / IndexTTS-2 / CosyVoice3 / Kokoro / + VibeVoice / Qwen3-TTS / Kyutai. (csm since removed 2026-06-01.) + _Archived 2026-06-03._ + +- `[2026-05-31]` Remote browser/iPad/Vision-Pro driver seat for the + agent-fleet zellij session `Claude` stood up on nh3-dev (ttyd behind + Caddy, network-gated). Out of this repo — full architecture + the + HTTP2/OSC52/Safari-auth gotchas in auto-memory `reference_ttyd_fleet_seat`. + _Archived 2026-06-03._ + +- `[2026-05-30]` esh-docker-vm NFS boot-ordering fix: + `playbooks/fix-esh-nfs-boot-ordering.yaml` (`c0458d9`, + `53157b1` + drop-in filename-collision fix) adds `_netdev,nofail` to the four + 10.0.50.50 NFS mounts + a docker `After=remote-fs.target` drop-in — + resolves paperless `Exited(255)` on reboot. traefik also gained + `restart: unless-stopped`. Full incident → auto-memory + `incident_esh_docker_nfs_boot_race`. + _Archived 2026-06-03._ + + ## Tried and abandoned (archived) - `[2026-04-30]` task-board workflow with @@ -431,3 +486,49 @@ _Entries moved out of persistent-memory.md to keep the active file scannable. Re - `[2026-05-27]` `head -c N` piped after a streaming curl SIGPIPEs the curl, killing the request early. Use file-write + separate read. _Archived 2026-06-01._ + +- `[2026-05-31]` Building the dia2-capable image surfaced THREE upstream + packaging quirks: (1) `pip install -e nari-labs/dia2` fails — no PEP 660 + `build_editable` hook; (2) plain `pip install` builds an empty + `UNKNOWN-0.0.0` wheel (base setuptools 59.6 < dia2's required ≥70); (3) + `--no-deps` leaves `transformers`/`sphn`/`whisper-timestamped` missing. Fix + (`local/dia:v2`): copy the pure-python `dia2/` package into site-packages + + install ONLY those 3 deps; base torch/numpy already satisfy Dia2. + _Archived 2026-06-03._ + +- `[2026-05-31]` Dia2 predefined voices (43, baked at `/app/voices`) are NOT + reachable from the `/tts` clone path — it resolves `clone_reference_filename` + against the reference_audio dir ONLY. The OpenAI `/v1/audio/speech` `voice` + param auto-resolves them (separate code path), which masked the gap. Fix: + stage `/app/voices/*` into `/worktank/dia/reference_audio`. Lesson: verify on + the endpoint the catalog ACTUALLY targets. + _Archived 2026-06-03._ + +- `[2026-05-31]` `voice_mode=clone` with an empty `clone_reference_filename` + → asset-engine serializes it as the literal string `"undefined"` → `/tts` + 404. First observed on dia2; worked around in the catalog (default the field + to a real voice). **[2026-06-01] root cause found** — the Kokoro voice-blend + widget reading Shoelace `.value` before hydration (see Current state); the + real fix is asset-engine-side and is escalated. + _Archived 2026-06-03._ + +- `[2026-05-31]` asset-engine `services.schema.json` is DERIVED (regen from the + Pydantic model via `dump_schema.py`) and had DRIFTED — rejected the + `lifecycle` field 12/14 services use. RESOLVED: regenerated with + `CatalogLifecycle` + `reproducibility.seed_field` (`b7b2130`). Lesson: + hand-editing `services.yaml` shape without regenerating re-introduces drift. + _Archived 2026-06-03._ + +- `[2026-05-31]` ttyd-over-TLS forces HTTP/2 (kills ttyd's terminal WebSocket + → blank screen); Safari/WebKit never sends HTTP basic-auth on WS upgrades. + Both solved for the fleet seat (Caddy forces HTTP/1.1; auth → network-gating) + — detail in auto-memory `reference_ttyd_fleet_seat`. + _Archived 2026-06-03._ + +- `[2026-05-30]` esh-docker-vm: `hard` NFS mounts from 10.0.50.50 froze a + container worker in UNKILLABLE D-state when the NAS stalled — only a host + reboot clears it. Separately, `fstab defaults` (no `_netdev`) made NFS-bind + containers `Exited(255)` on reboot. → auto-memory + `incident_esh_docker_nfs_boot_race`. + _Archived 2026-06-03._ + diff --git a/persistent-memory.md b/persistent-memory.md index e5beb2a..ece03a8 100644 --- a/persistent-memory.md +++ b/persistent-memory.md @@ -335,54 +335,7 @@ _As of 2026-06-03:_ schema field once they read it. Tracked: althing msg `01KT2K2SY9N7AY69R9V0B4RXSW` to asset-engine-dev. -- `[2026-05-31]` Dia2 deployed as **two fixed-model instances** - (`dia2-2b` :8200, `dia2-1b` :8202) from `local/dia:v2`, retiring - legacy Dia 1.6B; catalog `dia` entry **removed → dia2-2b + dia2-1b** - (breaking for asset-engine). Rationale: the devnen wrapper is - single-model and IGNORES the OpenAI `model` field (verified on its live - OpenAPI), so the only way to offer both Dia2 models as real per-request - asset-engine choices is one fixed endpoint per model. `3139e81` - (deploy), `db15638` (catalog swap). - -- `[2026-05-31]` Both dia2 catalog entries route to the wrapper's richer - **`/tts`** endpoint (not `/v1/audio/speech`) to expose the full control - surface (cfg_scale/temperature/top_p/cfg_filter_top_k/voice_mode/clone); - all defaults sourced from the wrapper's `CustomTTSRequest` Pydantic - blessed values. Voice default is `voice_mode: clone` + - `clone_reference_filename: Abigail.wav` so a stable (non-random-gender) - voice is the out-of-box behavior. `55602b7`, `5c47843`. - -- `[2026-05-31]` Zonos REST adapter (`stacks/zonos/adapter/`, - `local/zonos-api`) — thin OpenAI-ish `/v1/audio/speech` FastAPI in front - of the Gradio-only Zonos SDK; JSON-envelope `{audio, audio_format, - seed}` (Zonos is the fleet's first seedable TTS). Port 8203 (moved off - 8201 — collided with csm). Built; NOT deployed (stack down for VRAM). - Also fixed the upstream image's missing CMD (`71df6f7`). `81efa8d`. - -- `[2026-05-31]` Catalog schema regenerated: added `CatalogLifecycle` + - `reproducibility.seed_field` (`b7b2130`). Resolves the stale-schema - hand-off; catalog now validates clean. (asset_engine `catalog.py` - Pydantic already supported both — schema file was just behind.) - -- `[2026-05-31]` TTS bench expanded with `stacks/{dia,zonos,csm}` - (`666f7f3` dia+zonos, `a4b8c2a` csm). The bench already had Fish - S2-Pro / Chatterbox-Turbo / IndexTTS-2 / CosyVoice3 / Kokoro / - VibeVoice / Qwen3-TTS / Kyutai. (csm since removed 2026-06-01.) - -- `[2026-05-31]` Remote browser/iPad/Vision-Pro driver seat for the - agent-fleet zellij session `Claude` stood up on nh3-dev (ttyd behind - Caddy, network-gated). Out of this repo — full architecture + the - HTTP2/OSC52/Safari-auth gotchas in auto-memory `reference_ttyd_fleet_seat`. - -- `[2026-05-30]` esh-docker-vm NFS boot-ordering fix: - `playbooks/fix-esh-nfs-boot-ordering.yaml` (`c0458d9`, + `53157b1` - drop-in filename-collision fix) adds `_netdev,nofail` to the four - 10.0.50.50 NFS mounts + a docker `After=remote-fs.target` drop-in — - resolves paperless `Exited(255)` on reboot. traefik also gained - `restart: unless-stopped`. Full incident → auto-memory - `incident_esh_docker_nfs_boot_race`. - -_25 older entries archived to archival-memory.md._ +_32 older entries archived to archival-memory.md._ ## Tried and abandoned @@ -493,43 +446,4 @@ _25 older entries archived to archival-memory.md._ same clips gave the correct answer (clone 0.79 to real Imogen, 0.10 to default). Use ECAPA, not resemblyzer, for speaker-verification. -- `[2026-05-31]` Building the dia2-capable image surfaced THREE upstream - packaging quirks: (1) `pip install -e nari-labs/dia2` fails — no PEP 660 - `build_editable` hook; (2) plain `pip install` builds an empty - `UNKNOWN-0.0.0` wheel (base setuptools 59.6 < dia2's required ≥70); (3) - `--no-deps` leaves `transformers`/`sphn`/`whisper-timestamped` missing. Fix - (`local/dia:v2`): copy the pure-python `dia2/` package into site-packages + - install ONLY those 3 deps; base torch/numpy already satisfy Dia2. - -- `[2026-05-31]` Dia2 predefined voices (43, baked at `/app/voices`) are NOT - reachable from the `/tts` clone path — it resolves `clone_reference_filename` - against the reference_audio dir ONLY. The OpenAI `/v1/audio/speech` `voice` - param auto-resolves them (separate code path), which masked the gap. Fix: - stage `/app/voices/*` into `/worktank/dia/reference_audio`. Lesson: verify on - the endpoint the catalog ACTUALLY targets. - -- `[2026-05-31]` `voice_mode=clone` with an empty `clone_reference_filename` - → asset-engine serializes it as the literal string `"undefined"` → `/tts` - 404. First observed on dia2; worked around in the catalog (default the field - to a real voice). **[2026-06-01] root cause found** — the Kokoro voice-blend - widget reading Shoelace `.value` before hydration (see Current state); the - real fix is asset-engine-side and is escalated. - -- `[2026-05-31]` asset-engine `services.schema.json` is DERIVED (regen from the - Pydantic model via `dump_schema.py`) and had DRIFTED — rejected the - `lifecycle` field 12/14 services use. RESOLVED: regenerated with - `CatalogLifecycle` + `reproducibility.seed_field` (`b7b2130`). Lesson: - hand-editing `services.yaml` shape without regenerating re-introduces drift. - -- `[2026-05-31]` ttyd-over-TLS forces HTTP/2 (kills ttyd's terminal WebSocket - → blank screen); Safari/WebKit never sends HTTP basic-auth on WS upgrades. - Both solved for the fleet seat (Caddy forces HTTP/1.1; auth → network-gating) - — detail in auto-memory `reference_ttyd_fleet_seat`. - -- `[2026-05-30]` esh-docker-vm: `hard` NFS mounts from 10.0.50.50 froze a - container worker in UNKILLABLE D-state when the NAS stalled — only a host - reboot clears it. Separately, `fstab defaults` (no `_netdev`) made NFS-bind - containers `Exited(255)` on reboot. → auto-memory - `incident_esh_docker_nfs_boot_race`. - -_29 older entries archived to archival-memory.md._ +_35 older entries archived to archival-memory.md._