flowchart TB
S1["MicroSim emits 'interacted' statements
dwell time, range covered, direction reversals"]:::src
S2["MicroSimEngagement grain
Chapter 8 summary vertex"]:::src
D{"Where does soft-correctness
get computed?"}:::decide
A1["New stream-side component"]:::a
A2["Looks up mapping in a per-MicroSim registry"]:::a
A3["Computes soft-correctness in [0,1]"]:::a
Atag["Pro: scoring logic stays server-side
Con: needs a registry every new MicroSim must be added to"]:::atag
B1["MicroSim authoring tooling"]:::b
B2["Computes soft-correctness proxy at authoring time"]:::b
B3["Embeds value in result.score on each statement"]:::b
Btag["Pro: no new pipeline component
Con: reopens a two-codebases problem"]:::btag
BKT["Feeds ConceptMastery's BKT update"]:::src
S1 --> S2 --> D
D -->|Stream-side mapping| A1 --> A2 --> A3 --> Atag --> BKT
D -->|Client-side mapping| B1 --> B2 --> B3 --> Btag --> BKT
classDef src fill:#8b9bb0,stroke:#5f6e82,color:#fff,font-size:13px
classDef decide fill:#f0d67a,stroke:#b8961f,color:#222,font-size:13px
classDef a fill:#2a9d8f,stroke:#1f7a6f,color:#fff,font-size:13px
classDef atag fill:#1a7f72,stroke:#0f5c53,color:#fff,font-size:12px
classDef b fill:#e9a23b,stroke:#b8791f,color:#222,font-size:13px
classDef btag fill:#c9822b,stroke:#8a5a1c,color:#fff,font-size:12px
linkStyle default stroke:#999,stroke-width:2px