Skip to content

fix: HIL 基盤の実装レビューで見つかった不具合を修正する - #1119

Draft
owk-owk130 wants to merge 10 commits into
feat/hil-5-source-candidatefrom
fix/hil-review-findings
Draft

fix: HIL 基盤の実装レビューで見つかった不具合を修正する#1119
owk-owk130 wants to merge 10 commits into
feat/hil-5-source-candidatefrom
fix/hil-review-findings

Conversation

@owk-owk130

@owk-owk130 owk-owk130 commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

概要

スタック #1115(PR #1111#1118)の実装を自己レビューして見つかった不具合 3 件の修正。
修正が PR 2(承認ゲート)と PR 4(訂正)の両方のコードに跨るため、独立した最上段の PR にしています。

1. index 成功後に sourceHash を確定する(Critical)

indexing.ts は内容変更を検知した時点で sourceHash を新しい値へ更新していたため、この順序で状態が壊れていました。

  1. hash を新値へ更新
  2. 旧ベクトルを削除
  3. embedding が失敗 → markIndexed はスキップされるので indexedAt は古い値が残る
  4. Queue がリトライ → skipUnchanged の 3 条件(approved / indexedAt あり / hash 一致)がすべて成立してスキップ

結果、Vectorize からベクトルが消えたまま D1 は「index 済み」と主張し、リトライも永久に効きません。復旧は全削除 + 全同期しかなく、検索が無言で 0 件になる以外に兆候がありませんでした。

修正: メタデータ(hash・etag・chunkCount・indexedAt)の更新を index 成功後に一本化。失敗時は markRemoved で「未 index」を明示し、次回のリトライが必ず再実行されるようにしました。

2. 訂正の発行成功後に published へ更新する(High)

D1 に published を書いた後に R2 / index を実行していたため、発行が失敗しても DB は published のまま残り、管理画面が「公開中」と表示していました(実際は検索に反映されていない)。エラー文は「再発行してください」と案内するのに、その手段が画面にありませんでした。

修正:

  • draft で保存 → 発行成功後に published へ更新(Resolver は published のみ注入するので draft が回答に混ざることはない)
  • POST /admin/corrections/{id}/publish を追加し、未反映の訂正を単体で再発行できるようにした
  • 管理画面に「未反映(回答に反映されていません)」バッジと「再発行する」ボタン、フィルタタブを追加
  • reverify も同じ順序に修正(発行成功後に確認日を更新)

3. 検索 0 件の回答に訂正の代替導線を示す(詰み)

訂正対象の候補を検索ヒットから作っていたため、hits が 0 件だと選択肢ゼロで「訂正を作成する」ボタン自体が消え、職員から見ると行き止まりでした。要確認シグナル 3 種のうち「検索 0 件」が一番手当てしたいケースなのに導線がない状態でした。

修正: 0 件時は「参照したナレッジが無いため訂正は作成できません。情報自体が不足している場合は『情報源不足』を選んでください」と表示。設計上この場合は訂正ではなく情報源不足の判断が正しいため、それを明示します。

自己レビューで挙がった残りの指摘

このPRでは対応せず、後続の #1120 でまとめて対応した。

  • 情報源承認(PR 2 の API)に管理画面がなく、super_admin 限定のため村職員が承認に到達できない
  • 訂正発行の権限が admin、ソース承認が super_admin で、影響力の大きい訂正の方がゲートが緩い
  • ソースを disabled / rejected にしても紐づく訂正に伝播せず、廃止した情報の訂正が残る
  • retention の依存順が逆(review_decisions 3年 に対し retrieval_runs 90日・mastra_messages 30日)で、判断記録が根拠を失う
  • trace が訂正注入前のスナップショットのため、HIL 画面で Resolver の効果を確認できない
  • 訂正の編集、判断の取り消し、候補承認の取り消しがない。一覧に検索がない

品質ゲート

lint + tsc + server 1551 / web 722 テスト green。#1 は「失敗 → リトライで復旧する」ケースをテストで固定しています。

🤖 Generated with Claude Code

https://claude.ai/code/session_018BjNFvQjDzMwF8HaZHnJjP

owk-owk130 and others added 3 commits September 2, 2026 09:35
embedding 失敗時に sourceHash だけ新しい値へ進むため、リトライが
skipUnchanged で「変更なし」と誤認してベクトル欠損が恒久化していた。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018BjNFvQjDzMwF8HaZHnJjP
発行が失敗しても published のまま残り、管理画面が反映済みと表示していた。
draft で保存して発行成功時に published へ進め、未反映の訂正は画面から
再発行できるようにする。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018BjNFvQjDzMwF8HaZHnJjP
参照ナレッジが無いと訂正ボタンが消え、次に何をすべきか分からなかった。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018BjNFvQjDzMwF8HaZHnJjP
@owk-owk130 owk-owk130 changed the title fix/hil review findings fix: HIL 基盤の実装レビューで見つかった不具合を修正する Sep 2, 2026
@github-actions

github-actions Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Coverage Report for server

Status Category Percentage Covered / Total
🟢 Lines 98.11% (🎯 97%) 3859 / 3933
🟢 Statements 97.56% (🎯 96%) 4047 / 4148
🟢 Functions 97.99% (🎯 97%) 732 / 747
🟢 Branches 89.64% (🎯 87%) 1585 / 1768
File Coverage
File Stmts Branches Functions Lines Uncovered Lines
Changed Files
server/src/repository/review-repository.ts 82.75% 85.71% 77.77% 82.14%
server/src/routes/admin/corrections.ts 100% 90% 100% 100%
server/src/services/knowledge/indexing.ts 100% 100% 100% 100%
server/src/services/knowledge/retrieval-trace.ts 100% 100% 100% 100%
Generated in workflow #2112 for commit 48f034f by the Vitest Coverage Report Action

@github-actions

github-actions Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Coverage Report for shared

Status Category Percentage Covered / Total
🟢 Lines 99.25% (🎯 98%) 268 / 270
🟢 Statements 80.61% (🎯 80%) 287 / 356
🟢 Functions 100% (🎯 98%) 92 / 92
🟢 Branches 62.88% (🎯 62%) 122 / 194
File Coverage
File Stmts Branches Functions Lines Uncovered Lines
Changed Files
shared/src/api/repository/correction-repository.ts 77.27% 50% 100% 100%
Generated in workflow #2112 for commit 48f034f by the Vitest Coverage Report Action

@github-actions

github-actions Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Coverage Report for web

Status Category Percentage Covered / Total
🟢 Lines 97.57% (🎯 96%) 1811 / 1856
🟢 Statements 96.44% (🎯 95%) 1924 / 1995
🟢 Functions 96.28% (🎯 95%) 777 / 807
🟢 Branches 89.51% (🎯 88%) 1255 / 1402
File Coverage
File Stmts Branches Functions Lines Uncovered Lines
Changed Files
web/src/app/dashboard/components/CorrectionsPanel.tsx 93.93% 91.48% 90.9% 96.77%
web/src/app/dashboard/components/review/ReviewDetailModal.tsx 100% 84.21% 100% 100%
web/src/app/dashboard/hooks/useCorrections.ts 100% 100% 100% 100%
Generated in workflow #2112 for commit 48f034f by the Vitest Coverage Report Action

@github-actions

github-actions Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Coverage Report for widget

Status Category Percentage Covered / Total
🟢 Lines 99.62% (🎯 98%) 265 / 266
🟢 Statements 97.94% (🎯 96%) 286 / 292
🟢 Functions 98.11% (🎯 98%) 52 / 53
🟢 Branches 93.28% (🎯 92%) 139 / 149
File CoverageNo changed files found.
Generated in workflow #2112 for commit 48f034f by the Vitest Coverage Report Action

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant