### offline_trainig ```{eval-rst} .. plantuml:: @startuml skinparam shadowing false skinparam componentStyle rectangle title Offline Training Pipeline with AlgoX2 Integration top to bottom direction rectangle "Producers" as P rectangle "X2 Gateway" as GW rectangle "X2 Sequencer" as SQ rectangle "X2 Storage" as ST rectangle "X2 Materializer\n(Iceberg Writer)" as MAT database "S3 / MinIO\nIceberg Tables" as S3 rectangle "Tracto Workflow" as WF rectangle "Spark / SPYT Job" as SP P -down-> GW : Events GW -down-> SQ : Append SQ -down-> ST : Commit Journal ST -down-> MAT : Notify (new data/window) MAT -down-> S3 : Write Iceberg snapshot/manifest MAT -down-> WF : Emit control record / webhook (dt=READY) WF -down-> SP : Launch training job (params: table path, dt) SP -down-> S3 : Read Iceberg snapshot SP -down-> SP : Train/eval → Model artifacts @enduml