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.
Proposed or Recommended — not yet in force; each is waiting on a call or implementation.
| # | Title | Status |
|---|---|---|
| 011 | Delegation map: single score → per-context authority | Recommended |
| 039 | Decision capture primitive — extend Sync beyond games | Proposed |
| 040 | Curated scenario packs | Proposed |
| 041 | Share twin — public read-only twin view | Proposed |
| 042 | Synapses — twin chrome metric | Proposed |
| 049 | Scheduler weighting by driver × trigger learning gaps | Proposed |
| 062 | Peer-prediction accuracy as relational trust | Proposed |
| 064 | Multiplayer keeps full difficulty; campaign is onboarding | Proposed |
| 065 | Surface behavioral attention signals as named dimensions | Proposed |
| 077 | Anti-gaming defenses for token-bearing surfaces | Proposed |
| 086 | Operator-side scenario-framing manipulation | Proposed |
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.
⑨ 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¶
- Use the next available number — check active branches and the vault, not just
main(080–084 were each allocated on separate branches before merging, somaincan lag the true count) - Start from
template.mdand fill in all sections — the "Rationale" and "Alternatives Considered" sections are the most valuable for future readers - 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
mermaiddiagram 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 - Reference the source code files where the decision is implemented
- 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