# Executive Summary (SENTINEL Final)

# SENTINEL AUDIT — Final Consolidated Report
**Date:** 2026-05-09
**Lead Validator:** Sentinel Validator (consolidating P1–P5 findings)
**Destination:** CEO (Alem Basic)

---

## FINAL VERDICT

**REWORK-MINOR**

The audit is fundamentally sound. The fix backlog is correctly prioritized. The CEO can act on Wave A items (RAG drain-worker, queue monitoring, Chroma audit, B2 billing) immediately. However, 5 MC stubs require AC refinement (≤30 min each) before general dispatch, and P4.1 carries 3 low-severity annotation corrections. None of these are blockers to CEO decision-making or Wave A execution.

---

## Headline (Bosnian)

**Fabrika je mrtva od marta — 62.5% obaveza ne radi. Pi-orchestrator nije dispatchovao ništa. John je ručni dispecer. Tri fixa otključavaju sve ostalo: RAG Vaultwarden kredencijal, definišite canonical dispatch path, žičajte verify-fix-loop.**

---

## Top-5 Actionable Findings (Post-Corrections)

### 1. RAG ingest pipeline blocked — **3,150+ items queued** (not the stale 454)
- **Finding:** rag-drain-worker crashed on Vaultwarden CF Access timeout. The metric file is 16 days stale (shows 454). Live SQLite count: **3,150 queued items** — real state is 7x worse than the documented figure.
- **Evidence:** P3.1 H1 (health matrix), P5.2-verifier-report A5 (fresh queue depth probe showing 3,150), HiveMind #64900 (today's crash).
- **Action priority:** CRITICAL — Fix immediately (MC-STUB-01, Wave A, ~2h effort). Single credential fix (Vaultwarden session + CF Access token) drains 3,150+ items simultaneously. This single fix unblocks 3 downstream adapters.

### 2. pi-orchestrator not dispatching — HTTP port 8401 dead since March
- **Finding:** Process PID 75750 is alive. HTTP control plane is offline. No dispatch logs post-2026-03-19 (50+ days idle). durable-runner bridge (port 3052) is structurally alive but unclear if it's processing. The framing "mock mode" is inaccurate (P4.2 rebuttal) — the real issue is startup gating.
- **Evidence:** P3.1 C1/C2 (live probes), P4.2 Gap #2 rebuttal (no mock config found; config shows `offlineMode: false`), P5.1 probe #3 (PID confirmed unchanged 5+ days).
- **Action priority:** HIGH — But **requires architectural decision first** (MC-STUB-02, Wave B). Is durable-runner the canonical dispatcher (HTTP port 8401 is legacy), or is HTTP supposed to be online? The fix depends on the answer. Do not attempt MC-STUB-08 (pi-orch restore) until this decision is made.

### 3. Verifier loop capability exists but zero auto-invocation
- **Finding:** verify-fix-loop skill is fully built, tested, and working. Accepts manual invocation. However, no daemon, hook, or pi-orchestrator code ever calls it. **Important caveat (P4.2 rebuttal):** This is NOT a structural gap. The REQUIRED verification gate is Proveo (Angie Jones), which IS wired via task-postflight. verify-fix-loop is an optional enhancement for self-correcting specs (docs, system, refactor domains).
- **Evidence:** P2.2 §2, P3.1 D1 (skill exists, manual-only), P4.2 Gap #3 (Proveo is the designed gate), CLAUDE.md Hard Constraint #4 (specifies Proveo, not verify-fix-loop).
- **Action priority:** MEDIUM — Feature enhancement, not blocker. Demoted to Wave C (MC-STUB-12) with L priority. Wire as optional section in /task-postflight after pi-orchestrator dispatch is restored.

### 4. Agent routing table incomplete — validator and distiller unmapped (44 references, 21 references, 0 routing entries)
- **Finding:** validator and distiller agents are cited 65 times across skill files but have zero entries in specialist-mapping.json. **Important distinction (P4.2 rebuttal):** These may be INTERNAL-ONLY agents (called from other agents, not from John). If internal-only, they should NOT be in the routing table. If routable by John, they must be added. This requires a routing policy decision first.
- **Evidence:** P1.3 (agent-fleet inventory shows 66 agents, mapping covers only 29), P4.2 Gap #5 rebuttal (may be internal-only), P4.3 MC-STUB-06 (design decision gates this fix).
- **Action priority:** MEDIUM — Requires CEO Decision #3 (routing policy scope: comprehensive vs curated). Once decided, implementation is ≤8h (MC-STUB-06, Wave B).

### 5. Four phantom companies unroutable (Axiom, Datavera, Resolver, Lexicon)
- **Finding:** All four have complete persona directories (CLAUDE.md, agents, company.json). ZERO entries in specialist-mapping.json. **Correction (P4.2 rebuttal + P5.2-verifier A10):** Lexicon IS routable (grep confirms 0 matches — P4.2 hallucinated a mapping entry). So the correct count is 3 phantom companies (Axiom, Datavera, Resolver), not 4. Lexicon is confirmed absent and phantom.
- **Evidence:** P1.3 (inventory shows all 4 have full infrastructure), P4.2 Gap #7 (rebuttal claims Lexicon is mapped — REFUTED by P5.2-verifier), P4.3 MC-STUB-07 (correctly lists 3 companies).
- **Action priority:** LOW — Inventory work + routing decision. Demoted to Wave B after routing policy (MC-STUB-06) is decided. MC-STUB-07 implements the fix for 3 companies (~4h effort, M priority).

---

## Wave A — Ship Now (No CEO Decisions Needed)

These four MCs can be dispatched immediately. Combined effort: ~6h.

| Stub | Title | Effort | Owner | Why Safe to Ship |
|------|-------|--------|-------|-----------------|
| **MC-STUB-01** | Restore RAG drain-worker: fix Vaultwarden session + CF Access | **S (≤2h)** | FlowForge | Single credential fix. Machine-checkable ACs. Proveo-validated PASS (5.1 §2). Unblocks 3 adapters. |
| **MC-STUB-03** | Implement live RAG queue depth monitoring | **M (≤8h)** | FlowForge | Proveo PASS (5.1 §2). Depends on MC-STUB-01 (documented). No CEO decision required. |
| **MC-STUB-09** | Audit and archive Chroma + stale mem0 collections | **S (≤2h)** | CodeCraft | Proveo PASS (5.1 §2). Pure read-probe + cleanup. No blocking dependencies. |
| **MC-STUB-10** | Raise B2 storage cap + verify litestream replication | **S (≤2h)** | FlowForge | Proveo WEAK (credential placeholder needs fix — see rework list). But the task itself is low-risk (billing action). Fix AC before dispatch (≤5 min). |

**Wave A partial:** MC-STUB-04 (restore 5 deleted plists) — 4 of 5 plists can be unloaded/restored now. The 5th (pi-orch-health.sh) is blocked on MC-STUB-02 (canonical dispatch decision) because the health probe must be updated to check the right port.

---

## Wave B — Needs CEO Architectural Decisions First

These fixes depend on 4 CEO decisions. Once decided, they are unblocked.

### CEO Decision #1 (CRITICAL): Canonical dispatch path

**The question:** Is `durable-runner` (port 3052, 20d uptime) the canonical dispatcher — with pi-orchestrator HTTP (port 8401, dead) being a legacy control plane? OR is pi-orchestrator HTTP supposed to be online?

**Why only CEO can decide:** This is a fork in how we interpret the system's design. No engineer can unilaterally choose which dead component to revive.

**Options:**
- A. durable-runner is canonical. HTTP port 8401 is legacy. Document this, verify durable-runner is processing tasks, decommission HTTP.
- B. pi-orch HTTP is canonical. Diagnose startup gating (likely Ollama hang), restore it. durable-runner is subordinate.
- C. Both should be operational. Requires specifying the interaction model.

**Unblocks:**
- MC-STUB-02 (design decision itself)
- MC-STUB-04 remainder (pi-orch-health.sh restoration)
- MC-STUB-08 (pi-orchestrator restore — actual kernel fix)

### CEO Decision #2 (MEDIUM): Blueprint score gate floor

**The question:** What is the enforced minimum score for dispatch via Mehanik gate?

**Context:** Observed practice allows dispatch at score 65 (WARN range). Original spec says 90. The code treats WARN as pass-through. Choose one and hardcode it.

**Options:**
- A. Lower floor to 60 — match observed practice; WARN is acceptable.
- B. Floor stays at 90 — WARN becomes BLOCK; blueprints must score higher.
- C. Tiered: 60 for L tasks, 75 for M, 90 for H+.

**Unblocks:** MC-STUB-05 (enforce gate at the chosen floor)

### CEO Decision #3 (MEDIUM): specialist-mapping.json scope policy

**The question:** Should the routing table be comprehensive (all 66 agents) or curated (only John-dispatchable agents)?

**Why it matters:** validator and distiller are cited 65 times but may be internal-only. If internal, they must NOT be in the routing table. If John-routable, they must be added.

**Options:**
- A. Curated — only John-dispatchable agents enter the mapping. Internal agents documented separately.
- B. Comprehensive — all agents mapped; entry type field distinguishes dispatch vs internal.

**Unblocks:**
- MC-STUB-06 (routing policy design + specialist-mapping update)
- MC-STUB-07 (register 3 phantom companies or mark as experimental)

### CEO Decision #4 (LOW): mem0 future role

**The question:** What is mem0's long-term status?

**Context:** 865 stale facts. Zero active writers. `.md + LightRAG` is the working pipeline. mem0 server running and consuming resources.

**Options:**
- A. Deprecate — stop mem0 server; archive Qdrant vectors; remove from settings.json.
- B. Keep experimental — document as optional parallel sandbox, not canonical.
- C. Promote — wire PostToolUse hook to write every .md update to mem0 simultaneously (high effort, not recommended).

**Recommendation (Petter):** Option A (deprecate). The .md pipeline works. mem0 is cognitive overhead.

**Unblocks:** MC-STUB-09 + MC-STUB-11 (memory-plane documentation)

---

## Surfaced Contradictions Resolved

### Contradiction 1: RAG queue depth — 454 vs 3,150

**P4.1 synthesis stated:** Queue depth 454 (from stale metric).
**P5.2 verifier caught:** Live SQLite shows 3,150 queued items (16 days newer data).

**Resolution:** Both figures are correct — the metric file is 16 days stale. The synthesis should have emphasized the live count (3,150) or stated "actual count unknown; 454 is a lower bound from 16 days ago." This is a severity understatement, not a factual error. MC-STUB-01 AC#5 requires live queue monitoring to prevent future metric staleness.

### Contradiction 2: pi-orchestrator "mock mode" vs actual config

**P2.1 connectivity diagram stated:** pi-orch in MOCK MODE, alai-config-mock.json loaded.
**P4.2 devils-advocate rebutted:** No mock config found. Config shows `offlineMode: false`, `enabled: true`.
**P3.1 verified:** Zero grep matches for "mock" in pi-orchestrator.js.

**Resolution:** The "mock mode" framing is inaccurate. The real issue is HTTP port 8401 startup gating (likely an initialization hang, not intentional test mode). P4.1 executive summary repeats "mock/broken mod" but should be updated to "HTTP startup gating failure" per P3.1/P4.2 evidence.

### Contradiction 3: Chain runner existence

**P4.1 synthesis stated:** 35 chain YAML files have no executor; chain-runner doesn't exist.
**P5.2 verifier caught:** chain-runner.js (31KB, fully functional) and chain-runner.sh (Pillar #5) both exist.

**Resolution:** Chain runners DO exist. They are not broken in the sense of missing — they are broken/unused because:
- (a) No active skill invokes them (skills call agents inline),
- (b) Three chain-related daemons exit 1 due to downstream failures,
- (c) The runners are un-integrated, not absent.

The correct claim is "chains are un-invoked and un-integrated," not "no executor exists." This distinction matters for the fix: restoring chains requires fixing downstream dependencies, not writing a new runner.

### Contradiction 4: Lexicon company phantom status

**P4.1 Gap #7 stated:** 4 phantom companies — Axiom, Datavera, Resolver, Lexicon.
**P4.2 devils-advocate claimed rebuttal:** Lexicon IS in specialist-mapping.json.
**P5.2 verifier caught:** `grep "Lexicon" ~/system/agents/specialist-mapping.json` → 0 matches. Lexicon is NOT routable.

**Resolution:** P4.2 hallucinated the Lexicon entry (ZAKON NULA breach). The correct count is 4 phantom companies, not 3. P4.3 MC-STUB-07 correctly lists the affected companies as the full 4 in some passages but may have been partially rewritten. This audit's final count: **all 4 are confirmed unroutable** (Axiom, Datavera, Resolver, Lexicon). Update MC-STUB-07 scope to list all 4.

### Contradiction 5: mem0 SoR intent

**P4.1 synthesis stated:** mem0 is the intended System of Record; it's broken.
**P4.2 devils-advocate rebutted:** mem0 was never designated as SoR in CLAUDE.md or any spec.

**Resolution:** The gap is dismissed (correctly). `.md + LightRAG` is the designed pipeline (Claude Code native auto-memory → lightrag-auto-ingest.sh hook → LightRAG). mem0 was a prototype that never achieved SoR status. The correct fix is documentation (MC-STUB-11), not re-wiring mem0. This satisfies the dismissed gap.

### Contradiction 6: HiveMind read API

**P1.1 implied:** HiveMind has no read API.
**P3.1 found:** `hivemind.js read/query/semantic_query` all functional. API exists.

**Resolution:** P1.1 overstated the gap. HiveMind is the healthiest store in the factory (17,560+ live intel rows, read API functional, daily writes). No contradiction to resolve — P3.1 corrected the inventory claim.

---

## Open Questions for CEO

1. **Canonical dispatch path:** durable-runner or pi-orchestrator HTTP? (CEO Decision #1)
2. **Blueprint score gate:** Enforce at 60, 75, or 90? (CEO Decision #2)
3. **specialist-mapping.json scope:** Comprehensive or curated? (CEO Decision #3)
4. **mem0 future role:** Deprecate or keep as experimental? (CEO Decision #4)
5. **Anything else surfaced:** Any findings in this audit that require clarification before we proceed with Wave A?

---

## Recommendation

**John should dispatch Wave A immediately** (RAG drain-worker, queue monitoring, Chroma audit, B2 cap raise — ~6h total). These are unblocked and low-risk. While Wave A runs, John should surface CEO Decision #1 (canonical dispatch path) to the CEO and gather answers for Decisions #2–4. Once Decision #1 is resolved, Wave B becomes unblocked and John can schedule MC-STUB-02 (design decision) + the downstream fixes (pi-orch-health.sh, pi-orchestrator restore, routing policy). The audit is sound. The backlog is prioritized. The next blocker is not more analysis — it is the CEO's architectural calls.

---

## Rework Required Before General Dispatch

**Category A — AC refinement** (5 stubs, ≤30 min each):

- **MC-STUB-04:** Split OR-condition into per-plist ACs; replace 24h window with point-in-time exit-code check.
- **MC-STUB-06:** Rewrite discover.js routing ACs to assert the specific agent returned (not just "non-empty"); make count-diff self-contained.
- **MC-STUB-08:** Replace 5-min wait AC with point-in-time dispatch log check; replace 30-min cron monitoring with a statement that cron probe is a child task.
- **MC-STUB-10:** Replace credential placeholder with `bw get item` command; add log-file existence check.
- **MC-STUB-12:** Define the "postflight log" artifact path; specify task-postflight invocation mode or output.

**Category B — P4.1 annotations** (≤15 min):

- Replace "mock/broken mod" in executive summary with "HTTP startup gating failure."
- Update Gap #7 to note P4.2 rebuttal revised count (but P5.2-verifier refutes that rebuttal — final count is 4 phantom companies, not 3).
- Clarify that "93K+ vectors" is raw Qdrant embeddings across all collections, not mem0-only count (865 facts is the mem0 application-layer count).

---

**Audit Status:** COMPLETE
**Validator:** Sentinel Validator (consolidation)
**Evidence directory:** `/tmp/ai-factory-audit-2026-05-09/`
**Prior phases:** P1 (inventory), P2 (connectivity), P3 (health matrix), P4 (synthesis + rebuttal + backlog), P5 (validation + verification + final consolidation)

---

*Report produced by Sentinel Validator*
*2026-05-09*
*Consolidated from 11 audit reports + 3 rebuttal layers + live probe verification*