Skip to content

Architecture Decision Records

This folder contains Architecture Decision Records (ADRs) for the Sync Game. Each record captures a significant technical decision, its rationale, and consequences.

How to read this section

There are 84 ADRs — too many to scan in number order (that's chronological, not conceptual). Two ways in:

  • "What still needs me?"By status — the open / parked / superseded set, separated from the 66 settled decisions.
  • "Where does X live?" → the map and the themed index — the eight themes and how they feed each other.

By status — what still needs you

Two lenses on the same ADRs: this section answers "what do I still need to look at?"; the themed index answers "where does X live?". The 66 Accepted decisions are settled — in force, browse them by theme. The ones below are the live set.

Decided not now — each is gated behind a named trigger; revisit when the trigger fires.

# Title Trigger to revisit
046 Defer team-scoped Sync Hermes skills Real-user demand
050 Agent permission tiers gated by sync_score Tiers go live / token externality
060 Defer custom-domain auth proxy Repeat reachability reports
070 Per-category sync scores Category-axis decision

Kept in place for the diagnostic trail; each points to what replaced it.

# Title Replaced by
010 Decision principles synthesis layer ADR-011 (reframed)
052 Multiplayer generation constraints ADR-053
067 No-bulk-audit policy contributing guide
069 Case-study writeups as marketing artifact brief

Map

The eight themes and how a decision in one feeds the next — scenarios get written, played, measured into a profile, then used:

flowchart TB
  subgraph AUTHOR["① Writing the scenarios"]
    direction LR
    T3["Scenario Content<br/>& Authoring · 13"]
    T4["Scenario Library<br/>& Selection · 5"]
  end
  subgraph PLAY["② Playing them"]
    direction LR
    T5["Campaign<br/>& Narrative · 7"]
    T6["Multiplayer<br/>& Teams · 8"]
  end
  subgraph MEASURE["③ Measuring judgment"]
    direction LR
    T2["Judgment Signals<br/>& Measurement · 11"]
    T1["Scoring<br/>& Decay · 10"]
  end
  subgraph ACT["④ Using the profile"]
    direction LR
    T7["Delegation, Trust<br/>& Agent · 12"]
    T8["Product Surfaces<br/>& Platform · 17"]
  end
  T3 --> T4 --> T5 & T6
  T5 & T6 --> T2 --> T1
  T1 --> T7 --> T8
  T2 --> T8

The number after each theme is how many ADRs it holds. Arrows show the decision pipeline, not strict dependencies.

How the decisions evolved

Most ADRs stand alone. These are the ones that moved — where a later decision superseded, simplified, extended, or amended an earlier one. (Everything else is found faster via the status view or the theme tables.)

flowchart LR
  n010["010 · principles layer"]:::sup -.->|reframed as| n011["011 · delegation map"]
  n016["016 · delegation action"] -->|simplified by| n021["021 · stand / change"]
  n013["013 · deliberative baseline"] -.->|partly superseded| n036["036 · procedural quality"]
  n052["052 · MP gen constraints"]:::sup -->|superseded by| n053["053 · worldview-split"]
  n033["033 · team layer"] -->|extended by| n066["066 · MP mechanics"]
  n062["062 · peer-prediction trust"] -.->|extended by| n077["077 · anti-gaming"]
  n077 -.->|inverse-direction complement| n086["086 · operator framing"]
  n074["074 · multi-domain layer"] -->|expanded by| n076["076 · category taxonomy"]
  n017["017 · none-of-the-above"] -.->|amended by| n082["082 · NoTA cleanup"]
  n078["078 · schema wave 1"] -->|continued in| n079["079 · schema wave 2"]
  classDef sup fill:#e8e2d2,stroke:#9a9da3,color:#9a9da3;

Greyed = superseded. The other ~70 ADRs carry no supersede/extend edge — they're independent decisions, best found via the tables.

Full graph — all 84 ADRs at once (dense; best on a wide screen)

The exhaustive view: every ADR as a node grouped by theme, superseded greyed. It's intentionally large and won't read well at column width — the diagram above and the tables below are the everyday tools.

flowchart TB
  classDef sup fill:#e8e2d2,stroke:#9a9da3,color:#9a9da3,stroke-dasharray:3 3;
  classDef prop fill:#fff,stroke:#f59e0b,color:#0e1116,stroke-dasharray:4 2;
  classDef def fill:#fff,stroke:#7a7d83,color:#5a5e66,stroke-dasharray:1 3;
  classDef rec fill:#dce3ff,stroke:#1b36f5,color:#0e1116;

  subgraph S1["① Scoring & Decay"]
    direction LR
    n001["001"]; n002["002"]; n003["003"]; n004["004"]; n006["006"]
    n030["030"]; n038["038"]; n044["044"]; n045["045"]; n051["051"]
  end
  subgraph S2["② Judgment Signals & Measurement"]
    direction LR
    n015["015"]; n024["024"]; n028["028"]; n043["043"]; n049["049"]
    n056["056"]; n057["057"]; n065["065"]; n078["078"]; n079["079"]; n080["080"]
  end
  subgraph S3["③ Scenario Content & Authoring"]
    direction LR
    n008["008"]; n018["018"]; n019["019"]; n027["027"]; n034["034"]
    n036["036"]; n037["037"]; n053["053"]; n054["054"]; n058["058"]
    n061["061"]; n063["063"]; n067["067"]
  end
  subgraph S4["④ Scenario Library & Selection"]
    direction LR
    n005["005"]; n009["009"]; n012["012"]; n040["040"]; n073["073"]
  end
  subgraph S5["⑤ Campaign & Narrative"]
    direction LR
    n020["020"]; n023["023"]; n025["025"]; n026["026"]; n029["029"]; n032["032"]; n035["035"]
  end
  subgraph S6["⑥ Multiplayer & Teams"]
    direction LR
    n033["033"]; n052["052"]; n059["059"]; n062["062"]; n064["064"]; n066["066"]; n068["068"]; n075["075"]
  end
  subgraph S7["⑦ Delegation, Trust & Agent"]
    direction LR
    n010["010"]; n011["011"]; n013["013"]; n014["014"]; n016["016"]; n021["021"]
    n046["046"]; n047["047"]; n050["050"]; n055["055"]; n071["071"]; n077["077"]
  end
  subgraph S8["⑧ Product Surfaces & Platform"]
    direction LR
    n007["007"]; n017["017"]; n022["022"]; n031["031"]; n039["039"]; n041["041"]; n042["042"]
    n048["048"]; n060["060"]; n069["069"]; n070["070"]; n072["072"]; n074["074"]; n076["076"]
    n081["081"]; n082["082"]; n084["084"]
  end

  n016 -->|simplified by| n021
  n052 -->|superseded by| n053
  n013 -.->|partly superseded| n036
  n010 -.->|reframed as| n011
  n033 -->|extended by| n066
  n078 -->|wave 1 → 2| n079
  n074 -->|expanded by| n076
  n062 -.->|extended by| n077
  n017 -.->|amended by| n082

  class n010,n052,n067,n069 sup;
  class n039,n040,n041,n042,n049,n062,n064,n065,n077 prop;
  class n046,n050,n060,n070 def;
  class n011 rec;

All ADRs through 084 are now on main. (080 → theme ②; 081 + 082 + 084 → theme ⑧.)

Index — by theme

① Scoring & Decay

How the sync score is predicted, computed, smoothed, and aged.

# Title Status
001 Two-stage prediction system Accepted
002 AI-only sync scoring Accepted
003 Sync score decay with quadratic vulnerability Accepted
004 EMA smoothing for profile updates Accepted
006 Confidence capping for new players Accepted
030 AI predictions cached per (session × user) for cross-client consistency Accepted
038 Upgrade primary AI model from Sonnet 4 → Sonnet 4.6 Accepted
044 Always run both predictors (rule + Claude) Accepted
045 Three sync dimensions (Accuracy, Coverage, Readability) Accepted
051 Slow sync_score decay ~5× for early-stage play cadence Accepted

② Judgment Signals & Measurement

What gets measured from a player's choices and rationale — the behavioral signals and the schema that enumerates them.

# Title Status
015 Decision conviction as profile signal Accepted
024 Judgment layer enhancement — 12 behavioral signals Accepted
028 Implicit name-bias detection (Signal 13) Accepted
043 Per-option driver + scenario trigger tagging Accepted
049 Scenario scheduler weighting by user's driver × trigger learning gaps Proposed
056 Record "why" requests as a behavioral trust signal Accepted
057 Integrate post-reveal reaction and note into the prediction pipeline Accepted (Phase A)
065 Surface behavioral attention signals as named user-visible dimensions Proposed
078 Measurement-schema closure pass (Wave 1) Accepted
079 Measurement-schema closure pass (Wave 2) Accepted
080 Central-extraction single-points-of-failure — dependency graph + mitigation plan Accepted

③ Scenario Content & Authoring

Voice, clarity, and the discipline rules that govern how scenarios are written.

# Title Status
008 Scenario labels as concrete actions Accepted
018 Content audit: leading language and speed round "Depends" Accepted
019 Speed round question quality pass Accepted
027 Scenario content guardrails — avoid normalizing universally condemned practices Accepted
034 Case-study voice as the scenario voice contract Accepted
036 Sync measures procedural quality and legibility, not values or uniformity Accepted
037 Constraint discipline as a scenario authoring pattern Accepted
053 Sharpen Principle #6 globally with the worldview-split test Accepted
054 Scenario clarity — stakes, jargon translation, and decision-prompt concreteness Accepted
058 Role framing as a second axis of identity capture — audit for worldview-tax Accepted
061 Scenario generation quality — pre-commitment planning block Accepted
063 Cast block and scan strip clarity rules Accepted
067 No-bulk-audit policy for scenario corpus work Superseded → contributing guide

④ Scenario Library & Selection

The corpus itself: packs, balancing, and which scenario a player sees next.

# Title Status
005 Category balancing via least-played selection Accepted
009 Speed round feeds player profile at reduced weight Accepted
012 Semantic context trigger classification Accepted
040 Curated scenario packs Proposed
073 Starter pack scenario design Accepted

⑤ Campaign & Narrative

Multi-session story play: arcs, narrative flow, progression, and naming.

# Title Status
020 Campaign arc system — narrative-driven multi-session play Accepted
023 Campaign narrative flow Accepted
025 Remove stakes multiplier from campaign scoring Accepted
026 Reactive campaign arcs — decision-driven narrative and scenario selection Accepted
029 Chapter synopsis as dual-source field Accepted
032 Progression gating for Campaign and World Accepted
035 Rename Worlds → Campaigns and Campaigns → Stories Accepted

⑥ Multiplayer & Teams

Shared play: the team primitive, presence, peer prediction, and multiplayer scenario rules.

# Title Status
033 Team-level judgment layer & team primitive Accepted
052 Multiplayer constraints apply to all multiplayer generation, not just team-themed Superseded
059 Multiplayer presence model and leave/rejoin UX Accepted (Phase 1)
062 Peer-prediction accuracy as relational trust (not sync_score) Proposed
064 Multiplayer keeps full difficulty; campaign is the onboarding ramp Proposed
066 Multiplayer mechanics extending ADR-033 Accepted (retroactive)
068 Multiplayer scenario quality parity with solo Accepted (retroactive)
075 Re-introduce curated multiplayer scenarios via is_multiplayer gate Accepted

⑦ Delegation, Trust & Agent

How the profile becomes delegated authority — the agent skill, permission tiers, and anti-gaming.

# Title Status
010 Decision principles synthesis layer — deferred Superseded
011 Delegation map: from single score to per-context authority Recommended
013 Deliberative baseline: training the DTA on your higher self Accepted
014 Relational proximity as decision modifier Accepted
016 Delegation as a first-class game action Accepted
021 Stand/Change simplification (partially supersedes ADR-016) Accepted
046 Defer team-scoped Sync Hermes skills until real-user demand Deferred
047 Defer SKILL.md instruction-tuning until team-usage feedback signal Accepted
050 Agent permission tiers gated by sync_score Deferred
055 Sync agent skill surfaces only profile-derived content - situational reasoning is user-initiated Accepted
071 Profile embedding across agent contexts via Sync MCP Accepted
077 Anti-gaming defenses for token-bearing governance surfaces Proposed
086 Operator-side scenario-framing manipulation (coordination-substrate influence risk) Proposed

⑧ Product Surfaces & Platform

Everything the user touches plus the platform decisions: privacy, auth, twin, intake, and multi-domain positioning.

# Title Status
007 Privacy model: readability transparent, trust private Accepted
017 "None of the above" as a first-class choice Accepted
022 Expand authentication beyond magic links Accepted
031 Persistent dashboard sections over one-shot modals for orientation Accepted
039 Decision capture primitive — extend Sync beyond game scenarios Proposed
041 Share twin — public read-only twin view Proposed
042 Synapses — twin chrome metric Proposed
048 Voice-to-text for rationale inputs via Web Speech API Accepted
060 Defer custom-domain auth proxy until users or repeat reachability reports Deferred
069 Case-study writeups as a core marketing artifact Superseded → brief
070 Per-category sync scores — deferred pending category-axis decision Deferred
072 Remove intake assessment Accepted
074 Pulse as a multi-domain judgment layer Accepted
076 Multi-domain category taxonomy expansion (personal-choice + relational-decision) Accepted
081 Commit conviction before rationale in the solo choosing flow Accepted
082 NoTA flow cleanup — rationale unification, genuine-indifference path, symmetric reveal Accepted
084 RLS write policies for prediction_attestations Accepted

⑨ Meta — docs, process & tooling

Decisions about how we record decisions and run the docs themselves.

# Title Status
083 Docs-site visual layer (Mermaid) and research consolidation Accepted

Format

Each ADR follows this structure:

# ADR-NNN: Title

**Status:** Accepted | Deferred | Superseded
**Date:** YYYY-MM-DD
**Context:** What prompted this decision

## Decision
## Rationale
## Alternatives Considered
## Consequences

Adding a New ADR

  1. Use the next available number — check active branches and the vault, not just main (080–084 were each allocated on separate branches before merging, so main can lag the true count)
  2. Start from template.md and fill in all sections — the "Rationale" and "Alternatives Considered" sections are the most valuable for future readers
  3. Add the "At a glance" box (the template includes it): a plain-language "what it decides" line + status/trigger + 3–5 bold-led bullets — and a small mermaid diagram if the decision has real structure (skip it for flat decisions). This is required on every ADR; see ADR-077 or ADR-050 for the pattern
  4. Reference the source code files where the decision is implemented
  5. Add the row to the matching theme table above (not a flat bottom-of-list append) and the By-status view if it's not Accepted; if the decision supersedes, extends, or amends another, add the edge to the evolution diagram