[{"data":1,"prerenderedAt":781},["ShallowReactive",2],{"navigation":3,"doc-/getting-started/verification-tiers":217,"docs-all-paths":726},[4,19,39,63,87,111,127,195,211],{"title":5,"path":6,"stem":7,"children":8},"Welcome","/welcome","01.welcome",[9,11,15],{"title":5,"path":6,"stem":10},"01.welcome/index",{"title":12,"path":13,"stem":14},"Astar とは（5分）","/welcome/product-in-5-min","01.welcome/01.product-in-5-min",{"title":16,"path":17,"stem":18},"事業文脈","/welcome/business-context","01.welcome/02.business-context",{"title":20,"path":21,"stem":22,"children":23},"Getting Started","/getting-started","02.getting-started",[24,27,31,35],{"title":25,"path":21,"stem":26},"はじめかた","02.getting-started/index",{"title":28,"path":29,"stem":30},"リポジトリ取得と環境構築","/getting-started/repo-setup","02.getting-started/01.repo-setup",{"title":32,"path":33,"stem":34},"日々の開発ループ","/getting-started/dev-loop","02.getting-started/02.dev-loop",{"title":36,"path":37,"stem":38},"検証の 4 層","/getting-started/verification-tiers","02.getting-started/03.verification-tiers",{"title":40,"path":41,"stem":42,"children":43},"Architecture","/architecture","03.architecture",[44,47,51,55,59],{"title":45,"path":41,"stem":46},"アーキテクチャ","03.architecture/index",{"title":48,"path":49,"stem":50},"マルチテナンシーと RLS","/architecture/multi-tenancy-rls","03.architecture/01.multi-tenancy-rls",{"title":52,"path":53,"stem":54},"認可モデル","/architecture/authorization","03.architecture/02.authorization",{"title":56,"path":57,"stem":58},"AI サブシステム","/architecture/ai-subsystem","03.architecture/03.ai-subsystem",{"title":60,"path":61,"stem":62},"データモデル","/architecture/data-model","03.architecture/04.data-model",{"title":64,"path":65,"stem":66,"children":67},"Backend","/backend","04.backend",[68,71,75,79,83],{"title":69,"path":65,"stem":70},"バックエンド","04.backend/index",{"title":72,"path":73,"stem":74},"層構造","/backend/layering","04.backend/01.layering",{"title":76,"path":77,"stem":78},"規約","/backend/conventions","04.backend/02.conventions",{"title":80,"path":81,"stem":82},"テスト","/backend/testing","04.backend/03.testing",{"title":84,"path":85,"stem":86},"マイグレーション","/backend/migrations","04.backend/04.migrations",{"title":88,"path":89,"stem":90,"children":91},"Frontend","/frontend","05.frontend",[92,95,99,103,107],{"title":93,"path":89,"stem":94},"フロントエンド","05.frontend/index",{"title":96,"path":97,"stem":98},"モジュール内部構造","/frontend/module-anatomy","05.frontend/01.module-anatomy",{"title":100,"path":101,"stem":102},"API アクセスの一本道","/frontend/api-access-chain","05.frontend/02.api-access-chain",{"title":104,"path":105,"stem":106},"i18n","/frontend/i18n","05.frontend/03.i18n",{"title":108,"path":109,"stem":110},"デザインシステム","/frontend/design-system","05.frontend/04.design-system",{"title":112,"path":113,"stem":114,"children":115},"Go Agent And Cli","/go-agent-and-cli","06.go-agent-and-cli",[116,119,123],{"title":117,"path":113,"stem":118},"Go agent と CLI","06.go-agent-and-cli/index",{"title":120,"path":121,"stem":122},"Go agent","/go-agent-and-cli/go-agent","06.go-agent-and-cli/01.go-agent",{"title":124,"path":125,"stem":126},"CLI","/go-agent-and-cli/cli","06.go-agent-and-cli/02.cli",{"title":128,"path":129,"stem":130,"children":131},"Modules","/modules","07.modules",[132,135,139,143,147,151,155,159,163,167,171,175,179,183,187,191],{"title":133,"path":129,"stem":134},"モジュール","07.modules/index",{"title":136,"path":137,"stem":138},"テーブル","/modules/table","07.modules/01.table",{"title":140,"path":141,"stem":142},"ドキュメントツリー","/modules/document","07.modules/02.document",{"title":144,"path":145,"stem":146},"AIチャット","/modules/ai","07.modules/03.ai",{"title":148,"path":149,"stem":150},"認証・権限","/modules/auth","07.modules/04.auth",{"title":152,"path":153,"stem":154},"AI取込","/modules/organize","07.modules/05.organize",{"title":156,"path":157,"stem":158},"ストレージ","/modules/storage","07.modules/06.storage",{"title":160,"path":161,"stem":162},"NAS同期","/modules/sync","07.modules/07.sync",{"title":164,"path":165,"stem":166},"ワークスペース","/modules/workspace","07.modules/08.workspace",{"title":168,"path":169,"stem":170},"テナントとメンバーシップ","/modules/tenant-membership","07.modules/09.tenant-membership",{"title":172,"path":173,"stem":174},"検索","/modules/search","07.modules/10.search",{"title":176,"path":177,"stem":178},"表示ビュー","/modules/display","07.modules/11.display",{"title":180,"path":181,"stem":182},"テンプレート","/modules/template","07.modules/12.template",{"title":184,"path":185,"stem":186},"メール","/modules/mail","07.modules/13.mail",{"title":188,"path":189,"stem":190},"電話","/modules/phone","07.modules/14.phone",{"title":192,"path":193,"stem":194},"リアルタイム","/modules/realtime","07.modules/15.realtime",{"title":196,"path":197,"stem":198,"children":199},"Infra And Deploy","/infra-and-deploy","08.infra-and-deploy",[200,203,207],{"title":201,"path":197,"stem":202},"インフラとデプロイ","08.infra-and-deploy/index",{"title":204,"path":205,"stem":206},"環境の種類","/infra-and-deploy/environments","08.infra-and-deploy/01.environments",{"title":208,"path":209,"stem":210},"セルフホスト構成","/infra-and-deploy/self-host","08.infra-and-deploy/02.self-host",{"title":212,"path":213,"stem":214,"children":215},"docs-map","/docs-map","09.docs-map/index",[216],{"title":212,"path":213,"stem":214},{"id":218,"title":36,"body":219,"description":720,"extension":721,"meta":722,"navigation":723,"path":37,"seo":724,"stem":38,"__hash__":725},"docs/02.getting-started/03.verification-tiers.md",{"type":220,"value":221,"toc":710},"minimark",[222,226,235,239,318,321,381,391,399,412,467,470,537,557,569,576,592,595,644,664,670,674,677,680,683,691,695,706],[223,224,36],"h1",{"id":225},"検証の-4-層",[227,228,229,230,234],"p",{},"変更を ",[231,232,233],"code",{},"main"," に ship する前に、コンパイルが通ること以上の確認をします。Astar では検証を 4 つの層（L1〜L4）に分け、変更の種類に応じてどこまで検証するかを決めます。",[236,237,238],"h2",{"id":238},"ピラミッド",[240,241,242,258],"table",{},[243,244,245],"thead",{},[246,247,248,252,255],"tr",{},[249,250,251],"th",{},"層",[249,253,254],{},"何を確認するか",[249,256,257],{},"主な手段",[259,260,261,282,293,307],"tbody",{},[246,262,263,267,270],{},[264,265,266],"td",{},"L1",[264,268,269],{},"静的チェック（typecheck・lint・compile）",[264,271,272,275,276,275,279],{},[231,273,274],{},"nuxt typecheck"," / ",[231,277,278],{},"eslint",[231,280,281],{},"./gradlew compileKotlin",[246,283,284,287,290],{},[264,285,286],{},"L2",[264,288,289],{},"対象を絞った単体テスト",[264,291,292],{},"vitest（変更ファイル関連のみ）/ backend unit test",[246,294,295,298,301],{},[264,296,297],{},"L3",[264,299,300],{},"コンポーネントの見た目",[264,302,303,306],{},[231,304,305],{},"/__dev/*"," 固定モックプレビュー",[246,308,309,312,315],{},[264,310,311],{},"L4",[264,313,314],{},"結合（API・E2E）",[264,316,317],{},"backend integration test / 実際の API 疎通確認",[227,319,320],{},"すべての変更で全層を回す必要はありません。変更の種類ごとの目安:",[240,322,323,333],{},[243,324,325],{},[246,326,327,330],{},[249,328,329],{},"変更の種類",[249,331,332],{},"必要な層",[259,334,335,346,358,365,373],{},[246,336,337,343],{},[264,338,339,342],{},[231,340,341],{},".vue"," ファイル",[264,344,345],{},"L1 + L2 + L3",[246,347,348,355],{},[264,349,350,351,354],{},"frontend ",[231,352,353],{},".ts","（コンポーネント以外）",[264,356,357],{},"L1 + L2",[246,359,360,363],{},[264,361,362],{},"backend service / model",[264,364,357],{},[246,366,367,370],{},[264,368,369],{},"backend controller / DTO / migration",[264,371,372],{},"L1 + L2 + L4",[246,374,375,378],{},[264,376,377],{},"フルスタックの変更",[264,379,380],{},"L1 + L2 + L3 + L4",[227,382,383,386,387,390],{},[231,384,385],{},"/verify"," skill がこの判定と実行を助けます。",[231,388,389],{},".claude/skills/verify/verify.sh"," が変更ファイルを検出し、L1・L2 を自動実行、L3・L4 が必要かどうかと実行方法を提示します。",[236,392,394,395,398],{"id":393},"backend-テストは-backend-test-reports-skill-経由だけ","backend テストは ",[231,396,397],{},"/backend-test-reports"," skill 経由だけ",[227,400,401,408,409,411],{},[402,403,404,407],"strong",{},[231,405,406],{},"./gradlew test"," を直接叩くことはできません（settings.json で deny）。"," backend のテストを実行・確認する唯一の経路は ",[231,410,397],{}," skill です。",[413,414,419],"pre",{"className":415,"code":416,"language":417,"meta":418,"style":418},"language-bash shiki shiki-themes github-light github-dark",".claude/skills/backend-test-reports/test.sh run --unit\n.claude/skills/backend-test-reports/test.sh run --integration --module table\n.claude/skills/backend-test-reports/test.sh run --tests \"*RoleControllerAuthorizationTest*\"\n","bash","",[231,420,421,438,454],{"__ignoreMap":418},[422,423,426,430,434],"span",{"class":424,"line":425},"line",1,[422,427,429],{"class":428},"sScJk",".claude/skills/backend-test-reports/test.sh",[422,431,433],{"class":432},"sZZnC"," run",[422,435,437],{"class":436},"sj4cs"," --unit\n",[422,439,441,443,445,448,451],{"class":424,"line":440},2,[422,442,429],{"class":428},[422,444,433],{"class":432},[422,446,447],{"class":436}," --integration",[422,449,450],{"class":436}," --module",[422,452,453],{"class":432}," table\n",[422,455,457,459,461,464],{"class":424,"line":456},3,[422,458,429],{"class":428},[422,460,433],{"class":432},[422,462,463],{"class":436}," --tests",[422,465,466],{"class":432}," \"*RoleControllerAuthorizationTest*\"\n",[227,468,469],{},"backend のテストにはクラス名のサフィックスによる区分があります。",[240,471,472,482],{},[243,473,474],{},[246,475,476,479],{},[249,477,478],{},"タスク",[249,480,481],{},"対象",[259,483,484,504,514,527],{},[246,485,486,491],{},[264,487,488],{},[231,489,490],{},"unitTest",[264,492,493,496,497,500,501],{},[231,494,495],{},"@Tag(\"unit\")"," かつ ",[231,498,499],{},"*ArchitectureTest|*GuardTest|*BoundaryTest|*SnapshotTest|*CoverageTest|*ContractTest|*ParityTest"," ",[402,502,503],{},"以外",[246,505,506,511],{},[264,507,508],{},[231,509,510],{},"guardTest",[264,512,513],{},"上記 7 サフィックスちょうど（ArchUnit ベース。共有 import cache のため 4g heap が必要）",[246,515,516,521],{},[264,517,518],{},[231,519,520],{},"integrationTest",[264,522,523,526],{},[231,524,525],{},"IntegrationTestBase"," を継承する結合テスト",[246,528,529,534],{},[264,530,531],{},[231,532,533],{},"prTest",[264,535,536],{},"PR フィードバックを 10 分以内に収めるための厳選サブセット（DB 不要の安全ガード・wire contract・i18n 整合性など）",[227,538,539,540,542,543,546,547,275,549,275,551,553,554,556],{},"PR は ",[231,541,533],{}," + ",[231,544,545],{},"integrationGuardTest","（RLS/authz の DB レベルパリティゲート）を実行します。",[231,548,490],{},[231,550,510],{},[231,552,520],{}," のフルセットは ",[231,555,233],{}," push 時・夜間・手動実行のタイミングです。",[558,559,561],"callout",{"type":560},"info",[227,562,563,565,566,568],{},[231,564,233],{}," ブランチには既知の red（自分が触っていないなら直す対象ではないテスト失敗）があります。unit で 6 クラスにまたがる 27 件、integration で 8 クラスにまたがる 14 件（RLS 分離テスト含む）などです。自分の変更と無関係な失敗に遭遇したら、まず ",[231,567,397],{}," の結果とその変更範囲を見比べて、pre-existing red かどうかを確認してください。",[236,570,572,573,575],{"id":571},"l3-見た目の検証は-__dev-固定プレビューのみ","L3 — 見た目の検証は ",[231,574,305],{}," 固定プレビューのみ",[558,577,579],{"type":578},"warning",[227,580,581,584,585,587,588,591],{},[402,582,583],{},"ライブアプリを Playwright で操作するループ（ログイン → 画面遷移 → クリック → ドラッグ&ドロップ試行）は検証手段として使いません。"," 対象コンポーネントを state ごと（空・データあり・編集不可・エラーなど）に固定モックで ",[231,586,305],{}," route に並べ、各 state をスクリーンショットして目視確認します。機能面の保証は L1/L2 が担い、操作感（ドラッグの手応え・リサイズ・hover）は人間が確認する領分です。新規コンポーネントや大きく手を入れたコンポーネントは実装と同時に ",[231,589,590],{},"/__dev"," プレビューページも用意します。",[227,593,594],{},"frontend の静的検証コマンドは次の組み合わせです。",[413,596,598],{"className":415,"code":597,"language":417,"meta":418,"style":418},"bun run typecheck\nnpx eslint --no-fix \u003Cchanged-paths>\nbun run test\n",[231,599,600,610,635],{"__ignoreMap":418},[422,601,602,605,607],{"class":424,"line":425},[422,603,604],{"class":428},"bun",[422,606,433],{"class":432},[422,608,609],{"class":432}," typecheck\n",[422,611,612,615,618,621,625,628,632],{"class":424,"line":440},[422,613,614],{"class":428},"npx",[422,616,617],{"class":432}," eslint",[422,619,620],{"class":436}," --no-fix",[422,622,624],{"class":623},"szBVR"," \u003C",[422,626,627],{"class":432},"changed-path",[422,629,631],{"class":630},"sVt8B","s",[422,633,634],{"class":623},">\n",[422,636,637,639,641],{"class":424,"line":456},[422,638,604],{"class":428},[422,640,433],{"class":432},[422,642,643],{"class":432}," test\n",[558,645,646],{"type":578},[227,647,648,651,652,655,656,659,660,663],{},[231,649,650],{},"bun run lint"," は ",[231,653,654],{},"eslint . --fix"," を",[402,657,658],{},"リポジトリ全体","に対して実行し、対象ファイル引数を無視します。検証目的では絶対に使わないでください — 無関係なファイルを黙って書き換えます。検証には ",[231,661,662],{},"npx eslint --no-fix \u003C対象パス>"," を使います。",[227,665,666,667,669],{},"Storybook（既存 25 story）は後方互換のためだけに残っています。新規コンポーネントに新しい story を追加することはありません — ",[231,668,590],{}," プレビューが標準です。",[236,671,673],{"id":672},"l4-結合検証","L4 — 結合検証",[227,675,676],{},"API やマイグレーションを変更した場合は、backend integration test に加えて、実際に動いている backend/frontend に対して API 疎通を確認します。TestContainers が DB を自動で用意するので、integration test 自体は並行セッションと衝突しません。",[236,678,679],{"id":679},"検証結果の書式",[227,681,682],{},"検証が終わったら、次の形式で結果を残します（コミットメッセージに含めるのが慣習です）。",[413,684,689],{"className":685,"code":687,"language":688},[686],"language-text","Verified: L1(pass) L2(unit:12/12,backend:5/5) L3(visual:pass) L4(integration:8/8)\n","text",[231,690,687],{"__ignoreMap":418},[236,692,694],{"id":693},"次は-backendfrontend-それぞれの規約へ","次は backend/frontend それぞれの規約へ",[227,696,697,698,700,701,705],{},"このページはリポジトリ横断の検証の仕組みを扱いました。backend 固有のテストの書き方（命名規則・",[231,699,525],{}," の使い方・RLS テストパターンなど）は ",[702,703,704],"a",{"href":81},"backend のテスト規約"," を参照してください。",[707,708,709],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":418,"searchDepth":440,"depth":440,"links":711},[712,713,715,717,718,719],{"id":238,"depth":440,"text":238},{"id":393,"depth":440,"text":714},"backend テストは /backend-test-reports skill 経由だけ",{"id":571,"depth":440,"text":716},"L3 — 見た目の検証は /__dev/* 固定プレビューのみ",{"id":672,"depth":440,"text":673},{"id":679,"depth":440,"text":679},{"id":693,"depth":440,"text":694},"L1（静的）〜L4（結合）の検証ピラミッドと、backend テストの唯一の実行経路。「動いた」を確認してから ship するための最低限。","md",{},{"title":36},{"title":36,"description":720},"WF8KESv_VHu43QMwD13eZaAtd6wh_34T_FawuUtney0",[727,729,730,732,733,734,735,736,737,738,739,740,742,743,744,745,746,748,749,750,751,752,754,756,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,776,777,778,779],{"path":13,"title":728},"Astar とは何か（5分で）",{"path":17,"title":16},{"path":6,"title":731},"ようこそ",{"path":29,"title":28},{"path":33,"title":32},{"path":37,"title":36},{"path":21,"title":25},{"path":49,"title":48},{"path":53,"title":52},{"path":57,"title":56},{"path":61,"title":60},{"path":41,"title":741},"システムアーキテクチャ",{"path":73,"title":72},{"path":77,"title":76},{"path":81,"title":80},{"path":85,"title":84},{"path":65,"title":747},"バックエンドガイド",{"path":97,"title":96},{"path":101,"title":100},{"path":105,"title":104},{"path":109,"title":108},{"path":89,"title":753},"フロントエンドガイド",{"path":121,"title":755},"Go agent — NAS 同期エージェント",{"path":125,"title":757},"astar CLI",{"path":113,"title":117},{"path":137,"title":136},{"path":141,"title":140},{"path":145,"title":144},{"path":149,"title":148},{"path":153,"title":152},{"path":157,"title":156},{"path":161,"title":160},{"path":165,"title":164},{"path":169,"title":168},{"path":173,"title":172},{"path":177,"title":176},{"path":181,"title":180},{"path":185,"title":184},{"path":189,"title":188},{"path":193,"title":192},{"path":129,"title":775},"モジュール索引",{"path":205,"title":204},{"path":209,"title":208},{"path":197,"title":201},{"path":213,"title":780},"docs/ 地図",1785452454859]