- Move shared platform JS (source/point/equipment/chart/events/...) from
web/feeder/js to web/core/js/platform; both apps load it via the ServeDir
core fallback (subdir avoids shadowing ops' own api.js/dom.js).
- Add platform-config.js and log-stream.js as shared modules; feeder app.js
and logs.js now delegate instead of inlining (no duplication).
- ops: add 平台配置 tab reusing the shared panels; rename 段/工位配置 ->
应用配置; move tabs into the topbar like feeder.
- Align view layout across both apps: 系统事件 in 运行监控 (live via WS),
实时日志 in 平台配置.
- Titles: 投煤控制系统 / 隧道窑运转系统; feeder 运维 tab -> 运行监控.
- Update README; add CLAUDE.md documenting the shared-frontend architecture.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Replaces the ops UI placeholder with a single-panel monitor: fetches
/api/runtime/overview to render one card per segment with state badge,
current step, fault / block note, and per-card Start / Stop / Ack-Fault
/ Reset buttons plus batch start/stop. WebSocket subscriber routes
app_event(app=operation-system, event_type=segment_runtime_changed)
into in-place card updates with exponential reconnect.
Note: UI not verified in-browser; the engine + WebSocket plumbing has
unit + smoke test coverage but the page itself needs runtime
validation by running app_operation_system and visiting /ui/.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>