Skip to content

[tracking] 2026-08 プロジェクト全体レビュー (コンセプト + 実装) の指摘まとめ #243

Description

@shinyaoguri

2026-08-02 に main (bca25f7 時点) に対して実施したプロジェクト全体レビューの親 Issue。コンセプト評価と実装評価の両面で、shared / editor / verify+verify-cli / workers+e2e+CI / docs↔実装整合の 5 面から点検した。

総評

コンセプトと設計判断は高い水準にあり、shared の暗号・検証コアも信頼できる。 暗号的なコア (ハッシュチェーン / PoSW / ECDSA / exam 束縛) に偽造を許す欠陥は見つからなかった。三層保証語彙 (ADR-0020) が deriveAssurance の実装や #131 のゲートまでコードレベルで貫通していること、ADR-0023 の「判定しない」原則が advisory の直交性として web/CLI 双方で厳密に守られていることを確認した。

問題は その正しさをユーザーに伝える最後の一段 — verify の表示層とドキュメント — に集中している

根本原因 2 つ

  1. 「判定ロジックは shared に単一実装」が文書ルールとしてしか強制されていない。 今回の主要な乖離 ([verify] verificationWorker が verifyProofFile に委譲せずレイヤ合成を再実装 (sessionId 突合の欠落・整合性チップの反転) #211 [verify] フォルダ読込でスクショのチェーン裏付け検査が無効化される (ZIP と結論が食い違う) #212 [verify] web にスクショ剥ぎ取り (chainOnly) の検出が無い (CLI にはある) #213) は例外なく「shared に委譲していない箇所」に集中し、委譲されている部分には乖離が無かった。→ [verify/verify-cli] web↔CLI の結論一致を CI で固定するパリティテストを追加する #216 (web↔CLI パリティテスト) が根本対策
  2. ドキュメントの鮮度が CLAUDE.md ≫ system-spec ≫ README の順。 overclaim 抑止が生命線の製品として向きが逆 → [docs] README 群 (root/verify/workers/verify-cli/editor) が陳腐化し overclaim を含む #230 [docs] system-spec の陳腐化 (§5.4 dead なマルチファイル形式 / §5.3 フィールド欠落 / firstSeenAt と上限の per-tab 化など) #231 [docs] ADR と実装の乖離 (ADR-0017 手順5 未実装 / ADR-0011 §6 能力集合未記録 / ADR-0020 が実装より弱い) #232

推奨対応順

  1. [verify] proof.json の mode で assurance chip に XSS (検証結果の表示を偽装できる) #210 verify の XSS (単独で緊急。他のすべての保証表示の前提)
  2. [verify] verificationWorker が verifyProofFile に委譲せずレイヤ合成を再実装 (sessionId 突合の欠落・整合性チップの反転) #211 verificationWorker を verifyProofFile へ委譲 (乖離 2 件が構造的に消える)
  3. [shared] exam の time-box が ADR-0013「advisory・失格条件にしない」に反して失格条件になっている #220 ADR-0013 time-box の矛盾をどちらに寄せるか決定 (判断が要る)
  4. [verify/verify-cli] web↔CLI の結論一致を CI で固定するパリティテストを追加する #216 web↔CLI パリティテスト (2 の再発防止)
  5. [editor] exportCurrentTab に best-effort 分岐が無く、class/assignment が Turnstile 不達で export 不能になる #224 [editor] waitForQueueDrain timeout 時の export が content replay で invalid になる proof を生む #225 editor の export 2 件 (正直な利用者が損をする経路)
  6. [e2e] 署名済み checkpoint の存在を assert しておらず、sign API の全損を CI が見逃す #228 E2E に署名済み cp の assert (1 行で CI の盲点が塞がる)
  7. [shared] events 配列の要素型が未検証で、null 要素により totalEvents/totalTypingTime を水増しできる #221 [docs] README 群 (root/verify/workers/verify-cli/editor) が陳腐化し overclaim を含む #230 shared の events 要素型検証 / README 刷新

起票一覧

critical

high

medium

コンセプト (判断が要る)

確認して問題が無かった主な項目

  • spec §10 の定数一覧は全項目が実装と一致
  • spec §7 攻撃マトリクス全 16 行が、主張どおりのレイヤで検出されることをコードで確認
  • registry-only 信頼アンカーが署名 cp / session token / exam package の 3 系統で同型に実装され、各系統にネガティブテストがある
  • ECDSA raw r‖s (P1363) の扱いは正しく、署名 malleability がどのハッシュ連鎖にも影響しない構造
  • ADR-0009/0023 の advisory 直交性: analysis が valid / exit code に漏れ込んでいないことを web/CLI 両方で確認
  • ADR-0027 の実装 (token 検証が KV read より前) と、それを固定するテスト (expect(kv.store.size).toBe(0))
  • CORS が fail-closed + wildcard 不使用、deploy 誤実行防止が多層

Metadata

Metadata

Assignees

No one assigned

    Labels

    code-review2026-07 多角レビュー由来pkg:repoリポジトリ横断 (docs/CI/依存)

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions