2026-10-15 回帰テストと未解決事項
対象: ASUS-ROG-STRIX の Z:\mts-service、HEAD af8ba3d と既存の未コミット変更。 AGENTS.md、Git差分・直近変更、既存テストを確認し、既存のソース・文書・テストは編集せず新規ファイルだけを追加した。 本番、実DB、Discord、実LLM/Whisper等の外部サービスには接続していない。 コミット・プッシュ・本番復元は行っていない。
追加した検証
既存の解析・修復の正常系や同じ入力例を増やさず、境界をまたぐ振る舞いを確認した。 パスはリポジトリルート基準。
| ファイル | 対象 |
|---|---|
new-sharded/test/localLlmFailureBoundaries.test.js | 両クライアントの待機期限切れ時の容量維持、待機時間のHTTP予算からの控除、本文読み取りのabort後の待機要求継続、編集失敗時のrelay保持・非成功カウント・課金阻止・予約解放、Ollama修復失敗時の期限共有 |
new-sharded/test/jsonStoreFailureState.test.js | 一時ディレクトリ内の実JSONとrename失敗注入によるディスク/キャッシュ/一時ファイルの確認 |
new-sharded/test/whisperAccountingBoundaries.test.js | 利用量読取中の停止、精算待機中の停止、精算拒否時の例外伝播・後段停止・ロック/予約解放 |
new-sharded/test/helpers/localLlmBoundaryHarness.js | 実クライアント→解析→修復→翻訳→編集経路を許可リスト内のソースだけで実行。config・ストア・HTTPはモック、時刻/タイマーは決定的に制御 |
新規分は17件: 成功13、TODO 4、通常失敗0。TODOはスキップではなく、期待する安全性のassertionを 実行して失敗する再現テスト。実装変更を伴わない今回の範囲では、既存CIを常時失敗させないためTODOを付けた。 終了コード0を「問題が修正された」と解釈しない。
未修正の3項目
| 項目 | 再現と実際の挙動 | 影響・今回の扱い |
|---|---|---|
| JSON保存失敗後のキャッシュ | JsonStore.update のupdaterがオブジェクトを変更後、renameがEIOで失敗。ディスクは元のままでも同じstoreの read() は未保存の値を返す | src/store/jsonStore.js の readMutable() の値を永続化前に変更するため。JSONバックエンドで、後続処理が未保存の設定/残高を使用するおそれ。TODO 1件、実装未変更 |
| 未閉じ引用符の解析 | parseTranslationResponse('"unfinished fixture', ['ja']) が例外を投げず、引用符を含む平文訳として成功する | src/services/localLlmResponse.js の単一言語平文互換経路。引用符から始まる不正JSONを拒否する期待と異なる。互換仕様との調整が必要。TODO 1件、実装未変更 |
| 解析エラーの本文混入 | 不正JSONのtext値に合成マーカーを置くと、NodeのJSON.parse例外の抜粋がクライアントのエラー経由で autoTranslation.js のログに残る | ollamaClient.js / lmstudioClient.js がparseError.messageを転送。応答本文に機密が含まれる場合、ログにも入る可能性。実際の秘密値は使用していない。両クライアントのTODO 2件、実装未変更 |
予約解放・既存relay保持の成功と、上記の安全性の問題は別の検証結果。 JSONの原子的置換は、プロセス内キャッシュのロールバックや停電時の永続性まで保証しない。
実行結果
Nodeはリポジトリの .tools/node-v24.21.0-win-x64/node.exe(v24.21.0)。
| 検証 | 結果 |
|---|---|
| 新規3テストファイル | 13成功、4 TODO(上記3項目の再現)、通常失敗0 |
| 新規分を含む関連14ファイル | 101件中97成功、4 TODO、通常失敗0 |
既存 localLlmPrompt.test.js | 自前loopback HTTPモックの3件成功。.env読込を無効化して実行 |
| dashboardの設定保存・設定ルート認可3ファイル | 10件成功 |
既存 maintenanceDatabasePlan.test.js | DBモック/計画検証89件成功 |
maintenance.js help / maintenance-db.js --help | 接続せずに実行成功 |
| 新規JavaScript4ファイル | node --check 成功 |
| docs | portable-link検査(28文書)、Git無し設定検査、VitePressビルド成功。出力は作業用の別ディレクトリ |
| Git差分 | git diff --check 成功。既存のtracked差分は開始時と同じ31ファイル、1408追加/193削除 |
関連検証の合計は203件: 成功199、TODO 4、通常失敗0(新規17件は関連14ファイルの101件に含む)。
最初の関連テスト実行では、既存 localLlmPrompt.test.js の自前loopbackモックへの接続3件が サンドボックスのEACCESで失敗した。モックの動的ポートのみを使用することをソースで確認し、 .env を読むdotenvをテスト用preloadで無効化して、当該3件だけをサンドボックス外で再実行し成功。 実サービスを使うための権限拡大はしていない。
代表的な再実行コマンド(リポジトリルート、接続不要):
$node = '.tools\node-v24.21.0-win-x64\node.exe'
& $node --test new-sharded/test/localLlmFailureBoundaries.test.js new-sharded/test/jsonStoreFailureState.test.js new-sharded/test/whisperAccountingBoundaries.test.js
$names = @('localLlmResponse', 'localLlmRepair', 'ollamaPromptShape',
'reviewLocalLlmDeadline', 'reviewPersistenceSafety', 'reviewVoiceAccounting',
'reviewUserSettingsAtomicity', 'translationFallback', 'translationText',
'translationSanitizer', 'translationFilters', 'localLlmFailureBoundaries',
'jsonStoreFailureState', 'whisperAccountingBoundaries')
$tests = $names | ForEach-Object { "new-sharded/test/$_.test.js" }
& $node --test @tests
& $node --test new-sharded/test/maintenanceDatabasePlan.test.js
& $node --test dashboard/test/accountSettingsPersistence.test.ts dashboard/test/developerBetaSettingsRoute.test.ts dashboard/test/channelSettingsRouteSecurity.test.ts実DBが必要な統合テストと全件の npm test は実行対象にしていない。 新規の編集経路テストでは永続カウンター/DBのトランザクション自体はモックであり、 予約解放や非成功カウントの呼び出し境界を検証した。実ネットワークの中断や 本番バックアップ/復元、実課金・実投稿を含む確認は未実施。
復旧の順序・注意事項は 障害時の診断・バックアップ・復旧 を参照。
