STEP 1536 — benchtop-mcp Signal/Device 2 層化 spec
要旨
benchtop-mcp (現状 v0.9、 27 tool) の hardware verdict emit を、 tool 毎の ad-hoc 実装から bluesky/ophyd-async (BSD-3-Clause) 準拠の Signal/Device 2 層 architecture に refactor する design spec。 STEP 1567 disk_health_verdict の ZERO no_data pattern を 全 27 tool 拡張 + backend polymorphism (mock ⇄ real ⇄ replay) + protocol typing で connector catalog (STEP 1556) 裏付け。
2 層 architecture
| Layer | Role | Quality range |
|---|---|---|
| Layer 1 Signal | 最小読取単位 (per-value + quality 4 subset) | {TRUE, NEITHER, INFINITY, ZERO} (Tango 準拠 subset) |
| Layer 2 Device | Signal aggregation → D-FUMT₈ 8 値 verdict emit | full 8 値 (BOTH / FLOWING / SELF 含む) |
quality の 4 subset は STEP 1573 (Tango 5 → D-FUMT₈ 8 mapping) から derive: TRUE = ATTR_VALID / NEITHER = ATTR_INVALID / INFINITY = 測定限界超過 / ZERO = NotConnectedError (STEP 1567 no_data pattern 全 tool 拡張)。
Backend polymorphism
mock= test / development (deterministic value)benchtop_uart= production (実 benchtop UART hardware)ni_daq= NI DAQmx bridge (別 STEP 実装)fake_generator= fuzz test 用 random valuereplay= 過去 measurement session の 再現 (session_id 指定)
実 refactor 順序 (別 STEP allocation)
- Phase 1:
src/mcp/signal.ts+src/mcp/device.tsinterface 追加 (backward compat) - Phase 2: 1 tool pilot (recommend: STEP 1567 disk_health_verdict = 既に ZERO no_data pattern 実装済で 移行 cost 最小)
- Phase 3: 残 26 tool 順次 migration
- Phase 4: SafetyGate integration (別 tab STEP 1584 dispatch layer と 直交統合)
Phase 1 pilot は STEP 1593 で 完了 (rei-aios 側で signal-device.ts + disk-health adapter + test 32/32、 backward compat 完全維持)。 benchtop-mcp 別 repo への 移植 は 別 STEP defer。
Honest scope
- spec-only: 本 doc は 実装 code touch なし、 benchtop-mcp repo (別 repo) の code 変更 は 別 STEP allocation
- 別 tab STEP 1571 no-data-primitives 未認識で 起草: 本 spec は 起草時 (STEP 1536) 別 tab STEP 1571 (a) `no-data-primitives.ts` (Ophyd NotConnectedError 2-layer distinction) 未認識、 STEP 1593 pilot で 認識 + 補完
- 別 tab design-import arc (EPICS/QCoDeS/SiLA 2 の 3 primitive) との調整 = Ophyd 系統は 別 tab の 「arc 3/3」 に 該当する可能性、 藤本さん judgment 待ち
- breaking change あり: 全 27 tool refactor は API surface 変更、 SAC-4 informed decision 必要
- backend polymorphism 実装 (実 hardware backend) は 別 STEP、 本 spec は interface + mock backend まで
Related
docs/BENCHTOP_SIGNAL_DEVICE_2_LAYER_SPEC.md— 詳細 spec (~245 行)- STEP 1593 — Signal/Device 2 層化 Phase 1 pilot (本 spec の 実装 pilot、 collision zero)
- STEP 1573 — Tango 5 → Rei D-FUMT₈ 8 mapping (Signal quality 4 subset の semantic 由来)
- STEP 1567 — disk_health_verdict (ZERO no_data pattern initial deployment)
- STEP 1569 — Design Imports Register (別 tab、 top 3 (a) 提案 の source)
- bluesky/ophyd-async: BSD-3-Clause、 NSLS-II 発、 Signal/Device 参照実装