Acta

March 8, 2026 · View on GitHub

This document specifies object types, schemas, state machines, transition rules, and integrity mechanisms. It is a buildable spec, not a principles document.


1. Contribution Types

1.1 Question

A request for information. No evidence burden.

FieldRequiredDescription
bodyyesThe question
contextnoBackground or motivation
tagsnoTopic tags

Allowed responses: evidence, update, resolution Initial state: open

1.2 Claim

An assertion about reality. Carries an evidence burden.

FieldRequiredDescription
bodyyesThe assertion
categoryyesfactual · opinion · hypothesis
sourceconditionalRequired if category = factual. URL, DOI, or public record reference
reasoningconditionalRequired if category = factual and no source. Falsifiable logical argument
uncertaintyconditionalRequired if category = opinion or hypothesis. Explicit statement of confidence and limitations

Allowed responses: evidence, challenge, update Initial state: open if burden is met, unsubstantiated if factual without source or reasoning

Note

Claims with category: opinion or category: hypothesis enter the ledger with no evidentiary gate. The category marking IS the burden — explicit honesty about what you're asserting.

1.3 Prediction

A time-bound, falsifiable claim about the future.

FieldRequiredDescription
bodyyesWhat is predicted
resolution_criteriayesMachine-checkable or human-evaluable success/failure condition
resolution_dateyesISO-8601 date by which resolution is expected
resolution_sourceyesThe authoritative source to check against (URL, API, public record)
resolution_source_fallbacknoBackup source if primary is unavailable

Allowed responses: evidence, challenge, update, resolution Initial state: open


2. Response Types

2.1 Evidence

Supporting or refuting information attached to a contribution.

FieldRequiredDescription
target_idyesThe contribution this evidence relates to
bodyyesThe evidence and its relevance
sourceyesVerifiable reference
stanceyessupporting · refuting · contextual

2.2 Challenge

A structural objection to a contribution. Higher burden than a claim — this is the anti-DDoS mechanism.

FieldRequiredDescription
target_idyesThe contribution being challenged
target_assertionyesThe specific assertion being challenged (quoted or referenced)
basisyescounter_evidence · logical_error · source_unreliable · missing_context
argumentyesThe substantive refutation. Must include counter-evidence, identification of a specific logical error, or demonstration of source unreliability
sourceconditionalRequired if basis = counter_evidence or source_unreliable

Important

A challenge that says "I disagree" without specifying target_assertion, basis, and argument fails schema validation and is returned for revision. This is a deterministic Tier 1 check — no LLM involved. This asymmetric friction prevents semantic DDoS while preserving the right to challenge.

2.3 Update

New information that modifies or extends a contribution.

FieldRequiredDescription
target_idyesThe contribution being updated
bodyyesThe new information
update_typeyescorrection · additional_context · scope_change · alternative_source

2.4 Resolution

An assertion that a question is answered or a prediction has resolved.

FieldRequiredDescription
target_idyesThe contribution being resolved
outcomeyesThe resolution outcome
sourceyesEvidence of resolution
resolution_typeyesanswered (questions) · confirmed · refuted · partially_confirmed · unresolvable (predictions)

3. State Machine

3.1 Question States

stateDiagram-v2
    [*] --> open
    open --> resolved: resolution response posted
    open --> closed: original poster closes
    resolved --> open: resolution challenged
TransitionTriggerAuthority
open → resolvedA resolution response is posted with type: answeredAny participant; original poster can endorse
open → closedOriginal poster explicitly closesOriginal poster only
resolved → openA valid challenge is posted against the resolutionDeterministic — challenge passes schema check

3.2 Claim States

stateDiagram-v2
    [*] --> open
    [*] --> unsubstantiated
    open --> contested: valid challenge posted
    unsubstantiated --> open: evidence or source added
    contested --> open: all challenges addressed
    open --> superseded: newer claim references and replaces
    contested --> superseded: newer claim references and replaces
TransitionTriggerAuthority
→ openClaim meets schema requirementsDeterministic — schema check
→ unsubstantiatedfactual claim without source or reasoningDeterministic — schema check
open → contestedValid challenge response postedDeterministic — challenge passes schema check
contested → openEvery challenge has a response with counter-evidence or refutation that itself has not been challengedComputed — structural evaluation
→ supersededA newer claim explicitly references this one with update_type: scope_change and provides stronger evidenceExplicit action by another participant

Warning

supported is NOT an explicit state transition. It is a computed display property. The protocol evaluates: "this claim has N evidence responses with stance supporting and 0 unaddressed challenges" → renders as supported in the UI. The protocol does not declare truth. It shows you the evidence structure and you evaluate.

3.3 Prediction States

stateDiagram-v2
    [*] --> open
    open --> resolved_confirmed: criteria met per source
    open --> resolved_refuted: criteria not met per source
    open --> unresolvable: source unavailable
    resolved_confirmed --> contested: resolution challenged
    resolved_refuted --> contested: resolution challenged
    unresolvable --> open: alternative source accepted
    contested --> resolved_confirmed: challenge refuted
    contested --> resolved_refuted: challenge refuted
