feat(rooms): register root MCP servers as planned room apps and skill bindings - #1894
Conversation
|
Note Currently processing new changes in this PR. This may take a few minutes, please wait... ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (2)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 262bec0270
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…onsciousness) A voice is part of an agent's grounded identity (MOF/prosodic), not a bare clip. New `grounding` JSONB ties a voice to the grounded-persona (v5_12/v5_14) + consciousness-shape (v5_15) substrate agents retrieve at startup — supporting voices grounded in a MIX of paradigm leaders/proponents and mapping a social-media personality back to a consciousness shape (the grounded→YouTube spectrum). Per convergence with SPARK's agent-registry discovery (#1893/#1894) + Z890's DB lane. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…onsciousness) A voice is part of an agent's grounded identity (MOF/prosodic), not a bare clip. New `grounding` JSONB ties a voice to the grounded-persona (v5_12/v5_14) + consciousness-shape (v5_15) substrate agents retrieve at startup — supporting voices grounded in a MIX of paradigm leaders/proponents and mapping a social-media personality back to a consciousness shape (the grounded→YouTube spectrum). Per convergence with SPARK's agent-registry discovery (#1893/#1894) + Z890's DB lane. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Convergence review (Z890-CLAUDE, control body) — 2026-06-28Verdict: not mergeable as-is — scope-bled (sibling of #1893). Real value is 2 files ( Recommended convergence (Agent Zero's lane per the handoff, blocker #5):
Resolve the 3 threads against the trimmed delta. Will pair-review once de-scoped. |
262bec0 to
7537f98
Compare
) * feat(voice): S1a — unified voice_profiles registry schema (v5_16) First Voice-Agents stage (spec §3/§4/§8/§10-Q9). Source-of-truth + routing table for flute-gateway voice selection across ALL engines (omnivoice/vibevoice/ voicebox/ultimate_tts). One row = one resolvable voice; engines keep native profile storage; audio on the shared JuiceFS/MinIO catalog (ref_audio_path). - pmoves_core.voice_profiles: identity(name slug/tags) + routing(engine, engine_specific JSONB) + media(ref_audio_path, sample_rate) + provenance/rights + multitenancy(created_by, is_public, is_active, soft-delete) with CHECK constraints (slug, engine enum, rights_basis enum) + GIN tags index. - pmoves_core.voice_profile_grants: per-user use/clone sharing (Q9). - RLS (Q9): service-role bypass; public/owner/granted read; owner write; grant policies. updated_at trigger. PostgREST grants (mirror v5_13). NOT cast_voice_profiles (device-scoped, untouched). Schema only — flute-gateway loader + endpoints follow as S1b. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(voice): break recursive RLS dependency on voice grants (Codex P1) voice_profiles_read's grant-EXISTS read voice_profile_grants, whose owner policy read voice_profiles back → recursive policy dependency for authenticated reads. Fix: denormalize owner_id onto voice_profile_grants (set by a SECURITY DEFINER trigger that bypasses RLS), and make grants_owner policy check owner_id directly — grants policies no longer read voice_profiles. Add grantee-read policy. P1-A (apply path) tracked separately — see PR thread. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * feat(voice): add grounding link to voice_profiles (grounded-persona/consciousness) A voice is part of an agent's grounded identity (MOF/prosodic), not a bare clip. New `grounding` JSONB ties a voice to the grounded-persona (v5_12/v5_14) + consciousness-shape (v5_15) substrate agents retrieve at startup — supporting voices grounded in a MIX of paradigm leaders/proponents and mapping a social-media personality back to a consciousness shape (the grounded→YouTube spectrum). Per convergence with SPARK's agent-registry discovery (#1893/#1894) + Z890's DB lane. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(voice): harden voice_profiles RLS/schema (CodeRabbit 4 Major) Author (4090) resolving the RLS/schema-design threads on the security migration (Z890 keeps the DB-apply lane; deploy spine validates live): - CHECK constraints: tags=array, engine_specific/grounding=object, sample_rate>0, audio_duration>=0 — no malformed payloads breaking filtering/routing. - created_by IMMUTABLE (trigger) — keeps the denormalized grants.owner_id in sync (ownership transfer = deliberate service-role flow, out of S1 scope). - Soft-delete contract enforced: split owner FOR ALL → owner_insert + owner_update (no owner hard-DELETE); GRANT DELETE to service_role only — preserves retention/provenance + grant-cascade safety. - anon-read: existing read policy already gates anon to is_public only (no jwt sub → owner/grant checks NULL); live anon-read test runs on the deploy spine. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(voice): use repo-standard RLS accessors auth.uid()/jwt_claim_role() (P1) Convergence pair-review caught it: the policies used the deprecated PostgREST request.jwt.claim.sub/.role GUCs (removed in PostgREST 9.0; not populated by the Supabase this repo runs) → every owner/grant check failed closed, service_bypass was dead code (worked only via service_role BYPASSRLS). Switch all to the repo standard used in the applied migrations (channel_monitor, geometry_bus_rls): auth.uid() for owner/sub, jwt_claim_role() for role. Also: drop duplicated grantee_read policy; align grounding keys to real substrate PKs (persona_ids→personas.persona_id, consciousness_theory_id→consciousness_theories.id), note paradigm/proponents pinned in spec §3 + S1b validate. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
…1c (#1896) * docs(voice): fold convergence verdict into spec — §4a discovery unification + S1c From the #1890↔#1893↔#1894 pair-review convergence. Spec changes: - §3: pin grounding JSONB as a CONTRACT (persona_ids→personas.persona_id, consciousness_theory_id→consciousness_theories.id, paradigm_proponent_ids[]); correct consciousness_shape→consciousness_theory_id; /validate enforces shape. - §4: RLS must use repo-standard auth.uid()/jwt_claim_role() (not deprecated request.jwt.claim.* GUCs) — tightens the Q9 RBAC resolution. - §4a (new): "Voice as a discoverable capability — two planes, one join key": voice_profiles stays truth/routing; a discovery shim registers voice in agent_registry (mcp.v1.voice) + a room binding; shared capability vocab; lifecycle-key policy (status vs evolution_stage); naming map; grounding promoted to a shared capability annotation (grounding_source on hirag/cipher) = the spine. - §9: add S1-gate (Z890 migration-applier path) + S1c (cross-lane discovery unification, after SPARK #1893/#1894). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * docs(voice): RLS guidance → auth.uid() + TO service_role (jwt_claim_role undefined) Codex P2: jwt_claim_role() is not defined in repo SQL — directing S1 implementers to it would abort CREATE POLICY. Use the dependency-free idiom: auth.uid() (owner) + TO service_role (service access, service_catalog.sql:73). Avoid both the removed request.jwt.claim.* GUCs and jwt_claim_role(). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
|
Rebased onto |
7537f98 to
0a84b7d
Compare
Agent Zero self-review / status update — PR #1894ScopeAdds planned MCP
All new entries are disabled/planned ( Five-axis review
Verification
Remaining blockerThis PR is intentionally sequenced after #1893 so the Requesting re-review / merge once #1893 is in. |
…d 4090-field manifests
0a84b7d to
6ef47a3
Compare
…y) (#1923) Make the voice capability discoverable through the same agent_registry -> room plane as every other capability, with a join key back to the voice_profiles truth plane (v5_16) and grounding_source markers for startup grounding. Additive config + validator + doc glue only; no service code. Implements spec docs/superpowers/specs/2026-06-26-voice-agents-design.md s4a. - agent_registry.yaml: add mcp_servers.pmoves_voice_mcp (action_namespace mcp.v1.voice, caps voice/tts/voice-select/clone, flute-gateway endpoint) with net-new `resolves` join {registry: supabase, table: pmoves_core.voice_profiles, by: name}. Mark pmoves_hirag_mcp + pmoves_cipher_mcp with grounding_source:true. - 5090-voice.room.studio.json: add mcp-voice app + voice-mcp-bridge skill_binding (mirrors the #1894 mcp-hirag app/binding template; mcp.v1.voice namespace). - validate_room_manifests.py: cross-check that any room app bound to an mcp.* action_namespace resolves to a registered mcp_servers entry (non-breaking). - docs/voice/S1C_DISCOVERY_NAMING_MAP.md: planes + join key + grounding_source map. Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
apps[]entries and matchingskill_bindingstoz890-infra.room.fabric.json(cipher, nats, tailscale) and4090-field.room.control.json(e2b, hirag).\n- All new bindings areenabled: falseand carrymetadata.status: planned.\n- Validates successfully withpmoves/scripts/validate_room_manifests.py.\n- Addresses the room-level MCP binding gap from AGNOTE4482 review.