状態:承認済み・本番稼働中。 未決の判断は残っていない。形態(D-043 と D-044)、スイッチ(D-045 と D-046)、ダッシュボード(D-047)、アクセシビリティの重みを含む初期重大度(D-048、第 10 節)は決定済みである。本書は本メソッドの八言語すべてで公開され、その二つのプロンプトはプロンプト API の一部になっている。そこから build/prompts.mjs が八言語すべてで英語本文のバイト一致を要求し、一致しなければビルドは失敗する。日付:2026-10-22。
本付録の決定の記録:docs/DECISIONES.md、D-043 から D-048。コンプライアンス・ダッシュボード(第 12 節)は D-047 で二つの数値をもって確定した。実装作業は PND-002 に住む。
ステップ 9 はすでにコードを測っており、それを通過させないゲートで行っている。単一のフォーマッタ、サイズの上限(ファイル当たり三百行、関数当たり四十行)、関数ごとの複雑度、重複コード、デッドコード、宣言され使用されている依存関係、ラチェット付きのカバレッジ、そして実際のユーザーがいるところでのミューテーションテストである。その数値は docs/CODE_QUALITY.md に書かれる。これは解決済みである。
解決していないのは製品のもう半分である。ステップ群のコーパスを検証した。ユーザビリティへの、人物やプロファイルへの、機能的グルーピングへの言及は一つもない。今日のインターフェースは二つのものに支えられている。所有者が十秒だけ見るスクリーンショットと、手動のテストケースである。どちらも良いものであり、どちらも人間的で、高価で、忘れっぽい。システムは品質ゲートを立派に通過しながら、使えないままでいられる。すべてが緑で、それでもその人はどこで請求するのかを見つけられない。
さらに、技術的ではあるがインターフェースに現れる第二層の問題がある。同じ製品を複数のプロファイル(管理、運用、照会、顧客)が使うとき、機能は三つの異なる場所——データベース、メニュー、ルートのガード——で有効化され、それらは別々の時点で書かれ、ひとりでに同期を失う。症状はいつも同じである。誰かが自分に属さないボタンを見る。あるいはもっと悪いことに、権限を持っている人がその画面を見つけられない。
続く二つのヒューリスティクスは、同じ形態でその二つの問題に取り組む。検証可能な言明の短いカタログ、それらを自動で測る少数の計器、そしてプロジェクトが外に出る必要があるときのための、宣言された例外の道である。
誘惑は、規則の一覧を作り、それを最初のプロジェクトのスタックに縛り付けることである。それは悪く老化する。React の規則は Angular には適用されず、Angular の規則はテンプレート付きサーバには適用されず、二年後には一覧の半分が死んでいる。提案は三つの層を分ける。
第 1 層 — 非依存の中核(交渉不能)。 道具についての言明ではなく、結果についての言明である。「フォーマッタは一つしかなく、誰もそれと議論しない」は、TypeScript でも PHP でも Go でも同じように適用される。中核は安定した識別子で列挙され、プロジェクトごとに変わらない。
第 2 層 — スタックごとのアダプタ(設定可能)。 中核の各規則について、フロントエンドの各ファミリが*何で*測り*どのしきい値で*測るかを宣言する。Vite を使う React のプロジェクト、Next のプロジェクト、Angular のプロジェクト、テンプレート付きサーバのプロジェクト、モバイルのプロジェクト、コマンドラインのプロジェクトは、同じ中核の六つの異なるアダプタである。ここに、ユーザーが「フロントエンドごとに設定可能」として求めたもののすべてが住む。
第 3 層 — プロジェクトの決定(宣言されたもの)。 具体的なしきい値と免除である。発明されるのではなく、所有者に求められて書かれる。アーキテクチャのステップのサイジングと同じである。しきい値が宣言されていなければアダプタのものが走り、そのように記録される。
各規則は常に、六つの欄からなる同じカードで書かれる。
| 欄 | 内容 |
|---|---|
id | 安定した識別子(CQ-07、UX-12)。決して再利用しない。 |
| 言明 | 観察可能な結果についての、命令形の一文。 |
| なぜか | それが避ける具体的な損害。損害がなければ、その規則は不要である。 |
| 検証の方法 | 計器:自動ゲート、マトリクスへの問い合わせ、エンドツーエンドのテスト、または手動のケース。 |
| 重大度 | BLOQUEA(ゲートが赤を出し、ブロックは閉じない)、AVISA(ペンディングを開く)、REGISTRA(文書に残るだけ)。 |
| 適用対象 | それが支配するプロファイル。その外では走らず、それは例外ではない。適用範囲である。 |
例外は宣言される。決して省略されない。 規則は四つの欄からなる登録で消す。識別子、一行の理由、誰が認可するか(所有者であり、エージェントではない)、再検討日である。登録なしで消された規則は、決定ではなくゲートの故障である。これは、「通すために」引き上げられた上限を受け入れないために本方法がすでに使っているのと同じ基準である。
どのヒューリスティクスも、その検証が意見であれば役に立たない。計器は四つであり、各規則はどれに属するかを宣言する。
中核はステップ 9 を拡張する。それを置き換えも矛盾もしない。すでに測られているもののそれぞれに名前、重大度、アダプタを与え、今日欠けているもの、すなわちコードとして見たインターフェースを加える。
| id | ファミリ | 言明 | 検証 | 重大度 |
|---|---|---|---|---|
| CQ-01 | 形態 | フォーマッタは一つしかなく、介入なしに走り、議論を許さない。 | ゲート | BLOQUEA |
| CQ-02 | 形態 | リポジトリごとにリンタは一つしかなく、その規則は全員にとって同じである。規則は書かれた理由とともに切るのであり、野放しのファイルの中で切るのではない。 | ゲート | BLOQUEA |
| CQ-03 | サイズ | 宣言された上限を超えるファイルはなく(三百行から始まる)、自分の上限を超える関数もない(四十行から始まる)。 | ゲート | BLOQUEA |
| CQ-04 | 複雑度 | 宣言された経路の上限を超える関数はない。 | ゲート | BLOQUEA |
| CQ-05 | 重複 | 新しい重複は入らない。コピーされたブロックは抽出されるか、正当化される。 | ゲート | BLOQUEA |
| CQ-06 | デッド | デッドコードはない。使われていない関数、変数、インポート、分岐、依存関係である。 | ゲート | BLOQUEA |
| CQ-07 | 型 | 言語が型を許すなら、プロジェクトは型を本気で使う。「どれでも」の型は宣言された例外であり、習慣ではない。 | ゲート | AVISA |
| CQ-08 | テスト | カバレッジは下がらない。今日の数値が明日の床である。 | ゲート | BLOQUEA |
| CQ-09 | テスト | 実際のユーザーがいるところでは、ミューテーションのスコアをブロックごとに測り、新しいコードの中で生き残ったミューテートはそれぞれペンディングを開く。 | ゲート+記録 | BLOQUEA |
| CQ-10 | 依存関係 | すべての依存関係は宣言され、使われ、そしてそれが提供するものに対して不釣り合いな第三者ツリーを持ち込まない。 | ゲート | AVISA |
| CQ-11 | シークレット | 認証情報、鍵、接続文字列がリポジトリに、また新しい履歴にもない。 | ゲート | BLOQUEA |
| CQ-12 | インターフェース | インターフェースは決定しない。どの画面もコンポーネントも業務規則(何ができるか、いくらになるか、どの状態が続くか)を含まない。ドメインに住み、ビューがそれを問い合わせる。 | 閉鎖時のレビュー+手動のケース | BLOQUEA |
| CQ-13 | インターフェース | サーバへの呼び出しはすべて単一の型付きクライアントを通る。画面が自分で手作業のリクエストを組むことはない。 | ゲート(検索) | BLOQUEA |
| CQ-14 | インターフェース | 共有状態が住む場所は一つだけである。画面間の状態の重複は近道ではなく故障である。 | 閉鎖時のレビュー | BLOQUEA |
| CQ-15 | インターフェース | 見えるテキストはすべて翻訳カタログから出る。ユーザー向けの文字列がコンポーネントの中に書かれたままになることはない。 | ゲート(検索) | BLOQUEA |
| CQ-16 | インターフェース | すべてのインタラクティブな要素は安定した識別子とロールを持ち、自動テストが位置ではなく名前でそれを見つけられるようにする。 | ゲート(検索) | BLOQUEA |
| CQ-17 | インターフェース | 色、間隔、タイポグラフィはすべてトークンから出る。スタイルシートに野放しのマジック値はない。 | ゲート(検索) | BLOQUEA |
| CQ-18 | インターフェース | 基本的なアクセシビリティは自動で検証される。コントラスト、欄のラベル、可視のフォーカス、主要なフローでのキーボードナビゲーション、代替テキストを持つ画像である。 | ゲート | AVISA |
CQ-12 から CQ-18 の規則こそが、「コード品質」をフロントエンドにおいて意味のあるものにする。それらがなければ、プロジェクトはミューテーション九十パーセントを持ちながら、コンポーネントの中で自前の算術で合計を計算する画面を持つことができる。両方の世界の最悪である。複製された計算はバックエンドのテストをすべて通過してしまうからである。
初期重大度(D-048)。 初日からブロックするのは、検証器を持ち、議論を要するしきい値に依存しない十四の規則である。CQ-01 から CQ-06、CQ-08、そして CQ-11 から CQ-17。CQ-09 は実際のユーザーがいるところでブロックし、そこが測られる場所である。警告するのは三つ、しかも三つだけである。CQ-07(型)、CQ-10(依存関係)、CQ-18(アクセシビリティ)。これらはプロジェクトがまず較正する必要があるものだからである。フォーマッタ、リンタ、サイズ、複雑度は緩めない。ステップ 9 がすでに今日それらをブロックしており、これはそれを拡張するのであって置き換えるのではない。継承された負債は、宣言された例外かラチェットのベースラインで解決するのであり、重大度を下げて解決するのではない。そして CQ-12 と CQ-14 は、この表で唯一、機械ではなく人間の赤でブロックする二つの規則である。ペンディングの閉鎖時に、手動のケースを前にして検証され、UX-22 と UX-27 と同じ基準に従う。毎回のコミットではない。プロジェクトがその閉鎖を支えられないなら、その規則は忘れられたのではなく記録された決定によって AVISA に下がる。
フロントエンドのファミリごとのアダプタ。 第 2 層がどのようにインスタンス化されるかの一例である(名前は例示であり、プロジェクトが選んで書く)。
| 概念 | シングルページアプリケーション(React、Vue、Angular) | テンプレート付きサーバ | ネイティブ・モバイル | コマンドライン |
|---|---|---|---|---|
| CQ-12 ビューの中のドメイン | コンポーネントのサイズと依存関係に関する lint 規則+レビュー | コントローラのレビュー | ビューモデルのレビュー | コマンド層のレビュー |
| CQ-13 単一クライアント | API 契約からの生成 | サーバの単一サービス | 生成されたクライアント | SDK の単一クライアント |
| CQ-15 テキスト | カタログ+可視のリテラルを禁じる規則 | テンプレートエンジンのカタログ | リソースカタログ | カタログ |
| CQ-16 識別子 | 要素ごとの宣言的属性 | マークアップ内の識別子 | アクセシビリティ識別子 | 安定した出力 |
| CQ-17 トークン | スタイルシート内のトークン、野放しの値なし | 同じ | 同じ | 適用外 |
| CQ-18 アクセシビリティ | ゲート内の自動アナライザ | 生成された HTML 上のアナライザ | アクセシビリティ・アナライザ | 適用外 |
列の間で変わるのは道具としきい値である。変わらないのは言明である。それこそが、ヒューリスティクスを装飾にせずに非依存にするものである。
五つのファミリ。第一と第二は所有者が明示的に求めたものであり、他の三つは、それらがなければグルーピングとプロファイルが同じように、ただより遅く劣化するから存在する。
母なる規則:機能は、その人がしに来たことによってグループ化され、それが生まれたモジュールによってではない。 コードはエンティティ(「請求書」「顧客」「支払」)で組織される。人はそうではない。誰も「エンティティを管理する」ためにシステムに入らない。入るのは請求するため、出荷するため、月末を締めるためである。メニューがエンティティを見せるなら、その人が翻訳者の役をする。メニュー*が*仕事である。
| id | 言明 | 検証 | 重大度 |
|---|---|---|---|
| UX-01 | メニューの各グループはユーザーの仕事で名付けられる(その人の語彙で、プロジェクトの用語集を用いて)。技術的なモジュールでもデータのエンティティでも決してない。 | 手動のケース+マトリクスのレビュー | AVISA |
| UX-02 | 各機能はちょうど一つの正規の家を持つ。二つのグループに役立つなら、一つの家を選び、もう一方からはリンクする。入口は複製しない。 | マトリクスへの問い合わせ | BLOQUEA |
| UX-03 | 孤児はない。宣言されたすべての機能は入口画面から三ステップ以内で到達可能である。 | ルートの自動巡回 | BLOQUEA |
| UX-04 | グループのサイズは妥当である。三つ未満の機能はグループでなかったものを示し、七つを超えるものは引き出しを示す。 | マトリクスへの問い合わせ | AVISA |
| UX-05 | すべてのグループは、そこで何をするのか、主な操作は何かを言う入口画面を持つ。空の表で直接開くグループはない。 | 手動のケース | AVISA |
| UX-06 | 人が頻繁に行うフローは一緒に住む。「支払を登録する」と「顧客の口座を見る」が同じセッションで使われるなら、同じグループを共有する。 | 手動のケース(タスクテスト) | REGISTRA |
| UX-07 | 最初のクリックのテスト:所有者は具体的な作業(「支払はどこで請求しますか」)の前に一つの場所を名指す。二つを名指すなら重複があり、一つも名指さないなら孤児がある。各ブロックの閉鎖時に走らせる。 | 手動のケース | AVISA |
ここに最も実り多い部品がある。その理由は設計ではなく工学である。有効化は一度、マトリクスの中で宣言され、それ以外のすべてはそこから導出される。 今日の典型的な誤りは、権限を三度(メニューで、ルートのガードで、データのフィルタで)書き、その三つが離れることである。マトリクスを唯一の生産者とすれば、メニュー、ルーティング、サーバの権限、テストのスクリプトは消費者であり、本方法がすでに要求する生産者/消費者の対称性がひとりでに検証可能になる。
マトリクスは四つの列と機能ごとに一行を持つ。*機能*、*家*(B1 のグループ)、*それを持つプロファイル*、*入口のルート*。それだけである。
| id | 言明 | 検証 | 重大度 |
|---|---|---|---|
| UX-08 | すべての機能はマトリクスの中で、どのプロファイルがそれを持つかを宣言する。プロファイルのない機能は存在しない。プロファイルを割り当てるか、削除するかである。 | マトリクスへの問い合わせ | BLOQUEA |
| UX-09 | 宣言されたすべてのプロファイルは少なくとも一つの機能と独自の入口点を持つ。空のプロファイルは、設計時に誰も使わなかったプロファイルである。 | マトリクスへの問い合わせ | BLOQUEA |
| UX-10 | ナビゲーションはマトリクスから生成される。手書きのメニューは近道ではなく故障である。 | ゲート(検索) | BLOQUEA |
| UX-11 | 隠すことは保護することではない。すべてのルートは入口を隠すことに加えてサーバ側で権限を検証する。アドレスを手で書いても入るには足りない。 | エンドツーエンド・テスト | BLOQUEA |
| UX-12 | 少なすぎても多すぎてもならない。プロファイルごとに、到達可能な機能の集合はマトリクスのその行の集合とちょうど同じである。 | プロファイルごとのエンドツーエンド・テスト | BLOQUEA |
| UX-13 | 拒否は説明される。人が自分に属さない機能に入ったとき、なぜか、誰にアクセスを求めるべきかと言うメッセージを見る。空白の画面でも、理由のない灰色のボタンでも決してない。 | 手動のケース | AVISA |
| UX-14 | 同じボタンは全員にとって同じことを意味する。二つのプロファイルがラベルを共有するなら、効果も共有する。効果がプロファイルによって変わるなら、ラベルが変わるか、機能が二つに分かれる。 | 手動のケース | AVISA |
| UX-15 | データもプロファイルでフィルタされる。一覧を見る人は自分に対応する行を見るのであり、完全な一覧から行をブラウザで隠したものを見るのではない。 | エンドツーエンド・テスト+サーバのレビュー | BLOQUEA |
| UX-16 | マトリクスとユーザーマニュアルは機能と同じペンディングで更新される。マトリクスに行のない新しい機能は閉じられない。 | ペンディングの閉鎖 | BLOQUEA |
「動かない」という苦情のほとんどは、「何もない」「読み込み中」「失敗した」と言えなかった画面である。四つの状態を、常に、すべての一覧とすべての詳細画面で。
| id | 言明 | 検証 | 重大度 |
|---|---|---|---|
| UX-17 | すべての一覧は四つの解決された状態を持つ。データあり、空、読み込み中、エラーである。空は「まだ何もない」と「あなたの検索が見つけなかった」を区別する。 | 手動のケース+レビュー | AVISA |
| UX-18 | 何かが遅れている間は、動いていることが見え、長ければキャンセルできる。何も応答しないボタンが第一の苦情である。 | 手動のケース | AVISA |
| UX-19 | エラーは何が起きたか、何ができるかを言い、入力済みのものを消さない。技術的なコードだけでも、「エラーが発生しました」でもない。 | 手動のケース | AVISA |
| id | 言明 | 検証 | 重大度 |
|---|---|---|---|
| UX-20 | 画面には明らかな主操作が一つあり、残りは副次的であり、そう見える。 | 手動のケース | AVISA |
| UX-21 | すべての破壊的な操作は影響を受ける対象を名指して確認を求め、できるときは確認する代わりに取り消す。 | 手動のケース | AVISA |
| UX-22 | 失敗したフォームは入力済みのものを保ち、問題のある欄をその欄の場所で示す。 | 手動のケース | BLOQUEA |
| UX-23 | どの操作も画面を出口のないままにしない。保存、削除、キャンセルの後、その人はどこにいるのか、どう続けるのかを知る。 | 手動のケース | AVISA |
| id | 言明 | 検証 | 重大度 |
|---|---|---|---|
| UX-24 | インターフェースはプロジェクトの用語集の言語を話す。同じ対象は画面でも、マニュアルでも、メールでも同じように呼ばれる。同義語は欠陥である。 | 手動のケース+レビュー | AVISA |
| UX-25 | 主要なフローでは、マウスなしで、スクリーンリーダーで、すべてを行える。フォーカスは常に見え、閉じ込められない。 | ゲート(CQ-18)+手動のケース | AVISA |
| UX-26 | 状態は色だけで伝わらない。情報を持つ画像はすべて代替テキストを持ち、テキストはズームなしで通常のサイズで読める。 | ゲート(CQ-18) | AVISA |
| UX-27 | 画面に触れる各ペンディングはテスト環境の実際のスクリーンショットを提出し、所有者は閉じる前にそれを見る。スクリーンショットは任意でもなく、モックアップでもない。 | ペンディングの閉鎖 | BLOQUEA |
本付録は新しいステップを発明しない。存在するものに掛かる。それによってゲートの複製を避け、ユーザビリティの一覧の通常の行き先、すなわち一度読まれて終わることを避ける。
どこに置くか(D-043)。 四つの区間に横断的であり、主な重みは建設ループ(ステップ 5 から 12)にあり、そこが決定され建設される場所である。独自のステップではない。番号付きのステップはラダーの再番号付けを強制し、ステップの数え方を変え、付録を八言語への契約の義務的翻訳に従わせることになり、建設が緑で通る前にそれを要求することになる。しかもループがすでに持たないゲートを一つも加えない。
どう掛かるか(D-044)。 一つの正典の出所、五つのアンカー、二つの事前入口。規則のテキストはここにだけ住み、プロンプトはそれを引用する。決してコピーしない。四十五の規則をループの八つのプロンプトの中で繰り返すと、それらを薄める(各ステップ自身の仕事と競合し、エージェントは毎回違う仕方で従う)。それらを派生させる(同じテキストの二つのコピーはひとりでに同期を失う。ステップ 11 が追うアンチパターンである)。そしてそれらをより横断的にするわけではない。規則を横断的にするのは、各ブロックが同じゲートを通ることなのであり、規則がどこにでも書かれていることではない。
| 時点 | 何が加わるか | なぜそこか |
|---|---|---|
| 事前入口 1 — 適用範囲の定義 | ユーザーの用語集 | 用語集がなければ、UX-01 と UX-24 は比較する相手を持たない。 |
| 事前入口 2 — 適用範囲の定義 | プロファイルの一覧 | 一覧がなければ、B2 のマトリクスはステップ 5 で発明され、そこから導出されるすべてが根拠なしに生まれる。 |
| アンカー 1 — ステップ 5(計画) | 画面に触れるすべてのペンディングは三つのことを宣言する。どの収束グループに属するか(B1)、どのプロファイルがそれを持つか、どの受け入れ基準がプロファイルごとか(「プロファイル X において、人は Y ができ、Z はできない」)。その宣言がなければペンディングはステップを通らない。 | ここでグルーピングとプロファイルが*生まれる*。それらは計画の決定であり、コードの決定ではない。最も生産性の高いアンカーであり、今日存在しないものである。 |
| アンカー 2 — ステップ 8(赤いテスト) | マトリクスは、まず失敗するのが見えるテストになる。プロファイルごとに、到達可能なものをその行と比較する(UX-11、UX-12、UX-15)。 | これがなければマトリクスは誰も見ない文書である。 |
| アンカー 3 — ステップ 9(品質) | 完全な CQ カタログと、そのアダプタおよび宣言されたしきい値。docs/CODE_QUALITY.md は単一の数値ではなく規則ごとに報告する。そしてマトリクスをゲートとして(UX-02、UX-03、UX-08、UX-09、UX-10、UX-16)。 | テキストが指令として文字通りに入る唯一の場所であり、ラチェット付きで毎ブロック走るゲートである。 |
| アンカー 4 — ステップ 10(手動のケース) | 各ケースは影響を受けるプロファイルごとに一度実行され、マトリクスから導出され、手書きされない。一つのプロファイルで走らせたケースは実行済みとして数えない。 | 手動のケースは本方法の唯一の人間による検証である。プロファイルごとに開かれなければ、B2 の半分は決して見られない。 |
| アンカー 5 — ステップ 12(検証と正直な報告) | 報告は何を測ったか、何が avisa に残ったか、どの規則が消されているかを、その理由、認可者、再検討日とともに言う。 | 沈黙の損害ゼロ。消されたグループは充足として読まれてはならない。 |
| ユーザーマニュアル | B1 のグループで組織され、グループごとにどのプロファイルが入るかを宣言する。 | マニュアルとメニューが同じ言葉で名付けられなければ、用語集は壊れる。 |
| 各ブロックの閉鎖 | 最初のクリックのテスト(UX-07)、実環境のスクリーンショット(UX-27)、そしてマトリクスの二つのエンドツーエンド・テスト。 | 自動化できない三つの検証である。 |
状態(D-049)。 五つのアンカーは接続済みである。ステップ 5、8、9、10、12 の冒頭プロンプトが本書を八言語で引用し、英語の一文はすべてで同一、その隣に各国語の翻訳が置かれている。本書は残りのメソッドとともに八言語でサイトに公開され、その二つのプロンプトは契約 anexo-h として docs/html/api/prompts.json に入った。そこから build/prompts.mjs が八言語でバイト比較し、一致しなければビルドは失敗する。
ステップ 6、7、11 はせいぜい一行を受け取る。6 はすでにしきい値と例外を決定として記録しており(宣言された例外の自然な場所である)、11 は四つの場所に書かれたマトリクスのケースが打撃とともに現れる場所である。薄めないために、独自のテキストは加えない。
三つの成果物、すべて docs/ の中にある。CODE_QUALITY.md(拡張)、USABILITY.md(新規、規則ごとの結果と宣言された例外を含む)、PROFILE_MATRIX.md(マトリクス。文書であると同時にメニューの源である)。
プロジェクトごとに一つのファイルが第 2 層と第 3 層を宣言する。提案された形態での例であり、最終的な値ではない。
{
"version": 1,
"frontend": "react-vite",
"medido_por": {
"formato": "prettier",
"lint": "eslint",
"tipos": "tsc",
"complejidad": "eslint-complexity",
"duplicacion": "jscpd",
"muertos": "knip",
"cobertura": "vitest-coverage",
"mutacion": "stryker",
"accesibilidad": "axe-core"
},
"umbrales": {
"lineas_por_archivo": 300,
"lineas_por_funcion": 40,
"caminos_por_funcion": 10,
"cobertura_minima": 0,
"mutacion_objetivo": 0
},
"excepciones": [
{
"regla": "CQ-17",
"motivo": "トークンを持たない継承された印刷用レポート",
"autoriza": "所有者",
"revisar": "2027-01-31"
}
]
}
二つのゼロは意図的であり、それこそが重要な部分である。最低カバレッジはラチェットが実測値で決め、ミューテーションの目標はプロジェクトにユーザーがいるときに所有者が決める。それらがゼロで誰も宣言していないなら、ゲートはそれを発明する代わりに未宣言のしきい値として報告する。
コード品質。
Set up and maintain the code-quality gate for this project, configured for its frontend family. The core rules are the same in every project; what changes is how each one is measured and at which threshold. Install one formatter and one linter with a single shared configuration; enforce size limits per file and per function, complexity per function, duplication, dead code, declared-and-used dependencies, type checking where the language allows it, coverage with a ratchet, and secret scanning. Where the project has real users, add mutation testing scoped to the changed lines and record the score per block. Then extend the gate to the frontend itself: no business rule inside a screen, one typed client for every server call, one home for shared state, no user-visible string outside the translation catalogue, a stable identifier and role on every interactive element, styling only through tokens, and automatic basic accessibility checks. Every rule has a stable id, a severity (blocks, warns, records) and a named verifier. Thresholds and exceptions are declared by the owner in one configuration file; a rule switched off without a written exception is a gate failure, not a decision. Report the result per rule in
docs/CODE_QUALITY.md, not as a single number.
このプロジェクトのコード品質ゲートを、そのフロントエンドのファミリに合わせて設定し、構築して維持せよ。中核の規則はどのプロジェクトでも同じである。変わるのは、各規則を何で測り、どのしきい値で測るかである。フォーマッタを一つ、リンタを一つ、単一の共通設定でインストールせよ。ファイルごとおよび関数ごとのサイズ上限、関数ごとの複雑度、重複、デッドコード、宣言され使用されている依存関係、言語が許すところでの型検査、ラチェット付きのカバレッジ、シークレットの走査を強制せよ。プロジェクトに実際のユーザーがいるところでは、変更された行に限定したミューテーションテストを加え、スコアをブロックごとに記録せよ。次にゲートをフロントエンド自体へ広げよ。画面の中に業務規則を置かないこと、サーバへのすべての呼び出しに対して一つの型付きクライアント、共有状態のための一つの置き場所、翻訳カタログの外にユーザーに見える文字列がないこと、すべてのインタラクティブな要素に安定した識別子とロール、スタイルはトークンのみを通すこと、そして基本的なアクセシビリティの自動検査である。すべての規則は安定した識別子、重大度(ブロックする、警告する、記録する)、そして名前のある検証器を持つ。しきい値と例外は所有者が一つの設定ファイルで宣言する。書かれた例外なしに切られた規則は、決定ではなくゲートの故障である。結果は単一の数値ではなく、docs/CODE_QUALITY.md に規則ごとに報告せよ。
ユーザビリティ。
Build the usability criteria for this project before writing the first screen, and enforce them where the method already has hooks. Group functionality by what the person came to do, never by the internal module or the data entity: every menu group is named with a user job in the project glossary, every functionality has exactly one canonical home, no functionality is orphaned, and every group is reachable in no more than three steps from the entry screen. Then declare accessibility in one matrix and derive everything from it: each functionality lists the profiles that have it, each functionality has at least one profile, each profile has at least one functionality and its own entry point, the navigation is generated from the matrix instead of written by hand, and every route checks the permission on the server because hiding an entry is not protecting it. Verify the matrix per profile with an end-to-end check that compares what is reachable with the matrix row: neither less nor more. Require the four states on every list (with data, empty, loading, error), a visible working indicator with the option to cancel long operations, an error message that says what happened and what to do without losing entered data, a primary action per screen, confirmation or undo for destructive actions, and a form that keeps what was typed. Run each manual test case once per affected profile, run the first-click check at the close of every block, and require a real screenshot of the test environment on every item that touches a screen. Record the result per rule, with owner-declared exceptions, in
docs/USABILITY.md, and keep the matrix indocs/PROFILE_MATRIX.mdas the single source of truth.
最初の画面を書く前に、このプロジェクトのユーザビリティ基準を組み立て、本方法がすでに掛かり所を持っている場所でそれらを強制せよ。機能はその人がしに来たことによってグループ化し、内部のモジュールによってもデータのエンティティによっても決してグループ化するな。メニューの各グループはプロジェクトの用語集にあるユーザーの仕事で名付け、各機能はちょうど一つの正規の家を持ち、どの機能も孤児にならず、すべてのグループは入口画面から三ステップ以内で到達可能でなければならない。次にアクセシビリティを一つのマトリクスで宣言し、そこからすべてを導出せよ。各機能はそれを持つプロファイルを列挙し、各機能は少なくとも一つのプロファイルを持ち、各プロファイルは少なくとも一つの機能と独自の入口点を持ち、ナビゲーションは手書きではなくマトリクスから生成され、すべてのルートはサーバ側で権限を検証する。入口を隠すことは保護することではないからである。マトリクスをプロファイルごとに、到達可能なものをマトリクスの行と比較するエンドツーエンドの検査で検証せよ。少なすぎても多すぎてもならない。すべての一覧に四つの状態(データあり、空、読み込み中、エラー)を要求せよ。長い操作をキャンセルする選択肢を伴う可視の進行中指示、入力済みのデータを失わずに何が起きたかと何をすべきかを言うエラー・メッセージ、画面ごとに一つの主操作、破壊的な操作に対する確認または取り消し、そして入力されたものを保つフォームを要求せよ。各手動テストケースを影響を受けるプロファイルごとに一度実行し、各ブロックの閉鎖時に最初のクリックのテストを実行し、画面に触れるすべてのペンディングにテスト環境の実際のスクリーンショットを要求せよ。結果を規則ごとに、所有者が宣言した例外とともに docs/USABILITY.md に記録し、マトリクスを唯一の真実の源として docs/PROFILE_MATRIX.md に保て。
| # | 決定 | 記録 |
|---|---|---|
| 1 | 建設ループに横断的であり、独自のステップではない。 ラダーは再番号付けされず、ステップの数え方も変わらず、付録はステップの契約を翻訳する義務を継承しない。 | D-043 |
| 2 | 五つのアンカーと二つの事前入口を持つ一つの正典の出所。 四十五の規則をループの八つのプロンプトの中にコピーする代わりに。 | D-044 |
| 3 | 二つの独立したスイッチ(品質とユーザビリティ)、規則ごとに三つの状態(ブロックする、警告する、消えている)、フロントエンドのファミリごとのアダプタ、所有者が宣言するしきい値と例外。 | D-045 |
| 4 | スイッチの規律: プロジェクトの設定に住み、プロンプトには住まない。消すことは、理由、認可者、再検討日を伴う記録された決定としてのみ有効である。消えていることは報告で観測可能である。そしてスイッチは入れて切って試される。 | D-046 |
| 5 | 規則ごとに定められた初期重大度: 品質では十四がブロックし(CQ-01 から CQ-06、CQ-08、CQ-11 から CQ-17)、CQ-09 は実際のユーザーがいるところでブロックし、三つが警告する(CQ-07、CQ-10、CQ-18)。ユーザビリティでは十一がブロックし(UX-02、UX-03、UX-08 から UX-12、UX-15、UX-16、UX-22、UX-27)、UX-06 は記録するだけで、残りは警告する。「すべてがブロックする」——プロジェクトが動き出さない——のでも、「すべてが警告する」——ヒューリスティクスが飾りになる——のでもない。 | D-048 |
| 6 | アクセシビリティは警告で始まり、製品に組織外の最終ユーザーがいるときに所有者の宣言によってブロックへ昇格する。 既定値は発明されない。昇格は他のどのしきい値とも同じ仕組みで宣言される(D-045)。 | D-048 |
プロンプトの執筆を妨げていた二つの問いはすでに回答済みである。一つ目は五行目に、二つ目は六行目に残った。しかし承認された勧告には二つの事実の誤りがあり、それらが戻らないようにここに書いておく。
そして宣言された限界が一つある。その類で唯一だからである。CQ-12 と CQ-14 は人間の赤でブロックする。 画面が業務規則を決定していないことを証明する道具はない。それらはペンディングの閉鎖時に、手動のケースを前にし、UX-22 と UX-27 と同じ基準で検証される。プロジェクトがその閉鎖を支えられないなら、記録された決定によって AVISA に下がる。ブロックするのに誰も検証しない規則は、警告する規則より悪い。
翻訳。 完了した。付属文書は八言語で存在し、その二つのプロンプトはプロンプト API の一部であり、八版すべてで英語本文がバイト一致している(D-043 が要求し、build/prompts.mjs がビルドのたびに検証する)。カスティーリャ語が正典であり続ける。翻訳とカスティーリャ語が食い違えばカスティーリャ語が勝ち、同じ変更の中で翻訳を直す。
入れて切って何も変わらないヒューリスティクスは、ゲートではなく装飾である。実装(PND-002)の受け入れテストは、各ファミリの違反を意図的に仕込んだフィクスチャ・プロジェクトである。
| シナリオ | 要求される結果 |
|---|---|
| 品質オン、違反あり | 赤。規則と、違反があるファイルを名指す。 |
| 品質オフ、記録あり | 緑。そして報告が、消えていること、いつからか、誰が認可したかを言う。 |
| 品質オフ、記録なし | 赤。書かれた理由なしに消すことは、規則の不在ではなく故障である。 |
| ユーザビリティ・オン、行き過ぎて到達するプロファイルあり | UX-12 で赤。プロファイルと機能を名指す。 |
| ユーザビリティ・オン、マトリクスに行のない機能あり | ペンディングの閉鎖時に UX-08 で赤(UX-16)。 |
| 両方のグループがオフ | 両方で緑。報告に二行の停止が載る。 |
| 警告する規則の違反を仕込む | 緑。そして規則とファイルを名指すペンディングが開く。警告することは承認することではない。 |
| ブロックする規則の違反を仕込む | 赤。規則、ファイル、対処を名指す。そしてダッシュボードはない。平均はブロックを閉じない。 |
| ダッシュボード:記録ありで規則を消す | コンプライアンスは上がりうるが、ゲートのカバレッジは下がり、数値はそれを説明する座席とともに公表される。単一の数値ではこのシナリオは見過ごされてしまう。二つの数値が理由をもって存在することの証明である(D-047)。 |
| ダッシュボード:異なるレギュレーションでの二回の実行 | 二つの数値はその指紋(カタログの版、有効な規則と消えた規則、アダプタ、道具の版)とともに示され、連続した系列としてグラフ化されない。二つの異なる物差しであり、そう言うことが結果の一部である。 |
| ダッシュボード:無効なレギュレーション(記録なしで消えた規則) | 数値を出さない。出力は赤であり、アスタリスク付きのダッシュボードではない。 |
| ダッシュボード:ブロックする規則が赤のままコンプライアンスが高い | ブロックは閉じない。ダッシュボードは平均する。緑は各規則が一つずつ決める。 |
| ダッシュボード:自動のものだけを触って割合が改善する | 割合は上がり、人間による検証の行は動かない。別に報告され、報告は二つを単一の数値に足し合わせない。 |
見られるのは色だけではない。二行の停止が報告に存在することが見られる。その行のない緑の結果は、このテストが色だけで単独では検出できない唯一の故障であり、だからこそ出力を読んで検証する。
状態。 2026-10-22 に D-047 で決定された。ダッシュボードは二つの数値で行き、レギュレーションの指紋を伴い、ラチェットを伴い、人間のものを割合の外に置き、座席を必須とする。ブロックを閉じる権限は与えない。以下は実装(PND-002)が満たさなければならない仕様である。
何であるか。 ゲートがすでに出した規則ごとの結果からの決定論的な派生物である。新しいものを測らず、新しいものを判断しない。数える。もしダッシュボードが規則の評決を変えられたなら、同じものに対して二つの真実の源があることになり、それはまさに本付録が UX-10(ナビゲーションはマトリクスから導出される)と CQ-14(共有状態の単一の場所)で戦っているものである。
何でないか。 受け入れ基準ではない。どの数値もブロックを閉じる権限を与えない。緑か赤かは、ブロックする各規則が一つずつ決める。ダッシュボードは傾向を記述し、何を見るべきかを指す。閉鎖のしきい値として使われ始めたら、役に立つのをやめる。数値を上げる最短の道は規則を消すことだからである。
二つの数値、決して一つではない。
| 数値 | 式 | 何を測るか | どう動くか |
|---|---|---|---|
| コンプライアンス | 通る規則 ÷ 有効な規則 | 見ているものがどれだけきれいか | 直すと上がる |
| ゲートのカバレッジ | 有効な規則 ÷ カタログに宣言された規則 | 付録のどれだけが実際に見ているか | 規則を消すと下がる |
二つである理由:規則を消すとコンプライアンスは上がり、カバレッジは下がる。単一の数値では消すことは無料であり、ダッシュボードは盲目を報いる。反対の方向に動く二つの数値では、近道は消える。より良いダッシュボードを見せるには、規則を消すのではなくコードを直さなければならない。そしてカバレッジは測ることなしには上げられない。
レギュレーションの指紋。 各記録は、どの物差しで計算されたかを保存する。カタログの版、有効な規則と消えた規則、フロントエンドのアダプタ、道具の版である。それがなければ、昨日の 82 と今日の 91 は同じように書かれても同じ測定ではない。二つの異なるレギュレーションであり、系列は偽である。指紋のない二つの数値は進歩の幻想を生み、それはダッシュボードを持たないより悪い。指紋が変われば、記録は比較不能と印され、そうでなければ履歴は現行の物差しで再計算される。決してそれを言わずに並べてグラフ化しない。
ラチェット。 コンプライアンスは、それを説明する記録された決定なしにブロックから次へ下がらない。CQ-08 でテストのカバレッジがすでに持っているのと同じ仕組みである。今日の数値が明日の床である。下げることは禁じられていない。記録なしで下げることは禁じられている。
勘定に入らないもの。 人だけが判断できるもの——最初のクリックのテスト(UX-07)、タスクテスト(UX-06)、スクリーンショット(UX-27)、そしてすべての手動のケース——は、ブロックごとに名前と日付とともに合格または不合格として記録され、人間による検証のカバレッジとして別に報告される。コンプライアンスの割合には入らない。混ぜれば、結果は六十パーセントが測定で四十パーセントが意見の数値になり、どれがどちらか誰にも言えない。だから第 9 節はなお有効である。ダッシュボードはユーザビリティの評点を発明せず、規則を数える。
どう反証するか。 第 11 節の受け入れテストを拡張する。
| シナリオ | 要求される結果 |
|---|---|
| ブロックする規則の違反を仕込む | コンプライアンスが有効な規則のうちちょうど一つ分下がり、規則を名指す赤が現れる。 |
| 記録ありで規則を消す | コンプライアンスは上がりうる。カバレッジが宣言された規則のうち一つ分下がる。報告は規則、理由、再検討日を名指す。 |
| 記録なしで消す | 赤。そしてダッシュボードは出さない。無効なレギュレーションは数値を生まない。 |
| 同じツリーと同じ設定、二回の実行 | 同じ数値、同一。 |
| 二つのブロックの間で設定が変わる | 二つの記録は比較不能と印され、さもなければ履歴は現行の物差しで再計算される。 |
| ダッシュボードが閉鎖の基準として使われる | 誤用であり、有効なシナリオではない。緑は規則が決め、平均が決めるのではない。 |
どこに現れるか。 ステップ 12 の正直な報告(アンカー 5)に、この順で。まずゲートの二値の評決、次に二つの数値、次に何がいつまで消えているか、次に前のブロックに対する動きと、その名指された原因である。常に座席を伴う。*四ポイント下がった:CQ-15、請求画面のカタログ外の三つの文字列*。座席のない数値はノイズである。座席こそが、コードを読まない所有者にとってそれを実行可能なものにする。
宣言されたリスク。 ダッシュボードを読むのはコードを読まない所有者であり、だからこそ彼はそれが上がることを望む。数値が目的になり、目的が狙いを押しのける。防御は上にあり、五つある。消すときに互いに矛盾する二つの数値、異なる物差しの比較を妨げる指紋、記録なしの下降を許さないラチェット、割合の外にある人間のもの、そして平均によって交渉されないゲートを伴う必須の座席である。五つのうちどれかが崩れれば、ダッシュボードは消える。誤って使われたダッシュボードは、持たないより多くの損害を与える。
本付録のすべての決定は、日付、認可者、逐語の引用、影響を受けるファイルとともに docs/DECISIONES.md に残る。D-043(形態)、D-044(仕組み)、D-045(スイッチ)、D-046(スイッチの規律)、D-047(二つの数値を持つダッシュボード)。実装とその受け入れ基準は PND-002 に住む。
未決の判断は残っていない。形態(D-043 と D-044)、スイッチ(D-045 と D-046)、ダッシュボード(D-047)、アクセシビリティの重みを含む初期重大度(D-048)は決定済みである。本文は八言語で流通し、プロンプト API の一部になっている。これで日程に残っていた唯一の項目が閉じた。