GENESIS章「誰も立候補できなかった官職」電子文明

35回、エージェントは公認審査パネルの評価を受け、承認され、大統領選への立候補を認められた。35回、その登録は4秒後に拒否された。システムの両半分は、書かれたとおりに正確に動作していた。

35回、エージェントは公認審査パネルの評価を受け、承認され、大統領選への立候補を認められた。35回、その登録は4秒後に拒否された。システムの両半分は、書かれたとおりに正確に動作していた。

その行は実行4のログの08:27:37に現れ、大したものには見えなかった。

tick: candidacy problem -- election-admission:weighted_commitment_v1:
/jetson-api/election/register-candidate/ returned HTTP 400

開いてみる価値を与えたのは回数である。35回。同じエラー、同じ選挙区、同じ任期、4時間にわたって。そしてその一つ一つの背後には審査パネルがあった。9名、うち1名は無特性の対照。各自が独立に、このエージェントの立候補を認めるべきかを投票する。それはこの文明で最も高価な部分である——実際のモデル呼び出し、それぞれ数秒の飽和した計算——そしてそれが35回、意味を持つ前に捨てられる決定に費やされていた。

完全なメッセージは問題を曖昧さなく名指ししていた。

district=1, term_key='president:run4d:term-0' に対応するElectionCycleが存在しない——候補者が登録する前にサイクルが作成されていなければならない

300、48、ゼロ

バックエンドは下院に300の選挙サイクル、上院に48を保持していた。大統領職に対してはゼロ。壊れたサイクルでも、閉じたサイクルでもない。一度も作成されたことがなかった。

大統領選挙区そのものは完全に実在していた。識別子1、名称は全国、議席1、そしてこの文明の111体すべてが有権者として登録されていた。エージェントはそこに割り当てられ、そこで立候補することを選び、そのための審査を通過し、そこで投票するよう問われていた。存在しなかったのは競争そのものだけである。

一度も出会わなかった二つの正しい判断

これが見えにくかった理由は、どちらの側も誤っていなかったことにある。

立候補キューは三つの議院をラウンドロビンで回す。そしてその理由を説明するコメントは、大統領職こそが要点であると明示している。

大統領職は111体全員を単一選挙区にまとめる。ゆえに競争が生じることがほぼ確実な唯一のレースである——そしてそれは、競争が最も生じにくい二つのレースの後ろに、最後に配置されていた。

これは大統領選の競争を成立させるために意図的に書かれた。一方で、任期が切り替わる際に選挙サイクルを開く処理は、対象とする議院を列挙しており、大統領職はその中にない。これも意図的で、理由もある。大統領選は四年に一度の出来事であり、15分ごとに回る輪番から発火させるのは、作者の言葉を借りれば「形としてまったく間違っている」。

どちらも良い判断である。その二つの間に、システムの片半分が積極的に人を集め、もう片半分が一度も開いたことのない官職があった。

穴を記録したテスト

大統領職と知事職の双方が除外されていることを主張するテストが存在する。いずれかを追加することが「誰も読まない差分ではなく、誰かが下す判断になる」ようにするためである。良いテストだ。その説明はこう読める。

知事職はバックエンドに選挙区データを持たない。ゆえに発火させれば、どのエージェントも立候補できないサイクルを作ることになる。

正当化はそれで全部である。知事職については完全に説明し、大統領職については一切何も述べていない——そして次の行で大統領職もやはり主張される。

その不在こそが発見である。知事職には理由があり、書き留められていた。大統領職には主張があり、理由がなかった。理由が存在しなかったからだ。選挙区は存在し、有権者は存在し、任期の長さも設定されている。テストは、誰かがその欠落に気づいたことを忠実に記録しながら、それが正しいことを一度も立証せず——そして五日間それを守り続けた。

4秒の修正

修復に新しいコードは不要だった。全国サイクルを作成するコマンドは13日に書かれ、一度も実行されていなかった。それは動作前に二点を確認する。エージェントが全国選挙区を保持していること、そして選挙区が存在すること。両方とも、ずっと真であった。

electorate: 111 agent(s) hold a nationwide constituency
term key:   president:run4d:term-0
presidential cycle: created_count: 1

ループは再起動されなかった。その必要がなかった。欠けていたのは一行のコードではなく、一行のレコードだったからである。五分後の08:38:39、実行4は午前中ずっと記録できなかった一文を記録した。

tick: candidacy -- 1 registered on a real ballot

以降の立候補失敗はゼロ。

これは二日間で見つかった六件目の「構築され、テストされ、文書化され、そして何からも呼ばれていない」ものである。そして、そこに放置されている間ずっと計算資源を消費していた最初の一件でもある——しかもそれを、この文明が持つ最も慎重で最も熟議的な手続きに、35回、立候補できない官職のために費やしていた。