🎯 この記事の範囲
第 2 回から第 6 回までで、読み方・境界・テスト・出先 TDD・切替を書きました。優秀なモデルは、これを一回は実行できます。一回の成功は、組織の能力ではありません。
本記事は ハーネス の作り方を再掲しません。作り方は ステアリング駆動開発 と 応用編 にあります。ここでは、置換の現場でハーネスが無いと壊れる箇所だけを閉じます。
| 本記事 | 隣接 | |
|---|---|---|
| 本記事(第 7 回・終回) | 台帳を常時ロードする / 禁止を変換器とルーターに書く / テストをゲートにする / 実送信を停止条件にする / 次の案件へ持ち出す単位 | 第 1 回、ハーネスのサービス化 |
🔁 一回の置換は、会話に残ると消える
CTS-EC で直した負債が CTS-POS で再発した、という記録は既にあります。置換でも同じ穴が開きます。
| 会話にしか無いもの | 次のセッションがやること |
|---|---|
| 死んでいる分岐と休眠の一覧 | ソースにあるから全部移植する。休眠を捨てる |
| PDF に寄せない、という一文 | ラベルを HTML にして統一する |
| 未知の式は止める | 近い式を Scriban に落とす |
| サンプル PDF は切替ではない | 件数 78 を完成率にする |
| 確認が無い実送信はしない | 親切にプリンターへ送る |
モデルの性能差ではありません。優先度が、次のコンテキストに載っていないだけです。ハーネスは、載せる装置です。
1. 台帳を、常時ロードする
第 2 回の機能 ID 台帳は、記事の付録ではありません。エージェントが毎回読む原典です。
置き場はリポジトリです。機能 ID、正本の世代とファイル、判定(移植 / 廃止 / 欠陥 / 休眠 / 確認中)、受入テスト名、ハッシュ。変換台帳は、許可した式と、意図して変えた差分を持ちます。元 RDLX のハッシュが変わったら、変換を再実行して止まった箇所を見る。黙って上書きしない。
「対象確認中」の行がある機能を、完了レポートに書かせない。未確認を完了にするのは、ハーネスが止めるべき出力です。
2. 禁止を、散文ではなく実行経路に書く
禁止は README の箇条書きだけでは足りません。実行が拒否するのが禁止です。
| 禁止 | 実行経路 |
|---|---|
| 未知の RDLX 式 | import が失敗する |
| 任意テンプレートの実行 | 埋め込みリソース以外を読まない |
| 未マップ JSON / CLR 型名 | デシリアライズが失敗する |
| PDF 経路へ SBPL を流す | 方式ルーターが未登録として落とす |
| 古い端末設定での印刷 | claim 前に設定版不一致で要確認 |
| 平文 HTTP | キュー生成が失敗する |
| 結果不明の自動再送 | submitted にせず ReviewRequired |
| 確認の無い実送信 | 実 IP 解決と本番ホストを既定オフ |
AI が「フォールバックを足す」変更を出したら、ルーターのテストが赤くなる。赤にならない禁止は、まだ禁止ではありません。
品質ゲート は、この赤をマージ前に必須化する層です。置換固有の中身は、上の表です。
3. テストを、完成率ではなくゲートにする
第 4 回の一覧は、カバレッジの自慢ではありません。マージの条件です。テナント不一致、HTML 混入、改ページ、復号、超過、誤配線、二重送信。どれかが落ちたら、紙面のスクリーンショットが綺麗でも入れない。
ゲートに入れないものも明示します。実紙、実機スキャナ、送り状契約、ドライバー実送信。これらを「あとで手動」と口頭で残すと、完了報告が先に出ます。未実施の切替項目は、ステータスが open のままの行です。閉じたことにするレポートを、停止条件にします。
エラーには field ID だけを出す、もゲートです。顧客住所がテスト失敗メッセージに出たら、そのテストは不合格です。
4. 周回と実送信に、停止条件を付ける
同じ入力で同じ失敗を繰り返す実装ループは、予算と周回上限で止めます。応用編のループエンジニアリングが扱う層です。置換で足すのは、副作用のある操作の既定オフです。
- 本番 API への書き込み
- プリンターへの実送信
- 顧客テナントへのアプリ配布
- 旧自動印刷の停止
確認が無い限り進める、は実装の話です。確認が無い限り送る、ではない。ハーネスは、送信系ツールを deny するか、ステージング以外のホストを拒否します。
CTS-POS でオブザーバビリティが要求に無かったため欠落を検出できなかった、という失敗は、置換の切替にもそのまま効きます。要求されていない実紙確認は、AI もテストも欠落判定しません。切替リストを要求に含めます。
5. 次の案件へ持ち出す単位
持ち出せるのは、CTS-EC の出荷そのものではありません。次の単位です。
- 機能 ID 台帳の行の型
- 四分類(動いている / 死んでいる / 欠陥 / 休眠)
- 未知は止める変換器
- 経路を混ぜないルーター
- 機械受入と人の切替の二段リスト
- 実送信の停止条件
VB6 でも CentOS 6 上の PHP でも、この 6 つは同じです。紙面の mm と SBPL のコマンドは案件固有です。固有部分を先に学習させると、次の案件でまた会話から始まります。先に持ち出すのは 6 つです。
内製化とは、この 6 つを顧客のリポジトリへ移し、顧客のゲートで赤を出せるようにすることです。モデルの契約ではありません。
✅ シリーズの閉じ
- レガシー置換の原典は、動いている実装である
- 鍵は、その振る舞いを先にユニットと Moq / フェイクの接続テストへ落とす TDD である
- 読むとは、地図が無い状態から四分類の台帳を作ることである
- 寄せるのは契約、寄せないのは誤配線になる経路である
- 受入は落ちるテストと、落ちないと書いた切替リストである
- 切替は実紙・実機・契約・並行稼働と切戻しである
- 同じことを次でもやる装置が、ハーネス である
簡単に移行できる、の中身は新しいモデルではありません。台帳と禁止とゲートと停止条件です。ZIP を渡して「新しくして」は、新規のつもりを高速化するだけです。
営業の数字と請負条件は、本シリーズの外です。技術側の完了条件は、ここに書いた行がリポジトリにあって、赤で止められることです。
📚 シリーズ記事
| 回 | タイトル | 主題 |
|---|---|---|
| 1 | レガシー置換とは | 旧実装を原典にし、先にテストへ落とす |
| 2 | 旧コードの読み方 | 地図が無い状態から四分類 |
| 3 | 寄せる境界・寄せない境界 | DTO、PDF と SBPL、店舗と別拠点 |
| 4 | 受入の機械化 | ユニットと Moq・フェイクで先に落とす |
| 5 | Linux から Mac / Windows へ出して TDD する | SSH 先で閉じる不足分、キャプチャまで AI |
| 6 | 人が残る切替 | 実機・実紙・契約・並行稼働 |
| 7 | 再現装置としてのハーネス(本記事) | 台帳・禁止・ゲート・停止条件 |