# Tenant surfaces, TrueNAS deployment, and thoughts on the wire (v1.6.1 to v1.8.2)

> Source: <https://loomcycle.dev/blog/tenant-surfaces-truenas-and-thoughts-on-the-wire.html>
> Published: 2026-07-01 11:33:58.634819+00:00

Five days, eight loomcycle releases, three arcs. Arc 1: tenant surfaces (RFC AS) — the tenant-operator Web UI lands across v1.6.3-v1.6.7. Library + def-plane /names reads tenant-scoped, Library route gated at substrate:tenant, per-surface nav visibility (v1.6.3), static/bundled agents visible to tenant operators as read-only, schedules surface tenant-scoped, Path/Document browse-by-subject with a topbar picker, audit log tenant-scoped via owning session (v1.6.4), bundled inline top-level skills surface in the Library, Document op=create_document always registers a Path dirent (defaulting /documents/) plus a new op=set_path so documents are never orphaned (v1.6.5), sub-agent session inherits parent's tenant (v1.6.6), Context op=self reports the full principal block + a server block from LOOMCYCLE_PUBLIC_URL (v1.6.7). Load-bearing shape: admin sees all + optional ?tenant= focus, substrate:tenant operator confined by construction, cross-tenant reads return empty (never 403), nav visibility derives from bearer scopes. Arc 2: TrueNAS deployment moved from possible to supported. Distributed across every version: v1.6.2 softens Postgres floor to ≥14 (was pinned 16), moves secrets to env_file, ships chat + chat-local bundles, adds LOOMCYCLE_OLLAMA_LOCAL_NUM_GPU. v1.6.4 fixes SQL-Memory Postgres role (needs CREATEROLE for per-scope roles at runtime). v1.6.7 wires LOOMCYCLE_PUBLIC_URL in compose + INSTALL.md. Arc 3: vision + thoughts on the wire. v1.7.0 lands RFC AT image/vision across all providers (Anthropic native, OpenAI content-array, Gemini inlineData, Ollama images field) + every transport (HTTP + gRPC + MCP + TS + Python adapters bump 1.7.0). v1.7.1 fixes the fallback-target vision gate: re-check SupportsVision inside tryProviderFallback, emit EventFallbackSuppressed with RFC AT §4.4 cite on non-vision target, image never leaks to DeepSeek's raw 400. v1.8.0 wires effort hint to Ollama's think flag (medium/high → think:true) for local reasoning models (qwen3, deepseek-r1); consistent error posture with cloud drivers. v1.8.1 makes CLI validate/agents/doctor honor LOOMCYCLE_PRESETS/CONFIG_DIR/CONFIG_FILES layering, plus a LOOMCYCLE_OLLAMA_DEBUG_THINK diagnostic. v1.8.2 is the two-line root-cause fix: the loop's event switch had no case for EventThinking and no default, so every provider's streamed reasoning trace was silently dropped at the loop and never reached SSE/gRPC/adapters. Fix: case providers.EventThinking: emit(ev). Small wins: v1.6.1 MCP thin-client transparent re-handshake on upstream session expiry (ends the /reload-plugins dance); GET /v1/_models exposes the operator's alias map so a UI can offer aliases in a picker and forks track alias retargets. Adapters unchanged since v1.7.0; server-side patches through v1.8.2.
