クイックスタート
標準解のある一問で、道筋を最後までたどります:要求と受け入れテストを書き、AI アシスタントに作業させ、ゲートがどう判定するかを見て、レシートの各欄に何が含まれるかを読み解き、チェーン検証が捕まえられない三つのことを知ります。
#用意するものは二つ
ゲートはあなたのテストを実行するのであって、モデルに「これは正しく見えるか」と聞くのではありません。だから:
- 要求の記述 — 何が欲しいかをはっきり書きます。
- 実行できる受け入れテスト — 入力は何か、期待される出力は何か。
#一問はどんな形をしているか
受け入れテストは二つに分けます。
| 誰が見られるか | 用途 | |
|---|---|---|
| 可視 V | エージェントが読める | システムはこれで通すか納品を拒否するかを決める。修正の流れが受け取れるのもこれの失敗メッセージだけ |
| 非公開 GT | 事後の採点だけが見られる | 生成、選択、修正プロンプト、停止条件のいずれにも入れてはならない |
あるプログラムが可視テストに合格し、非公開テストに合格しないなら、それは一回の偽の納品です。これは「成果物が要求のように見えるが、要求ではない」という問題を操作可能にした形です。
# suitespec.py — 受け入れスイートは「データ」であって、プログラムではない
# スイートに含まれるのは:方言、エントリポイント名、入力—期待値のリテラル値リストのみ
# 実行器は自分自身の決定論的なレンダラーでこのデータからテストコードを生成するだけ
なぜ「V ⊆ GT」が「無損失」という言葉を無効にするのか ここには私たち自身がはまった落とし穴があり、先に知っておく価値があります:私たちが使った二つの問題バンクでは、非公開テストはいずれも可視テストの上位集合でした。そのため「非公開では通るが可視では通らない」は構造上起こりえません。この発見は、私たち自身の事前登録にあった前提の一つを反証しました。
#一通りやってみる
# 1) 仲介を起動し、あなたのモデルを指す(LM Studio / Ollama / クラウド API のどれでもよい)
vacant run --agent opencode --base http://localhost:1234 --model your-model
# 2) エージェントが走り終え、プロセスが終了する → これが納品点
# システムは凍結した作業領域のスナップショット上で可視の受け入れ検査を実行する
# 3) 判定を見る
# 0 = 納品 20 = 納品拒否 22 = インフラの失敗
この過程で、二つの層のものが手に入ります。
アクションチケット(一問につき一枚) — 要求、AI が何と言ったか、どの受け入れ検査を実行したか、判定は何か。
レシート(試行ごとに一件 + 一問につき判定一件) — 下を参照してください。
#レシートを読む
レシートのすべてのセルに署名が付き、一つ前のセルのハッシュを固定します。だから:
- 一文字を書き換える → チェーンはそのセルで切れます。
- 公開鍵を持つ人なら誰でもオフラインで再計算でき、私たちを信じる必要はありません。
検証の方法:
vacant audit <name> # ある logbook の署名チェーンを再検証する(PASS/FAIL)
私たちが保存している単一ファイルのオフラインビューア(exhibit/receipts/receipt_viewer.html、0.3 MB。多者版は 4.5 MB)はレシートをファイル内に埋め込んでおり、外部リソースもネットワークリクエストもゼロです。保存して file:// で直接開いても、チェーン全体の検証を最後まで実行できます。
#五種類のエージェントでの実測結果
本物のモデル上で、20 セルすべてが事前に書いた判定基準に合致しました(20 本のレシートチェーン / 40 件)。
| エージェント | バージョン |
|---|---|
| pi | 0.85.1 |
| OpenCode | 1.18.31 |
| Claude Code | 2.1.278 |
| Codex | 0.147.0 |
| Hermes | 0.19.0 |
#次に読むもの
- ゲートの完全なルール:受け入れゲート CONFORM
- それが何を置き換えたかを見たい:委員会式の設計は同予算では多数決に負ける
- 自分で再実行したい:再実行の方法