TransitionTriggerAuthority
open → resolved_*resolution_date passes and resolution_source provides a parseable answer matching resolution criteriaAny participant posts resolution response with source evidence
resolved_* → contestedValid challenge posted against the resolutionDeterministic — schema check
open → unresolvableresolution_source is unavailable (404, unparseable, ambiguous). 7-day grace, then re-check. If still unavailable, transitionSystem-triggered after grace period
unresolvable → openParticipant posts update with type: alternative_source. If unchallenged for 7 days, prediction reopens with new sourceParticipant action + time-lock

3.4 The Oracle Fallback Chain

When a prediction's resolution_source is unavailable:

1. Check primary resolution_source at resolution_date
2. If unavailable → check resolution_source_fallback (if declared)
3. If still unavailable → 7-day grace period → re-check primary
4. If still unavailable → state: UNRESOLVABLE
5. Any participant may propose alternative source via update
6. If alternative is unchallenged for 7 days → accepted, prediction re-evaluated
7. If challenged → prediction stays UNRESOLVABLE until manually resolved or cancelled

No forced resolution on bad data. Ever.


4. Content Filtering

4.1 Hard Reject (Never Enters Ledger)

These categories are rejected before writing. Detection uses Tier 1 (deterministic pattern matching) + Tier 2 (LLM-assisted flagging → human confirmation for edge cases).

  • CSAM — zero tolerance, immediate rejection and report
  • Malware / exploit payloads — binary/executable content, active exploit code
  • Doxxing — posting non-public personal identification information of others
  • Impersonation — spoofing another participant's device attestation
  • Bulk spam — structural detection: >N identical or near-identical payloads from different devices within a time window
  • Credible, specific, operational violent threats — "I will [specific act] at [specific target] at [specific time]"

Caution

"Credible, specific, operational" is the threshold, not "mentions violence." Discussion of violence, historical accounts, policy debate about violent conflict — all enter the ledger normally. The hard-reject line is content that constitutes operational planning of imminent harm.

4.2 Accept and Tag (Enters Ledger with State)

  • Factual claim without evidence → state: unsubstantiated
  • Opinion without explicit marking → tagged by Tier 2 as likely_opinion, enters ledger
  • Content that Tier 2 flags but cannot confidently categorize → enters ledger with review_pending tag, queued for Tier 3 (human review)

4.3 Return for Revision (Structural, Not Content)

  • Missing required fields for the contribution type
  • Invalid schema (e.g., challenge without target_assertion)
  • No device attestation
  • Returned with specific field-level feedback: "This claim is marked factual but has no source or reasoning. Add one, or change category to opinion or hypothesis."

5. Integrity Layer

5.1 Hash-Chain Entry

Every entry (contribution + response) in the ledger includes:

{
  "entry_id": "uuid-v7",
  "prev_hash": "sha256(previous_entry)",
  "timestamp": "ISO-8601",
  "type": "contribution | response",
  "subtype": "question | claim | prediction | evidence | challenge | update | resolution",
  "author": {
    "type": "human | agent",
    "device_attestation_hash": "sha256(dpop_proof)",
    "agent_operator": "optional — who operates this agent"
  },
  "payload": { ... },
  "state": "current state",
  "linked_to": ["entry_ids this references"],
  "entry_hash": "sha256(all_above_fields)"
}

5.2 Tombstoning

When content must be physically purged after ledger entry (CSAM, court order, severe doxxing that slipped past hard-reject):

{
  "entry_id": "original-uuid",
  "prev_hash": "preserved",
  "timestamp": "preserved",
  "tombstone": {
    "category": "CSAM_REMOVAL | LEGAL_ORDER | OPERATOR_REMOVAL",
    "authority_reference": "court order # or operator decision ID",
    "tombstoned_at": "ISO-8601",
    "original_content_hash": "sha256(original_payload)"
  },
  "payload": null,
  "entry_hash": "sha256(all_above_including_tombstone)"
}
  • Content payload is irrecoverable
  • Hash-chain integrity is preserved — next entry still references this entry's hash
  • Tombstone is publicly visible: "[REMOVED: category]"
  • original_content_hash proves the entry existed without revealing content

5.3 Linkage

Every response structurally links to its target via target_id and linked_to. These are not threaded replies — they are typed references forming a directed graph of epistemic relationships. The graph is a consequence, not a product feature.


6. Moderation Tiers

TierMechanismScopeReversible?
Tier 1Deterministic codeSchema validation, rate limits, structural checks, device attestation, spam detectionN/A — structural
Tier 2LLM-assistedContent classification, hard-reject flagging, opinion taggingNever final for epistemic content. Tags only. Hard-reject flags escalate to Tier 3
Tier 3Human reviewAppeals, hard-reject confirmation, tombstone decisions, edge casesFinal for that decision; decision itself can be challenged

Important

The LLM rule: LLMs may classify, tag, and flag. LLMs may NOT make irreversible epistemic decisions alone. Every LLM-influenced decision on epistemic content is either a tag (reversible) or escalated to human review (Tier 3).