STEP 1576 (c) — Connector Protocols
目的
STEP 1569 Ophyd 読解 top 3 の (c):
Protocol 型で connector catalog を裏付け: STEP 1556 の shape 文字列 (puzzle-verifier 等) を Movable/Readable 相当の TS interface に昇格、drift auditor (STEP 1560) を 「型不一致 = build error」 に強化
Ophyd (Bluesky) の 7 protocol (Readable / Movable / Triggerable / Configurable / Stageable / Subscribable / Flyable) と対応させて、Rei stack の 3 connector shape を型として形式化。
Ophyd 対応
| Ophyd Protocol | Rei Protocol (v0.1) | 該当 connector |
|---|---|---|
Readable (read + describe) |
共通基底 HonestScoped (source + honestScope) / Diagnosed (diagnostics) / Verdicted<V> (verdict + reason) |
— |
Movable (set → Status) |
— | |
Triggerable (trigger → Status) |
— | |
Configurable analog |
SingleVerdictConnector<T, V, ChipR> |
game-verdict-connector |
| reverse search protocol | UniquenessCheckConnector<Spec, Sol> |
puzzle-verifier |
| dual-condition search protocol | UniquenessNecessityConnector<Spec, Trace> |
mystery-reasoning-connector |
実装 (2 file + 1 audit script)
src/mcp/connector-protocols.ts — 型定義
3 protocol type + 3 report shape + 3 base trait + VERIFIER_SHAPE_TO_PROTOCOL mapping:
// Base traits
interface HonestScoped { source; honestScope }
interface Diagnosed { diagnostics }
interface Verdicted<V> { verdict: V; reason }
// Shape 1: single-verdict (game)
type SingleVerdictConnector<T, V, ChipR> =
(terminals: T) => SingleVerdictReport<T, V, ChipR>
// Shape 2: uniqueness-check (puzzle)
type UniquenessCheckConnector<Spec, Sol> =
(spec: Spec, options?) => UniquenessCheckReport<Spec, Sol>
// Shape 3: uniqueness-necessity (mystery)
type UniquenessNecessityConnector<Spec, Trace> =
(spec: Spec) => UniquenessNecessityReport<Spec, Trace>
// Meta mapping
const VERIFIER_SHAPE_TO_PROTOCOL = {
'single-verdict': 'SingleVerdictConnector',
'uniqueness-check': 'UniquenessCheckConnector',
'uniqueness-necessity': 'UniquenessNecessityConnector',
} as const;
src/mcp/connector-protocol-conformance.ts — compile-time drift 検知
各 registered connector の 実 verifier 関数を 対応する Protocol type に代入。 TS 構造的 typing により signature drift が発生すると compile error:
const _puzzleConformance: UniquenessCheckConnector = verifyPuzzle;
const _mysteryConformance: UniquenessNecessityConnector = verifyMystery;
const _gameConformance: SingleVerdictConnector = runCircuit;
runtime export として REGISTERED_CONFORMANCES 配列も提供 (audit script が消費):
[
{ connectorId: 'puzzle-verifier', protocol: 'UniquenessCheckConnector' },
{ connectorId: 'mystery-reasoning', protocol: 'UniquenessNecessityConnector' },
{ connectorId: 'game-verdict', protocol: 'SingleVerdictConnector' },
]
scripts/audit-connector-protocols.ts — runtime companion
catalog ↔ conformance の cross-reference audit:
- catalog にあるが conformance にない → 「protocol type check 未対応」 flag
- conformance にあるが catalog にない → 「不明 connector」 flag
- catalog の verifierShape → 期待 protocol と conformance の登録 protocol が不一致 → 明示 error
Usage: npm run audit:protocols (exit 0/1) / --json。 初回 run 3/3 sync 達成:
═══════════════════════════════════════════════════════════════
Connector Protocol Conformance Audit — STEP 1576 (c)
═══════════════════════════════════════════════════════════════
Catalog entries: 3
Conformance entries: 3
Total ids scanned: 3
✓ game-verdict single-verdict → SingleVerdictConnector
✓ mystery-reasoning uniqueness-necessity → UniquenessNecessityConnector
✓ puzzle-verifier uniqueness-check → UniquenessCheckConnector
✓ Catalog ↔ conformance in sync. No protocol drift.
2 layer drift 検知 (STEP 1560 との相補)
| Layer | Script | 検知対象 | 時期 |
|---|---|---|---|
| Vocabulary | STEP 1560 audit-connector-catalog.ts |
chip 名 / terminal 名の 語彙 drift (source-grep) | runtime (audit script 実行時) |
| Type | STEP 1576 connector-protocol-conformance.ts |
verifier 関数 signature の型 drift | compile-time (TS build 時) |
| Type sync | STEP 1576 audit-connector-protocols.ts |
catalog ↔ conformance file の cross-reference sync | runtime (audit script 実行時) |
Forcing function: 新 connector 追加時、agent は (1) catalog entry + (2) conformance assignment + (3) 対応 protocol type (新 shape の場合) を全て足す必要がある。 抜けると 3 audit のいずれかで検知される。
Test — 56/56 PASS
test/step1576-connector-protocols-test.ts、 8 section:
- connector-protocols module — type exports load
- VERIFIER_SHAPE_TO_PROTOCOL mapping 完全性
- connector-protocol-conformance — REGISTERED_CONFORMANCES load + function identity 確認
- runtime audit — 0 mismatches (catalog ↔ conformance)
- puzzle-verifier runtime output に Protocol 必須 field 全部あり
- mystery-reasoning-connector runtime output に Protocol 必須 field 全部あり
- game-verdict-connector runtime output に Protocol 必須 field 全部あり
- negative test — 未知 shape が audit で reject される
結果: 56/56 PASS + 既存 regression (step1556: 35/35 / step1560: 63/63) 全通過。
Honest scope
- v0.1 = 3 protocol (現 catalog の 3 shape 対応)。 新 shape 追加時は protocol type + mapping entry も同時追加が必要 (forcing function)
- compile-time drift 検知は TS structural typing に依存。 project tsconfig は
strict: falseだが、 conformance file の代入は基本的な型 shape check には十分 - Ophyd のような 7 protocol の完備は目指さない (Rei は verdict emission が主で set/trigger/stage は semantics が異なる)。 将来 Msg indirection layer (STEP (b)) 実装時に Ophyd Status object 相当の protocol 追加検討
- runtime audit script は catalog + conformance 両方の import 依存。 catalog / conformance file 自体が壊れた場合は audit も動かない → true drift 検知は compile-time が本命