- 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>
Lifts ControlUnit, UnitRuntime/State, ControlRuntimeStore and unit CRUD
into app_feeder_distributor; their feeder-specific semantics
(DistributorRunning state, run_time/stop_time/acc_time/bl_time pacing)
violated the shared-core invariant.
WsMessage drops the UnitRuntimeChanged variant in favor of a generic
AppEvent(AppWsEvent) carrying {app, event_type, data}. Feeder emits
"feeder"/"unit_runtime_changed"; the web client dispatches by app
namespace, leaving core free of business types. The equipment handler
keeps its friendly unit-exists check by issuing an inline EXISTS query
instead of pulling the unit service.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The web/core, web/feeder, and web/ops directories were mistakenly
committed as deletions. Restore from f8757a7.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Clean up old web module files that were superseded by the per-app
split architecture. Includes plan documentation for the migration.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>