Infrastructure for pragmatic epistemology. Combining
i-docs navigation,
PROMPT epistemological scoring, and
boundary objects theory.
An evidence graph for investigative journalism.
Status: Phase 1 (PoC) - v1.0.0 Release Version: 1.0.0
Tip | Confused by the terminology? The Binary-Origami Wiki explains everything in metaphors, diagrams, and plain language. |
This isn’t just a database. It’s infrastructure for folding and unfolding evidence—so everyone can see the shape that fits their needs.
Binary: Evidence is stored as clear, connected data (supports/contradicts, 0-100 scores)
Origami: The same evidence can be "folded" into different forms for different audiences
Figuration: The rules for folding/unfolding are transparent and reversible
| Concept | Description | Learn More |
|---|---|---|
i-docs Navigation | "Choose Your Own Adventure" for evidence | |
PROMPT Scoring | "Nutrition labels" for trustworthiness | |
Boundary Objects | "Shared maps" with multiple routes | |
Evidence Graphs | The "skeleton" beneath the origami |
Try the Quick Start to see it in action
Skim the Binary-Origami Metaphor page
Dive into the FAQ if something’s unclear
We didn’t fall from Truth to Post-Truth; we evolved to complex epistemology without building infrastructure. This system IS that infrastructure.
i-docs Navigation: Navigation over narration, reader agency
PROMPT Framework: 6-dimensional epistemological scoring (Provenance, Replicability, Objective, Methodology, Publication, Transparency)
Boundary Objects: Multiple audience perspectives on same evidence
Evidence Graph for Investigative Journalism amd Related Disciplines
Elixir 1.18+ & Erlang/OTP 27+
Phoenix 1.8+
Podman & podman-compose
just (task runner): https://github.com/casey/just
just setupOr manually:
mix deps.get
mix ecto.create
mix run -e "EvidenceGraph.ArangoDB.setup_database()"
mix run priv/repo/seeds.exsjust devVisit: - Application: http://localhost:4000 (register/login required) - GraphQL Playground: http://localhost:4000/api/graphiql (dev only) - Health Check: http://localhost:4000/api/health
query {
claims(investigationId: "uk_inflation_2023") {
idtextclaimTypeconfidenceLevelpromptScores {
provenancereplicabilityobjectivemethodologypublicationtransparencyoverall
}
supportingEvidence {
evidence {
titleevidenceType
}
weightconfidence
}
}
}query {
evidenceChain(claimId: "claim_1", maxDepth: 3) {
rootClaim {
text
}
nodes {
...onClaim {
idtext
}
...onEvidence {
idtitle
}
}
edges {
relationshipTypeweightconfidence
}
maxDepth
}
}mutation {
createClaim(input: {
investigationId: "uk_inflation_2023"text: "Inflation disproportionately affected renters"claimType: SUPPORTINGconfidenceLevel: 0.85promptScores: {
provenance: 70replicability: 65objective: 75methodology: 70publication: 65transparency: 70
}
}) {
idtextpromptScores {
overall
}
}
}mutation {
importFromZotero(
investigationId: "uk_inflation_2023"zoteroJson: {
key: "ABC123"itemType: "journalArticle"title: "New Economic Study"url: "https://doi.org/10.1111/example"creators: [{name: "Smith, J."}]
tags: [{tag: "economics"}]
}
) {
idtitlezoteroKey
}
}query {
navigationPaths(
investigationId: "uk_inflation_2023"audienceType: RESEARCHER
) {
idnamedescriptionpathNodes {
entityIdentityTypeordercontext
}
}
}bofig/
├── lib/
│ ├── evidence_graph/ # Core business logic
│ │ ├── claims/ # Claims context
│ │ │ └── claim.ex
│ │ ├── evidence/ # Evidence context
│ │ │ └── evidence.ex
│ │ ├── relationships/ # Graph edges
│ │ │ └── relationship.ex
│ │ ├── navigation/ # Audience paths
│ │ │ └── path.ex
│ │ ├── arango.ex # ArangoDB client
│ │ ├── prompt_scores.ex # PROMPT scoring
│ │ └── application.ex # OTP supervisor
│ └── evidence_graph_web/ # Phoenix web layer
│ ├── schema/ # GraphQL schema
│ │ ├── types/ # Type definitions
│ │ └── schema.ex # Root schema
│ ├── endpoint.ex
│ └── router.ex
├── priv/repo/
│ └── seeds.exs # UK Inflation 2023 test data
├── config/ # Environment configs
├── docs/ # Architecture docs
│ ├── database-evaluation.md
│ └── zotero-integration.md
├── ARCHITECTURE.md # Data model, API design
├── ROADMAP.md # 18-month plan
├── CLAUDE.md # AI assistant context
├── Containerfile # OCI container build
└── podman-compose.yml # Container orchestrationThe seed data includes a complete investigation:
7 Claims (primary, supporting, counter)
10 Evidence items (expand to 30)
Official statistics: ONS CPI, Ofgem, BoE
Academic: Peer-reviewed studies
Think tanks: Resolution Foundation, IFS
Interviews: Expert opinions
10 Relationships (supports/contradicts/contextualizes)
3 Navigation Paths:
Researcher: Evidence-first, methodology priority
Policymaker: Authoritative sources, recommendations
Affected Person: Personal impact, clarity
| Evidence | Prov | Repl | Obj | Meth | Pub | Trans | Overall | |----------|------|------|-----|------|-----|-------|---------| | ONS CPI Data | 100 | 100 | 95 | 95 | 100 | 95 | 97.5 | | Academic Study | 85 | 80 | 75 | 85 | 90 | 75 | 81.8 | | Think Tank Report | 75 | 70 | 65 | 75 | 80 | 70 | 72.3 | | Expert Interview | 85 | 45 | 60 | 50 | 40 | 75 | 59.0 |
iex -S mix phx.server
= Query ArangoDB directly
iex> EvidenceGraph.ArangoDB.query("FOR c IN claims RETURN c")
= Get a claim
iex> EvidenceGraph.Claims.get_claim("claim_1")
= Evidence chain traversal
iex> EvidenceGraph.Relationships.evidence_chain("claim_1", 3)Hosting: Hetzner Cloud (EU data sovereignty)
ArangoDB: ArangoDB Oasis (€45/month)
Phoenix: Systemd service, Nginx reverse proxy
CI/CD: GitHub Actions
Binary-Origami Wiki - Explains the metaphor and concepts in plain language
The Metaphor - Why "Binary-Origami Figuration"?
Folding 101 - Hands-on tutorial
FAQ - Common questions answered
Glossary - Term definitions
ARCHITECTURE.md - Data model, database design, API specs
ROADMAP.md - 18-month implementation plan
docs/database-evaluation.md - ArangoDB comparison
docs/zotero-integration.md - Two-way sync design
CLAUDE.md - AI assistant context
Multi-model ArangoDB integration (document + graph)
GraphQL API with Absinthe (15 queries, 11 mutations)
PROMPT epistemological scoring (6 dimensions, audience weighting)
Claims, Evidence, Relationships, Navigation Paths data models
Graph traversal algorithms (evidence chains, shortest path, contradiction detection)
Zotero REST API (import, export, batch-import, sync-status)
Phoenix 1.8 LiveView frontend (5 pages: Dashboard, Investigation, Graph, PROMPT, Navigation)
User authentication (phx.gen.auth with bcrypt, magic links)
D3.js force-directed graph + radar chart visualisations
Audience-weighted navigation paths (6 types)
UK Inflation 2023 test dataset (7 claims, 30 evidence, 38 relationships)
Production deployment (Containerfile, nginx, systemd)
NUJ user testing protocols
A2ML v2.1 Cyberwar-Ready Trustfile
257 tests, 0 failures, full RSR compliance
This isn’t just a database. It’s infrastructure for coordinating without consensus.
Every design choice asks: 1. Does this support multiple audience perspectives? 2. Does this make epistemology measurable? 3. Does this enable navigation over narration?
Open source from day 1. See [ROADMAP.md](ROADMAP.md) for planned features.
Month 3 = Decision Point: User testing with 25 NUJ journalists determines go/no-go.
LithoglyphDB - The narrative-first, reversible, audit-grade database
GPNL - Dependently-typed Glyph Projection Language (compile-time proofs)
Lithoglyph Studio - Zero-friction GUI for non-technical users
Zotero-Lithoglyph - Reference manager with PROMPT scores
MPL-2.0 (Palimpsest License)
Repository: https://github.com/Hyperpolymath/bofig
User Testing: NUJ network (Month 3, 6, 12)
Built with: Elixir, Phoenix, ArangoDB, Absinthe, LiveView, D3.js
Inspired by: i-docs (PMPL-1.0 Open Doc Lab), Boundary Objects (Star & Griesemer), Pragmatic Epistemology
Last Updated: 2026-02-21
See TOPOLOGY.md for a visual architecture map and completion dashboard.