feat(models): model registry reconciliation + persona seeds + readiness check - #741
Conversation
…nches Update gitlink pointers for 5 submodules to their security fix branches: - BoTZ: auth-gate /.well-known/agent.json (PR #70) - ToKenism-Multi: all P1/P2 cred defaults fixed (PR #46) - Agent-Zero: path containment + supervisord users (PR #8) - transcribe-and-fetch: openai v2 alignment + doc scrub (PR #44) - DoX: secrets externalized + honest 501 (PR #114) Also update review status doc with fix verification. All 7 P1 and 20 P2 findings resolved. 4 dependabot PRs merged. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ded service mappings Add Anthropic provider (claude-sonnet-4-5, claude-opus-4-5, claude-haiku-4-5) as persona backbone. Add TTS provider with 6 engines from Ultimate TTS Studio. Add 5 missing Ollama models from gpu-models.yaml (qwen3:32b, qwen3:1.7b, llama3.2:3b, codellama:7b, deepseek-coder:6.7b). Fix VRAM values to match gpu-models.yaml truth (qwen3:8b: 8000→6144, nomic-embed-text: 1000→512). Expand service-model mappings from 4 to 15+ services including hirag, archon, coding, orchestrator, vl_sentinel, tts, extract_worker, and more. Covers TAC branches B + C. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Copy persona seeds from pmoves/db/v5_14_seed_standard_personas.sql into the active Supabase initdb pipeline as 17_persona_seed.sql. Personas reference claude-sonnet-4-5 (Developer/Creator/Analyst/Tester), claude-opus-4-5 (Researcher/Coordinator/Security), and claude-haiku-4-5 (Archivist). Sequenced after model registry (12) to ensure model_preference references are valid. Preserves ON CONFLICT (name, version) idempotency. Covers TAC branch A. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add 10 models missing from gpu-models.yaml that exist in SQL and consume local GPU VRAM: qwen2.5:32b, qwen2.5:14b, qwen2-vl:7b, qwen3-reranker:4b, nemotron-mini, llama3.1, qwen3-embedding:4b/8b, embeddinggemma:300m. GPU Orchestrator needs these entries for VRAM scheduling on RTX 5090. Covers TAC branch D. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…y lookup Create persona_model_resolution view joining persona → model → provider for runtime resolution of which API endpoint to call for each persona. Also adds active_persona_summary convenience view. Grants SELECT to PostgREST anon/auth roles. Covers TAC branch F. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Create model_readiness_check.py that validates: - Supabase model_providers populated with ≥8 active providers - Supabase personas table populated with ≥8 rows - Ollama has expected local models pulled - TensorZero gateway operational - persona_model_resolution view returns valid data Add 'make model-readiness' target and wire into verify-all chain. Covers TAC branch E. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughAdds production-readiness artifacts: large model and persona DB seeds, two new persona→model resolution views, a Python model-readiness checker wired into Make, GPU model config additions, RLS/grant tightening, and documentation/TAC overlays for model/persona readiness. Changes
Sequence Diagram(s)sequenceDiagram
participant CLI as CLI: `make model-readiness`
participant Checker as ReadinessChecker
participant Supabase as Supabase<br/>(model_providers/personas/views)
participant Ollama as Ollama API
participant TensorZero as TensorZero<br/>(gateway)
CLI->>Checker: instantiate & run()
activate Checker
Checker->>Supabase: GET /rest/v1/model_providers (check_supabase_providers)
Supabase-->>Checker: providers list
Checker->>Supabase: GET /rest/v1/personas (check_supabase_personas)
Supabase-->>Checker: personas list
Checker->>Ollama: GET /api/tags (check_ollama)
Ollama-->>Checker: local models/tags
Checker->>TensorZero: GET /health (check_tensorzero)
TensorZero-->>Checker: health status
Checker->>Supabase: GET /rest/v1/persona_model_resolution (check_persona_resolution)
Supabase-->>Checker: resolved rows
Checker->>Checker: summarize results & set exit code
deactivate Checker
Checker-->>CLI: exit 0 / exit 1
Estimated code review effort🎯 5 (Critical) | ⏱️ ~120 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 inconclusive)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ 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.
Actionable comments posted: 10
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
pmoves/supabase/initdb/12_model_registry_seed.sql (1)
1062-1076:⚠️ Potential issue | 🟠 MajorModel lookups with
LIMIT 1are nondeterministic for mapping seeds.Selecting model IDs by
model_idplusLIMIT 1can bind mappings to arbitrary rows when duplicates exist across providers. That can silently route services to the wrong backend.Suggested fix pattern
DECLARE + v_ollama_local_provider_id UUID; v_qwen3_8b_id UUID; BEGIN + SELECT id INTO v_ollama_local_provider_id + FROM pmoves_core.model_providers + WHERE name = 'ollama_local'; + - SELECT id INTO v_qwen3_8b_id FROM pmoves_core.models WHERE model_id = 'qwen3:8b' LIMIT 1; + SELECT id INTO v_qwen3_8b_id + FROM pmoves_core.models + WHERE provider_id = v_ollama_local_provider_id + AND model_id = 'qwen3:8b'; + + IF v_qwen3_8b_id IS NULL THEN + RAISE EXCEPTION 'Missing model mapping source: ollama_local/qwen3:8b'; + END IF;Also applies to: 1227-1250
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@pmoves/supabase/initdb/12_model_registry_seed.sql` around lines 1062 - 1076, The SELECTs that populate variables like v_qwen3_8b_id, v_qwen2_5_32b_id, v_nemotron_id, v_qwen3_emb_4b_id, v_mistral_edge_id, v_phi3_edge_id, v_zai_id, v_openai_id, v_venice_id, v_groq_id and v_openrouter_id use "LIMIT 1" and are nondeterministic when duplicate model rows exist; change these lookups to deterministically identify a single row (e.g., add explicit provider/name qualifiers or an ORDER BY that prefers the intended provider, or use an exact name match instead of LIKE), and fail loudly if multiple matches remain (raise an exception or use a SELECT ... INTO with a check on FOUND_ROWS/COUNT and abort when count<>1) so seeds cannot silently map to the wrong backend; apply the same change pattern to the similar queries around lines 1227-1250.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@pmoves/docs/TAC/TAC_MODEL_INFRA_PERSONA_PROD_READINESS.md`:
- Line 60: Update the migration filename reference in the doc
TAC_MODEL_INFRA_PERSONA_PROD_READINESS.md: replace the incorrect short name
`20260301_persona_model_resolution.sql` with the actual migration filename
`20260301002000_persona_model_resolution.sql` (and search the document for any
other occurrences of the short name to correct them) so operators follow the
correct file in the execution plan.
- Around line 17-20: Update the "Current State Snapshot" section to reflect the
actual branch contents: remove or change the bullets that claim the
persona-model resolution view migration and the model readiness script + Make
target wiring are only local working-tree artifacts, and state that both are
included in this PR (and add a note about the deterministic verification
evidence bundle location or attach link/reference to the PR comment trail). Edit
the lines mentioning "persona-model resolution view migration", "model readiness
script + Make target wiring", and "deterministic verification evidence bundle"
so the status accurately matches the PR evidence.
In `@pmoves/Makefile`:
- Around line 1113-1114: The verify-all Makefile currently suppresses failures
for the model-readiness step by invoking "@$(MAKE) --no-print-directory
model-readiness" with a leading '-' prefix; remove the leading '-' so the
invocation is "@$(MAKE) --no-print-directory model-readiness" (no
failure-suppression) so that a failing model-readiness target properly fails
verify-all; locate the invocation under the verify-all/verify pipeline in the
Makefile to update the line invoking model-readiness.
In `@pmoves/supabase/initdb/12_model_registry_seed.sql`:
- Line 178: The provider metadata for tts_local declares 7 engines but only 6
TTS model rows exist; fix by either updating the metadata JSON '{"network":
"internal", "location": "local", "engines": 7}'::jsonb to engines: 6 or adding
the missing seventh model row to the seed so the tts_local provider entry and
the seeded models table are consistent (look for the tts_local provider metadata
and the TTS model INSERTs in this seed).
- Around line 1405-1415: The seed record inserted into
pmoves_core.model_providers (name '_seed_audit') should not be marked active;
change the INSERT so the active column is false (VALUES ... false ...) and
ensure the ON CONFLICT DO UPDATE does not flip it back to active — either stop
updating active in the DO UPDATE clause or explicitly set active = false there
(alongside updating metadata and updated_at) so the pseudo-provider is never
treated as an active, routable provider.
In `@pmoves/supabase/initdb/17_persona_seed.sql`:
- Around line 161-166: The upsert conflict handler currently only updates
description, system_prompt_template, tools_access, and behavior_weights, leaving
runtime config fields stale; update the DO UPDATE SET clause for the persona
upsert blocks (the INSERT ... ON CONFLICT (name, version) DO UPDATE SET section)
to also assign EXCLUDED.thread_type, EXCLUDED.model_preference,
EXCLUDED.temperature, EXCLUDED.max_tokens, EXCLUDED.is_active,
EXCLUDED.is_default, and any routing fields (e.g., EXCLUDED.routing_enabled,
EXCLUDED.routing_preference, EXCLUDED.routing_metadata) so that reseeds fully
reconcile persona runtime configuration, keeping updated_at = NOW().
In `@pmoves/supabase/migrations/20260301002000_persona_model_resolution.sql`:
- Around line 13-39: The view pmoves_core.persona_model_resolution is created
without explicit per-invoker security, so alter its creation to include WITH
(security_invoker = true) so the view runs with the caller's RLS context; update
the CREATE OR REPLACE VIEW statement for persona_model_resolution to add the
security_invoker property and do the same change for the other view that grants
postgrest_anon read access to ensure both views execute under the caller's RLS
rather than the view owner's.
In `@pmoves/tools/model_readiness_check.py`:
- Around line 130-131: The readiness checks currently call self._warn (e.g.,
"Ollama reachable" with ollama_url) which allows startup to return success;
change these to fail the readiness gate by replacing those self._warn calls with
a failing action — use self._error(...) if that helper exists (preserving the
same message and context) or raise SystemExit(1) / RuntimeError to abort startup
when Ollama (ollama_url), TensorZero, or persona_model_resolution checks fail;
apply the same change for the other occurrences referenced (around the checks
for TensorZero and persona_model_resolution).
- Around line 133-144: The current check uses substring matching (any(model in
name for name in pulled)) which allows false positives; instead normalize the
pulled model names to their base form and perform exact equality checks: when
building pulled (the set comprehension that currently does
m.get("name","").split(":")[0]), further normalize each entry by taking the
leading base token (e.g., split on "-" and take [0] or otherwise extract the
canonical base name) into a new set (e.g., pulled_base) and then change the loop
over critical models to use found = model in pulled_base and keep the same
_warn/_check calls.
- Around line 30-37: The http_get function (and the similar HTTP helper around
lines 40–51, e.g., http_post) currently calls urllib.request.urlopen on
user-controlled URLs; add a URL-scheme allowlist to reject any non-http/https
schemes before calling urlopen to prevent file://, ftp:// or custom handlers
from being processed. Use urllib.parse.urlparse(url).scheme to validate the
scheme and return None (or raise a clear error) when scheme not in {"http",
"https"} so urlopen is only invoked for safe schemes; apply the same validation
logic to the corresponding http_post helper to keep behavior consistent.
---
Outside diff comments:
In `@pmoves/supabase/initdb/12_model_registry_seed.sql`:
- Around line 1062-1076: The SELECTs that populate variables like v_qwen3_8b_id,
v_qwen2_5_32b_id, v_nemotron_id, v_qwen3_emb_4b_id, v_mistral_edge_id,
v_phi3_edge_id, v_zai_id, v_openai_id, v_venice_id, v_groq_id and
v_openrouter_id use "LIMIT 1" and are nondeterministic when duplicate model rows
exist; change these lookups to deterministically identify a single row (e.g.,
add explicit provider/name qualifiers or an ORDER BY that prefers the intended
provider, or use an exact name match instead of LIKE), and fail loudly if
multiple matches remain (raise an exception or use a SELECT ... INTO with a
check on FOUND_ROWS/COUNT and abort when count<>1) so seeds cannot silently map
to the wrong backend; apply the same change pattern to the similar queries
around lines 1227-1250.
ℹ️ Review info
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (11)
docs/AGENT_TRAIL.mdpmoves/Makefilepmoves/config/gpu-models.yamlpmoves/docs/AGENTS/AGNOTE4482.mdpmoves/docs/AGENTS/AGNOTE4482PHI.t1.mdpmoves/docs/AGENTS/AI_GRAPHITI_PROTOCOL.mdpmoves/docs/TAC/TAC_MODEL_INFRA_PERSONA_PROD_READINESS.mdpmoves/supabase/initdb/12_model_registry_seed.sqlpmoves/supabase/initdb/17_persona_seed.sqlpmoves/supabase/migrations/20260301002000_persona_model_resolution.sqlpmoves/tools/model_readiness_check.py
- Add 4 worked examples (Developer, Creator, Researcher, Analyst) showing model_preference, chit_attribution, and tool_allowlist - Document persona inheritance chain (seed SQL → Supabase row → agent_registry.yaml → runtime resolution view) - Add CHIT attribution configuration section - Add quick reference summary table for all 8 standard personas - Cross-reference 17_persona_seed.sql from PR #741 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
There was a problem hiding this comment.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
pmoves/supabase/initdb/12_model_registry_seed.sql (1)
19-33:⚠️ Potential issue | 🟠 MajorProvider upserts are only partially reconciliatory and can preserve stale
active/metadatastate.Current
ON CONFLICTclauses update only selected columns, so previous incorrect provider metadata or active flags may survive reseeds.🔧 Proposed fix pattern (apply to each provider upsert)
ON CONFLICT (name) DO UPDATE SET + type = EXCLUDED.type, api_base = EXCLUDED.api_base, + api_key_env_var = EXCLUDED.api_key_env_var, description = EXCLUDED.description, + active = EXCLUDED.active, + metadata = EXCLUDED.metadata, updated_at = NOW();Also applies to: 35-49, 51-66, 68-83, 85-100, 102-117, 119-134, 136-151, 153-168, 170-183
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@pmoves/supabase/initdb/12_model_registry_seed.sql` around lines 19 - 33, The upsert for pmoves_core.model_providers only updates a subset of columns so stale active/metadata/type/api_key_env_var values can persist; update the ON CONFLICT clause for the pmoves_core.model_providers INSERTs (e.g., the 'ollama_local' upsert and the other provider upserts) to DO UPDATE SET all mutable columns — at minimum type, api_base, api_key_env_var, description, active, metadata — and set updated_at = NOW() so each reseed fully reconciles provider state.pmoves/supabase/migrations/20260301001000_studio_board_rls_service_role.sql (1)
40-55:⚠️ Potential issue | 🟠 MajorRecreate
studio_board_service_role_allduring migration so hardening applies on upgraded databases.The
NOT EXISTSguard means existing environments keep the old policy definition, so this migration may not apply the new predicate everywhere.🔧 Proposed fix
- IF EXISTS ( - SELECT 1 FROM information_schema.tables - WHERE table_schema = 'public' AND table_name = 'studio_board' - ) AND NOT EXISTS ( - SELECT 1 FROM pg_policies - WHERE schemaname = 'public' - AND tablename = 'studio_board' - AND policyname = 'studio_board_service_role_all' - ) THEN + IF EXISTS ( + SELECT 1 FROM information_schema.tables + WHERE table_schema = 'public' AND table_name = 'studio_board' + ) THEN + DROP POLICY IF EXISTS studio_board_service_role_all ON public.studio_board; CREATE POLICY studio_board_service_role_all ON public.studio_board FOR ALL TO service_role USING (auth.role() = 'service_role') WITH CHECK (auth.role() = 'service_role'); END IF;🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@pmoves/supabase/migrations/20260301001000_studio_board_rls_service_role.sql` around lines 40 - 55, The migration currently skips creating the updated policy when an older policy named studio_board_service_role_all already exists; change it to ensure the new hardening applies by removing the NOT EXISTS guard and instead dropping any existing policy then creating the new one: inside the same IF EXISTS (...) check for the public.studio_board table, add a statement DROP POLICY IF EXISTS studio_board_service_role_all ON public.studio_board; immediately followed by the CREATE POLICY studio_board_service_role_all ... FOR ALL TO service_role USING (auth.role() = 'service_role') WITH CHECK (auth.role() = 'service_role'); so the migration always replaces the policy definition on upgrade.
🧹 Nitpick comments (2)
pmoves/docs/TAC/TAC_MODEL_INFRA_PERSONA_PROD_READINESS.md (1)
92-94: Clarify whetherverify-allalready includesmodel-readinessto avoid workflow drift.If
verify-allnow runs the readiness gate, listing both as mandatory steps can create conflicting operator guidance.As per coding guidelines, "Check docs for operational accuracy: Keep status claims aligned with evidence in runbooks and smokes. Flag command drift across Windows/WSL/Linux instructions."📝 Proposed wording
1. `make -C pmoves supabase-bootstrap` -2. `make -C pmoves model-readiness` -3. `make -C pmoves verify-all` +2. `make -C pmoves verify-all` <!-- includes model-readiness gate -->🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@pmoves/docs/TAC/TAC_MODEL_INFRA_PERSONA_PROD_READINESS.md` around lines 92 - 94, Clarify whether the Make target verify-all invokes the model-readiness target and update the three-step sequence accordingly: inspect the Makefile targets (verify-all, model-readiness, supabase-bootstrap) to determine if verify-all depends on or runs model-readiness, then edit the doc lines listing the commands so they accurately reflect reality—either remove model-readiness if verify-all already runs it or annotate the steps to state that verify-all includes (or does not include) the model-readiness gate to avoid operator confusion.pmoves/tools/model_readiness_check.py (1)
64-93: Add explicit return type hints to__init__,_check,_warn, andmain()for consistency.These methods are missing return type annotations while other methods in the class already have them. Per coding guidelines, Python code should use type hints.
🔧 Proposed fix
class ReadinessChecker: - def __init__(self, supabase_url: str, supabase_key: str, - ollama_url: str, tensorzero_url: str): + def __init__(self, supabase_url: str, supabase_key: str, + ollama_url: str, tensorzero_url: str) -> None: @@ - def _check(self, name: str, ok: bool, detail: str = ""): + def _check(self, name: str, ok: bool, detail: str = "") -> None: @@ - def _warn(self, name: str, detail: str = ""): + def _warn(self, name: str, detail: str = "") -> None: @@ -def main(): +def main() -> None:🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@pmoves/tools/model_readiness_check.py` around lines 64 - 93, Add explicit return type annotations to the listed methods for consistency: annotate ReadinessChecker.__init__ with -> None, ReadinessChecker._check with -> None, ReadinessChecker._warn with -> None, and the module-level main() function with -> int (or -> None if main currently doesn't return an exit code); update their signatures accordingly and ensure imports/types still resolve. This keeps type hints consistent with other methods in the class and the project's typing guidelines.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@pmoves/supabase/migrations/20260301002000_persona_model_resolution.sql`:
- Around line 48-53: The section comment "RLS Policy (service_role read access)"
is misleading because the GRANT targets postgrest_anon and postgrest_auth_user;
update the comment or the grants so they match: either change the section header
to reflect postgrest read access (e.g., "RLS Policy (postgrest read access)") or
replace the GRANT target(s) with the intended service role(s); locate the
comment "RLS Policy (service_role read access)" and the GRANT SELECT ON
pmoves_core.persona_model_resolution TO postgrest_anon, postgrest_auth_user and
make them consistent.
---
Outside diff comments:
In `@pmoves/supabase/initdb/12_model_registry_seed.sql`:
- Around line 19-33: The upsert for pmoves_core.model_providers only updates a
subset of columns so stale active/metadata/type/api_key_env_var values can
persist; update the ON CONFLICT clause for the pmoves_core.model_providers
INSERTs (e.g., the 'ollama_local' upsert and the other provider upserts) to DO
UPDATE SET all mutable columns — at minimum type, api_base, api_key_env_var,
description, active, metadata — and set updated_at = NOW() so each reseed fully
reconciles provider state.
In `@pmoves/supabase/migrations/20260301001000_studio_board_rls_service_role.sql`:
- Around line 40-55: The migration currently skips creating the updated policy
when an older policy named studio_board_service_role_all already exists; change
it to ensure the new hardening applies by removing the NOT EXISTS guard and
instead dropping any existing policy then creating the new one: inside the same
IF EXISTS (...) check for the public.studio_board table, add a statement DROP
POLICY IF EXISTS studio_board_service_role_all ON public.studio_board;
immediately followed by the CREATE POLICY studio_board_service_role_all ... FOR
ALL TO service_role USING (auth.role() = 'service_role') WITH CHECK (auth.role()
= 'service_role'); so the migration always replaces the policy definition on
upgrade.
---
Nitpick comments:
In `@pmoves/docs/TAC/TAC_MODEL_INFRA_PERSONA_PROD_READINESS.md`:
- Around line 92-94: Clarify whether the Make target verify-all invokes the
model-readiness target and update the three-step sequence accordingly: inspect
the Makefile targets (verify-all, model-readiness, supabase-bootstrap) to
determine if verify-all depends on or runs model-readiness, then edit the doc
lines listing the commands so they accurately reflect reality—either remove
model-readiness if verify-all already runs it or annotate the steps to state
that verify-all includes (or does not include) the model-readiness gate to avoid
operator confusion.
In `@pmoves/tools/model_readiness_check.py`:
- Around line 64-93: Add explicit return type annotations to the listed methods
for consistency: annotate ReadinessChecker.__init__ with -> None,
ReadinessChecker._check with -> None, ReadinessChecker._warn with -> None, and
the module-level main() function with -> int (or -> None if main currently
doesn't return an exit code); update their signatures accordingly and ensure
imports/types still resolve. This keeps type hints consistent with other methods
in the class and the project's typing guidelines.
ℹ️ Review info
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (7)
pmoves/Makefilepmoves/docs/TAC/TAC_MODEL_INFRA_PERSONA_PROD_READINESS.mdpmoves/supabase/initdb/12_model_registry_seed.sqlpmoves/supabase/initdb/17_persona_seed.sqlpmoves/supabase/migrations/20260301001000_studio_board_rls_service_role.sqlpmoves/supabase/migrations/20260301002000_persona_model_resolution.sqlpmoves/tools/model_readiness_check.py
🚧 Files skipped from review as they are similar to previous changes (1)
- pmoves/Makefile
…eplacement - update model_providers upserts to refresh mutable fields (type/api_base/api_key_env_var/description/active/metadata)\n- always replace studio_board_service_role_all policy in migration for upgrade parity\n- clarify persona resolution grant comment to match PostgREST role grants\n- add readiness-check type hints/constants and align TAC verify steps
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@pmoves/supabase/migrations/20260301001000_studio_board_rls_service_role.sql`:
- Line 10: Add explicit REVOKE statements to remove direct privileges previously
granted to anon and authenticated so only service_role retains access: revoke
SELECT, INSERT, UPDATE, DELETE ON TABLE studio_board FROM anon, authenticated;
revoke USAGE, SELECT ON SEQUENCE studio_board_id_seq FROM anon, authenticated;
and if schema-level grants exist revoke USAGE ON SCHEMA public FROM anon,
authenticated; keep the GRANT USAGE ON SCHEMA public TO service_role and ensure
these REVOKE statements are applied in the migration alongside the RLS policy
changes (referencing studio_board, studio_board_id_seq, anon, authenticated,
service_role, and the existing GRANT USAGE ON SCHEMA public line).
In `@pmoves/tools/model_readiness_check.py`:
- Around line 170-180: The reachability check is failing because http_get
swallows non-JSON successful responses (catching json.JSONDecodeError and
returning None); update the logic so reachability is judged from HTTP success,
not JSON parsing: either change http_get to return the raw response/text (or a
(status_code, text) tuple) on 2xx responses even if JSON parsing fails, or add a
new helper (e.g., http_get_raw) that returns response.text for any successful
status; then update check_tensorzero (the code calling http_get in the shown
block) to use the raw-response helper (or check status_code) for reachability
and only attempt JSON parsing when needed, leaving the existing
_check("TensorZero health"/"TensorZero reachable") calls intact.
ℹ️ Review info
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (5)
pmoves/docs/TAC/TAC_MODEL_INFRA_PERSONA_PROD_READINESS.mdpmoves/supabase/initdb/12_model_registry_seed.sqlpmoves/supabase/migrations/20260301001000_studio_board_rls_service_role.sqlpmoves/supabase/migrations/20260301002000_persona_model_resolution.sqlpmoves/tools/model_readiness_check.py
✅ Files skipped from review due to trivial changes (1)
- pmoves/docs/TAC/TAC_MODEL_INFRA_PERSONA_PROD_READINESS.md
🚧 Files skipped from review as they are similar to previous changes (1)
- pmoves/supabase/migrations/20260301002000_persona_model_resolution.sql
- Add 4 worked examples (Developer, Creator, Researcher, Analyst) showing model_preference, chit_attribution, and tool_allowlist - Document persona inheritance chain (seed SQL → Supabase row → agent_registry.yaml → runtime resolution view) - Add CHIT attribution configuration section - Add quick reference summary table for all 8 standard personas - Cross-reference 17_persona_seed.sql from PR #741 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (1)
pmoves/supabase/migrations/20260301001000_studio_board_rls_service_role.sql (1)
14-27: Consolidate duplicatestudio_boardexistence checks into one block.The two identical
IF EXISTSguards can be merged to reduce duplication and keep privilege/RLS changes together.♻️ Suggested simplification
- IF EXISTS ( - SELECT 1 FROM information_schema.tables - WHERE table_schema = 'public' AND table_name = 'studio_board' - ) THEN - EXECUTE 'REVOKE SELECT, INSERT, UPDATE, DELETE ON TABLE public.studio_board FROM anon, authenticated'; - END IF; - - IF EXISTS ( - SELECT 1 FROM information_schema.tables - WHERE table_schema = 'public' AND table_name = 'studio_board' - ) THEN + IF EXISTS ( + SELECT 1 FROM information_schema.tables + WHERE table_schema = 'public' AND table_name = 'studio_board' + ) THEN + EXECUTE 'REVOKE SELECT, INSERT, UPDATE, DELETE ON TABLE public.studio_board FROM anon, authenticated'; EXECUTE 'GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE public.studio_board TO service_role'; EXECUTE 'ALTER TABLE public.studio_board ENABLE ROW LEVEL SECURITY'; END IF;🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@pmoves/supabase/migrations/20260301001000_studio_board_rls_service_role.sql` around lines 14 - 27, The migration repeats the same IF EXISTS check for the table studio_board; consolidate them by keeping a single IF EXISTS (checking information_schema for table_schema = 'public' AND table_name = 'studio_board') and place the privilege and RLS statements inside it in the correct order—execute the REVOKE from anon and authenticated, then EXECUTE the GRANT to service_role, and then EXECUTE the ALTER TABLE public.studio_board ENABLE ROW LEVEL SECURITY—so all privilege/RLS changes for public.studio_board are performed under one existence guard.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@pmoves/tools/model_readiness_check.py`:
- Around line 115-136: The check_supabase_providers flow is missing enforcement
of the minimum registry seeding thresholds for models and
service_model_mappings; add two additional HTTP GET queries using
http_get_supabase to fetch "/models" and "/service_model_mappings" (reuse
self.supabase_url and self.supabase_key), compute counts (len(list) or 0 if
None), and call self._check to assert models count >= 35 with a descriptive
message and service_model_mappings count >= 15 with a descriptive message; use
the same pattern as the existing provider checks and the same helper self._check
so failures report comparable contextual strings (refer to
check_supabase_providers, http_get_supabase, and self._check).
- Around line 206-218: The current block gated by if isinstance(data, list):
silently skips checks when persona_model_resolution returns JSON that is not a
list; add an else branch after that if to explicitly fail the check using
self._check (e.g., self._check("persona_model_resolution payload shape", False,
f"expected list but got {type(data).__name__}")) so the method records a failing
readiness check for unexpected payload shapes; keep using the same method
context (the code that calls self._check and self._warn inside the existing
block) and return or exit that branch after logging the failure.
---
Nitpick comments:
In `@pmoves/supabase/migrations/20260301001000_studio_board_rls_service_role.sql`:
- Around line 14-27: The migration repeats the same IF EXISTS check for the
table studio_board; consolidate them by keeping a single IF EXISTS (checking
information_schema for table_schema = 'public' AND table_name = 'studio_board')
and place the privilege and RLS statements inside it in the correct
order—execute the REVOKE from anon and authenticated, then EXECUTE the GRANT to
service_role, and then EXECUTE the ALTER TABLE public.studio_board ENABLE ROW
LEVEL SECURITY—so all privilege/RLS changes for public.studio_board are
performed under one existence guard.
ℹ️ Review info
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (2)
pmoves/supabase/migrations/20260301001000_studio_board_rls_service_role.sqlpmoves/tools/model_readiness_check.py
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (1)
pmoves/supabase/migrations/20260301001000_studio_board_rls_service_role.sql (1)
14-27: Consider consolidating duplicate IF EXISTS checks.Lines 14-19 and 21-27 both check for the same condition (
table_name = 'studio_board'). These could be merged into a single IF block for clarity.♻️ Suggested consolidation
IF EXISTS ( SELECT 1 FROM information_schema.tables WHERE table_schema = 'public' AND table_name = 'studio_board' ) THEN EXECUTE 'REVOKE ALL PRIVILEGES ON TABLE public.studio_board FROM anon, authenticated'; - END IF; - - IF EXISTS ( - SELECT 1 FROM information_schema.tables - WHERE table_schema = 'public' AND table_name = 'studio_board' - ) THEN EXECUTE 'GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE public.studio_board TO service_role'; EXECUTE 'ALTER TABLE public.studio_board ENABLE ROW LEVEL SECURITY'; END IF;🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@pmoves/supabase/migrations/20260301001000_studio_board_rls_service_role.sql` around lines 14 - 27, Combine the two duplicate IF EXISTS checks that both test for table_name = 'studio_board' into a single IF block: check the information_schema.tables once and inside that block execute the REVOKE ALL PRIVILEGES ... FROM anon, authenticated, then execute the GRANT SELECT, INSERT, UPDATE, DELETE ... TO service_role and the ALTER TABLE public.studio_board ENABLE ROW LEVEL SECURITY statements; update the block surrounding these EXECUTE calls (referencing the IF EXISTS, the EXECUTE 'REVOKE ALL PRIVILEGES ON TABLE public.studio_board FROM anon, authenticated', EXECUTE 'GRANT ... TO service_role', and EXECUTE 'ALTER TABLE public.studio_board ENABLE ROW LEVEL SECURITY') so all three operations run under the single conditional.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@pmoves/tools/model_readiness_check.py`:
- Around line 188-190: The code assumes the HTTP response `data` is a dict and
directly calls data.get("models", []), which can raise AttributeError if
`http_get()` returns non-dict JSON; update the logic in the function where
`models` and `pulled_base` are computed to first verify `data` is a mapping
(e.g., isinstance(data, dict)); if not, set `models = []`, log or capture the
invalid payload, and call self._check("Ollama responding", False, "invalid/
unexpected payload") so the readiness check fails gracefully instead of raising;
ensure the subsequent usage of `pulled_base` and the existing self._check call
handle the empty list case.
---
Nitpick comments:
In `@pmoves/supabase/migrations/20260301001000_studio_board_rls_service_role.sql`:
- Around line 14-27: Combine the two duplicate IF EXISTS checks that both test
for table_name = 'studio_board' into a single IF block: check the
information_schema.tables once and inside that block execute the REVOKE ALL
PRIVILEGES ... FROM anon, authenticated, then execute the GRANT SELECT, INSERT,
UPDATE, DELETE ... TO service_role and the ALTER TABLE public.studio_board
ENABLE ROW LEVEL SECURITY statements; update the block surrounding these EXECUTE
calls (referencing the IF EXISTS, the EXECUTE 'REVOKE ALL PRIVILEGES ON TABLE
public.studio_board FROM anon, authenticated', EXECUTE 'GRANT ... TO
service_role', and EXECUTE 'ALTER TABLE public.studio_board ENABLE ROW LEVEL
SECURITY') so all three operations run under the single conditional.
ℹ️ Review info
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (2)
pmoves/supabase/migrations/20260301001000_studio_board_rls_service_role.sqlpmoves/tools/model_readiness_check.py
| models = data.get("models", []) | ||
| pulled_base = {m.get("name", "").split(":")[0].strip().lower() for m in models if m.get("name")} | ||
| self._check("Ollama responding", True, f"{len(models)} models loaded") |
There was a problem hiding this comment.
Guard Ollama payload shape before dereferencing.
At Line 188, data.get("models", []) assumes http_get() returned a dict. If /api/tags returns valid non-object JSON, this can crash readiness with AttributeError instead of recording a failed check.
Proposed hardening
def check_ollama(self) -> None:
"""Check Ollama has expected local models pulled."""
print("\n[3] Ollama local models")
data = http_get(f"{self.ollama_url}/api/tags")
if data is None:
self._check("Ollama reachable", False, f"cannot reach {self.ollama_url}")
return
+ if not isinstance(data, dict):
+ self._check("Ollama payload format", False,
+ f"expected JSON object, got {type(data).__name__}")
+ return
- models = data.get("models", [])
- pulled_base = {m.get("name", "").split(":")[0].strip().lower() for m in models if m.get("name")}
+ models = data.get("models")
+ if not isinstance(models, list):
+ self._check("Ollama payload format", False, "missing models array")
+ return
+ pulled_base = {
+ m.get("name", "").split(":")[0].strip().lower()
+ for m in models
+ if isinstance(m, dict) and m.get("name")
+ }
self._check("Ollama responding", True, f"{len(models)} models loaded")🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@pmoves/tools/model_readiness_check.py` around lines 188 - 190, The code
assumes the HTTP response `data` is a dict and directly calls data.get("models",
[]), which can raise AttributeError if `http_get()` returns non-dict JSON;
update the logic in the function where `models` and `pulled_base` are computed
to first verify `data` is a mapping (e.g., isinstance(data, dict)); if not, set
`models = []`, log or capture the invalid payload, and call self._check("Ollama
responding", False, "invalid/ unexpected payload") so the readiness check fails
gracefully instead of raising; ensure the subsequent usage of `pulled_base` and
the existing self._check call handle the empty list case.
- Add 4 worked examples (Developer, Creator, Researcher, Analyst) showing model_preference, chit_attribution, and tool_allowlist - Document persona inheritance chain (seed SQL → Supabase row → agent_registry.yaml → runtime resolution view) - Add CHIT attribution configuration section - Add quick reference summary table for all 8 standard personas - Cross-reference 17_persona_seed.sql from PR #741 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ce fixes (#742) * docs(agents): update gap analysis with Phase 1 completions - Mark Phase 1 roadmap items as complete (model registry, persona seeds, GPU models YAML, service-model mappings) - Update CHIT integration status from None to Partial - Add A2A MCP foundation status - Update security hooks as implemented - Refresh date to 2026-03-01 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs(agents): add cross-references between operator docs - AGENT_CONTEXT_PATTERNS: add hook portability warning for Windows - CODEX_CIPHER_MEMORY: add cipher categories table for quick reference - CODEX_OPERATOR_HOME: add known gaps link to gap analysis - CODEX_RUNTIME_PROTOCOL: add Codex-Claude collision handling section Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs(agents): create README.md index for 69-file directory Add a start-here index document that catalogs all 69 files in the AGENTS directory with descriptions and category groupings. Provides newcomers a navigation map for the agent documentation corpus. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs(agents): add concrete persona seed examples to PERSONAS.md - Add 4 worked examples (Developer, Creator, Researcher, Analyst) showing model_preference, chit_attribution, and tool_allowlist - Document persona inheritance chain (seed SQL → Supabase row → agent_registry.yaml → runtime resolution view) - Add CHIT attribution configuration section - Add quick reference summary table for all 8 standard personas - Cross-reference 17_persona_seed.sql from PR #741 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(registry): complete CHIT toggle coverage and Hi-RAG port split - Add chit_toggles (encode, sign, bus_emit) to 9 infrastructure agents: nats-init, supabase-db, minio, qdrant, meilisearch, neo4j, prometheus, grafana, loki (all disabled — infra agents don't produce CHIT events) - Add gpu_port: 8087 to hi-rag-gateway for v1/v2 port split - Achieves 60/60 CHIT toggle coverage across all registered agents Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs(agents): update SUBMODULE_CODEX_HOMES naming convention docs - Document naming conventions for codex home files - Add orphan tracking guidance for unmapped submodules - Expand directory structure examples Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs(agents): align persona status, topology ports, and gap metadata --------- Co-authored-by: Shaela Bello <slbello@uncg.edu> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Resolve 10 conflicts from #741-#745 merge batch: - Submodules (transcribe-and-fetch, cipher): keep main pointers - A2A server.py/test_server.py: keep Hardened (B-3 discovery auth fix) - 01_public_init.sql: keep Hardened (B-1 RLS auth.role() fix) - 12_model_registry_seed.sql: keep main (expanded registry) - Studio board RLS migration: keep main (stricter migration) - Persona model resolution migration: keep main (latest view) - model_readiness_check.py: keep main (expanded from #741) - TAC doc: keep main (Phase 1 completion updates) Security fixes from Hardened preserved, feature additions from main included. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* chore(submodules): bump transcribe-and-fetch + cipher for A2A parity (#745) * chore(submodules): bump transcribe-and-fetch and cipher for a2a auth parity * chore(submodules): bump transcribe-and-fetch and cipher to merge-ready A2A heads --------- Co-authored-by: Shaela Bello <slbello@uncg.edu> * fix(a2a): secure discovery/task APIs and align with upstream agent-card path (#744) * fix(security): use HMAC for CHIT proofs * docs(security): add A2A discovery auth sweep findings * fix(security): update submodule pointers to 2026-03-01 review fix branches Update gitlink pointers for 5 submodules to their security fix branches: - BoTZ: auth-gate /.well-known/agent.json (PR #70) - ToKenism-Multi: all P1/P2 cred defaults fixed (PR #46) - Agent-Zero: path containment + supervisord users (PR #8) - transcribe-and-fetch: openai v2 alignment + doc scrub (PR #44) - DoX: secrets externalized + honest 501 (PR #114) Also update review status doc with fix verification. All 7 P1 and 20 P2 findings resolved. 4 dependabot PRs merged. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * chore(env): require dotnet sdk in bootstrap preflight * fix(security): auth-gate agent-zero A2A discovery endpoint * fix(security): HMAC CHIT proofs + A2A discovery auth audit + dotnet preflight (#736) * fix(security): use HMAC for CHIT proofs * docs(security): add A2A discovery auth sweep findings * chore(env): require dotnet sdk in bootstrap preflight --------- Co-authored-by: Shaela Bello <slbello@uncg.edu> * chore(deps): bump multer (#735) Bumps the npm_and_yarn group with 1 update in the /CATACLYSM_STUDIOS_INC/L4-PLATFORM/provisions/docker-stacks/jellyfin-ai/api-gateway directory: [multer](https://github.com/expressjs/multer). Updates `multer` from 2.0.2 to 2.1.0 - [Release notes](https://github.com/expressjs/multer/releases) - [Changelog](https://github.com/expressjs/multer/blob/main/CHANGELOG.md) - [Commits](expressjs/multer@v2.0.2...v2.1.0) --- updated-dependencies: - dependency-name: multer dependency-version: 2.1.0 dependency-type: direct:production dependency-group: npm_and_yarn ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * fix(chit): correct FlOO$ PYTHONPATH for pr-monitor pipeline * feat(chit): CHIT-signed Graphiti trail + skill pairing awareness (#739) * fix(security): use HMAC for CHIT proofs * docs(security): add A2A discovery auth sweep findings * fix(security): update submodule pointers to 2026-03-01 review fix branches Update gitlink pointers for 5 submodules to their security fix branches: - BoTZ: auth-gate /.well-known/agent.json (PR #70) - ToKenism-Multi: all P1/P2 cred defaults fixed (PR #46) - Agent-Zero: path containment + supervisord users (PR #8) - transcribe-and-fetch: openai v2 alignment + doc scrub (PR #44) - DoX: secrets externalized + honest 501 (PR #114) Also update review status doc with fix verification. All 7 P1 and 20 P2 findings resolved. 4 dependabot PRs merged. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * chore(env): require dotnet sdk in bootstrap preflight * feat(chit): add CHIT-signed Graphiti trail tooling Add provenance signing for agent trail entries using CHIT HMAC: - sign_trail.py: CLI tool to create and sign trail entries - PostToolUse hook for automatic signing on trail file writes - /chit:sign-trail skill command for interactive use - Preflight check for dotnet SDK (required by CHIT crypto) - CLAUDE.md documentation for trail signing workflow - Settings.json hook registration Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Shaela Bello <slbello@uncg.edu> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> * fix(runtime): service networking, healthchecks, SQL, Makefile hardening (#740) * fix(security): use HMAC for CHIT proofs * docs(security): add A2A discovery auth sweep findings * fix(security): update submodule pointers to 2026-03-01 review fix branches Update gitlink pointers for 5 submodules to their security fix branches: - BoTZ: auth-gate /.well-known/agent.json (PR #70) - ToKenism-Multi: all P1/P2 cred defaults fixed (PR #46) - Agent-Zero: path containment + supervisord users (PR #8) - transcribe-and-fetch: openai v2 alignment + doc scrub (PR #44) - DoX: secrets externalized + honest 501 (PR #114) Also update review status doc with fix verification. All 7 P1 and 20 P2 findings resolved. 4 dependabot PRs merged. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * chore(env): require dotnet sdk in bootstrap preflight * fix(compose): networking, healthchecks, and env hardening - Fix external compose service networking and port bindings - Add missing healthcheck configurations to n8n compose - Update env.shared.example with new required variables - Harden docker-compose.yml service definitions Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(services): auth, healthchecks, and dependency updates - Agent Zero: Dockerfile non-root hardening, MCP server auth fixes - service_registry: improve service discovery and health reporting - evo-controller: add healthcheck endpoint and startup guards - flute-gateway: fix import path - render-webhook: update deps, add input validation - retrieval-eval: add health and metrics endpoints Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(sql): RLS policies, model registry seeds, and supabase config - Tighten RLS policies for public_init and geometry tables - Update model registry seed data with current model versions - Add studio board RLS migration for service_role access - Add supabase .gitignore and config.toml for local dev Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(tooling): Makefile targets, smoke tests, and operational scripts - Makefile: add sign-trail, volume-reset, and infra targets - smoke.ps1: expand service coverage and timeout handling - with-env.sh: support multi-tier env loading - bringup_with_ui.sh: improve startup sequencing - chit_security.py: fix HMAC signing edge cases - retro_flightcheck.py: add new validation checks - capture_evidence.sh: new script for PR evidence collection - AI_GRAPHITI_PROTOCOL.md: document agent trail protocol - pr-monitor.md: update skill command definition Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(submodules): update BoTZ-gateway and Cipher pointers Update submodule pointers to latest reviewed commits from 2026-03-01 security sweep. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs(security): 2026-03-01 submodule security reviews and agent notes - 5 submodule security reviews (Agent Zero, BoTZ, DoX, ToKenism, transcribe-and-fetch) - Security queue tracker and sitrep JSON - AGNOTE4482 FlOO$ and Flute agent notes - CHIT review-sweep skill command and post-review hook Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Shaela Bello <slbello@uncg.edu> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> * docs(agents): overlay TAC model/persona readiness into graphiti protocol * docs(agents): correct TAC status wording for local staged artifacts * feat(models): reconcile model registry with Anthropic, TTS, and expanded service mappings Add Anthropic provider (claude-sonnet-4-5, claude-opus-4-5, claude-haiku-4-5) as persona backbone. Add TTS provider with 6 engines from Ultimate TTS Studio. Add 5 missing Ollama models from gpu-models.yaml (qwen3:32b, qwen3:1.7b, llama3.2:3b, codellama:7b, deepseek-coder:6.7b). Fix VRAM values to match gpu-models.yaml truth (qwen3:8b: 8000→6144, nomic-embed-text: 1000→512). Expand service-model mappings from 4 to 15+ services including hirag, archon, coding, orchestrator, vl_sentinel, tts, extract_worker, and more. Covers TAC branches B + C. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat(personas): integrate 8 standard persona seeds into initdb pipeline Copy persona seeds from pmoves/db/v5_14_seed_standard_personas.sql into the active Supabase initdb pipeline as 17_persona_seed.sql. Personas reference claude-sonnet-4-5 (Developer/Creator/Analyst/Tester), claude-opus-4-5 (Researcher/Coordinator/Security), and claude-haiku-4-5 (Archivist). Sequenced after model registry (12) to ensure model_preference references are valid. Preserves ON CONFLICT (name, version) idempotency. Covers TAC branch A. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat(gpu): sync gpu-models.yaml with SQL model registry Add 10 models missing from gpu-models.yaml that exist in SQL and consume local GPU VRAM: qwen2.5:32b, qwen2.5:14b, qwen2-vl:7b, qwen3-reranker:4b, nemotron-mini, llama3.1, qwen3-embedding:4b/8b, embeddinggemma:300m. GPU Orchestrator needs these entries for VRAM scheduling on RTX 5090. Covers TAC branch D. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat(db): add persona-model resolution view for runtime agent identity lookup Create persona_model_resolution view joining persona → model → provider for runtime resolution of which API endpoint to call for each persona. Also adds active_persona_summary convenience view. Grants SELECT to PostgREST anon/auth roles. Covers TAC branch F. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat(ops): add model-readiness check and Make target Create model_readiness_check.py that validates: - Supabase model_providers populated with ≥8 active providers - Supabase personas table populated with ≥8 rows - Ollama has expected local models pulled - TensorZero gateway operational - persona_model_resolution view returns valid data Add 'make model-readiness' target and wire into verify-all chain. Covers TAC branch E. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(db): harden model/persona seed determinism and view security * fix(ops): enforce readiness gate and close TAC doc drift * fix(a2a): harden discovery/task auth and add agent-card endpoint * fix(sql): harden studio_board RLS policy for service_role only * fix(chat-relay): lazy-load supabase client to avoid path shadow in tests * fix(ci): avoid hard failures in compose validation and yt docs tests * fix(pmoves-yt): make boto3 optional at import time for test collection * fix(pmoves-yt): stub tenacity when unavailable in CI test env * chore(submodule): bump PMOVES-Agent-Zero for canonical agent-card parity * chore(pr-scope): drop transcribe-and-fetch and cipher gitlink bumps from #744 * fix(a2a): address review blockers — RLS predicate, fail-closed key gate, discovery auth B-1: studio_board RLS policy now restricts to service_role instead of using(true) B-2: model-registry SUPABASE_SERVICE_KEY uses :? (fail-closed) instead of :- (empty) B-3: discover_agents endpoint uses _require_discovery_auth instead of _require_task_auth Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: Shaela Bello <slbello@uncg.edu> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: Shaela Bello <slbello@uncg.edu> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* fix(security): auth-gate agent-zero A2A discovery endpoint * fix(security): HMAC CHIT proofs + A2A discovery auth audit + dotnet preflight (#736) * fix(security): use HMAC for CHIT proofs * docs(security): add A2A discovery auth sweep findings * chore(env): require dotnet sdk in bootstrap preflight --------- Co-authored-by: Shaela Bello <slbello@uncg.edu> * chore(deps): bump multer (#735) Bumps the npm_and_yarn group with 1 update in the /CATACLYSM_STUDIOS_INC/L4-PLATFORM/provisions/docker-stacks/jellyfin-ai/api-gateway directory: [multer](https://github.com/expressjs/multer). Updates `multer` from 2.0.2 to 2.1.0 - [Release notes](https://github.com/expressjs/multer/releases) - [Changelog](https://github.com/expressjs/multer/blob/main/CHANGELOG.md) - [Commits](expressjs/multer@v2.0.2...v2.1.0) --- updated-dependencies: - dependency-name: multer dependency-version: 2.1.0 dependency-type: direct:production dependency-group: npm_and_yarn ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * fix(chit): correct FlOO$ PYTHONPATH for pr-monitor pipeline * feat(chit): CHIT-signed Graphiti trail + skill pairing awareness (#739) * fix(security): use HMAC for CHIT proofs * docs(security): add A2A discovery auth sweep findings * fix(security): update submodule pointers to 2026-03-01 review fix branches Update gitlink pointers for 5 submodules to their security fix branches: - BoTZ: auth-gate /.well-known/agent.json (PR #70) - ToKenism-Multi: all P1/P2 cred defaults fixed (PR #46) - Agent-Zero: path containment + supervisord users (PR #8) - transcribe-and-fetch: openai v2 alignment + doc scrub (PR #44) - DoX: secrets externalized + honest 501 (PR #114) Also update review status doc with fix verification. All 7 P1 and 20 P2 findings resolved. 4 dependabot PRs merged. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * chore(env): require dotnet sdk in bootstrap preflight * feat(chit): add CHIT-signed Graphiti trail tooling Add provenance signing for agent trail entries using CHIT HMAC: - sign_trail.py: CLI tool to create and sign trail entries - PostToolUse hook for automatic signing on trail file writes - /chit:sign-trail skill command for interactive use - Preflight check for dotnet SDK (required by CHIT crypto) - CLAUDE.md documentation for trail signing workflow - Settings.json hook registration Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Shaela Bello <slbello@uncg.edu> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> * fix(runtime): service networking, healthchecks, SQL, Makefile hardening (#740) * fix(security): use HMAC for CHIT proofs * docs(security): add A2A discovery auth sweep findings * fix(security): update submodule pointers to 2026-03-01 review fix branches Update gitlink pointers for 5 submodules to their security fix branches: - BoTZ: auth-gate /.well-known/agent.json (PR #70) - ToKenism-Multi: all P1/P2 cred defaults fixed (PR #46) - Agent-Zero: path containment + supervisord users (PR #8) - transcribe-and-fetch: openai v2 alignment + doc scrub (PR #44) - DoX: secrets externalized + honest 501 (PR #114) Also update review status doc with fix verification. All 7 P1 and 20 P2 findings resolved. 4 dependabot PRs merged. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * chore(env): require dotnet sdk in bootstrap preflight * fix(compose): networking, healthchecks, and env hardening - Fix external compose service networking and port bindings - Add missing healthcheck configurations to n8n compose - Update env.shared.example with new required variables - Harden docker-compose.yml service definitions Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(services): auth, healthchecks, and dependency updates - Agent Zero: Dockerfile non-root hardening, MCP server auth fixes - service_registry: improve service discovery and health reporting - evo-controller: add healthcheck endpoint and startup guards - flute-gateway: fix import path - render-webhook: update deps, add input validation - retrieval-eval: add health and metrics endpoints Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(sql): RLS policies, model registry seeds, and supabase config - Tighten RLS policies for public_init and geometry tables - Update model registry seed data with current model versions - Add studio board RLS migration for service_role access - Add supabase .gitignore and config.toml for local dev Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(tooling): Makefile targets, smoke tests, and operational scripts - Makefile: add sign-trail, volume-reset, and infra targets - smoke.ps1: expand service coverage and timeout handling - with-env.sh: support multi-tier env loading - bringup_with_ui.sh: improve startup sequencing - chit_security.py: fix HMAC signing edge cases - retro_flightcheck.py: add new validation checks - capture_evidence.sh: new script for PR evidence collection - AI_GRAPHITI_PROTOCOL.md: document agent trail protocol - pr-monitor.md: update skill command definition Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(submodules): update BoTZ-gateway and Cipher pointers Update submodule pointers to latest reviewed commits from 2026-03-01 security sweep. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs(security): 2026-03-01 submodule security reviews and agent notes - 5 submodule security reviews (Agent Zero, BoTZ, DoX, ToKenism, transcribe-and-fetch) - Security queue tracker and sitrep JSON - AGNOTE4482 FlOO$ and Flute agent notes - CHIT review-sweep skill command and post-review hook Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Shaela Bello <slbello@uncg.edu> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> * chore: add gitignore for runtime data and DAO docs (#743) * fix(security): use HMAC for CHIT proofs * docs(security): add A2A discovery auth sweep findings * fix(security): update submodule pointers to 2026-03-01 review fix branches Update gitlink pointers for 5 submodules to their security fix branches: - BoTZ: auth-gate /.well-known/agent.json (PR #70) - ToKenism-Multi: all P1/P2 cred defaults fixed (PR #46) - Agent-Zero: path containment + supervisord users (PR #8) - transcribe-and-fetch: openai v2 alignment + doc scrub (PR #44) - DoX: secrets externalized + honest 501 (PR #114) Also update review status doc with fix verification. All 7 P1 and 20 P2 findings resolved. 4 dependabot PRs merged. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * chore(env): require dotnet sdk in bootstrap preflight * chore: add gitignore for runtime data, DAO docs, and env backups Add entries to prevent accidental commits of: - pmoves/jellyfin-ai/ (runtime config/data from Jellyfin AI stack) - pmoves/pmoves/PR_EVIDENCE/ (smoke test evidence artifacts) - pmoves/docs/logs/pr_monitor_* (runtime PR monitor logs) - CATACLYSM_STUDIOS_INC/PMOVES DAO/ (managed separately) - pmoves/env.jellyfin-ai, pmoves/env.supa.runtime.bak.* (env backups) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Shaela Bello <slbello@uncg.edu> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> * feat(models): model registry reconciliation + persona seeds + readiness check (#741) * fix(security): use HMAC for CHIT proofs * docs(security): add A2A discovery auth sweep findings * fix(security): update submodule pointers to 2026-03-01 review fix branches Update gitlink pointers for 5 submodules to their security fix branches: - BoTZ: auth-gate /.well-known/agent.json (PR #70) - ToKenism-Multi: all P1/P2 cred defaults fixed (PR #46) - Agent-Zero: path containment + supervisord users (PR #8) - transcribe-and-fetch: openai v2 alignment + doc scrub (PR #44) - DoX: secrets externalized + honest 501 (PR #114) Also update review status doc with fix verification. All 7 P1 and 20 P2 findings resolved. 4 dependabot PRs merged. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * chore(env): require dotnet sdk in bootstrap preflight * docs(agents): overlay TAC model/persona readiness into graphiti protocol * docs(agents): correct TAC status wording for local staged artifacts * feat(models): reconcile model registry with Anthropic, TTS, and expanded service mappings Add Anthropic provider (claude-sonnet-4-5, claude-opus-4-5, claude-haiku-4-5) as persona backbone. Add TTS provider with 6 engines from Ultimate TTS Studio. Add 5 missing Ollama models from gpu-models.yaml (qwen3:32b, qwen3:1.7b, llama3.2:3b, codellama:7b, deepseek-coder:6.7b). Fix VRAM values to match gpu-models.yaml truth (qwen3:8b: 8000→6144, nomic-embed-text: 1000→512). Expand service-model mappings from 4 to 15+ services including hirag, archon, coding, orchestrator, vl_sentinel, tts, extract_worker, and more. Covers TAC branches B + C. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat(personas): integrate 8 standard persona seeds into initdb pipeline Copy persona seeds from pmoves/db/v5_14_seed_standard_personas.sql into the active Supabase initdb pipeline as 17_persona_seed.sql. Personas reference claude-sonnet-4-5 (Developer/Creator/Analyst/Tester), claude-opus-4-5 (Researcher/Coordinator/Security), and claude-haiku-4-5 (Archivist). Sequenced after model registry (12) to ensure model_preference references are valid. Preserves ON CONFLICT (name, version) idempotency. Covers TAC branch A. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat(gpu): sync gpu-models.yaml with SQL model registry Add 10 models missing from gpu-models.yaml that exist in SQL and consume local GPU VRAM: qwen2.5:32b, qwen2.5:14b, qwen2-vl:7b, qwen3-reranker:4b, nemotron-mini, llama3.1, qwen3-embedding:4b/8b, embeddinggemma:300m. GPU Orchestrator needs these entries for VRAM scheduling on RTX 5090. Covers TAC branch D. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat(db): add persona-model resolution view for runtime agent identity lookup Create persona_model_resolution view joining persona → model → provider for runtime resolution of which API endpoint to call for each persona. Also adds active_persona_summary convenience view. Grants SELECT to PostgREST anon/auth roles. Covers TAC branch F. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat(ops): add model-readiness check and Make target Create model_readiness_check.py that validates: - Supabase model_providers populated with ≥8 active providers - Supabase personas table populated with ≥8 rows - Ollama has expected local models pulled - TensorZero gateway operational - persona_model_resolution view returns valid data Add 'make model-readiness' target and wire into verify-all chain. Covers TAC branch E. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(db): harden model/persona seed determinism and view security * fix(ops): enforce readiness gate and close TAC doc drift * fix(sql): harden studio_board RLS policy for service_role only * fix(db): reconcile model provider upserts and enforce studio policy replacement - update model_providers upserts to refresh mutable fields (type/api_base/api_key_env_var/description/active/metadata)\n- always replace studio_board_service_role_all policy in migration for upgrade parity\n- clarify persona resolution grant comment to match PostgREST role grants\n- add readiness-check type hints/constants and align TAC verify steps * fix(security): tighten studio_board revokes and TensorZero reachability checks * fix(readiness): enforce registry thresholds and harden studio_board revokes --------- Co-authored-by: Shaela Bello <slbello@uncg.edu> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> * docs(agents): comprehensive AGENTS directory review and cross-reference fixes (#742) * docs(agents): update gap analysis with Phase 1 completions - Mark Phase 1 roadmap items as complete (model registry, persona seeds, GPU models YAML, service-model mappings) - Update CHIT integration status from None to Partial - Add A2A MCP foundation status - Update security hooks as implemented - Refresh date to 2026-03-01 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs(agents): add cross-references between operator docs - AGENT_CONTEXT_PATTERNS: add hook portability warning for Windows - CODEX_CIPHER_MEMORY: add cipher categories table for quick reference - CODEX_OPERATOR_HOME: add known gaps link to gap analysis - CODEX_RUNTIME_PROTOCOL: add Codex-Claude collision handling section Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs(agents): create README.md index for 69-file directory Add a start-here index document that catalogs all 69 files in the AGENTS directory with descriptions and category groupings. Provides newcomers a navigation map for the agent documentation corpus. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs(agents): add concrete persona seed examples to PERSONAS.md - Add 4 worked examples (Developer, Creator, Researcher, Analyst) showing model_preference, chit_attribution, and tool_allowlist - Document persona inheritance chain (seed SQL → Supabase row → agent_registry.yaml → runtime resolution view) - Add CHIT attribution configuration section - Add quick reference summary table for all 8 standard personas - Cross-reference 17_persona_seed.sql from PR #741 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(registry): complete CHIT toggle coverage and Hi-RAG port split - Add chit_toggles (encode, sign, bus_emit) to 9 infrastructure agents: nats-init, supabase-db, minio, qdrant, meilisearch, neo4j, prometheus, grafana, loki (all disabled — infra agents don't produce CHIT events) - Add gpu_port: 8087 to hi-rag-gateway for v1/v2 port split - Achieves 60/60 CHIT toggle coverage across all registered agents Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs(agents): update SUBMODULE_CODEX_HOMES naming convention docs - Document naming conventions for codex home files - Add orphan tracking guidance for unmapped submodules - Expand directory structure examples Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs(agents): align persona status, topology ports, and gap metadata --------- Co-authored-by: Shaela Bello <slbello@uncg.edu> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> * chore: sync Hardened → main after #741-#745 merge batch (#746) * chore(submodules): bump transcribe-and-fetch + cipher for A2A parity (#745) * chore(submodules): bump transcribe-and-fetch and cipher for a2a auth parity * chore(submodules): bump transcribe-and-fetch and cipher to merge-ready A2A heads --------- Co-authored-by: Shaela Bello <slbello@uncg.edu> * fix(a2a): secure discovery/task APIs and align with upstream agent-card path (#744) * fix(security): use HMAC for CHIT proofs * docs(security): add A2A discovery auth sweep findings * fix(security): update submodule pointers to 2026-03-01 review fix branches Update gitlink pointers for 5 submodules to their security fix branches: - BoTZ: auth-gate /.well-known/agent.json (PR #70) - ToKenism-Multi: all P1/P2 cred defaults fixed (PR #46) - Agent-Zero: path containment + supervisord users (PR #8) - transcribe-and-fetch: openai v2 alignment + doc scrub (PR #44) - DoX: secrets externalized + honest 501 (PR #114) Also update review status doc with fix verification. All 7 P1 and 20 P2 findings resolved. 4 dependabot PRs merged. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * chore(env): require dotnet sdk in bootstrap preflight * fix(security): auth-gate agent-zero A2A discovery endpoint * fix(security): HMAC CHIT proofs + A2A discovery auth audit + dotnet preflight (#736) * fix(security): use HMAC for CHIT proofs * docs(security): add A2A discovery auth sweep findings * chore(env): require dotnet sdk in bootstrap preflight --------- Co-authored-by: Shaela Bello <slbello@uncg.edu> * chore(deps): bump multer (#735) Bumps the npm_and_yarn group with 1 update in the /CATACLYSM_STUDIOS_INC/L4-PLATFORM/provisions/docker-stacks/jellyfin-ai/api-gateway directory: [multer](https://github.com/expressjs/multer). Updates `multer` from 2.0.2 to 2.1.0 - [Release notes](https://github.com/expressjs/multer/releases) - [Changelog](https://github.com/expressjs/multer/blob/main/CHANGELOG.md) - [Commits](expressjs/multer@v2.0.2...v2.1.0) --- updated-dependencies: - dependency-name: multer dependency-version: 2.1.0 dependency-type: direct:production dependency-group: npm_and_yarn ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * fix(chit): correct FlOO$ PYTHONPATH for pr-monitor pipeline * feat(chit): CHIT-signed Graphiti trail + skill pairing awareness (#739) * fix(security): use HMAC for CHIT proofs * docs(security): add A2A discovery auth sweep findings * fix(security): update submodule pointers to 2026-03-01 review fix branches Update gitlink pointers for 5 submodules to their security fix branches: - BoTZ: auth-gate /.well-known/agent.json (PR #70) - ToKenism-Multi: all P1/P2 cred defaults fixed (PR #46) - Agent-Zero: path containment + supervisord users (PR #8) - transcribe-and-fetch: openai v2 alignment + doc scrub (PR #44) - DoX: secrets externalized + honest 501 (PR #114) Also update review status doc with fix verification. All 7 P1 and 20 P2 findings resolved. 4 dependabot PRs merged. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * chore(env): require dotnet sdk in bootstrap preflight * feat(chit): add CHIT-signed Graphiti trail tooling Add provenance signing for agent trail entries using CHIT HMAC: - sign_trail.py: CLI tool to create and sign trail entries - PostToolUse hook for automatic signing on trail file writes - /chit:sign-trail skill command for interactive use - Preflight check for dotnet SDK (required by CHIT crypto) - CLAUDE.md documentation for trail signing workflow - Settings.json hook registration Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Shaela Bello <slbello@uncg.edu> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> * fix(runtime): service networking, healthchecks, SQL, Makefile hardening (#740) * fix(security): use HMAC for CHIT proofs * docs(security): add A2A discovery auth sweep findings * fix(security): update submodule pointers to 2026-03-01 review fix branches Update gitlink pointers for 5 submodules to their security fix branches: - BoTZ: auth-gate /.well-known/agent.json (PR #70) - ToKenism-Multi: all P1/P2 cred defaults fixed (PR #46) - Agent-Zero: path containment + supervisord users (PR #8) - transcribe-and-fetch: openai v2 alignment + doc scrub (PR #44) - DoX: secrets externalized + honest 501 (PR #114) Also update review status doc with fix verification. All 7 P1 and 20 P2 findings resolved. 4 dependabot PRs merged. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * chore(env): require dotnet sdk in bootstrap preflight * fix(compose): networking, healthchecks, and env hardening - Fix external compose service networking and port bindings - Add missing healthcheck configurations to n8n compose - Update env.shared.example with new required variables - Harden docker-compose.yml service definitions Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(services): auth, healthchecks, and dependency updates - Agent Zero: Dockerfile non-root hardening, MCP server auth fixes - service_registry: improve service discovery and health reporting - evo-controller: add healthcheck endpoint and startup guards - flute-gateway: fix import path - render-webhook: update deps, add input validation - retrieval-eval: add health and metrics endpoints Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(sql): RLS policies, model registry seeds, and supabase config - Tighten RLS policies for public_init and geometry tables - Update model registry seed data with current model versions - Add studio board RLS migration for service_role access - Add supabase .gitignore and config.toml for local dev Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(tooling): Makefile targets, smoke tests, and operational scripts - Makefile: add sign-trail, volume-reset, and infra targets - smoke.ps1: expand service coverage and timeout handling - with-env.sh: support multi-tier env loading - bringup_with_ui.sh: improve startup sequencing - chit_security.py: fix HMAC signing edge cases - retro_flightcheck.py: add new validation checks - capture_evidence.sh: new script for PR evidence collection - AI_GRAPHITI_PROTOCOL.md: document agent trail protocol - pr-monitor.md: update skill command definition Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(submodules): update BoTZ-gateway and Cipher pointers Update submodule pointers to latest reviewed commits from 2026-03-01 security sweep. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs(security): 2026-03-01 submodule security reviews and agent notes - 5 submodule security reviews (Agent Zero, BoTZ, DoX, ToKenism, transcribe-and-fetch) - Security queue tracker and sitrep JSON - AGNOTE4482 FlOO$ and Flute agent notes - CHIT review-sweep skill command and post-review hook Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Shaela Bello <slbello@uncg.edu> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> * docs(agents): overlay TAC model/persona readiness into graphiti protocol * docs(agents): correct TAC status wording for local staged artifacts * feat(models): reconcile model registry with Anthropic, TTS, and expanded service mappings Add Anthropic provider (claude-sonnet-4-5, claude-opus-4-5, claude-haiku-4-5) as persona backbone. Add TTS provider with 6 engines from Ultimate TTS Studio. Add 5 missing Ollama models from gpu-models.yaml (qwen3:32b, qwen3:1.7b, llama3.2:3b, codellama:7b, deepseek-coder:6.7b). Fix VRAM values to match gpu-models.yaml truth (qwen3:8b: 8000→6144, nomic-embed-text: 1000→512). Expand service-model mappings from 4 to 15+ services including hirag, archon, coding, orchestrator, vl_sentinel, tts, extract_worker, and more. Covers TAC branches B + C. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat(personas): integrate 8 standard persona seeds into initdb pipeline Copy persona seeds from pmoves/db/v5_14_seed_standard_personas.sql into the active Supabase initdb pipeline as 17_persona_seed.sql. Personas reference claude-sonnet-4-5 (Developer/Creator/Analyst/Tester), claude-opus-4-5 (Researcher/Coordinator/Security), and claude-haiku-4-5 (Archivist). Sequenced after model registry (12) to ensure model_preference references are valid. Preserves ON CONFLICT (name, version) idempotency. Covers TAC branch A. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat(gpu): sync gpu-models.yaml with SQL model registry Add 10 models missing from gpu-models.yaml that exist in SQL and consume local GPU VRAM: qwen2.5:32b, qwen2.5:14b, qwen2-vl:7b, qwen3-reranker:4b, nemotron-mini, llama3.1, qwen3-embedding:4b/8b, embeddinggemma:300m. GPU Orchestrator needs these entries for VRAM scheduling on RTX 5090. Covers TAC branch D. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat(db): add persona-model resolution view for runtime agent identity lookup Create persona_model_resolution view joining persona → model → provider for runtime resolution of which API endpoint to call for each persona. Also adds active_persona_summary convenience view. Grants SELECT to PostgREST anon/auth roles. Covers TAC branch F. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat(ops): add model-readiness check and Make target Create model_readiness_check.py that validates: - Supabase model_providers populated with ≥8 active providers - Supabase personas table populated with ≥8 rows - Ollama has expected local models pulled - TensorZero gateway operational - persona_model_resolution view returns valid data Add 'make model-readiness' target and wire into verify-all chain. Covers TAC branch E. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(db): harden model/persona seed determinism and view security * fix(ops): enforce readiness gate and close TAC doc drift * fix(a2a): harden discovery/task auth and add agent-card endpoint * fix(sql): harden studio_board RLS policy for service_role only * fix(chat-relay): lazy-load supabase client to avoid path shadow in tests * fix(ci): avoid hard failures in compose validation and yt docs tests * fix(pmoves-yt): make boto3 optional at import time for test collection * fix(pmoves-yt): stub tenacity when unavailable in CI test env * chore(submodule): bump PMOVES-Agent-Zero for canonical agent-card parity * chore(pr-scope): drop transcribe-and-fetch and cipher gitlink bumps from #744 * fix(a2a): address review blockers — RLS predicate, fail-closed key gate, discovery auth B-1: studio_board RLS policy now restricts to service_role instead of using(true) B-2: model-registry SUPABASE_SERVICE_KEY uses :? (fail-closed) instead of :- (empty) B-3: discover_agents endpoint uses _require_discovery_auth instead of _require_task_auth Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: Shaela Bello <slbello@uncg.edu> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: Shaela Bello <slbello@uncg.edu> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: Shaela Bello <slbello@uncg.edu> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Summary
claude-sonnet-4-5,claude-opus-4-5,claude-haiku-4-5)make model-readinessvalidates registry, personas, Ollama, TensorZero at startupTAC Tree Branches
Key Changes
Model Registry (12_model_registry_seed.sql)
anthropic_primary,tts_local(10 total, was 8)qwen3:8b8000→6144,nomic-embed-text1000→512 (gpu-models.yaml is truth)Persona Seeds (17_persona_seed.sql)
pmoves/db/v5_14_seed_standard_personas.sqlnow in active initdb pipeline17_*(after model registry at12_*)ON CONFLICT (name, version) DO UPDATE SETfor idempotencyGPU Models (gpu-models.yaml)
Verification
Test plan
make -C pmoves model-readinesspasses with running stackSELECT count(*) FROM pmoves_core.personasreturns ≥8 after initdbSELECT count(*) FROM pmoves_core.modelsreturns ≥35SELECT * FROM pmoves_core.persona_model_resolutionshows all personas with resolved providersSELECT count(*) FROM pmoves_core.service_model_mappingsreturns ≥15🤖 Generated with Claude Code
Summary by CodeRabbit
New Features
Documentation
Chores