v0.3.2 — the live trace actually streams in host apps; approval-aware timeouts
Two fixes surfaced by the playground's new customer-facing chat page — both worth upgrading for.
The live trace now actually works in host apps. Turbo's broadcast jobs render the trace partials through the HOST's default renderer, where the engine-scoped helper and bare engine route helpers didn't exist — so every broadcast render raised inside Turbo's job and the inbox's live streaming never worked in a real host app (the gem's specs stubbed the dispatch seam and never rendered a partial). The helper is now registered host-wide, partials build routes context-free via silas_engine_path, and four host-renderer regression specs pin the real path. If you host the trace partials in your own pages, note relative_time is now silas_relative_time.
The timeout budget no longer counts time spent parked for approval. Any approval slower than limits.timeout previously made the approved resume instantly re-park on "timeout" — pathological for a gate whose whole point is waiting for a person. Approval resumes restart the wall clock; timeout bounds active stretches (hung providers, runaway loops); cost/token budgets stay cumulative; crash-rescue resumes keep the original clock.
Also in this release: examples/playground gains a customer-facing chat page that renders and live-streams the engine's own trace partials with zero custom streaming code, plus a scripted keyless demo mode — bin/setup && bin/dev with no API key, and the tools, ledger, approval park, and token streaming are all still real. Verified end to end in a browser: £15 auto-approved (auto-approved by policy), £48 parked → approved by operator → resumed → exactly one refund row.
No migration. 273 specs green on SQLite and Postgres.