Block a user
jul31 session: five small fixes plus the voice.go/ipc decomposition
Read the whole batch. The decomposition is faithful. voice.go shrinks by 1300 lines, and the moved blocks (voicewire.go, actions_*.go, confirm.go, patterns.go) match what they replace. The ipc method table and UnimplementedCoreAPI beat the 42-arm switch and the hand-written lockedAPI. A new CoreAPI method now fails loudly instead of going silently unguarded. store/meta.go treating a marker-less DB that already holds vectors as a mismatch is the right call, and the reason is written down.
Version, authenticate and fully trace ecosystem calls
Query Praxis by canonical entity ref and back off enrichment retries
Cover ecosystem degraded modes with a shared fault-injection harness
Scan the LAN, bounded to configured subnets (#257)
Read and control the house through Home Assistant (#256)
Add a replayable full-system simulator on a fake clock (#284)
Normalize every intake path into one event envelope (#283)
Derive the cold-start unlock key from the passkey PRF, not the public key (#14)
Half-duplex capture and barge-in in mavwaked (#287)
Golden-audio STT tests against real whisper.cpp (#288)
Ship voice enrolment, and report speaker recognition as blocked (#255)
Meeting capture with an explicit start and stop (#253)
Vision: store and describe images through a shared media intake (#252)
Expose discovered MCP tools through the act allowlist (#251)
MCP client: connect out to external tool servers
Deploy a new build with verification and automatic rollback
Swap the resident model without restarting mavend
Read a web page when he names one, and watch a few on a timer (#259)
Read RSS and Atom feeds, and speak about them only when asked (#258)