Multi-perspective — five lenses per file
The most important idea in the office library is the same source gets multiple post-its from different lenses. Same source_url. Different perspective values. Each post-it independently recallable.
Example — one AI incident, five lenses
An AI safety incident drops into the inbox:
~/incidents/raw/2026-05-19_INC-2026-0142.jsonlINC-2026-0142 · LLM chatbot · misinformation + financial · severity 4/5A single source. Five analyzer agents read it. Five post-its written. Same source_url. Same casefile_anchor (chatbot-hallucinated-policy). Different lens.
| Lens | What it sees |
|---|---|
| Root Cause | ”Technical: LLM hallucination on under-trained policy domain. Retrieval layer absent. No grounding citation enforced.” |
| Threat Modeling | ”Abuse vector: prompt-injection could engineer the bot to promise costly fabrications. Reputational denial-of-service risk.” |
| Guardrail Designer | ”Required controls: retrieval grounding · confidence threshold · output filter · human-on-refunds · disclaimer.” |
| Dev Process | ”Where to insert: pre-deploy policy test suite (95%+ accuracy) · CI canary hallucination rate · red-team simulation pre-release.” |
| Critic | ”What the prior four missed: legal layer, contractual ToS layer, organizational ownership gap, audit-trail requirement.” |
Same incident. Five readings. Each one valid. None of them contradicts.
The fanout
📄 ONE inbound AI safety incident │ Stage 1 Incident Collector ▼ 📄 readable .md sidecar │ Stage 3 — five analyzers in parallel ┌──────────┬──────────┬───────────┬──────────┬──────────┐ ▼ ▼ ▼ ▼ ▼┌─────────┐ ┌─────────┐ ┌──────────┐ ┌────────┐ ┌─────────┐│ ROOT │ │ THREAT │ │ GUARDRAIL│ │ DEV │ │ CRITIC ││ CAUSE │ │ MODEL │ │ DESIGNER │ │ PROCESS│ │ │└────┬────┘ └────┬────┘ └────┬─────┘ └───┬────┘ └────┬────┘ ▼ ▼ ▼ ▼ ▼ 5 post-its with the same source_url and casefile_anchor, but different perspective values.Why this beats tags
Tags answer what is this file about. Perspectives answer who is reading it and what do they see.
| Question | Tags answer | Perspectives answer |
|---|---|---|
| ”Show me hallucination incidents” | All hallucination-tagged files | All Root-Cause-perspective post-its mentioning hallucination |
| ”Show me chatbot prompt-injection risks” | All chatbot-tagged + injection-tagged files | All Threat-Model-perspective post-its on chatbot incidents |
| ”Show me where SDLC controls were missing” | (no clean answer) | All Dev-Process-perspective post-its noting missing CI/test gates |
| ”What did the team miss?” | (no clean answer) | All Critic-perspective post-its across the incident corpus |
Tags are flat. Perspectives are typed.
Domain-specific lens sets
Different offices use different lens sets. The five lenses above are tuned for the AI Guardrail Lab. Other offices use different sets:
| Office | Typical lenses |
|---|---|
| AI Guardrail Lab | Root Cause · Threat Modeling · Guardrail Designer · Dev Process · Critic |
| Maritime operations | Engineer · Class Surveyor · Operations · Charterer · Owner |
| Editorial workflows | Reader · Editor · Fact-checker · Audience · Publisher |
| Finance / audit | Accountant · Auditor · Compliance · Operations · Risk |
The pattern is the same. The lens identities change by domain.
How it gets enforced
Stage 3 of the pipeline. When a Converter writes a readable .md and tags it with a casefile, the Story-builder spins up N analyzer agents in parallel (N = number of lenses configured for that casefile type). Each analyzer:
- Reads the same
.md - Knows its own lens (loaded from
agents/03-analyzer-{lens}.md) - Writes a post-it with the lens recorded in the
perspectivecolumn - Cites the source row(s)
The pipeline guarantees same-source → N post-its in O(N) parallel calls.
Recall
recall.py --perspective root-cause --topic chatbot-hallucination returns every Root-Cause-lens post-it about chatbot hallucination patterns. cluster.py --topic chatbot-hallucination returns the cross-lens narrative.