著者:Pablo Kuschniroff、Claude Codeの支援による。第1版、2026年10月18日。これは コースのマニュアルの第二部だ:あなたが第一部をやったこと、少なくともレッスン0から8を読んだことを前提にしている。ここでは保留項目とは何か、赤のテストとは何か、セマンティックツリーとは何かを改めて説明しないからだ。このパートの方法は 進化・修正の道のページにある。ここにあるのは実践で、二つ目のガイドプロジェクトとともに。見慣れない言葉は主文書の用語集に、実際の事例は 参照文書にある。公開リポジトリ: github.com/pkuschnirof/urazuke。
第一部をやって、現実には空のフォルダを渡されることなどほとんどないと気づいた人のため。渡されるのは既に動いているシステムで、それに依存するユーザーがいて、「これを直して」か「あれを足して」と言われる。そして数か月前に何かを「バイブコーディング」して、動いて、今は崩れないようにその上に構築を続けなければならない人のためでもある。二人は同じ場所にいる:レガシーとともに。たとえ片方はそれを自分で書いたのだとしても。
受け継いだのと同じシステムが、以前と同じことをしていて、しかし周りに方法が前提とするすべてを備えている:レガシーのルールを備えた共働の約束。各主張がどこから出たかの印とともに復元されたシステムの地図。コードがすることと業務が信じていることのあいだの食い違いの一覧。速度の印付きでバックログに変わった監査。匿名化されたデータを持つテスト環境。繰り返せるデプロイ。コードの外に出してローテーションした秘密。重要なフローを見張る特性化テスト群。既に世界へ作用しているものの上の錠。計測された数字によるサイジング。そして負債と顧客の依頼がモジュールごとに対になって同居するバックログ。その後に、赤のテストとともに修正された最初のバグと、完全な方法で構築された最初の新しい機能。
| 段階 | レッスン | ほかに何をするか |
|---|---|---|
| 1 | N0、N1、N2、N3 | 読み取り。 何も変えない。復元されたツリーをオーナーと辿り、食い違いを一つずつ決め、監査を読む。締めに:地図と負債の棚卸し。 |
| 2 | N4、N5 | 安全ベルト。 匿名化されたデータを持つテスト環境、二度のデプロイ、ローテーションした秘密、ミューテーションによる赤付きの特性化テスト群。既に作用しているものの上の錠を確認。締めに:システムがテスト環境で動き、テスト群が緑。 |
| 3 | N6、N7、R1 | 測る、順序を付ける、直す。 計測したサイジング。二つの印を持つバックログ。最初のブロック:既知のバグを、対のものとともに修正モードで閉じる。 |
| 4 | R2 | 進化させる。 二つ目のブロック:新しい機能を、完全な方法で(第一部のレッスン5から12)、特性化を回帰として構築する。 |
| 5と6 | 第一部の13、14、15、20、16、17、18、19 | 本番リリース。 定期監査、残りの錠、本番への道の締め、三つのマニュアル(レガシーにはなかった)、そしてデプロイ前の運用品質の四つの段:完全な可観測性、N6が計測したものによる永続化、ゲートとしての脆弱性の走査、破断点を伴う負荷テスト。 |
| 7 | 第一部の23、21、22 | 運用。 デプロイとともに組み立てる二つの監視、最初の読みをレガシーの基準線として。常駐エージェント。レガシー固有の質問を伴う振り返り:正常化にいくらかかったか。 |
第一部と同じ診療所の、二年後、別の時間軸だ:彼らはTurneraを方法で作ることが決してなかった。その代わりに、責任者の甥が一夏で「Turnos」というウェブアプリケーションを作り、それ以来動いている。今日、二人の受付係と三人の専門職が毎日使っていて、約二万件の予約が入っていて、それを丸ごと理解している人は誰もいない:甥は外国に住むようになり、二週間に一度メッセージを返す。
あるもの。 コードの入ったGitHubのリポジトリ(ブランチは一つ、コミットのメッセージは「修正」など)、アプリケーションが動くのと同じサーバーの上のデータベース、FTPでファイルをコピーする手でのデプロイ、コードに書かれたデータベースのパスワード、テストはゼロ、毎晩リマインダーを送るサーバーの定期処理、そして責任者がデスクトップのツールでデータベースにつないで毎月落とす表計算。誰も復元したことのない「自動」のバックアップがある。
痛むもの。 二つ。一つ目はバグだ:患者が時々リマインダーを二度受け取り、時々一度も受け取らない。責任者はいつ起きるか分からないが、苦情を言う患者のスクリーンショットを持っている。二つ目は足りないものだ:ある種の予約について支払いリンクで手付金を求めたいし、表計算を落とさずに今月の予約数、欠席数、キャンセル数を見たい。
オーナー。 同じ責任者:事業についての判断力があり、一日十五分、コードは読まない。そして重要な新しい点が一つ:彼女はシステムがしないことをすると信じていて、システムが実際にしていることを知らない。レガシーではそれが普通であり、それこそレッスンN2が明るみに出すものだ。
重要なフロー、彼女の言葉で:「予約を登録する」「予約をキャンセルする」「リマインダーが届く」「患者を探す」「今月の表計算を落とす」。五つあり、それが特性化テスト群になる。
これで足りる。ほかのすべてはシステムの中にあり、それを読むのはエージェントだ。
この八つのレッスンが、第一部になかった区間だ。最初の四つは読み取りのためのもの:何も変えないし、何かを変えたい誘惑は巨大になる。次の二つが安全ベルトを組む。最後の二つが測って順序を付ける。機能に触れるのはその後だ。
理解すべきこと。 レッスン0では基準に答えるのは調査だった。ここにはシステムがある。だから基準は、誰の意見も介さずに、エージェントが実際に行って検証できる:ソース、データ、永続化を含む完全な環境を立ち上げられるか。コードを理解できるか。コードだけから、機能のすべてを記述し、責任者が自分のシステムだと認める文書を書けるか。テスト用の道具で画面を操作し、エンドツーエンドのテストを走らせられるか。今日の道具で構築されているか。データを複製し匿名化でき、復元されたバックアップがあるか。連携にテストモードはあるか。七つの前提条件であり、新しいルールは、赤は「不可」ではないということだ:それは前段のプロジェクトであり、独自の範囲を持ち、そのシステムを適格にするためのものだ。
プロンプトを送る前に、あなたの手で:
docs/INITIAL_SURVEY.md、短く:責任者によればTurnosは何をして誰のためか、何が痛むか(二重のリマインダー、足りないもの)、誰が作ってどれだけで返事が来るか、どこで動いているか、誰がアクセスを持つか、そして誰も復元したことのない「自動」のバックアップがあること。半ページ。docs/ELIGIBILITY_CRITERIA.md:レッスン0のシートに、レガシーの七つの前提条件を加えたもの(進化・修正の道のページ、ステーションN0から写すこと)。空の三列とともに:緑か赤か、証拠、前段のプロジェクト。docs/FUNCTIONALITY_RECOVERED.md を書き、テストを走らせなければならない。終わったら、その文書を責任者と読むこと:彼女が持っていると思っているシステムを記述しているか。一致しないものは書き留めること:最初の食い違いのリストだ。プロンプトを送る前に(締めのプロンプト):一行のあなたの決定、そして各赤について、前段のプロジェクトを今やるか、後でやるか、決してやらないか。
完全性の検証。 各前提条件に、言われたのではなく行われた証拠があるか? 回復された機能の文書が存在し、責任者がそれを認めたか? 本物のエンドツーエンドのテストを走らせたか? 各赤にブロックする保留項目としての前段のプロジェクトがあるか?
提出物。 docs/ELIGIBILITY.md、docs/FUNCTIONALITY_RECOVERED.md、そしてあれば前段のプロジェクトのブロックする保留項目。
典型的な誤り。 エージェントが行わずに答えた緑を受け入れること(「はい、コードは理解できます」)。そして赤を拒絶として扱うこと:方法が求めるのは前段のプロジェクトであって、断念ではない。
ガイドプロジェクトでは。 エージェントはデータベースの複製とともにTurnosをあなたのマシンで立ち上げ(緑)、古いテンプレート言語で書かれたレポートのモジュールを除いてコードを理解し(緑、注記付き)、機能の文書を書き、責任者はそこでシステムがしていると知らなかったことを二つ発見し(緑:文書は彼女の記憶より優れている)、六つのうち四つの画面を操作し登録フローのテストを走らせ(赤:二つの画面が操作できない、前段のプロジェクト:「カレンダーと検索を操作できるようにする」)、PDFの生成器の死んだ依存関係を除いて今日の道具で構築し(赤:小さな前段のプロジェクト)、データを複製し匿名化し(緑)、だがバックアップは一度も復元されていない(赤:それを復元することがすべての中で最も安い前段のプロジェクトだ)、そしてメッセージの提供者にはテストモードがある(緑)。決定:可、三つの小さな前段のプロジェクトの後に。
理解すべきこと。 レッスン1の六つのルールに五つが加わる。それが存在するのは、他人のコードを前にしたモデルが反射的に三つのことをするからだ:並べ替える、悪いと思ったところを「直す」、そして自分の期待と違うことをコードがしていたらそれは誤りだと決めてかかる。レガシーのルールはその反射を塞ぐ:頼まれていないリファクタリングはしない、触れる前に読む、変なものは直さずに書き留める、オーナーが別のことを言うまで現在の挙動が仕様である、そして特性化が緑でなければ何も入らない。
プロンプトを送る前に、あなたの手で:
docs/ELIGIBILITY.md が締め済みであること。Before we touch anything, we are going to set the working agreement between you and me for a system that already exists and has users. Write
docs/WORKING_AGREEMENT.mdwith the six rules of the method (my time is sacred; zero technical debt; exact scope; documentation in the same commit; never report as done what you have not verified; speak my language), each with one line explaining what it prevents, and these five rules for an inherited system: (7) Nothing is refactored that was not asked for, and no module is rewritten. (8) Code you do not understand is read before it is touched, and what you learn goes into the system map. (9) Anything strange you find (a secret in the code, a dead path, a duplicated rule, a query without an index) is logged as a pending item with its evidence, never fixed in passing. (10) Current behaviour is the specification until the owner says otherwise: a difference between what the code does and what the business says is a discrepancy for me to decide, not a bug for you to fix silently. (11) No change reaches the test environment without the characterization suite green. Add any rules you think this system needs, marked as proposals. If you need to know something about how I work in order to write this, ask me.
何にも触れる前に、既に存在してユーザーがいるシステムのための、あなたと私の共働の約束を定めます。docs/WORKING_AGREEMENT.md を書いてください。方法の六つのルール(私の時間は神聖。技術的負債ゼロ。範囲は正確に。文書は同じコミットで。検証していないことを決してやったと報告しない。私の言語で話す)を、それぞれ何を防ぐかを説明する一行とともに。そして受け継いだシステムのためのこの五つのルールを:(7) 頼まれていないものは何もリファクタリングせず、どのモジュールも書き直さない。(8) 理解していないコードは触れる前に読み、学んだことはシステムの地図に入れる。(9) 見つけた変なもの(コードの中の秘密、死んだ経路、重複したルール、インデックスのないクエリ)はすべて、証拠とともに保留項目として記録し、決してついでに直さない。(10) オーナーが別のことを言うまで、現在の挙動が仕様である:コードがすることと業務が言うことの違いは、私が決める食い違いであって、あなたが黙って直すバグではない。(11) 特性化テスト群が緑でなければ、どんな変更もテスト環境に届かない。このシステムに必要だと思うルールがあれば、提案と印して加えてください。これを書くために私の働き方について知る必要があることがあれば、聞いてください。
プロンプトを送る前に(締めのプロンプト):各提案についてのあなたの判定、一行の理由付きで。プロンプトの穴のためです。
完全性の検証。 十一のルールが、それぞれ防ぐ失敗とともに揃っているか? リファクタリングや書き直しを許す提案はないか?
提出物。 日付と版の付いた docs/WORKING_AGREEMENT.md。
典型的な誤り。 妥当に聞こえるからと「漸進的な清掃」のルールを受け入れること。妥当に聞こえるし、それはエージェントが頼まれていないことを変える許可を自分に出す形だ。
ガイドプロジェクトでは。 エージェントが受け入れる価値のある独自のルールを二つ提案する:「このシステムではテスト環境から実際の送信は一切出ない:テストでのリマインダーは偽の受信箱へ行く」、そして「責任者が落とす月次の表計算はシステムの消費者であり、契約として数える」。二つ目は生産者・消費者の地図が早めに顔を出したものであり、それでいい。
理解すべきこと。 コース全体で時間あたりの価値が最も高いレッスンだ。レッスン2ではプロジェクトファイルとツリーは調査から出てきた。ここではシステムそのものから出てきて、各主張がどこから出たかの印を帯びる:[コード]、[データベース]、[設定]、[文書]、 [業務]、または[推定]。印こそがコードを読まずに検証することを可能にする:推定されたものを見て、確認するか訂正する。そして新しい文書が現れる、食い違いの一覧だ:コードがすること、データベースが課すこと、業務が信じていることのあいだで合わないすべて。それは勝手には解決しない:一つずつがあなたの、日付付きの決定だ。レガシーには常に食い違いがある。一覧が空で出てきたら、エージェントは比較していない。
プロンプトを送る前に、あなたの手で、オーナーとともに:
docs/INITIAL_SURVEY.md に、責任者とともに書く新しい節:彼女がシステムはこうすると信じていることを、ユースケースごとに。そして覚えているルール(「予約は二時間前を切ったらキャンセルできない」「リマインダーは夜八時に出る」)。それをシステムと照合しないでください:その比較はエージェントの仕事です。docs/WORKING_AGREEMENT.md が締め済みであること。We are going to recover the map of this system from what exists. Read the whole repository (every branch), the database schema (read-only), the configuration of each environment, the recent logs and whatever documentation there is; if some part cannot be read from where you are, tell me and mark it as a gap; do not fill it by guessing. Then write three things. First, complete
docs/INITIAL_SURVEY.mdin the form the method expects (what the system does and for whom; what it does NOT do; who uses it; the technology; the environments; what an error costs), with every statement tagged by its source: [code], [database], [configuration], [documentation], [business] for what the survey already says, or [inferred]. Second,PROJECT.md, three hundred lines at most, anddocs/SEMANTIC_TREE.md: the domains and, under each one, the actors, the processes (each with trigger, steps, outcome and exceptions as the code actually implements them), the entities with the attributes, states and transitions the database and the code enforce, the screens, the external integrations and the scheduled jobs; every node tagged the same way. Third,docs/DISCREPANCIES.md: everything where the code, the database, the documentation and what the business says in the survey do not agree, with the evidence on each side. Do not resolve any discrepancy and do not fix anything: list them. Createdocs/STATUS.mdfor the living state. Reply in my language.
存在するものからこのシステムの地図を復元します。リポジトリ全体(すべてのブランチ)、データベースのスキーマ(読み取り専用)、各環境の設定、最近のログ、そしてあるだけの文書を読んでください。あなたのいる場所から読めない部分があれば、私に言って穴と印してください。推測で埋めないでください。それから三つのものを書いてください。第一に、 docs/INITIAL_SURVEY.md を方法が期待する形で完成させてください(システムは何をして誰のためか。何をしないか。誰が使うか。技術。環境。誤りが何を要するか)。各主張にはその出所の印を付けて:[コード]、[データベース]、[設定]、[文書]、調査が既に言っていることには [業務]、または[推定]。第二に、PROJECT.md、最大で三百行、そして docs/SEMANTIC_TREE.md:ドメインと、その下に、アクター、プロセス(それぞれ、コードが実際に実装している通りの引き金、手順、結果、例外とともに)、データベースとコードが課している属性、状態、遷移を持つエンティティ、画面、外部インテグレーション、定期処理。各ノードに同じ印を付けて。第三に、docs/DISCREPANCIES.md:コード、データベース、文書、そして調査で業務が言っていることが一致しないすべてを、それぞれの側の証拠とともに。どの食い違いも解決しないでください。何も直さないでください:列挙してください。生きた状態のために docs/STATUS.md を作ってください。私の言語で答えてください。
求めているのは、すべてを読んで読めなかったものを申告すること、印付きの調査とツリー、コードが実装している通りの(あるべき姿ではない)プロセス、定期処理、そして解決せずに列挙された食い違いだ。
[推定]はそれぞれ確認するか訂正する。[コード]はそれぞれ彼女の信じていることと比べる:合わないところに食い違いがあり、エージェントが既に列挙しているかもしれないし、していなければあなたが加える。プロンプトを送る前に(締めのプロンプト):確認したノードと訂正したノードの一覧、そして食い違いの一覧を、あなたの決定と日付とともに、それぞれ一行で。
I confirm these nodes: [list]. Correct these: [list]. The discrepancies are decided as follows: [one line each: discrepancy, my decision, today's date]. Finalize
docs/INITIAL_SURVEY.md,PROJECT.mdanddocs/SEMANTIC_TREE.mdwith today's date, keeping the source tags. Write each discrepancy decision indocs/DECISIONS.mdwith my exact words, and open a pending item indocs/PENDING.mdfor every discrepancy where I decided the system must change; for the ones where I decided the current behaviour stays, write it next to the node as a confirmed rule. Add toPROJECT.mdthe instruction to read this file, the tree and the working agreement at the start of every session.
このノードを確認します:[一覧]。これを訂正してください:[一覧]。食い違いはこう決まります: [それぞれ一行で:食い違い、私の決定、今日の日付]。docs/INITIAL_SURVEY.md、PROJECT.md、 docs/SEMANTIC_TREE.md を今日の日付で締め、出所の印を保ってください。食い違いについての各決定を docs/DECISIONS.md に私の言葉そのままで書き、システムを変えなければならないと私が決めた食い違いごとに docs/PENDING.md に保留項目を開いてください。現在の挙動が残ると私が決めたものは、確認されたルールとしてノードの隣に書いてください。PROJECT.md に、各セッションの始めにこのファイル、ツリー、共働の約束を読む指示を加えてください。
完全性の検証。 [推定]と印されたノードはあるか?(一つもないなら、エージェントは読んだものと推測したものを区別していない。)ツリーに定期処理が少なくとも一つあるか? 食い違いの一覧はゼロより多いか? それぞれに日付付きの決定があるか、意図的に開いたままか? 印は締めを生き延びたか? 読み取りテストを通ったか?
提出物。 印付きで完成した docs/INITIAL_SURVEY.md、PROJECT.md、 docs/SEMANTIC_TREE.md、決定済みの docs/DISCREPANCIES.md、決定の入った docs/DECISIONS.md、docs/STATUS.md。
典型的な誤り。 一つずつ決めずに、「責任者の言う通りになるようコードを直して」食い違いを解決すること:それらの食い違いのいくつかは、業務が忘れてコードが覚えていたルールだ。そして「その方がきれいだから」と締めのときにエージェントに印を消させること:印のないツリーは、もう検証できない。
ガイドプロジェクトでは。 Turnosのツリーには責任者が予期していたアジェンダのドメインと、予期していなかった二つのものがある:データベースには存在するがどの画面も表示しない「予定変更済み」という予約の状態[データベース]と、リマインダーを送るほかに一年以上前のキャンセル済みの予約を削除する定期処理[コード]。責任者はそれが削除されていることを知らなかった。典型的な食い違いは八つ:キャンセルの二時間ルールがコードに存在しない(いつでもキャンセルできる)。リマインダーは彼女によれば八時、設定によれば七時に出る。患者の電話は彼女が必須だと信じているのにデータベースでは必須でない。等々。削除のものが彼女を最も驚かせ、彼女は一分で決める:「それはもう削除しない」。保留項目だ。
理解すべきこと。 レッスン13を、ただし最後ではなく最初に、そして発見ごとに項目を一つ加えて:ブロックするか(どんな変更よりも前に直さなければならない)、そのモジュールに触れたときに払うか、待てるか。その項目がなければ、監査されたレガシーには四十の発見があり、どれから始めるか誰も分からない。何がブロックするかを決めるのは監査人ではなくあなただ:一般には、露出した秘密、操作できない画面、繰り返せないデプロイ、バックアップの不在、そしてデータを損なうか過剰に請求しうるもの。
プロンプトを送る前に、あなたの手で:
PROJECT.md、docs/SEMANTIC_TREE.md、docs/DISCREPANCIES.md。書かれたものを再発見しないためです。Audit this system for integrity, security, performance, code quality and deployability, as the inventory of what must be normalized before and during its evolution. Read-only: change nothing except writing your report to
docs/AUDIT_[date].md. If auditing some part requires access you lack (the database, the logs, the server), tell me and mark that part as not audited; do not pass it as fine. Go through all of the code, not a sample, and readdocs/SEMANTIC_TREE.mdanddocs/DISCREPANCIES.mdfirst so that you do not report what is already known. For every finding: where it is (file and line), the risk, the evidence that proves it (the command, the query, the number), its priority (P0 must be fixed now, P1 soon, P2 when possible), and one more field: whether it BLOCKS (must be fixed before any change, by my criteria: [an exposed secret, a screen that cannot be driven by a program, a deployment that cannot be repeated, no tested backup, anything that deletes or sends without control]), whether it is PAID WHEN TOUCHED (fixed together with the first change that enters its module), or whether it CAN WAIT. Grade every dimension you audited. End with every finding turned into a proposed pending item, blocking ones first. Reply in my language.
このシステムを、完全性、セキュリティ、性能、コードの品質、デプロイ可能性について監査してください。その進化の前と最中に正常化しなければならないものの棚卸しとして。読み取り専用: docs/AUDIT_[fecha].md に報告書を書く以外、何も変えないでください。どこかの部分を監査するのに手元にないアクセス(データベース、ログ、サーバー)が必要なら、私に言ってその部分を未監査と印してください。良しとして通さないでください。見本ではなくコード全体を辿り、既に分かっていることを報告しないよう、先に docs/SEMANTIC_TREE.md と docs/DISCREPANCIES.md を読んでください。各発見について:どこにあるか(ファイルと行)、リスク、それを証明する証拠(コマンド、クエリ、数字)、その優先度(P0は今すぐ直すべき、 P1は間もなく、P2はできるときに)、そしてもう一つの項目:それがブロックするか(どんな変更よりも前に直さなければならない。私の基準では:[露出した秘密、プログラムから操作できない画面、繰り返せないデプロイ、試されたバックアップがないこと、制御なしに削除または送信するもの])、触れたときに払うか(そのモジュールに入る最初の変更と一緒に直す)、それとも待てるか。監査した各次元に評点を付けてください。各発見を提案された保留項目に変えて終えてください。ブロックするものを先に。私の言語で答えてください。
プロンプトを送る前に(締めのプロンプト):読んだ報告書、検証した二つの発見、そして開いた構築者のセッション(締めは監査人ではなく構築者へ行きます)。
完全性の検証。 何を監査できなかったか言っているか? 「ブロックする」が少なくとも一つあるか? 各発見にファイル、行、証拠はあるか? ブロックするものは既に保留項目になっているか?
提出物。 速度の印付きの docs/AUDIT_[fecha].md と、開かれたブロックする保留項目。
典型的な誤り。 迷惑をかけたくない監査人のせいで、すべてが「待てる」。あるいは怯えたオーナーのせいで、すべてが「ブロックする」:すると何も始められなくなる。小さいシステムではブロックするものが三つから八つが普通だ。
ガイドプロジェクトでは。 Turnosの監査はブロックするものとしてこれを見つける:コードの中のデータベースのパスワード(しかもgitの履歴の中にもあるので、移すだけでなくローテーションしなければならない)、どのバージョンが動いているかの記録のないFTPでのデプロイ、錠のないまま予約を削除する定期処理、操作できない二つの画面。「触れたときに払う」としては:インデックスのない患者の検索(患者のモジュール)、予約ごとに一回クエリを投げるその日のアジェンダの参照(アジェンダのモジュール)、冪等でないリマインダーの送信(メッセージのモジュール。バグの手がかりだ)。「待てる」としては:既知の脆弱性のない古い依存関係と、三か所に重複した日付の整形のコード。
理解すべきこと。 この道の硬いゲートだ:安全ベルトが緑になるまで、機能の一行も変えない。安全ベルトには五つの部品がある:匿名化されたデータを持つテスト環境、繰り返せるデプロイ、コードの外に出してローテーションした秘密、あるものを走らせる継続的インテグレーション、そして特性化テスト群。最後のものはレッスン8を裏返したものだ:テストは緑で生まれる。システムが今日していることを、欠陥も含めて捉えるからだ。そして役に立つことの証明は、わざとフローを壊したときに赤になることだ。そのミューテーションによる赤がなければ、何も見ていないから通るテストだ。
プロンプトを送る前に、あなたの手で、オーナーとともに:
docs/ENVIRONMENTS_SURVEY.md。エージェントがN2で印付きで起草し、あなたが完成させるもの:テスト環境がどこで動くことになるか(コースでは無料のサービスかあなたのマシンのコンテナで足ります)、今日どうデプロイしているか、秘密はサーバーのどこに住むことになるか。We are going to build the safety belt around this system before changing anything in it. Read the environments survey,
docs/AUDIT_[date].mdanddocs/SEMANTIC_TREE.md. Evaluate whether you have what is needed (read access to the server where it runs and to its database, write access to where the test environment will run, the way it is deployed today); if anything is missing, ask me before starting. Then set up, without touching any functionality: (1) a test environment that runs the system exactly as production does, with a copy of the data where the personal fields I listed are anonymized; (2) a reproducible deployment to that environment, run twice, showing me that the second run changed nothing; (3) every secret found in the repository or in the code moved to the server configuration (environment file or vault), with the list of what you moved so that I rotate each one; (4) continuous integration running whatever test suite exists today, even if it is a single smoke test, on every push; (5)docs/GATES.mdwith the gates of this project, including: nothing reaches the test environment without the characterization suite green, and nothing reaches production without the full suite green with the exact version. Document all of it indocs/DEPLOYMENT.mdso that a person can do it by hand without you. Take a screenshot of the system running in the test environment and show it to me. Reply in my language.
このシステムに何かを変える前に、その周りに安全ベルトを築きます。環境の調査、 docs/AUDIT_[fecha].md、docs/SEMANTIC_TREE.md を読んでください。必要なものが手元にあるか評価してください(動いているサーバーとそのデータベースへの読み取りアクセス、テスト環境が動く場所への書き込みアクセス、今日どうデプロイされているか)。足りないものがあれば、始める前に私に求めてください。その後、どの機能にも触れずに、次を整えてください:(1) 本番とまったく同じようにシステムを走らせるテスト環境。私が列挙した個人項目が匿名化されたデータのコピー付きで。(2) その環境への再現可能なデプロイ。二度実行し、二度目が何も変えなかったことを私に示して。(3) リポジトリまたはコードの中で見つかったすべての秘密をサーバーの設定(環境ファイルまたは金庫)へ移し、私がそれぞれをローテーションできるよう移したものの一覧を付けて。(4) 今日存在するテスト群を、たとえ単一の煙テストでも、プッシュのたびに走らせる継続的インテグレーション。(5) このプロジェクトのゲートを記した docs/GATES.md。次を含めてください:特性化テスト群が緑でなければ何もテスト環境に届かない。完全なテスト群が正確なバージョンで緑でなければ何も本番に届かない。そのすべてを docs/DEPLOYMENT.md に、人があなたなしで手で行えるように文書化してください。テスト環境で動いているシステムのスクリーンショットを撮って私に見せてください。私の言語で答えてください。
プロンプトを送る前に(テスト群のプロンプト):あなたが開いたテスト環境、ローテーションした秘密、そしてプロンプトの穴のための五つの重要なフローの一覧。
We are going to write the characterization tests of these critical flows: [load an appointment; cancel an appointment; the reminder reaches the patient; search a patient; download the monthly sheet]. A characterization test captures what the system does today, exactly as it does it, defects included; it is not a test of what the system should do. For each flow: drive it from the screen as a user would and check the effect in the backend (the row, the state, the message queued). Every test must pass against the current code. Then prove that each test actually watches its flow: break the flow deliberately with a temporary change, show me the red output, revert the change, show me the green. If a flow cannot be driven from the screen, do not simulate it: say so and open a pending item marked as blocking. If while writing these tests you find behaviour that looks wrong, do not fix it: add it to
docs/DISCREPANCIES.mdwith the evidence. Record the command to run the suite indocs/STATUS.md, and make the suite the gate for the test environment asdocs/GATES.mdsays. Reply in my language.
この重要なフローの特性化テストを書きます:[予約を登録する。予約をキャンセルする。リマインダーが患者に届く。患者を探す。今月の表計算を落とす]。特性化テストは、システムが今日していることを、している通りそのままに、欠陥も含めて捉えます。システムがすべきことのテストではありません。各フローについて:ユーザーがするように画面から操作し、バックエンドでの効果(行、状態、キューに入ったメッセージ)を確認してください。すべてのテストが現在のコードに対して通らなければなりません。その後、各テストが本当に自分のフローを見張っていることを証明してください:一時的な変更でわざとフローを壊し、赤の出力を私に見せ、変更を戻し、緑を私に見せてください。画面から操作できないフローがあれば、模擬しないでください:そう言って、ブロックすると印した保留項目を開いてください。これらのテストを書いているあいだに誤っていそうな挙動を見つけても、直さないでください:証拠とともに docs/DISCREPANCIES.md に加えてください。テスト群を走らせるコマンドを docs/STATUS.md に記録し、docs/GATES.md が言う通り、テスト群をテスト環境のゲートにしてください。私の言語で答えてください。
求めているのは、緑で生まれてミューテーションによる赤で役に立つことを証明するテスト。操作できないものを模擬することは一切なし。そして悪く見えるものは、直すのではなく食い違いとして書き留めること。
docs/STATUS.md のコマンドでテスト群を走らせること。緑でなければならない。完全性の検証。 テスト環境を開いて、本物の名前が見つからなかったか? デプロイは二度走り、二度目は何も変えなかったか? リポジトリでの秘密の検索は空で返ってきて、見つかったものをローテーションしたか? 五つのフローのそれぞれに自分のテストとミューテーションによる赤が見えているか? あなた自身がテスト群を走らせたか?
提出物。 匿名化されたデータで動いているテスト環境、docs/DEPLOYMENT.md、 docs/GATES.md、ローテーションした秘密、緑の継続的インテグレーション、そして五つの赤を実証した緑の特性化テスト群。
典型的な誤り。 テスト群を「後で」回してバグを直し始めること:中途半端な安全ベルトは、動いていたものを壊す原因の第一位だ。匿名化されたコピーではなく「見本の」テストデータ:レガシーのバグは実データの中に住んでいる(Turnosの二重のリマインダーは特定の患者でしか現れない)。そして秘密をローテーションせずに移すこと:gitの履歴の中にあったのだから、もう秘密ではない。
ガイドプロジェクトでは。 リマインダーの特性化テストが最も面白い:夜の処理が翌日の予約ごとに一通のメッセージを偽の受信箱へ送ることを捉え、通る。それを書いているあいだに、処理が二度走れば二度送ることにエージェントが気づき、証拠とともに食い違いとして書き留める。バグの手がかりであり、まだ直さない:現在の挙動がレッスンR1まで仕様だ。ミューテーションによる赤:エージェントがメッセージをキューに入れる行をコメントアウトし、テストが落ち、コメントを外し、通る。
理解すべきこと。 レッスン14と8を、既に存在するものの上に棚卸しで行う。何かを変える前に。エージェントは、システムが外へ向けてすると業務が覚えているよりも多くのものをコードの中に見つける:送信、削除、夜の処理。二つの一覧の比較が結果だ。そして各錠は「今」か「触れたとき」かの提案を帯びる:メッセージを送るものの上の錠は今行く。月次の書き出しの上のものは、そのモジュールに触れるブロックまで待てる。
プロンプトを送る前に、あなたの手で、オーナーとともに:
docs/INITIAL_SURVEY.md に、システムが外へ向けてすると責任者が知っていることの一覧:彼女によれば、リマインダーを送る、それだけ。Go through the code, the database triggers and the scheduled jobs of the server looking for everything that charges, sends, approves, deletes, notifies outwards or runs on a schedule, and write
docs/CONSEQUENTIAL_ACTIONS_SURVEY.mdwith every statement tagged by its source. Compare it with the list the business wrote indocs/INITIAL_SURVEY.md: whatever the code does that the business did not list, or the other way round, ask me about before going on. For every action: what triggers it, whether it can run twice, whether it is reversible, what lock exists today if any, and what the way back is. In the same pass, builddocs/PRODUCER_CONSUMER_MAP.md: for every contract in the system (a service, a table, a file format, a list of values), who produces it and who consumes it, including the things outside the repository I told you about. If there are parts you cannot see, say so instead of leaving them out. Present me the actions table with a proposed lock for each (explicit confirmation, double safety, dry-run mode, daily limit, a human in the loop) and a proposal of which locks go NOW, before any change, and which can go when the module is touched. Do not implement anything yet: I confirm lock by lock. Reply in my language.
コード、データベースのトリガ、サーバーの定期処理を辿り、請求するもの、送るもの、承認するもの、削除するもの、外へ知らせるもの、時刻を決めて走るものをすべて探し、各主張にその出所の印を付けて docs/CONSEQUENTIAL_ACTIONS_SURVEY.md を書いてください。それを業務が docs/INITIAL_SURVEY.md に書いた一覧と比べてください:コードがしていて業務が列挙しなかったもの、またはその逆は、先へ進む前に私に聞いてください。各行動について:何がそれを発火させるか、二度走りうるか、取り消せるか、今日あれば何の錠があるか、そして戻り道は何か。同じ一周で docs/PRODUCER_CONSUMER_MAP.md を構築してください:システムのすべての契約(サービス、テーブル、ファイル形式、値の一覧)について、誰がそれを生産し誰が消費するか。私が話したリポジトリの外のものも含めて。見えない部分があれば、外に置くのではなくそう言ってください。各行動に提案された錠(明示的な確認、二重の安全、ドライランモード、一日の上限、回路内の人間)を付けた行動の表と、どの錠がどんな変更よりも前に今すぐ行き、どれがモジュールに触れるときに行けるかの提案を、私に提示してください。まだ何も実装しないでください:私が錠を一つずつ確認します。私の言語で答えてください。
プロンプトを送る前に(締めのプロンプト):行ごとのあなたの判定を書き込んだ表と、プロンプトの穴のための「今」の錠の一覧。
完全性の検証。 エージェントの一覧は責任者のものより行動が多いか?(同じなら、定期タスクを見ていない。)「今」の錠はそれぞれ、錠のないバージョンに対する赤のテストを持つか?月次の表計算は消費者として地図に載っているか?
提出物。 docs/CONSEQUENTIAL_ACTIONS_SURVEY.md、docs/PRODUCER_CONSUMER_MAP.md、「今」の錠を実装し検証した docs/LOCKS.md。
典型的な誤り。 「ついでだから」とすべての錠を今実装すること:二つの速度のルールの違反であり、顧客が頼んだバグに充てられない時間だ。
ガイドプロジェクトでは。 エージェントは責任者が列挙しなかった三つの行動を見つける:古いキャンセル済みの予約の夜間の削除、予約がキャンセルされたときにシステムが専門職へ送るメール(彼女は知らなかった)、そして表計算を養う書き出し。「今」の錠:夜間の削除は彼女が決めるまでドライランモードに移り(削除したはずのものを記録する)、リマインダーの送信は一日の上限を受け取る。「触れたとき」:送信の冪等性(メッセージのモジュール、バグと一緒に入る)、キャンセルでの確認(アジェンダのモジュール)。地図には六つの契約があり、月次の表計算は予約のテーブルの消費者だ:誰かが列を一つ変えたら、表計算は黙って壊れる。
理解すべきこと。 レッスン3に利点が一つ:一次のデータはデータベースとログの中にある。聞くのではなく、テスト付きの計器で測る(レッスン7)。責任者が提供するのはどこにもないものだけだ:どれだけ成長すると見込むか、そしてシステムを他の診療所に売るのか。
プロンプトを送る前に、あなたの手で:
Before changing anything we are going to size this system with its real numbers. With read-only access to the production database (or the complete test copy) and to the logs, measure instead of asking: rows per table and growth per month from the timestamps, events per entity, peak concurrency from the access logs, data size today and projected at five years, and the slowest queries. Write a meter for each number (a script that lives in the repository, with a test against a known case I will give you) and show me every number together with the command that produces it; audit each meter in both directions (is everything that should be counted, counted? does everything counted exist?). Write
docs/VOLUME_SURVEY.mdwith every figure tagged [database] or [log], and ask me only for what cannot be measured: the growth the business expects and whether the system will serve more than one site. Then writedocs/SIZING.md: what breaks first if everything is multiplied by ten, which of the current architecture choices hold and which do not, and which asymmetric decisions we take now, before evolving, because they are cheap today and expensive later. Do not change any code. Reply in my language.
何かを変える前に、このシステムをその実数でサイジングします。本番データベース(または完全なテストのコピー)とログへの読み取り専用アクセスで、聞く代わりに計測してください:テーブルごとの行数と日時からの月あたりの増加、エンティティごとのイベント数、アクセスログからのピーク時の並行性、今日のデータの大きさと五年後の見込み、そして最も遅いクエリ。数字ごとに計器(リポジトリに住むスクリプトで、私が与える既知の事例に対するテスト付き)を書き、各数字をそれを生むコマンドとともに私に見せてください。各計器を二つの方向で監査してください(数えられるべきものはすべて数えられているか? 数えられたものはすべて存在するか?)。各値に [データベース]または[ログ]の印を付けた docs/VOLUME_SURVEY.md を書き、計測できないものだけを私に求めてください:業務が見込む成長と、システムが一か所より多くに仕えるかどうか。その後 docs/SIZING.md を書いてください:すべてが十倍になったら何が最初に壊れるか、現在のアーキテクチャの決定のどれが耐えてどれが耐えないか、そして今日は安く後では高いから、進化する前に今どんな非対称な決定を取るか。コードは何も変えないでください。私の言語で答えてください。
プロンプトを送る前に(締めのプロンプト):一致したやり直しの計算、そして「十倍」に耐えないものがあれば、それについてのあなたの決定。
完全性の検証。 計器のない一次の数字はあるか? 一つあなたが走らせたか? 「十倍」は書かれているか?
提出物。 印付きの docs/VOLUME_SURVEY.md、テスト付きの計器、docs/SIZING.md。
典型的な誤り。 「データベースが大きすぎて数えられないので、十万くらいと推定します」を受け入れること。大きいデータベースはクエリで数える。それが計器だ。
ガイドプロジェクトでは。 二年で二万件の予約、月に千件でゆっくり増えている。メッセージは六万件。ピークで利用者二人。データベースの占有は小さい。最も遅いクエリは名前による患者の検索(インデックスなし、監査が既に言っていた)。「十倍」はその検索と、予約数に比例して時間のかかる夜間の送信を除いて、すべてで耐える。非対称な決定:メッセージ送信のインターフェースにキューを持たせる。今日は不要でも、手付金(レッスンR2)が同じ経路を使うからだ。
理解すべきこと。 レッスン5に二つの列を加えたもの。負債(監査、食い違い、画面、未実装の錠、サイジングの決定)と顧客の依頼(失敗しているもの、足りないもの)が同居する一つのキュー。各保留項目は速度の印と種類を持ち、顧客の各保留項目は、同じモジュールに触れていて一緒に払うとよい正常化の保留項目の一覧を持つ。それが「触れたときに払う」のルールを運用可能にしたものだ。
プロンプトを送る前に、あなたの手で、オーナーとともに:
docs/blocks/STAGE_01_REQUEST.md に、責任者の言葉で二つの一覧にして。失敗しているもの:「リマインダーが時々二度届いて、時々届かない。先週の患者三人のスクリーンショットがある」。足りないもの:「初診の予約で支払いリンクの手付金を求めたい」「表計算を落とさずに今月の数字を見たい」。We are going to turn the normalization and the client's request for this stage into one queue of numbered pending items in
docs/PENDING.md, each with its full specification as the method asks (number, title, node of the semantic tree, origin, description, business rules with decision and date or marked as missing, data in and out, screens, edge cases, acceptance criteria as given, when, then, how it will be verified, status). Sources for the normalization items:docs/AUDIT_[date].md, the discrepancies I decided to change, the screens that cannot be driven by a program, the secrets to rotate, the locks that are not implemented yet, and the decisions indocs/SIZING.md; each one keeps its speed mark: BLOCKS, PAID WHEN TOUCHED, or CAN WAIT. Sources for the client's items: the client's request for this stage; each one marked CORRECTIVE (something that fails today, with the way to reproduce it in the client's words) or EVOLUTIVE (something new). For every client item, list the normalization items that touch the same modules and should be paid together with it. If the request is ambiguous on any point such that you cannot write a verifiable item, ask me; do not resolve it by assuming. Order: blocking items first, then the client's items in the priority I gave you, each with its paired normalization. Reply in my language.
正常化とこの段階に対する顧客の依頼を、docs/PENDING.md の中の番号付き保留項目の一つのキューに変えます。それぞれ方法が求める完全な仕様付きで(番号、題名、セマンティックツリーのノード、出所、記述、決定と日付を伴う業務ルールまたは欠落と印したもの、入るデータと出るデータ、画面、境界ケース、「ある状況を前提に、あることが起きたとき、ならば」の形の受け入れ基準、どう検証するか、状態)。正常化の項目の出所:docs/AUDIT_[fecha].md、変えると私が決めた食い違い、プログラムから操作できない画面、ローテーションすべき秘密、まだ実装されていない錠、そして docs/SIZING.md の決定。それぞれが速度の印を保ちます:ブロックする、触れたときに払う、または待てる。顧客の項目の出所:この段階に対する顧客の依頼。それぞれに修正(今日失敗していること、顧客の言葉による再現の仕方とともに)または進化(新しいこと)と印してください。顧客の各項目について、同じモジュールに触れていて一緒に払うべき正常化の項目を列挙してください。依頼がどこかの点で曖昧で検証可能な項目を書けないなら、私に聞いてください。推測で解決しないでください。順序:ブロックする項目を先に、その後に顧客の項目を私が与えた優先順位で、それぞれ対になった正常化とともに。私の言語で答えてください。
完全性の検証。 「ブロックする」が開いたまま残っているか? 各修正は顧客の言葉で再現の仕方を言っているか? 顧客の各保留項目に対のものがあるか?
提出物。 すべてを入れた docs/PENDING.md と、約束の中のルーチン。
典型的な誤り。 「待てる」に五十の保留項目があるバックログ:一覧に変装した書き直しだ。払われないものは保管庫へ送って、そう言うこと。そして「小さいから」とブロックするものを開いたまま最初のブロックを開くこと。
ガイドプロジェクトでは。 Turnosのバックログには顧客の保留項目が三つ残る:二重のリマインダー(修正、メッセージのモジュール、送信の冪等性とサイジングのメッセージのキューと対になる)、手付金(進化、支払いの新しいモジュール、同じ画面に触れるのでキャンセルでの確認と対になる)、そして月次の報告(進化、報告のモジュール、患者のインデックスと、置き換えられる表計算の契約と対になる)。そして正常化のものが十二ほど、うち三つは「待てる」で、そう言われている。
理解すべきこと。 修正の保留項目は既知のバグだ。レッスン8では赤は作り出された。ここでは赤はバグそのものだ:報告したユーザーのようにフローを操作して失敗を再現するテストが、現在のコードに対して失敗しなければならない。失敗しないなら、別のバグを再現したのだ。その赤は正しいものを直していることの証明であり、「起きているに違いないこと」についてのエージェントのどんな説明よりも価値がある Ref. 22。そして根本原因は触れる前に散文で言われる。根本原因が誰も書かなかった業務ルールであることが時々あり、それを決めるのはあなただからだ。
プロンプトを送る前に、あなたの手で:
docs/PENDING.md の中の修正の保留項目を、責任者の言葉による再現とともに。そして具体的な事例:先週の三つのスクリーンショット、患者の名前(テストでは偽のもの)と日付付きで。事例がなければテストはありません。docs/STATUS.md に。This pending item is a correction: [some patients receive the reminder twice and some receive none; three cases from last week are attached in the item]. Before changing anything: (1) Reproduce the failure with a test that drives the flow from the screen and checks the effect in the backend, and show me that it fails against the current code; that red is the proof that you reproduced the right defect. If you cannot reproduce it, tell me what you tried and what you need; do not fix what you cannot see. (2) Find the root cause and tell me in prose, with the evidence, before fixing. If the root cause is a business rule nobody wrote down, stop and ask me. (3) Fix at the root, not where it hurts, and nothing else: anything else you find goes to a pending item. (4) Show me the test green, the characterization suite still green, and the regression of the neighbouring items. (5) If the fix changes a current behaviour that someone may depend on, say so explicitly: that is a decision for me, not a side effect. Close the paired normalization items of this module in the same block, each with its own evidence. The commit message says "proved red against [version]" and the test counts. Reply in my language.
この保留項目は修正です:[一部の患者はリマインダーを二度受け取り、一部は一度も受け取らない。先週の三つの事例が項目に添えてある]。何かを変える前に:(1) 画面からフローを操作してバックエンドでの効果を確認するテストで失敗を再現し、現在のコードに対して失敗することを私に見せてください。その赤が、正しい欠陥を再現したことの証明です。再現できないなら、何を試して何が必要かを私に言ってください。見えないものを直さないでください。(2) 根本原因を見つけ、直す前に、証拠とともに散文で私に言ってください。根本原因が誰も書かなかった業務ルールなら、止まって私に聞いてください。(3) 痛むところではなく根で直し、それ以外は何も:ほかに見つけたものは保留項目へ行きます。(4) テストが緑であること、特性化テスト群がまだ緑であること、そして近隣の項目の回帰を私に見せてください。(5) 修正が、誰かが依存しているかもしれない現在の挙動を変えるなら、はっきりそう言ってください:それは副作用ではなく私の決定です。このモジュールの対になった正常化の保留項目を同じブロックで、それぞれ自分の証拠とともに閉じてください。コミットのメッセージには「[バージョン]に対して赤で証明」とテストの数を書いてください。私の言語で答えてください。
求めているのは、診断の前の再現、触れる前の散文による根本原因、根とそれだけ、システム全体の回帰としての特性化、そして挙動の変更があなたの決定であること。
完全性の検証。 バグを再現するテストの赤を、数字とともに見たか? 根本原因は修正の前に散文で書かれていたか? 特性化は緑のままか? 対のものはそれぞれ自分の証拠とともに閉じたか?コミットは「赤で証明」と言っているか?
提出物。 完全なルーチンで閉じたバグ、閉じた対のもの、そしてバグのテストで拡張された特性化テスト群。
典型的な誤り。 根本原因を読まずに修正を許可すること:Turnosでは、エージェントの最初の仮説はたいてい「処理が二度走っている」で、それは真実の半分だ。そして「ついでだから」とメッセージのモジュールを片付けさせること:ルール7だ。
ガイドプロジェクトでは。 テストは、予定変更された予約で二重の送信を再現する:夜の処理は翌日の予約の行ごとに一通のリマインダーを送り、予定変更された予約には行が二つある(どの画面も表示しない「予定変更済み」の状態の古い行と、新しい行)。一度も受け取らないのは、送信の後に予定変更された人たちだ。根本原因:レッスンN2で現れた「予定変更済み」の状態。業務の質問:「予定変更された予約は新しい予約か、同じ予約か?」。責任者が決める:同じ予約、履歴付きで。根での修正は送信ではなく状態に触れる。対になった冪等性は同じブロックで払われる。赤は「予約1件に対してメッセージ2通」と言い、緑は「予約1件に対してメッセージ1通」と言う。そして挙動の変更が申告される:予定変更された予約が月次の表計算に二度現れなくなる。表計算はテーブルの消費者だからだ。責任者がそれを承認する。
理解すべきこと。 古いものの上の新しいものは、第一部のレッスン5から12そのままに、完全な方法で構築する:保留項目の中の仕様、日付付きの決定、赤のテスト、エンドツーエンドの検証、誠実な報告。違いは二つ。近隣の回帰はシステム全体であり、それを言うのは特性化テスト群だ。そしてブロックがあるモジュールに入るとき、そのモジュールの「触れたときに払う」と印された正常化の保留項目が、自分の証拠とともに一緒に入る。レガシーが古いモジュールにしたことを、新しいモジュールにしてはいけない。
プロンプトを送る前に、あなたの手で:
docs/PENDING.md の中の手付金の進化の保留項目を、あなたが読んだ完全な仕様、その対のもの、そして責任者が既に取れる業務の決定とともに:どの予約に手付金が付くか、いくらか、払われなかったらどうなるか。完全性の検証。 手付金には、請求が存在するより前に赤のテスト付きの錠があるか? ブロックの後も特性化は緑のままか? モジュールの対のものは払われたか? 古いモジュールで、保留項目なしに「改善」されたものはないか?
提出物。 テスト環境でドライランモードで動いている手付金、その仕様、その錠、そのテスト、そのエンドツーエンドの検証とともに。そして閉じた対のもの。
典型的な誤り。 収まりがいいからと「残りと同じやり方で、速く」手付金を構築すること:新しいモジュールは常に完全な方法とともに生まれる。そして「支払いリンクであって我々が請求するわけではない」と錠を忘れること:リンクは患者に送られる。それは外へ向かう行動だ。
ガイドプロジェクトでは。 手付金はリマインダーと同じ経路を使い、その経路には今やキューがある(N6の非対称な決定が独りで元を取っている)。錠:受付係の明示的な確認と専門職が定めた金額。しばらくのドライランモードで「手付金を求めたはずの相手」を記録する。キャンセルの画面の対のもの(確認)は、手付金がキャンセル時に起きることを変えるので、このブロックで払われる。締めに、テスト群は七つのフローを走る:特性化の五つ、R1のバグのもの、そして手付金のもの。
ここからは、レガシーは方法を持つシステムであり、第一部のレッスン13から22がそのまま当てはまる。注記が四つ。一つ目は運用品質の六つの段についてだ:最低限の可観測性と脆弱性の走査はもう安全ベルトとともに入っており、永続化の計測はもうN6にあり、負荷テストはその量で最初のデプロイの前に走らせる。二つの監視は最初の読みを基準線として始まり、初日にもう悪かったものはその印とともに保留項目になる。残り三つの注記はこれだ。レッスン13の監査はN3のものと比べる:負債をどれだけ払い、どれだけ残っているか。レッスン20のマニュアルはレガシーには存在しないことが多く、あるがままのシステムと、今や本当にやったことを文書化している閉じた保留項目から生成する。そしてレッスン23の振り返りにはこの道固有の質問がある:正常化にいくらかかったか(時間で、トークンで、最初の変更までの段階数で)、そして「待てる」と印した負債のうち、結局同じだけ高くついたのはどれか。その答えが、次の版でこのパートの順序を修正することになる。
オーナーがコードを読まずに検証する、最初のブロックを開く前の八つの条件。進化・修正の道のページのものと同じだが、このパートの提出物なのでここで繰り返す。