30回分、確認用のカメラレンズにはこう表示されていました。あなたが使っている言語が何であれ、次のとおりです。"それは世界から誰に対しても消え、元に戻すことはできない。" ドロップとは、誰でも実在の場所に置いて、見知らぬ人が見つけられるようにできる仮想オブジェクトです。ボタンがやったことは、自分の電話のリストからそれを削除することでした。ドロップは、そのまま正確にそこに残り続けました。ほかのすべての電話では永遠に。

誰も嘘を見抜けませんでした。その理由はポイントにあります。レンズはあなた自身のドロップを、あなた自身のレーダーから隠します。あなたはすでにそれをどこに置いたかを知っているからです。だからローカルのコピーが消えたその瞬間、画面にはドロップがあったはずの場所が何も映らず、確認するのは結局、その確認をする唯一の人だけで、それには正しく見えたのです。嘘が30回のリリースを生き延びる方法は、隠すことではなく、ユーザーが到達しうるあらゆる角度から見ても真実と見分けがつかないことです。

修正には後半がある。書いた、見直した、テストした。すべてのチェックが「合格(緑)」だった。次に、読者が承認するためではなく、仕事を壊そうとする逆境レビューが入る。そこで、新しい削除ボタンが存在しないアドレスを呼び出していることが分かった。レンズはウェブページで、バックエンドは別ドメインにあるため、すべての操作はレンズ側の小さな転送ルートを経由する。存在していたのは3つの操作だった。設置、請求、移動。4つ目の削除は、作られたことすらなかった。テストはすべて通った。テストはネットワークをスタブで置き換え、正しいアドレスが要求されたかを確認するからだ。彼らは、クライアントが正しい質問を投げていること、そして何かが応答するかどうかは確認しないことを証明している。これを出荷すれば回帰になる。古いボタンは少なくとも自分のバッグをクリアできたが、新しいボタンは永遠にエラーを表示していたはずだ。

この部屋が認識するのは、ここからだ。ビジネスが相手に手渡せるあらゆるアイテム――bonuz、バウチャー、メンバーシップ、パンチカード、パス――は、Base上の1つのエンゲージメント契約から鋳造(ミント)される。契約は今2つある。古いものと、改良された後継だ。古い契約は、表示からは引退しない。引退させれば、すでに人々が所有しているものが消えてしまうからだ。創業者は大声でルールを定めた。「ミントのためには古いものはいずれサンセットする。でも、表示と表示用途についてはサンセットしない。」そして彼は、誰もスコープに入れていなかったことを尋ねた。「新しいスマートコントラクトはただの改善だ。正しくできたかもう一度確認して、古いものと比べてみて。」

インターフェースはほぼ一致していた。だがデータが違った。パンチカードは、何回パンチがあり、何回必要かを記録する。古い契約では、その2つ目の値は「max punches」という名前(スペース付き)で保存されていた。新しい契約では「max_punches」(アンダースコア付き)だ。アプリはアンダースコアの方しか読まない。だから、古い契約のパンチカードはすべて「必要パンチがゼロ」と報告された。進捗バーも、3/10のカウンタ表示も出ない。そして完了判定は「最大がゼロより上」を要求するため、完了済みのカードは決して完了として認識されなかった。誰かがカードを埋めても、報酬が渡されない可能性があった。

それは、インターフェース比較では分からない。型チェックでも、テストスイートでも、スキーマでも。分かるのは、稼働中のチェーンから実際のアイテムを読み取って、2つを並べて見たときだけだった。両方に対応しなければならないなら、片方を壊せば必ず失敗する。新しい契約をリストから外すのは明白なテストだ。古い契約を外すのは、人が忘れがちなテストであり、その約束を守るテストだ。

同じ優先設定が玄関にある。LIFEモードはロックされており、ウォレットはライフキーを握ることでそれを開く。ライフキーは、オンチェーン属性により「何を付与するか」が書かれたアイテムだ。ゲートはチェーンを読み取るだけで、他には何も見ない。承認済みウォレットのリストは保持しない。リストは人が管理しなければならないが、チェーンは管理するものではないからだ。

必要になる前に、2つの柵が作られていた。ユーザーは、直近24時間のどのローリング期間でも最大10回までドロップを置ける。「だから今のところユーザーを1日に10ドロップまでに制限している。濫用できないようにするためだ。」この制限は、守っているソーシャル機能より先に作られた。ドロップは匿名でも通報できる。何か不快なものを通報するのにアカウントが必要だとすると、大半が通報されずに終わるからだ。だが匿名の通報は、どんな量でも何も隠せない。しきい値にカウントされるのは、区別された識別済みアカウントのみ。同じアカウントが同じドロップを何度も報告しても、カウントは1回分。隠蔽は常に可逆だ。匿名の大量通報で発動できるモデレーション機能は、誰かが嫌っている相手に向けたテイクダウン(抹消)の武器だ。

そして、こちらの自爆による障害。データベースに新しいレコード型が追加された。レコードを保存するシステムは、レコード型ごとに1列を持つ編集ロックの表を保持し、すべての列を一度に命名する単一クエリを組み立てる。新しい型は設定には入ったが、その表には入らなかった。その結果、存在しない列を指すクエリになり、データベースへの書き込みがすべて失敗した。すべての書き込み、あらゆる種類が失敗した。管理パネル自身の保存ボタンも含めて。75分、自己申告の自爆だ。型は通った、テストスイートも通った。データベース変更をリハーサルするためのチェックも通った。だがそれは、見つからない列が同じように欠けている空のデータベースに変更を適用するからだ。緑のリハーサルは、変更が適用できるという意味だ。結果が完成しているという意味ではない。

監視では見えない場所に失敗がある。地図タイルのサービスはキーの裏へ移され、拒否する代わりに、API KEY REQUIREDと斜めに印字された正しい画像を返した。ステータス200、正しいファイル形式、筋の通ったサイズ。すべてのチェックが緑。28枚の会場写真は、撮影されたのではなく生成されていることが分かった。会場の名前を画像モデルに食わせて作られており、そうしてドバイのウォーターパーク「Wild Wadi Waterpark」が、砂漠の谷で描かれることになった。28枚すべては制作(本番)から消されている。「めちゃくちゃな写真を本当に撮ってしまった。これはアリゾナの話だ。存在しない。」

正直な状態。レンズは稼働していて、24言語で動き、削除は本当に削除できるようになり、両方の契約にあるロイヤルティカードが正しく表示され、正しく完了するようになった。だいたい170枚ほどの写真は、まだ帰属(attribution)が待っている。画像ライブラリの約3分の1は、アプリが好むサイズより小さく、再処理では直せない。システムが画像を拡大しないからだ。いくつかの古いパンチカードは、パンチの目標値がまったくない状態でミントされており、それらに到達するクライアントコードはない。そしてこの作業の大部分が入ってから、アプリは再ビルドされていない。だから、ここで説明されている複数の修正はリポジトリにあるだけで、誰の電話にはまだ入っていない。

これらの失敗によって傷つくはずだった人は、報告できなかった。パンチカードが完了しなかった本人は、自分が数え間違えたのだと思い込んでしまう。

「更新は非常に重く受け止めるべきだ。慎重でなければならない。出荷は控える。ただし、完璧なものだけを送る。」