Core concepts
System overview
The full architecture end-to-end. Components, data flow, technology
choices, and the principles each subsystem upholds.
Multi-agent pipeline
Retired redirect — how the writer / critic / gate-reviewer model
evolved into the
qa.* rail atoms on the LangGraph canonical_blog
graph_def.Anti-hallucination layers
Three independent layers — prompts, LLM QA, programmatic validator — and
the six OSS rails (DeepEval ×3, guardrails ×2, Ragas).
Plugin architecture
Twenty plugin entry-point groups (Tap, Probe, Job, Stage, LLMProvider,
PublishAdapter, Module, and more) and how they compose.
Retrieval and routing
RAG retrieval stack
LlamaIndex
BaseRetriever over the existing pgvector embeddings table.
Hybrid (BM25 + vector + RRF) plus cross-encoder rerank.Niches and RAG modes
Per-niche writer modes — TOPIC_ONLY, CITATION_BUDGET, STORY_SPINE,
TWO_PASS — and when each is appropriate.
Model selection
Per-step
*_model pins. Operators tune the model for each pipeline
step instead of hardcoding names in code.Prompt management
UnifiedPromptManager — Langfuse-first, then YAML defaults. Every
production prompt lives in the DB and traces through Langfuse.
Data and infrastructure
Database schema
Every table, the modular database service layer, and the migration system.
Module v1
Business modules (ContentModule, FinanceModule overlay) — the orthogonal
axis to capability plugins.
Static export pipeline
Push-only JSON export to any S3-compatible storage (R2, S3, B2, MinIO).
Worker container filesystem
Layout inside the worker container — bind mounts, generated assets,
secret hygiene.
Specialized topics
URL scraper SSRF guard
SSRF protection on outbound HTTP — what’s blocked and why.
Poindexter as engine
The “engine plus employees” mental model and where it diverges from a
classic agent framework.