{
  "schemaVersion": "pack-artifacts/v0",
  "artifact": "normative",
  "stage": "final",
  "attemptId": "attempt-job-01M381XCB1AZR8F868BPMGKA52-7108bd34-b05a-4051-8327-eab88df9e8b0",
  "body": {
    "annotations": [
      {
        "faultId": "amount-label-not-associated",
        "wcag": [
          {
            "sc": "1.3.1",
            "note": "可視ラベルとフィールドの関係がプログラム的に決定できない失敗。\n結果として金額欄に名前がない状態にもなるため 4.1.2 でも指摘できるが、\n原因は「関係」の欠落なので 1.3.1 を主とする。axe(label)で検出可能。\n"
          }
        ],
        "impact": "可視ラベル(label 要素)はあるが for/id の紐付けがなく、支援技術からは\nフィールド名として関連付けられない(catalog/faults.yaml notes)。\n",
        "severity": "medium",
        "fixGuidance": "申請フォームの金額欄で label 要素の for と input の id を一致させる\n(または label で input を包含する)。NumberInput コンポーネントが id を\n受け取る設計なら、呼び出し側で渡すのが正しい修正箇所。\n"
      },
      {
        "faultId": "combobox-no-keyboard",
        "wcag": [
          {
            "sc": "2.1.1",
            "note": "候補の選択がポインタ操作でしか行えないため「キーボード」の失敗。\n2.1.1 は機能単位で見るので、テキスト入力自体が可能でも候補選択が\nできなければ失敗と判定する。\n"
          }
        ],
        "impact": "全 Combobox インスタンス(3画面)に影響し、マウス操作では問題が表面化しないため\n自動チェックでも見逃されやすい(catalog/faults.yaml notes)。\n",
        "severity": "high",
        "fixGuidance": "Combobox コンポーネント側で ↑↓ による候補移動、Enter で確定、Esc で\nリストを閉じるキー操作を実装する(APG Combobox パターン)。修正は\nコンポーネント 1 箇所で行い、全インスタンスに反映させる。個々の画面で\nイベントハンドラを補うのは原因への修正ではない。\n"
      },
      {
        "faultId": "datatable-sort-state-missing",
        "wcag": [
          {
            "sc": "4.1.2",
            "note": "ソート列と方向は列ヘッダーの「状態」であり aria-sort で公開されるべき。\n型単位の欠陥だが、ソート可能モードは承認一覧のテーブルだけなので\n観測できるのはその 1 画面。\n"
          }
        ],
        "impact": "ソート状態を示す矢印は視覚的に更新されるが、支援技術には現在の\nソート列・方向が伝わらない(catalog/faults.yaml notes)。\n",
        "severity": "medium",
        "fixGuidance": "DataTable のソート可能な列ヘッダー(th)に aria-sort を付与し、現在の\nソート列は \"ascending\"/\"descending\"、それ以外の列は属性なし(または\n\"none\")にする。ヘッダー内のソートボタンにも「金額で並べ替え」のような\nアクセシブルネームを持たせる。\n"
      },
      {
        "faultId": "dialog-no-focus-return",
        "wcag": [
          {
            "sc": "2.4.3",
            "note": "閉じた後のフォーカス先がトリガーへ戻らず文書先頭などに落ちるため\nフォーカス順序が意味・操作性を損なう。確定で閉じる経路は spec 未定義\nのため対象外で、キャンセル経路のみを失敗とする。\n"
          }
        ],
        "impact": "キャンセルでダイアログを閉じた際にフォーカスがトリガーへ戻らず、\nキーボード利用者が操作の起点を見失う(catalog/faults.yaml notes)。\n",
        "severity": "high",
        "fixGuidance": "Dialog コンポーネントが開く時点でトリガー要素(document.activeElement)を\n保持し、キャンセルで閉じるときにそこへフォーカスを戻す。閉じる契機\n(Esc・キャンセルボタン・背景クリック)のすべてで同じ復帰処理を通す。\nトリガーが DOM から消える場合の代替先も決めておく。\n"
      },
      {
        "faultId": "error-summary-not-focused",
        "wcag": [],
        "impact": "バリデーションエラー時にフォーカスがエラー要約へ移動しないため\nエラー発生に気づけない可能性がある。spec 6章(focusTarget: error-summary)\nへの明確な違反だが、WCAG の特定達成基準の失敗とは言い切れないため\nwcag は空とし spec 違反として指摘する(catalog/faults.yaml notes)。\n",
        "severity": "medium",
        "fixGuidance": "送信時のバリデーション失敗後、エラー要約コンテナ(tabindex=\"-1\")へ\nプログラム的にフォーカスを移動する。要約には見出しと各エラーへの\nリンクを置き、リンクから該当フィールドへ移動できるようにする。\nspec 6 章の期待挙動に合わせる修正であり、WCAG 番号を根拠にしない。\n"
      },
      {
        "faultId": "notification-no-live-region",
        "wcag": [
          {
            "sc": "4.1.3",
            "note": "申請受付・承認完了・エラーなどの操作結果通知はフォーカスを移さずに\n伝えるべきステータスメッセージの典型。notification-auto-dismiss\nとは同じ領域に対する別の欠陥(こちらは通知されない、あちらは消える)。\n"
          }
        ],
        "impact": "操作結果の通知は視覚的には表示されるが読み上げられず、申請受付・承認完了・\nエラー通知のすべてに影響する(blast-radius 最大級。catalog/faults.yaml notes)。\n",
        "severity": "high",
        "fixGuidance": "NotificationRegion のコンテナを初期表示時から DOM に置き、成功系は\nrole=\"status\"(polite)、エラー系は role=\"alert\"(assertive)で公開する。\n通知の表示は既存コンテナ内の内容更新で行う。通知ごとにコンテナを\n生成・破棄する実装では読み上げが安定しない。\n"
      },
      {
        "faultId": "outline-none-global",
        "wcag": [
          {
            "sc": "2.4.7",
            "note": "全要素で outline: none が指定されフォーカス表示が一切ないため、\n「フォーカスの可視化」の失敗。リセット CSS 起因で個別コンポーネントの\n問題ではない。composed gate はプログラム的にフォーカスを検証するため\nこの欠陥を検出しない。\n"
          }
        ],
        "impact": "全要素のフォーカスインジケーターが消えており、キーボード操作時に\nどこにフォーカスがあるか視覚的に分からない(blast-radius 最大級。\ncatalog/faults.yaml notes)。\n",
        "severity": "high",
        "fixGuidance": "リセット CSS の `*:focus { outline: none }` を削除する。マウス操作時の\n表示を抑えたいなら :focus-visible でスタイルを定義し、ブラウザ既定と\n同等以上に視認できるインジケーターを用意する。コンポーネントごとに\noutline を戻す修正は取り残しを生む。\n"
      },
      {
        "faultId": "status-color-only",
        "wcag": [
          {
            "sc": "1.4.1",
            "note": "ステータスの区別が色ドットだけで、テキストや形状の手がかりがない失敗。\nドットに aria-label が付いていても、色覚特性のある晴眼者には\n伝わらないため 1.4.1 の失敗は残る。\n"
          }
        ],
        "impact": "申請一覧にステータス列がなく、申請ID セル冒頭の色ドットのみで区別されて\nおり、色を識別できない利用者はステータスを判別できない\n(catalog/faults.yaml notes)。\n",
        "severity": "medium",
        "fixGuidance": "申請一覧にステータス列を設け、「承認待ち」「承認済み」等のテキストを\n表示する(色ドットは補助として残してよい)。デザインカンプ段階の判断の\n修正であり、ドットに aria-label を足すだけの対応では 1.4.1 の失敗が残る。\n"
      }
    ]
  }
}
