{"path":"object-model.md","content":"# Deliberus Object Model\n\n> **STATUS: EXPLORATORY.** This document captures entities observed across sketches, the 2013 Meteor prototype, and conversation briefs. It is NOT a schema decision. The ontology requires careful, deep design and philosophy work. The Meteor prototype was merely a prototype — many of its modeling choices may not carry forward. Nothing here is set in stone.\n\n## Core Entities (from sketches + prototype + brief)\n\n### Contention / Claim\nThe **central object**. A statement that can be supported, attacked, qualified, or evaluated.\n\nFrom the hand-drawn contention diagram: a central \"Contention\" node with arrows flowing in from multiple directions — argument clusters above, premise clusters below, counter-argument to the side.\n\n**Properties** (from Meteor prototype `propositions` collection):\n- `text` — the claim statement (immutable after creation per deny rule)\n- `tags` — topic categorization (e.g., `tags.Topic`)\n- `created` — timestamp\n- `user` / `creator` — who authored it\n- Vote aggregations (truthiness, relevance, etc.)\n\n### Argument Bundle\nA **cluster of premises** supporting a conclusion through a specific line of reasoning.\n\nFrom the argument bundles sketch: a \"Conclusion\" at top with three \"VALID\" badges connecting to named bundles — \"speed argument\", \"dream argument\", \"cobalt argument\" — each containing 3-4 premise cards. Tab navigation at bottom: `speed | dream | cobalt | sweet`.\n\n**Key insight**: Multiple independent lines of reasoning can support the same conclusion. Users switch between bundles as semi-contained threads.\n\n### Premise\nA supporting claim within an argument bundle. Feeds into a contention.\n\n### Counter-argument\nAn attack on a contention or premise. Explicitly shown as a distinct node type in the contention diagram.\n\n### Evidence\nLinks a **source** to a **proposition**. Tracked with found/missing votes and a `foundIndex` score.\n\nFrom Meteor prototype:\n- `propositionId` — what claim this evidence supports\n- `sourceId` — where the evidence comes from\n- `text` — the claim text\n- `url`, `domain` — source reference\n- `foundVotes`, `missingVotes`, `foundIndex` — crowd validation\n\n### Source\nAn external reference (URL, document, dataset) that can be linked to claims as evidence.\n\n### Link\nA **relationship between two propositions** — the richest entity in the Meteor prototype.\n\n**Vote types** on links (from `d_enums.linkValues`):\n- `NewFor` / `OldFor` — argument for (from perspective of each proposition)\n- `NewAgainst` / `OldAgainst` — argument against\n- `NewBetter` / `OldBetter` — substitute (one is better phrasing than the other)\n- `Substitute` — combined substitute score\n\n**Computed fields**:\n- `voteCount` — per vote type\n- `voteShare` — percentage per type\n- `isShown` — visibility threshold (>30% vote share)\n- `isBest` — highest share wins\n- `preference[propId]` — ArgForShare, ArgAgainstShare, ArgForCount, ArgAgainstCount, Substitute — enables sorting from either proposition's perspective\n\n### Definition\nContextual definitions for terms used in arguments. Explicitly called out in sketches as a separate dimension.\n\n### Value / Moral Weight\nNormative claims (\"should/ought\") handled separately from descriptive claims.\n\nFrom sketches: \"felicific calculus?\" with caution — values for every proposition, but \"more complicated than that.\"\n\n**Key design question**: How to represent moral importance — quantified, qualified (contextual), or computed/aggregated?\n\n## Scoring Axes\n\nFrom the contention diagram, three triangle markers at bottom:\n\n1. **Truthiness** (True–False) — is the claim factually accurate?\n2. **Relevance** — does this matter to the debate?\n3. **Controversiality** — how much disagreement exists?\n\nAdditional axes from brief:\n4. **\"Follows / does not follow\"** — logical entailment (the Lean-inspired kernel)\n5. **Emotional valence** — most supportive / most negative contributions\n\n### The 30°C Example\nA key distinction in the object model:\n- **Claim/data**: \"It's 30°C today.\" (measurable)\n- **Inference/interpretation**: \"It's hot outside.\" (value-laden / subjective)\n\nDeliberus differentiates world facts from human category boundaries, then lets people vote/calibrate those boundaries explicitly.\n\n## Crowd Signals\n\nFrom sketches:\n- Vote counts (e.g., \"250 total\") with percentage distributions\n- Surfaced categories: \"Most negative\", \"Most supportive\"\n- Show center of mass of belief + strongest supporting/opposing contributions\n- Full distributions, not just averages — \"80% agree it's true\" vs \"50/50 split\"\n\n## Entity Relationships (Graph)\n\n```\nContention ←── Premise (supports)\nContention ←── Counter-argument (attacks)\nContention ←── Evidence (via Source)\nContention ←── Definition (contextualizes)\nContention ←── Value (normative dimension)\n\nConclusion ←── Argument Bundle ←── Premises\n                    ↑\n              [VALID badge — entailment check]\n\nProposition ←→ Link ←→ Proposition\n              (ArgFor/ArgAgainst/Substitute + votes)\n```\n\n## Meteor Prototype Collections (Complete)\n\n| Collection | Description |\n|------------|-------------|\n| `propositions` | Core claims with text, tags, user, created |\n| `arguments` | Supporting argument structures |\n| `substitute_arguments` | Alternative framings of arguments |\n| `substitute_propositions` | Alternative framings of propositions |\n| `evidences` | Source→Proposition links with found/missing scoring |\n| `sources` | External references (URL, domain) |\n| `references` | Additional reference materials |\n| `links` | Relationships between propositions (richest entity) |\n| `elements` | Structural elements (purpose TBD — check code) |\n| `tags` | Topic categorization |\n| `profiles` | User profiles |\n| `urls` | URL tracking |\n| `*_votes` | Voting collections for arguments, propositions, links, evidences, sources |\n\n---\n\n**See also**: [Vision](vision.md) · [Technical Direction](technical-direction.md) · [Sketches & UI Concepts](sketches.md)\n"}