flowchart TD
Launch(["LMS launches AP
with cmi5 params"]):::lms
Auth["AP fetches auth token"]:::action
Launched["AP emits launched"]:::verb
Init["AP emits initialized"]:::verb
Learn["AP emits learning statements
progressed / passed / failed /
completed / scored"]:::verb
Q{"AP closes cleanly?"}:::decision
Term["AP emits terminated"]:::verb
End(["Session ends"]):::done
Aban["LMS times out →
emits abandoned (server-side)"]:::serververb
Launch --> Auth
Auth --> Launched
Launched --> Init
Init --> Learn
Learn --> Q
Q -- Yes --> Term
Q -- No --> Aban
Term --> End
Aban --> End
click Launch call showState("Launch")
click Auth call showState("Auth")
click Launched call showState("Launched")
click Init call showState("Init")
click Learn call showState("Learn")
click Q call showState("Q")
click Term call showState("Term")
click Aban call showState("Aban")
click End call showState("End")
classDef lms fill:#1e293b,stroke:#0f172a,color:#fff,font-weight:bold
classDef action fill:#0d9488,stroke:#134e4a,color:#fff
classDef verb fill:#4338ca,stroke:#312e81,color:#fff
classDef decision fill:#ca8a04,stroke:#854d0e,color:#fff
classDef serververb fill:#dc2626,stroke:#7f1d1d,color:#fff
classDef done fill:#16a34a,stroke:#14532d,color:#fff
linkStyle default stroke:#64748b,stroke-width:2px