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 つ
「判定ロジックは shared に単一実装」が文書ルールとしてしか強制されていない。 今回の主要な乖離 ([verify] verificationWorker が verifyProofFile に委譲せずレイヤ合成を再実装 (sessionId 突合の欠落・整合性チップの反転) #211 [verify] フォルダ読込でスクショのチェーン裏付け検査が無効化される (ZIP と結論が食い違う) #212 [verify] web にスクショ剥ぎ取り (chainOnly) の検出が無い (CLI にはある) #213 ) は例外なく「shared に委譲していない箇所」に集中し、委譲されている部分には乖離が無かった。→ [verify/verify-cli] web↔CLI の結論一致を CI で固定するパリティテストを追加する #216 (web↔CLI パリティテスト) が根本対策
ドキュメントの鮮度が 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
推奨対応順
[verify] proof.json の mode で assurance chip に XSS (検証結果の表示を偽装できる) #210 verify の XSS (単独で緊急。他のすべての保証表示の前提)
[verify] verificationWorker が verifyProofFile に委譲せずレイヤ合成を再実装 (sessionId 突合の欠落・整合性チップの反転) #211 verificationWorker を verifyProofFile へ委譲 (乖離 2 件が構造的に消える)
[shared] exam の time-box が ADR-0013「advisory・失格条件にしない」に反して失格条件になっている #220 ADR-0013 time-box の矛盾をどちらに寄せるか決定 (判断が要る )
[verify/verify-cli] web↔CLI の結論一致を CI で固定するパリティテストを追加する #216 web↔CLI パリティテスト (2 の再発防止)
[editor] exportCurrentTab に best-effort 分岐が無く、class/assignment が Turnstile 不達で export 不能になる #224 [editor] waitForQueueDrain timeout 時の export が content replay で invalid になる proof を生む #225 editor の export 2 件 (正直な利用者が損をする経路)
[e2e] 署名済み checkpoint の存在を assert しておらず、sign API の全損を CI が見逃す #228 E2E に署名済み cp の assert (1 行で CI の盲点が塞がる)
[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 誤実行防止が多層
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 つ
推奨対応順
verifyProofFileへ委譲 (乖離 2 件が構造的に消える)起票一覧
critical
high
medium
コンセプト (判断が要る)
確認して問題が無かった主な項目
expect(kv.store.size).toBe(0))