Skip to content

feat(models): model registry reconciliation + persona seeds + readiness check - #741

Merged
POWERFULMOVES merged 19 commits into
mainfrom
feat/model-registry-persona-readiness
Mar 2, 2026
Merged

feat(models): model registry reconciliation + persona seeds + readiness check#741
POWERFULMOVES merged 19 commits into
mainfrom
feat/model-registry-persona-readiness

Conversation

@POWERFULMOVES

@POWERFULMOVES POWERFULMOVES commented Mar 1, 2026

Copy link
Copy Markdown
Owner

Summary

  • Anthropic provider + Claude models added to model registry — personas now have valid model_preference targets (claude-sonnet-4-5, claude-opus-4-5, claude-haiku-4-5)
  • 8 standard persona seeds integrated into active Supabase initdb pipeline (Developer, Researcher, Creator, Analyst, Archivist, Coordinator, Tester, Security)
  • GPU models YAML reconciled — 10 models added to gpu-models.yaml for GPU Orchestrator VRAM scheduling
  • Service-model mappings expanded from 4 to 15+ services (hirag, archon, coding, orchestrator, vl_sentinel, tts, extract_worker, etc.)
  • Persona-model resolution view — SQL view joining persona→model→provider for runtime agent identity lookup
  • Readiness check toolmake model-readiness validates registry, personas, Ollama, TensorZero at startup

TAC Tree Branches

Branch Status Scope
B: Model Registry Reconciliation Done Anthropic provider, 5 missing Ollama models, 6 TTS models, VRAM fixes
A: Persona Seed Integration Done 17_persona_seed.sql in initdb pipeline
D: GPU Models YAML Sync Done 10 models added to gpu-models.yaml
C: Service-Model Mapping Expansion Done 25+ new service-model mappings
F: Persona-Model Resolution View Done persona_model_resolution + active_persona_summary views
E: Startup Readiness Check Done model_readiness_check.py + Make target

Key Changes

Model Registry (12_model_registry_seed.sql)

  • New providers: anthropic_primary, tts_local (10 total, was 8)
  • New models: 3 Anthropic + 5 Ollama + 6 TTS = 14 new models (40 total, was ~28)
  • VRAM fixes: qwen3:8b 8000→6144, nomic-embed-text 1000→512 (gpu-models.yaml is truth)
  • Service mappings: 41 total (was ~16), covering hirag, archon, coding, orchestrator, vl_sentinel, agent_zero_subordinate, tts, extract_worker, research_coordinator, knowledge_manager

Persona Seeds (17_persona_seed.sql)

  • 8 personas from pmoves/db/v5_14_seed_standard_personas.sql now in active initdb pipeline
  • Sequenced as 17_* (after model registry at 12_*)
  • All use ON CONFLICT (name, version) DO UPDATE SET for idempotency

GPU Models (gpu-models.yaml)

  • 10 models added: qwen2.5:32b/14b, qwen2-vl:7b, qwen3-reranker:4b, nemotron-mini, llama3.1, embedding models
  • GPU Orchestrator can now track VRAM for all local models

Verification

make -C pmoves model-readiness          # All checks pass
# Supabase: SELECT count(*) FROM pmoves_core.personas → ≥8
# Supabase: SELECT count(*) FROM pmoves_core.models → ≥35
# Supabase: SELECT * FROM pmoves_core.persona_model_resolution → all resolved
# SELECT count(*) FROM pmoves_core.service_model_mappings → ≥15

Test plan

  • make -C pmoves model-readiness passes with running stack
  • SELECT count(*) FROM pmoves_core.personas returns ≥8 after initdb
  • SELECT count(*) FROM pmoves_core.models returns ≥35
  • SELECT * FROM pmoves_core.persona_model_resolution shows all personas with resolved providers
  • SELECT count(*) FROM pmoves_core.service_model_mappings returns ≥15
  • gpu-models.yaml parseable by GPU Orchestrator
  • Ollama models match between YAML and SQL seed

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features

    • Production-ready model & persona infra: two new runtime views, expanded GPU/local model catalog, and eight seeded production personas with verification queries.
    • Startup readiness checker to validate model/provider/persona health and local model availability.
  • Documentation

    • Added production-readiness guide, TAC model/persona overlays, handoff block templates, protocol updates, and new witness voice guidance.
  • Chores

    • Integrated model/persona readiness into the verify pipeline and CI targets; tightened studio board access and RLS.

hunnibear and others added 13 commits March 1, 2026 14:54
…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>
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@coderabbitai

coderabbitai Bot commented Mar 1, 2026

