Skip to content

fix(airc-purity): voice-mirror warn → live.log, LIVE-validated + end-to-end proof of #194 deploy guard - #1957

Open
joelteply wants to merge 5 commits into
canaryfrom
fix/voice-mirror-warn-routing
Open

fix(airc-purity): voice-mirror warn → live.log, LIVE-validated + end-to-end proof of #194 deploy guard#1957
joelteply wants to merge 5 commits into
canaryfrom
fix/voice-mirror-warn-routing

Conversation

@joelteply

Copy link
Copy Markdown
Contributor

The #193 voice-session mirror warn now routes via clog_warn! to live.log (the sink where the orchestrator's register logs land) — the earlier log_warn!/tracing::warn! versions routed to sinks that were never visible.

Live receipt (running core):

  • DIVERGENT session_id != room_id[WARN] live: MIRROR ROOM (#193): ... dddddddd != eeeeeeee ... fires.
  • COLLAPSED session_id == room_id → silent (0 MIRROR lines).

This is also the first end-to-end proof of the #194 freshness guard: this new clog_warn behavior actually shipped through the guarded start-server.sh and ran on the live core — the deploy no longer reports 'ready' on stale code.

The instrument is now a working glass-box for the eventual voice→airc collapse (#193): we watch it go quiet when the call finally IS the airc room.

Refs #193, #194.

🤖 Generated with Claude Code

…IVE-VALIDATED (#193)

The #193 divergence warn now uses clog_warn! (auto-routes by module_path to live.log —
the SAME sink the orchestrator's register logs use), replacing log_warn!/tracing::warn!
which routed to sinks I never found. Also the FIRST end-to-end proof of the #194 deploy
guard: this new behavior actually SHIPPED through the guarded start-server.sh and ran.

LIVE RECEIPT (running core, this branch):
  DIVERGENT session_id != room_id → [WARN] live: MIRROR ROOM (#193): ... dddddddd !=
    eeeeeeee — the LiveKit call is keyed by a client-minted session_id, not the room_id.
  COLLAPSED session_id == room_id → SILENT (0 MIRROR lines).

So the instrument works: fires on the parallel-room-authority, silent when the call IS
the airc room. It is the glass-box we watch go quiet when the actual collapse lands.

Refs #193, #194. [[all-rooms-are-airc-rooms-no-mirrors]], [[verify-the-build-actually-deployed]]

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LoTjvf5j3Ez13g6k8mRkFo
…as seeing a live call

The methodical plan to get personas perceptive through LiveKit: frame → MediaFrame
(content-hash) → deep cells (describe/pose/detect, computed once, shared) → per-persona
projection → cognition → perceive/speak. Decisions baked in: Qwen3-VL-7B local as first
eyes; ambient + drill-in intake. 6 phases, each with a validation gate; critical path =
Phase 1 (Qwen3-VL up) → Phase 2 (video_rx → MediaFrame) → Phase 3 (render wire #190, the
'persona describes the call' milestone). #193 (call = airc room) runs parallel for
identity/purity. Grounded in what's already in tree — wiring + one model bring-up.

Refs #106, #187, #190, #192, #193. [[media-is-compute-once-zero-copy-hardware-grade]]

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LoTjvf5j3Ez13g6k8mRkFo
@github-actions github-actions Bot added size: M and removed size: XS labels Jul 18, 2026
joelteply and others added 3 commits July 18, 2026 16:51
…lution as context config; KV/memory reuse the hard constraint

Joel: the forced-look frames are thumbnails (~480w) so ambient perception is cheap
context; personas request bigger via the drill-in tool, or it's a per-persona/situation
context config. Must be smart given memory + KV reuse. Baked into the plan: one scaled
cell per frame content-hash shared to all viewers, image-token KV encoded ONCE and reused
across ticks + viewers ('thumbnails into KV once for all'); sampling cadence, not 30fps.
The ambient look is nearly free on the 2nd..Nth consumer by design.

Refs #190, #192. [[perception-feedback-must-not-blow-rag]], [[media-is-compute-once-zero-copy-hardware-grade]]

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LoTjvf5j3Ez13g6k8mRkFo
…naged product)

Joel: a repo user isn't asking Claude to run huggingface-cli. Corrected Phase 1: the VL
bring-up self-provisions via the EXISTING provisioning::Downloader / models/pull path
(GGUF + mmproj from the Model row's hf_source, no CLI dependency); mmproj resolution must
match the GGUF's local→HF-cache→pull (today resolve_mmproj_for_model only checks the
declared local path — the gap that forces manual placement). Gate: clean machine +
declared VL row → auto-provision → vision-describe works, ZERO manual steps.

Refs #106. [[managed-product-everything-self-provisions-no-operator-steps]]

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LoTjvf5j3Ez13g6k8mRkFo
…— async/buffer-first, must not dominate

Joel: thumbnails/descriptions arrive when they arrive, ABSOLUTELY non-blocking, cached;
but they pile up, so like any positronic system they're a managed RAG budget — must not
dominate (deep thoughts can't crowd rapid response). Design async/buffer-first, not
blocking-then-patched. Baked into the resolution/budget section: (1) cells bridge in when
ready, persona never waits; (2) a MediaPerceptionSource:RagSource delivers the room-as-now
percepts under the ONE flexbox budget, decayed/focus-weighted, competing with
engram/airc/roster, never crowding them.

Refs #190, #192, #8, #167. [[command-async-shape-prefer-stream-never-block]], [[budget-at-assembly-not-clamp-the-prompt]], [[alive-fast-and-deep-three-layer-stack]]

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LoTjvf5j3Ez13g6k8mRkFo
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant