Platform Observability & Onboarding Projection Architecture
Fifth and final companion in the projection-architecture family (QC + Sales & Market + Recall/Proof + Agent Audit + this).
Source catalog: docs/projections/PROJECTION_CATALOG_2026-05-15.md §6.7 + §6.8.
This family is FIN Central control-plane, not tenant operational. The audience is the FIN operator (you + any future hires), with one cross-over: tenant onboarding pages are tenant-visible during the onboarding window.
0. TL;DR
Every platform health signal + onboarding step + agent-enrichment outcome ripples into 6 vault MDs + 3 JSONB projections + ~4 backlink edges per event. Substrate is mostly built (kb_health_summary + system_health_snapshot already live as JSONB; channel_health is a small new projection per the catalog). The gap is the vault MD projector family that turns observability JSONB into the readable + grepable + drill-throughable artifacts the operator role + onboarding cohorts consume.
inbound signals → ripple
─────────────────────────────────────────────────────────────────
ALL events (sampled / aggregated) → kb_health_summary (LIVE)
→ system_health_snapshot (LIVE)
→ channel_health (NEW)
tenant lifecycle events → tenant_readiness_projection (NEW)
→ onboarding_progress_projection (NEW)
agent.* + doc.edit_* → agent_enrichment_metrics (Agent Audit
family §2.2 — feed into vault MD here)
federal-readiness feature flags → federal_readiness_tracker (NEW vault MD)
→ reads existing tenant projection state
6 vault MDs (rung 3 with Central reads where applicable):
- kb_health_summary
- channel_health.<tenant>
- tenant_readiness.<tenant>
- agent_enrichment_metrics
- federal_readiness_tracker
- onboarding_progress.<tenant>.<actor> + cohort_status.<tenant>
Strategic value: this family is what closes “the platform runs itself” claim. Without it, FIN Central operators are blind to per-tenant health + onboarding throughput + federal readiness gaps + agent ROI.
0.5 Central-overlay reads contract (3-rung taproot — see AOL §13.6)
This family is mixed: some projectors are FIN-Central-native (live on fin-central-renderer Worker, write to fin-central-intranet:docs/operations/), others are rung-3 tenant projectors that read both tenant operational data AND Central-side rules (especially _taproot_mirror/docs/certifications/<slug>.md for federal-readiness compliance rules).
| Projector | Lives where | Central MDs read |
|---|---|---|
kb_health_summary | tenant-side (per tenant) | none — pure tenant introspection |
channel_health.<tenant> | tenant-side (per tenant) | none — pure tenant infrastructure state |
tenant_readiness.<tenant> | tenant-side (per tenant) | _taproot_mirror/docs/operations/onboarding-checklist.md (Central canonical 10-step checklist) — drives “what step the tenant is on” |
agent_enrichment_metrics | tenant-side (per tenant) | none |
federal_readiness_tracker | tenant-side, but reads heavy Central | _taproot_mirror/docs/certifications/*.md (each cert defines required-artifact set); _taproot_mirror/docs/operations/federal-readiness-checklist.md |
onboarding_progress.<tenant>.<actor> | tenant-side (per actor) | _taproot_mirror/docs/operations/onboarding-checklist.md + _taproot_mirror/docs/roles/<role>.md (per-role step list) |
cohort_status.<tenant> | tenant-side (per tenant) | (aggregates onboarding_progress; reads same Central as that) |
Read graceful-degradation: if _taproot_mirror/docs/operations/onboarding-checklist.md is missing, fall back to a hard-coded built-in checklist (versioned in the projector code) + flag central_pending: true. Onboarding cannot wait on Central sync.
Write contract: all projectors write to tenant paths (docs/operations/<projector-name>/...). Never to _taproot_mirror/.
Cross-cutting: kb_health_summary is unique in that it ALSO mirrors a Central rollup once per day — Central-side aggregate of all tenants’ summaries (anonymized) becomes fin-central-intranet:docs/operations/platform-kb-health-summary-rollup.md. That’s a rung-1 write driven by the cross-tenant aggregator, not by this family’s tenant-side projector.
1. Vault MD projectors
All 6 follow the QC arch §1 pattern: pure renderer + tenant-projector orchestrator + injectable deps. Output paths under nathel-intranet:docs/operations/.
1.1 kb_health_summary
- doc_kind:
system_projected - audience: FIN operator + employee (admin)
- cadence: daily 06:00 UTC
- path:
nathel-intranet:docs/operations/kb-health/<YYYY-MM-DD>.md - sources:
- Existing
kb_health_summary_projectionJSONB (migration 043) - Domain counts: COUNT(*) by
knowledge.domaingrouped per tenant - Embedding coverage: % of rows with non-null embeddings
- Stale entries: rows with
domain_stale: trueflag - Ingestion drift flags: rows where
expected_countdiffers fromactual_countover the last week
- Existing
- output shape:
- Section 1: domain counts table (commodity / variety / vendor / customer / location / role / doc / etc.)
- Section 2: embedding coverage % per domain
- Section 3: stale entries list (with link to source events for staleness cause)
- Section 4: ingestion drift (recent vault commits with delta vs. expected)
- Section 5: 24-hour delta vs. prior snapshot
1.2 channel_health.<tenant>
- doc_kind:
system_projected - audience: FIN operator
- cadence: every 15 minutes
- path:
nathel-intranet:docs/operations/channel-health/<YYYY-MM-DD>/T<HH-mm>.md(or rolling latest atlatest.md) - sources (NEW JSONB substrate per §2.1):
- Email queue status (inbound + outbound queue depth, last-flushed-at)
- Telnyx SMS health (delivery rate, fail rate, last-success-at)
- Telnyx voice health (call success rate, recording capture rate)
- GitHub vault webhook freshness (last 202 received, recent failures)
- MCP key validity (per-actor key expiry windows)
- Render status (last
entity_doc.renderedevent timestamp; queue depth)
- output shape:
- Traffic-light table per channel (green / yellow / red)
- Recent failures with links to error events
- SLA budget burn-down per channel
1.3 tenant_readiness.<tenant>
- doc_kind:
system_projected - audience: FIN operator + tenant admin (during onboarding window)
- cadence: on tenant lifecycle events + daily reconciliation
- path:
nathel-intranet:docs/operations/tenant-readiness/<YYYY-MM-DD>.md - sources:
- Tenant provisioning checklist from AOL spec §13
- Smoke-test events (
tenant.smoke_test_passed,tenant.smoke_test_failed) - Existing
system_health_snapshot_projectionJSONB - Central onboarding-checklist MD (per §0.5)
- output shape:
- Readiness rollup (% complete)
- Blockers (with links to events showing why blocked)
- Current onboarding step (per
project_agentic_onboarding_program3-act cohort design) - Next required actions
- Estimated time-to-ready
1.4 agent_enrichment_metrics
- doc_kind:
system_projected - audience: FIN operator
- cadence: weekly Monday 09:00 UTC
- path:
nathel-intranet:docs/operations/agent-enrichment/<YYYY-WW>.md - sources:
agent_enrichment_metrics_projectionJSONB (from Agent Audit family §2.2 — NEW dependency)agent_session_projection(Agent Audit §2.1) for session-level rollupsagent_eval_drift_projection(Agent Audit §2.3) for confidence trends
- output shape:
- Proposals per agent per week (table)
- Acceptance rate per agent (line chart inline SVG)
- Doc enrichment rate (sections proposed vs accepted)
- Reasoning quality lift (A/B comparison if available)
- Cost per accepted proposal
- Drift alerts (which scenarios saw confidence regression)
- note: This is a DEPENDENT projector — requires Agent Audit family to ship first.
1.5 federal_readiness_tracker
- doc_kind:
system_projected - audience: FIN operator only
- cadence: weekly Monday 09:00 UTC + on federal-relevant event
- path:
nathel-intranet:docs/operations/federal-readiness/<YYYY-WW>.md - sources:
- Federal-runtime feature flags (FedRAMP infrastructure status, federal MCP endpoint readiness)
- Recall-drill events (R1-B
drill_metrics_projectionfrom Recall & Proof family) - Audit-export status (event-store export readiness, evidence-bundle retention compliance)
- SBOM/provenance status (per
project_strategic_researchmemo) - Residency notes (CONUS routing verified)
- VOSB compliance artifacts (per FIN_DATA_SIGNAL_OFFERINGS §4.5)
- Central reads per §0.5:
_taproot_mirror/docs/certifications/*.mdfor required-artifact set
- output shape:
- Federal readiness rollup (% complete per agency target: FDA, USDA, CDC, CBP, FTC, USTR, CISA, ARPA-H, DOD)
- Missing artifacts list (with links to what’s missing)
- Last drill date + result (from drill_metrics_projection)
- Next steps to readiness
- Contract-vehicle progress (GSA MAS, SBIR/STTR, OTAs, prime sub)
- note: Heavy Central-MD reads — gates federal MCP endpoint readiness on Central availability.
1.6 onboarding_progress.<tenant>.<actor> + cohort_status.<tenant>
- doc_kind:
portal_page(for onboarding_progress, actor-facing) +system_projected(for cohort_status, operator-facing) - audience:
onboarding_progress: employee (the actor) + employee (tenant admin) + FIN operatorcohort_status: FIN operator + tenant admin
- cadence: event-driven on onboarding-step completion + daily reconciliation
- paths:
nathel-intranet:docs/operations/onboarding/<actor_slug>/<YYYY-MM-DD>.mdnathel-intranet:docs/operations/cohort-status/<YYYY-MM-DD>.md(one per tenant)
- sources:
- 10-step onboarding events (per
project_pk_v2_implementationmemo) - 3-act cohort design events (per
project_agentic_onboarding_programmemo) - Central onboarding-checklist MD (per §0.5)
- Per-role step list from
_taproot_mirror/docs/roles/<role>.md
- 10-step onboarding events (per
- output shape:
onboarding_progress: progress doc (% complete), next-step prompt, blockers, suggested helper resources, links to documentationcohort_status: multi-actor rollup table, week-over-week throughput, common blockers across cohort, suggested cohort-wide actions
2. JSONB projections
Most JSONB substrate already exists. This family adds 3 NEW projections.
2.1 channel_health_projection (NEW)
- migration:
078_channel_health_projection.sql - schema:
tenant_id × channel_id × window → { status, success_count, failure_count, last_success_at, last_failure_at, sla_budget_burn_pct } - source events:
email.received/email.send_failed,sms.received/sms.send_failed,voice.call_completed/voice.call_failed,webhook.received/webhook.failed,mcp.key_expired_soon,entity_doc.rendered/entity_doc.render_failed - replay command:
pnpm cli replay-projection --projection=channel_health_projection --tenant=<tenant_id> - RLS: required
- fed-by:
event-handlers/projection-channel-health.ts(NEW) - consumed-by:
channel_health.<tenant>vault MD (§1.2)
2.2 tenant_readiness_projection (NEW)
- migration:
079_tenant_readiness_projection.sql - schema:
tenant_id → { onboarding_steps_complete[], smoke_tests_passed[], current_step, blockers[], readiness_pct, last_reconciled_at } - source events:
tenant.created,tenant.smoke_test_passed,tenant.smoke_test_failed,tenant.onboarding_step_completed,tenant.onboarding_step_blocked - replay command:
pnpm cli replay-projection --projection=tenant_readiness_projection --tenant=<tenant_id> - fed-by:
event-handlers/projection-tenant-readiness.ts(NEW) - consumed-by:
tenant_readiness.<tenant>vault MD (§1.3)
2.3 onboarding_progress_projection (NEW)
- migration:
080_onboarding_progress_projection.sql - schema:
tenant_id × actor_id → { steps_complete[], current_step, blockers[], time_per_step_ms[], cohort_id, role } - source events:
onboarding.step_started,onboarding.step_completed,onboarding.step_blocked,onboarding.actor_assigned_cohort - replay command:
pnpm cli replay-projection --projection=onboarding_progress_projection --tenant=<tenant_id> - fed-by:
event-handlers/projection-onboarding-progress.ts(NEW) - consumed-by:
onboarding_progress.<tenant>.<actor>vault MD +cohort_status.<tenant>vault MD (§1.6)
2.4 Existing substrate (no new migrations)
kb_health_summary_projection(043) — feeds §1.1system_health_snapshot_projection(044) — feeds §1.3 + §1.5data_quality_dashboard(existing) — feeds §1.5 federal readinessagent_enrichment_metrics_projection(Agent Audit family §2.2) — feeds §1.4agent_session_projection(Agent Audit §2.1) — feeds §1.4agent_eval_drift_projection(Agent Audit §2.3) — feeds §1.4drill_metrics_projection(Recall & Proof §2.2) — feeds §1.5
3. Native comms integration
| Surface | Where Platform Observability projections land |
|---|---|
| FIN operator rail | kb_health_summary + channel_health daily pinned; tenant_readiness rollup when any tenant in onboarding |
| Tenant admin rail | tenant_readiness.<tenant> during onboarding window only |
| Cohort dashboard | cohort_status.<tenant> for current cohort manager |
| Slack | channel_health red-status events post to #platform-ops; federal_readiness_tracker weekly summary to #leadership Monday 09:30 |
Weekly agent_enrichment_metrics digest to FIN operator + Anthropic partnership lead | |
| PagerDuty / on-call | channel_health red-status events that persist >5 min trigger PagerDuty page |
4. Frontmatter contract (same as 4 prior arch docs)
---
schema_version: 1
doc_id: <projector-output-doc-id>
doc_kind: system_projected | portal_page
title: <human-readable>
slug: <kebab-case>
source_attribution:
- producer:<projector-name>
- source_events:<comma-separated event_ids>
- source_projections:<comma-separated projection rows>
lifecycle_status: active
created_at: <iso>
updated_at: <iso>
maintained_by: <projector-name>
visibility: company | restricted
data_plane: relationship_data
linked_entities:
- { type: tenant, id: <tenant_id> }
- { type: actor, id: <actor_id> }
- { type: channel, id: <channel_id> }
... etc per projector
tags: [platform_observability, onboarding, ...]
---5. Build sequence
Sequence O1 — 3 NEW JSONB projections (~2 days)
- O1-A
channel_health_projection(migration 078 + handler + dispatcher + test) - O1-B
tenant_readiness_projection(migration 079 + handler + dispatcher + test) - O1-C
onboarding_progress_projection(migration 080 + handler + dispatcher + test)
Sequence O2 — 6 vault MD renderers (~3-4 days)
- O2-A
kb_health_summary(reads existing JSONB; just needs the renderer) - O2-B
channel_health.<tenant>(15-min cron) - O2-C
tenant_readiness.<tenant>(event-driven + daily reconciliation) - O2-D
agent_enrichment_metrics(weekly cron — gated on Agent Audit family shipping) - O2-E
federal_readiness_tracker(weekly cron + event-driven) - O2-F
onboarding_progress.<actor>+cohort_status.<tenant>(event-driven + daily)
Sequence O3 — Agent surface + tooling (~1-2 days)
- O3-A
get_kb_healthMCP tool (extend existing per P1-03) - O3-B
get_channel_healthMCP tool - O3-C
get_tenant_readinessMCP tool - O3-D
get_agent_enrichment_metricsMCP tool (depends on Agent Audit AA3-C) - O3-E
get_federal_readiness_trackerMCP tool - O3-F
get_onboarding_progress+get_cohort_statusMCP tools - O3-G Operator-rail integration (daily kb_health pinned; channel_health latest at top)
Total: ~6-8 days.
6. Coordination with other arch docs
| Other arch doc | Platform Observability dependency |
|---|---|
| QC arch | None direct; QC family contributes to channel_health via QC-photo-pipeline failures (if QC photo parse fails, surfaces as channel_health degradation) |
| Sales & Market arch | None direct |
| Recall & Proof arch | federal_readiness_tracker (§1.5) consumes drill_metrics_projection (R1-B) for “last drill date + result” |
| Agent Audit arch | agent_enrichment_metrics vault MD (§1.4) consumes agent_enrichment_metrics_projection + agent_session_projection + agent_eval_drift_projection — DEPENDENT |
7. Open questions
| ID | Question | Default |
|---|---|---|
PO-Q1 | channel_health cadence — 15min vs 5min? | 15min default; PagerDuty page on red-status >5min persists handles urgency |
PO-Q2 | tenant_readiness during the onboarding window — visible to all employees or admin only? | Admin only initially; expand to all employees once cohort tooling matures |
PO-Q3 | federal_readiness_tracker — should it ship before first federal conversation, or wait until conversation opens? | Ship before; ammunition for the conversation. Per FIN_DATA_SIGNAL_OFFERINGS §4.6 “Wave 4: With Nathel proof in hand, open federal conversations” — we want the readiness tracker IN HAND when those open |
PO-Q4 | agent_enrichment_metrics dependency on Agent Audit — block this whole family on AA, or ship 5 of 6 vault MDs and add §1.4 later? | Ship 5 of 6 first; §1.4 lands when Agent Audit family ships. Don’t gate on cross-family dependency |
PO-Q5 | onboarding_progress — actor-facing variant fully featured, or simplified for cohort experience? | Fully featured; cohorts are small enough that simplification isn’t worth the divergence cost |
PO-Q6 | Cross-tenant aggregation for platform-kb-health-summary-rollup.md (Central-side) — ship now (1 tenant) or wait for multi-tenant? | Wait; aggregating-one-tenant is wasteful — frame as “ready to activate when 2nd tenant onboards” |
8. Productization mapping
| Offering | Platform Observability projector that enables it |
|---|---|
| Internal FIN platform health monitoring | All 6 vault MDs |
| Tenant SLA reporting (Tier 2 contractual obligation) | channel_health.<tenant> + tenant_readiness.<tenant> |
| Federal contract readiness ammunition (per G-1/G-2/G-3 pipeline) | federal_readiness_tracker is the artifact federal conversations consume |
| Agent platform sales support (B-5 custom reports demonstrating agent ROI) | agent_enrichment_metrics |
| Cohort training program (post-Nathel anchor program) | cohort_status.<tenant> |
This arch ships substrate that doesn’t directly map to revenue offerings but enables every other family’s commercial use (channel health → SLA; tenant readiness → onboarding throughput; federal readiness → contract close speed; agent metrics → demonstrate ROI for retention + upsell).
9. Strategic priority
This is intentionally the 5th and last arch doc to ship today, not the 1st. Rationale:
- Tenant-domain projectors (QC + Sales & Market + Recall & Proof) ship customer value directly
- Agent Audit unblocks every other family’s regulatory + audit + replay
- Platform Observability is operator-internal — the audience is FIN team itself
- Without the four prior families shipping projections, there’s not much for Platform Observability to observe
That said: kb_health_summary (§1.1) can ship Wave 1 immediately — the JSONB is already there since migration 043; only the vault MD renderer is missing. This is a 1-day quick win that gives FIN operator visibility from day one.
10. Sign-off
This arch is the canonical reference for any future platform-observability, onboarding, federal-readiness, or agent-ROI-tracking projection work. Future projectors in this family MUST cite this doc in their PR description. Cross-mirrored to fin-central-intranet:docs/architecture/PLATFORM_OBSERVABILITY_AND_ONBOARDING_PROJECTION_ARCHITECTURE_2026-05-18.md.
— claude_orchestrator (Opus 4.7 1M-context, session 7612a827-b892-47e3-86cd-08835737208e)