Measurement Schema — Working Notes¶
Archived 2026-06-01 — moved from
docs/research/todocs/archive/in the docs consolidation (ADR-083). Preserved iteration history, not current architecture. Current docs: Measurement Schema (canonical) · Reader's Guide.
Status: Promoted 2026-05-31. Canonical doc now lives at ../research/foundations/measurement-schema.md. This working-notes file is preserved as iteration history — swing constructions, decompositions, parked-question deliberations, synthesis derivations, convergence trajectory. Useful for understanding why the schema ended where it did.
Original status (pre-promotion): Active iteration. NOT a committed deliverable. Final form will live at measurement-schema.md once stable.
Opened: 2026-05-31
Origin: ADR-074's flagged follow-up — "measurement schema audit becomes higher-priority" after multi-domain positioning landed. Parallels the cube exercise (scenario-dimension-cube-working.md → scenario-dimension-cube.md) but for measurement primitives rather than design primitives.
Connects to:
- docs/research/foundations/scenario-dimension-cube.md — companion design doc; this exercise references substrate from it but does not own substrate
- docs/research/scenario-dimension-cube-working.md — methodology template (swings, decompositions, re-attack discipline)
- docs/decisions/074-pulse-as-multi-domain-judgment-layer.md — strategic context that made this exercise higher-priority
- docs/decisions/024-judgment-layer-signals.md — 12 behavioral signals (+ pragmatic-routing and self-aware-aspiration-gap from experiment-new-domain-signals.md = 14 total)
- docs/decisions/045-five-sync-dimensions.md — sync dimensions; three surfaced, two internal
- docs/decisions/056-why-as-behavioral-trust-signal.md — "why" requests as measurement primitive
- docs/decisions/057-post-reveal-reaction-integration.md — post-reveal reaction integration; Phase B deferred
- docs/decisions/065-behavioral-attention-signals.md — attention signals surfacing
- docs/decisions/070-per-category-sync-scores-deferred.md — per-category scoring deferred
- docs/decisions/071-profile-embedding-across-agent-contexts.md — exposure surface for agents
- docs/research/experiments/experiment-new-domain-signals.md — pragmatic-routing + self-aware aspiration gap surfacing; classic example of what this schema exercise should find more of
Purpose¶
The measurement schema is a structural enumeration: the complete list of primitives Pulse uses to measure judgment, organized by layer (capture / extraction / aggregation / exposure) plus a measured-outcomes bin for emergent properties.
Parallel to the cube: same method (swings, decompositions, falsification), same shape (primitives + values + tagging rules), same discipline (load-bearing only — parked questions for what's deferred, submerged candidates for what's rejected, decision log for what's resolved).
Difference from the cube: the cube describes scenario inputs (what the designer commits to). The measurement schema describes player × system outputs and intermediates (what the running system records, derives, aggregates, and exposes).
Killer use case — multi-domain expansion under ADR-074. Cube + measurement schema together specify the architectural surface that needs to hold under non-governance corpus expansion. If the schema is complete, signal recalibration after corpus expansion is bounded work; if it's incomplete, recalibration risks discovering primitives we never named.
Four causal layers + measured outcomes¶
Capture → Extraction → Aggregation → Exposure are causally chained: each is a function of the prior. Measured outcomes sit outside the chain — emergent properties of player × system that the schema reveals but doesn't specify.
Layer 1 — Capture¶
Per-round records authored by the player or by the system as basic logging. What gets written to the database when a round finishes, by an actor that isn't doing analysis. Frozen at write.
Layer 2 — Extraction¶
Computations on capture. Sub-distinguished (decided 2026-05-31): - Write-time extractions — computed once at the round, stored on the row, treated as frozen. AI twin prediction, rule-engine prediction, classify-driver outputs. - Read-time extractions — computed on demand from current capture state. Calibration aggregates, sync dimensions, learning rate, occasion noise.
The sub-distinction earns its keep on (1) update semantics — prompt-version changes affect write-time and read-time differently, (2) historical vs current views — trajectory questions need frozen labels, (3) debugging triage — first question is "is the input frozen or live?"
Layer 3 — Aggregation¶
Per-player roll-ups of extractions. EMA-weighted distributions, lifetime scores, calibration aggregates.
Layer 4 — Exposure¶
External surfaces — user UI, agent context blocks, MCP tools, share cards.
Measured outcomes¶
Emergent properties observed in player × system interaction but not specified by the schema. Identity load, subjective stakes threshold, calibration drift. The cube parallel.
Substrate references — out of measurement schema scope¶
Scenario design metadata (cube vector, category, triggers, driver-per-option, content rules) is authored at scenario-creation time, not round-time. Different actor (scenario author / generator), different lifecycle.
The cube doc owns substrate. The measurement schema references substrate as a precondition for extractions but does not enumerate it. Captures join through to scenario substrate; extractions can join through to both.
Concrete implication: scenario tagging is NOT a capture primitive in the measurement schema. The per-round derivation "chosen driver" (combining option choice × option's substrate driver tag) IS a write-time extraction.
Naming disambiguation (added 2026-05-31). The cube also uses "C-prefix" notation for its content-layer axes: cube-C1 (cost categories in tension) and cube-C2 (expertise-requirement, added 2026-05-31 per OQ-5 cube-conversation outcome). The schema's capture layer uses C1–C14 for capture primitives (C1 = option choice, etc.). These are independent namespaces — when this doc references the cube's content-layer dimensions, it qualifies them as cube-C1 / cube-C2. Schema-side C1–C14 unqualified means capture primitives.
v0 primitive list — iterating¶
Layer 1 — Capture¶
Player-authored or pure-logging records on the round / session / agent-interaction row. Frozen at write.
| # | Primitive | Values / shape | Source | Notes |
|---|---|---|---|---|
| C1 | Option choice | A / B / C / D / none-of-the-above | Player | The atomic decision |
| C2 | Rationale text | free-text | Player | Highest-bandwidth player input |
| C3 | Conviction | 1–5 | Player | Self-reported certainty |
| C4 | Decision time | ms | System clock | From scenario render to submit |
| C5 | Post-reveal reaction | gets_me / off_track / interesting / null | Player | ADR-024 quick-tap |
| C6 | Post-reveal note | free-text / null | Player | ADR-057 high-bandwidth signal |
| C7 | Self-prediction (milestone) | predicted driver profile | Player | At games 10/25/50 + arc completion. mode: solo |
| C8 | Peer prediction | guessed option per other player | Player | Used downstream in peer-read calibration. mode: multi |
| C9 | Predictor confidence | 1–5 on peer prediction | Player | Distinct from C3 — confidence in reading another player. mode: multi |
| C10 | Post-discussion action | stand / revise / delegate | Player | Persuadability primitive. mode: multi |
| C11 | Agent profile read event | read_id, client, timestamp | System logging | agent_profile_reads row |
| C12 | "Why" request flag | bool | System logging | why_requested on read row (ADR-056) |
| C13 | Agent response feedback | rating up/down + free-text | Player via agent | agent_response_feedback joined via read_id |
| C14 | Session metadata | timestamps, solo/multi, campaign linkage, device, is_test_session | System logging | Frames the capture |
Reclassified out of capture (now write-time extractions): - ~~AI twin prediction~~ — moved to E_ai_pred (system-computed at round, stored, frozen) - ~~Rule-engine prediction~~ — moved to E_rule_pred (same)
Removed entirely (now substrate, not in measurement schema): - ~~Scenario tagging vector~~ — owned by the cube doc
Capture gaps — candidates for promotion (not primitives yet)¶
A structurally new class: capture of the process of deciding, not just the decision. Currently the capture layer records the player's final choice, rationale, conviction, and timing. It doesn't record what happened during the decision window. Flagged as candidates; promote only if swings show load-bearing.
| Candidate | What it captures | Connects to | Why not auto-promoted |
|---|---|---|---|
rationale_edit_trace |
Type / delete / retype sequence on C2 during compose | Adds fidelity to ADR-024 signal 6 (decision timing) | Lower priority (Swing 15, 2026-05-31). Tested in Swing 15; doesn't meet load-bearing bar. Discrimination exists but isn't product-load-bearing — most cognitive-style discrimination already covered by E6 + E_classify_driver. Useful negative finding: cube's "add when load-bearing, not when interesting" discipline held. |
option_tap_trace |
Tap sequence before final submit (e.g., B → C → D submitted as D) | Within-round vacillation — sibling to ADR-024 signal 7 (currently only fires post-discussion) | Ready for promotion when eng happens (Swing 15, 2026-05-31). Provides structured solo-mode persuadability signal the schema currently lacks entirely. Closes Swing 4's E7 solo-mode null risk via structured path (vs. text path Closure A E_persuadability_text). |
attention_state |
Tab focus/blur events during decision window (via Page Visibility API) | Calibrates decision_time_ms against actual attending time. Connects to cube axis 2 (decision deadline). Two-swing load-bearing confirmation (Swings 5 + 15, 2026-05-31) — E6's slow-regime signal is contaminated without it; distracted-slow misreads as deliberator-slow. | Ready for promotion when eng happens (Swing 15). Promotion priority elevated to "ready for promotion when eng happens" from "deferred candidate." |
Considered and submerged from this list: - Hover times per option — noisy without baseline; touch devices have no hover signal. - Scroll behavior — noisy across viewports. - Re-views of the scenario (scrolling back after choosing) — low frequency, low expected signal.
Layer 2 — Extraction¶
Write-time extractions¶
Computed at round write, stored on the row, treated as frozen. Re-deriving requires backfill.
| # | Primitive | Source | Notes |
|---|---|---|---|
| E_ai_pred | AI twin prediction + confidence | LLM call against profile, before player submits | Stored on round. Used by E_sync_match and calibration aggregates. |
| E_rule_pred | Rule-engine prediction | Two-stage rule engine | Companion to E_ai_pred in the ensemble. |
| E_classify_driver | Driver / reasoning mode / attention focus classification | Classify-driver Claude call on C1 + C2 + substrate | ADR-024 prompt extension. Returns ~3 labels per round. |
| E_chosen_driver | Driver of this round's choice | Deterministic: C1 × substrate (option-tagged driver) | Different from E_classify_driver — substrate-derived, not Claude-derived |
| E_chosen_trigger | Trigger(s) fired for this round | Deterministic: C1 × substrate trigger tags | Same shape |
| E_sync_match | Did E_ai_pred match C1? | Boolean + confidence-weighted | Feeds A1 sync_score. |
| E_classify_trigger | Trigger inference from rationale | Possible Claude extension — needs check | Open whether this exists or is just substrate-tag-fired |
Read-time extractions¶
Computed on demand from current capture + write-time extractions. No storage; always current under prevailing logic.
| # | Primitive | Source | Notes |
|---|---|---|---|
| E5 | Confidence calibration | C3 × E_sync_match over rolling window | ADR-024 signal 5 |
| E6 | Decision timing signature | C4 distribution; attention_state when shipped (Swing 5 + 15 closure path) | ADR-024 signal 6. ⚠️ Multi-swing closure path (Swing 5 repeat, 2026-05-31): when attention_state ships, E6 normalizes timing against attended time — distracted-slow correctly distinguished from deliberating-slow. Prose-synthesis annotation per principle 7 generalization: X5 prose should surface attended-time qualifier alongside timing (e.g., "appears slow but distracted, attention dropped 90s of 120s"). |
| E7 | Persuadability profile | C10 × context (multi); option_tap_trace × context (solo, when shipped) | Per experiment: domain-conditional, not flat. mode: multi today; mode: both when option_tap_trace ships (Swing 4 repeat closure path). Multi channel via C10 post-discussion; solo channel via option_tap_trace within-round vacillation. ⚠️ Solo-mode null risk (Swing 4, 2026-05-31): uncontained today; closure path via option_tap_trace (Swing 15 promoted to "ready when eng") relaxes mode constraint. Risk magnified for paste-based mainstream users (methodology principle 6) until closure ships. |
| E8 | Peer read confidence | C8 × C9 × actual | ADR-024 signal 8. mode: multi |
| E9 | Dissent profile | C1 NoTA rate + consensus deviation | ADR-024 signal 9 |
| E10 | Rationale-choice alignment (authenticity) | E_classify_driver × revealed pattern across games | ADR-024 signal 10. ⚠️ Dual-interpretation (Swing 3, 2026-05-31): alignment-low can read as inauthenticity OR epistemic humility (hedging rationale at high conviction). Combine with other signals before valuing. Higher leverage for paste-based users (methodology principle 6) — static X5 text must commit to a framing; MCP agents can hold both. Rename candidate "rationale-choice expression match" promoted in priority. |
| E11 | Learning rate | E_sync_match accuracy trend over time | ADR-024 signal 11 |
| E12 | Occasion noise | within-person variability on repeat-shape scenarios | ADR-024 signal 12. ⚠️ Refinement promoted (Swing 7, 2026-05-31): current spec measures choice variability only, conflates pure noise with reasoned variation across repeats. Closure A: refine algorithm to be rationale-controlled — fire only when E_classify_driver outputs (reasoning_mode, driver, attention) are similar across repeats AND choices differ. No new primitive; refines computation rule. SPOF dependency (Swing 7 repeat, 2026-05-31): post-refinement, E12 directly depends on E_classify_driver. Canonical entry for the dependency-graph closure (Swing 6 repeat). If E_classify_driver is contaminated (e.g., Swing 3 verbal-style finding), E12 readings inherit — hedging-style player could trigger false rationale-similar reads, causing E12 to misfire as occasion noise. E12 closure is canonical principle 7 example at extraction layer. |
| E13 | Pragmatic routing | C2 patterns — frame-restructuring vs. binary acceptance | NEW per experiment; not yet in ADR-024 |
| E14 | Self-aware aspiration gap | C2 + C6 patterns — explicit ideal-vs-actual statements | NEW per experiment. ⚠️ Dual-interpretation (Swing 3, 2026-05-31): gap-statements can be calibration insight OR verbal hedging style. Combine with E10 + verbal-style indicators. Higher leverage for paste-based users (methodology principle 6) — same as E10. Rename candidate "ideal-actual reference frequency" promoted in priority. |
| E15 | Reasoning style aggregation | E_classify_driver reasoning_mode field over time | ADR-024 signal 1 (the aggregate; per-round label is E_classify_driver) |
| E16 | Attention model aggregation | E_classify_driver attention field over time | ADR-024 signal 4 (same structure) |
| E17 | Arc trajectory | choice + signal drift across campaign chapters | ADR-024 signal 3 |
| E18 | Self-awareness | C7 (self-prediction) vs. computed profile + C5/C6 | ADR-024 signal 2. mode: solo (depends on C7). ⚠️ Solo-mode null risk (Swing 6, 2026-05-31): same shape as E7 — multiplayer-only players have null E18. Risk magnified for paste-based users (principle 6). ⚠️ Depends on E_classify_driver reliability (Swing 6): the "computed profile" E18 compares self-prediction against is built from E_classify_driver outputs aggregated to A4–A10. If E_classify_driver is contaminated (e.g., Swing 3 verbal-style finding), E18 measures self-prediction against a biased baseline. See central-extraction under-question. |
| E19 | Drift indicator | last-N E_sync_match misses / N | ADR-045 override |
| E20 | Domain-confidence inference | persuadability/risk variance across domain | Meta-signal surfaced by experiment |
| E21 | Cross-domain signal consistency | comparing E5–E20 firings across substrate-domain | Only computable once corpus spans domains |
| E22 | E_context_bleed | classifies C2 + C6 for real-world-parallel mentions ("this hit close to home", "I've been in this exact situation", "there's a real X in my life") | Added Swing 13 (2026-05-31). Per-round signal. Feeds A14 + M9. Inherits Swing 8 lesson — designed to read free-text content from start, not just structured patterns. |
Read-time extraction candidates (not primitives yet)¶
Existing capture (C14 session metadata) supports a class of extractions we don't currently run. No new capture needed — just extractions on what's already there. Promote if swings or production data show they're load-bearing.
| Candidate | What it would extract | Source |
|---|---|---|
E_tod_calibration |
Conviction × accuracy across time-of-day buckets | C14 timestamps × E_sync_match |
E_session_fatigue |
Conviction / accuracy / decision-time drift across the Nth scenario in a single session | C14 session linkage × E5/E6/E_sync_match |
E_device_signature |
Mobile vs. desktop differences in decision time, conviction, NoTA rate | C14 device × C1/C3/C4 |
Open within layer 2: several signals (E5, E15, E16) have some values stored on player_decision_profiles columns (e.g., calibration_score, reasoning_style_distribution) — meaning their classification might be partly write-time and partly read-time. Swings will need to sharpen which is which per signal. Provisionally treating the per-round label as write-time (E_classify_driver) and the per-player distribution as read-time aggregate.
Layer 3 — Aggregation¶
Per-player roll-ups stored on player_decision_profiles or computed on demand. Aggregations feed exposure.
| # | Primitive | Form | Source | Notes |
|---|---|---|---|---|
| A1 | sync_score (lifetime) | int 0–100 | EMA of E_sync_match | Headline number on Twin / share / rankings. scope: per-player-lifetime. ⚠️ EMA over variable-density input — null on NoTA rounds. Pragmatic-routers' A1 is built from fewer contributing rounds than binary-accepters'. Same percentage, different sample size. Surfaced by Swing 1 (2026-05-31). |
| A2 | Sync dimensions: Accuracy / Coverage / Readability | int 0–100 × 3 | computed on demand from capture + extractions | ADR-045. Accuracy + Coverage: both modes; Readability: mode: multi. scope: per-player-lifetime |
| A4 | category_patterns | EMA distribution per category | E_chosen_driver × substrate-category | Original 3 base profile dimensions. scope: per-player-lifetime |
| A5 | context_rules | EMA distribution per trigger | E_chosen_trigger | scope: per-player-lifetime |
| A6 | option_preferences | EMA distribution per option-shape | C1 | scope: per-player-lifetime |
| A7 | Signal JSONB columns (11) | per-signal aggregates | E5–E20 outputs | ADR-024. scope: per-player-lifetime |
| A8 | resonance_stats | per-reaction counts | C5 aggregated | scope: per-player-lifetime. ⚠️ Refinement promoted (Swing 8, 2026-05-31): counts C5 enum only without checking C6 note semantics. Player who taps "gets_me" + contradictory note still counted as agreement. Closure A: refine A8 to check note semantics — lightweight classification of C6 (agree / disagree / supplement) stratifies the count. No new primitive; refines computation rule. |
| A9 | calibration_stats | overconfidence rate, etc. | E5 aggregated | Per-domain breakouts possible (would tag scope: per-domain). scope: per-player-lifetime |
| A10 | behavioral_trajectory | per-campaign arc | E17 stored per campaign | ADR-024 column on campaigns. scope: per-campaign |
| A11 | A_why_rate | % of agent reads where C12 (why-requested) = true | C11 + C12 across reads | Added Swing 10 (2026-05-31). Read-time. scope: per-player-lifetime. Feeds M5 (user trust state with agent). Convention 6 compliance (Swing 10 repeat): carries N (agent read count) denominator; surfaces as tentative below threshold. |
| A12 | A_feedback_engagement | % of agent reads where C13 (feedback) is set | C11 + C13 (rating-or-text presence) across reads | Added Swing 10. Read-time. scope: per-player-lifetime. Discriminates "trusting + engaged" from "indifferent + disengaged" — both have low why-rate but differ on feedback engagement. Feeds M5. Convention 6 compliance (Swing 10 repeat): carries N (agent read count) denominator. |
| A13 | A_feedback_positivity | positive vs. negative split when C13 rating set | C13 rating across reads. Classifies C13 free-text alongside rating per principle 7. | Added Swing 10. Read-time. scope: per-player-lifetime. Feeds M5. Now principle 7 aligned by design (Swing 10 repeat). Convention 6 compliance: carries N (rated reads count) denominator; sparse-feedback players surface as tentative. |
| A14 | A_context_bleed_rate | rate of E22 (E_context_bleed) firings across rounds | E22 aggregated | Added Swing 13 (2026-05-31). Read-time. scope: per-player-lifetime. Feeds M9. Closes the last unscaffolded M-series outcome. |
Per-group aggregation candidates (not primitives yet)¶
Multiplayer surfaces a class of aggregations at scope: per-group not currently in the schema. Promote when multiplayer-feature work needs them.
Important architectural distinction (refined Swing 14, 2026-05-31): Two of the four candidates are scope-variants of existing primitives (handled by Q4 mechanisms when they ship); two require new primitive shapes.
| Candidate | What it would aggregate | Architectural shape | Gap category (Swing 14 repeat) | Notes |
|---|---|---|---|---|
A_group_sync |
Team-level sync score across a session | Scope-variant of A1 (per-group scope) | Aggregation-gap | Q4 mechanism covers; no new primitive shape. Inherits Convention 6 for sample-size. |
A_group_consensus |
Convergence rate per scenario within group | New shape — distribution across members per scenario, not a per-player concept | Architectural-gap | Genuine new primitive if promoted; requires Q5-style architectural work. |
A_dyadic_readability |
Per-pair predictability matrix | New shape — matrix, not vector; pair-level | Architectural-gap | Scales O(n²) in group size — flag if persisted at scale; genuine new primitive if promoted. |
A_group_drivers |
Group-level driver / trigger distribution | Scope-variant of A4 (per-group scope) | Aggregation-gap | Q4 mechanism covers; no new primitive shape. Inherits E_classify_driver SPOF dependency. |
Provisional open within layer 3: sample-size gates and EMA half-lives are aggregation-confidence conventions. Are they themselves primitives, or tagging conventions? Provisionally tagging conventions (parallel to the cube's reference-player calibration rule), pending swing.
Layer 4 — Exposure¶
External surfaces. Each entry is a channel; underlying data is from aggregation.
| # | Primitive | Audience | Source |
|---|---|---|---|
| X1 | sync_score (headline) | user + agent | A1 |
| X2 | Three Sync Dimensions | user (Play screen) | A2 |
| X3 | Behavioral attention signals (5 of 12 surfaced) | user (insights page) | subset of A7 — ADR-065 proposed |
| X4 | category_patterns cards | user (insights) | A4 |
| X5 | agent_context_block (prose) | agent (both MCP and paste) | derived from A4–A10 + E5–E20. ⚠️ Mainstream adoption path runs through X5 as static text (per methodology principle 6). Interpretive load is highest here — null-handling, dual-interpretation, and freshness assumptions must work under static snapshot, not just dynamic refresh. ⚠️ Principle 7 generalization applies (Swing 4 repeat): prose synthesis should consume rationale-text paths (C2, C6) directly when describing combinational frames (e.g., calibration × persuadability quadrants), not only structured aggregates A4–A10. |
| X6 | personal_context field | agent (both MCP and paste) | A4–A10 condensed. Same static-text consideration as X5. |
| X7 | MCP tools (get_profile / get_recent_decisions / submit_feedback) | agent (MCP-only, e.g. Hermes / Claude Code / Cursor) | exposes A1–A10 + capture history. Dynamic refresh; agent can re-query. Serves niche early-adopter base per methodology principle 6. |
| X8 | Drift detection nudge | user | E19 override on X2 |
| X9 | Activity log | user | capture-layer rendering |
| X10 | Share cards / Twin pages / rankings | public/peer | X1 + X5 derivatives |
| X11 | "Why" expansion text | agent → user | A1–A10 + capture rendered as reasoning prose |
Held back from exposure (internal-only): - Authenticity alignment (E10) — too sensitive without dedicated UX. ADR-065 deferred. - Learning rate (E11) — ambiguous without narrative. ADR-065 deferred.
Measured outcomes¶
Emergent properties of player × system interaction. Not specified by the schema; observed in response.
| # | Outcome | Observed in | Source |
|---|---|---|---|
| M1 | Identity load | rationale richness, conviction-without-articulation, self-aware aspiration gap | cube |
| M2 | Subjective stakes threshold | C3 × C1 at calibrated substrate magnitudes | cube — may reclassify to read-time extraction once substrate magnitude is fully integrated |
| M3 | Domain confidence asymmetry | persuadability/risk variance across domains. Includes technical/expertise sub-patterns (medical deference, financial-technical confidence, engineering jargon). Substrate-side anchor: cube-C2 (expertise-requirement) as of 2026-05-31. M3 reported as cube-C2 × player_domain_confidence — cube tags the scenario-side requirement, schema measures the player-side confidence response. |
experiment + 2026-05-31 cube-C2 anchor |
| M4 | Calibration drift | rolling miss rate exceeding baseline | ADR-045 |
| M5 | User trust state with agent | A11 (A_why_rate) × A12 (A_feedback_engagement) × A13 (A_feedback_positivity) combinations | ADR-056. Aggregation scaffolding added Swing 10 (2026-05-31) — outcome remains emergent (multiple combinations indicate different trust states) but now has stable primitives feeding it rather than depending on raw capture interpretation downstream. |
| M6 | Aspiration gap magnitude | E14 × choice direction | experiment |
| M7 | Frame-restructuring tendency | E13 firing rate × choice direction | experiment |
| M8 | Cross-domain signal stability | same signal direction across substrate domains | experiment, cross-domain expt |
| M9 | Play-time context bleed | E22 (E_context_bleed) per-round + A14 (A_context_bleed_rate) aggregated | experiment S4 (Priya) — added 2026-05-31. Scaffolded Swing 13 (2026-05-31) — E22 + A14 added. M9 closes the last unscaffolded M-series outcome. |
M9 framing. Some scenarios pull real-world context into the player's decision that the system cannot see directly. The S4 Priya scenario is the canonical case — CoachJ confirmed post-play that the scenario hit real-world Priya context, which the conviction-1 capture didn't distinguish from generic uncertainty. Mirror of M1 identity load: player-conditional, emergent, observed indirectly. The schema reveals it (via abnormal-conviction patterns + post-reveal notes naming the bleed) but doesn't specify it. Self-report was ruled out by ADR-024 as unreliable, so M9 stays an outcome rather than becoming a capture primitive.
Tagging conventions¶
How to read the primitive tables.
- Mode tag — every primitive carries an implicit
modetag with valuessolo/multi/both. Default isboth; only exceptions are tagged inline. Multiplayer-only primitives (C8, C9, C10, E8) tagmulti. Solo-only primitives (C7, E18) tagsolo. Mode is overlay, not layer — same shape as the cube treating domain as overlay rather than axis. - Scope tag — aggregation primitives only. Values:
per-game/per-player-lifetime/per-domain/per-group/per-campaign. Default isper-player-lifetime; only exceptions tagged inline.per-groupis multi-only by construction;per-domainbecomes meaningful once corpus spans domains (ADR-074). - Write-time vs read-time — extraction layer only. Established by Q1. Listed in separate sub-tables.
- Reference player calibration — inherited from the cube. Magnitude and horizon comparisons calibrate to the median Pulse user; player-conditional readings of those (e.g., subjective stakes threshold) live in measured outcomes, not aggregations.
- Dominant-component rule — inherited from the cube. When a primitive has multi-component values for a single round (e.g., a scenario captures both
you-know-moreANDmutual-uncertainty-intrinsicinfo-topology), tag by the dominant component; let other primitives carry the secondary structure. - Sample-size annotation (promoted from SS-1 under-question, Swing 11; prose-synthesis sub-rule added Swing 11 repeat) — every aggregation primitive carries an explicit sample-size denominator (N) that propagates to consumers. Exposure layer surfaces aggregations differently when N is below a per-primitive confidence threshold (e.g., E5 calibration with N<10 displays as "tentative reading" rather than firm value). Prose-synthesis sub-rule (Swing 11 repeat, 2026-05-31): when X5 (or other prose-synthesis layers per principle 7 generalization) generates prose referencing an aggregation, the prose should surface N or carry tentativeness when N is below threshold. Example: "based on 8 calibration events, your profile suggests..." rather than bare assertion. Composition with OQ-staleness (Swing 11 repeat): for state-sensitive outcomes (M4, M5), sample-size AND staleness are independent reliability concerns — pasted descriptions should carry both N denominator AND "as of [date]" annotation. Defaults: per-primitive thresholds defined in a separate document; the convention requires the annotation, not the threshold value. Surfaced by repeated observation across Swings 1 (A1 variable-density EMA), 9 (E7 at low N multi), and 11 (every aggregation at low total N). Promotion criteria: 3 swings confirming the same gap met. Complementary with central-extraction SPOF architectural finding: Convention 6 handles sample-size reliability; SPOF dependency graph handles signal-quality reliability. Together they cover the two reliability dimensions.
- Final-state vs. process capture (promoted from meta-pattern under-question, Swing 1 repeat; generalized Swing 4 repeat) — any aggregation, extraction, or prose-synthesis layer that consumes a final-state capture should check whether co-captured process information would provide additional discrimination. Original framing (Swings 1–8): structured-capture vs. rationale-text dual-path divergence. Broadened (Swing 15): final-state captures drop process information — examples include final C2 text vs. edit trace, final C1 choice vs. tap sequence, C4 timing vs. attention state, C5 enum vs. C6 note text. Generalized (Swing 4 repeat): principle applies to prose-synthesis layers (X5 agent_context_block, X11 "why" expansion) too — prose generation that consumes structured aggregates should also check co-captured rationale text. 11 of 16 swings + 5 repeats confirm the pattern across three framings. Promotion criteria: original framing confirmed across 4+ swings; broader framing confirmed at promotion in Swing 15 + repeat confirmation; prose-synthesis generalization confirmed in Swing 4 repeat. Closures: refine algorithms (or prose prompts) to consume both paths, or accept divergence with explicit annotation.
Cross-layer dependencies — initial sketch¶
- E_classify_driver, E10, E13, E14, E15, E16, E18 depend on C2 (rationale text). Capture sparsity on C2 is a load-bearing constraint — these signals null when rationale is empty.
- E5, E11 depend on C3 (conviction) AND E_ai_pred. Removing the twin would gut calibration.
- A1 depends on E_sync_match which depends on C1 + E_ai_pred.
- X5 (agent_context_block) is the single fattest exposure — draws on most of A4–A10. The schema's exposure surface concentrates here.
- M5 (trust state) depends on C12 + C13 entirely — capture-driven, no extraction needed.
Cube ↔ schema cross-check (2026-05-31)¶
Methodology principle 3 fired as the structural-to-swing bridge. For each cube axis, what measurement does the schema have? Gaps point at either missing primitives or under-systematized aggregation.
| Cube axis | Substrate value | Schema measurement | Correspondence |
|---|---|---|---|
| 1. Prior commitment | none / soft / strong | E_classify_driver attention focus may fire interpersonal when commitment is salient; no commitment-conditional extraction |
Implicit only |
| 2. Decision deadline | seconds / minutes / hours / days / weeks / soft | C4 (decision_time_ms) captures actual deliberation; E6 (decision timing signature) aggregates | Strong |
| 3. Consequence horizon | immediate / months / years / lifelong | No direct measurement of horizon-of-reasoning vs. horizon-of-consequence mismatch. Experiment surfaced "time horizon orientation" as a cross-domain signal — currently not extracted | Gap |
| 4. Reversibility | full / partial-recoverable / partial-permanent / none | No reversibility-conditional extraction | Gap |
| 5. Scope | self / dyad / small group / institution / future-generations | E_classify_driver attention political (institutional) partially fires; no scope-conditional extraction |
Partial / Implicit |
| 6. Relational distance | self / intimate / close / acquaintance / stranger / institutional-abstract | E_classify_driver attention interpersonal covers close/intimate; no distance-conditional extraction |
Partial / Implicit |
| 7. Authority you hold | full / oversight / collective-vote / influence-only / none | No authority-conditional extraction | Gap |
| 8. Information topology | symmetric-complete / mutual-uncertainty-resolvable / etc. | No topology-conditional extraction. Project memory [[project-it-depends-traces-to-information-topology]] says player response varies meaningfully here |
Gap |
| 9. Counterparty agency | static / reactive / strategic | E_classify_driver reasoning-mode may fire systems_thinking under strategic agency — but no dedicated extraction |
Implicit only |
| 10. Visibility | private / dyadic-observed / group-observed / publicly-observed / deferred-audit | Connects to E7 (persuadability) — but persuadability is mode-conditional, not visibility-conditional. Solo rounds default to private | Gap |
| 11. Stakes magnitude | trivial / meaningful / serious / life-defining | M2 (subjective stakes threshold) captures this as measured outcome — emergent, not extracted | Strong (as outcome) |
| 12. Default outcome | favors-action / favors-inaction-static / favors-inaction-dynamic / forces-choice | E9 (dissent profile) NoTA rate may correlate with certain defaults but isn't default-conditional | Gap |
| C1. Cost categories in tension | subset of 6 categories | E_classify_driver attention has corresponding categories; A4 (category_patterns) is current aggregation. Per-category sync scores parked (ADR-070) | Strong |
Headline finding — the gap is at aggregation stratification, not at primitive enumeration¶
The cross-check surfaces ~7 cube axes with no dedicated measurement (3, 4, 7, 8, 10, 12, and arguably 1, 9). At first read this looks like a 7-primitive gap.
It's not. The schema deliberately uses general-purpose extractions (reasoning style, attention focus, calibration, persuadability) that fire regardless of substrate, and trusts aggregation to surface axis-conditional patterns. Adding 7 new "response-to-axis-N" extractions would proliferate and probably under-fire.
The real gap is at layer 3: aggregations currently stratify by category and trigger (A4, A5) but not by cube-axis values. Once cube integration goes live in the generator (currently v1.8.1 rolled back, working toward v1.9.0+), substrate will carry cube vectors. At that point, A4–A10 could stratify by axis values — surfacing "this player calibrates differently under collective-vote authority than under full authority" without adding new primitives.
Conclusion of cross-check: No new primitives required. One aggregation-layer extension flagged for when cube is live in substrate. Captured as parked question (next section).
Strong correspondences confirmed¶
- Axis 2 (deadline) ↔ C4 + E6 — clean, single-purpose.
- Axis 11 (magnitude) ↔ M2 — measured-outcome correspondence; emergent by design.
- Axis C1 (cost categories) ↔ E_classify_driver attention + A4 — clean.
Implicit correspondences acknowledged¶
- Axes 5, 6 land partly in E_classify_driver attention categories. Not dedicated; not nothing.
- Axes 1, 9 lean on reasoning-mode classification. Implicit.
These are not gaps to close; they're confirmation that the general-purpose extractions are doing the work they were designed to do. The cube cross-check confirms the architecture is coherent: substrate specifies the condition; the schema measures response via general signals; aggregation stratifies by condition to reveal patterns. That's the same shape as the cube's own framing ("the cube specifies condition, not surface").
Methodology principles¶
Borrowed from the cube and extended.
- Swings — construct examples the schema would fail to capture. If it fails, add a primitive or refine a value. Target: 10–12 swings before promotion.
- Decompositions — apply schema to N real player histories (CoachJ's profile is the most resolved reference). Anything that doesn't fit gets promoted. Target: 5–10 player histories minimum.
- Cross-check against the cube — does each cube axis have a measurement correspondence? Gaps indicate either missing measurement primitives or unmeasured cube axes.
- Re-audit pass on rushed conclusions — per
[[feedback-dont-compress-analytical-work]]. The cube exercise learned this lesson hard; don't repeat. -
Assumption audit — for each primitive, surface its implicit assumptions about player preference structure or behavior. When the assumption breaks, the schema's response options are: (a) relax via additional value/state, (b) split the primitive, or (c) mark assumption explicit and scope it. Emerged from OQ-1 and OQ-2 below — both surfaced that headline measurements bake in preference-structure assumptions that don't always hold.
-
Two-audience exposure check (added 2026-05-31). Exposure primitives serve two audience classes with different freshness profiles:
- Agent-MCP clients (Hermes, Claude Code, Cursor, OpenClaw — the niche early-adopter base) get fresh reads per call via X7 MCP tools. Can re-query, disambiguate, hold dual-interpretation frames. Schema null-states can be surfaced as "no data" with the agent handling the absence intelligently.
- Paste-based clients (ChatGPT, regular Claude.ai conversations, the mainstream adoption path) get a frozen snapshot of X5 (agent_context_block) + X6 (personal_context) at paste time. No refresh until re-paste. No re-query. Interpretive load front-loaded into static text.
For each primitive that touches exposure, ask: does this work correctly under static snapshot, not just dynamic refresh? Null-handling, dual-interpretation framing, and freshness assumptions all need the static-snapshot stress test. The mainstream adoption path runs through X5 as static text — its interpretive quality is load-bearing.
Swing log¶
Attempts to break the schema. Each entry: construction, schema response by layer, finding, modifications.
Swing 1 — same-profile pair, different pragmatic-routing rate (2026-05-31)¶
Targets: OQ-1 (sync_score vs. profile-quality conflation).
Construction: - Player A (Pragmatic Router): 50 rounds. 40 NoTA. Rich rationale (~120 words avg) on each. Conviction avg 4.0. High "interesting" reaction; notes frequently flag false-dilemma framing. E13 fires very high. - Player B (Binary Accepter): 50 rounds. 0 NoTA. Same rationale length, same conviction, similar reaction frequency (weighted "gets_me" instead). E13 near zero. - Identical on C3, C4, C5/C6 frequency, structural shape of C2. Differ on C1 (NoTA rate) and downstream.
Schema response by layer: - Capture: Discriminates strongly (C1 differs, C2 content distinguishable). - Extraction: Discriminates strongly (E13 firing rate, E_classify_driver reasoning-mode pattern). E_chosen_driver null on NoTA rounds — or misrepresentative if forced-closest fires (OQ-2 interaction). - Aggregation: Partial. A7 (signal JSONB) discriminates via E13 firing rate. A4 (category_patterns) thins for Player A because NoTA rounds don't contribute clean driver signal. A1 (sync_score) does NOT discriminate — both ~50%, but A's is built from 10 contributing rounds and B's from 50. - Exposure: Partial. X3, X5 discriminate via A7. X1 (headline sync_score) does NOT discriminate. - Measured outcomes: M7 (frame-restructuring tendency) emerges differently — indirect.
Finding: The schema as a whole discriminates Player A from B. The headline metric X1 collapses them. OQ-1 located more precisely: not a missing primitive at extraction or most aggregations; the gap is between aggregation A1 and headline exposure X1.
Two sub-issues surfaced: 1. A1 has a hidden sample-size problem. EMA over variable-density input (null on NoTA). Same % built from different N. Always true; swing made it explicit. 2. A4 thins silently for pragmatic-routers. E_chosen_driver null on NoTA → A4's EMA receives less signal per round → category_patterns look well-formed but rest on thin data.
Schema modifications: - A1 row annotated with the variable-density caveat (applied). - No new primitives auto-promoted. - Three candidate closures logged (A_profile_quality as derived aggregation; A2 extended with Richness/Depth dimension; exposure-only fix on X1). None promoted — needs a further swing to discriminate between closures A and B specifically. Closure C is cheapest.
Re-audit: A1 caveat added. No other prior conclusions invalidated. Q1–Q5 hold. Cube cross-check unaffected.
OQ-1 status: Partially resolved — gap confirmed, located at A1+X1. Full resolution (which closure to take) deferred to downstream conversation.
Swing 2 — NoTA forced closest-match contamination (2026-05-31)¶
Targets: OQ-2 (forced closest-match fabricates preference signal when no closest exists).
Construction: - Case A (NoTA with mild lean): Player picks NoTA, forced-closest = B. Rationale: "None felt right but B preserves optionality." Conviction moderate (3). Real lean exists; NoTA flags option quality dissatisfaction. - Case B (NoTA with no closest — pragmatic routing): Player picks NoTA, forced pick = B arbitrarily. Rationale: "None of these are what I'd do. I'd delegate / restructure / refuse the binary." Conviction on forced pick: low/null; conviction on framing: high. Actual move outside option space.
Schema response by layer: - Capture: Partial — C1 identical (NoTA + forced-closest = B). C2 rationale distinguishes. C3 conviction potentially distinguishes but current UX doesn't separate "conviction in framing" from "conviction in forced pick." - Extraction: Partial — E13 fires on B, not A — discriminates. E_chosen_driver fires on both with forced-closest's substrate driver — but on Case B that signal is fabricated. - Aggregation: Contaminated. A4 receives fabricated E_chosen_driver as if it were real choice → wrong signal contributes to EMA. Worse than Swing 1's null case. - Exposure: Contaminated downstream — X5 agent_context_block draws on A4, misrepresenting pragmatic-routers.
Finding: Worse than Swing 1. Swing 1 found A4 thins silently for pragmatic-routers (E_chosen_driver null → less signal). Swing 2 finds A4 is contaminated (E_chosen_driver fires on forced-closest → wrong signal). Forced-closest mechanism is actively introducing noise, not just leaving a gap.
The schema's correct signal IS there in C2 + E13. The contamination is that the structured capture path (C1 + forced-closest) fabricates a driver signal that the rationale path would have correctly flagged as routing. Two parallel signal paths disagree; the structured one wins by feeding A4 silently.
Schema modifications: - No new primitives auto-promoted. - Three candidate closures logged: (A) split C1 into NoTA-with-closest / NoTA-no-closest with UX prompt; (B) make forced-closest skippable, null E_chosen_driver on skip; (C) override E_chosen_driver from rationale-text routing detection — cheapest, depends on E_classify_driver accuracy. - OQ-1 and OQ-2 closures probably co-decided — both touch NoTA-handling design.
Re-audit: Swing 1's "A4 thins silently" framing needs amendment. A4 doesn't just thin under current capture; it contaminates. The combined picture: pragmatic-routers' A4 is a mix of real signal (within-option rounds) and fake signal (forced-closest drivers from NoTA rounds). Worse than Swing 1 conveyed. Updating Swing 1 entry's finding section by reference.
OQ-2 status: Confirmed real. Resolution deferred to downstream product conversation, paired with OQ-1.
Swing 3 — hedging rationale vs. decisive rationale, same reasoning (2026-05-31)¶
Targets: E_classify_driver verbal-style normalization, E10 authenticity interpretation, E14 self-aware aspiration gap interpretation.
Construction: - Player C (Hedging rationaler): 50 rounds. C2 avg 80 words, heavy hedging ("maybe X, possibly Y, I think probably..."). C3 conviction 4. Choices consistent. - Player D (Decisive rationaler): 50 rounds. C2 avg 80 words, direct ("X is the call. Cost Y accepted. W loses on V."). C3 conviction 4. Same choices. - Identical: C1, C3, C4, C5/C6 frequency, underlying logical structure of C2. - Differ: C2 verbal style only — hedged vs. decisive at same word count.
Schema response by layer: - Capture: Discriminates on style (C2 text differs); content equivalent. - Extraction (write-time): E_classify_driver likely extracts same reasoning_mode + attention. reasoning_mode_confidence likely lower on Player C (hedging reads as low-confidence classification). - Extraction (read-time): E10 (authenticity) likely fires lower on Player C — rationale hedges, conviction is 4 → mismatch labeled as low alignment. E14 (aspiration gap) may falsely fire — hedging misread as gap-statements when it's verbal style. - Aggregation: Propagates — A7 reflects discriminated values; A9 calibration_stats may downgrade Player C despite identical conviction-choice consistency. - Exposure: X5 describes Player C as "lower authenticity" or "self-aware of own uncertainty" — same observation, two valuations.
Finding: Schema discriminates, but direction of interpretation is ambiguous. Same signal pattern reads as either negative (low authenticity, performative confidence) or positive (epistemic humility, meta-cognitive honesty). Same dual-interpretation problem ADR-024 named for persuadability — but applied less explicitly to E10 and E14.
Deeper issue: E10 and E14 currently have valuation baked into their names ("alignment" / "gap"). Verbal-hedging case shows same signal pattern → two valuations. Schema's signal is correct; labels carry interpretation that may not generalize.
Sub-finding reinforcing cube cross-check: "Schema relies on general-purpose extractions doing the work" — verbal style can confound general-purpose extractions in ways not currently corrected for. E_classify_driver's reasoning_mode_confidence may track verbal style as much as actual reasoning confidence.
Schema modifications: - No new primitives auto-promoted. - E10 row note added: dual-interpretation flag (alignment-low can be humility or inauthenticity; combine with other signals before valuing). - E14 row note added: dual-interpretation flag (gap-statements can be calibration or verbal hedging; combine with E10 + verbal-style indicators). - Three candidate closures logged: (A) normalize for verbal-style in E_classify_driver prompt — cheapest; (B) dedicated E_hedging_index extraction + stratify — heavier; (C) rename E10/E14 to valuation-neutral framings — doesn't fix signal, fixes downstream framing. Probably A + C together.
Re-audit: - E10 and E14 need reframing. Working doc rows updated with dual-interpretation flags. The signals themselves are correct, but labels carry interpretation. Same care ADR-024 took with persuadability needs applying to E10/E14. - Cube cross-check finding reinforced — general-purpose extractions can be confounded by surface features (verbal style) of capture. - No structural changes to layer cut or v0 primitive set. Swings 1, 2 findings hold.
Swing 3 status: Schema discriminates; interpretation ambiguity is the substantive finding. Three closures logged.
Swing 4 — calibration × persuadability four-quadrant (2026-05-31)¶
Targets: E5 × E7 combinational discrimination. Does the schema represent the four quadrants, or expose signals separately and trust downstream to combine?
Construction: - Player E (well-calibrated + rigid): conviction 1–5 matching difficulty; E_sync_match accuracy correlates; C10 = stand 9/10. - Player F (overconfident + rigid): conviction always 4–5; accuracy ~50%; C10 = stand 9/10. - Player G (well-calibrated + humble): like E on calibration; C10 = revise on new info, stand on redundant info. - Player H (overconfident + chaotic): like F on calibration; C10 = revise frequently despite high conviction.
Schema response by layer: - Capture: Partial — C3 and C10 carry the inputs but as independent observations. - Extraction: Discriminates all four independently. E5 splits E,G (well) from F,H (over); E7 splits E,F (rigid) from G,H (humble); combined: all four. - Aggregation: Partial — A7 carries both signals separately; A9 carries E5. No combinational aggregation (no A_decision_archetype). - Exposure: Depends on X5 prose synthesis. X3 surfaces calibration but per ADR-065 does NOT surface persuadability. Combinational frame lives only in agent prose.
Headline finding — architecture validated.
Schema discriminates all four players via independent signals. Combinational interpretation correctly lives at exposure (X5 prose), not as a derived primitive. Matches ADR-024 bias-philosophy framing: detect behavioral fingerprints without committing to taxonomy labels. No new combinational primitive needed — adding A_decision_archetype would repeat the trap ADR-024 explicitly avoided with bias names.
First clean validation finding across four swings. Swings 1–3 each surfaced gaps; Swing 4 confirms an architecture choice. Logged as a positive structural signal.
Sub-finding — solo-only persuadability null-vs-low risk.
E7 is mode-tagged multi (per Q5). For solo-only players, E7 doesn't fire. Downstream may interpret null as "low persuadability" rather than "no measurement." Hermes prose could mislabel a solo player as "doesn't update" when schema has no signal either way.
Rationale text (C2) likely carries persuadability cues even in solo ("I would consider X if Y") — schema doesn't currently extract them. Candidate E_persuadability_text (read-time, mode-agnostic) deferred for follow-up swing on whether C2 carries reliable signal.
Meta-pattern observation across swings 1–4. Each swing surfaces some version of "structured capture path and rationale-text path carry different (sometimes contradicting) signal": - Swing 1: structured (forced-closest) thins for pragmatic-routers; rationale captures it via E13. - Swing 2: structured (forced-closest) contaminates with fabricated driver; rationale would correctly null. - Swing 3: structured (E_classify_driver) confounds verbal style with reasoning confidence; rationale logical structure would clarify. - Swing 4 (sub): structured (C10) absent in solo; rationale likely carries cues.
This is becoming a meta-finding worth tracking explicitly. Adding to provisional/under-question.
Schema modifications:
- No new primitives auto-promoted. v0 stands.
- E7 row annotated with solo-mode null-vs-low risk and E_persuadability_text candidate.
- Closure B promoted as cheapest immediate fix (exposure-layer guard for null E7 in solo).
- Closure A (E_persuadability_text) deferred to follow-up swing.
Re-audit: - No prior conclusions invalidated. - Architecture validated for combinational signals — schema does NOT need to combine; exposure correctly does the work. - Meta-pattern (structured-vs-rationale dual-path) added to provisional/under-question.
Swing 4 status: Validation finding. Combinational architecture correct. Sub-finding: solo persuadability null-vs-low risk; Closure B promoted.
Swing 5 — fast vs. slow high-conviction at same accuracy (2026-05-31)¶
Targets: E5 × E6 discrimination. Can schema distinguish Klein RPD snap experts from deliberated experts when calibration is held constant?
Construction: - Player I (snap expert): C3 avg 4.5, C4 avg 8s, accuracy 85%, C2 avg 40 words ("Done this before. X. Cost Y accepted."). - Player J (deliberated certainty): C3 avg 4.5, C4 avg 90s, accuracy 85%, C2 avg 140 words (walks alternatives, names trade-off, commits). - Identical E5 calibration profile by construction. Differ on C4, C2 length.
Schema response by layer: - Capture: Discriminates (C4 ~11× differ; C2 length ~3.5× differ; C3 + C1 identical). - Extraction: Discriminates strongly via E6 timing signature + E_classify_driver reasoning_mode (intuitive/analogical vs. consequentialist/principled_deductive). E5 identical by construction. - Aggregation: Partial — A7 carries timing + reasoning_mode separately. A9 identical. No combinational "cognitive mode" aggregate (same architecture choice as Swing 4). - Exposure: X5 prose can describe each as snap-expert vs. deliberated-analyst. X3 surfaces calibration (identical) but NOT timing signature per ADR-065 proposed set. Distinction lives in X5 prose only.
Headline finding — architecture validated (second consecutive). Schema discriminates via independent signals; combinational interpretation lives at X5 prose. Same shape as Swing 4. No new primitives needed.
Sub-finding — attention_state capture-gap candidate reinforced. Schema currently cannot distinguish "slow because deliberating" (Player J) from "slow because distracted." E6 reports "slow" either way. The attention_state candidate from Q4 would resolve this. Promoted from "deferred candidate" to "load-bearing for E6 slow-regime trustworthiness" (still gated on engineering work — not yet primitive — but case sharpened).
Sub-finding — meta-pattern absent. Across Swings 1–4 every swing surfaced some form of structured-vs-rationale-path divergence. In Swing 5, structured (C4) and rationale (C2 length) agree — both discriminate in the same direction. First swing where the meta-pattern doesn't fire. Worth tracking; if more validation swings show meta-pattern absence, the dual-path concern may be specific to text-content extractions (Swings 1–4 all involved rationale content interpretation) rather than text-volume or structured-non-content captures.
Schema modifications:
- No new primitives auto-promoted.
- Q4 capture-gap row for attention_state sharpened with E6 load-bearing finding.
- Meta-pattern under-question annotated with first absence.
Re-audit: No prior conclusions invalidated. attention_state's role clarified.
Swing 5 status: Validation (second consecutive). attention_state sharpened. Meta-pattern absent — first time.
Swing 6 — milestone self-prediction × in-moment calibration (2026-05-31)¶
Targets: E18 × E5 discrimination. Can schema distinguish meta-cognitive honesty from in-moment overconfidence when they disagree? Tests two failure modes of Tetlock's "meta-cognitive trustworthiness" frame from ADR-024.
Construction: - Player K (meta-honest, in-moment overconfident): C7 self-prediction matches computed profile (small E18 gap). C3 avg 4.5; accuracy ~50% → low E5. - Player L (meta-blind, in-moment well-calibrated): C7 self-prediction misses badly (large E18 gap). C3 avg 3.0; accuracy ~55% → good E5. - Same total rounds; differ on E18, E5, C3 patterns.
Schema response by layer: - Capture: Discriminates (C7 differs; C3 distributions differ). - Extraction: Discriminates strongly — E18 and E5 fire independently. - Aggregation: A7, A9 carry both separately. No derived "Tetlock superforecaster" aggregate. Same architecture choice as Swings 4–5. - Exposure: X5 prose can describe both contradictions. X3 surfaces calibration; ADR-065 deferred self-awareness exposure.
Headline finding — architecture validated (third consecutive). No new primitives needed. Meta-cognitive trustworthiness frame correctly held at exposure/prose, not as derived primitive.
Sub-finding A — E18 depends on E_classify_driver trustworthiness (new architectural concern). E18 measures gap between C7 self-prediction and the computed profile (built from E_classify_driver → A4–A10). If E_classify_driver is contaminated (Swing 3 verbal-style finding), the baseline E18 measures against is biased. Player K's accurate self-prediction could read as inaccurate because the system's computed profile is wrong.
This surfaces a previously-unnamed architectural meta-pattern: schema reliability is concentrated in a few central extractions. E_classify_driver feeds A4–A7 and is referenced by E18, E10, E14 — contamination propagates through ~40% of downstream primitives. Added as new under-question: central-extraction single-points-of-failure.
Sub-finding B — E18 solo-only null risk. Same shape as Swing 4's E7 finding. E18 row annotated.
Sub-finding C — Meta-pattern absent again. Swing 5 first absence; Swing 6 second. Both E18 and E5 are structured-capture-derived; no text-content interpretation. Hypothesis from Swing 5 reinforced: dual-path concern is text-content-specific.
Schema modifications: - E18 row annotated with both null-risk and E_classify_driver-dependency. - New under-question added: central-extraction single-points-of-failure. - Three consecutive validations + two consecutive meta-pattern absences = approaching convergence territory, but new architectural under-question opened.
Re-audit: No prior conclusions invalidated. Swing 3's E_classify_driver finding gains downstream propagation visibility.
Swing 6 status: Validation (third consecutive). New architectural under-question opened.
Swing 7 — occasion noise vs. reasoned variation (2026-05-31)¶
Targets: E12 (Kahneman occasion noise). Does the schema discriminate pure noise from reasoned variation across repeated-shape scenarios?
Construction: - Player M (pure occasion noise): Same scenario shape 3×. Same rationale text each time. Different choices each time. - Player O (reasoned variation): Same scenario shape 3×. Different rationale each time (different framing). Different choices. - Player N (consistent): Same scenario shape 3×. Same rationale, same choice.
Schema response by layer: - Capture: Discriminates via C2 (M's rationale consistent, O's varies). C1 surface identical for M and O. - Extraction: E12 as currently specified does NOT discriminate — measures choice variability only; fires identically on M and O. E_classify_driver outputs DO differ across O's repeats but not M's. Schema has the signal — E12 doesn't use it. - Aggregation: Propagates conflation. A7 carries E12 high for both. - Exposure: X5 mislabels both as "noisy decision-maker." For paste-based users (principle 6), this is durable misrepresentation.
Headline finding — E12 over-fires on reasoned variation. First swing producing a concrete extraction algorithm refinement (rather than exposure-layer fix or under-question). Swings 1–6 each surfaced gaps or interpretation problems at exposure or surfaced architectural questions; Swing 7 identifies an extraction whose algorithm under-uses available capture.
Closure A promoted: refine E12 to be rationale-controlled. Fire only when E_classify_driver outputs (reasoning_mode, driver, attention) are similar across repeats AND choices differ. "Noise = same processing, different output." No new primitive; refines existing computation rule. E12 row annotated.
Sub-finding — meta-pattern reappears, hypothesis refined. Swings 5–6 saw dual-path absence. Swing 7 brings it back: E12 needs rationale-similarity to discriminate. Refined hypothesis: dual-path divergence appears when (a) extraction interprets rationale meaning, OR (b) extraction needs to distinguish similar-content from different-content patterns even when headline signal is structured. Swing 7 hit (b); Swings 1–4 hit (a); Swings 5–6 hit neither.
Schema modifications: - E12 row annotated with Closure A refinement. - Meta-pattern under-question refined. - Three-validation streak broken: 3 validations + 1 refinement out of 7 swings. Convergence not reached.
Re-audit: No structural changes to layer cut or v0 primitive set. Meta-pattern hypothesis sharpened.
Swing 7 status: Concrete algorithm refinement (not validation, not new primitive). Closure A promoted. Meta-pattern reappears.
Swing 8 — reaction-note divergence (2026-05-31)¶
Targets: C5 × C6 reconciliation. Does the schema reconcile contradictory enum vs. note semantics, or does it depend on which downstream path is used?
Construction: - Player P (consistent): C5 enum and C6 note semantics always agree. - Player Q (divergent): Often taps "gets_me" then notes contradict ("framing matches but I'd have picked Y"). - Player R (note-adds-critique): Reaction agrees with AI; note adds specific disagreement. - Identical C5 enum frequencies between P and Q. Differ on C6 note semantics relative to C5.
Schema response by layer: - Capture: Discriminates via C6 (note text differs in semantic agreement). - Extraction: Partial — E18 via ADR-057 Phase A learning-note prompt reads both and reconciles via Claude. Other extraction paths may use C5 only. - Aggregation: A8 counts C5 enum only. Note semantics lost. Player Q's contradictory notes get counted as agreement. - Exposure: Propagates A8 misrepresentation through X3 if surfaced. X5 may catch it via direct C6 reading or may not.
Headline finding — second consecutive algorithm refinement. Same shape as Swing 7's E12: aggregation uses structured signal (C5 enum) without checking rationale-text (C6 note semantics). Player Q's high gets_me rate misrepresents as high agreement.
Closure A promoted: refine A8 to check note semantics. Lightweight C6 classification (agree / disagree / supplement) stratifies A8 counts. No new primitive. A8 row annotated.
Resisted Closure B (E_reaction_note_alignment as new extraction) — would duplicate E10's rationale-choice alignment family. Stay consistent with ADR-024 architecture: don't add per-pair "agreement extractions" for every input combination unless load-bearing.
Sub-finding — meta-pattern reinforced. 5 of 8 swings have surfaced structured-vs-rationale-text divergence. Hypothesis from Swing 7 fits Swing 8 — pattern (a) extraction interprets rationale meaning.
Pattern approaching promotion to schema-level principle. Candidate principle: "any aggregation or extraction that consumes a structured capture should check whether a co-captured rationale text contradicts the structured signal." Hold for 1–2 more swings to confirm before promoting from under-question to principle.
Sub-finding — reaction-surface invisibility for paste users. ADR-065 doesn't surface reactions to users. For paste-based mainstream users (principle 6), A8 feeding X5 IS the surface; A8 contamination is the durable misrepresentation. Annotate X5 row.
Schema modifications: - A8 row annotated with Closure A refinement. - Meta-pattern under-question flagged as approaching promotability.
Re-audit: No structural changes. No prior conclusions invalidated. Convergence: 3 validations + 2 refinements out of 8 swings.
Swing 8 status: Concrete algorithm refinement (second consecutive). Closure A promoted. Meta-pattern reinforced; ready to promote in 1–2 swings.
Swing 9 — solo vs. multi regime in same player (2026-05-31)¶
Targets: Q5 overlay tagging under regime shift. Does the schema correctly stratify by mode at aggregation, or pool and lose the regime?
Construction: - Player S (regime-shifted): 45 solo + 5 multi. Solo: conviction 4.0, eliminative, high calibration. Multi: conviction 3.0, C10 = revise 4/5, high persuadability under pressure. - Player T (solo-only): 50 solo. High calibration. - Player U (multi-only): 50 multi. Calibration multi-pressure-conditioned.
Schema response by layer: - Capture: Discriminates via C14 mode tag and C10 multi-only firing. - Extraction: Partial. E5 pooled across modes — Player S's regime shift averaged. E7 fires correctly multi-only. - Aggregation: Doesn't stratify by mode. A4, A9 EMAs pool across solo and multi. Player S's regime shift collapses at A9 — reads as "moderate calibration" instead of "high in solo, low in multi." - Exposure: Propagates collapse. X5 prose may not distinguish solo profile from multi profile.
Headline finding — mode tag at capture, pooling at aggregation. Same architectural shape as Parked Q4 (cube-axis stratification) but for an already-established tag. Closure A: expand Parked Q4 scope to include mode-stratification. Doesn't depend on cube going live; just needs implementation.
Sub-finding A — sample-size handling is recurring. Player S has only 5 multi rounds; E7 fires at high variance. Same gap as Swing 1's A1 variable-density finding. Two swings now show: aggregations don't carry sample-size context to consumers. New under-question SS-1 opened.
Sub-finding B — persuadability null vs. low (boundary case). Swing 4 found null-vs-low risk for solo-only players. Swing 9 shows boundary case (low N multi) is also fragile. Exposure guards from Swing 4 Closure B need to handle both null and low-N.
Sub-finding C — meta-pattern absent. This is a mode-stratification finding, not text-interpretation. 5 of 9 swings now show the dual-path pattern. Promotion of meta-pattern delayed; hold for Swing 10–11 confirmation.
Schema modifications: - Parked Q4 scope expanded to mode-stratification. - New under-question SS-1 (sample-size handling). - Meta-pattern promotion delayed.
Re-audit: No structural changes. No prior conclusions invalidated. Recurring pattern across swings 1, 9 (sample size) suggests architectural-level treatment needed.
Swing 9 status: Scope expansion + new under-question. Meta-pattern absent — promotion delayed.
Swing 10 — trust state variations (M5 stress test, 2026-05-31)¶
Targets: M5 (user trust state with agent), C11–C13. Does the schema discriminate trust trajectories, and is agent-side capture sufficient?
Construction: - Player V (trusting): C12 17%, C13 mostly positive. - Player W (distrusting): C12 80%, C13 mostly negative. - Player X (calibrating): C12 50%, C13 mixed. - Player Y (indifferent): C12 10%, C13 null. - Diagnostic: distinguish V (trusting + engaged) from Y (indifferent + disengaged) — both have low C12.
Schema response by layer: - Capture: Discriminates via C12 + C13 differences. - Extraction: None enumerated for agent-side capture. No primitives over C11–C13. - Aggregation: None enumerated for agent-side capture. All other captures (C1–C10) have downstream aggregations; agent-side stops at capture. - Exposure: X5 prose must read C11–C13 raw. No stable primitives to reference. For paste-based users (principle 6), interpretation lives in static text without aggregation support. - Measured outcome M5: specified as emergent but has nothing to emerge FROM without aggregation scaffolding.
Headline finding — agent-side capture has no enumerated derivation chain. First swing to surface a missing primitive class. Parked Q5 (agent-side capture parity) gap is wider than just capture — extends to extraction and aggregation.
Closure A promoted: three new agent-side aggregation primitives. - A11 (A_why_rate) - A12 (A_feedback_engagement) - A13 (A_feedback_positivity) Read-time, per-player-lifetime scope, both modes. Feed M5.
A_feedback_positivity inherits Swing 8 lesson — classify C13 free-text alongside rating to avoid the structured-vs-text divergence A8 had. Built into the definition from start.
Sub-finding — meta-pattern reappears at C13. C13 captures both rating and free-text; aggregations using rating only inherit the same gap as A8 / Swing 8. 6 of 10 swings now show the pattern — promotability flag back on. Hold for Swing 11–12.
Sub-finding — architectural lesson on measured outcomes. M5 was framed emergent (correct) but without aggregation scaffolding (insufficient). Worth auditing M1–M9 to check whether all measured outcomes have aggregation support, or whether others have the same gap. Audit not done now — flagged as follow-up.
Schema modifications: - v0 aggregation list extended with A11, A12, A13. - M5 row updated to reference the new aggregations. - Decay-primitives parked-question entry annotated about the A11/A12 number reuse. - Meta-pattern promotion flag back on.
Re-audit: First swing to add new primitives. Parked Q5's gap clarified — extends through extraction/aggregation layers.
Swing 10 status: First swing proposing new primitives. Closure A promoted (3 new aggregations). Meta-pattern reinforced (6 of 10).
Swing 11 — sparse (N=5) vs. rich (N=50) data (2026-05-31)¶
Targets: SS-1 (sample-size handling). Does the schema differentiate tentative from established profiles?
Construction: - Player Z (sparse): 5 games total, rich rationales, conviction varies, 1 game per category. - Player AA (rich): 50 games, spans categories/triggers, mix of solo and multi.
Schema response by layer: - Capture: Trivially discriminates by record count. - Extraction: Fires for both; no primitive carries sample-size to consumers. - Aggregation: Computes for both; no aggregation carries denominator or confidence interval. ADR-045 gates ensure values can be computed but not that they're statistically meaningful. A11/A12/A13 inherit same gap. - Exposure: Treats sparse as established. X1 shows a number for both. X5 prose can describe Z confidently. For paste-based users, encoded "Player Z reasons by elimination" reads as established when based on N=3 of 5 games.
Headline finding — SS-1 confirmed; promoted to tagging convention 6. Third swing showing the gap (Swings 1, 9, 11). Met the cube's 3-swing promotion threshold.
Tagging convention 6 (sample-size annotation): every aggregation primitive carries an explicit N denominator; exposure surfaces below threshold as "tentative." Affects every aggregation in v0 + A11/A12/A13.
Closure A promoted: N propagation to exposure.
Sub-finding A — minimum viable profile question now schema-instrumented. Experiment's open question ("can 3–5 scenarios produce a meaningfully better agent profile?") was un-answerable because schema treated all profiles as established regardless of N. Convention 6 is the prerequisite to running that experiment.
Sub-finding B — meta-pattern absent. This is sample-size, not text-interpretation. 6 of 11 swings still show the dual-path pattern. Hypothesis from Swing 7 holding.
Schema modifications: - SS-1 promoted to tagging convention 6. - Closure A promoted. - Documentation update needed across aggregation rows for N annotation.
Re-audit: No structural changes to layer cut. SS-1 graduated from under-question to convention.
Swing 11 status: SS-1 promoted to convention. Closure A promoted. Documentation work pending across aggregations.
Swing 12 — domain-uniform vs. domain-asymmetric (2026-05-31)¶
Targets: M3, E20, cube-C2 anchor. Validates OQ-5 resolution and tests domain-asymmetric profile representation.
Construction: - Player BB (uniform): Plays all domains. Persuadability ~20% across all; calibration ~65% overconfidence across all. - Player CC (asymmetric, CoachJ-like): Persuadability ~20% in financial/career, ~60% in health. Calibration ~65% overconfident in financial, ~40% in health.
Schema response by layer: - Capture: Identical surface; differences in per-round patterns. - Extraction (per-round): Discriminates — E_classify_driver fires differently per-round on rationale text. - Extraction (aggregated): Partial — E5 pooled; E7 framed domain-conditional but stratification depends on aggregation-level work. - Aggregation: Doesn't stratify by domain currently. Same shape as Swing 9 mode finding. - Exposure: Propagates collapse. M3 named but un-scaffolded (same as M5 was pre-Swing 10).
Headline finding — fourth validation, structural reinforcement. Schema's conceptual model correct (E7 domain-conditional; cube-C2 anchor; M3 names outcome). Implementation gap at aggregation stratification. Aggregation under-stratification is now the dominant gap — referenced by cube cross-check, Swing 9, Swing 12.
Sub-finding A — Parked Q4 refined into four sub-tasks. Q4a (mode), Q4b (category extended), Q4c (cube structural axes), Q4d (cube content axes). Q4a + Q4b ship without substrate work. Q4c + Q4d substrate-gated. Most load-bearing parked question.
Sub-finding B — M-series scaffolding audit reinforced. M3 has same gap as M5 had pre-Swing 10 — named as outcome but no stratified aggregation feeding it. Candidate primitive A_persuadability_by_domain deferred to Q4 implementation, which may produce it as a scope value rather than new primitive.
Sub-finding C — Meta-pattern absent. 6 of 12 swings show dual-path; pattern stable at 50% prevalence with (a)/(b) hypothesis discriminating well.
Schema modifications: - Parked Q4 split into Q4a–Q4d with different trigger conditions. - M-series audit follow-up flagged.
Re-audit: No structural changes to layer cut. OQ-5 cube-C2 resolution validated — anchor is correct, gated on Q4d implementation.
Swing 12 status: Validation + structural reinforcement. Q4 refined. M-series audit flagged.
Swing 13 — M9 context-bleed detection + M-series audit (2026-05-31)¶
Targets: M9 scaffolding. Audit all M1–M9 for consistency.
Construction: - Player DD (real-world context bleed): S4-Priya shape. Conviction 1. C2 names real-world parallel; C6 flags hit. - Player EE (hypothetical engagement): Same shape. Conviction 1. C2 cites missing information; no real-world parallel.
Schema response by layer: - Capture: Discriminates via C2 + C6 semantic content. - Extraction: Not for M9 specifically. E_classify_driver might catch patterns but isn't tagged for context-bleed. - Aggregation: None. M9 zero-scaffolded. - Exposure: Depends on raw text reading.
Headline finding — M9 zero-scaffolded; same shape as M5 pre-Swing 10, M3 pre-Swing 12.
M-series audit done: - M4, M5: scaffolded. - M1, M6, M7: partial via A7 carrying relevant extractions — acceptable. - M2, M3, M8: substrate-gated (Q4-dependent). - M9: zero-scaffolded. Only swing-actionable gap.
Closure A promoted: add E22 + A14. - E22 (E_context_bleed) — read-time extraction. Classifies C2 + C6 for real-world-parallel mentions. Designed to read free-text from start (inheriting Swing 8 lesson). - A14 (A_context_bleed_rate) — aggregation, per-player-lifetime, both modes.
Sub-finding — M-series consistency principle. After Swing 13: measured outcomes either have scaffolding (extraction + aggregation feeding them) or are explicitly substrate-gated. Emergent-without-scaffolding was an inconsistent middle state across M5 + M9. Cleaning up makes the M-series easier to reason about.
Sub-finding — meta-pattern at 7 of 13. Fits pattern (a) — extraction interprets rationale meaning. One more confirmation away from candidate-principle promotion.
Schema modifications: - E22 + A14 added. - M9 row updated. - M-series audit complete.
Re-audit: No structural changes to layer cut. M-series consistency principle established.
Swing 13 status: New primitives (E22 + A14). M-series scaffolding complete. Meta-pattern reinforced.
Swing 14 — per-group aggregation discrimination (2026-05-31)¶
Targets: Parked Q5 per-group aggregation candidates. Does the schema discriminate group-level patterns?
Construction: - Group FF (high internal sync): 4 players, ~75% scenarios reach 3+ player agreement, high inter-player readability, individual sync ~60%. - Group GG (high internal divergence): 4 players, ~35% scenarios reach 3-player agreement, low inter-player readability, individual sync ~60%. - Individual sync_score held constant; differences live only at group level.
Schema response by layer: - Capture: Trivially discriminates (different choice distributions, C8/C9 patterns). - Extraction: Partial — E_sync_match, E7, E8 per player or per-pair but no group-level aggregation. - Aggregation: Zero group-level primitives. A1–A14 all per-player. - Exposure: Can't describe group dynamics without primitives to reference.
Headline finding — parked Q5 correctly parked, but discrimination gap now documented. Per-group signal isn't load-bearing for current Pulse positioning (judgment layer for any AI, agent-permission tiers). Trust Circle / Beacon Team features might surface it post-MVP. Closure B promoted: keep parked, document the discrimination gap, validate the parked-question architecture.
Sub-finding A — Architectural distinction surfaced in Q5 framing. Two of four candidates (A_group_sync, A_group_drivers) are scope-variants of existing primitives (handled by Q4 mechanisms). Two (A_group_consensus, A_dyadic_readability) require new primitive shapes — A_group_consensus is a cross-member distribution; A_dyadic_readability is a matrix. Updated Q5 candidates table to flag this distinction.
Sub-finding B — Discipline parallel with Swing 10. Both swings found unenumerated downstream derivations. Swing 10 added because urgent for mainstream paste-based users. Swing 14 kept parked because not load-bearing yet. Add-when-load-bearing discipline holding.
Sub-finding C — Meta-pattern absent. Aggregation scope, not text-interpretation. 7 of 14 swings show pattern; promotion still one confirmation away.
Schema modifications: - Q5 candidates table refined with architectural-shape annotation. - Closure B promoted.
Re-audit: No structural changes. Parked Q5 architecture validated.
Swing 14 status: Validation + framing refinement. Closure B promoted.
Swing 15 — capture-gap candidates load-bearing test (2026-05-31)¶
Targets: Three capture-gap candidates from Q4 (rationale_edit_trace, option_tap_trace, attention_state). Do they surface load-bearing signal current captures miss?
Construction: - Player HH (heavy editor): Edits extensively; final C2 ~50w; C4 60s; multiple option taps; conviction 4. - Player II (direct decider): Types in one pass; final C2 ~50w; C4 30s; single tap; conviction 4. - Player JJ (distracted slow): C4 120s but tabbed away 90s; single tap; conviction 4.
Schema response with current captures: E6 reads HH as moderate-paced, II as fast, JJ as slow. JJ misread as slow deliberator when actually distracted. HH and II look similar on rationale signals despite different processes.
Headline finding — three candidates have different load-bearing strength:
- attention_state — confirmed load-bearing across Swings 5 + 15. JJ misread without it. Promoted from "deferred candidate" to "ready for promotion when eng happens."
- option_tap_trace — confirmed load-bearing. Provides structured solo-mode persuadability signal schema currently lacks; closes Swing 4's E7 solo-mode null risk via structured path. Promoted to "ready for promotion when eng happens."
- rationale_edit_trace — marginal. Discrimination exists but isn't product-load-bearing. Most cognitive-style discrimination covered by E6 + E_classify_driver. Lowered priority. Useful negative finding.
Sub-finding A — Meta-pattern generalized. Original framing (structured-capture vs. rationale-text) is a special case of a broader pattern: final-state captures drop process information. Edit trace vs. final C2; tap sequence vs. final C1; attention state vs. C4. Updated under-question framing. Hold for one more swing to confirm broader framing before promoting.
Sub-finding B — option_tap_trace × E7 connection. Adding option_tap_trace closes Swing 4's E7 solo-mode null risk via structured path (alternative to text-based E_persuadability_text). Multi-swing closure.
Sub-finding C — rationale_edit_trace as cautionary. Intuition said load-bearing; swing said marginal. Discipline of "add when load-bearing, not when interesting" held.
Schema modifications: - Q4 capture-gap candidate priorities updated. - Meta-pattern framing broadened.
Re-audit: No structural changes. Closes Swing 4 sub-finding via option_tap_trace.
Swing 15 status: Two candidates promoted to "ready when eng"; one demoted. Meta-pattern broadened.
Swing 16 — Q4c substrate stratification readiness check (2026-05-31)¶
Targets: Q4c (cube structural axis stratification). Architectural compatibility check + scaling analysis using CoachJ's known profile as hypothetical.
Hypothetical Q4c shipped — schema response for CoachJ (83 games, 67% overconfidence, eliminative reasoner, expertise-gated persuadability): - Axis 11 stakes-magnitude stratification likely splits the 67% overconfidence (high at low-stakes, lower at life-defining). - Axis 8 information-topology stratification likely shows elimination heavy under symmetric-complete, different reasoning under mutual-uncertainty. - Axis 7 authority stratification likely shows "opportunity → caution" clusters at influence-only.
Headline finding — architectural compatibility confirmed (fifth validation). Schema extends A4/A7/A9 to stratify by cube vector cleanly. No new primitives needed. Implementation work is the gate, not design.
Sub-finding A — Sample-size scaling problem. Stratifying by 12 axes × multiple values = hundreds of cube cells; most cells N=0 or N=1 at typical play volumes. Q4c implementation needs axis-priority decision — prioritize stratification by axes with empirical evidence of conditional-mattering. Three priority axes identified: axis 11 (stakes magnitude per experiment finding), cube-C2 (per OQ-5), axis 2 (per Swing 5 hypothesis). Updated Q4c entry with guideline.
Sub-finding B — Convention 6 was prescient. Sample-size annotation becomes load-bearing for Q4c. Stratified-but-tentative readings get marked appropriately; without it, low-N cells would expose as established. Promotion-of-convention-before-it-was-needed pattern.
Sub-finding C — Meta-pattern absent. Substrate readiness, not text-interpretation or final-state-vs-process. Promotion still one confirmation swing away.
Schema modifications: - Q4c entry extended with axis-priority guideline + convention 6 interaction note.
Re-audit: Fifth validation of architecture. Original swing queue closed.
Swing 16 status: Q4c architecture validated. Original swing queue exhausted.
Swing 1 repeat — pragmatic router (OQ-1) against updated schema (2026-05-31)¶
Targets: Stability check. Does the schema, updated through Swing 16, address Swing 1's findings?
Findings tracked against subsequent updates: - A1 variable-density problem: Partially addressed by Convention 6 (sample-size annotation). N now propagates to exposure — pragmatic-router's N=10 contributing rounds vs. binary-accepter's N=50 becomes visible. Headline X1 still collapses percentages. - A4 silent thinning: Better than v0. Convention 6 surfaces thinness; M7 (frame-restructuring tendency, scaffolded via A7 carrying E13) routes around A4 dependence for the agent surface. - X1 headline collapse: Open. None of Swing 1's three closures (A_profile_quality / 4th dim Richness / exposure-only) was promoted; OQ-1 explicitly deferred to product conversation.
Headline finding — convergence-positive. Mitigations identified that weren't visible at Swing 1. Schema refinements compose constructively — convention 6 + M-series scaffolding partially close OQ-1's downstream impact without explicit closure decision.
New finding from repeat: M7's scaffolding (clarified in Swing 13 audit) provides agent-surface protection from X1 collapse. Paste-based users could see correctly-described pragmatic-routers if Hermes prompt references M7-derived language ("tends to restructure binary framings") instead of raw sync_score. Resolution path that doesn't require schema primitive changes — Hermes prompt update.
Meta-pattern promotion: This repeat plus Swings 1–4, 7, 8, 10, 13, 15 confirm the broader framing. Promoted to methodology principle 7 (final-state vs. process capture).
Schema modifications: - Methodology principles list extended with principle 7. - Meta-pattern under-question resolved.
Re-audit: Schema internally consistent under refinement. Swing 1 findings hold; mitigations identified without breaking the gap-location.
Swing 1 repeat status: Convergence-positive. Meta-pattern promoted. Hermes-prompt-update path surfaced.
Swing 2 repeat — NoTA forced closest-match against updated schema (2026-05-31)¶
Targets: Stability check on OQ-2. Did refinements close the A4 contamination problem?
Findings tracked against subsequent updates: - A4 fabricated E_chosen_driver on forced-closest: Better-located via principle 7 but still uncontained at A4. - Three closures: None promoted (paired with OQ-1 for product decision). Closure C (rationale-text override) now principle-aligned — principle 7 makes it the canonical direction; Closures A and B are alternatives requiring justification. - Schema has signal in C2/E13: Principle 7 generalizes this as schema-wide rule.
Headline finding — principle 7 makes Closure C canonical. OQ-2's closure direction now unambiguous even though closure decision is still product-deferred.
New finding — cross-swing dependency. Closure C depends on Swing 3 Closure A (verbal-style normalization in E_classify_driver). Without normalization, hedging rationale could be misread as routing. Sequencing: ship verbal-style normalization before rationale-override. Wasn't visible at Swings 2 or 3 individually; emerges only at the repeat.
Synthesis finding — schema architecture vs. consumer discipline. Combining cube cross-check + principle 7: schema architecture is sound; gaps cluster at consumer discipline (aggregations and exposures dropping co-captured signal). Closures across Swings 1, 2, 7, 8, 10, 13 are all instances of "make consumer X check both paths." Worth surfacing as a header-level architectural finding in the eventual canonical doc.
Meta-pattern fires (9 of 16 + 2 repeats).
Schema modifications: - No new primitives. - Cross-swing dependency documented (sequencing for product work). - Synthesis finding logged.
Re-audit: No structural changes. Second consecutive repeat producing new findings without breaking prior conclusions.
Swing 2 repeat status: Convergence-positive. Closure C canonical. Cross-swing dependency identified.
Swing 8 repeat — reaction-note divergence (A8 contamination) against updated schema (2026-05-31)¶
Targets: Stability check on Swing 8 finding. Did anything mitigate A8's structured-enum-only counting?
Findings tracked: - A8 contamination: Still uncontained at the aggregation. Closure A (refine to classify C6) now principle-aligned per principle 7. - Lesson propagation: A13 (Swing 10) and E22 (Swing 13) built to classify free-text from start. Forward-applied lesson before principle 7 had a name. - No new primitives needed. Closure A is the prospective fix; principle 7 makes it canonical.
Headline finding — forward-applied lesson pattern. Swing 8's closure propagated to future primitives (A13, E22) without explicitly shipping on A8. Discipline observation: when a swing surfaces a closure for an existing primitive, future primitives in adjacent design space should inherit the closure before it ships on the original. Saves duplicate gap-locating across swings.
New finding — A8 contamination has bounded blast radius. - X3 would inherit misrepresentation but per ADR-065 reactions aren't surfaced. No exposure damage in current product. - X5 prose consumes A8 but it's not dominant. - M-series: A8 doesn't feed M5 (scaffolded by A11–A13), M6 (E14), M1 (E14 + rationale richness). Doesn't cascade through M-series.
Reduces A8's urgency relative to Swing 8's initial framing. Still wrong, but limited blast radius.
Cross-swing pattern: A8 is canonical consumer-discipline gap. Closures across Swings 1, 2, 7, 8, 10, 13 are all instances of principle 7's discipline. Synthesis finding firming up: schema architecture sound; gaps cluster at consumer discipline.
Meta-pattern fires (10 of 16 + 3 repeats). Pattern (a) — extraction interpreting rationale meaning.
Schema modifications: - No new primitives. - Forward-applied lesson pattern documented as discipline observation. - Blast-radius containment finding logged.
Re-audit: No structural changes. Third consecutive repeat producing new findings.
Swing 8 repeat status: Convergence-positive. Forward-applied pattern noted. Blast radius bounded.
Swing 10 repeat — agent-side capture / M5 scaffolding against updated schema (2026-05-31)¶
Targets: Stability check on A11–A13 and M5 scaffolding. Do they remain principle-aligned, and does the synthesis finding apply to Q5 (agent-side capture parity)?
Headline finding A — A11/A12/A13 need explicit Convention 6 compliance. Added in Swing 10 before Convention 6 was promoted in Swing 11. Row definitions updated with explicit N annotation language. Documentation alignment, not structural change.
Headline finding B — Q5 is a different category of gap from principle 7. Combining Swing 2 + Swing 8 repeats' synthesis with Q5's framing: - Principle 7 gaps: existing captures not consumed well at aggregation/exposure. Schema architecture sound. - Q5 gaps: MISSING captures (agent recommendation text, user-action-after-recommendation, etc.). Schema architecture has a real gap.
Updated Q5 entry with this categorical distinction. Swing 10 partially addressed Q5 by adding aggregations on EXISTING captures (A11–A13); the remaining Q5 work is genuinely new captures gated on ADR-039.
New finding — M5 paste-snapshot timing concern. Trust state shifts over time. For paste-based users, pasted M5 description becomes stale. New under-question OQ-staleness opened: measured outcomes have different staleness profiles. Pattern outcomes (M1, M6, M7) durable; state outcomes (M5, parts of M4) time-sensitive. Static text exposure should distinguish.
Meta-pattern absent. This is about agent-side scaffolding and convention compliance, not principle 7 territory.
Schema modifications: - A11/A12/A13 row annotations for Convention 6 compliance. - Q5 parked entry updated with categorical distinction. - New under-question OQ-staleness opened.
Re-audit: No structural changes. Fourth consecutive repeat producing new findings.
Swing 10 repeat status: Convergence-positive. Convention 6 alignment work documented. Q5 vs principle 7 distinction surfaced. Staleness under-question opened.
Swing 3 repeat — hedging vs. decisive rationale against updated schema (2026-05-31)¶
Targets: Stability check on E10/E14 dual-interpretation finding. Cross-swing dependency check from Swing 2 repeat.
Findings tracked: - E10/E14 dual-interpretation flags: Hold. Closure C (renames) is canonical-doc work, not v0. - Closure A priority elevated: Cross-swing dependency confirmed — OQ-2 Closure C requires Closure A for reliability. Documented in Swing 2 repeat; reinforced here. - Closure B unneeded: Verbal style is signal-style attribute, not separate behavioral signal. Forward-applied check: new primitives (A11–A14, E22) named valuation-neutrally without explicit promotion of Closure C.
Headline finding — three-category gap synthesis surfaces.
Swing 3 doesn't fit principle 7 territory (consumer discipline) or Q5 territory (missing captures). It's about labels carrying valuation. Synthesis across all 16 swings + 5 repeats:
- Architectural gap (need new structure): Q5 missing captures.
- Aggregation gap (existing structure under-utilized): Convention 6 sample-size + Parked Q4 stratification.
- Exposure gap (downstream interpretation issues): Principle 7 consumer discipline + Swing 3 valuation-laden naming.
Each category has a different closure shape. Promotable as header-level architectural claim for canonical doc.
Sub-finding — forward-applied naming discipline. A11/A12/A13 (Swing 10) and E22/A14 (Swing 13) all valuation-neutral by name. Swing 3's lesson propagated forward without explicit promotion. Same pattern as Swing 8 → A13.
Schema modifications: - Three-category gap synthesis logged. - Cross-swing dependency on OQ-2 ↔ Swing 3 documented.
Re-audit: No structural changes. Fifth consecutive repeat producing new findings.
Swing 3 repeat status: Convergence-positive. Three-category gap synthesis named. Cross-swing dependency reinforced.
Swing 13 repeat — M-series audit against three-category synthesis (2026-05-31)¶
Targets: Stability check on M-series audit. How does OQ-staleness interact with M-series scaffolding? Does the three-category synthesis hold against actual measured outcomes?
M-series under the three-category synthesis:
| Outcome | Gap category | Status |
|---|---|---|
| M1 Identity load | Exposure (partial via A7) | Principle 7 |
| M2 Subjective stakes threshold | Aggregation (substrate-gated, Q4c) | Parked Q4 |
| M3 Domain confidence asymmetry | Aggregation + Exposure (layered) | Q4 + staleness |
| M4 Calibration drift | Scaffolded + Exposure (layered, state-sensitive) | E19 + staleness |
| M5 User trust state with agent | Scaffolded + Exposure (layered, state-sensitive) | A11–A13 + staleness |
| M6 Aspiration gap magnitude | Exposure (partial via A7) | Principle 7 |
| M7 Frame-restructuring tendency | Exposure (partial via A7) | Principle 7 |
| M8 Cross-domain signal stability | Aggregation (substrate-gated) | Parked Q4 |
| M9 Play-time context bleed | Scaffolded (E22 + A14) | Resolved |
Headline finding A — No M-series outcome is architectural-gap territory. All M-outcomes are measured from existing game-side captures. The architectural gap (Q5) is exclusively agent-side-capture territory. Validates Q5 as the only architecture-needing-new-structure parked question.
Headline finding B — Layered gaps refine the three-category synthesis. Three outcomes (M3, M4, M5) have gaps at multiple layers simultaneously. Closures must address all layers. Refinement: gap categories are kinds, not bins. Primitives can need closures at multiple categories simultaneously.
Sub-finding — OQ-staleness scope bounded to M4 + M5. State-sensitive outcomes are minority (2 of 9); pattern outcomes durable. Confirms OQ-staleness as valid but narrow under-question.
Sub-finding — E22 + A14 don't need staleness retrofit. Pattern-shaped by design (event + rate). Forward-applied lesson on staleness wasn't applied because OQ-staleness opened after Swing 13, but didn't need to be.
Sub-finding — Partial-scaffolding-acceptable verdict aligns with principle 7. M1/M6/M7's "partial via A7 acceptable" verdict from original audit IS exactly what principle 7 codifies — A7 carries signal; consumer synthesizes. Audit's framework was pre-principle-7 but reached the same conclusion.
Schema modifications: - Three-category synthesis refined with layered-gaps note. - M-series gap-category audit added.
Re-audit: No structural changes. Sixth consecutive repeat with new findings.
Swing 13 repeat status: Convergence-positive. Audit confirmed under synthesis. Layered gaps refinement added.
Swing 4 repeat — calibration × persuadability four-quadrant against updated schema (2026-05-31)¶
Targets: Architecture validation under three-category synthesis. E7 mode constraint closure path via option_tap_trace.
Findings tracked:
- Architecture validation holds. Maps onto three-category synthesis: no architectural gap; no aggregation gap; exposure gap (X5 prose must synthesize four-quadrant frame for validation to land). Validation is "no schema-structure work; downstream exposure discipline IS the closure." Principle 7 covers it.
- E7 mode constraint closure path identified. Swing 4 finding + Swing 15 option_tap_trace promotion = multi-swing closure path. When option_tap_trace ships, E7 relaxes from mode: multi to mode: both. Documented in E7 row.
- Principle 7 generalizes to prose synthesis. X5 prose is a synthesis layer; should consume multiple paths (structured aggregates + rationale text). Principle 7 entry updated; X5 row annotated.
Headline findings:
A. Three-category synthesis confirms architecture validation is exposure-discipline closure. First validation finding (Swing 4) now has a categorical home — exposure-gap territory.
B. Multi-swing closure path: Swing 4 → Swing 15 → E7 mode relaxation. When eng work on option_tap_trace happens, E7 mode constraint resolves. Closure is gated on engineering, not on schema decision.
C. Principle 7 generalizes to prose synthesis layers (X5, X11). Original framing covered algorithmic aggregations; generalization covers any synthesis. 11 of 16 swings + 5 repeats now confirm pattern across three framings.
Sub-finding — forward-applied check on prose synthesis. X5 row didn't previously note principle 7's prose-synthesis applicability. Annotation added. No structural change.
Meta-pattern fires at prose-synthesis level. Counts in tally.
Schema modifications: - Principle 7 entry: prose-synthesis generalization added. - E7 row: multi-swing closure path documented (option_tap_trace channel). - X5 row: principle 7 generalization annotation added.
Re-audit: No structural changes. Seventh consecutive repeat with new findings.
Swing 4 repeat status: Convergence-positive. Architecture validation refined; principle 7 generalized; closure path documented.
Swing 6 repeat — central-extraction SPOF concern against updated schema (2026-05-31)¶
Targets: Stability check on Swing 6 architecture validation and central-extraction SPOF under-question. Has the concern grown?
Findings tracked: - E18 × E5 validation holds. Categorizes as exposure-discipline closure under three-category synthesis (consistent with Swing 4 repeat). - Central-extraction SPOF concern grew, not shrunk. Dependencies expanded across Swings 7, 8, 10, 13.
Headline finding A — SPOF concern expanded across subsequent swings.
| Swing | Dependency added |
|---|---|
| Swing 7 (E12 refinement) | Closure A uses E_classify_driver outputs directly |
| Swing 8 (A8 refinement) | Closure A requires classifying C6 free-text (similar classifier family) |
| Swing 10 (A13) | Built to classify C13 free-text (similar family) |
| Swing 13 (E22) | Classifies C2+C6 for context-bleed (similar family) |
Headline finding B — Tension between principle 7 and SPOF concern. Principle 7 closures increase E_classify_driver-family dependency. Each principle-7 closure adds another consumer of free-text classification. The two principles compound each other. Substantive new architectural finding the swing series hadn't named explicitly.
Headline finding C — Promotion from under-question to architectural finding. 5+ swing confirmations (Swing 3 contamination source; Swings 6, 7, 8, 10, 13 dependents) meets promotion threshold. Header-level architectural claim alongside three-category synthesis.
Closures: - Closure A promoted: document dependency graph explicitly. Every primitive consuming E_classify_driver-style classification tagged; consumers know risk-of-contamination. - Closure B (meta-concept) and Closure C (engineering redundancy) deferred.
Sub-finding — Three-category synthesis may need extraction-layer extension. SPOF concern doesn't cleanly fit "exposure-gap" (it's at extraction layer). Suggests refining synthesis to cover consumer discipline at extraction layer too. Flag but don't push yet.
Schema modifications: - Central-extraction SPOF entry: promoted to architectural finding. - Closure A logged.
Re-audit: No structural changes to layer cut or v0 primitives. Eighth consecutive repeat with new findings — and this one produces substantive architectural promotion, not just refinement.
Swing 6 repeat status: Convergence-positive with substantive promotion. Central-extraction SPOF concern → architectural finding. Tension with principle 7 named.
Swing 12 repeat — domain-uniform vs. domain-asymmetric against updated schema (2026-05-31)¶
Targets: Q4a-d under three-category synthesis, layered-gaps refinement, and SPOF concern. OQ-5 cube-C2 resolution stability check.
Findings tracked: - Q4a-d all aggregation-gap territory. Sub-split was about trigger conditions (substrate-ready vs not), not gap category. Structure holds under synthesis. - OQ-5 cube-C2 resolution stays valid. Nothing in subsequent swings invalidates the cube-C2 anchor for M3. Reinforced. - M3 layered-gap framing stable. Aggregation-gated (Q4d) + exposure-staleness. Identified in Swing 13 repeat; no new layers surfaced.
Headline finding A — Substrate-side SPOF parallel. Central-extraction SPOF concern has a substrate-side analog. The tagger of cube axes (cube-C2 expertise-requirement, and structural axes if implemented) becomes a high-leverage point. If generator/curator systematically mis-tags, downstream stratification inherits the mis-tag across every Q4c/Q4d-stratified primitive.
Cube-doc territory directly, cross-doc finding for schema. Schema's Q4c+Q4d implementation depends on substrate-tagging quality. Adding to central-extraction architectural finding entry; similar to OQ-5 cross-doc handoff pattern.
Headline finding B — Q4d trigger structure clarified. Q4d fires when EITHER (a) cube generator ships cube-C2 tagging (substrate work, cube doc owned), OR (b) curated corpus gets manual cube-C2 tagging (substrate work, possibly schema-adjacent). Two paths to firing. Multi-swing closure path expansion: Q4d implementation now has explicit trigger-or structure documented.
Schema modifications: - Q4d entry: trigger structure clarified. - Central-extraction architectural finding: substrate-side SPOF parallel added.
Re-audit: No structural changes to layer cut or v0. Q4a-d structure validated under all current synthesis findings.
Swing 12 repeat status: Convergence-positive. Q4a-d confirmed under synthesis. Substrate-side SPOF surfaced. Q4d trigger structure clarified.
Swing 11 repeat — sparse vs. rich data (Convention 6) against updated schema (2026-05-31)¶
Targets: Convention 6 under three-category synthesis. Composition with OQ-staleness. Propagation through prose-synthesis layers. Complementarity with central-extraction SPOF.
Findings tracked: - Convention 6 spans aggregation + exposure categories — itself a layered closure across two synthesis categories. Refinement to synthesis framing: conventions in particular often span aggregation + exposure because they're about how reliability is communicated. - Convention 6 × OQ-staleness composition for M4/M5: sample-size AND staleness are independent reliability concerns. Pasted descriptions for state-sensitive outcomes should carry both N denominator AND "as of [date]" annotation. - Convention 6 needs explicit prose-synthesis propagation rule: X5 prose currently doesn't have an explicit rule that N annotations from A4–A10 propagate into prose generation. Sub-rule promoted into convention text. - Convention 6 and SPOF concern are complementary reliability dimensions — Convention 6 handles sample-size; SPOF dependency graph handles signal-quality. No new convention needed.
Headline findings:
A. Conventions span categories. Refinement to three-category synthesis: closures aren't required to fit a single category. Layered-gaps (Swing 13 repeat) was about primitives; this is about closures themselves spanning categories. Both refinements coexist.
B. Convention 6 refined with prose-synthesis sub-rule. Concrete addition to convention text: prose synthesis should surface N (or tentativeness when below threshold) when referencing aggregations.
C. Composition with OQ-staleness made explicit for M4/M5. State-sensitive outcomes need both N and date annotation in static text exposure.
D. Convention 6 + SPOF cover two reliability dimensions. Complementarity surfaced; no new convention needed.
Schema modifications: - Convention 6 entry: prose-synthesis sub-rule added; composition with OQ-staleness noted; complementarity with SPOF noted.
Re-audit: No structural changes. Tenth consecutive repeat with new findings. Third consecutive repeat producing substantive findings beyond cross-references.
Swing 11 repeat status: Convergence-positive. Convention 6 refined with prose-synthesis propagation. Composition and complementarity documented.
Swing 5 repeat — fast vs. slow conviction against updated schema (2026-05-31)¶
Targets: Stability check. Does Swing 15's attention_state promotion close E6 contamination? Does principle 7 prose generalization apply to E6?
Findings tracked: - Architecture validation holds under three-category synthesis; categorizes as exposure-discipline (same as Swing 4 repeat). - Multi-swing closure path: Swing 5 → Swing 15 → E6 slow-regime resolution when attention_state ships. Parallel to Swing 4 → Swing 15 → E7 mode relaxation. - E6 prose-synthesis annotation needed per principle 7 generalization. Documented in E6 row.
Headline findings:
A. Swing 15 emerges as architecturally load-bearing. Both Swing 4 and Swing 5 sub-findings (E7 null risk, E6 contamination) get closures via Swing 15's capture-gap promotions. Swing 15 is more than a candidate-promotion swing — it's closure-enabling across prior validations.
B. Validation-finding closure pattern firms up. All validation findings (Swings 4, 5, 6, 12, 16) point at exposure-discipline closures under three-category synthesis. Consistent with schema-sound + consumer-discipline-is-gap synthesis. Pattern observation rather than new finding.
C. E6 prose-synthesis annotation. When attention_state ships, X5 prose should surface attended-time qualifier alongside timing.
Schema modifications: - E6 row: multi-swing closure path + prose-synthesis annotation added.
Re-audit: No structural changes. Eleventh consecutive repeat with new findings. Less substantive than the prior three repeats — pace may be slowing again.
Swing 5 repeat status: Convergence-positive. Multi-swing closure path documented for E6. Prose annotation added.
Swing 7 repeat — occasion noise refinement (E12) against updated schema (2026-05-31)¶
Targets: Stability check. Does E12 closure stay aligned with principle 7 and SPOF discipline?
Findings tracked: - E12 closure is canonical principle 7 example at extraction layer. Consumes final-state (choice variability) AND co-captured process information (E_classify_driver classifications). Identified before principle 7 promotion; in retrospect principle 7 covers it. - E12 inherits SPOF dependency on E_classify_driver. Canonical entry for the dependency-graph closure (Swing 6 repeat Closure A). E12 row annotated. - No forward-applied propagation needed — no new primitive had E12's specific shape (within-person variability needing rationale-control). A8 closure has same principle 7 instance but different algorithm pattern.
Headline findings:
A. E12 closure is canonical extraction-layer instance of principle 7. Reinforces principle 7's coverage of extraction layer (not just aggregation and prose-synthesis).
B. E12 illustrates dependency-graph closure entry. Concrete SPOF tagging example for the cube-conversation-style architectural finding.
Schema modifications: - E12 row: SPOF dependency annotated; principle 7 canonical example noted.
Re-audit: No structural changes. Twelfth consecutive repeat with new findings — mostly cross-reference + documentation alignment. Less substantive than Swing 11 repeat.
Swing 7 repeat status: Convergence-positive. Cross-reference work; documentation alignment. Pace likely converging.
Swing 9 repeat — solo vs. multi regime against updated schema (2026-05-31)¶
Targets: Stability check. Q4a (mode-stratification sub-task from Swing 12) closes mode-stratification gap. Convention 6 closes E7 low-N sub-finding.
Findings tracked: - Mode-stratification gap → multi-swing closure path: Swing 9 → Swing 12 (Q4a created) → eng ships → A9 stratifies by mode → regime shift visible. - E7 low-N sub-finding → multi-swing closure path: Swing 9 SS-1 → Swing 11 (Convention 6 promoted) → eng ships → N propagates to exposure. - Meta-pattern absent (third consecutive in repeats).
Headline finding — 3-stage multi-swing closure path pattern.
Across all multi-swing closure paths identified: | Path | Stage 1 (gap) | Stage 2 (closure-naming) | Stage 3 (impl) | |------|---------------|-------------------------|----------------| | E7 mode | Swing 4 | Swing 15 (option_tap_trace) | Eng | | E6 slow-regime | Swing 5 | Swing 15 (attention_state) | Eng | | Mode-stratification | Swing 9 | Swing 12 (Q4a sub-task) | Eng | | Sample-size | Swing 9 (SS-1) | Swing 11 (Convention 6) | Eng | | OQ-2 Closure C | Swing 2 | Swing 3 (verbal-style normalization) | Coupled product decision |
Pattern observation: schema exercise consistently produces 3-stage closure paths. Stage 1 surfaces gap; Stage 2 names closure (often promoting candidate to ready); Stage 3 is downstream implementation outside schema's scope. Schema's job is Stages 1 + 2. Methodology observation worth flagging.
Sub-finding — Swing 15 architectural significance reinforced. Appears in 2 of 5 closure paths as Stage 2.
Schema modifications: - 3-stage closure-path pattern added as methodology observation.
Re-audit: No structural changes. Thirteenth consecutive repeat with new findings. Third consecutive refinement-only repeat (Swings 5, 7, 9) — late convergence threshold met.
Swing 9 repeat status: Convergence-positive. Two closure paths confirmed. 3-stage pattern surfaced. Late convergence territory.
Swing 14 repeat — per-group aggregation discrimination against updated schema (2026-05-31)¶
Targets: Stability check on per-group candidates parking. Categorization under three-category synthesis.
Findings tracked: - Parking decision holds. ADR-074 still individual-judgment focused; Trust Circle still post-MVP. - Per-group candidates categorize cleanly under synthesis: A_group_sync + A_group_drivers = aggregation-gap (scope-variants); A_group_consensus + A_dyadic_readability = architectural-gap (new shapes). Mixed categorization confirms the architectural distinction surfaced originally. - Existing reliability framework covers per-group when promoted: Convention 6 + SPOF dependency-graph + principle 7. No new conventions needed. - Substrate-side SPOF doesn't extend to per-group (substrate is scenario-side; multiplayer is session-side).
Headline finding — Documentation refinement only.
Per-group candidates table refined with gap-category annotations. No new architectural findings; pure documentation alignment.
Schema modifications: - Per-group candidates table: gap-category column added.
Re-audit: No structural changes. Fourteenth consecutive repeat with findings — but findings are pure documentation alignment, not substantive promotion. Fourth consecutive refinement-only repeat (Swings 5, 7, 9, 14) — strong convergence signal.
Swing 14 repeat status: Convergence-positive but pure documentation work. No new architectural findings.
Swing 15 repeat — capture-gap candidates against updated schema (2026-05-31)¶
Targets: Stability check on candidate promotions and meta-pattern broadening.
Findings tracked: - attention_state, option_tap_trace promotions stable. - rationale_edit_trace demotion stable. - Meta-pattern broadening fully captured in principle 7 (Swing 1 repeat). - Swing 15 architectural significance noted across Swings 5, 9 repeats (2 of 5 multi-swing closure paths).
Headline finding — All Swing 15 outputs stable. No substantive findings from this repeat.
Sub-finding — Architectural-gap sub-types observation. Q5 (agent-side capture parity) = missing-surface; Swing 15 capture-gap candidates = missing-process-capture-for-existing-surface. Both architectural-gap but different flavors. Documentation observation only; not a substantive promotion.
Schema modifications: None.
Re-audit: No structural changes. Fifteenth consecutive repeat. Fifth consecutive refinement-only repeat.
Swing 15 repeat status: Convergence-positive. Pure stability check.
Swing 16 repeat — Q4c substrate stratification readiness against updated schema (2026-05-31)¶
Targets: Stability check on Q4c readiness findings.
Findings tracked: - Q4c architecture validated; no new primitives needed (integrated into Parked Q4d). - Axis-priority guideline (axis 11, cube-C2, axis 2) holds. - Convention 6 × Q4c integrated into Convention 6 entry (Swing 11 repeat). - Substrate-tagging concern absorbed into substrate-side SPOF parallel (Swing 12 repeat).
Headline finding — All Swing 16 outputs stable and integrated. No substantive findings from this repeat. Pure stability check.
Schema modifications: None.
Re-audit: No structural changes. Sixteenth consecutive repeat. Sixth consecutive refinement-only repeat.
Swing 16 repeat status: Convergence-positive. Pure stability check. CONVERGENCE THRESHOLD MET per user's "no insights or changes" criterion.
Decomposition pass¶
Per methodology principle 2. The cube's analog was 29 corpus decompositions. Equivalent here is applying the schema to N real player profiles, starting with the most-resolved data (CoachJ).
Decompositions 35–37 — Real teammate profiles (James, Amin, Cici) — 2026-05-31¶
Data source: live production Supabase query on player_decision_profiles for three teammate user_ids.
D35 James (N=20, model_confidence 0.85): Schema discriminates via E7 (low stand-rate, easy updater), E9 (low NoTA, moderate consensus deviation), E11 (slightly negative learning rate). Empty reasoning_style_distribution and attention_distribution — E_classify_driver outputs missing. Profile-class: updater-conformer.
D36 Amin (N=26 analyzed, model_confidence 0.83): Schema discriminates via E7 (high stand-rate, principled stander), E9 (high consensus deviation, team-dynamics 89% NoTA — canonical domain-specific pragmatic-router pattern), E11 (substantially negative). Empty classify-driver outputs. Profile-class: real-world DA + PR + DN composite (3-pattern multi-class). First real-world validation of D20 closure-paths-compose-additively at the data level.
D37 Cici (N=18, model_confidence 0.77): Only profile with rich classify-driver outputs. Reasoning 95% consequentialist global (resource-allocation splits intuitive); attention multi-modal (technical 33% / political 25% / interpersonal 21%); calibration paradox — overconfidence 57% AND underconfidence 100% both firing on N=14; persuadability domain-asymmetric (team-dynamics 0.22 vs values-culture 0.75); authenticity alignment LOW (0.14) — canonical HG dual-interpretation territory; learning rate HIGH positive (0.71). Profile-class: HG + LMA-candidate + DR composite.
Substantive real-data findings:
Finding A — E_classify_driver outputs missing for 2 of 3 real profiles (production data-completeness gap). Amin + James have empty reasoning/attention distributions; Cici has rich data. All accounts created before ADR-024 (2026-04-12); backfill didn't run uniformly. Schema-side implication: SPOF dependency-graph should distinguish "contaminated" from "missing" signal states. Both produce downstream nulls but mitigations differ (contamination → Closure A normalization; missing → backfill). Promotable to canonical.
Finding B — Calibration paradox in Cici's data. Overconfidence 57% + underconfidence 100% both firing on N=14 — mathematically possible only if computed on different subsamples (e.g., over high-conviction subsample vs low-conviction subsample). Synthetic decompositions never surfaced this — real data has more complex calibration patterns. Schema implication: confidence_calibration representation may need clarification on sub-sample semantics.
Finding C — Multi-pattern composition validated in real data. Amin is real-world DA + PR + DN composite; Cici is HG + LMA-candidate + DR composite. Validates D20's closure-paths-compose-additively claim at the data level — composition isn't a synthetic-construction artifact.
Cross-decomposition update (N=37): real profiles decompose cleanly through the schema. Schema architecture validates against real production data.
Decomposition 38 — Zer8 (real teammate profile, very low N) — 2026-05-31¶
Data: games_played 11, games_analyzed 25 (Δ=14), model_confidence 0.86.
Profile content: classify-driver empty (third profile with missing data); calibration N=3 defaulted to 0.5; persuadability uncomputable (N=1 discussion, returns null); learning rate ~0; authenticity/timing/self_awareness empty.
Verdict: Canonical minimum-viable-profile (real-world SP). Schema honestly communicates "we don't know much yet" via tentative N annotations and null returns where uncomputable.
Finding B resolution — calibration semantics confirmed: located in player-model.ts:1012-1046. over/under rates computed on disjoint subsamples (high-conviction strength≥4 / low-conviction strength≤2). Cici's "57% over + 100% under" is meaningful — she fails calibration in both directions simultaneously. Schema design correct; synthetic profiles never constructed both-direction failures.
New observation — games_analyzed vs games_played discrepancy:
| Profile | games_played | games_analyzed | Δ |
|---|---|---|---|
| James | 19 | 20 | +1 |
| Cici | 14 | 18 | +4 |
| Amin | 19 | 26 | +7 |
| Zer8 | 11 | 25 | +14 |
Representation question (what each count means), not schema gap.
Cross-decomposition findings (N=38): 75% of real profiles affected by classify-driver missing-data gap. Backfill is high-leverage eng work.
Decomposition pass — closure note (2026-05-31)¶
Total decompositions: 34. Convergence at decomposition layer firmly established — 12 consecutive decompositions (D23–D34) without substantive new findings across genuinely diverse stress dimensions.
Coverage: - Real profile: CoachJ (most-resolved data point) - Synthetic profile shapes: 33 distinct diversity dimensions - M-series outcomes: all 9 covered; M4 2×2 complete; M5 4-quadrant complete; M9 scaffolding validated - All 3 capture-gap candidates validated (attention_state + option_tap_trace load-bearing; rationale_edit_trace demotion correct) - All 5 multi-swing closure paths validated against profile shapes - All conditional-discrimination shapes tested (LMA, HG, DS, PR, RND, CAPR, LHCG, MTP) - Edge cases: VHN saturation, ANTI null, MAX maximalist, REG severe regression, SP minimum-viable, MD forward-looking multi-domain
Findings density by phase: - Early (D1–D7): 2 promoted to canonical - Mid (D8–D16): 4 promoted to canonical - Late (D17–D25): 1 promoted to canonical - Stable (D26–D34): 0 promoted
Total promoted to canonical: 7 findings. All architectural in nature; none required new primitives.
Schema stability: - v0 primitive list unchanged since Swing 13 - Methodology principles stable at 7 - Tagging conventions stable at 6 - Architectural findings stable since D22 - Multi-swing closure paths stable at 5 (mapping refined twice)
Schema architecture sound; gaps cluster at consumer discipline; discipline closures mutually independent. Final synthesis claim validated across 34 decompositions.
Decomposition 1 — CoachJ (2026-05-31)¶
Source profile (per memory user_coachj_sync_profile.md): Fetched 2026-05-23. 83 games. Confidence 0.78. Eliminative reasoner. 67% overconfidence rate. 70% consensus deviation. 29% authenticity in values-culture decisions. 38.6% political attention. Opportunity → caution at 45%. Expertise-gated persuadability (financial/career analytical confidence; health authority deference per experiment).
Capture layer fit (C1–C14)¶
| Primitive | Fit for CoachJ |
|---|---|
| C1 (option choice) | 83 games of data; spans A/B/C/D/NoTA per his contrarian profile |
| C2 (rationale text) | Captured per round; rich text per experiment-new-domain-signals findings |
| C3 (conviction) | Captured; experiment showed wide range (1–5) by domain |
| C4 (decision time) | Captured |
| C5 (post-reveal reaction) | Captured selectively |
| C6 (post-reveal note) | Sparse — only 5 non-empty notes across N games per ADR-057 eval finding. Surface-level scarcity flagged. |
| C7 (milestone self-prediction) | Solo only; likely fired at games 10/25/50 + arcs |
| C8/C9/C10 (multiplayer) | Has multiplayer history (70% consensus deviation requires multi rounds to compute) |
| C11/C12/C13 (agent reads) | Substantial — Hermes is canonical use case; A11/A12/A13 measurable |
| C14 (session metadata) | Standard |
Capture-fit assessment: All capture primitives have data for CoachJ. C6 sparseness is the only structural observation — note text is highest-bandwidth signal per ADR-057 but the actual capture is thin.
Extraction layer fit (E_*, E5–E22)¶
| Primitive | Fit for CoachJ |
|---|---|
| E_ai_pred | Standard predictions per round |
| E_classify_driver | Central — feeds 40% of his profile; eliminative reasoner output dominant |
| E_chosen_driver | Per round; substrate-derived |
| E_sync_match | Null on NoTA rounds (high for CoachJ via contrarian profile); A1 inherits variable-density problem from Swing 1 |
| E5 (calibration) | 67% overconfidence — strong signal |
| E6 (timing signature) | Standard |
| E7 (persuadability) | Expertise-gated (experiment finding) — domain-conditional, not flat. Q4a + Q4d would visualize this. |
| E8 (peer read) | From multi rounds |
| E9 (dissent) | 70% consensus deviation = high E9 firing |
| E10 (rationale-choice expression match) | 29% in values-culture = expression-match-low ⚠️ dual-interpretation: inauthenticity OR epistemic humility. Cannot resolve without combining other signals. |
| E12 (occasion noise) | Refinement applies; rationale-controlled |
| E13 (pragmatic routing) | Fires high per experiment S1, S3, S7 (declines binaries; restructures) |
| E14 (ideal-actual reference frequency) | Fired explicitly in S5, S7, S8 per experiment |
| E15 (reasoning style aggregate) | Eliminative + systems-thinking dominant |
| E16 (attention aggregate) | 38.6% political dominant; temporal also elevated |
| E18 (self-awareness) | mode: solo; depends on C7. Likely fires given experiment self-reflective notes. |
| E20 (domain-confidence inference) | Fires high — experiment showed clear domain-conditional asymmetry |
| E22 (E_context_bleed) | Fires on S4 Priya (canonical M9 case) |
Extraction-fit assessment: All relevant extractions have signal in CoachJ's profile. No new extraction needed. First decomposition validates extraction-layer coverage.
Aggregation layer fit (A1–A14)¶
| Primitive | Fit for CoachJ |
|---|---|
| A1 (sync_score) | Computed; ⚠️ variable-density EMA per Swing 1 (high contrarian = many NoTA rounds excluded from EMA) |
| A2 (Three Dimensions) | Accuracy + Coverage measurable; Readability depends on recent multi |
| A4 (category_patterns) | Governance-heavy (~75% of corpus) — pooled across all categories thin for non-governance |
| A7 (signal JSONB) | Carries E5–E22 outputs; CoachJ's profile has rich signal |
| A8 (resonance_stats) | Sparse — only 5 non-empty C6 notes; A8 + refined-A8 both compute on small N |
| A9 (calibration_stats) | 67% overconfidence aggregate |
| A11/A12/A13 (agent-side) | Measurable from Hermes interaction history; trust state M5 computable |
| A14 (context_bleed_rate) | Low — 1 occurrence in 8 experiment scenarios |
Convention 6 application: N=83 supports most aggregations. Stratified breakdowns would expose thin cells — governance N~62 (rich); non-governance categories N=5–10 each (tentative). Convention 6's per-primitive thresholds would correctly mark non-governance aggregations as tentative.
Mode coverage: Has solo + multi. Q4a mode-stratification would make his solo vs. multi calibration patterns visible.
Exposure layer fit (X1–X11)¶
| Primitive | Fit for CoachJ |
|---|---|
| X1 (sync_score headline) | Number exists; ⚠️ may misrepresent if pragmatic-router pattern hides sample-size context |
| X3 (behavioral attention signals) | Political attention card would highlight 38.6% — dominant signal; per ADR-065 surface |
| X5 (agent_context_block) | Hermes prose synthesis canonical case; principle 7 prose-synthesis discipline applies (consume C2 + C6 alongside aggregates) |
| X7 (MCP tools) | Active; Hermes consumes |
| X11 ("why" expansion text) | Active per Hermes flow |
Exposure-fit assessment: All exposure primitives engaged for CoachJ. X5 is the highest-leverage surface — Hermes prose must apply principle 7's prose-synthesis discipline, especially given dual-interpretation flags on E10 and E14 firing in his profile.
Measured-outcomes fit (M1–M9)¶
| Outcome | Fit for CoachJ |
|---|---|
| M1 (identity load) | High in values-culture per experiment (rationale richness + low alignment-match) |
| M2 (subjective stakes threshold) | Not measurable — cube axis 11 not in substrate yet; Q4c-gated |
| M3 (domain confidence asymmetry) | Strong fit — financial/career analytical vs. health authority deference (experiment-verified); cube-C2 anchor active |
| M4 (calibration drift) | E19 should track; layered gap (scaffolded + staleness for state-sensitive) |
| M5 (user trust state with agent) | Substantial — Hermes interactions provide A11/A12/A13 input; staleness annotation needed |
| M6 (aspiration gap magnitude) | E14 firing in S5/S7/S8 → M6 emergent |
| M7 (frame-restructuring tendency) | Strong fit — E13 fired high in 3 of 8 experiment scenarios; M7 routes around X1 collapse for CoachJ's pragmatic-router pattern per Swing 1 repeat |
| M8 (cross-domain signal stability) | Partial — experiment confirmed cross-domain firing but corpus governance-heavy; Q4 + multi-domain corpus expansion needed |
| M9 (play-time context bleed) | Fired on S4 Priya — canonical case |
Schema fitness verdict for CoachJ¶
No primitives needed to be added. Everything in CoachJ's known profile fits into existing schema primitives. First decomposition validates schema's coverage on real data.
Substrate-driven limitations (not schema gaps): - M2 requires cube axis 11 in substrate. - M8 requires multi-domain corpus expansion. - Most Q4c/Q4d stratifications would expose thin per-cell N — Convention 6 covers but cells are thin until corpus expands.
Schema-side observations from this decomposition: - C6 sparsity (5 non-empty notes) limits A8 + refined-A8 signal richness. Not a schema gap but worth flagging. - E10 + E14 both dual-interpretation; CoachJ's profile makes the interpretive load on X5 prose visible. - E_classify_driver SPOF concern is concrete here — CoachJ's eliminative reasoning style classification feeds A4, A5, A6, A7, E10, E14, E18 directly. Dependency graph already documented in canonical doc.
First-decomposition finding: schema architecture validated against most-resolved real profile. No new primitives needed. Substrate and exposure are the bottlenecks, both already documented in parked questions and Convention 6 / principle 7.
Decomposition 2 — Player BA (Binary Accepter, synthetic-but-realistic) — 2026-05-31¶
Diversity dimension targeted: counter-profile to CoachJ. Tests whether schema discriminates a decisive, well-calibrated, consensus-following player from pragmatic-router profile.
Synthetic profile: 50 games; C1 95% within-options; C2 decisive ~80w; C3 avg 3.5–4.0 stable; 25 multi rounds; 25% consensus deviation; ~10 agent reads; uniform domain confidence; consequentialist + principled_deductive reasoning.
Capture fit: All 14 primitives have data. C11–C13 sparse (N=10 reads) → Convention 6 will mark A11–A13 tentative.
Extraction fit (10 of 22 primitives produce distinct signals from CoachJ): - E_classify_driver: consequentialist + principled_deductive vs CoachJ's eliminative + systems-thinking - E5: ~10% overconfidence vs CoachJ's 67% - E7: stable across context vs CoachJ's expertise-gated - E9: ~25% deviation vs CoachJ's 70% - E10: high expression match (no dual-interpretation flag) vs CoachJ's 29% in values-culture - E13: low vs CoachJ's high pragmatic routing - E14: low vs CoachJ's frequent ideal-actual references - E16: ethical + interpersonal vs CoachJ's 38.6% political dominant - E20: low variance vs CoachJ's high variance - E22: low vs CoachJ's S4 firing
Aggregation fit: All primitives meaningful. Convention 6 stress-tested — sparse A11–A13 (N=10) correctly marked tentative.
Exposure fit: X5 prose describes "well-calibrated consequentialist deliberator" — principle 7 discipline lighter than for CoachJ (no dual-interpretation flags).
Measured outcomes: M3 low (uniform), M7 low (primary discriminator from CoachJ), M5 tentative due to N=10 reads. Others standard.
Verdict: All primitives fit. Schema discriminates BA vs CoachJ across 10+ extraction primitives + M-outcomes. No new primitives needed.
Cross-decomposition findings (N=2): - Discrimination check passes: falsification condition #1 (identical decompositions feeling different) does NOT trigger. - Coverage check: all 70 primitives (14 C + 22 E + 14 A + 11 X + 9 M) instantiate meaningfully for at least one profile. - Convention 6 validates against real sparse data (BA's N=10 agent reads). - Principle 7 load varies by profile: CoachJ heavy (dual-interpretation, pragmatic-router); BA light (clean signals). Schema's interpretive machinery scales appropriately. - Substrate gaps consistent: both hit M2/M8 substrate limits. Schema-internal coverage validated.
Decomposition 3 — Player ON (Occasion-Noisy, tests refined E12) — 2026-05-31¶
Diversity dimension targeted: tests refined E12 algorithm (Swing 7 Closure A — rationale-controlled noise discrimination).
Synthetic profile: 60 games; ~12 unique shapes played 2–3× each; same C2 rationale across repeats; different C1 choices; C3 avg 3.0; solo only.
Capture fit: Applicable primitives have data. C8/C9/C10 cleanly null per mode tag.
Extraction fit — canonical refined-E12 firing: - E_classify_driver: same outputs across repeats (input for E12 discrimination) - E_chosen_driver: varies across repeats (substrate drivers differ) - E12 refined fires high with high confidence (same processing + different output = noise) - E7 mode:multi → null (closure path via option_tap_trace applies) - E13, E14: low
Aggregation fit: - A6 option_preferences flat (choice variability) - A7 carries E12 high-firing - Convention 6 nuance surfaced: E12 fires per-repeat-shape; per-shape N=2 or N=3 while aggregate A7 N=60. Per-firing reliability is at different scale than aggregate Convention 6 N. Flagged as Convention 6 sub-concern, not new convention.
Exposure fit: X5 prose carries interpretive load — should reference rationale-controlled noise (not just "noisy") per principle 7 discipline.
Measured outcomes: M8 diagnostic — if ON's noise is consistent across domains, the noise itself is a stable cross-domain signal.
Verdict: Refined E12 validated against canonical target profile. No new primitives needed.
Cross-decomposition findings (N=3):
| Primitive | CoachJ | BA | ON |
|---|---|---|---|
| E5 calibration | High overconf | Well-matched | Variable |
| E7 persuadability | Expertise-gated | Stable | Null (solo) |
| E9 dissent | 70% | 25% | Variable |
| E10 expression match | Dual-int fires | High | High |
| E12 refined | Low-mod | Low | High (canonical) |
| E13 pragmatic routing | High | Low | Low |
| E14 ideal-actual | Fires | Low | Low |
| E20 domain confidence | High variance | Low | Depends |
- All three profiles decompose distinctly. Falsification condition #1 does NOT trigger across N=3.
- Mode-tag discipline validated: ON's solo-only profile cleanly nulls C8–C10 + E7 (multi).
- Convention 6 sub-concern: E12's per-firing reliability at per-shape scale; aggregate Convention 6 covers different scale.
- Refined E12 (Swing 7) works: distinguishes noise from variation correctly on canonical profile.
Decomposition 4 — Player LMA (Low Meta-Awareness, tests E18 SPOF impact) — 2026-05-31¶
Diversity dimension targeted: tests E18's SPOF dependency on E_classify_driver (Swing 6 repeat).
Synthetic profile: 50 games; C7 self-prediction = "consequentialist deliberator"; actual behavior = intuitive eliminator; C2 uses consequentialist vocabulary; moderate conviction + accuracy.
Capture fit: Standard. C2 is the SPOF risk surface (vocabulary vs. behavior mismatch).
Extraction fit — SPOF stress test: - Scenario A (robust E_classify_driver): outputs intuitive/analogical → E18 fires LARGE → schema correctly identifies meta-blindness - Scenario B (verbal-style-contaminated, current production): outputs consequentialist → E18 fires SMALL → schema MISSES meta-blindness
This is the SPOF concern's concrete impact materialized. Architectural finding from Swing 6 repeat predicted; LMA is canonical demonstration.
Other extractions: E10 dual-interpretation fires either way (scenario A: inauthenticity reading; scenario B: masks issue). E14 low for LMA explicitly.
Exposure fit: X5 prose discipline critical — principle 7 prose-synthesis generalization (Swing 4 repeat) says X5 should consume C7 directly. In scenario B, X5 has no signal to recover since extraction-layer contamination lost it.
Measured outcomes: M1 high (identity invested in self-image); M6 weak (LMA doesn't see gap); M5 potentially high (agent confirms self-image).
Verdict: Schema architecturally CAN identify LMA's meta-blindness — only if E_classify_driver is robust. SPOF concern concretized. No new primitives needed; closure path (Swing 3 Closure A verbal-style normalization) becomes load-bearing.
Cross-decomposition findings (N=4):
| Player | E18 firing |
|---|---|
| CoachJ | Small (accurate self-prediction) |
| BA | Small (accurate) |
| ON | Likely small |
| LMA | LARGE if robust E_classify_driver; SMALL if contaminated |
- Falsification condition #1 risk surfaces conditionally: if E_classify_driver contaminated, LMA could decompose like CoachJ/BA on E18 despite feeling meaningfully different. Not a schema falsification — falsifies the current implementation absent Swing 3 Closure A.
- LMA is the canonical SPOF stress-test case. Adds visibility to the SPOF architectural finding.
- Closure paths cohere: Swing 3 Closure A → Swing 6 SPOF dependency-graph → enables LMA-like discrimination.
Decomposition 5 — Player MO (Multi-Only, tests mode-tagging from opposite extreme) — 2026-05-31¶
Diversity dimension targeted: mode-tag discipline at multi-only extreme. Validates Q5 overlay-tagging from opposite side of ON's solo-only profile.
Synthetic profile: 40 multi games; C7 null (solo-only feature); rich C8/C9/C10; standard rationale and conviction.
Capture fit: C7 cleanly null (mode tag); C8/C9/C10 cleanly rich. Inverse of ON's null pattern.
Extraction fit: Symmetric to ON's profile: - E7 fires rich (from C10) — opposite of ON's null - E18 null (depends on C7) — opposite of ON's measurable - E8 peer read confidence fires rich - E9 dissent measurable from consensus deviation
Aggregation fit: A2 Readability measurable (ADR-045 multi gate satisfied).
Exposure fit — Sub-finding surfaces:
Swing 4 Closure B (exposure-layer null guard for E7 solo-null) generalizes to all mode-tagged primitives. MO surfaces the inverse: null E18 risks reading as "low self-awareness" instead of "not measured (multi-only player)." Same discipline applies to E18, C7, and any other mode-conditional null.
Measured outcomes: M-outcomes mostly work. No M-outcome depends directly on E18 (M1 uses other inputs).
Verdict: All primitives fit. Mode-tag discipline validated symmetrically (ON solo-only + MO multi-only). No new primitives needed. Sub-finding promoted: Swing 4 Closure B generalizes.
Cross-decomposition findings (N=5):
| Player | C7 / E18 | C8–C10 / E7 |
|---|---|---|
| CoachJ | Both | Both |
| BA | Both | Both |
| ON | Solo only → C7 fires; E18 fires; C8–C10 null; E7 null | |
| LMA | Both | Both |
| MO | C7 null; E18 null; C8–C10 fire; E7 fires |
- Mode-tag discipline validated symmetrically. Both extremes correctly partition measurable vs null.
- Swing 4 Closure B generalizes to all mode-tagged primitives — documentation work needed across E18, C7, and other mode-conditional null patterns.
Decomposition 6 — Player SP (Sparse N=5, Convention 6 stress test) — 2026-05-31¶
Diversity dimension targeted: Convention 6 at minimum-viable-profile boundary. Tests whether the schema's tentative-marking works at low N.
Synthetic profile: 5 games (4 solo + 1 multi); rich C2 rationale per round; C3 conviction 4.0; C7 null (game 10 milestone not reached); 1 agent read.
Capture fit: All applicable primitives have data but at thin N. C2 most preserved.
Extraction fit — per-round vs aggregate reliability surfaces: - E_classify_driver per-firing valid; aggregate over 5 = pattern observation, not statistical - E5, E6, E7 etc. aggregate-statistical at N=5 = tentative - E12 likely zero firings (5 unique shapes) - E18 null (C7 null) - E19 insufficient
Aggregation fit — Convention 6 stress test passes: Convention 6 tentative-marking fires across nearly every aggregation (A1 N=5, A2 Readability N=1, A4 N=1–2 per category, A11–A13 N=1). Schema honestly communicates what it can and can't say.
Exposure fit — principle 7 prose-synthesis matters most at low N: raw C2 + per-round extractions become primary signal when aggregates are tentative. Implicit in principle 7's prose-synthesis generalization (Swing 4 repeat); SP makes it explicit.
Measured outcomes: M-outcomes are pattern-recognition layers needing N to emerge; at N=5 inherently noisy.
Verdict: Schema handles N=5 correctly via Convention 6. No new primitives needed.
Sub-finding — layered reliability structure surfaces at low N:
| Layer | Reliability at low N |
|---|---|
| Capture | Per-round valid |
| Extraction | Per-firing valid; aggregate pattern thin |
| Aggregation | Tentative per Convention 6 |
| Exposure | Inherits aggregation UNLESS prose consumes raw signal (principle 7) |
| Measured outcomes | Need N to emerge |
Promotable observation: schema has layered reliability that becomes explicit at low N. Principle 7's prose-synthesis discipline becomes load-bearing because per-round process information is most reliable signal.
Cross-decomposition findings (N=6):
Convention 6 distribution across profiles: - CoachJ (N=83): most aggregations confident - BA (N=50): A11–A13 tentative - ON (N=60): mostly confident - LMA (N=50): standard - MO (N=40): A2 Readability measurable - SP (N=5): nearly all aggregations tentative
Convention 6 mechanism works across N range from robust (N=83) to minimum-viable (N=5).
Decomposition 7 — Player PU (Paste-User-only, principle 6 × OQ-staleness composition) — 2026-05-31¶
Diversity dimension targeted: principle 6 + OQ-staleness for M4/M5. User interacts exclusively through paste-based agents; behavior shifts over months while paste stays frozen.
Synthetic profile: 30 games over 6 months; pasted snapshot taken at month 1 (N=10); no refresh; behavior shifted from overconfident → well-calibrated.
Capture fit: All captures accurate at firing time. No capture-layer staleness — momentary records.
Extraction fit — drift visible in signals: - E5 calibration drifted favorably (overconfident → well-calibrated) - E11 learning rate fires high (perpetual-beta pattern) - E19 drift indicator fires (pattern shift from baseline)
Aggregation fit: N=30, most aggregations confident; correctly reflects current state when computed live.
Exposure fit — where staleness binds:
For MCP client: agent re-queries A1–A14, sees current calibration. No staleness issue.
For PU's paste client: agent receives month-1 snapshot. "Overconfident with high conviction" — TRUE at month 1, WRONG at month 6. 5-month staleness.
Convention 6 prose-synthesis sub-rule + OQ-staleness composition applies directly: - Paste-based X5 should carry: N denominator "based on 10 games" + staleness annotation "as of 2025-12-01" + outcome "overconfident" flagged time-sensitive - Combined: "calibration: overconfident (based on 10 games as of 2025-12-01)" - Agent should interpret as month-old low-N state, not current
Measured outcomes — OQ-staleness scope validates:
| Outcome | PU staleness |
|---|---|
| M1, M3, M6, M7, M8, M9 | Durable (pattern outcomes) |
| M4 calibration drift | CANONICAL STALENESS CASE |
| M5 user trust state | State-sensitive |
OQ-staleness scope (M4 + M5) correctly bounded. PU makes the bifurcation concrete.
Verdict: Schema architecturally handles staleness. Paste mechanism is the bottleneck — product/eng question, not schema gap. No new primitives needed.
Cross-decomposition findings (N=7):
| Player | M4 staleness | M5 staleness |
|---|---|---|
| CoachJ | Low (stable + active) | Hermes use; less critical |
| BA | Low | Sparse agent use |
| ON | Low | Standard |
| LMA | Could drift | Standard |
| MO | Low | Standard |
| SP | N/A | Insufficient |
| PU | HIGH (canonical) | HIGH (canonical) |
OQ-staleness scope validates against canonical paste-user staleness case. M4 + M5 confirmed as right boundary.
Decomposition 8 — Player HT (High-Trust Agent User, tests M5 strong-positive) — 2026-05-31¶
Diversity dimension targeted: M5 strong-positive quadrant; tests A11/A12/A13 trio discriminating trusting-engaged from indifferent-disengaged (Swing 10 Player V vs Player Y).
Synthetic profile: 60 games + 50 agent reads; C12 ~6% (low); C13 engaged 70% with 86% positive.
Capture fit: Rich agent-side data; N=50 confident.
Aggregation fit — Swing 10 primitives stress-tested:
| Primitive | HT value | Pattern |
|---|---|---|
| A11 (A_why_rate) | 0.06 | LOW |
| A12 (A_feedback_engagement) | 0.70 | HIGH |
| A13 (A_feedback_positivity) | 0.86 | HIGH |
Trusting+engaged pattern. Matches Swing 10's Player V construction.
Discrimination vs Player Y (indifferent): Y has low C12 + null C13 → A12 ~0; HT has low C12 + positive C13 → A12 = 0.70. A12 is the discriminator — Swing 10's design intent validated.
Exposure fit: X5 should describe HT as "trusting; engaged." Must NOT read low A_why_rate as disengagement when A12 shows high engagement. M5 state-sensitive per OQ-staleness — needs "as of [date]" for paste users.
Verdict: Swing 10 scaffolding architecture validates against canonical high-trust profile. No new primitives needed.
Cross-decomposition findings (N=8) — M5 4-quadrant structure emerging:
| Player | A_why | A_engagement | A_positivity | M5 reading |
|---|---|---|---|---|
| CoachJ | Moderate | Moderate-high | Mixed | Calibrating |
| BA | Sparse | Tentative | Tentative | Low N |
| ON | Standard | Standard | Standard | Standard |
| LMA | Likely high+positive | Moderate | High | Confirmation-trusting |
| MO | Standard | Standard | Standard | Standard |
| SP | N=1 | Null | Null | Insufficient |
| PU | Stale | Stale | Stale | STALE |
| HT | LOW | HIGH | HIGH | STRONG POSITIVE |
- M5 4-quadrant structure (trusting / distrusting / calibrating / indifferent) + edge cases (stale, insufficient, confirmation-trusting).
- Swing 10 A11/A12/A13 trio discriminates these patterns — design intent holds across diverse profiles.
Decomposition 9 — Player DT (Distrusting Agent User, M5 distrusting quadrant) — 2026-05-31¶
Diversity dimension targeted: M5 W quadrant; tests A11/A12/A13 discrimination of distrusting-engaged from trusting-engaged.
Synthetic profile: 40 games + 30 agent reads; C12 80% (high); C13 engaged 87% with 31% positive (mixed-negative).
Aggregation fit:
| Primitive | DT | vs HT |
|---|---|---|
| A11 (A_why_rate) | 0.80 HIGH | HT 0.06 LOW |
| A12 (A_feedback_engagement) | 0.87 HIGH | HT 0.70 HIGH — both engaged! |
| A13 (A_feedback_positivity) | 0.31 LOW | HT 0.86 HIGH |
A12 doesn't discriminate trust direction; A11 + A13 do. A12 distinguishes engaged from disengaged. Schema trio is necessary and sufficient.
Exposure fit: X5 must describe DT as "distrusting but engaged" not "low trust because disengaged." Principle 6 + Closure B intersection: paste users need correct interpretation committed to static text.
Verdict: Swing 10 trio correctly discriminates W quadrant. No new primitives needed.
Cross-decomposition findings (N=9) — M5 4-quadrant validation complete:
| Pattern | Profile | A11 | A12 | A13 |
|---|---|---|---|---|
| Trusting | HT | LOW | HIGH | HIGH |
| Distrusting | DT | HIGH | HIGH | LOW |
| Calibrating | CoachJ | Mod | Mod-high | Mixed |
| Indifferent | Y (Swing 10) | Low | Null/low | Null |
| Stale | PU | Time-deg | Time-deg | Time-deg |
| Confirmation-trusting | LMA | Likely low | Mod | High |
- All four quadrants discriminate cleanly via A11/A12/A13.
- A12 distinguishes engaged from disengaged regardless of trust direction.
- Swing 10's design intent proven correct across decompositions.
Decomposition 10 — Players DA + DU (Domain-Asymmetric + Domain-Uniform pair) — 2026-05-31¶
Diversity dimension targeted: M3 + E20 + cube-C2 anchor in real profile space pre-Q4d. Pair decomposition.
DA: 50 games; confident on legal/financial; deferent on medical/safety; different asymmetry shape from CoachJ. DU: 50 games; stable ~30% persuadability + ~50% calibration across all domains.
Capture fit: Both have C1–C14 standard; substrate domain tags exist.
Extraction fit — domain-conditional firings:
| Player | E20 variance | E7 per-round |
|---|---|---|
| DA | HIGH (different per domain) | Domain-conditional |
| DU | LOW (stable across) | Stable |
Aggregation fit — pre-Q4d behavior: A9 pooled. A4 stratifies by category not cube-C2. A7 carries individual E20 firings — variance pattern visible in JSONB.
Sub-finding — M3 detection doesn't strictly require Q4d. Q4d makes aggregate visibility explicit, but extraction-layer variance (E20 firings) carries the discrimination signal pre-Q4d. Principle 7 prose-synthesis discipline lets X5 access per-round signal without waiting for Q4d.
This refines M3's layered-gap framing: the aggregation layer is a visibility convenience, not a strict prerequisite for detection.
Exposure fit: X5 can describe DA's asymmetry from E20 firings (per-round in A7 JSONB) pre-Q4d via principle 7 prose discipline. DU's uniformity from stable E20.
Measured outcomes: M3 HIGH for DA, LOW for DU. M8 inverts (DU stable, DA lower stability).
Verdict: Schema discriminates asymmetric vs uniform profiles at extraction layer pre-Q4d. No new primitives needed.
Cross-decomposition findings (N=10):
| Player | M3 reading | E20 variance |
|---|---|---|
| CoachJ | HIGH (financial+, health−) | HIGH |
| BA | LOW | LOW |
| ON, LMA, MO, HT, DT | Standard | Standard |
| SP | Insufficient | Insufficient |
| PU | Era-dependent | Stale |
| DA | HIGH (different asymmetry) | HIGH |
| DU | LOW | LOW |
- Schema discriminates 3 distinct M3 patterns even pre-Q4d.
- M3 framing refinement: detection at extraction layer; aggregation visibility gated by Q4d.
Decomposition 11 — Player HG (Hedger, tests E10/E14 dual-interpretation discipline) — 2026-05-31¶
Diversity dimension targeted: dual-interpretation discipline at extraction + X5 prose. Swing 3's Player C amplified to 50-game scale.
Synthetic profile: 50 games; C2 heavily hedged ~100 words; C3 conviction 4.0 (HIGH); C1 consistent choices; moderate-high accuracy.
Capture fit: C2 hedged across all 50; C3 high — mismatch is the diagnostic.
Extraction fit — two-scenario discrimination test:
| Scenario | E10 | E14 | M1 | M6 |
|---|---|---|---|---|
| Normalization shipped | HIGH match | Low | Low | Low |
| Normalization NOT shipped | LOW (false inauthenticity) | False high | False high | False high |
E10/E14 dual-interpretation flags + rename are necessary but not sufficient — E_classify_driver verbal-style normalization (Swing 3 Closure A) is the binding constraint.
Exposure fit — principle 7 + dual-interpretation: X5 must commit to correct framing for paste users: - Correct: "epistemically humble in expression; decisive in choice; high meta-cognitive honesty" - Incorrect (if classifier confused): "inauthentic; high aspiration-actual gap" - Same player, two completely different descriptions depending on closure status.
Verdict: Schema architecturally correct; conditional on Swing 3 Closure A. No new primitives needed.
Cross-decomposition findings (N=11) — conditional discrimination cases:
| Player | Conditional finding |
|---|---|
| LMA | E18 meta-blindness depends on robust E_classify_driver |
| HG | E10/E14 dual-interpretation depends on verbal-style normalization |
Two profiles now exhibit conditional discrimination on the same closure path. Swing 3 Closure A → Swing 6 SPOF dependency-graph → enables LMA AND HG-class discriminations. Multi-swing closure path significance reinforced across decompositions.
Decomposition 12 — Player FS (Fast-Snap Expert, tests E6 fast-regime) — 2026-05-31¶
Diversity dimension targeted: E6 fast-regime + Klein RPD. Player I from Swing 5 expanded to 40-game profile.
Synthetic profile: 40 games; C4 8s avg; C3 4.5 (HIGH); accuracy 85%; C2 brief ~30w; intuitive + analogical reasoning.
Extraction fit: E_classify_driver: intuitive + analogical. E5: well-calibrated. E6: fast-regime canonical Klein RPD. E12: low.
Sub-finding — E6 closure path asymmetry:
The attention_state closure (Swing 5 → Swing 15) was specifically about slow-regime contamination (distracted-slow vs deliberated-slow). FS's fast-regime doesn't need this closure — at 8s avg there's no room for attention dropout. Distraction-during-decision matters in slow regime; fast-regime is intrinsically robust.
E6 closure path is asymmetric: attention_state necessary for slow-regime trustworthiness, not fast-regime. Documentation refinement opportunity in E6 row.
Verdict: Pure validation. No new primitives needed. Sub-finding: closure path asymmetry.
Cross-decomposition findings (N=12):
| Player | Avg C4 | E6 regime |
|---|---|---|
| Most profiles | Standard | Standard |
| SP | Variable | Tentative (low N) |
| FS | 8s FAST | Fast-regime canonical |
Fast-regime intrinsically robust — no closure-dependent discrimination for FS.
Decomposition 13 — Player DS (Distracted-Slow, tests E6 slow-regime contamination) — 2026-05-31¶
Diversity dimension targeted: E6 slow-regime contamination. Tests whether schema discriminates DS from deliberated player pre-closure.
Synthetic profile: 50 games; C4 120s avg; actual attended time 40s avg; attention_state not captured (closure pending); conviction 3.5; accuracy 60%.
Capture fit: All present except attention_state (closure-pending capture).
Extraction fit — contamination: - Pre-closure: E6 reads 120s as deliberation → "slow-regime deliberator" - Post-closure (attention_state shipped): E6 reads 40s attended → "intermittent attention; partial deliberation" - DS indistinguishable from Player J pre-closure.
Aggregation/exposure: A7 carries wrong E6 classification pre-closure; X5 prose misframes DS as "slow deliberator." For paste users, misframing propagates as durable text.
Verdict: Schema architecturally correct; conditional on Swing 5 → Swing 15 closure path. No new primitives needed.
Substantive synthesis observation — closure paths map to profile shapes:
The 5 multi-swing closure paths each gate distinct profile decompositions:
| Closure path | Profile-class gated |
|---|---|
| Swing 4 → 15 (E7 mode via option_tap_trace) | Solo-only persuadability |
| Swing 5 → 15 (E6 via attention_state) | DS distracted-vs-deliberated |
| Swing 9 → 12 (Q4a mode-stratification) | Regime-shifted player |
| Swing 9 → 11 (Convention 6) | Low-N (SP) honest communication |
| Swing 2 → 3 (verbal-style + NoTA) | LMA + HG + pragmatic-router |
Refines synthesis: "gaps cluster at specific closure paths, each enabling specific profile-class decompositions." Promotable to canonical doc.
Cross-decomposition findings (N=13) — conditional discrimination cluster:
| Profile | Conditional finding | Closure path |
|---|---|---|
| LMA | E18 meta-blindness | Swing 3 Closure A |
| HG | E10/E14 dual-interpretation | Swing 3 Closure A |
| DS | E6 slow-regime contamination | Swing 5 → Swing 15 |
3 of 13 decompositions exhibit conditional discrimination on specific closure paths.
Decomposition 14 — Player CB (High-Context-Bleed, tests E22 + A14 + M9) — 2026-05-31¶
Diversity dimension targeted: validates Swing 13's M9 scaffolding (E22 + A14) on canonical high-bleed profile.
Synthetic profile: 40 games; C2 30% mention real-world parallels; C6 often flags hits.
Capture fit: C2 + C6 carry the diagnostic surface.
Extraction fit: E22 fires on ~12 of 40 games. Other extractions standard.
Aggregation fit: A14 = 0.30 (12/40) HIGH. Convention 6 N=40 confident.
Exposure fit: X5 should reference specific bleed events from C6 notes per principle 7. OQ-staleness check: M9 is pattern (durable); paste users get stable read without staleness annotation.
Verdict: Pure validation. Swing 13 scaffolding architecture (E22 → A14 → M9) validates. No new primitives needed. No conditional discrimination — Swing 13 scaffolding was complete.
Cross-decomposition findings (N=14):
| Player | E22 firings | A14 | M9 reading |
|---|---|---|---|
| CoachJ | ~1 (S4) | Low | Moderate |
| Most profiles | 0 | Null/Low | Low |
| CB | ~12 | 0.30 HIGH | HIGH (canonical) |
M9 scaffolding validates across the pass. E22 → A14 → M9 chain produces clean discrimination. First M9-focused decomposition completes the M-series validation.
Decomposition 15 — Player PR (High-Pragmatic-Router, multi-layer gaps test) — 2026-05-31¶
Diversity dimension targeted: canonical pragmatic-router; tests M7 + OQ-1 + OQ-2 + multi-layer consumer-discipline gaps.
Synthetic profile: 50 games; C1 70% NoTA; C2 frequent restructuring; C3 high conviction on restructure; 75% accuracy on within-options.
Capture fit: Standard; high-NoTA rate on C1.
Extraction fit: E13 fires very high (canonical). E_sync_match null on 35 of 50; A1 variable-density per Swing 1. E_chosen_driver fabricated on forced-closest per Swing 2 (contaminates A4).
Aggregation fit — multi-layer concerns: - A1: 15 contributing rounds, Convention 6 tentative - A4: contaminated by forced-closest drivers - A7: clean E13 high firing
Exposure fit — canonical OQ-1 + M7 routing case: - X1 collapses (15 contributing rounds; pragmatic pattern hidden) - A4 contaminated → describes wrong category preferences - M7 fires very high → A7 carries E13 rate clearly - X5 prose can describe PR correctly via M7 language — Swing 1 repeat's routing finding validates concretely.
Multi-layer consumer-discipline gaps:
| Layer | Gap | Closure path |
|---|---|---|
| Exposure (X1) | Headline collapse | OQ-1 product decision |
| Aggregation (A4) | Forced-closest contamination | OQ-2 Closure C → Swing 3 Closure A |
| Aggregation (A1) | Variable-density EMA | Convention 6 (promoted) + display |
M7 routing provides agent-surface mitigation without any closure shipping.
Verdict: Schema architecturally correct. Multi-closure-path dependency. No new primitives needed. Best concrete validation of three-category synthesis — PR exhibits aggregation-gap (A1 + A4) + exposure-gap (X1) simultaneously with independent closure paths.
Cross-decomposition findings (N=15) — multi-closure-path observation:
| Profile | Closure paths gating discrimination |
|---|---|
| LMA, HG | 1 (Swing 3 Closure A) |
| DS | 1 (Swing 5 → 15) |
| PR | 2–3 (OQ-1 + Swing 2 Closure → Swing 3 Closure A) |
Profile-class discrimination can require MULTIPLE closure paths to compose concurrently. PR demonstrates. Sub-finding refines D13's closure-paths-to-profile-shapes mapping.
Decomposition 16 — Player MD (Multi-Domain post-corpus-expansion, M8 forward-looking) — 2026-05-31¶
Diversity dimension targeted: M8 + E21 in post-ADR-074-expansion scenario. Forward-looking.
Synthetic profile: 80 games across career/health/financial/governance/relational; ~16 per domain; consistent signals across.
Extraction fit: - E_classify_driver fires across domains; comparable per-domain - E5, E7: per-domain stratification possible - E20: rich intra + inter-domain data - E21 fires meaningfully for first time across pass
Aggregation fit: Q4b's product value concrete — per-domain calibration would surface cleanly at N=16/cell.
Exposure fit: X5 describes MD as "consistent signal patterns across domains." M8 durable per OQ-staleness; paste users get stable read.
Measured outcomes: - M8 HIGH and meaningfully measurable for first time - M3 measurable at meaningful N per domain
Verdict: Forward-looking validation. Schema architecturally ready for ADR-074 corpus expansion. No new primitives needed.
Cross-decomposition findings (N=16) — corpus-state distribution:
| Player | Corpus coverage | E21 | M8 |
|---|---|---|---|
| CoachJ | Governance-heavy | Cannot fire | Partial |
| Most others | Single-domain/governance-heavy | Cannot fire | Standard |
| MD | Multi-domain (forward) | Fires cleanly | HIGH meaningful |
M8 measurement gates on corpus expansion — substrate dependency, not schema gap. Confirms "substrate-gated measured-outcomes" framing's correctness.
Sub-finding — schema's forward-compatibility validates. MD shows the post-expansion measurement profile emerges naturally without schema-side architecture changes. Strongest forward-looking validation of ADR-074 alignment so far.
Decomposition 17 — Player DR (Drift-Positive observed live, M4 + E11 + E19 chain) — 2026-05-31¶
Diversity dimension targeted: M4 in positive-direction regime, observed live. Complements PU's paste-staleness focus.
Synthetic profile: 60 games over 4 months; calibration trajectory month 1–2 overconfident → month 3–4 well-calibrated; MCP-connected agent.
Extraction fit: - E11 fires HIGH (improvement trajectory) - E19 fires (recent differs from baseline) - E5 aggregate masks trajectory
Aggregation fit: A10 per-campaign trajectory shows improvement curve. Schema's time-handling: E19 + A10 do trajectory work; no explicit Q4-style time-stratification needed. Time is continuous (handled by rolling windows), not a fixed axis like mode/category.
Exposure fit: Live MCP agent describes drift correctly. M4 state-sensitive per OQ-staleness still applies to future staleness windows.
Verdict: Pure validation. No new primitives needed.
Sub-finding — DR + PU complementary M4 coverage:
| Layer of M4 layered-gap | Validation profile |
|---|---|
| Scaffolded (E19 + A10 chain) | DR (live observation works) |
| Exposure-staleness | PU (paste freezes snapshot) |
M4's layered-gap framing (Swing 13 repeat) validated across both layers via two profiles.
Cross-decomposition findings (N=17):
| Player | E19 | E11 | M4 reading | Observation |
|---|---|---|---|---|
| Most profiles | Quiet | Stable | Low | Live or paste |
| DR | FIRES | HIGH | HIGH positive | Live (MCP) |
| PU | (recent fires) | Would be high live | HIGH positive, stale | Paste-frozen |
DR + PU validate M4's complete coverage.
Decomposition 18 — Player DN (Drift-Negative observed live, M4 degrading direction) — 2026-05-31¶
Diversity dimension targeted: M4 in degrading regime; pairs with DR for directional coverage.
Synthetic profile: 60 games; calibration trajectory month 1–2 well-calibrated → month 3–4 overconfident; MCP-connected.
Extraction fit: - E11 LOW or NEGATIVE - E19 FIRES (per ADR-045's miss-rate spec, direction-specific)
Sub-finding — E11 + E19 provide direction-aware drift signaling:
E19 unidirectional (fires on degradation only). E11 fires positively on improvement, low/negatively on degradation. Together provide bidirectional M4 signal via principle 7 multi-path synthesis.
Exposure fit — direction-aware framing: - DR: "calibration is improving" (descriptive) - DN: "calibration is degrading — may warrant attention" (warning-level)
Not dual-interpretation (direction unambiguous); UX-communication discipline that principle 7 doesn't explicitly cover.
Verdict: Validation. No new primitives needed.
Cross-decomposition findings (N=18) — M4 2×2 coverage:
| Direction × Observation | Profile |
|---|---|
| Positive × Live | DR |
| Positive × Paste-frozen | PU |
| Negative × Live | DN |
| Negative × Paste-frozen | Open |
3 of 4 M4 quadrants covered.
Decomposition 19 — Player NS (Negative-direction + paste-frozen, completes M4 2×2) — 2026-05-31¶
Diversity dimension targeted: worst-case M4 paste-staleness — combines DN degradation with PU paste-staleness.
Synthetic profile: 40 games over 6 months; paste at month 1 (N=15, well-calibrated); current month 6 degraded to overconfident; paste-based agent.
Exposure fit — compound staleness: - Paste says: "well-calibrated" (TRUE month 1, WRONG month 6) - Agent operates on stale-favorable data while current state degraded - Sub-finding — direction × staleness asymmetry:
| Direction × Paste-staleness | Risk character |
|---|---|
| Improving × Stale (PU) | Paste underestimates current self (favorable bias to user) |
| Degrading × Stale (NS) | Paste overestimates current self (adverse bias) |
NS qualitatively worse than PU. Stale-favorable description gives user false confidence in current calibration. Refinement to OQ-staleness: degrading-direction cases need stronger mitigation than "as of [date]" annotation alone — explicit "may have changed; recommend refresh."
Verdict: Validation + small OQ-staleness sub-finding. No new primitives needed.
Cross-decomposition findings (N=19) — M4 2×2 COMPLETE:
| Direction × Observation | Profile |
|---|---|
| Positive × Live | DR |
| Positive × Paste-frozen | PU |
| Negative × Live | DN |
| Negative × Paste-frozen | NS (worst-case) |
All four M4 quadrants validated. Schema handles each correctly architecturally; paste mechanism is the bottleneck for paste-side cases.
Decomposition 20 — Player CAPR (Cross-domain Asymmetric Pragmatic Router, multi-dimension stress) — 2026-05-31¶
Diversity dimension targeted: combines DA asymmetry + PR pragmatic routing. Tests multi-dimension composition.
Synthetic profile: 60 games across 5 domains; NoTA rate varies by domain; domain-asymmetric persuadability; mix of solo + multi.
Extraction fit: All relevant signals compose — E7 domain-conditional, E13 high, E20 high variance, E_sync_match null on 50%.
Aggregation fit: A1 variable-density, A4 contaminated + thin per-cell, A7 carries multiple signals.
Exposure fit: X5 must describe M7 routing + M3 asymmetry + direction-aware E20 simultaneously. Principle 7 scales.
Measured outcomes: M3 + M7 fire simultaneously without interaction conflict.
Multi-closure-path composition — 5 paths concurrent:
| Closure path | Addresses |
|---|---|
| OQ-1 closures | X1 collapse |
| OQ-2 Closure C + Swing 3 Closure A | A4 contamination |
| Q4b category-stratification | Per-domain visibility |
| Q4d cube-C2 stratification | Expertise asymmetry |
| Convention 6 N-propagation | Per-cell tentative marking |
Substantive sub-finding — closure paths compose additively. No conflicts arise from concurrent application. Promotable observation: schema's closure paths are independent design dimensions. Each can ship on its own schedule.
Verdict: Validation + sub-finding. No new primitives needed.
Cross-decomposition findings (N=20) — closure-path counts:
| Profile | # paths | Composition |
|---|---|---|
| LMA, HG, DS | 1 | Single |
| PR | 2–3 | Multi |
| CAPR | 5 | Additive composition |
Schema sustains closure-path composition without architectural conflict.
Decomposition 21 — Player RE (Rationale-Editor, tests rationale_edit_trace demotion) — 2026-05-31¶
Diversity dimension targeted: validates Swing 15's demotion by stressing profile where edit trace would carry signal.
Synthetic profile: 50 games; heavy editing pattern (3–4 cycles); concise final text; high accuracy (75%); well-calibrated; C4 ~90s due to editing.
Discrimination test — RE vs DS (both ~90s timing pre-closure):
| Signal | RE | DS |
|---|---|---|
| Accuracy | 75% HIGH | 60% MODERATE |
| E5 | Well-calibrated | Mod overconfidence |
| E_classify_driver | Decisive principled reasoning | Standard |
Schema discriminates at aggregate level via E5 + accuracy + reasoning patterns. rationale_edit_trace would add fidelity but doesn't gate discrimination.
Verdict: Swing 15 demotion correct. No new primitives needed; no candidates re-promoted.
Cross-decomposition findings (N=21) — capture-gap candidate status:
| Candidate | Validation |
|---|---|
| attention_state | DS load-bearing (D13) |
| option_tap_trace | MO + Swing 15 load-bearing |
| rationale_edit_trace | RE confirms demotion correct |
Swing 15 candidate-status decisions validate.
Decomposition 22 — Player RND (Reaction-Note-Divergent, tests A8 principle-7 closure) — 2026-05-31¶
Diversity dimension targeted: stress tests A8 under Swing 8 Closure A territory. Player Q from Swing 8 at 50-game scale.
Synthetic profile: 50 games; C5 70% "gets_me" rate; C6 notes contradict ~60% of those.
Aggregation fit — A8 contamination canonical: - Pre-closure: A8 counts C5 enum only → "high agreement" → misrepresents - Post-closure: A8 classifies C6 free-text → "engaged-but-disagreeing"
Blast-radius check: A8 contamination affects A8 + X5 prose. M5 (uses A11–A13), M1 (rationale + E14), M7 (E13) all independent. Bounded blast radius validated concretely.
Verdict: Conditional validation. Schema architecturally correct. No new primitives needed.
Sub-finding — single-swing closures in mapping:
Canonical doc's closure-paths-to-profile-shapes mapping emphasizes multi-swing paths but single-swing closures also gate profile-class discriminations:
| Single-swing closure | Profile-class gated |
|---|---|
| Swing 7 Closure A (E12 rationale-controlled) | ON refined occasion-noise |
| Swing 8 Closure A (A8 classify free-text) | RND engaged-divergence |
Mapping framework extends to single-swing closures. Worth flagging.
Cross-decomposition findings (N=22) — conditional cluster expanded:
| Profile | Closure path | Type |
|---|---|---|
| LMA, HG | Swing 3 Closure A | Single |
| DS | Swing 5 → 15 | Multi |
| PR | OQ-1 + Swing 2 → 3 | Mixed |
| CAPR | 5 paths | Mixed |
| RND | Swing 8 Closure A | Single |
Both single and multi-swing closures gate profile-class discrimination.
Decomposition 23 — Player SPMO (Sparse + Multi-only, SP + MO combination) — 2026-05-31¶
Diversity dimension: combines low N + multi-only mode. Tests Convention 6 + mode-null guards concurrent.
Synthetic profile: 8 multi rounds; no solo; C7 null; rich C8/C9/C10; ~3 agent reads.
Schema response: C7 null (mode); E18 null; E7 measurable but tentative; A11/A12/A13 tentative; A2 Readability measurable but tentative.
Verdict: Pure validation — stress dimensions compose without interaction. No new findings.
Decomposition 24 — Player MAX (Maximalist, all signals firing high) — 2026-05-31¶
Diversity dimension: multiple M-outcomes fire HIGH simultaneously.
Synthetic profile: 60 games; M7 high; M3 high; M9 high; M6 moderate; M4 high (improving); M5 strong positive; E18 measurable.
Schema response: Multiple M-outcomes fire HIGH concurrently. X5 prose composes multi-dimensional profile. Principle 7 discipline scales. A7 carries all signals. No interaction effects.
Sub-finding — M-outcomes compose additively. Same architectural property as closure paths (D20). The schema's design dimensions (M-outcomes, closure paths, signals) are mutually independent.
Verdict: Validation + small architectural observation.
Decomposition 25 — Player CMS (Cross-Mode Shifter, calibration by mode) — 2026-05-31¶
Diversity dimension: canonical Q4a use case (mode-stratification gate).
Synthetic profile: 50 games; 30 solo well-calibrated vs 20 multi 50% overconfidence; high persuadability in multi.
Schema response: - Pre-Q4a: A9 pools across modes → "moderate overconfidence" (misses mode shift) - Post-Q4a: A9 stratifies → reveals solo well-calibrated vs multi-overconfident
Verdict: Conditional validation — Q4a gates discrimination. Adds CMS to closure-paths-to-profile-shapes mapping under Swing 9 → 12 → Q4a path.
Batch summary (D23 + D24 + D25):
| Decomposition | Finding |
|---|---|
| D23 SPMO | Pure validation; stress dimensions compose |
| D24 MAX | M-outcomes compose additively (parallels D20 closure paths) |
| D25 CMS | Conditional on Q4a; reinforces mapping |
Pattern across batch: stress combinations compose without new interaction effects. Schema's architectural independence holds across the design dimensions.
Provisional / under-question¶
Sub-distinctions still soft. May get sharpened, demoted, or absorbed by swings.
| Item | Status | Notes |
|---|---|---|
| Write-time vs read-time inside extraction | Accepted 2026-05-31 | Decided on question 1. Some signals (E5, E15, E16) ambiguous between the two; swings should sharpen per-signal. |
| Substrate as out-of-scope (Option C of question 2) | Accepted 2026-05-31 | Cube owns substrate; measurement schema references it. |
| Frame-restructuring detector E20 vs. pragmatic routing E13 | Under-question | Probably E20 is a sub-pattern of E13. Park until cross-domain data forces a split. |
| Subjective stakes threshold M2 as outcome or extraction | Under-question | When substrate magnitude integration matures, M2 may become a computable read-time extraction. |
| Sample-size gates and EMA half-lives as primitives | Under-question | Provisionally tagging conventions. Push back welcome. |
| Meta-pattern: final-state vs. process capture divergence | Resolved: promoted to methodology principle 7 (Swing 1 repeat, 2026-05-31). | See methodology principle 7 for the principle text. Surfaced across Swings 1–4, 7, 8, 10, 13, and confirmed in Swing 1 repeat (8 of 16 swings + repeat). Broadened in Swing 15 from original "structured-vs-rationale-text" framing. Promotion criteria met: original framing across 4+ swings + broader framing confirmed at promotion + repeat confirmation. |
| Central-extraction single-points-of-failure | Resolved Swing 6 repeat (2026-05-31): promoted to architectural finding for canonical doc. | 5+ swing confirmations (Swing 3 contamination source; Swings 6, 7, 8, 10, 13 dependents). E_classify_driver feeds A4, A5, A6, A7, and is referenced by E18, E10, E14, E12 (post-refinement), and similar-classifier consumers A8, A13, E22. Contamination propagates widely. Tension with principle 7: each principle 7 closure that "consumes rationale text path" adds another dependent on free-text classification — principle 7 and SPOF concern compound each other. Substrate-side parallel surfaced Swing 12 repeat: the tagger of cube axes (cube-C2 expertise-requirement, structural axes) is a high-leverage point. Mis-tagged substrate propagates through every Q4c/Q4d-stratified primitive. Cube-doc territory; cross-doc handoff. Closure A promoted: document the dependency graph explicitly. Every primitive that consumes E_classify_driver-style classification gets tagged; consumers know which signals are at risk if the central extraction is contaminated. Closures B (free-text classification as meta-concept) and C (redundancy/fallback) deferred to engineering. Promotable as header-level architectural finding alongside three-category synthesis. |
Open questions for this exercise (address during swings)¶
These are schema questions, not externally-gated. Each names a place where current measurement bakes in an assumption that may not hold.
OQ-1 — sync_score vs. profile-quality: one primitive or two? RESOLVED 2026-05-31. Path chosen: Option C — always show sync_score with denominator + Three Sync Dimensions (exposure-only fix). Cheapest closure; aligns with Convention 6 already promoted; no new primitives required. Implementation pending in eng pass. See docs/research/briefs/oq1-oq2-nota-handling-brief.md.
OQ-2 — NoTA forced closest-match injects preference signal that may not exist. RESOLVED 2026-05-31. Path chosen: make closest-match optional with explicit "no closest" choice in UI. Captures the signal that's actually there; decouples from Swing 3 Closure A (verbal-style normalization no longer prerequisite for OQ-2). Implementation pending in eng pass. See docs/research/briefs/oq1-oq2-nota-handling-brief.md.
OQ-3 — capture primitives possibly missing (environmental / attention state). Currently nothing measures the player's environment: time of day, multi-tab attention, whether they re-read the scenario, device-of-play. The cube has an analogous gap on the design side. Address during question 4.
OQ-4 — multiplayer as overlay vs. sub-values. Multiplayer-specific items (C8, C9, C10, E8) sprinkle across the layers. Cleaner to have a "multiplayer overlay" tag like cube tagging conventions, vs. proliferating values. Address during question 5. Resolved Q5 2026-05-31.
SS-1 — Sample-size handling at aggregation. Resolved Swing 11 (2026-05-31): promoted to tagging convention 6 (sample-size annotation). Three confirming swings (1, 9, 11) met promotion threshold. See methodology principles for the convention. Per-primitive confidence thresholds and exposure-layer N propagation are downstream implementation work, not schema decisions.
OQ-staleness — measured-outcome staleness profiles. Resolved 2026-05-31: promoted to Convention 7 (staleness annotation). Promotion criteria met: PU + NS + D17/D18 confirmations. Direction asymmetry sub-rule from D19 incorporated. Three reliability dimensions complete: Convention 6 (sample size) + Convention 7 (staleness) + SPOF dependency graph (signal quality).
OQ-within-session-stratification — within-session-position granularity (added Decomposition 32, 2026-05-31). Player AFL's within-session learning pattern (accuracy climbing from 50% early to 80% late in a multi session) isn't directly surfaced by A10 (per-campaign granularity). Could be Q4e candidate in Parked Q4 family — session-position stratification of aggregations. Currently low priority: no clear product motivation; within-session learning isn't prominently in ADRs. Promote if (a) ADR-024's learning-rate signal becomes more visible product surface OR (b) playtest data shows within-session warmup/fatigue patterns matter for trust calibration.
OQ-5 — Cross-flag to cube: domain expertise / technical-confidence as substrate axis. Resolved cube-side 2026-05-31. Cube added cube-C2 (expertise-requirement, values: low / moderate / high / expert-only) as a content-layer axis parallel to cube-C1 cost categories. Not a structural axis 13 — expertise-requirement is more surface than shape (vocabulary, conceptual framework, framing — not structural decision shape). Cube's reasoning: opens parallel positioning as "knowledge layer" alongside ADR-074's judgment-layer thesis; cross-domain experiment confound resolves cleanly by stratifying Phase 3 by cube-C2 estimates. Schema-side consequences: (1) M3 anchored to cube-C2 (updated above); (2) Parked Q4 (cube-axis stratification) now covers cube-C2 the same way it covers structural axes; (3) no new schema primitives needed — gap closes at cube content-layer. Open follow-on: Phase 3 cross-domain experiment analysis needs to tag the 10 existing scenarios with cube-C2 estimates before running comparisons (cube-conversation flagged the α-low vs. γ-high skew as a covariate to control or carry as known limitation).
Parked questions — externally-gated (revisit when trigger fires)¶
Pulled out of the primitive set proper. Mirroring the cube's discipline.
- Per-driver / per-trigger conditional aggregation buckets — ADR-057 Phase B. Trigger: production observation that Phase A's reaction-text integration fails to close domain-conditioning gaps. Status: Phase A shipped 2026-05-15 at "4 of 5 visibly sharper"; Phase B remains gated.
- Per-category sync scores — ADR-070. Trigger: ADR-070's three blocking questions resolve (category axis, display-vs-specialization, light-paper alignment). Currently all three open.
- Sync score decay (formerly A11 / A12 in v0 draft; numbers reused for agent-side aggregations added in Swing 10) — ADR-051 retune; memory: not deployed. Trigger: ADR-050 permission tiers ship OR active-player base grows enough that current play volumes make decay meaningful. Note: even when deployed, decay impact at current scale would be negligible for months. When implemented, will need new aggregation numbers (A14+ — the old A11/A12 slots now belong to A_why_rate and A_feedback_engagement).
- Stratification of aggregations — Split into four sub-tasks 2026-05-31 (Swing 12) with distinct trigger conditions:
- Q4a — Mode-stratification. Ship now. Mode tag already established per Q5. Stratify A9 calibration, A7 signal JSONB, and other aggregations where mode-mattering is established (Swing 9 finding). No substrate gate.
- Q4b — Category-stratification (extended). A4 category_patterns already stratifies by content category; extend A9 and other aggregations to also stratify by category. No substrate gate.
- Q4c — Cube-axis-stratification (structural axes 1–12). Substrate-gated on cube going live in generator v1.9.0+ or curated multiplayer corpus tagged with cube vectors. Cube cross-check identified axes 3, 4, 7, 8, 10, 12 as needing this. Axis-priority guideline added Swing 16 (2026-05-31): prioritize stratification by axes where conditional-mattering is empirically established — axis 11 (stakes magnitude, per experiment finding); axis 2 (decision deadline, per Swing 5 hypothesis); axis 8 (information topology, per project memory
[[project-it-depends-traces-to-information-topology]]). Other axes pool by default. Interacts with convention 6 (sample-size annotation) — full-axis stratification produces mostly-empty cells at typical play volumes (CoachJ has 83 games; 12 axes × multiple values = hundreds of potential cells). Partial stratification + sample-size annotation handle this together. - Q4d — Cube-C-axis stratification (content axes C1, C2). Substrate-gated. cube-C1 (cost categories) and cube-C2 (expertise-requirement, added for OQ-5) stratify same way. Trigger structure clarified Swing 12 repeat (2026-05-31): Q4d fires when EITHER (a) cube generator ships cube-C2 tagging (substrate work, cube doc owned), OR (b) curated corpus gets manual cube-C2 tagging (substrate work, possibly schema-adjacent). Cross-doc handoff note: Q4d implementation depends on substrate-tagging quality — see substrate-side SPOF parallel in central-extraction architectural finding.
Q4a + Q4b can ship without substrate work. Q4c + Q4d wait for cube. Decoupling reflects that the parked question covers two distinct categories of stratification with different readiness. Most load-bearing parked question — referenced by cube cross-check, OQ-5 resolution, Swing 9, Swing 12. 5. Agent-side capture parity with game-side capture — game-side has C1–C10 (choice, rationale, conviction, timing, reaction, note, peer-prediction, predictor-confidence, post-discussion action). Agent-side has C11–C13 (read event, why-requested, response feedback). Thin by comparison. ADR-074's multi-domain thesis implies agent-side capture eventually needs depth equivalent to game-side. Trigger: ADR-039 (decision capture from non-game contexts) moves from Proposed to Accepted. When triggered, candidates likely include: agent recommendation text captured durably, user-action-after-recommendation captured, recommendation-vs-action match captured (the agent-side analog of E_sync_match). Categorical distinction (Swing 10 repeat, 2026-05-31): Q5 is a different category of gap from principle 7 territory. Principle 7 = existing captures not consumed well at downstream layers (consumer discipline; schema architecture sound). Q5 = MISSING captures that would enable new measurements (schema architecture has a real gap). Swing 10 partially addressed Q5 by adding aggregations on EXISTING captures (A11–A13); the remaining Q5 work is genuinely new captures.
Submerged candidates (rejected from primitive set)¶
Logged so we don't re-litigate them.
| Candidate | Why submerged | Where it lives instead |
|---|---|---|
| Scenario tagging vector as capture primitive | Different actor (scenario author/generator), different lifecycle. Cube already owns it. | Substrate (cube doc), referenced by measurement schema |
| AI twin prediction / rule-engine prediction as capture | System-computed, not player-authored. Live on the row but functionally extraction. | Write-time extractions (E_ai_pred, E_rule_pred) |
| Attestation / commitment hash as measurement primitive | Doesn't measure anything about the player; proves prediction-before-reveal. Infrastructure, not measurement. | Infrastructure (not in schema) |
| Agent response itself as schema primitive | Produced by the agent, not Pulse. Sits between exposure and capture but not authored by either layer. | Agent's scope (not in measurement schema) |
| Sync dimensions Consistency / Information as exposure | ADR-045 demoted as vanity-without-direction; still computed but no exposure surface. | Read-time extraction with no exposure (may submerge entirely if nothing references downstream — pending question 4 decision) |
Falsification conditions for the schema as a whole¶
The schema is wrong if:
- Two player profiles with identical schema decompositions feel meaningfully different. → Missing primitive.
- A recurring measurement can't slot into any layer. → Layer cut wrong or missing layer.
- A new signal type emerges from corpus (especially multi-domain) that requires a new primitive class. → Schema didn't anticipate the domain.
Decision log¶
2026-05-31 (this conversation)
- v0 primitive list proposed across five layers.
- Q1 resolved. Keep capture and extraction as separate layers. Introduce write-time vs. read-time sub-distinction inside extraction. Rationale: update semantics, historical vs. current views, debugging triage.
- Q2 resolved. Scenario tagging is substrate, not capture (Option C). The cube owns it; measurement schema references it. Drop C16 from capture; add E_chosen_driver and E_chosen_trigger as write-time extractions derived from C1 × substrate; add substrate-references section.
- Q1 follow-on. AI twin prediction and rule-engine prediction reclassified from capture (v0 C8, C9) to write-time extraction (E_ai_pred, E_rule_pred). Implication of Q1's sub-distinction.
- Q3 resolved. Deferred primitives go to parked questions, not reserved aggregation slots. Mirrors cube discipline. Parked: A13 (per-driver buckets, ADR-057 Phase B); A14 (per-category sync scores, ADR-070); decay primitives (A11/A12).
- Open questions added. OQ-1 (sync_score vs. profile-quality), OQ-2 (NoTA forced closest-match). Both are schema-exercise questions to address during swings, not externally-gated.
- Methodology principle added. Assumption audit (principle 5) — for each primitive, surface implicit assumptions about player preference structure. Emerged from OQ-1 + OQ-2 sharing the same pattern.
- Q4 resolved. Capture-gap question split into three categories. Category A (capturable, not captured) → added "Capture gaps — candidates for promotion" section to layer 1 with three candidates (rationale_edit_trace, option_tap_trace, attention_state) and three submerged (hover, scroll, re-views). Category B (intrinsically uncapturable context) → added M9 (play-time context bleed) to measured outcomes; mirrors M1 identity load. Category C (already captured, under-extracted) → added "Read-time extraction candidates" sub-section to layer 2 with three candidates (E_tod_calibration, E_session_fatigue, E_device_signature). None of the six candidates auto-promoted; gated on swings.
- Q5 resolved. Multiplayer handled via overlay tagging, not duplication and not proliferation (Option C). Added "Tagging conventions" section. Mode tag (
solo/multi/both, defaultboth) on all primitives; tagged exceptions inline (C7, C8, C9, C10, E8, E18, A2 Readability). Added scope tag for aggregation primitives (per-game/per-player-lifetime/per-domain/per-group/per-campaign, defaultper-player-lifetime). Added "Per-group aggregation candidates" subsection with four candidates (A_group_sync, A_group_consensus, A_dyadic_readability, A_group_drivers); not promoted. - Cube ↔ schema cross-check run. Methodology principle 3 executed as the bridge from structural enumeration to swing mode. 13 axes covered (12 structural + C1). Headline finding: ~7 axes lack dedicated measurement, but this is by design — schema uses general-purpose extractions that fire regardless of substrate. The real gap is at aggregation stratification (A4–A10 stratify by category/trigger, not by cube-axis values). No new primitives added; one aggregation-extension parked (Parked Q4: cube-axis stratification, gated on cube going live in substrate).
- Agent-side capture parity flagged. Added Parked Q5: agent-side capture parity with game-side capture, gated on ADR-039 status.
Structural enumeration pass closed. v0 primitive list across four causal layers + measured outcomes + substrate references + tagging conventions + methodology principles + falsification conditions + parked / submerged / open lists + cube cross-check finding. Ready to begin swing-mode iteration.
- Swing 1 run. Same-profile pair with different pragmatic-routing rates. Schema discriminates at extraction and most aggregations; collapses at A1 + X1. OQ-1 partially resolved: gap confirmed, located at A1 sample-size variability + X1 headline collapse. Three candidate closures logged, none promoted. A1 row annotated with variable-density caveat.
- OQ-5 cross-flagged to cube. Domain expertise / technical-confidence as substrate axis. Schema can detect confidence variance (E20 + E7 + M3); identifying expertise-requirement belongs cube-side. M3 row expanded to include technical sub-patterns. CoachJ taking to cube conversation; prompt drafted in conversation transcript.
- Swing 2 run. NoTA forced closest-match. Schema discriminates at C2/E13; contaminates at A4 via fabricated E_chosen_driver on forced-closest. Worse than Swing 1 — A4 doesn't just thin; it carries wrong signal. Three closures logged. OQ-2 confirmed, deferred to product decision paired with OQ-1. Swing 1's "A4 thins silently" framing amended.
- OQ-5 resolved cube-side. Cube added cube-C2 (expertise-requirement) as content-layer axis (parallel to cube-C1 cost categories). Schema-side updates: M3 anchored to cube-C2; Parked Q4 scope expanded to include cube content-layer axes; naming-disambiguation note added to Substrate references section. Phase 3 cross-domain experiment analysis carries the cube-C2 stratification follow-on. No new schema primitives needed.
- Swing 3 run. Hedging vs. decisive rationale, same reasoning. Schema discriminates but interpretation is dual-valenced — same signal pattern reads as inauthenticity OR epistemic humility depending on framing. E10 and E14 rows annotated with dual-interpretation warnings; rename candidates noted. Three closures logged (A: normalize verbal-style in E_classify_driver prompt; B: dedicated E_hedging_index; C: rename E10/E14 valuation-neutral). Probably A+C together.
- Swing 4 run. Calibration × persuadability four-quadrant. Architecture validated — schema discriminates all four players independently via E5 and E7; combinational interpretation correctly lives at X5 prose exposure, no derived primitive needed. First clean validation finding. Sub-finding: E7 mode-multi means solo-only players have null persuadability; downstream may misread null as low. E7 row annotated; Closure B (exposure-layer guard) promoted. Meta-pattern across all four swings added to provisional/under-question: structured-capture vs. rationale-text dual-path divergence.
- Two-audience methodology principle added (6). Strategic clarification: agent-MCP clients (Hermes, Claude Code, Cursor, OpenClaw — niche early adopters) vs. paste-based clients (ChatGPT, regular Claude.ai — mainstream adoption path). Static text exposure (X5) carries higher interpretive load. X5/X6/X7 rows annotated. E7, E10, E14 dual-interpretation flags amplified for paste users (frozen text can't disambiguate).
- Swing 5 run. Fast-snap vs. slow-deliberated experts at same calibration. Architecture validated (second consecutive). Schema discriminates via E6 timing + E_classify_driver reasoning_mode independently; X5 prose synthesizes cognitive style. Sub-finding: attention_state capture-gap candidate promoted from "deferred" to "load-bearing for E6 slow-regime trustworthiness" — schema currently can't distinguish deliberating-slow from distracted-slow. Meta-pattern absent for first time — structured (C4) and rationale (C2 length) agreed; hypothesis emerging that dual-path divergence is specific to text-content interpretation swings.
- Swing 6 run. Milestone self-prediction × in-moment calibration. Architecture validated (third consecutive). Schema discriminates Players K and L via independent E18 and E5; meta-cognitive trustworthiness frame correctly held at X5 prose. New architectural under-question opened: central-extraction single-points-of-failure — E_classify_driver feeds ~40% of downstream primitives; contamination (Swing 3) propagates into E18. E18 row annotated with null-risk + E_classify_driver-dependency. Meta-pattern absent again (second consecutive).
- Swing 7 run. Occasion noise vs. reasoned variation. First concrete algorithm refinement. E12 as currently specified conflates pure noise with reasoned variation; closure A promoted (rationale-controlled algorithm refinement). E12 row annotated. Meta-pattern reappears in modified form — hypothesis refined: dual-path divergence appears when extraction needs to distinguish similar-content from different-content patterns, not just when it interprets rationale meaning.
- Swing 8 run. Reaction-note divergence. Second consecutive concrete algorithm refinement. A8 (resonance_stats) counts C5 enum without checking C6 note semantics; closure A promoted (refine algorithm to classify note semantics). A8 row annotated. Meta-pattern reinforced (5 of 8 swings); flagged as approaching promotability — candidate principle: "any aggregation/extraction that consumes a structured capture should check whether a co-captured rationale text contradicts the structured signal." Hold 1–2 more swings to confirm.
- Swing 9 run. Solo vs. multi regime in same player. Mode tagged at capture/extraction but aggregations pool across modes — Player S's regime shift collapses at A9. Parked Q4 scope expanded to include mode-stratification (doesn't depend on cube going live). New under-question SS-1 opened: sample-size handling at aggregation (recurring across Swings 1 and 9). Meta-pattern absent — promotion delayed to Swing 10–11 confirmation.
- Swing 10 run. Trust state variations (M5). First swing to propose new primitives. Agent-side capture (C11–C13) had no extractions or aggregations in v0 — all other captures have downstream chains. Closure A promoted: three new aggregations A11 (A_why_rate), A12 (A_feedback_engagement), A13 (A_feedback_positivity) added to v0. M5 row updated to reference them. A_feedback_positivity built to classify C13 free-text alongside rating, inheriting Swing 8 lesson. Architectural lesson on measured-outcomes-needing-aggregation-scaffolding logged. Meta-pattern back on (6 of 10) — promotion flag re-armed.
- Swing 11 run. Sparse (N=5) vs. rich (N=50) data. SS-1 promoted from under-question to tagging convention 6 (sample-size annotation). Met 3-swing promotion threshold (1, 9, 11). Every aggregation primitive now requires explicit N annotation; exposure surfaces below threshold as "tentative." Sub-finding: minimum-viable-profile experiment was previously un-instrumented; convention 6 is the prerequisite. Meta-pattern absent (sample-size, not text-interpretation). Documentation update pending across aggregations.
- Swing 12 run. Domain-uniform vs. domain-asymmetric (M3 + cube-C2 stress test). Fourth validation finding + structural reinforcement. Schema's conceptual model correct (E7 domain-conditional, M3 anchored to cube-C2 via OQ-5). Implementation gap at aggregation stratification — same pattern as Swing 9 (mode). Parked Q4 refined into four sub-tasks (Q4a mode, Q4b category-extended, Q4c cube structural, Q4d cube content). Q4a + Q4b ship without substrate work. Aggregation under-stratification confirmed as dominant gap across cube cross-check + Swings 9, 12. Meta-pattern absent. M-series scaffolding audit reinforced (M3 same gap as M5 had pre-Swing 10).
- Swing 13 run. M9 context-bleed + M-series audit. Two new primitives: E22 (E_context_bleed, read-time extraction classifying C2 + C6 for real-world-parallel mentions) and A14 (A_context_bleed_rate, aggregation). M9 now scaffolded — closes the last unscaffolded M-series outcome. Audit findings: M4/M5 scaffolded; M1/M6/M7 partial via A7 (acceptable); M2/M3/M8 substrate-gated (Q4); M9 was only swing-actionable gap. M-series consistency principle established. Meta-pattern at 7 of 13 — one more from promotion.
- Swing 14 run. Per-group aggregation discrimination (parked Q5 stress test). Validation + framing refinement. Schema correctly lacks group-level aggregation primitives; parked Q5 architecturally validated. Sub-finding: two of four Q5 candidates are scope-variants of existing primitives (Q4 mechanism), two require new primitive shapes (A_group_consensus distribution, A_dyadic_readability matrix). Updated Q5 table with shape annotation. Discipline holding: add when load-bearing, park when speculative. Meta-pattern absent.
- Swing 15 run. Capture-gap candidates load-bearing test. attention_state and option_tap_trace promoted from "deferred candidate" to "ready for promotion when eng happens"; rationale_edit_trace demoted as marginal. Multi-swing closures: attention_state (Swings 5 + 15); option_tap_trace closes Swing 4's E7 solo-mode null via structured path. Meta-pattern broadened from "structured-vs-rationale-text" to "final-state-vs-process": edit trace vs. final C2, tap sequence vs. final C1, attention state vs. C4 are all instances. Promotion held one more swing for broader framing confirmation.
- Swing 16 run. Q4c substrate stratification readiness check. Fifth validation. Architecture supports cube-axis stratification cleanly; no new primitives needed. Sub-finding: sample-size scaling problem — full stratification produces mostly-empty cells at typical play volumes. Q4c needs axis-priority guideline added: prioritize axis 11, cube-C2, axis 2 first; pool others by default. Convention 6 × Q4c interaction documented (sample-size annotation handles tentative cells). Meta-pattern absent. Original swing queue closed.
- Swing 1 repeat run. Pragmatic router (OQ-1) against updated schema. Convergence-positive. Two mitigations identified that weren't visible originally: (1) Convention 6 surfaces A1 variable-density via N annotation; (2) M7 (frame-restructuring tendency, M-series audit Swing 13) routes around A4 dependence — agent surface can describe pragmatic-routers correctly via M7 language. OQ-1 still open at A1+X1 specifically (product decision deferred). Meta-pattern promoted to methodology principle 7. Schema internally consistent under refinement.
- Swing 2 repeat run. NoTA forced closest-match (OQ-2) against updated schema. Convergence-positive. Principle 7 makes Closure C (rationale-text override of E_chosen_driver) canonical — OQ-2's closure direction now unambiguous. New cross-swing dependency: Closure C depends on Swing 3 Closure A (verbal-style normalization in E_classify_driver) for reliability; sequencing matters. Synthesis finding: schema architecture is sound; gaps cluster at consumer discipline (aggregations and exposures dropping co-captured signal). Header-level finding for eventual canonical doc.
- Swing 8 repeat run. Reaction-note divergence (A8 contamination) against updated schema. Convergence-positive. A8 still uncontained but Closure A now principle-aligned. Forward-applied lesson pattern: A13 (Swing 10) and E22 (Swing 13) built to classify free-text from start — inherited Swing 8's lesson before principle 7 had a name. Blast-radius finding: A8 contamination is bounded (X3 not in ADR-065 surfaced set; M-series doesn't depend on A8). Reduces urgency. Synthesis finding reinforced: closures across Swings 1, 2, 7, 8, 10, 13 are all principle 7 instances.
- Swing 10 repeat run. Agent-side capture / M5 scaffolding against updated schema. Convergence-positive. A11/A12/A13 row annotations updated for Convention 6 compliance (alignment work, not structural). Q5 categorical distinction surfaced: Q5 is a different category of gap from principle 7 territory — Q5 = missing captures (real architectural gap), principle 7 = consumer discipline (schema architecture sound). Updated Q5 entry with this distinction. New under-question OQ-staleness: measured outcomes have different staleness profiles for paste-based users — pattern outcomes durable, state outcomes (M5) time-sensitive. Static text needs "as of [date]" annotation.
- Swing 3 repeat run. Hedging vs. decisive rationale against updated schema. Convergence-positive. Closure A priority elevated by cross-swing dependency on OQ-2 (Swing 2 repeat finding reinforced). Closure B confirmed unneeded — new primitives already named valuation-neutrally (forward-applied naming discipline). Three-category gap synthesis surfaced: (1) architectural (Q5 missing captures), (2) aggregation (Convention 6 + Parked Q4), (3) exposure (Principle 7 + Swing 3 naming). Each category has a different closure shape. Promotable as header-level architectural claim for canonical doc.
- Swing 13 repeat run. M-series audit against three-category synthesis. Convergence-positive. All 9 M-outcomes map cleanly: M1/M6/M7 exposure (principle 7); M2/M8 aggregation (Q4); M9 scaffolded (E22+A14); M3/M4/M5 layered gaps (multiple categories simultaneously). Layered-gaps refinement to synthesis: gap categories are kinds, not bins; primitives can need closures at multiple categories simultaneously. No M-series outcome falls into architectural-gap territory — validates Q5 as the only architecture-needing-new-structure parked question. OQ-staleness scope bounded to M4+M5. E22/A14 don't need staleness retrofit (pattern-shaped). Audit's pre-principle-7 verdict aligns with principle 7 framework.
- Swing 4 repeat run. Calibration × persuadability four-quadrant against updated schema. Convergence-positive. Architecture validation holds; categorized as exposure-discipline closure under three-category synthesis. Multi-swing closure path documented: Swing 4 E7 mode constraint → Swing 15 option_tap_trace promotion → E7 mode relaxation when eng ships. Principle 7 generalized to prose synthesis layers (X5, X11) — prose synthesis consumes structured aggregates + rationale text. 11 of 16 swings + 5 repeats confirm pattern across three framings. E7 + X5 rows annotated.
- Swing 6 repeat run. Central-extraction SPOF concern against updated schema. Convergence-positive with substantive promotion. Central-extraction SPOF under-question promoted to architectural finding (5+ swing confirmations met threshold). Dependencies expanded across Swings 7, 8, 10, 13. Tension between principle 7 and SPOF concern named: principle 7 closures compound E_classify_driver dependency; each closure adds another classifier consumer. Closure A promoted (document dependency graph explicitly); B and C deferred. Sub-finding: three-category synthesis may need extraction-layer extension to cover SPOF concerns (flagged, not pushed).
- Swing 12 repeat run. Domain-uniform vs. domain-asymmetric against updated schema. Convergence-positive. Q4a-d structure confirmed clean under three-category synthesis. Substrate-side SPOF parallel surfaced: the tagger of cube axes (cube-C2 and structural axes if implemented) is a high-leverage point — mis-tagged substrate propagates through every Q4c/Q4d-stratified primitive. Cube-doc territory; cross-doc handoff. Q4d trigger structure clarified with explicit two-path firing. OQ-5 resolution stays valid. M3 layered-gap framing stable.
- Swing 11 repeat run. Convention 6 against updated schema. Convergence-positive. Convention 6 spans aggregation + exposure categories — itself a layered closure. Convention 6 refined with prose-synthesis sub-rule: when X5 generates prose referencing an aggregation, surface N or tentativeness when below threshold. Composition with OQ-staleness made explicit for M4/M5: state-sensitive outcomes need both N AND "as of [date]" annotation in static text. Convention 6 + SPOF cover two complementary reliability dimensions (sample-size + signal-quality). No new convention needed. Refinement to synthesis framing: conventions span categories; closures aren't required to fit a single bin.
- Swing 5 repeat run. Fast vs. slow conviction against updated schema. Convergence-positive but less substantive than last three repeats. Multi-swing closure path documented: Swing 5 → Swing 15 → E6 slow-regime resolution when attention_state ships. Parallel to Swing 4 → Swing 15 → E7 closure. Swing 15 emerges as architecturally load-bearing — closes sub-findings across multiple validations. E6 prose-synthesis annotation added per principle 7 generalization. Validation-finding closure pattern firms up (all validations point at exposure-discipline closures).
- Swing 7 repeat run. Occasion noise (E12) against updated schema. Convergence-positive but cross-reference work. E12 closure stays canonical under principle 7. E12 SPOF dependency annotated as canonical entry for dependency-graph closure. No forward-applied propagation (no new primitive had E12's specific shape). Less substantive than recent repeats; pace likely converging.
- Swing 9 repeat run. Solo vs. multi regime against updated schema. Convergence-positive; late convergence threshold met. Two multi-swing closure paths confirmed for Swing 9 findings (Q4a + Convention 6). 3-stage closure-path pattern surfaced: schema exercise consistently produces gap → closure-naming → external implementation. Schema's job is Stages 1+2. 5 paths now documented. Swing 15 architectural significance reinforced (2 of 5 paths). Third consecutive refinement-only repeat.
- Swing 14 repeat run. Per-group aggregation discrimination against updated schema. Convergence-positive but pure documentation work. Parking decision holds. Per-group candidates categorize cleanly under synthesis (2 aggregation-gap, 2 architectural-gap). Existing reliability framework covers per-group when promoted. No new architectural findings. Fourth consecutive refinement-only repeat (Swings 5, 7, 9, 14).
- Swing 15 repeat run. Capture-gap candidates against updated schema. Convergence-positive; pure stability check. All Swing 15 outputs stable. Meta-pattern broadening fully captured in principle 7. Sub-finding: architectural-gap category has two sub-types (Q5 missing-surface vs. Swing 15 missing-process-capture). No substantive findings. Fifth consecutive refinement-only repeat.
- Swing 16 repeat run. Q4c substrate stratification readiness against updated schema. Convergence-positive; pure stability check. All Swing 16 outputs stable and integrated into subsequent synthesis. No substantive findings. Sixth consecutive refinement-only repeat.
CONVERGENCE THRESHOLD MET (2026-05-31). 16 swings + 16 repeats. Six consecutive refinement-only repeats (Swings 5, 7, 9, 14, 15, 16) meet user's "no insights or changes" convergence criterion. Substantive promotions stopped after Swing 11 repeat (Convention 6 refinement). Header-level architectural claims stable across last 6 repeats. Multi-swing closure paths stable at 5. v0 primitive list stable since Swing 13. Methodology principles stable at 7. Tagging conventions stable at 6. Three-category synthesis with layered-gaps + spanning-closures refinements stable. Central-extraction SPOF + tension with principle 7 + substrate-side parallel stable.
Next phase: decomposition pass — apply schema to N real player profiles (CoachJ first, as most-resolved data). The cube's analog was 29 corpus decompositions after the swing pass. Per user direction on sequential-vs-parallel, decompositions can parallelize across player profiles since each is independent.
Open later: continue swinging; decomposition of 5–10 player histories starting with CoachJ; promotion decisions on Q4/Q5 candidates; downstream product conversation to pick OQ-1 + OQ-2 closures together; Phase 3 cross-domain analysis with cube-C2 stratification.
What this doc is NOT yet¶
- Not the committed deliverable (
measurement-schema.md) — that gets written when the schema has survived multiple swings, decompositions, and a re-audit pass. Per the cube's lesson. - Not a complete enumeration — the v0 list is the starting point for swings, not an audit conclusion.
- Not a falsification protocol — the falsification conditions above are necessary triggers, not full experimental designs.
- Not an audit of
player_decision_profilescolumns vs. schema primitives — that's a separate effort (likely a follow-up after promotion).