ek-station 0.2.2

Station for the ek ecosystem: headless plugin host bootstrap - assembles ek-core MainEngine from a compile-time plugin factory table, runs the svctl supervisor service (list/start/remove over bus ask) and a headless main (readiness marker + graceful close).
Documentation
# ek-station DESIGN

设计与决策记录(docs/ek-ui-station-plan.md 的 S1a 落地面;扎钉后不放)。

## BD(边界钉)

- **BD-U1 svctl.stop ≅ svctl.remove**:ek-core 0.3.0 无"停而不摘表"导出
  (`close_one` 是私有方法,公开面只有 `close_all`/`remove_plugin`)。
  运行期下线 = remove(五步闭停 + 摘表 + `ePlugDown` 广播);重启用 start
  (宿主 `add_plugin` 在 start 后即时 `launch_one` 上线 + `ePlugUp` 广播)。
  测试 c0 全链钉死。
- **BD-U2 工厂 build 用 `Arc<dyn Fn>` 而非 `fn` 指针**:测试探针需要捕获
  共享槽;S3 参数化配置也吃这个签名。行动面不变(零参调用)。
- **BD-U3 headless 的 stdin 退出策略**:Windows 控制台无 std 信号面,
  `SetConsoleCtrlHandler` 需三方/unsafe → v1 记录:`q`/`quit` 行 = 优雅退出。
  ~~管道 EOF = 优雅退出~~ **0.1.4 文档纠错(T2 t2g 实测推翻)**:EOF 与 stdin
  不可用(detached)同归**常驻 keep-alive**——launcher 的 spawn 用 stdin=null,
  子进程起手即 EOF,EOF 若走优雅退则 launcher 协议即碎。五步闭停在 `q` 与
  窗口关闭(ek-ui 侧)路径生效;常驻进程由进程外 kill 终止。
- **BD-U4 `--from` 清单延迟校验**:行格式错即时报(exit 2),未知工厂名
  延迟到 boot 单一硬报错点(exit 1)——避免两套重名/存在性校验的重复面。
- **BD-U5 构造期身份(多账号面已改写)**:原 v1 口径"工厂名 == 插件注册名
  (dm/oms/ctp 各一实例)"**已废**。`StartReq.name` 非空 = 以该注册名建实例
  (工厂须登记 `PlugKind.build_named`;ctp 已登记,dm/oms 未登记 → 显式回拒,
  不静默退回零参构造);空 = 旧行为(工厂名即注册名,单实例零回归)。
  `StartRes.Started.name` 一律回带**插件自报的 `name()`**,不再假设工厂名。
  网关注册名由 (broker, 账号) 派生(`ek_ctp::derived_gateway_name`),
  **不进配置文件**。

## 契约面(wire.rs)

`PlugRow { name, version, state(Debug 形状), deps, spilled, panics }`;
`StartRes/RemoveRes` 用**业务回执枚举**(Started/Rejected、Removed/NoSuchName)
而非 `ReplyErr` 承载业务错 —— 回执在总线/测试里可读可断言。