Copy link
Copy Markdown
Contributor

Note

Reviews paused

It 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 reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds 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

Cohort / File(s) Summary
Documentation & TAC
docs/AGENT_TRAIL.md, pmoves/docs/AGENTS/AGNOTE4482.md, pmoves/docs/AGENTS/AGNOTE4482PHI.t1.md, pmoves/docs/AGENTS/AI_GRAPHITI_PROTOCOL.md, pmoves/docs/TAC/TAC_MODEL_INFRA_PERSONA_PROD_READINESS.md
Added TAC/model-persona readiness overlay and execution overlay references, introduced witness voice and a TAC Tree Handoff Block template, updated Graphiti protocol and agent ACK entries.
Makefile & Readiness Tool
pmoves/Makefile, pmoves/tools/model_readiness_check.py
Added exported model-readiness Make target and integrated it into verify-all; new CLI ReadinessChecker that queries Supabase (providers/personas/views), Ollama, and TensorZero and emits PASS/WARN/FAIL with an exit code.
GPU Model Config
pmoves/config/gpu-models.yaml
Inserted many new Ollama-backed GPU model entries (Qwen2.5/Qwen3 variants, Llama3.1, nemotron-mini, embeddings) with VRAM, context lengths, and quantization metadata.
Model Registry Seed
pmoves/supabase/initdb/12_model_registry_seed.sql
Expanded model/provider seed data (Anthropic, TTS, local/cloud variants), adjusted VRAM/context values, extended service model mappings, and bumped seed version/audit fields.
Persona Seed
pmoves/supabase/initdb/17_persona_seed.sql
New idempotent persona seed inserting eight production personas with full configurations, indexes, verification queries, and observability scaffolding.
Migrations / Views
pmoves/supabase/migrations/20260301002000_persona_model_resolution.sql
Added pmoves_core.persona_model_resolution and pmoves_core.active_persona_summary views (with comments, GRANT SELECT to common roles, SECURITY INVOKER).
RLS / Grants
pmoves/supabase/migrations/20260301001000_studio_board_rls_service_role.sql
Hardened studio_board privileges: removed anon/auth grants, granted schema/table/sequence usage to service_role, and replaced open policies with a service_role-scoped policy.
Supabase SQL Bulk
pmoves/supabase/initdb/*, pmoves/supabase/migrations/*
Large SQL additions/updates across seeds and migrations (models, embeddings, service mappings, persona indexes); significant data seeding and access-control adjustments.

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
Loading

Estimated code review effort

🎯 5 (Critical) | ⏱️ ~120 minutes

Possibly related PRs

Poem

🐰 I hopped through seeds and schema rows,

I pinged Ollama where the soft light glows,
I tapped TensorZero at the gateway gate,
Eight personas lined up, all set for fate,
A rabbit's wiggle for readiness — celebrate!

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
Description check ❓ Inconclusive The description covers summary, key changes, TAC branches, verification steps, and a test plan. However, it lacks a Testing section with actual commands executed and does not include the required checklist items from the template. Add a Testing section documenting executed commands/scripts with outputs, and complete the required checklist items (CHIT Contract Check, contract/schema updates, documentation updates, review coordination).
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The PR title accurately summarizes the main changes: model registry reconciliation, persona seeds integration, and readiness check tool addition.
Docstring Coverage ✅ Passed Docstring coverage is 92.86% which is sufficient. The required threshold is 80.00%.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feat/model-registry-persona-readiness

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 | 🟠 Major

Model lookups with LIMIT 1 are nondeterministic for mapping seeds.

Selecting model IDs by model_id plus LIMIT 1 can 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

📥 Commits

Reviewing files that changed from the base of the PR and between 5e69ed0 and 044dc9e.

📒 Files selected for processing (11)
  • docs/AGENT_TRAIL.md
  • pmoves/Makefile
  • pmoves/config/gpu-models.yaml
  • pmoves/docs/AGENTS/AGNOTE4482.md
  • pmoves/docs/AGENTS/AGNOTE4482PHI.t1.md
  • pmoves/docs/AGENTS/AI_GRAPHITI_PROTOCOL.md
  • pmoves/docs/TAC/TAC_MODEL_INFRA_PERSONA_PROD_READINESS.md
  • pmoves/supabase/initdb/12_model_registry_seed.sql
  • pmoves/supabase/initdb/17_persona_seed.sql
  • pmoves/supabase/migrations/20260301002000_persona_model_resolution.sql
  • pmoves/tools/model_readiness_check.py

Comment thread pmoves/docs/TAC/TAC_MODEL_INFRA_PERSONA_PROD_READINESS.md Outdated
Comment thread pmoves/docs/TAC/TAC_MODEL_INFRA_PERSONA_PROD_READINESS.md Outdated
Comment thread pmoves/Makefile Outdated
Comment thread pmoves/supabase/initdb/12_model_registry_seed.sql Outdated
Comment thread pmoves/supabase/initdb/12_model_registry_seed.sql Outdated
Comment thread pmoves/supabase/initdb/17_persona_seed.sql
Comment thread pmoves/supabase/migrations/20260301002000_persona_model_resolution.sql Outdated
Comment thread pmoves/tools/model_readiness_check.py
Comment thread pmoves/tools/model_readiness_check.py Outdated
Comment thread pmoves/tools/model_readiness_check.py
POWERFULMOVES pushed a commit that referenced this pull request Mar 2, 2026
- 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>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 | 🟠 Major

Provider upserts are only partially reconciliatory and can preserve stale active/metadata state.

Current ON CONFLICT clauses 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 | 🟠 Major

Recreate studio_board_service_role_all during migration so hardening applies on upgraded databases.

The NOT EXISTS guard 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 whether verify-all already includes model-readiness to avoid workflow drift.

If verify-all now runs the readiness gate, listing both as mandatory steps can create conflicting operator guidance.

📝 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 -->
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."
🤖 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, and main() 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

📥 Commits

Reviewing files that changed from the base of the PR and between 044dc9e and 605b05b.

📒 Files selected for processing (7)
  • pmoves/Makefile
  • pmoves/docs/TAC/TAC_MODEL_INFRA_PERSONA_PROD_READINESS.md
  • pmoves/supabase/initdb/12_model_registry_seed.sql
  • pmoves/supabase/initdb/17_persona_seed.sql
  • pmoves/supabase/migrations/20260301001000_studio_board_rls_service_role.sql
  • pmoves/supabase/migrations/20260301002000_persona_model_resolution.sql
  • pmoves/tools/model_readiness_check.py
🚧 Files skipped from review as they are similar to previous changes (1)
  • pmoves/Makefile

Comment thread pmoves/supabase/migrations/20260301002000_persona_model_resolution.sql Outdated
…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

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

📥 Commits

Reviewing files that changed from the base of the PR and between 605b05b and e9404e9.

📒 Files selected for processing (5)
  • pmoves/docs/TAC/TAC_MODEL_INFRA_PERSONA_PROD_READINESS.md
  • pmoves/supabase/initdb/12_model_registry_seed.sql
  • pmoves/supabase/migrations/20260301001000_studio_board_rls_service_role.sql
  • pmoves/supabase/migrations/20260301002000_persona_model_resolution.sql
  • pmoves/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

Comment thread pmoves/tools/model_readiness_check.py Outdated
POWERFULMOVES pushed a commit that referenced this pull request Mar 2, 2026
- 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>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (1)
pmoves/supabase/migrations/20260301001000_studio_board_rls_service_role.sql (1)

14-27: Consolidate duplicate studio_board existence checks into one block.

The two identical IF EXISTS guards 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

📥 Commits

Reviewing files that changed from the base of the PR and between e9404e9 and a597643.

📒 Files selected for processing (2)
  • pmoves/supabase/migrations/20260301001000_studio_board_rls_service_role.sql
  • pmoves/tools/model_readiness_check.py

Comment thread pmoves/tools/model_readiness_check.py
Comment thread pmoves/tools/model_readiness_check.py

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

📥 Commits

Reviewing files that changed from the base of the PR and between a597643 and 0c28b0e.

📒 Files selected for processing (2)
  • pmoves/supabase/migrations/20260301001000_studio_board_rls_service_role.sql
  • pmoves/tools/model_readiness_check.py

Comment on lines +188 to +190
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")

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

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.

@POWERFULMOVES
POWERFULMOVES merged commit ce17f03 into main Mar 2, 2026
8 checks passed
POWERFULMOVES pushed a commit that referenced this pull request Mar 2, 2026
- 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>
POWERFULMOVES added a commit that referenced this pull request Mar 2, 2026
…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>
POWERFULMOVES pushed a commit that referenced this pull request Mar 2, 2026
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>
POWERFULMOVES added a commit that referenced this pull request Mar 2, 2026
* 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>
POWERFULMOVES added a commit that referenced this pull request Mar 2, 2026
* 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>
@POWERFULMOVES
POWERFULMOVES deleted the feat/model-registry-persona-readiness branch March 9, 2026 20:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants