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) - Month 1 Complete Version: 0.1.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
Using Docker Compose:
docker-compose up -dUsing Podman: See [Podmanfile.md](Podmanfile.md)
Verify ArangoDB is running: http://localhost:8529 (root/dev)
= Elixir dependencies
mix deps.get
mix deps.compile
= Frontend assets
cd assets && npm install && cd ..= Create PostgreSQL database (for user auth)
mix ecto.create
= Setup ArangoDB collections and indexes
iex -S mix
iex> EvidenceGraph.ArangoDB.setup_database()
= Load UK Inflation 2023 test data
mix run priv/repo/seeds.exsmix phx.serverVisit: - GraphQL Playground: http://localhost:4000/api/graphiql - LiveDashboard: http://localhost:4000/dev/dashboard
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
└── docker-compose.yml # Container setupThe 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 data models
-
✅ Navigation Paths (boundary objects concept)
-
✅ Graph traversal algorithms (evidence chains, shortest path)
-
✅ Zotero metadata mapping (Dublin Core, Schema.org)
-
✅ UK Inflation 2023 test dataset
-
✅ Auto-generate navigation paths
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
-
Repository: https://github.com/Hyperpolymath/bofig
-
Issues: https://github.com/Hyperpolymath/bofig/issues
-
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: 2025-11-22