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
podman-compose up -dVerify ArangoDB is running: http://localhost:8529 (root/dev)
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") {
id
text
claimType
confidenceLevel
promptScores {
provenance
replicability
objective
methodology
publication
transparency
overall
}
supportingEvidence {
evidence {
title
evidenceType
}
weight
confidence
}
}
}query {
evidenceChain(claimId: "claim_1", maxDepth: 3) {
rootClaim {
text
}
nodes {
... on Claim {
id
text
}
... on Evidence {
id
title
}
}
edges {
relationshipType
weight
confidence
}
maxDepth
}
}mutation {
createClaim(input: {
investigationId: "uk_inflation_2023"
text: "Inflation disproportionately affected renters"
claimType: SUPPORTING
confidenceLevel: 0.85
promptScores: {
provenance: 70
replicability: 65
objective: 75
methodology: 70
publication: 65
transparency: 70
}
}) {
id
text
promptScores {
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"}]
}
) {
id
title
zoteroKey
}
}query {
navigationPaths(
investigationId: "uk_inflation_2023"
audienceType: RESEARCHER
) {
id
name
description
pathNodes {
entityId
entityType
order
context
}
}
}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.
-
FormDB - The narrative-first, reversible, audit-grade database
-
FQLdt - Dependently-typed Form Query Language (compile-time proofs)
-
FormDB Studio - Zero-friction GUI for non-technical users
-
Zotero-FormDB - Reference manager with PROMPT scores
PMPL-1.0-or-later (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.