著者:Pablo Kuschniroff、Claude Codeの支援による。第2版、2026年10月18日。Urazukeプロジェクトの作業文書だ:これを使う最初のコホートとともに修正していく。日常の言葉で書かれており、略語や見慣れない表現はすべて主文書(ESCALERA_METODOLOGICA.md)の用語集にある。実際の事例を引用するときは [Ref. N] の印で参照文書へ導く。マニュアルはきれいなまま、詳細はワンクリック先にある。方法の公開リポジトリは github.com/pkuschnirof/urazuke。
人工知能でソフトウェアを構築し、そのソフトウェアが本当に使われることを望む人のため。本物の人々に、何か月も。プログラミングのコースではない:言語もフレームワークも学ばない。「プロンプト」のコースでもない:モデルにうまく書かせるコツは学ばない。方法のコースだ:何をどの順でするか、各時点でモデルに何を頼むか、何を納めてもらうべきか、そして——コードを読まずに——納められたものが完全だとどう知るか。
次のどれかに当てはまるなら役立つ:
金曜のデモのためのプロトタイプが欲しいなら役に立たない。それにはもっと速いツールがあり、この方法は遅く感じるだろう。方法はデモの後も動き続けなければならないもののためにある。
本番で動くあなた自身のアプリケーション。それには:通る前に失敗するのを見たテスト。すべてのフローのエンドツーエンドテスト。ロールバック付きの再現可能なデプロイ。リポジトリの外の設定と秘密。日付付きで書かれた事業の決定。システムのセマンティックツリーと、構築した各物の詳細な仕様、その保留項目の中に。請求し、送信し、削除するすべてに錠。人がAIなしで追える三つのマニュアル。構築したのとは別のエージェントによる監査。そして数字による振り返り。それがここで「プロダクショングレード」と呼ぶものだ:動くことではなく、維持できることだ。
そしてもう一つ、本当に持ち帰るものを手にする:証拠なしにモデルを信じない反射と、各手順でどんな証拠を求めるべきかを正確に知ること。
各レッスンは同じ構造を持つ:
コース全体のルール:検証が「否」のまま次の段へ進まないこと。「後で直す」の誘惑は、まさに方法が避けるために存在するものだ。段を完全に登らなければ、次の段は砂の上に建つ。
主文書のパートBに方法の完全なタイムラインがある。ここでそれを、ガイドプロジェクトのためのコースの順序に翻訳する。週ではなく段階だ。それぞれはあなたのプロジェクトが求めるだけ続き、交渉の余地がないのは順序と、何よりレッスンとレッスンの間に何が起きるかだ。
| 段階 | レッスン | レッスンの他に何をするか |
|---|---|---|
| 0 | なし | 取り込み:オーナーにインタビューし、何を望むか、誰のために、今何が起きているか、何に帰結があるか、彼だけが知る数字は何かを散文で書く。名付けられるユースケースを名付け(「受付係が予約を登録する」)、主要な画面を手描きでも描き、事業のエンティティをその状態とともに列挙する。意図的に不完全に。 |
| 1 | 0、1、2、3、4 | 立ち上げ、続けて。 適格性、約束、セマンティックツリー付きの定義、サイジング、そしてインフラのすべてとインテグレーションとデプロイの連鎖を持つ骨組み:リポジトリ、テスト環境、継続的インテグレーション、最初の空のデプロイ。締めに、URLを開いて空の画面を見る。 |
| 2 | 5、6、8、10 | 最初の機能ブロック(基本の予約台帳)。依頼を仕様付きの保留項目に変換してブロックを開く。各保留項目とともに:決定、赤のテスト、フローのエンドツーエンドテスト、あなたが見る画面のスクリーンショット。ブロックの締めに:完全なエンドツーエンドのテスト群、そしてあなたがブロックのフローに従ってテスト環境でシステムを使う。 |
| 3 | 7、9、11、12 | 二つ目のブロック(患者と検索)。ループの残り四つのレッスンをこのブロックで学ぶ。同じ締め:すべてのフローのエンドツーエンド、人間によるテスト、新しい画面付きのユーザーマニュアル。 |
| 4 | 13、14 | 本番リリース、前半。 別のセッションによる監査。錠。そしてその後初めて、完全なループで構築しドライランモードに置く三つ目のブロック(リマインダーと手付金)。 |
| 5 | 15、16、17、18、19、20 | 本番リリース、後半。 試されたロールバック付きの本番への連鎖の締め。設定可能なレベルを持つ可観測性、前と後を計測した永続化、ゲートとしての脆弱性の走査、破断点を伴う負荷テスト。三つのマニュアル。プログラミングをしない誰かが復旧マニュアルを追う。すべてのフローについてのあなたまたはオーナーの受け入れテスト。ユーザーなしの本番への最初のデプロイ。 |
| 6 | 21、22、23 | 運用。 ドライランの記録を見た後にリマインダーを有効化する。デプロイとともに組み立てる二つの監視:資源と性能、エラー。最初の周期報告をオーナーと読む。常駐エージェント。数字による振り返りとはしごへの変更提案。 |
プロジェクトがより大きいなら、育つのは段階2と3(より多くのブロック)であって、段階1でも 4と5でもない。そして段階3にインフラをしていたり、段階5に初めてエンドツーエンドのテスト群を走らせていたりしたら、順序に戻ること:何かが飛ばされた。
自分のプロジェクトがなければ、これを使うこと。小さいが、二十四の段のどれも偽物にならないために必要なすべてを持っている:実ユーザー、個人データ、世界へ出るメッセージ、そして金銭。
事業。 診療所(事務所、美容院、工房でもよい:予約を出すところならどこでも)。今日、予約はノートに書かれ、WhatsAppで手で確認される。人が忘れるので予約が失われ、二人が別々のノートに書いたので二重予約があり、先月いくつの予約がキャンセルされたか誰も知らない。
望むもの。 二人の受付係と三人の専門職が予約を見られるウェブの予約台帳。24時間前の WhatsAppまたはメールによる自動リマインダー。特定の予約について支払いリンクで手付金を求められること。そして月末のいくつかの数字(予約数、欠席数、手付金数)。
オーナー。 診療所の責任者。事業についての判断力があり(どの予約に手付金が要るか、どれだけ前ならキャンセルできるか、三回欠席した患者に何と言うか)、質問に答えるのに一日十五分ある。プログラミングはせず、コードは読まない。
彼女だけが知る数字。 一日約四十の予約、年間二百五十日。予約あたり約三つのメッセージ(確認、リマインダー、ときに再予約)。患者のデータは五年保存する。ピークは月曜の朝、二人の受付係が同時に登録するとき。そして彼女が答えられず、重要な問い:これが機能したら、他の診療所にも売るのか?(答えはサイジングを十倍変える。)
帰結のあるもの。 リマインダーの送信(二度送れば迷惑。間違った番号に送れば、プライバシーの問題)。手付金の請求(金銭)。予約のキャンセル(それを失う患者にとって不可逆)。患者の削除(個人データ)。
責任者が名付けるユースケース、彼女が言う通りに:「予約を登録する」「患者を探す」「予約をキャンセルする」「患者にリマインダーが届く」「手付金を求める」「今月の予約数を見る」。六つ。エンドツーエンドのフローになる。
これで始めるには十分だ。それ以外のすべてはエージェントが質問し、質問することが演習の一部だ。
この五つのレッスンはプロジェクトごとに一度、段階1に、機能を書く前に行う。最も飛ばす誘惑を与え(「何か動くものを見たい」)、最も飛ばすと高くつくものだ。続けて行い、その後初めてループを開くこと。
理解すべきこと。 方法はどんなプロジェクトにも役立つわけではなく、始める前にそれを知ることが最初の品質の決定だ。それなしには機能しない二つの条件がある:証拠を残す標準リポジトリがあること(X1)、そして画面からバックエンドまでエンドツーエンドでテストするために画面をプログラムから操作できること(X2)。どちらかが欠ければ、エージェントは自分を検証できず、あなたがコードを読む羽目になる。それはまさに方法が避けると約束するものだ。二つは私が断ったプロジェクトから取った Ref. 46。その後に重み付け基準(時間のあるオーナーがいるか、誤りに帰結があるか、別の環境でテストできるか、など)があり、まだ較正中だ。
ガイドプロジェクトでは二つの条件は満たされる:新規プロジェクト(レガシーなし)で、プログラムから操作できるウェブインターフェースで構築する。自分のプロジェクトでは、このレッスンは「不可」で終わることがあり、それはコースの有効な結果だ。
課題。
プロンプトを送る前に、あなたの手で(エージェントはこれをあなたの代わりにできません):
docs/INITIAL_SURVEY.md:手で書きます。段階0の取り込みをもとに:顧客は何を望むか、誰のために、システムなしで今何が起きているか、どんな技術があるか提案されているか、以前のシステムがあるかそれにリポジトリがあるか、画面をプログラムから操作できるか、オーナーは誰でどれだけ時間があるか、誤りにどんな帰結があるか、どんな環境があるか。半ページ。不完全でも構いません。実際、不完全であることが演習の一部であり、知らないことは「分からない」と書きます。docs/ELIGIBILITY_CRITERIA.md:主文書の基準シート(排除基準X1とX2と候補)をコピーすること。答え、出所、緑か赤かの列は空のままで。自分で埋めないこと:埋めるのはエージェントです。We are going to assess whether this project can be run with the Urazuke method. Read the initial survey in
docs/INITIAL_SURVEY.mdand the criteria sheet indocs/ELIGIBILITY_CRITERIA.md. First, evaluate whether the survey is sufficient to answer every criterion. If any criterion cannot be answered from the survey, ask me for the missing information before going on; do not assume. Then fill in the sheet criterion by criterion: the answer, where it comes from, and for each exclusionary criterion whether it is green or red. Do not decide: present me the completed sheet with your reading and your doubts, and I will decide. Reply in my language.
このプロジェクトがUrazukeの方法で進められるかを評価します。docs/INITIAL_SURVEY.md の初期調査と docs/ELIGIBILITY_CRITERIA.md の基準シートを読んでください。まず、調査がすべての基準に答えるのに十分か評価してください。調査から答えられない基準があれば、先へ進む前に足りない情報を私に求めてください。推測しないでください。次にシートを基準ごとに埋めてください:答え、その出所、そして各排除基準について緑か赤か。決定はしないでください。完成したシートをあなたの読みと疑問とともに私に提示してください。私が決めます。私の言語で答えてください。
求めているのは、二つのファイルを読むこと、調査が十分か評価し、答える前に足りないものを質問すること(この条項はコースのすべてのプロンプトで繰り返される。方法の心臓部だ)、各答えの出所を言いながらシートを埋めること、そして決定しないこと:決定はあなたのものだ。
プロンプトを送る前に(締めのプロンプト):一行で書いたあなたの決定(可、不可、または条件付き可。条件はそれぞれ検証可能で、三つを超えないこと)と、このセッションで彼の質問に与えた答え。プロンプトがそれらを最終シートに含めるよう求めているからです。
Decision: [go / no-go / go under these conditions: …]. Write the final sheet to
docs/ELIGIBILITY.mdwith the date, who decided, the answer to every criterion with its source, and the conditions if any. Include the questions you asked and my answers.
決定:[可 / 不可 / 次の条件で可:…]。最終シートを docs/ELIGIBILITY.md に書いてください。日付、誰が決めたか、各基準への答えとその出所、条件があればその条件とともに。あなたがした質問と私の答えを含めてください。
完全性の検証。 docs/ELIGIBILITY.md を開いて自問すること:二つの排除基準に明示的な答えと出所があるか?「おそらく」で答えられた基準があるか?(あるなら、エージェントは質問すべきだった。)決定に日付と名前があるか? 条件があれば、検証できるか? エージェントがした質問とあなたの答えがあるか?
提出物。 一ページの docs/ELIGIBILITY.md。
典型的な誤り。 エージェントが質問しないよう「完全な」調査を書くこと:演習を失い、もっと悪いことに、モデルの仕事をする癖がつく。五つの条件付きで「可」と答えること:変装した「不可」だ。そして最も多いもの:「可なのは明らか」だからとレッスンを飛ばすこと。明らかなことは書かれず、書かれないことが後で議論される。
ガイドプロジェクトでは。 エージェントは最低限、インターフェースがウェブかモバイルか(X2はそれに依存するから)、Excelでも以前のシステムがあるか、どのメッセージチャネルを使うか(WhatsAppにはメールにない要件がある)を質問すべきだ。シートは「可」で終わり、妥当な条件が一つ:第14段の前にメッセージチャネルを決めておくこと。
理解すべきこと。 エージェントは毎セッション、前回の記憶なしにやってくる。毎朝新しい協力者が来るようなものだ。共働の約束とは、初日にあなたが言うことであり、毎日読み返すものだ:どう働くか、何を許容しないか、どの程度の自律を与えるか。約束なしには、毎セッション同じことを繰り返し、毎回少しずつ違う。私は二週間繰り返した後に初めてこれを書いた Ref. 1。
六つの最低限のルールにはそれぞれ背後に失敗がある:「私の時間は神聖」はあらゆる細部を聞かれることを防ぐ。「負債ゼロ」は「後で直す」を防ぐ。「正確な範囲」は「ついでに」物を追加されることを防ぐ。「同じコミットでの文書」は古いマニュアルを防ぐ。「検証していないことを決して完了と報告しない」は完了ではなかった「完了」を防ぐ。「私の言語で話せ」はプロンプトが英語だったからと英語で答えられることを防ぐ。
課題。
プロンプトを送る前に、あなたの手で:
docs/MY_PREFERENCES.md でも):たくさん質問してほしいか少なくか? どの言語で? どれだけの自律性を与えるか(独りでコミット、独りでテスト環境へデプロイ、本番には決して)? 他の人と働くときに何が癇に障るか? 聞かれたときに伝えます。リストは、その場で即興しないためのものです。Before we write any code, we are going to set the working agreement between you and me. Write
docs/WORKING_AGREEMENT.mdwith at least these rules, each with one line explaining what it prevents: (1) My time is sacred: do not ask me what you can resolve on your own, and when you do ask, ask in prose, with your recommendation. (2) Zero technical debt: whatever breaks is fixed at the root, with its regression test, in the same session. (3) Exact scope: no more and no less than what was asked; if you see something else, log it as a pending item, do not do it. (4) Documentation is updated in the same commit as the change. (5) Never report as done something you have not verified; always separate what you verified from what you believe. (6) Speak my language. Add any rules you think this project 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 を少なくとも次のルールで書いてください。それぞれ、何を防ぐかを説明する一行付きで:(1) 私の時間は神聖です。自分で解決できることを私に聞かないでください。聞くときは散文で、あなたの推奨とともに。(2) 技術的負債ゼロ。壊れたものは根本から、回帰テスト付きで、同じセッションで直します。(3) 正確な範囲。頼まれた以上でも以下でもなく。他に何か見つけたら、保留項目として記録し、やらないでください。(4) 文書は変更と同じコミットで更新します。(5) 検証していないことを決して完了として報告しないでください。検証したことと信じていることを常に分けてください。(6) 私の言語で話してください。このプロジェクトに必要だと思うルールを、提案として印して追加してください。これを書くために私の働き方について知る必要があれば、私に聞いてください。
求めているのは、それぞれが防ぐ失敗付きの六つのルール、あなたが受け入れるか拒否できるよう提案と印された固有のルール、そしてあなたについて質問すること。
プロンプトを送る前に(締めのプロンプト):エージェントの各提案についてのあなたの判定を、書き出したもの:どれを受け入れるか [X、Y]、どれを拒否するか [Z]、そしてなぜか、それぞれ一行で。プロンプトの空欄に入り、埋めるのはあなたです。
I accept rules 1 to 6 and your proposals [X, Y]; I reject [Z] because [reason]. Finalize the agreement with today's date and a version number. Then add to the project file the instruction to read this agreement at the start of every session.
ルール1から6とあなたの提案[X、Y]を受け入れます。[Z]は[理由]のため拒否します。今日の日付とバージョン番号で約束を確定してください。その後、プロジェクトファイルに、毎セッションの最初にこの約束を読むという指示を追加してください。
まだプロジェクトファイルがなければ(レッスン2で作る)、その指示を持つ最小限のものを作る。それでよい。
完全性の検証。 六つのルールが、それぞれ防ぐ失敗とともにあるか? 願望として書かれたものがあるか(「…するよう努める」)? プロジェクトファイルは毎セッションの最初にこれを読むよう命じているか? あなたの働き方について少なくとも一つ質問したか?
提出物。 日付とバージョン付きの docs/WORKING_AGREEMENT.md、プロジェクトファイルに結び付けられて。
典型的な誤り。 すべて良さそうに聞こえるからと二十のルールを受け入れること:誰も二十は守らない。六つか八つなら守られる。エージェントが約束を変えられると言うルールを残すこと:だめ。そして最も静かなもの:読んでいるかを一度も試さないこと。レッスン2でその方法を見る。
ガイドプロジェクトでは。 Turneraのためにエージェントがよく提案し、受け入れる価値のある固有のルール:「本番以外の環境から患者に本物のメッセージを決して送らない。テストでは、メッセージは偽の受信箱へ行く」。早くから顔を出す第14段だ。
理解すべきこと。 プロジェクトファイル(PROJECT.md、または CLAUDE.md、またはあなたのツールが使う名前)はエージェントが各セッションの最初に読む地図だ。短くなければならない:システムは何か、誰のためか、何でないか、モジュール、日付付きでなされた決定、そして約束を読む命令。毎日起きたことはそこには行かない:生きた状態(docs/STATUS.md)と保留項目の記録へ行く。私のあるシステムはこのファイルを九千行以上まで育てさせた。その状態では誰も読まず、モデルも読まない Ref. 41。
だが地図には二つ目の部品があり、最も多くの仕事をするものだ:セマンティックツリー。システムを木として分解したもの:最上位にドメイン、各ドメインの下にそのアクター、プロセス(取り込みで名付けたユースケース、アクター、トリガー、手順、結果、例外付き)、属性と状態を持つエンティティ、画面、外部インテグレーション。昔からある要件工学のドメインモデルを、モデルが読めるよう木の形にしたものだ。各ノードから、それに触れる保留項目と決定がぶら下がる。その価値は二重だ:エージェントに触れるノードの正確な文脈を与え、あなたにはコードを読まずに、エージェントが理解しているシステムが事業が求めたものであることを検証する方法を与える。木に事業が一度も名付けなかった状態があれば、モデルが発明したのであり、その上に構築する前にあなたはそれを見る。
「何でないか」の節は依然として最も重要で、全員が空のままにするものだ。書かれていないことが、モデルが穴に出くわしたときに発明するものだ。
課題。
プロンプトを送る前に、あなたの手で:
docs/INITIAL_SURVEY.md、レッスン0で学んだこと(エージェントの質問への答え)と業務の調査で補完したもの:誰がシステムを使うか、どんな問題を解くか、二項目でも「システムがしてはならないこと」の節、オーナーが名付けるユースケースを彼の言葉で、状態を持つエンティティ、画面の絵(紙の写真でも)、外部の連携、そしてすでに下された決定を日付とともに。取り込みで方法を使ったなら(インタビュー、ユースケース、ユーザーストーリー、プロトタイプ)、どれかを言ってその結果を貼ること。docs/WORKING_AGREEMENT.md、締められたもの(レッスン1)。We are going to define the project in writing. Read the business survey in
docs/INITIAL_SURVEY.mdand the working agreement indocs/WORKING_AGREEMENT.md. Evaluate whether the survey is sufficient to describe the system, its users, its domain and its boundaries; if it is not, ask me for what is missing before writing anything. Then write two things. First,PROJECT.md, three hundred lines at most, with: what the system is and for whom; what it is NOT; the main modules as a list; the decisions already made, each with its date; and the instruction to read this file and the semantic tree at the start of every session. Second,docs/SEMANTIC_TREE.md: the system as a tree, with the domains at the top level and, under each one, its actors, its processes (the use cases, each with actor, trigger, steps, outcome and exceptions), its entities with their attributes, states and transitions, its screens, and its external integrations. Mark every node you inferred rather than read in the survey, so that I can confirm or correct it. Separately, createdocs/STATUS.mdfor the living state (what is being worked on, what is open): that file changes every day; the other two change only when the system changes. Reply in my language.
プロジェクトを書面で定義します。docs/INITIAL_SURVEY.md の事業調査と docs/WORKING_AGREEMENT.md の共働の約束を読んでください。調査がシステム、そのユーザー、ドメイン、境界を記述するのに十分か評価してください。不十分なら、何かを書く前に足りないものを私に求めてください。次に二つのものを書いてください。第一に PROJECT.md、最大三百行で、内容:システムは何で誰のためか。何でないか。主要モジュールのリスト。既になされた決定、それぞれ日付付き。そして毎セッションの最初にこのファイルとセマンティックツリーを読むという指示。第二に docs/SEMANTIC_TREE.md:システムを木として、最上位にドメイン、各ドメインの下にそのアクター、プロセス(ユースケース、それぞれアクター、トリガー、手順、結果、例外付き)、属性・状態・遷移を持つエンティティ、画面、外部インテグレーション。調査で読んだのではなく推論したノードはすべて印してください。私が確認または修正できるように。別途、生きた状態(取り組んでいること、開いていること)のために docs/STATUS.md を作成してください。そのファイルは毎日変わります。他の二つはシステムが変わるときだけ変わります。私の言語で答えてください。
求めているのは、起草する前に質問すること、「何でないか」の節を持つ短いプロジェクトファイル、完全な構造と印された推論ノードを持つセマンティックツリー、そして別のファイルの生きた状態。
PROJECT.md 全体を読むこと。五分に収まらなければならない。真実でないもの、あなたのものでないものを修正すること。プロンプトを送る前に(締めのプロンプト):あなたが全部読んだ PROJECT.md、ノードを一つずつ辿って推論ノードごとに判定を付けた木、そしてプロンプトの [list] の空欄のために書き出した修正のリスト。最初からリストが空なら、自分の読みを疑うこと。
Apply these corrections: [list]. Finalize
PROJECT.mdanddocs/SEMANTIC_TREE.mdwith today's date. Add to the working agreement two rules: the change history never goes intoPROJECT.md(it goes todocs/STATUS.mdor to the pending-items register); and every pending item must hang from a node of the semantic tree, and the tree is updated in the same commit whenever a block adds or changes a node.
これらの修正を適用してください:[リスト]。PROJECT.md と docs/SEMANTIC_TREE.md を今日の日付で確定してください。共働の約束に二つのルールを追加してください:変更履歴は決して PROJECT.md に入れない(docs/STATUS.md または保留項目の記録へ行く)。そしてすべての保留項目はセマンティックツリーのノードからぶら下がらなければならず、ブロックがノードを追加または変更するたびに木は同じコミットで更新される。
PROJECT.md と木が言うことで答えるなら、結び付けは機能している。他の何かで答えるなら、地図を読んでいない:あなたのツールがプロジェクトファイルをどう読み込むか見直すこと。完全性の検証。 PROJECT.md は五分で読めるか? システムが何をしないかを言っているか? 木にはあなたが知るすべてのアクターがあり、各エンティティは事業が使う状態をそれ以上でも以下でもなく持っているか? 推論ノードをすべて確認または修正したか? 各決定に日付と誰が決めたかがあるか? エージェントは起草する前に何か質問したか? 生きた状態は別のファイルにあるか? 読み取りテストを通ったか?
提出物。 PROJECT.md(最大三百行)、確認されたノードを持つ docs/SEMANTIC_TREE.md、 docs/STATUS.md、そして通った読み取りテスト。
典型的な誤り。 既に持っていた仕様全体を PROJECT.md に貼ること:綱領であって仕様ではない。「何でないか」を空のままにすること。辿らずに木を受け入れること:モデルは恐ろしいほど自然に状態と画面を推論し、発明された各ノードは誰も頼んでいないのに構築される機能だ。そして読み取りテストをしないこと:第1段と第2段が存在するだけでなく作用していると知る唯一の方法だ。
ガイドプロジェクトでは。 Turneraの「何でないか」には最低限:カルテシステムではない(医療データを保存しない)、決済ゲートウェイではない(プロバイダの支払いリンクを使い、カードを処理しない)、マーケティングメッセージを送らない(確認とリマインダーのみ)。木には、アクター受付係と専門職、プロセス「予約を登録する」「予約をキャンセルする」「患者を探す」、エンティティ予約(状態:未確認、確認済み、キャンセル、欠席)と患者、画面「当日の予約台帳」と「患者カード」を持つドメイン「予約台帳」。プロセス「リマインダーを送る」、エンティティメッセージ、 WhatsAppプロバイダとのインテグレーションを持つドメイン「メッセージ」。そして「手付金を求める」と決済プロバイダとのインテグレーションを持つドメイン「支払い」。エージェントが予約に状態「再予約済み」を追加したら、どこから取ったか聞くこと:責任者は名付けていない。必要かもしれないし、必要でないかもしれない。決めるのはあなたであって、エージェントではない。
理解すべきこと。 間違って取ると数週間を要する決定がある:どのデータベースか、データベースへの呼び出しが同期か非同期か、何人が同時にシステムを使えるか。そしてすべては事業だけが持つ数字に依存する:一日の予約数、予約あたりのメッセージ数、何年保存するか。モデルはその数字を推論できない。そこから派生するもの(年間行数、五年後のサイズ)は推論できる。だからプロンプトは一次データと派生データを区別し、足りない一次データを推定する代わりに求めるよう要求する。モデルが一次データを推定するとき、計算するときと同じ自信ありげな顔でそうする。口調で区別する術はない。私はこれを間に合うようにしなかったために再設計の一段階まるごとを払った Ref. 15。
さらに、常に取った方がよい種類の決定がある:非対称な決定、余っても安く、欠けると非常に高くつくもの。典型例は、最初のデータベースがファイルでも初日からデータベースとのインターフェースを非同期にすること:データベースを決して変えないなら await が一つ余っただけ。変えるなら、すべての書き直しを免れた。
課題。
プロンプトを送る前に、あなたの手で、オーナーとともに:
docs/VOLUME_SURVEY.md:オーナーと(プロジェクトがあなたのものなら自分自身と)座って書くこと:主要エンティティ(セマンティックツリーのもの)といくつあるか、月にいくつ追加されるか、エンティティあたりのイベント数、ピーク時に何人が操作しいつがピークか、データをどれだけ保存するか、例外的な負荷はあるか、どんな成長を期待するか。各数字について出所を記すこと:「責任者が言った」「九月のノートで数えた」「推定」。いくつかは意図的に「推定」のままにすること:エージェントがそれをどうするか見ます。PROJECT.md と docs/SEMANTIC_TREE.md、締められたもの(レッスン2)。Before proposing any architecture we are going to size the system. Read
PROJECT.mdand the volume survey indocs/VOLUME_SURVEY.md. Distinguish primary data (facts only the business knows) from derived data (what can be computed from the primary data). Evaluate whether the primary data is complete enough to compute what follows; if any primary figure is missing, or is marked as an assumption, ask me for all the missing figures before going on. Never estimate a primary figure. If a previous system can be queried, use its real numbers and state where each came from. With the primary data complete, compute, showing the arithmetic: rows per year for the three largest tables, peak concurrency, data size at five years, and what breaks first if everything is multiplied by ten. Then present three options for persistence and concurrency, each with the cost of migrating to the others later. Do not choose: I choose. Do not write code. Reply in my language.
アーキテクチャを提案する前にシステムをサイジングします。PROJECT.md と docs/VOLUME_SURVEY.md のボリューム調査を読んでください。一次データ(事業だけが知る事実)と派生データ(一次データから計算できるもの)を区別してください。一次データが以下を計算するのに十分完全か評価してください。一次の数字が欠けているか、推定と印されているなら、先へ進む前に足りない数字をすべて私に求めてください。一次の数字を決して推定しないでください。以前のシステムを参照できるなら、その実数を使い、それぞれの出所を述べてください。一次データが完全になったら、計算を示しながら算出してください:最大の三テーブルの年間行数、ピーク時の並行性、五年後のデータ量、そしてすべてが十倍になったとき最初に壊れるもの。次に永続化と並行性の三つの選択肢を、それぞれ後で他へ移行するコストとともに提示してください。選ばないでください。私が選びます。コードを書かないでください。私の言語で答えてください。
求めているのは:一次と派生を区別すること。欠けているか「推定」の一次データをあなたに求め、決して推定しないこと。計算を見せて派生物を算出すること。「十倍」のシナリオ。一方から他方へ変えるコスト付きの三つの選択肢。そして選ばないこと。
プロンプトを送る前に(締めのプロンプト):出所付きのデータに変わった推定、あなたが手でやり直してエージェントのものと一致した計算、そして一行の理由とともに選んだ選択肢。
I choose option [B]. Record in
docs/SIZING.md: the primary data with its source, the derived data with its arithmetic, the three options, the chosen one and why, and the decisions we are taking "just in case" even though they are not needed today (for example: the persistence interface is asynchronous from line one, even if the first engine is synchronous). Include the questions you asked and my answers.
選択肢[B]を選びます。docs/SIZING.md に記録してください:出所付きの一次データ、計算付きの派生データ、三つの選択肢、選んだものとその理由、そして今日は必要でなくても「念のため」取る決定(例えば:永続化インターフェースは最初のエンジンが同期でも一行目から非同期)。あなたがした質問と私の答えを含めてください。
完全性の検証。 出所「推定」または出所なしの一次データがあるか? 各派生データは計算を示し、やり直すと合うか? 三つの選択肢があり、理由付きで一つが選ばれているか?「十倍」で何が起きるかを言っているか? 非対称な決定は書かれているか? 質問したか?
提出物。 docs/SIZING.md。
典型的な誤り。 エージェントが質問しないよう、あなたが発明した数字で調査を埋めること(レッスン0と同じ誤りで、ここではその数字がアーキテクチャを決めるのでより悪い)。念のため「最も強力な」選択肢を選ぶこと:移行コストが表にあるのは、まさに「十倍」に耐える最も小さいものを選ぶためだ。そして非対称な決定を書かないこと:書かれていなければ、レッスン4でエージェントはそれを守らない。
ガイドプロジェクトでは。 一次:40予約/日 × 250日 = 10,000予約/年。予約あたり3メッセージ = 30,000メッセージ/年。5年の保存。二人の受付係が同時のピーク。「十倍」は他の診療所に売るかの問い:年間100,000予約と300,000メッセージ。典型的な三つの選択肢:SQLiteファイル(一つの診療所には何年も足りる。複数が書き込む十倍には耐えない)、最初からPostgreSQL(すべてに耐える。インフラが少し多くかかる)、または今はSQLiteで非同期インターフェースとPostgreSQLへの移行を予定(非対称なもの)。コースでは三つ目を選ぶ:最も多くを教えるものだ。
理解すべきこと。 システムが何か役立つことをする前に、空のまま起動し、テストされ、デプロイされなければならない。時間の無駄に見えるが(「何もないのに何をデプロイするのか」)その逆だ:本番への道はプロダクトの一部で、機能すると知る唯一の方法は、まだ失うものがないときにそれを辿ることだ。私のあるシステムではデプロイは立ち上げの一か月後に来て、五つの連続した保留項目を要した Ref. 32。骨組みが立ち上げでデプロイされていれば、その五つの痛手は空の状態で受けていた。
このレッスンはさらに、プロジェクトのインフラのすべてとインテグレーションとデプロイの連鎖を作る場所だ。レッスン15まで再び触れることはなく、その間にすべての機能をその上に構築する。だから段階1の大半を占める。
ゲートとは、ある段階から別の段階へ進むための条件だ(「テスト群が緑」「テストへのデプロイが機能した」)。自明に見えても今書くことが、後で議論せずに「これは通らない」と言えるようにするものだ。
課題。
プロンプトを送る前に、あなたの手で:
docs/ENVIRONMENTS_SURVEY.md:システムがどこで動くか(既に持っているサーバー、クラウドのサービス)、テスト環境と本番環境があるか、誰が何にアクセスを持つか、何かあるなら今日どうデプロイしているか、そしてプロジェクトの種類(新規、修正、発展)。何もなければ、そう言うこと:エージェントが最も単純な選択肢を提案します。プロンプトはこれを「the environments survey」とパスなしで呼びます:何という名前かを言うこと。PROJECT.md と docs/SIZING.md、締められたもの(レッスン2と3)。We are going to build the skeleton of the system, with no functionality at all. Read
PROJECT.md,docs/SIZING.mdand the environments survey. Evaluate whether you have what is needed for the skeleton to run in the test environment (access, URL, deployment method); if anything is missing, ask me before starting. Then build: the folder structure; the server and the UI starting up; the test structure with one smoke test that passes; continuous integration running that test suite on every push; and the deployment to the test environment. Declare the gates of the workflow (what must be green to move from one stage to the next) indocs/GATES.md. When done, take a screenshot of the empty UI running in the test environment and show it to me. Do not add any functionality "while you are at it". Reply in my language.
システムの骨組みを、機能なしで構築します。PROJECT.md、docs/SIZING.md、環境の調査を読んでください。骨組みがテスト環境で動くために必要なもの(アクセス、URL、デプロイ方法)があるか評価してください。何か欠けていれば、始める前に私に求めてください。次に構築してください:フォルダ構造。起動するサーバーとUI。通るスモークテスト一つを持つテスト構造。プッシュごとにそのテスト群を走らせる継続的インテグレーション。そしてテスト環境へのデプロイ。ワークフローのゲート(ある段階から次へ進むために何が緑でなければならないか)を docs/GATES.md に宣言してください。終わったら、テスト環境で動いている空のUIのスクリーンショットを撮って私に見せてください。「ついでに」機能を追加しないでください。私の言語で答えてください。
求めているのは、始める前にアクセスを確認すること、骨組みとは何かの正確なリスト、書かれたゲート、テスト環境の実際のスクリーンショット、そして機能追加の禁止。
プロンプトを送る前に(締めのプロンプト):あなた自身が行ったテスト環境のURLへの訪問、あなたが開いた緑の継続的インテグレーション実行へのリンク、そして読んだ docs/GATES.md、ゲートごとに検証可能な条件を一つ持つもの。
Skeleton approved. Record in
docs/STATUS.mdthe test environment URL, the command to run the tests and the command to deploy, and mark this step as done. Then run the deployment a second time and show me that the second run changed nothing.
骨組みを承認します。docs/STATUS.md にテスト環境のURL、テストを実行するコマンド、デプロイするコマンドを記録し、このステップを完了と印してください。その後デプロイを二度目に実行し、二度目の実行が何も変えなかったことを私に見せてください。
完全性の検証。 あなたがテスト環境のURLを開いて空の画面を見たか? 緑の継続的インテグレーション実行へのリンクはあるか? デプロイは二度実行され、二度目は何も壊さなかったか?ゲートはそれぞれ検証可能な条件を持つか? 頼んでいない機能があるか?
提出物。 骨組みを持つリポジトリ、緑の継続的インテグレーション、機能するテスト環境の URL、docs/GATES.md、三つのコマンドを持つ docs/STATUS.md。
典型的な誤り。 「ローカルで動く、デプロイは後で見よう」を受け入れること:だめ、デプロイが骨組みだ。テスト環境の代わりにエージェントのマシンのスクリーンショットを受け入れること。そして「ついでに」ログイン画面、メニュー、ロゴを追加させること:保留項目なしに入る各物は逃げた範囲だ。
ガイドプロジェクトでは。 Turneraの骨組みは、テスト環境の公開URLで動く「Turnera — バージョン0.0.1」と言うウェブページ、ヘルスチェックのルートで「ok」と応答するサーバー、そのルートを呼ぶスモークテスト、プッシュごとにそのテストを走らせる継続的インテグレーション、そしてテスト環境への自動デプロイ。ゲート:「マージするにはテスト群が緑」「本番へ昇格するにはテスト環境が緑」「本番への最初のデプロイには試されたロールバック」。それだけ。そして本物のURLでその空のページを見るのは、不思議なほど満足感がある。
この八つのレッスンは、プロジェクト全体を通じて変更ごとに使うものだ。段階2と3に最初の二つの機能ブロックで学び、最後まで実践する。各保留項目とともに行う順に並んでいる:依頼を仕様付きの保留項目に変換してブロックを開き、一つ取り、欠けているものを決め、計測すべきものを計測し、構築し、赤でそしてエンドツーエンドでテストし、品質のゲートを通し、手動テストケースを書き、相手側を更新し、検証したことと信じていることを分けて報告する。ブロックの締めに、手動テストケースを自分で実行する。その反射が方法だ。
実践するには実際の機能が必要になる。ガイドプロジェクトでは、最初のブロックは基本の予約台帳:当日の予約を見る、予約を登録する、キャンセルする。二つ目は患者と検索。メッセージも支払いもまだ。それは錠(レッスン14)の後に来る。
理解すべきこと。 「計画」が一方に「タスクリスト」が他方にあるのではない:保留項目のリストが計画だ。だがさらに二つの考えがあり、それがこの方法を単なるタスクリストから区別する。
一つ目:詳細な仕様は各保留項目の中に住む。古典的方法には、完成する前に古びる長い要件仕様書があった。ここでは分解される:各保留項目が、ぶら下がるセマンティックツリーのノード、顧客の言葉でそれを生むユーザーストーリーまたはユースケース、詳細な記述、決定と日付付きの適用される事業ルール、入出力データ、影響を受ける画面、境界ケース、「前提、もし、ならば」の形の受け入れ基準、そしてどう検証するかを持つ。保留項目の仕様を読むことは、あなたがコードを読むことに最も近づく瞬間であり、まさに正しい距離だ:そこで、構築する前に、エージェントが別のことを理解したとあなたが検知する。
二つ目:閉じた保留項目は文書である。保留項目が閉じるとき、その仕様、それを生んだ決定、閉じたときの証拠、コミット、日付とともに残る。閉じた保留項目のキューはシステムの機能的な履歴で、そこから変更日誌とマニュアルの新しい節が出てくる。そしてエージェントへの黄金律:リスト外に現れたものは仕様付きの新しい保留項目として記し、やらない。
課題。
プロンプトを送る前に、あなたの手で:
docs/INITIAL_SURVEY.md にブロックの名前の見出しを付けて、または別のファイル(例えば docs/blocks/BLOCK_01_REQUEST.md。プロンプトは「the client's request for this block」とパスなしで言うので、どこにあるかを言うこと)に、顧客が言う通りに、その曖昧さとともに書くこと。Turneraでは:「当日の予約を見て、新しいのを登録して、キャンセルしたい」。取り込みでユースケースを書いたなら、それも貼ること:ブロックの自然な単位です。オーナーが優先順位をくれたなら、それも。docs/SEMANTIC_TREE.md、PROJECT.md、docs/STATUS.md、最新のもの(レッスン2)。We are going to turn everything that must be done in this block into numbered pending items, each one carrying its full specification. Read
PROJECT.md,docs/SEMANTIC_TREE.md, the client's request for this block, and whatever is indocs/STATUS.md. If the request is ambiguous on any point such that you cannot write a verifiable pending item for it, ask me; do not resolve it by assuming. Then create or extenddocs/PENDING.mdwith one item per thing to do, each with: number (PND-001 onwards); one-line title; the node of the semantic tree it hangs from; the user story or use case that originates it, in the client's words; the detailed description; the business rules that apply, each with its decision and date, or marked as "rule missing, asked"; the data in and out; the screens affected; the edge cases and exceptions; the acceptance criteria in the form "given, when, then"; how it will be verified as done; and status. If a node the item needs does not exist in the tree, propose it and mark it. Order the items by the priority I gave you; if I gave none, propose an order and tell me why. Reply in my language.
このブロックでやるべきことすべてを、それぞれ完全な仕様を持つ番号付きの保留項目に変換します。PROJECT.md、docs/SEMANTIC_TREE.md、このブロックに対する顧客の依頼、そして docs/STATUS.md にあるものを読んでください。依頼が検証可能な保留項目を書けないほどどこかで曖昧なら、私に聞いてください。推測で解決しないでください。次に docs/PENDING.md を作成または拡張し、やるべきこと一つにつき一項目、それぞれに:番号(PND-001から)。一行のタイトル。ぶら下がるセマンティックツリーのノード。顧客の言葉による、それを生むユーザーストーリーまたはユースケース。詳細な記述。適用される事業ルール、それぞれ決定と日付付き、または「ルール欠落、質問済み」と印して。入出力データ。影響を受ける画面。境界ケースと例外。「前提、もし、ならば」の形の受け入れ基準。完了をどう検証するか。そして状態。項目が必要とするノードが木に存在しなければ、提案して印してください。私が与えた優先順位で項目を並べてください。与えていなければ、順序を提案してその理由を教えてください。私の言語で答えてください。
求めているのは、依頼を検証可能な項目に変換すること、依頼が検証可能な項目を書けるほど十分でないときは質問すること、それぞれの完全な仕様をフィールドごとに、ぶら下がる木のノード、決定付きか欠落と印された事業ルール、後にテストの台本となる受け入れ基準、そして理由付きの順序。
プロンプトを送る前に(ルーチンのプロンプト):ブロックが仕様化され、あなたが保留項目を一つずつ読み、訂正を済ませた docs/PENDING.md(一行の仕様しか持たない保留項目が一つもないこと)、そしてルーチンが加わる docs/WORKING_AGREEMENT.md。
Add this routine to
docs/WORKING_AGREEMENT.md: "Before touching any code, opendocs/PENDING.md, tell me which item you are taking and why, and re-read its specification. Every commit cites its pending item. A pending item is closed with written evidence (the test counts red and green, the screenshot, the measured number), never with 'done'. When you close it, keep it in the register with its full specification and add: the evidence, the commit, the date, and any decision that was taken along the way; that record is the documentation of what was built. If along the way you see something that is not on the list, add it as a new pending item with its specification; do not do it."
このルーチンを docs/WORKING_AGREEMENT.md に追加してください:「コードに触れる前に docs/PENDING.md を開き、どの項目をなぜ取るかを私に告げ、その仕様を読み直してください。すべてのコミットはその保留項目を引用します。保留項目は書かれた証拠(赤と緑のテストの数、スクリーンショット、計測した数字)で閉じ、決して『完了』では閉じません。閉じるときは、完全な仕様とともに記録に残し、追加してください:証拠、コミット、日付、そして途中で取られた決定。その記録が構築したものの文書です。途中でリストにないものを見つけたら、仕様付きの新しい保留項目として追加してください。やらないでください。」
完全性の検証。 無作為に選んだ保留項目の仕様を読むこと:すべてのフィールドを持ち、あなたが頼んだことを記述しているか? 各保留項目はあなたが認識する木のノードからぶら下がっているか? それぞれどう検証するかを言っているか?「欠落、質問済み」と印されたのに聞かれていないルールがあるか? 証拠もコミットもなしに閉じた保留項目があるか? 閉じたものはその仕様と終了の文書を保持しているか? 無作為に三つのコミットを取ること:保留項目を引用しているか?保留項目なしの何かがコードに現れたか?
提出物。 最初のブロックの仕様を持つ docs/PENDING.md、約束の中のルーチン、そして進行中の最初の保留項目。
典型的な誤り。 一行の仕様を受け入れること:エージェントは形式のために書いたのであり、構築の時点で足りないものを発明する。仕様を読まないこと:誤解が高くつく前に止められる唯一の瞬間だ。「もう動くのを見た」からと証拠なしに保留項目を閉じさせること。文書化せずに閉じさせること:六か月後、なぜシステムがそうするのか誰も知らない。そして最も直しにくいもの:リスト外の「もう一つだけ」をさせること。最初に許したとき、正確な範囲を失った。
ガイドプロジェクトでは。 Turneraの最初のブロックは約六つの保留項目で、木のドメイン「予約台帳」からぶら下がる:PND-001 ある日の予約を見る。PND-002 患者、専門職、日付、時刻付きで予約を登録する。PND-003 同じ専門職の同じ時刻の二つの予約を防ぐ。PND-004 予約をキャンセルする(削除ではなく印:レッスン6の決定)。PND-005 名前または電話で患者を探す。 PND-006 最低限のデータでの患者登録。例えばPND-003の仕様はこう言う:ノード 予約台帳 → プロセス「予約を登録する」→ エンティティ 予約。ストーリー:「同じ専門職の同じ時刻に二つの予約があってはならない、ノートで二回起きた」(責任者の言葉)。ルール:「専門職が有効にした場合のみ二重予約可」(決定保留、質問済み)。データ:専門職、日付、開始時刻、所要時間。画面:登録フォーム。境界ケース:部分的に重なる予約、所要時間の異なる予約。受け入れ基準:「Dr. A の10:00の予約があるとき、Dr. Aの10:00にもう一つ登録しようとすると、画面が警告しデータベースは保存しない」。検証:フォームのエンドツーエンドテストとデータベースへのクエリ。それが仕様だ。
理解すべきこと。 モデルは、事業ルールの穴を見つけると、それを埋める。止まって質問しない。最もありそうなもので補完し、他のすべてを書くのと同じ自然さでそうする。だからこのレッスンは「決定を書け」ではなく「欠けていたら止まって質問するよう要求しろ」だ。そしてあなたが決めたら、決定はあなたの発言そのまま、あなたの名前、日付とともに、コミット、保留項目の仕様、記録に書かれる。私は最初のシステムからそうしている Ref. 29。六週間後、誰かが「なぜキャンセルは削除しないのか?」と聞いたとき、答えは書かれていて、あなたのものだ。
課題。
プロンプトを送る前に、あなたの手で:
docs/WORKING_AGREEMENT.md(レッスン1)、ルーチンが入る先。docs/DECISIONS.md、空でも作っておくこと。見出しに形式を:日付、誰が決めたか、そのままの言葉、それを必要とした保留項目。Add this routine to
docs/WORKING_AGREEMENT.md: "Whenever implementing something requires a business rule that is not written down, or you must choose between two approaches that change what the user sees, stop and ask me, in prose, with your recommendation and the alternative. Do not implement the one you prefer. When I decide, write the decision with my name and the date in the commit message, in the pending item's specification and indocs/DECISIONS.md, with the exact words I used. If I do not answer and you must move on, implement the most reversible option and mark it 'decision by omission, pending confirmation', so that I can review it."
このルーチンを docs/WORKING_AGREEMENT.md に追加してください:「何かの実装に書かれていない事業ルールが必要なとき、またはユーザーが見るものを変える二つのアプローチから選ばなければならないときは、止まって私に聞いてください。散文で、あなたの推奨と代替案とともに。あなたが好む方を実装しないでください。私が決めたら、決定を私の名前と日付とともにコミットメッセージ、保留項目の仕様、docs/DECISIONS.md に、私が使った言葉そのままで書いてください。私が答えず、先へ進まなければならないなら、最も可逆な選択肢を実装し、『省略による決定、確認待ち』と印してください。私が見直せるように。」
求めているのは、書かれていないルールの前で止まること、推奨と代替案付きで質問すること(十秒で決められるように)、あなたの発言そのままを三つの場所に記録すること、そしてあなたが答えないときは最も可逆なものを選んで印すこと。
プロンプトを送る前に(締めのプロンプト):エージェントの質問を、その推奨と代替案とともに読んだこと。そして、永久に残ってほしい正確な言葉で一文にまとめたあなたの決定。あなたがオーナーでないならオーナーに相談のうえ、日付とともに。チャットで即興しないこと。
Rule: [exact wording]. Decided by me, [date]. Write it down and continue.
ルール:[正確な文言]。私が決定、[日付]。書き留めて続けてください。
完全性の検証。 事業ルールに触れる三つのコミットを開くこと:誰がいつ決めたかを引用しているか? ルールは保留項目の仕様にもあるか? 未確認の「省略による」決定があるか? システムにあなたのものと認識できないルールがあるか? 文は原文か「改良」されたか?
提出物。 育っていく docs/DECISIONS.md、最初のブロックの少なくとも五つの決定付き、そしてそれを引用するコミットと保留項目。
典型的な誤り。 質問にチャットで答え、書き残すことを要求しないこと:三セッション目には誰も覚えていない。エージェントにあなたの言葉を「改良」させること:言い換えられたルールは別のルールだ。そして最も重大なもの:誰も決めていないルールを本番で発見すること。起きたら(起きる)、バグではない:第6段の失敗であり、コードだけでなく約束で直す。
ガイドプロジェクトでは。 Turneraの最初のブロックの典型的な決定:「キャンセルは予約をキャンセル済みと印し、誰がいつかを保存する。何も削除しない」。「専門職は同じ時刻に二つの予約を持てないが、専門職が有効にしたなら二重予約に二人の患者は持てる」。「患者の電話は必須。メールは任意」。それぞれ日付と責任者の名前付きで、それぞれそれを必要とした保留項目の仕様に貼り付けられて。
理解すべきこと。 モデルは数字付きの主張(「その種のクエリは120ほどある」)を作り、計測されたときも推定されたときもまったく同じに聞こえる。口調で区別することはできない。唯一の方法は計器を要求することだ:「何で計測した? コマンドを見せて」。段のルールは何かを決める数字は印象からは出ないということだ:リポジトリに住み、既知の事例に対して検証するテストを持ち、あなたが実行できる計器から出る。
そしてもう一つ、痛手を重ねて学び、自明視していたこのルールを形式化するのに時間がかかった理由:計器も嘘をつく。私のあるシステムでは、ある計器がコードの一部を見ていなかったためゼロを出し、別のものは44なのに27と言っていた Ref. 35、 Ref. 36。だから双方向の監査:コードから計測へ(数えるべきものはすべて数えられているか?)と計測からコードへ(数えられたものはすべて実際に存在するか?)。
小さいプロジェクトでは「計測する」は控えめだ:画面が読み込み時にいくつクエリを発行するか数える、月次レポートがどれだけかかるか、昨日いくつメッセージが送られたか。ラチェットも経路ごとの予算も要らない。要るのは、数字の裏にコマンドがあることだ。
課題。
プロンプトを送る前に、あなたの手で:
Before building anything, we are going to measure. The hypothesis is: [the day view runs one database query per appointment shown]. Write a meter (a script that lives in the repository) that measures [the number of queries the day view runs for a day with N appointments], and a test for the meter that checks it against a known case where the answer is known in advance. If measuring requires access or data you lack, ask me; do not approximate silently. If some part can only be approximated, mark it as approximate and tell me the margin. Run the meter, show me the number together with the command that produces it, and audit it in both directions: from the code to the measurement (is everything that should be counted, counted?) and from the measurement to the code (does everything counted actually exist?). Only then propose what to build. Reply in my language.
何かを構築する前に計測します。仮説は:[当日のビューは表示する予約ごとにデータベースクエリを一つ発行する]。[N件の予約がある日に当日のビューが発行するクエリの数]を計測する計器(リポジトリに住むスクリプト)と、答えが前もってわかっている既知の事例に対してそれを検証する計器のテストを書いてください。計測にあなたが持っていないアクセスやデータが必要なら、私に求めてください。黙って近似しないでください。ある部分が近似しかできないなら、近似と印して誤差の幅を教えてください。計器を実行し、それを生むコマンドとともに数字を見せ、双方向で監査してください:コードから計測へ(数えるべきものはすべて数えられているか?)、計測からコードへ(数えられたものはすべて実際に存在するか?)。その後初めて何を構築するか提案してください。私の言語で答えてください。
求めているのは、リポジトリ内の計器、計器のテスト、近似する代わりに足りないものを求めること、近似を印すこと、コマンド付きの数字、双方向の監査、そして順序:まず計測、次に提案。
プロンプトを送る前に(予算のプロンプト):計測された数字を、与えられたコマンドであなた自身が走らせたもの(同じ数が出なければなりません)。そしてあなたが与えるつもりの余裕、あなたが決めたもの:計測値より少し多く、念のための倍ではなく。
Set the budget for [queries] on this path at the measured value plus a small margin, and protect it with a test that fails if it is exceeded. Tell me the number and the margin.
この経路の[クエリ]の予算を、計測値プラス小さな余裕に設定し、超えたら失敗するテストで守ってください。数字と余裕を教えてください。
こうして、三か月後に誰かがループを戻したら、テスト群がそれを検知する。
プロンプトを送る前に(ルール五のプロンプト):docs/WORKING_AGREEMENT.md、そして計画が主張しうる量ごとに、既に存在する計器。計器がないなら、先にこのレッスンの最初のプロンプトを。
Add this routine to
docs/WORKING_AGREEMENT.md: "Before executing a plan that asserts numbers, verify every number with the meter. If any does not match, stop and tell me; do not execute on a wrong number."
このルーチンを docs/WORKING_AGREEMENT.md に追加してください:「数字を主張する計画を実行する前に、すべての数字を計器で検証してください。一致しないものがあれば、止まって私に教えてください。間違った数字の上で実行しないでください。」
完全性の検証。 計器を実行して同じになったか? テストはあるか、どの既知の事例に対して?報告に計器の裏付けのない数字があるか? 近似は印されているか? テスト付きの予算はあるか?
提出物。 テスト付きのリポジトリ内の計器、docs/STATUS.md または保留項目の中のコマンドと日付付きの数字、そして(該当するなら)テストで守られた予算。
典型的な誤り。 コマンドを実行せずに数字を受け入れること:このレッスンの価値の半分はあなたが実行することにある。ゼロを出す計器:ほとんどの場合ゼロではない。ほとんどの場合何かを見ていない。そしてエージェントに「計測しながら直す」ことをさせること:順序が方法だ。
ガイドプロジェクトでは。 Turneraの計器は、テストデータベースに10、50、200件の予約の日を読み込み、クエリを数えながらその日の予約台帳を開き、三つの数字を書くスクリプトだ。計器のテストは0件の予約で正確に基本クエリ(例えば2)を数えることを検証する。ループがあったなら、数字は12、52、202。直すと3、3、3になり、予算は4になって、予約数がいくつでも予約台帳が4より多くクエリを発行したら失敗するテストが付く。
理解すべきこと。 これがコースの中心のレッスンだ。一度も失敗するのを見ていないテストは、何かを証明しているかわからない。モデルはコードとテストを同じセッションで、同じ理解で書く:依頼を誤解していれば、テストは誤解したものを証明し、通る。テストが重要なものを見ていると知る唯一の安価な方法は、古いコードに対して赤で見ることだ:変更前のコードもそれを通るなら、テストは前後を区別しておらず、役に立たない。だから依頼は「テストを書け」ではなく「赤を見せて、次に緑、次に回帰」だ。これを最もよく示す事例は一致しなかったカウンタのものだ Ref. 26。
そして二つ目の考え、一つ目と同じくらい重要なもの:エンドツーエンドテスト。画面から(クリックし、入力し、読み)検証し、バックエンドでの効果(行が残った、状態が変わった)を確かめるテストが、あなたのコード読みを置き換えるものだ。保留項目の受け入れ基準(「前提、もし、ならば」)がその台本だ。そして三回、三つの規模で実行する:各保留項目とともに触れたフロー。各ブロックの締めに存在するすべてのフロー。本番への各デプロイの前に正確なバージョンですべてのフロー。三つ目だけをするなら、何週間も誰もエンドツーエンドでテストしなかったシステムで最後に至る。
課題。
プロンプトを送る前に、あなたの手で:
docs/WORKING_AGREEMENT.md、ルーチンが入る先。docs/PENDING.md に「前提、操作、結果」の受け入れ基準と「どう検証するか」を持つもの:それがテストの台本です。持っていないなら、テストを頼む前にレッスン 5へ戻ること。docs/STATUS.md(レッスン4)、そして触れるフローに十分なデータとともに動いているテスト環境。データが足りないなら、あなたが入れるか、テストの一部として作るよう頼むこと。ただしシミュレートはさせないこと。Add this routine to
docs/WORKING_AGREEMENT.md: "To close a pending item I need evidence, not your word. (1) Write the test that proves what the item asks for, following its acceptance criteria. (2) Demonstrate that this test fails against the previous code: you may temporarily revert the change, or run the test against the old version, but show me the red output as a receipt, not a summary: the exact command, the identifier of the version it ran against, the count of failing tests and the exit code, pasted as they came out, so that I can rerun it myself with one command. (3) Show me the green output with the change. (4) Run the regression suite for the neighbouring items and show me it is still green. (5) Run the end-to-end test of the flow this item touches, from the screen to the backend, and show me the backend effect. (6) Do not replace with mocks the very part you are trying to test. If testing end to end requires something you lack (data, access, an environment), ask me for it; do not simulate what you do not have. Finally, the commit message says 'proved red against [what]' and the test counts."
このルーチンを docs/WORKING_AGREEMENT.md に追加してください:「保留項目を閉じるには、あなたの言葉ではなく証拠が必要です。(1) 項目が求めることを証明するテストを、その受け入れ基準に従って書いてください。(2) このテストが以前のコードに対して失敗することを示してください。変更を一時的に戻すか、古いバージョンに対してテストを実行してもよいですが、赤の出力を要約ではなくレシートとして私に見せてください:正確なコマンド、それが走った対象のバージョンの識別子、失敗するテストの数、そして終了コードを、出たままの形で貼ってください。私自身が一つのコマンドでもう一度走らせられるようにです。(3) 変更ありでの緑の出力を見せてください。(4) 隣接項目の回帰テスト群を実行し、まだ緑であることを見せてください。(5) この項目が触れるフローのエンドツーエンドテストを、画面からバックエンドまで実行し、バックエンドでの効果を見せてください。(6) まさにテストしようとしている部分をモックで置き換えないでください。エンドツーエンドのテストにあなたが持っていないもの(データ、アクセス、環境)が必要なら、私に求めてください。持っていないものをシミュレートしないでください。最後に、コミットメッセージは『[何]に対して赤で証明』とテストの数を述べます。」
求めているのは、受け入れ基準に導かれたテスト、レシートとして示された赤(コマンド、バージョン、数字、終了コード。あなた自身がもう一度走らせられるように)、緑、隣接項目の回帰、バックエンドでの効果付きのフローのエンドツーエンドテスト、まさに試すものをシミュレートしないこと、そして欠けているものはシミュレートせずに求めること。
プロンプトを送る前に:足りないのがあなたの持っている材料(データ、アクセス、環境)なのか(それを渡すこと。このプロンプトは送りません)、それとも本当にそこではシステムがテスト可能でないのか(このプロンプト)を、見分けること。
Explain why it cannot be tested, what would have to be added so that it can, and open a pending item for that. The change is not closed until it can be tested.
なぜテストできないのか、テストできるようにするには何を追加すべきかを説明し、そのための保留項目を開いてください。テストできるようになるまで変更は閉じられません。
プロンプトを送る前に(テスト群のプロンプト):ルーチンで閉じられた六つの保留項目、特定されテスト環境にデプロイされた、昇格される正確なバージョン、そしてエージェントがカバーしたと言うものと突き合わせるための、存在するフローのあなた自身のリスト(セマンティックツリーのユースケースから作ったもの)。
Run the complete end-to-end suite of every flow that exists so far, in the test environment, with the exact version that will be promoted. Show me the counts, and for each flow the backend check that proves it. If any flow has no end-to-end test, say so and open a pending item for it; do not pass it as covered.
ここまでに存在するすべてのフローの完全なエンドツーエンドのテスト群を、テスト環境で、昇格される正確なバージョンで実行してください。数を見せ、各フローについてそれを証明するバックエンドの検証を見せてください。エンドツーエンドテストのないフローがあれば、そう言って保留項目を開いてください。カバー済みとして通さないでください。
完全性の検証。 報告は数字付きで赤を見せているか? 回帰は同じセッションで数字付きで走ったか? エンドツーエンドテストはバックエンドも検証しているか? 変更のまさにその場所にシミュレートされた部分があるか? コミットは「赤で証明」と言っているか? ブロックの締めに:すべてのフローがエンドツーエンドのテスト群にあるか? あなたがシステムを使い、見つけたものを記したか?
提出物。 完全なルーチン(赤、緑、回帰、エンドツーエンド)で閉じた少なくとも三つの保留項目、ブロックの緑の完全なエンドツーエンドのテスト群、そしてあなたの人間によるテストから出た保留項目。
典型的な誤り。 数字も赤もなしに「テストは通る」を受け入れること。エンドツーエンドテストをシミュレーションに置き換えてテスト群が「加速」されるのを受け入れること。保留項目を開かずに「テストできない」を通すこと。そしてあなたが使わずにブロックを閉じること:人間の目は委任できない。
ガイドプロジェクトでは。 二重予約の赤はこう見える:エージェントが一時的にルールを外し、テストを実行し、出力は二つ目の予約が保存されたためテストが失敗したと言う。ルールを戻し、実行し、緑。次に回帰:PND-001とPND-002のテストは緑のまま。そしてエンドツーエンド:プログラムから制御されたブラウザがフォームを埋め、「保存」を押し、「その時間は既に埋まっています」のメッセージを読み、データベースへのクエリがその時刻の予約が一つだけであることを確かめる。ブロックの締めに、エンドツーエンドのテスト群は存在する三つのフロー(当日を見る、登録、キャンセル)を辿り、責任者が十のテスト予約を登録して、時刻が使いにくいドロップダウンで選ばれることを発見する。新しい保留項目。その報告を初めて見たとき、方法全体が何のためかわかるだろう。
2026年10月19日に変わったこと(D-037)。 新規プロジェクトの最初のブロックには以前のコードがありません。新しいテストはモジュールが存在しないから失敗するだけで、その赤は何も証明しません。この日から、以前のバージョンにモジュールがないときは、赤をミューテーションで証明します。エージェントは書いたばかりの関数に意図的な欠陥を植え、その欠陥に対してテストが赤になるところを見せ(レシートに diff が付く)、元に戻して緑を見せます。Forge では「ファイルが読み込めない」としか言わない赤では、もう保留項目を閉じられません。項目ごとにミュータントひとつ。コードベース全体のミューテーションテストは、引き続きレッスン 9 の任意の補強です。
理解すべきこと。 あなたはコードを読まない。それでよい。だがコードは存在し、誰かがそれを保守する。誰も読まないなら、機械が見なければならない:*リンタ*(ワープロのスペルチェッカーのようなもの、ただしコード用)、*フォーマッタ*(全体に単一のスタイル)、ファイルと関数の大きさの上限、*複雑度*の上限(一つの関数がいくつの経路を持つか)、重複したコードと死んだコードの検出、そして*ラチェット*付きのテストの*カバレッジ*(今日のものが明日の床)。すべて継続的インテグレーションの中で、違反したら赤に。私はそれを自分のすべてのプロジェクトでやってきた。ある監査は、どの上限も止めなかったせいで二千行を超えるコンポーネントを返してきた Ref. 41。
プロンプトを送る前に、あなたの手で:
docs/peldanos/ にある)の最初のプロンプトを、空欄にあなたの上限を入れて貼る。docs/CODE_QUALITY.md を読む。今日失敗しているもののリストがあるはずだ。何を今すぐ直し(それぞれ一つの保留項目)、何を日付付きで許容するかを決め、同じファイルに書く。プロンプトを送る前に(ルーチンの):あなたの決定の入った、読み終えた docs/CODE_QUALITY.md と、docs/WORKING_AGREEMENT.md。
docs/WORKING_AGREEMENT.md:」で包んで約束に追加する。完全性の検証。 連鎖の最後の実行は品質が緑か。ブランチの試しは赤になったか。リンタへの例外はあるか、そしてそれぞれに書かれた理由があるか。今日のカバレッジは昨日のもの以上か。
成果物。 連鎖の中の品質のゲート、上限と値の入った docs/CODE_QUALITY.md、そして約束の中のルーチン。
典型的な誤り。 エージェントが「このルールは厳しすぎるので無効にしよう」とするのを、あなたを通さずに許すこと。通すために上限を引き上げること。そしてカバレッジと品質を混同すること:カバレッジはテストを数え、レッスン8の赤はそれが何かを証明しているかを言う。
任意の補強。 ブロックが閉じたら、第9段の契約には三つ目のプロンプト、*ミューテーションテスト*のものがある:道具が、一度に小さな変更を一つずつ、コードをわざと壊し、それらの誤りをテストがいくつ捕まえるかを数える。カバレッジが与えない尺度であり、エージェントが赤を装えるという反論に答えるものだ。Turneraでは二つ目のブロックの締めに、変更された行だけについてこれを行う。
ガイドプロジェクトでは。 Turneraの最初の実行は三つで赤になる:予約のフォームに70行の関数がある(二つに割る:保留項目)、日付の書式の写しが二つある(一つに、サーバーの中に:保留項目)、そしてカバレッジが61%。ラチェットは61に置かれ、各保留項目とともに上がる。ブロックの締めには74%。
理解すべきこと。 ここまで見てきたテストはすべてモデルが書きモデルが走らせ、モデルが理解したことを検証する。欠けているのは、人が自分の目と自分の手で、*台本*に従って行うテストだ:前提条件、手順、期待される結果、そして各実行を書き留める表を持つ、手動テストケース。台本はエージェントが各保留項目とともに、受け入れ基準から書く。実行するのはあなた(または担当者)で、各ブロックの締め、最初のデプロイの前、そして各デプロイの後に。そして失敗したものは、あなたの言葉とともに、修正の保留項目としてループへ戻る。台本付きの人間の目であり、プロセスの図の円環の閉じだ:手動実行が要件を再注入する。
プロンプトを送る前に、あなたの手で:
docs/MANUAL_TESTS.md が作られていること。空でも構わないが、ヘッダに書式とともに(第10段の契約から写す)。プロンプトを送る前に(実行の):ケースごとにファイルに書き留めたあなたの実行と、最後に置いた単独の所見。
完全性の検証。 聞かずにケースを追えたか。画面に触れる閉じた保留項目はそれぞれケースを持っているか。各ケースは画面の向こう側で何を検証するかを言っているか。実行は各ケースに日付と名前を持っているか。各失敗はあなたの言葉とともにその保留項目を持っているか。
成果物。 ブロックのフローごとに一つのケースを持つ docs/MANUAL_TESTS.md、記録された最初の実行、そして失敗ごとに一つの保留項目。
典型的な誤り。 エージェントにケースを実行済みと印させること。自動テストを散文に写しただけのケース。そして失敗をその場で、保留項目なしに直すこと:あなたの言葉と、何が繰り返されているかの痕跡が失われる。
ガイドプロジェクトでは。 Turneraの最初のブロックのケースは六つ:当日の予約台帳を見る、予約を登録する、重複予約を試す、キャンセルする、患者を検索する、患者を新規登録する。最初の実行で二つ失敗する:キャンセル(ページを再読み込みするまで予約台帳が更新されない。担当者の所見:「キャンセルされなかったのかと思った」)と検索(同じ姓の患者が二人いると一人しか表示されない)。二つの修正の保留項目、彼女の言葉とともに。どのテストも見なかった時刻の使いにくいドロップダウンメニューは、単独の所見として現れる。
理解すべきこと。 システムの一方の端(サーバー、データベース、ロボット)を変えたら、もう一方の端(画面、カウンタ、レポート)も同じコミットで変わらなければならない。さもなければ乖離し、ユーザーは一方である数字を、他方で別の数字を見る Ref. 26。それを防ぐ原則は言うのは簡単で保つのは難しい:すべてのリストには一人の所有者しかいない。予約の可能な状態、レポートの列、何かが待つ理由:一つの部分(生産者)だけがそれを定義し、他はそこから読む Ref. 27。セマンティックツリーはそのリストが最初に宣言される場所だ。コピーが二つあった途端、一方は古い。どちらかを知るだけだ。
レッスンの後半はアンチパターンの記録(GOTCHAS):既に一度食らった誤りを、その匂い、根本原因、修正、事前の検知法とともに記したもの Ref. 2。重要なのは記すことではない:それを検知する自動検証を追加することだ。記されたが自動化されていないアンチパターンはセッションが変われば繰り返すからだ。
課題。
プロンプトを送る前に、あなたの手で:
docs/SEMANTIC_TREE.md が最新であること:リスト(状態、種類、理由)はそこで宣言されていて、地図は木と一致しなければなりません。Build
docs/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. If there are parts of the system you cannot access or do not understand, tell me instead of leaving them out of the map. Reply in my language.
docs/PRODUCER_CONSUMER_MAP.md を構築してください:システムのすべての契約(サービス、テーブル、ファイル形式、値のリスト)について、誰がそれを生産し誰が消費するか。アクセスできない、または理解できないシステムの部分があれば、地図から外す代わりに私に教えてください。私の言語で答えてください。
求めているのは、二つの側を持つ契約の目録、そして見えないものは省略するのではなく宣言すること。
プロンプトを送る前に(ルーチンのプロンプト):あなたが見直した地図(契約を一つ選んで、その両側があなたの知っているものかを確かめること)と docs/WORKING_AGREEMENT.md。
Add this routine to
docs/WORKING_AGREEMENT.md: "Before closing any change that touches a contract, look up every consumer in the map and update them in the same commit. Always prefer that the producer defines the list (columns, causes, states) and the consumer reads it, rather than each keeping its own copy. If the map does not have that relationship, add it."
このルーチンを docs/WORKING_AGREEMENT.md に追加してください:「契約に触れる変更を閉じる前に、地図で各消費者を探し、同じコミットで更新してください。常に、生産者がリスト(列、理由、状態)を定義し消費者がそれを読む方を、それぞれが自分のコピーを持つより優先してください。地図にその関係がなければ、追加してください。」
プロンプトを送る前に:一度目の保留項目かコミットを、docs/PENDING.md の閉じたものの中からあなたが突き止めて、プロンプトと一緒に貼れるようにしておくこと(その参照がなければ、アンチパターンは一般的なものになります)。そして docs/GOTCHAS.md を、空でも、見出しに形式(匂い、根本原因、直し方、どう早く気づくか)を書いて作っておくこと。
This has happened to us before. Record it in
docs/GOTCHAS.mdwith: how it smells (the early sign), the root cause, the fix, and how to detect it next time before it hurts. And add, if possible, a test or an automatic check that detects it.
これは以前にも起きました。docs/GOTCHAS.md に記録してください:どう匂うか(早期の兆候)、根本原因、修正、そして次回痛む前にどう検知するか。そして可能なら、それを検知するテストまたは自動チェックを追加してください。
完全性の検証。 地図から契約を一つ選ぶこと:各消費者は生産者からそれを読むか、自分のコピーを持つか? 二つの画面に表示される数字があり、同じか? エンティティの状態はコードとセマンティックツリーで一致するか? GOTCHASの各項目に四つの部分があるか? 既に記されたものが繰り返されたか?
提出物。 docs/PRODUCER_CONSUMER_MAP.md、約束の中のルーチン、そして docs/GOTCHAS.md (一項目だけで始まっても)。
典型的な誤り。 地図を一度作って二度と見ないこと:新しい契約ごとに育たなければならない。「事前にどう検知するか」の部分なしに、アンチパターンを逸話(「一度こんなことがあって…」)として記すこと。そして定番:サーバーと画面に手書きされた同じ状態のテキスト。一方が変わる日、他方は残る。
ガイドプロジェクトでは。 Turneraの地図には、最初、四つか五つの契約がある:予約状態のリスト(サーバーが定義し、画面と月次レポートが読む)。予約テーブル(登録が書き、当日の予約台帳とレポートが読む)。患者テーブル。そして後に、メッセージのキュー(予約台帳が書き、送信者が読む)。最初のGOTCHAはたいてい日付のもの:サーバーがあるタイムゾーンで保存し画面が別のタイムゾーンで表示したため、予約台帳が予約を間違った日に表示した。匂い:「23時の予約が明日に出る」。根本原因:二つのタイムゾーン。修正:一つだけ、サーバーで。検知:23:30の予約のテスト。
理解すべきこと。 コードを読まないのなら、エージェントの報告は信頼できなければならず、それは自然には起きない。モデルは役に立ち完全であるよう訓練されており、「これは検証できなかった」と言う報告は「完了」と言う報告より役に立たないと感じられる。だから悪い知らせ、盲点、やらなかったことを明示的に求めなければならない。求めなければ、くれない。隠すからではなく、答えの一部と考えないからだ。私は認証エラーを「success」という表示で報告された Ref. 43。
それを誠実にする構造は三つのブロックだ:検証済み(隣に証拠付き)、信じている(動くと思うこととなぜテストしなかったか)、盲点(いる場所から見えないもの)。そして一つのルール:悪い知らせを最初に。
課題。
プロンプトを送る前に、あなたの手で:
docs/WORKING_AGREEMENT.md、ルーチンが入る先。Add this routine to
docs/WORKING_AGREEMENT.md: "When you report, separate three blocks: VERIFIED (what you tested, with the command and its output), BELIEVED (what you think works but did not test, and why not), and BLIND SPOTS (what you cannot see from where you are: another environment, real data, the user's browser). Cover every item I asked for, one by one, even when the answer is 'I did not do it'. No claim without its proof next to it. Do not say 'done': say what is done and how you know it. If something went wrong, say it first."
このルーチンを docs/WORKING_AGREEMENT.md に追加してください:「報告するときは三つのブロックに分けてください:検証済み(テストしたこと、コマンドとその出力付き)、信じている(動くと思うがテストしなかったこと、そしてなぜか)、盲点(あなたのいる場所から見えないもの:別の環境、実データ、ユーザーのブラウザ)。私が頼んだ各項目を一つずつ網羅してください。答えが『やらなかった』でも。隣に証拠のない主張はなし。『完了』と言わないでください。何が完了し、どうしてそれを知っているかを言ってください。何かがうまくいかなかったなら、最初に言ってください。」
プロンプトを送る前に:あなたの検証を書き留めたもの(どのURLで見たか、システムがどのバージョンを表示するか、何をして、何を期待し、何が起きたか)、そしてエージェントが直しを含むと言ったコミットかバージョンを、その報告から写したもの。それがなければ「まだ壊れている」はただの印象です。
Before diagnosing again, compare the version running where I see the problem with the version that contains your fix. Tell me both. If they differ, the problem is publication, not code.
再び診断する前に、私が問題を見ている場所で動いているバージョンと、あなたの修正を含むバージョンを比べてください。両方を教えてください。違うなら、問題はコードではなく公開です。
「まだ壊れている」の半分は、リポジトリにはあるがあなたが見ている場所にない修正だ Ref. 45。この条項は何時間も節約する。
完全性の検証。 三つのブロックはあるか?「検証済み」から無作為に主張を一つ選び、隣に証拠があり、再現できたか? 頼んだ各項目を網羅しているか? 悪い知らせは最初にあるか? そっけなく「完了」と言ったことがあるか?
提出物。 約束の中のルーチンと、三つのブロックを持つ三つの連続した報告、うち一つは実際の盲点付き。
典型的な誤り。 「検証済み」ブロックだけ読んで他の二つを飛ばすこと:他の二つがあなたを守るものだ。「検証済み」の中の「動くはず」を受け入れること:変装した「信じている」だ。そしてだんだん長くなる報告に慣れること:膨らんだ報告は量で何かを覆っている。
ガイドプロジェクトでは。 TurneraのPND-004(予約のキャンセル)の良い締めの報告:「検証済み:キャンセルのテストが通る(1/1、削除していたバージョンに対して赤で証明)。回帰6/6。フロー『キャンセル』のエンドツーエンドが緑、データベースで印された行付き。テスト環境で、 11月3日の予約17が『recepcion1』により10:42にキャンセル済みと表示(スクリーンショット)。信じている:月次レポートはキャンセルを正しく数えるはずだが、レポートはPND-011でまだ存在しないためテストしていない。盲点:受付係の携帯で状態『キャンセル済み』がどう見えるかは見られない。あなたが試してください。」
この八つのレッスンは「動く」を「維持できる」に変えるもので、一度、順に行う。最初の二つのブロックがループで構築され、あなたがテスト環境でテストした後、そしてシステムが世界に作用する(メッセージを送る、請求する)か実ユーザーを持つ前に。ガイドプロジェクトでは、リマインダーと手付金を追加する時点であり、だからレッスン14(錠)はその機能を構築する前に来る。後ではない。運用品質の四つ(16から19)は私が名前を付けずにやっていたものだ。初心者なら、その契約にはそれぞれ、その言葉を説明する「初心者の方へ」の段落がある。レッスンの前に読むこと。
理解すべきこと。 ときどきシステム全体を新鮮な目で見なければならず、見えたものは保管される報告には行かない:保留項目のリストに行く。重要なのは「新鮮な目」:監査する者は構築した者であってはならない。前提を共有するからだ。モジュールを構築したモデルは、コードに書かれたパスワードが暫定だったと「知っている」。初めて見るモデルはそれをそのまま報告する。こうして構築者が一日で残した二つの管理者の扉が見つかった Ref. 40。別の会社は要らない:参加していない、別の指示ファイルを持つ別のセッションで足りる。
課題。
プロンプトを送る前に、あなたの手で:
Audit this system for [integrity, security, performance and code quality]. Read-only: change nothing except writing your report to
docs/AUDIT_[date].md. If auditing some part requires access you lack (the database, the log, an environment), tell me and mark that part as not audited; do not pass it as fine. Go through all of the code, not a sample. For every finding: where it is (file and line), what the risk is, what evidence proves it (the command, the query, the number), and its priority: P0 must be fixed now, P1 soon, P2 when possible. Give a grade to every dimension you audited. End with the list of P0 findings turned into proposed pending items. Reply in my language.
このシステムを[整合性、セキュリティ、性能、コード品質]について監査してください。読み取り専用:docs/AUDIT_[日付].md に報告を書く以外は何も変えないでください。ある部分の監査にあなたが持っていないアクセス(データベース、ログ、環境)が必要なら、私に教えてその部分を未監査と印してください。問題なしとして通さないでください。サンプルではなくすべてのコードを調べてください。各発見について:どこにあるか(ファイルと行)、リスクは何か、どの証拠がそれを証明するか(コマンド、クエリ、数字)、そして優先度:P0は今すぐ修正、P1は近いうちに、 P2は可能なときに。監査した各次元に評点を付けてください。P0の発見を提案保留項目に変換したリストで終えてください。私の言語で答えてください。
求めているのは、読み取り専用、監査できなかったものを省略によって承認する代わりに宣言すること、サンプルではなくすべてのコード、各発見に位置・リスク・証拠・優先度、次元ごとの評点、そしてP0は既に提案保留項目として。
プロンプトを送る前に(締めのプロンプト):あなたが読んだ報告書、監査者とともに検証した二つの発見、そして開いた構築者のセッション(このプロンプトは監査者ではなく構築者に行きます)。空欄にはファイルの日付を入れて。
Read
docs/AUDIT_[date].md. Open one pending item for every P0 and P1, citing the finding. If you disagree with any of them, tell me with the evidence against; do not ignore it.
docs/AUDIT_[日付].md を読んでください。各P0とP1について、発見を引用した保留項目を一つ開いてください。どれかに同意しないなら、反証とともに私に教えてください。無視しないでください。
完全性の検証。 報告は何を監査できなかったかを言っているか? 無作為の二つの発見にファイル、行、再現可能な証拠があるか? 各P0に開かれた保留項目があるか? 評点は次回の監査と比べられるか? 構築したのとは別のセッションが監査したか?
提出物。 docs/AUDIT_[日付].md と開かれたP0/P1の保留項目。
典型的な誤り。 構築したのと同じセッションで監査すること:自身の前提を確認する。一か月以上のシステムでP0が一つもない報告を受け入れること:ほとんどの場合真実ではない。そして保留項目を開かずに報告を保管すること:そこで監査は何の役にも立たなかった。
ガイドプロジェクトでは。 Turneraの最初の監査がよく見つけるもの:ログ内の患者データ(メッセージ送信時に印字された電話番号:P0)。インデックスなしの名前による患者検索(P1、 5,000人の患者で気づく)。日付が未来であることを検証しない予約フォーム(P1)。そして既知の脆弱性のある依存関係(P1)。四つの新しい保留項目、すべてファイルと行付き。
理解すべきこと。 ソフトウェアは既定で、疑いの前で進む:検証が失敗すればコードは続く。サービスが応答しなければ、すべて問題ないと仮定する。「フェイルオープン」、停電したとき開く扉のようなものだ。方法は既定を逆転する:疑わしきは、しない。帰結のあるすべての行動(請求、送信、削除、承認)は錠を持ち、書かれた戻り道を持ち、新しい自動化はすべて、あなたが有効化するまで、したはずのことを記録しながらドライランモードで始まる。私の最初のシステムに設置した錠が模範だ Ref. 28。
このレッスンは世界に作用する機能を構築する前に来る。Turneraでは、三つ目のブロックであるリマインダーと手付金の前に。
課題。
プロンプトを送る前に、あなたの手で、オーナーとともに:
docs/CONSEQUENTIAL_ACTIONS_SURVEY.md:システムが請求し、送信し、承認し、削除し、外部の誰かに通知することで何をするか、またはすることになるか。そして各行動について、二度行われたらどうなるか、間違って行われたらどうなるか、どう取り消すか、誰がそれをできるべきか。セマンティックツリーのプロセスが出発点のリストを与えます。プロンプトはこれを「the survey of consequential actions」とパスなしで呼びます:どこにあるかを言うこと。docs/SEMANTIC_TREE.md、最新のもの。We are going to decide which actions of the system need a lock. Read the survey of consequential actions, and go through the code looking for everything that charges, sends, approves, deletes or notifies outwards. Compare the two lists: if the code has actions the survey does not mention, or the other way round, ask me before going on. For every action propose: whether it is reversible, which lock it gets (explicit confirmation, double safety, dry-run mode, daily limit, a human in the loop), and what the way back is if it goes wrong. General rule: on any doubt or failure along the way, the action is NOT executed and the reason is logged. Present me the table; I confirm lock by lock. Reply in my language.
システムのどの行動に錠が必要かを決めます。帰結のある行動の調査を読み、コードを調べて請求し、送信し、承認し、削除し、外へ通知するものすべてを探してください。二つのリストを比べてください:調査が言及しない行動がコードにあるか、その逆なら、先へ進む前に私に聞いてください。各行動について提案してください:可逆か、どの錠を付けるか(明示的な確認、二重の安全装置、ドライランモード、日次上限、回路内の人間)、そしてうまくいかなかったときの戻り道は何か。一般ルール:途中で疑いや故障があれば、行動は実行されず、理由が記録される。表を私に提示してください。私が錠ごとに確認します。私の言語で答えてください。
求めているのは、事業が言ったこととコードがすることを比べること(誰も覚えていなかった行動がそこに現れる)、差異は質問すること、そして各行動に可逆性、錠、戻り道を、書かれたフェイルクローズドのルールとともに。
プロンプトを送る前に(締めのプロンプト):表の各行について、あなたの確認か変更を、プロンプトの空欄のために書き出したもの。判定のない行がないこと。確認されていない錠は、実装されない錠です。
I confirm locks [list]; change [X] to [Y]. Implement them with one test per lock that proves that, under the doubt condition, the action does NOT happen (proved red against the version without the lock). Record the final table in
docs/LOCKS.md. And for any new automation: dry-run mode first, logging what it would have done, until I enable it.
錠[リスト]を確認します。[X]を[Y]に変えてください。錠ごとに一つのテストで実装してください。疑いの条件下で行動が起きないことを証明するテストです(錠のないバージョンに対して赤で証明)。最終の表を docs/LOCKS.md に記録してください。そして新しい自動化はすべて:まずドライランモードで、何をしたはずかを記録し、私が有効化するまで。
完全性の検証。 請求し、送信し、承認し、削除する各行動は表にあるか? 各錠に赤のテストがあるか? すべての不可逆な行動に書かれた戻り道があるか? 新しい自動化はドライランモードで始まり、有効化する前に記録を見たか?
提出物。 docs/LOCKS.md、赤で証明された錠ごとのテスト、そして記録付きのドライランモードの自動化。
典型的な誤り。 「自分の電話へのメッセージでテストするため」に実際の送信を有効化すること:ドライランモードはまさにそのためにある。「テスト用」パラメータで飛ばせる錠:そのパラメータは本番に残る。そして「したはず」の記録を見ないこと:患者に届く前に誤りを見る唯一の窓だ。
ガイドプロジェクトでは。 Turneraの錠の表:リマインダーの送信(不可逆。錠:予約ごとの冪等性、予約とチャネルごとに一回の送信、一日200の上限、まずドライランモード。戻り:なし、だから上限)。手付金の請求(返金で可逆。錠:受付係の明示的な確認、専門職が定めた金額。戻り:決済プロバイダによる返金)。予約のキャンセル(患者にとって不可逆。錠:確認と誰がの記録。戻り:予約の再作成)。患者の削除(不可逆。錠:二重確認、責任者のみ、将来の予約がない場合のみ。戻り:なし、だから二重)。各錠に、錠なしでは行動が起きたことを示すテスト付き。
理解すべきこと。 本番に至ることは再現可能なパッケージでなければならない:テストは一度 走り、デプロイはパッケージしてアップロードするだけ、設定はリポジトリではなくサーバーに住み、テストから本番へ昇格する二度実行できる手順があり、ロールバックは試されている(一度も試されていないロールバックは存在しない)。私はコミットごとに三度走るテストで継続的インテグレーションのクォータを燃やした Ref. 39。秘密については、例外のないルール:チャット、ログ、コミットで見られた秘密はもう秘密ではない。ローテーションする、以上 Ref. 42。
この大半は骨組み(レッスン4)から既に持っている:継続的インテグレーションとテストへのデプロイ。このレッスンはそれを本番へ向けて完成させる。
課題。
プロンプトを送る前に、あなたの手で:
docs/ENVIRONMENTS_SURVEY.md(レッスン4)を、本番に足りないもので補完したもの:ドメインと誰がそれを管理するか、秘密がどこに住むか、どれがあるか(名前だけ、決して値ではなく)、誰が本番に触れられるか、今日ならどうロールバックするか、そして継続的インテグレーションのクォータがどれだけあるか(GitHub Actionsを使うなら、プランの上限を確認すること)。プロンプトはこれを「the environments and access survey」と呼びます:どこにあるかを言うこと。We are going to close the path to production. Read the environments and access survey. Evaluate whether you have what is needed to deploy to production safely (access, domain, where the secrets live, how to roll back); if anything is missing, ask me. Then set up: (1) continuous integration runs the full test suite exactly once per commit; (2) the deployment waits for that run's result and only packages and uploads, without running tests again; (3) each environment's configuration lives on the server (environment file or vault), never in the repository; (4) a written procedure to promote from the test environment to production, which can be run twice without breaking anything; (5) the rollback, tested; (6) an automatic check that prevents committing a secret. Document all of it in
docs/DEPLOYMENT.mdso that a person can do it by hand without you. Reply in my language.
本番への道を締めます。環境とアクセスの調査を読んでください。本番へ安全にデプロイするのに必要なもの(アクセス、ドメイン、秘密がどこに住むか、どうロールバックするか)があるか評価してください。何か欠けていれば、私に求めてください。次に組んでください:(1) 継続的インテグレーションは完全なテスト群をコミットごとに正確に一度実行する。(2) デプロイはその実行の結果を待ち、テストを再実行せずにパッケージしてアップロードするだけ。(3) 各環境の設定はサーバー上(環境ファイルまたは金庫)に住み、決してリポジトリにはない。(4) テスト環境から本番へ昇格する書かれた手順、何も壊さず二度実行できるもの。(5) ロールバック、試されたもの。 (6) 秘密のコミットを防ぐ自動チェック。すべてを docs/DEPLOYMENT.md に、人があなたなしで手でできるように文書化してください。私の言語で答えてください。
求めているのは、始める前のアクセス、コミットごとに一度だけのテスト、パッケージするだけのデプロイ、外の設定、繰り返し可能な昇格、試されたロールバック、秘密に対する錠、そして人のための文書化。
プロンプトを送る前に(ルーチンのプロンプト):書かれていて、あなたが読んだ docs/DEPLOYMENT.md(あなた一人でそれに従えますか?)と docs/WORKING_AGREEMENT.md。
Add this routine to
docs/WORKING_AGREEMENT.md: "Before touching production: the test environment is green with the same version; the rollback is ready; and tell me what changes in the configuration. After deploying: show me the version running in production and an end-to-end check on production, read-only."
このルーチンを docs/WORKING_AGREEMENT.md に追加してください:「本番に触れる前に:テスト環境が同じバージョンで緑である。ロールバックの準備ができている。そして設定で何が変わるかを私に教えてください。デプロイ後:本番で動いているバージョンと、本番に対する読み取り専用のエンドツーエンド検証を見せてください。」
プロンプトを送る前に:特定された秘密(その名前、決して値ではなく)、どこにいつ現れたか、そしてそれが生成される管理画面へのあなたのアクセス、エージェントが独りで回せない場合に備えて。このプロンプトは「あとで」送るものではありません。
That secret is compromised: rotate it now, tell me everywhere else it was used, and add the check that would have caught it.
その秘密は漏洩しました:今すぐローテーションし、他にどこで使われていたか私に教え、それを捕まえたはずのチェックを追加してください。
完全性の検証。 コミットごとにテスト群は何度走るか?(一度。リンクを求める。)リポジトリに実際の設定値があるか?(空の検索結果を求める。)あなた一人で docs/DEPLOYMENT.md を追えるか? ロールバックは試されたか、いつ、どんな証拠で? チャットに現れたすべての秘密はローテーションされたか? 継続的インテグレーションのクォータがどれだけ残っているか知っているか?
提出物。 コミットごとに一度の継続的インテグレーション、パッケージするだけのデプロイ、 docs/DEPLOYMENT.md、試されたロールバック、有効な秘密対策の錠、そして本番で動くシステム(まだユーザーなし)。
典型的な誤り。 「手で、素早く、小さな変更だから」のデプロイ:小さな変更こそ本番を壊す。誰もテストしないからだ。本物に見える値を持つ設定の例ファイル(本物だ)。そして必要になる日までロールバックを試さないこと。
ガイドプロジェクトでは。 Turneraでは、継続的インテグレーションがプッシュごとにテスト群(この時点で約30テスト、六つのエンドツーエンドフローを含む)を走らせる。テストへのデプロイは main へのマージで自動。本番への昇格はテストにあるバージョンをパッケージしてアップロードするコマンドで、設定(メッセージプロバイダの鍵、決済プロバイダの鍵、データベースの URL)はリポジトリにないサーバー上の環境ファイルにある。ロールバックは前のバージョンでの同じコマンド。そして秘密対策の錠は、鍵に見えるものを拒否するコミットごとの検証だ。
理解すべきこと。 本番で何かが失敗したとき、あなたはコードを開かず、エージェントに「調べて」と頼まずに何が起きたかを知りたくなる:一つの番号を探して、その行動の完全な歴史が、画面からデータベースまで現れること。それが*相関識別子*を持つ*構造化された記録*だ。そして調べているあいだ、一分だけ、システムが書く詳細さを、再デプロイせずに上げたくなる:それが*設定可能なレベル*だ。*トレーサビリティ*はもう半分だ:帰結のあるすべての行動(請求した、送信した、削除した)が、アプリケーションの編集できないリストに、誰が、いつ、何をとともに残る。これがなければ、レッスン23の常駐エージェントは盲目で運用し、レッスン21と22の監視は見るものを持たない Ref. 16。
プロンプトを送る前に、あなたの手で、オーナーとともに:
docs/DEPLOYMENT.md(レッスン15)、環境ごとの設定がどう読まれるかとともに:レベルはもう一つの変数になります。docs/LOCKS.md(レッスン14):監査に残らなければならない行動のリスト。docs/INITIAL_SURVEY.md に、どのデータが個人データかのリスト(Turneraでは:患者の氏名、電話番号、メールアドレス、証明書番号)、責任者と一緒に書いたもの。記録はそれらを伏せなければなりません。法的な義務です。docs/peldanos/ にある)の最初のプロンプトを、そのまま貼ること。プロンプトを送る前に(ルーチンのプロンプト):あなたが読んだ docs/OBSERVABILITY.md、そしてあなた自身が一度レベルを上げて下げたこと。
docs/WORKING_AGREEMENT.md:" で包んで約束に加えること。完全性の検証。 あなた自身が識別子をすべての層を通って追いましたか? デプロイせずにレベルを変えましたか? 記録の中に個人データがありますか? テストでの予約のキャンセルは、誰が、いつとともに監査に残りましたか? docs/OBSERVABILITY.md だけで一人で記録を見つけられますか?
提出物。 設定可能なレベルを持つ構造化された記録、伝播した識別子、帰結のある行動の監査、 docs/OBSERVABILITY.md、そして約束の中のルーチン。
典型的な誤り。 モジュールごとに違う書き方の「ログ」を受け入れること。本番を「今のところ」デバッグのままにすること。そして識別子がリマインダーの夜のジョブに届かないこと。インシデントが失われるのはまさにそこだ。
ガイドプロジェクトでは。 「予約17をキャンセルする」の識別子が、クリックに、サーバーに、データベースの印の付いた行に、そして専門職へのメールに現れる。監査は「recepcion1が10:42にその日の予約台帳から予約17をキャンセルした。結果:ok」と言う。責任者は、あるリマインダーがなぜ遅れたかを見るためにレベルをトレースに上げ、見つけて、下げる。
理解すべきこと。 データベースはシステムがゆっくり死ぬ場所だ:百件の予約ではよく、十万件では悪く。*インデックス*は本のそれと同じだ:なければ、一つの予約を見つけるためにデータベースはテーブル全体を読む。*N+1ループ*とは、百件の予約を表示するのに一回ではなく百回クエリをすることだ。このレッスンはレッスン7をデータベースに当てる:各クエリをテスト付きの計器で計測し、数字が言うことを変え、同じデータの上で計測し直し、戻ってこないようにテスト付きの予算を残す Ref. 18、Ref. 37。データベースを書き直すことでもエンジンを変えることでもない:それはレッスン3だった。
プロンプトを送る前に、あなたの手で:
docs/SIZING.md と docs/VOLUME_SURVEY.md(レッスン3):読み込むべき量。docs/PRODUCER_CONSUMER_MAP.md(レッスン11)、最新のもの。プロンプトを送る前に(締めのプロンプト):変更ごとのあなたの判定の付いたリストと、一致したやり直しの計算。
完全性の検証。 あなたの実行は docs/PERSISTENCE.md の表と一致しますか? 重要なフローの中にテーブル全体を読むクエリが残っていますか? 各テーブルに保持が書かれていますか? 予算にテストがありますか(一つ超えて赤を見せるよう求めること)?
提出物。 テスト付きの計器、前と後の付いた docs/PERSISTENCE.md、テスト付きの予算、そして緑のテスト群。
典型的な誤り。 骨組みの十件の記録で計測すること。「別のデータベースへ移行したほうがいい」を受け入れること。そしてそのテーブルを読んでいた月次の集計表を壊して数字を良くすること:地図が抜けていた。
ガイドプロジェクトでは。 その日の予約台帳は予約ごとに一つのクエリをしていた(レッスン7のループ):50件の予約に52のクエリが3になる。氏名による患者の検索はテーブル全体を読んでいた:インデックスが、一万人の患者で800ミリ秒を4ミリ秒に下げる。保持:メッセージは一年で書庫に入れ、予約は決して入れない。予算:予約台帳に4クエリ、テスト付きで。
理解すべきこと。 *脆弱性*とは、誰かが侵入したり、データを盗んだり、システムに本来すべきでないことをさせたりするのに使える欠陥だ。監査(レッスン13)はそれを判断力で、ときどき探す。このレッスンは機械で、いつも、四つの層で探す:*依存関係*(あなたのシステムが使う他人の部品、その既知の欠陥は公開されている)、コード(*静的解析*)、リポジトリの履歴の中の秘密、そしてサーバーの設定。そして一つのルール:依存関係を更新することは変更であり、ループを通る。回帰なしの「発見を閉じるためにバージョンを上げた」は、金曜日に本番を壊す最もよくある形だ Ref. 41、Ref. 23。
プロンプトを送る前に、あなたの手で:
docs/ENVIRONMENTS_SURVEY.md、サーバー、ポート、誰がドメインを管理するかとともに。docs/AUDIT_[日付].md(レッスン13)。既知のものを繰り返さないために。docs/SECURITY_[日付].md を読むこと。発見を二つ選んで証拠を求めること。何を走査しなかったか言っていますか?プロンプトを送る前に(締めのプロンプト):承認した修正のリスト。各依存関係の更新については、回帰とエンドツーエンドが走ることになるという自覚。
完全性の検証。 走査の最後の実行は緑で、いつのものですか? 各P0に証拠とともに閉じられた保留項目がありますか? 走査は docs/GATES.md のゲートですか? 次の予定された走査がいつ走るか知っていますか?
提出物。 連鎖の中と暦とともにある四つの層の走査、docs/SECURITY_[日付].md、 docs/SECURITY.md、直されたP0とP1、そしてゲート。
典型的な誤り。 一か月以上のシステムでの「一度目できれい」な走査:層が一つ抜けていた。一つのコミットで十の依存関係を更新すること。保留項目も日付もない「受け入れられた」P0。
ガイドプロジェクトでは。 Turneraの走査はこう見つける:PDF生成器の依存関係に既知の脆弱性(P1、回帰とエンドツーエンドとともに更新する)。予約台帳を別のサイトに埋め込ませないヘッダが欠けている(P1、設定一行、テスト付きで)。支払いの提供者のテスト用の鍵がリポジトリの履歴にある(P0:テスト用でもローテーションする)。そしてテスト用サーバーでデータベースのポートが世界に開いている(P0:閉じる)。走査はゲートとして残り、月曜日に走る。
理解すべきこと。 レッスン3は計算でサイジングした。これは動いているシステムでそれを確かめる。*負荷テスト*は多くの利用者を同時に模擬する。見るのは*スループット*(一秒あたりの行動)、 *レイテンシ*(各行動にかかる時間。中央値と、苦情を言う人が見ている*95パーセンタイル*)、そしてエラー率を、期待される量と「十倍」で。その後、何かが壊れるまで負荷を上げる:*破断点*は「遅くなる」ではなく「180ユーザーでデータベースへの接続が尽きた」だ。その数字がこの区間で最も役に立つ。そこからレッスン21の警報の*閾値*が出るからだ Ref. 12、 Ref. 44。
プロンプトを送る前に、あなたの手で、オーナーとともに:
docs/SIZING.md、期待される量と「十倍」とともに:Turneraなら、ピークで二人の利用者と一日四十件の予約。十倍なら二十人の利用者と四百件の予約。docs/ENVIRONMENTS_SURVEY.md に書き留めること。docs/PERFORMANCE_[日付].md を読むこと:その日の予約台帳は期待される量で二秒に収まりますか? 十倍では? 最初に何がどの負荷で壊れましたか?プロンプトを送る前に(締めのプロンプト):読んだ報告、「十倍」についての決定。
完全性の検証。 最もよく使われる画面は許容に収まりますか、またはその数字を持つ保留項目がありますか? 破断点は何がどの負荷で壊れたかを言っていますか? docs/PERFORMANCE.md の閾値は破断点の下、期待される量の上にありますか? テストはゲートで、最初の実行は保管されていますか?
提出物。 テスト付きの負荷スクリプト、docs/PERFORMANCE_[日付].md、閾値とゲートを持つ docs/PERFORMANCE.md、そしてボトルネックごとの保留項目。
典型的な誤り。 破断点なしの「十倍を問題なく耐える」:負荷を十分に上げていない。画面ではなくAPIを叩くスクリプト。「ついでに」テストのあいだにボトルネックを直すこと。
ガイドプロジェクトでは。 期待される量で予約台帳は300ミリ秒で応答する。十倍で1.4秒。400件のリマインダーの夜の送信は50秒かかる。破断点:同時180人の利用者で接続プール(10)が尽き、行動が失敗し始める。閾値:予約台帳が1.5秒を超えるか、使用中の接続が7を超えたら警報。保留項目:夜の送信を50件ずつのバッチに。責任者は本当に売りたいと思っているからだ。
理解すべきこと。 システムはエージェントなしで、あなたなしで、使い、保守し、復旧できなければならない。復旧マニュアルの基準は具体的だ:プログラミングをしない信頼できる人が、午前三時に、システムが落ちてエージェントが接続できない状態で、追えなければならない。ある手順が「開発者に相談」と言うなら、不完全だ。そしてモデルで文書を再生成するのは無料なので、ルールは「同じコミットで」になる:ユーザーが見るもの、オペレータがすること、デプロイ方法に触れる各変更は、同じコミットでマニュアルを更新する。その基準で私の最初のシステムのために書いたマニュアルが模範だ Ref. 24。
そして既に持っている源:閉じた保留項目。レッスン5が求めるように各締めを文書化したなら、ユーザーマニュアルはゼロから書かない:閉じた保留項目からブロックごとに組み立て、変更日誌はそこから直接出てくる。
課題。
プロンプトを送る前に、あなたの手で:
docs/WORKING_AGREEMENT.md、ルーチンが入る先。PROJECT.md に書くか、チャットで言うか。Add this routine to
docs/WORKING_AGREEMENT.md: "Every change that modifies what the user sees, what the operator does, or how the system is deployed, updates the corresponding manual in the same commit. At the close of every functional block, add to the user manual the screens and flows of the pending items closed in that block, with real screenshots from the test environment, and add their entries to the changelog. If you do not know which manual, ask."
このルーチンを docs/WORKING_AGREEMENT.md に追加してください:「ユーザーが見るもの、オペレータがすること、またはシステムのデプロイ方法を変えるすべての変更は、対応するマニュアルを同じコミットで更新します。各機能ブロックの締めに、そのブロックで閉じた保留項目の画面とフローを、テスト環境の実際のスクリーンショットとともにユーザーマニュアルに追加し、その項目を変更日誌に追加してください。どのマニュアルかわからなければ、聞いてください。」
プロンプトを送る前に(マニュアルのプロンプト):現実的なデータとともにテスト環境で動いているシステム(スクリーンショットはそこから出ます)、文書化とともに閉じられた保留項目(レッスン5)、最新の docs/DEPLOYMENT.md と docs/LOCKS.md、そして業務しか知らないことを、聞かれたときのために用意しておくこと:誰が何に責任を持つか、午前三時にどの電話にかけるか、誰がバックアップを取るか。
Generate three manuals from the system as it is today in the test environment: the user manual (screen by screen, with real screenshots, in the user's language, no jargon); the maintenance manual (how it is built, where everything is, how to run the test suite, how to add a module); and the infrastructure and recovery manual (how to deploy, how to roll back, how to restore a backup, what to do if it goes down; written for a person who has to do it by hand, without AI, at three in the morning). If for any section you need something only the business knows (who is responsible for what, which phone number to call), ask me; do not leave a gap and do not invent. Each manual carries a date and the system version. Reply in my language.
今日テスト環境にあるシステムから三つのマニュアルを生成してください:ユーザーマニュアル(画面ごとに、実際のスクリーンショット付き、ユーザーの言語で、専門用語なし)。保守マニュアル(どう構築されているか、すべてがどこにあるか、テスト群の実行方法、モジュールの追加方法)。そしてインフラと復旧のマニュアル(デプロイ方法、ロールバック方法、バックアップの復元方法、落ちたときに何をするか。AIなしで、午前三時に、手でやらなければならない人のために書かれたもの)。どこかの節に事業だけが知ること(誰が何の責任者か、どの電話番号にかけるか)が必要なら、私に聞いてください。穴を残さず、発明しないでください。各マニュアルは日付とシステムのバージョンを持ちます。私の言語で答えてください。
求めているのは、実際のスクリーンショット付きの三つのマニュアル、復旧マニュアルのための午前三時の基準、穴を残す代わりに事業だけが知ることを質問すること、そして日付とバージョン。
完全性の検証。 無作為のスクリーンショットは今日のテスト環境と一致するか? プログラミングをしない誰かが「落ちた」の節を追えたか? 画面を変えた最後のコミットはマニュアルに触れたか?変更日誌には閉じた各保留項目の項目があるか?「[要記入]」のような穴があるか? 各マニュアルはどのバージョンに有効か言っているか? オーナーはすべてのフローについて受け入れテストをしたか?
提出物。 日付とバージョン付きの三つのマニュアル、人によるテスト済み、そして閉じた受け入れテスト。
典型的な誤り。 マニュアルを一度生成して約束にルーチンを入れないこと:二か月後にはもう存在しない画面のスクリーンショットがある。「エージェントとのセッションを開く」で始まる復旧マニュアル。そして人によるテストをしないこと:価値のある唯一の検証だ。
ガイドプロジェクトでは。 Turneraのユーザーマニュアルは三つのブロックの閉じた保留項目から組み立てられたスクリーンショット付きの六つの画面を持つ。保守マニュアルは各モジュールがどこにあり、テスト群をどう実行するかを説明する。復旧マニュアルは順に、コマンド付きで言う:システムが落ちているかどう知るか、どう再起動するか、前のバージョンにどう戻るか、最新のバックアップ(毎晩取られる:それもこのレッスンから出る)からデータベースをどう復元するか、誰に電話するか。責任者はテスト環境でそれを追い、「データベースの復元」でつまずいた。コマンドが彼女の持っていないフォルダを前提としていたからだ。マニュアルが直された。
この三つのレッスンは本番への最初のデプロイとともに始まり、終わらない。二つの監視はそれとともに組み立てられ、それ以降は独りで走る。そして振り返りが各段階を締め、次の段階のために0へ戻る。
理解すべきこと。 レッスン19はある一日にシステムがどうふるまうかを言う。本番は毎日であり、データは増え続ける。*監視する*とは、機械で、いつも、*資源*の使用(プロセッサ、メモリ、ディスク、接続、メッセージの提供者のクォータ)と各関数、各クエリの応答時間を見て、何かが範囲外に出たら知らせることだ:*閾値*(レッスン19のもの)を超えているか、*基準線*(それまで出していた値)と大きく違うか。*警報*はその場で知らせる。*周期報告*は毎週か毎月、落ち着いて読む。ルールは二つ:誰も読まない警報は警報の欠陥だ。そして閾値は、計測された書かれた理由なしに、警報を黙らせるために上げない Ref. 37、 Ref. 39。
プロンプトを送る前に、あなたの手で、オーナーとともに:
docs/OBSERVABILITY.md(16)、docs/PERSISTENCE.md(17)、docs/PERFORMANCE.md(19)、締められたもの。プロンプトを送る前に(ルーチンのプロンプト):あなたが読んだ最初の報告。
docs/WORKING_AGREEMENT.md:" で包んで約束に加えること。完全性の検証。 引き起こした警報は届きましたか? 報告は各逸脱に原因か提案を持っていますか? 対応すると決めた逸脱ごとに、数字を基準とする保留項目がありますか? レッスン19から上がった閾値はありますか、どんな理由で? 報告はメッセージの提供者のクォータを見ていますか?
提出物。 歴史を持つ収集、警報、周期報告、docs/MONITORING.md、約束の中のルーチン。
典型的な誤り。 誰も読まない毎日の警報。「すべて正常」と言う三つ続きの報告。「知らせなくなるように」上げられた閾値。「診断のために」保存された個人データ。
ガイドプロジェクトでは。 Turneraの最初の月次報告はこう言う:ディスク40%、メモリは安定、その日の予約台帳は中央値320ミリ秒(基準線)、患者の検索は4から9ミリ秒に上がった(テーブルが育っている。範囲内)、メッセージのクォータは60%(提案:80%で知らせる)。逸脱が一つ:責任者の月次の集計表が1日に11秒かかった(提案:夜に先に計算しておく。保留項目)。
2026年10月19日に変わったこと(D-039)。 サイジングを再検証する測定には検証可能な期間を添えます。データベースから読んだ最初と最後のレコードであって、手で入力した数字ではありません。練習では、3 年分の 30,000 行を 1 年分として渡したために誤報が出ました。手入力の期間はレポートにそう明記し、警告するだけです。
理解すべきこと。 本番のシステムは誰も報告しないエラーを生む:白い画面を見てもう一度やり直した受付係、途中で切れた夜のジョブ。このレッスンはそれらを、隠れる三つの場所(バックエンド、ジョブ、ブラウザ)で*捕捉*し、*まとめ*(同じエラーの千回はカウンタ付きの一項目)、新しいものと増えているものを知らせ、*フローごとのエラー率*(登録された百件の予約のうち何件が失敗したか)を持つ報告を生む。ルールは二つ:保留項目のないエラーは一つもない。そして、なぜ許容するのかいつまで許容するのかを言う保留項目のない「既知のエラー」は存在しない Ref. 43、Ref. 22。
プロンプトを送る前に、あなたの手で:
docs/OBSERVABILITY.md(16):エラーはもう識別子、バージョン、アクターとともに出ています。docs/LOCKS.md(14):帰結のある行動の中のエラーはその場の警報。プロンプトを送る前に(ルーチンのプロンプト):あなたが読んだ最初のエラーの報告と、手元の docs/PENDING.md。
完全性の検証。 引き起こしたエラーは捕捉に、警報に、報告に届きましたか? 保留項目も日付付きの理由もない繰り返すエラーがありますか? 報告の「直された」エラーは、その保留項目に赤のテストを持っていますか? フローごとのエラー率はあり、前の期間と比べられていますか? 捕捉の中に個人データがありますか?
提出物。 中央でまとめられた捕捉、警報、フローごとの率を持つ周期報告、完成した docs/MONITORING.md、約束の中のルーチン、そしてエラーごとの保留項目。
典型的な誤り。 実際の利用者がいるのに「一か月でエラーゼロ」:捕捉がブラウザかジョブを見ていない。千回発生したエラーに「既知、影響なし」というコメント。再起動で「直される」エラー。そしてエラーの報告を資源の報告と突き合わせずに読むこと:一方の遅いクエリが他方のタイムアウトだ。
ガイドプロジェクトでは。 Turneraの最初の報告には三つのエラーがある。一つはブラウザで(専門職の氏名にアポストロフィがあると予約台帳が失敗する。14回。保留項目、赤のテスト)。一つは夜のジョブで(メッセージの提供者がある夜エラーを返した。1回。記録とともに再試行する保留項目)。そして一つは月次の集計表の甥の「既知の」もの(日付付きの保留項目:パート2のレッスンR2 の報告に置き換える)。エラー率:「予約を登録する」で0.3%、他は0%。
2026年10月19日に変わったこと(D-038)。 エラーの捕捉は発生源で分けます。システムのエラーと、それを観測する道具(パネル、常駐エージェント、監視そのもの)のエラーはレポートの別の節に入り、保留項目を開くのはシステムのエラーだけです。練習では、最初の周期レポートが六つの「バグ」を開きましたが、それは道具が停止中のサーバーと話していただけでした。
理解すべきこと。 二つのことがサイクルを閉じる。一つ目は任意:常駐エージェントを限定された範囲で本番に残し、あなたがいなくても診断しサポートできるようにすること Ref. 13。それを律するルールは誰かの名において行動するということだ:その認証情報は責任ある人に紐付けられ、することのすべてがその人の名で記録される。匿名のアカウントではなく、上司のいる従業員だ。二つ目は必須:数字による振り返り。何がかかったか、保留項目はいくつ、どれが往復を要したか、どんなインシデントが起きどの段に落ちるか、そしてはしごへの少なくとも一つの提案された変更。何も変えない振り返りは振り返りではなかった。エージェントのチームまるごとを廃止するに至ったものが模範だ Ref. 6。
課題(常駐エージェント、該当するなら)。
プロンプトを送る前に、あなたの手で、オーナーとともに:
docs/LOCKS.md と docs/DEPLOYMENT.md、最新のもの。そして、エージェントが解決できないものを知らせる経路(チケット、メール)。We are going to leave you resident in production. First, build the map of the system you will need in order to operate it: modules, environments, where each configuration lives, which actions are consequential (read
docs/LOCKS.md), whom to notify. If there are parts of the system you cannot see from where you are, tell me; the map must not have hidden gaps. Then propose your scope in three levels: read-only and diagnosis; configuration changes with my approval; consequential actions behind locks. I choose the level. Your credential acts as the person who created it: everything you do is logged under that person's name. Reply in my language.
あなたを本番に常駐させます。まず、運用のために必要になるシステムの地図を構築してください:モジュール、環境、各設定がどこに住むか、どの行動に帰結があるか(docs/LOCKS.md を読んでください)、誰に通知するか。あなたのいる場所から見えないシステムの部分があれば、私に教えてください。地図に隠れた穴があってはなりません。次にあなたの範囲を三つのレベルで提案してください:読み取り専用と診断。私の承認付きの設定変更。錠の背後の帰結のある行動。私がレベルを選びます。あなたの認証情報はそれを作った人として行動します。あなたがするすべてはその人の名で記録されます。私の言語で答えてください。
求めているのは、運用する前の地図、地図の穴を宣言すること、あなたが一つを選ぶための三つの範囲のレベル、そして人の名における認証情報。
プロンプトを送る前に(締めのプロンプト):読んだ地図と三つのレベル、選んだレベル、そして、あなたが考えておいた、その範囲の外にある具体的な行動を一つ。エージェントにそれを試させて、ログで拒否を見るためです。
Level [1: read-only and diagnosis]. Write in
docs/RESIDENT_AGENT.mdthe map, the scope, the credential (never its value), and the procedure to request my approval. Then prove, with a real attempt recorded in the log, that something outside your scope is rejected.
レベル[1:読み取り専用と診断]。docs/RESIDENT_AGENT.md に地図、範囲、認証情報(決してその値ではなく)、私の承認を求める手順を書いてください。その後、ログに記録された実際の試みで、あなたの範囲外のことが拒否されることを証明してください。
課題(振り返り、常に)。
プロンプトを送る前に、あなたの手で:
docs/RETROSPECTIVE_INPUTS.md に、またはチャットに出せる形で:何時間充てたか(記憶からではなくカレンダーから)、AIツールにいくら使ったか(請求書)、継続的インテグレーションのクォータをどれだけ使ったか、そして開始と終了の日付。docs/PENDING.md と docs/DECISIONS.md。数字の出どころです。[The project] is over. Do the retrospective with numbers, not impressions: what it cost (tokens, quota, my time), how many pending items, which ones took the most rounds and why, which incidents happened and which step of the ladder each falls into, and which step failed or was missing. If you lack the data for any figure (my time, for instance), ask me for it or mark it as an estimate; do not invent it. End with a concrete proposal to change the ladder: which step is modified, how, and which incident justifies it. Write it to
docs/RETROSPECTIVE_[date].md. Reply in my language.
[プロジェクト]が終わりました。印象ではなく数字で振り返りをしてください:何がかかったか(トークン、クォータ、私の時間)、保留項目はいくつ、どれが最も往復を要しなぜか、どんなインシデントが起き、それぞれがはしごのどの段に落ちるか、そしてどの段が失敗したか、欠けていたか。ある数字のデータがなければ(例えば私の時間)、私に求めるか推定と印してください。発明しないでください。はしごを変える具体的な提案で終えてください:どの段をどう修正し、どのインシデントがそれを正当化するか。docs/RETROSPECTIVE_[日付].md に書いてください。私の言語で答えてください。
求めているのは、出所付きの数字、段に対応付けられた各インシデント(どの段にも落ちないインシデントは欠けている段だ)、持っていない数字を求めること、そしてはしごへの具体的な変更提案。
CONTRIBUTING.md 参照):それが方法が各プロジェクトから学ぶ形だ。完全性の検証。 地図はエージェントが何を見られないかを言っているか? 範囲外の行動が拒否されるのをログで見たか? 認証情報は人の名において行動しているか? 振り返りには出所付きの数字があるか、形容詞か? 各インシデントは段に落ちるか? 少なくとも一つの具体的な変更提案があるか?
提出物。 docs/RESIDENT_AGENT.md(該当するなら)と docs/RETROSPECTIVE_[日付].md。
典型的な誤り。 「すべて解決できるように」常駐エージェントに高いレベルを与えること:読み取り専用から始め、証拠があれば上げる。すべてうまくいったと言う振り返り:すべてうまくいくことは決してない。あなたのために書かれており、方法のためではない。そして変更提案を送らないこと:第23段は文書が書かれたときではなく、はしごが変わったときに閉じる。
ガイドプロジェクトでは。 典型的なコースでのTurneraの振り返り:受講生の約四十時間、二十八の保留項目、最も往復を要したのはメッセージのもの(タイムゾーンとWhatsAppプロバイダ)。二つのインシデント、一つは第11段(状態「欠席」が画面には存在しサーバーには存在せず、セマンティックツリーにもなかった)、もう一つは第15段(テストの設定での本番へのデプロイ、デプロイ後のエンドツーエンド検証で検知)。変更提案:第15段のデプロイのルーチンが、昇格の前に「何が変わるか」だけでなくテストと本番の設定の差分を見せることを要求すること。
二十四のレッスンが終わったとき、システムはこのリストを満たす。Urazukeにおける「プロダクショングレード」の運用上の定義であり、最終の検証リストとして、オーナーとともに、コードを開かずに使える:
二十四すべてが「はい」なら、システムは導入する準備ができている。どれかが「否」なら、どの段を登り直すべきかもうわかっている。
この第一部が空のフォルダの上で方法を教えるのは、それが学ぶのに最も明快な形だからだ。だが現実では空のフォルダを渡されることはほとんどない:既に動いているシステムを渡されて、「これを直して」か「あれを足して」と言われる。コースのパート2 は同じ診療所を別の時間軸で取り上げる。甥が一夏で作り、誰も丸ごとは理解していないアプリケーションとともに。そして進化・修正の道の正常化の区間を教える:方法が前提とする入力を復元し、安全ベルトを組み、負債に順序を付けるための八つのレッスン。そして最初のバグを修正し、完全な方法で最初の新しい機能を構築するためのもう二つ。
レッスンごとの、三段階の簡単なルーブリック:
評価しないもの:コードの品質。誰も読まない。証拠の品質を評価する。
プロンプトはどのツールでも同じだ。変わるのは、コースで docs/WORKING_AGREEMENT.md に追加するルーチンがどこへ行くかだ:
CLAUDE.md に入り(またはそこから約束を取り込み)、毎セッション自動で読まれる。.cursor/rules/ に、常に有効なルールとして。AGENTS.md または GEMINI.md に。レッスン2の読み取りテストはすべてに通用する:新しいセッションがシステムが何をしないか知らないなら、ツールは約束を置いたファイルを読み込んでいない。
docs/PENDING.md の完全な例、仕様付きで閉じた二十八の保留項目とともに。受講生がプロジェクトの終わりに完了したことの文書がどう見えるかを見られるように。