Reads STATE_PeerTrust trajectories and produces per-session relational pattern aggregates: per-peer trust trajectories, pattern classifications, session-level differentiation measures, and an insider-aware breakdown that surfaces whether participants ended with lower trust for the actual insider.
trustTrajectory via PM_Phase's phase-boundary snapshots.
Phase 1 trust state is captured when transitioning to Phase 2; sessions that abort in mid-P1
produce zero trajectory snapshots and report all peers as insufficient_data.
Resolution is at M31 GM_Game integration time \u2014 either PM_Phase snapshots P1 at session
start, or M31 calls SPT.snapshotPhase(1) explicitly. Workbench scenarios below
snapshot P1 explicitly to expose realistic trajectories.
| # | Assertion | Result | Detail |
|---|
Drive scenarios on the left; the per-peer view, trajectory chart, and insider-aware panel update after each action. The insider's line is drawn thicker and tagged in oxblood across the visualisations.
| Field | Type | Description |
|---|---|---|
| Provenance | ||
| dynamicsVersion | string | Schema version (1.0) |
| computedAt | ISO 8601 UTC | When the aggregate was generated |
| thresholdsApplied | object | Pattern classification thresholds in effect |
| thresholdsAreDraft | boolean | TRUE if thresholds are still draft (pre-pilot) |
| Per-peer aggregates | ||
| finalScores | object | {arthur, liam, sarah, dave} \u2014 trust score per peer |
| trajectories | object | {peerId: [{phase, trust, suspicion}, ...]} \u2014 verbatim from STATE_PeerTrust |
| patterns | object | {peerId: pattern} \u2014 categorical classification per peer |
| Session-level differentiation | ||
| sessionLevel.trustMean | number | null | Arithmetic mean of final scores |
| sessionLevel.trustVariance | number | null | Population variance \u2014 high = differentiated treatment |
| sessionLevel.trustRange | number | null | Max \u2212 min final scores |
| sessionLevel.n | number | Count of peers with valid final scores |
| Insider-aware breakdown (RQ3 quantitative) | ||
| insiderRelation.insider | string | peerId of assigned insider |
| insiderRelation.insiderFinal | number | Final trust score for the insider |
| insiderRelation.insiderPattern | string | Pattern classification for insider |
| insiderRelation.nonInsiderPatterns | object | Patterns for the three non-insiders |
| insiderRelation.nonInsiderMeanFinal | number | Mean final trust across non-insiders |
| insiderRelation.insiderDelta | number | insiderFinal \u2212 nonInsiderMeanFinal. Negative = correct suspicion. |
| Pattern taxonomy (DRAFT \u2014 ADR-072) | ||
| stable_high | category | All points \u2265 upperThird (default 67) |
| stable_low | category | All points \u2264 lowerThird (default 33) |
| stable_neutral | category | Range \u2264 stableRange (default 10) \u2014 hovers near starting |
| rising | category | Last \u2212 first \u2265 directionDelta (default 15) |
| falling | category | First \u2212 last \u2265 directionDelta (default 15) |
| volatile | category | Range > volatileRange (default 20) without clear direction |
| insufficient_data | category | Fewer than 2 trajectory points |