Skip to content

server: inbox / login の HTML 生成を inbox-view.js へ切り出す (#109 R-2) - #111

Closed
kosako wants to merge 2 commits into
refactor/dry-corefrom
refactor/inbox-view
Closed

server: inbox / login の HTML 生成を inbox-view.js へ切り出す (#109 R-2)#111
kosako wants to merge 2 commits into
refactor/dry-corefrom
refactor/inbox-view

Conversation

@kosako

@kosako kosako commented Jul 11, 2026

Copy link
Copy Markdown
Owner

概要

#109 のスライス R-2(R-1 の上に stack。base は refactor/dry-core、R-1 merge 後に main へ retarget)。挙動を一切変えないリファクタリング。

  • inbox / login の HTML 生成 8 関数(renderInbox / renderImportPanel / renderFilterPanel / renderGitHubCell / renderScreenshotPreview / formatSlackStatus / feedbackStatusOf / renderLoginPage)を server/inbox-view.js(CJS)へ verbatim move。ARCH-REVIEW G-2 で「最も安全・いつでも切れる」と合意済みの境界
  • receiver の設定・状態に依存するヘルパ(screenshotUrlFor / formatScreenshotStatus / safeLinkUrl / GITHUB_CONFIGURED 等)は receive.js に残し、createInboxView(deps) factory で注入(Slack / GitHub 整形と共有しているため)
  • responder(ヘッダを書く handleGetInbox / respondLoginPage 等)は receive.js に残置
  • receive.js: 2094 → 1874 行

検証

  • npm run check(lint + dist バイト一致 + 全 113 テスト)green。inbox HTML の data 属性・削除ボタン等を pin する既存テストは無変更で pass = HTML 出力不変の証明
  • dist に diff なし(widget 非接触の証明)

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

🤖 Generated with Claude Code

https://claude.ai/code/session_01LRdDjwxbAAaTMwwnzipkau

挙動を変えないリファクタリング(Issue #109 スライス R-2)。HTML 出力は
バイト単位で不変(inbox の data 属性・削除ボタン等を pin する既存テストは
無変更で pass)。

- renderInbox / renderImportPanel / renderFilterPanel / renderGitHubCell /
  renderScreenshotPreview / formatSlackStatus / feedbackStatusOf /
  renderLoginPage を server/inbox-view.js(CJS)へ verbatim move
- inbox-view.js は shared/format.js と store.js の FEEDBACK_STATUSES を
  直接 require し、receiver の設定・状態に依存するもの(screenshotUrlFor /
  formatScreenshotStatus / safeLinkUrl / GITHUB_CONFIGURED 等)は
  createInboxView(deps) factory で注入
- responder(handleGetInbox / respondLoginPage 等)と Slack / GitHub 整形と
  共有するヘルパは receive.js に残置

実装: 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) 8 関数の verbatim move 忠実性(HTML 出力バイト不変)、(2) createInboxView(deps) の配線完全性(注入漏れ・呼び出し元更新漏れ)、(3) receive.js 側の変更起因未使用コード(import 残存等)、(4) 依存方向(inbox-view が receiver の状態に逆依存していないか)
  • ランク: 🔴 must / 🟡 should / ⚪ nit
  • 結果はこの PR にコメントで返します

inbox-view は screenshot.url を safeLinkUrl で直接検証しており
screenshotUrlFor を読まない(Claude レビュー 🟡)。

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

kosako commented Jul 11, 2026

Copy link
Copy Markdown
Owner Author

📋 レビュー結果(by Claude)

判定: ✅ merge 可(must 0 件・should 1 件は対応済み)

🔴 must

なし

🟡 should(→ 対応済み)

  • server/receive.jscreateInboxView 呼び出しで screenshotUrlFor を注入していたが、inbox-view は screenshot.urlsafeLinkUrl で直接検証しており factory 内で未使用(変更起因のデッドパラメータ)→ 9eb42c5 で削除済み(著者 Codex による修正)

⚪ nit

なし

レビューで確認したこと(実コード照合 + 実挙動比較)

  • 移動 8 関数の verbatim 性: 旧 receive.js の関数本体と inbox-view.js を突合。コード行の再インデントはテンプレートリテラルのみで、HTML テンプレート内容は不変
  • 実挙動のバイト比較: 新旧 receiver を同一 DB・同一ポートで起動し、①未認証 inbox(screenshot 保存カード + import 由来カード、filter/import panel、GitHub ボタン)② /login ③ login 失敗ページ ④ 認証済み inbox(ログアウトフォーム)の 4 出力を比較 → 全てバイト単位で一致
  • 依存方向: inbox-view は shared/format(escapeHtml)と store(FEEDBACK_STATUSES)のみ直接 require、receiver 状態(formatScreenshotStatus / safeLinkUrl / GITHUB_CONFIGURED / RECEIVER_TOKEN)は factory 注入で逆依存なし
  • receive.js 側: escapeHtml が require から外れているが receive.js 内で未使用になったため正しい(lint no-undef/no-unused-vars pass)
  • npm run check 全 113 テスト pass。inbox HTML の data 属性・削除ボタンを pin する既存テスト無変更

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