Skip to content

[repo] レビュー由来の小さな問題まとめ (dead code / stale comment / 表示の細かい不整合) #238

Description

@shinyaoguri

2026-08-02 のプロジェクト全体レビューで見つかった、単独では Issue にするほどでない小さな問題をまとめる。個別に片付けても、まとめて 1 PR にしてもよい。

verify (web)

  • TrustCalculator.ts:57-63: issue メッセージに shared の英語文言が素通しされる (message: verificationResult.message || t('trust.issueChainInvalid'))。ja ロケールで Previous hash mismatch at event 42: ... のような英文が混ざる
  • TabBar.ts:79-93: removeTabTabBar.activeTabId を無通知で付け替えるが VerifyTabManager.activeTabId は同期されない (TabController.handleTabClose:111-126)。タブを閉じた直後、選択タブと表示中の結果が別ファイルになる
  • ResultPanel.ts:552-565: trustResult 未指定時のフォールバック isSuccess = result.chainValid && result.pureTyping が metadata 不正・exam 束縛失敗・スクショ改竄を無視する。現状は到達不能だが overclaim を生む地雷なのでフォールバックごと削除が安全
  • ScreenshotLightbox.ts:294: screenshot.displayInfo.width は攻撃者制御の manifest 由来。displayInfo 欠落で TypeError
  • ResultPanel.ts:878-883: exam カードが package 未提供時にバッジ。文言は正直だが、カードが既定折りたたみのため未提供注記が隠れる。warning 色 + 既定展開が望ましい
  • VerificationController.ts:135-139: 複数 proof の ZIP で「最初に完了した proof」を自動で開くため、緑のタブが開いた状態で赤い兄弟タブを見落としうる (CLI にはある Summary: N/M proofs passed 相当の集約表示が web に無い)
  • VerificationQueue.ts:246-266: clear()/terminate()manifestMap を消していない (parsedDataMap/modeMap と非対称)

verify-cli

  • cli.ts:221: process.exit() によるパイプ時の stdout 切り捨て。typedcode-verify x.zip | tee report.txt で末尾が欠けうる。process.exitCode = ... にして自然終了させる
  • output.ts:397: audit モードの help が fast + deterministic PoSW sampling (placeholder) (= fast 相当) と読めるが、実装は full と同等 (spec §6.1 と一致)。あわせて result.poswSampled (サンプリング (audit)) が到達不能な dead string
  • --analyzer の実行順: runAnalysispasteEvents/dropEvents の集計 (verify.ts:159-160) や summarizeProcess (:219) よりに走る。exit code / assurance は汚染されないが、表示上の統計は外部 analyzer に汚染されうる。凍結ビューを渡すか統計を先に計算しておくと不変条件が明快になる

editor

  • OperationDetector.ts:83-106,146-151: 削除分類が粗い (rangeLength 2..49 は複数行でも deleteWordBackward、コメントとコード不一致)。advisory メタデータのみだが分析層の入力品質を下げる
  • EventRecorder.ts:86-107 + TypingProof.ts:413-423: 記録エラー時のフォールバック index {index: events.length-1} により直前のイベントを二重処理する (LogViewer 二重表示 + IDB 再 append)
  • dead code: TabManager.exportSingleTab / exportAllTabs / TabManager.reset() / SessionStorageService.pruneOldSessions
  • StaticEventListeners.ts:331-333: beforeunloaddeleteScreenshotsDB() は legacy DB のみ削除。コメントと実挙動が不一致
  • TabManager.ts:685-699: 復元時の合成 tabSwitch (fromTabId=null) が sessionStorage 復元では蓄積し IDB 復旧では消失する。監査証跡が復元経路に依存して非決定的
  • TypingProof.ts:927-929: 旧 API 名 waitForProcessingComplete() を参照する stale コメント

workers

  • checkpoint.ts:99-122: 署名鍵キャッシュが keyId のみをキーにする。同一 keyId で JWK を差し替えると isolate が生きている限り旧鍵で署名する。「ローテは必ず keyId 変更を伴う」を CLAUDE.md に注記したい
  • index.ts:270,359,428-433: /api/session/start /api/verify-captcha /api/verify-attestation に body サイズ上限が無い (MAX_BODY_BYTES は sign のみ)。turnstileToken の長さ上限も無い
  • index.ts:326-341: handleVerifyCaptcha の catch がログなしの汎用 500。[workers] fetch ハンドラに包括 try/catch が無く未捕捉例外が 1101 (CORS/JSON なし) に落ちる #153 で session/start は揃えたが verify-captcha に残存
  • API 応答に X-Content-Type-Options: nosniff 等のセキュリティヘッダが無い (純 JSON API なので実害は小)

e2e

  • tests/helpers/app.ts:50-60: waitForSynced がイベント数安定を最大 ~9 秒で諦めて黙って続行する。flake 調査時に「同期未達のまま進んだ」ことがログから読めない

Metadata

Metadata

Assignees

No one assigned

    Labels

    code-review2026-07 多角レビュー由来pkg:repoリポジトリ横断 (docs/CI/依存)severity:medium中程度の問題

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions