Skip to content

server/shared: safeFilePart と status 定数を単一ソース化し build.js に export ガードを足す (#109 R-1) - #110

Merged
kosako merged 1 commit into
mainfrom
refactor/dry-core
Jul 11, 2026
Merged

server/shared: safeFilePart と status 定数を単一ソース化し build.js に export ガードを足す (#109 R-1)#110
kosako merged 1 commit into
mainfrom
refactor/dry-core

Conversation

@kosako

@kosako kosako commented Jul 11, 2026

Copy link
Copy Markdown
Owner

概要

#109 のスライス R-1。挙動を一切変えないリファクタリング。

  • safeFilePart(receive.js / widget index.js にバイト同一で重複)を shared/format.js へ移設し、server 側を shared 参照に切替。widget 側の切替は R-3 で実施(並行作業との競合回避)
  • status 定数を単一ソース化: store.jsVALID_STATUSESFEEDBACK_STATUSES に改名して export、receive.js は store から require。正規化の丸め挙動(不正値→"new")は不変(拒否化は別 issue の挙動変更)
  • scripts/build.js に複数宣言子 export(export const A = 1, B = 2;)の検出 fail を追加(監査 L-34。静かな export 漏れを「未対応構文は明示 fail」方針に揃える。括弧深さ 0 のカンマのみ検出し export const X = [1, 2]; は誤検出しない)
  • dist 再生成(shared/format への safeFilePart 追加分のみ)

検証

  • npm run check(lint + dist バイト一致 + 全 113 テスト)green。既存テスト期待値の変更なし
  • shared-format.test.js に safeFilePart のテストを追加

実装: Codex / レビュー: Claude(相互レビュー契約)

🤖 Generated with Claude Code

https://claude.ai/code/session_01LRdDjwxbAAaTMwwnzipkau

…を足す (#109 R-1)

挙動を変えないリファクタリング(Issue #109 スライス R-1)。

- safeFilePart(receive.js と widget index.js にバイト同一で重複)を
  shared/format.js へ移設し、server 側を shared 参照に切替(widget 側の
  切替は R-3 で実施)。shared-format.test.js にテスト追加
- status 定数を単一ソース化: store.js の VALID_STATUSES を
  FEEDBACK_STATUSES に改名して export し、receive.js のローカル定義を
  削除して store から require。正規化の丸め挙動(不正値→"new")は不変
- scripts/build.js に複数宣言子 export(export const A = 1, B = 2;)の
  検出 fail を追加(静かな export 漏れを「明示 fail」方針に揃える。
  現ソース該当 0 件のため dist のロジックは不変)
- dist を再生成(shared/format への safeFilePart 追加分のみ)

実装: Codex(Claude 作成のブリーフに基づく)。検証: npm run check 全 113 テスト pass。

Co-Authored-By: Codex <noreply@openai.com>
@kosako

kosako commented Jul 11, 2026

Copy link
Copy Markdown
Owner Author

🔍 レビュー依頼(→ Claude)

  • 観点: 挙動維持リファクタリング。重点は (1) verbatim move の忠実性(safeFilePart の本体一致)、(2) store.js 改名の完全性(旧名残存・export 漏れ)、(3) build.js ガードの誤検出(括弧深さ・文字列内カンマ)、(4) dist 差分が shared/format 追加分のみか、(5) 変更起因の未使用コード
  • ランク: 🔴 must / 🟡 should / ⚪ nit
  • 結果はこの PR にコメントで返します

@kosako

kosako commented Jul 11, 2026

Copy link
Copy Markdown
Owner Author

📋 レビュー結果(by Claude)

判定: ✅ merge 可(must 0 件)

🔴 must

なし

🟡 should

なし

⚪ nit

  • scripts/build.jshasTopLevelComma は正規表現リテラル内のカンマ/クォート(例: export const RE = /a,'/;)を文字列開始と誤認しうる。ただし誤動作の方向は「ガード追加前と同じ挙動(検出しない)」または「明示 fail(気づける)」で、ガード導入前より悪化する経路はない。現ソース・想定ソースに該当パターンなし。対応不要

レビューで確認したこと(実コード照合)

  • safeFilePart の shared/format.js への移設はバイト一致の verbatim move。receive.js のローカル定義削除と require 追加を確認。widget 側コピーは不変で残存(R-3 で切替の分担どおり)
  • VALID_STATUSESFEEDBACK_STATUSES の改名は全箇所完了(grep で旧名残存 0)。export 追加・契約コメント更新・receive.js の 4 使用箇所(status 検証 ×2・エラーメッセージ ×2)を確認。丸め挙動(不正値→"new")は不変
  • build.js ガードは EXPORT_VAR_RE 一致時のみ適用(export function のパラメータのカンマは対象外)、括弧深さ・クォート・エスケープを考慮。既存ソースで false positive なし(build --check pass が証明)
  • dist 差分は shared/format モジュールへの safeFilePart 追加と return リスト 1 行のみ(実 diff で確認)
  • npm run check 全 113 テスト pass(safeFilePart テスト +1)。既存テスト期待値の変更なし

@kosako
kosako marked this pull request as ready for review July 11, 2026 09:33
@kosako
kosako merged commit c44b32b into main Jul 11, 2026
1 check passed
@kosako
kosako deleted the refactor/dry-core branch July 11, 2026 11:07
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