Skip to content

#2199 を実装する(スプリント lfactory3-6) - #2533

Merged
takemi-ohama merged 5 commits into
sprint/lfactory3-6from
feat/issue-2199-lfactory3-6
Nov 5, 2026
Merged

takemi-ohama merged 5 commits into
sprint/lfactory3-6from
feat/issue-2199-lfactory3-6

Conversation

@takemi-ohama

@takemi-ohama takemi-ohama commented Nov 5, 2026 •

Copy link
Copy Markdown
Contributor

factory の API と画面で、同じ役割の処理を 1 か所へ寄せるリファクタリングです(#2199)。API ではアカウントの保存の契約を独立したファイルへ分け、画面ではログインの確認・失敗の表示・席の種類の選択肢を共通の部品にしました。動作は変えていません。

利用者向けの変化

  • 無し

移行の手順

  • 無し

変更の要点

  • API(factory/api)
    • 必須の環境変数を読む処理を env.ts の 1 つにまとめた。handlers/ には、ハンドラーの配線だけを置く
    • アカウントの保存の契約を port.ts に分け、重複していた書き込みの処理を寄せた。DynamoDB のキーと属性の形は変えていない
    • 次の 4 つの処理を、それぞれ 1 か所にまとめた
      • 席の種類の検証
      • 詳細の本文の組み立て
      • GitHub の利用者の取得
      • IdP(ID プロバイダー)の判定
  • 画面(factory/web)
    • 次の 3 つを共通の部品(factory/web/src/pages/parts.tsx ・ factory/web/src/poll.ts)にまとめ、各ページはそれを呼ぶ形にした
      • ログインの確認
      • 失敗の表示
      • 席の種類の選択肢
    • 対象のページは、チーム・リポジトリ・委任・ループ・スプリント・バックログ・モデルの認証情報の各ページ
  • テスト
    • scripts/tests/test_check_markdown_links.py で、スクリプトの読み込みを fixture にまとめた

変更は 41 ファイルで、654 行の追加と 702 行の削除です。

テスト

ステップ 結果
ベースブランチとの同期(sprint/lfactory3-6) 成功。ベースブランチは進んでいない
整形 成功。整形で変わったファイルは無い
同期とチェック(ビルドを含む 5 本) 成功
範囲を絞った lint 成功
範囲を絞ったテスト 成功(703.2 秒)
設計とテストの照合 停止(exit 1)
設計と確定仕様の照合 成功。関係する既存の確定仕様と変更履歴は 10 件
  • 設計とテストの照合の停止
    • 設計文書 issues/issue-2199-design.md に名前の出るテストのうち、4 件が HEAD で照合に失敗して止まった
    • 4 件それぞれの名前と原因は、ステップの出力が途中で切れているため未確認。マージの前に、テストの名前の変更なのか、テストが足りないのかを確かめる
  • データの形の互換
    • 要求では、DynamoDB のキーと属性の形を変えないことを、store.test.ts の既存テストが通ることで確かめるとしている
    • 範囲を絞ったテストは通ったが、このテストが実行の範囲に含まれていたかどうかは、材料からは未確認

設計と違う点

設計の箇所 違い 理由
確定仕様 docs/specifications/ndf-factory-accounts-and-plans.md の構成要素の表 63 行目(API の入口) 表は「ログ・CORS・認証の中間処理・エラーの形・経路の登録」の置き場を factory/api/src/handlers/api.ts としている。実装では handlers/api.ts は Lambda の handler の配線だけを持ち、Hono のアプリは factory/api/src/app.ts、認証の依存の組み立ては factory/api/src/auth/deps.ts にある。この PR では表を直していない 設計の決定 10 と受け入れ条件 8(factory/ の外の差分は scripts/tests/test_check_markdown_links.py だけ)に従い、#2199 の確定仕様化(plan-to-spec)で app.ts の行とともに直す
同じ表の 62 行目(アカウントの保存) 表は保存を factory/api/src/accounts/store.ts の 1 行だけで示している。実装では保存の契約(AccountStore・AccountPatch・AccountUpdate・ConditionFailedError)が factory/api/src/accounts/port.ts へ移り、store.ts は DynamoDB の実装だけを持つ。この PR では表を直していない 上の行と同じ。確定仕様化で accounts/port.ts の行を足す

提案 20 件の扱い(受け入れ条件 1)

設計文書(コミット 7bcb889 の issues/issue-2199-design.md の「20 件の判定表」)の扱いどおりに実装した。適用した 19 件の置き場は、本番のタグ ndf--v10.27.21 で名前が実在することを確かめた。テストが落ちて戻した件は無い。

# 扱い まとめた場所
R01 適用した accounts/service.ts の validateSeatType
R02 適用した handlers/ は配線だけ。createApiApp は app.ts
R03 適用した github-oidc/app.ts の githubUser
R04 適用した accounts/store.ts の transact に履歴の行の展開を寄せた(R09 と同じ)
R05 適用した pages/parts.tsx の SeatTypeOptions
R06 適用した accounts/service.ts の retryOnConflict
R07 採らない 兆候がすでに無い(I-001 で抽出済み)
R08 適用した accounts/port.ts
R09 適用した R04 と同じ
R10 適用した accounts/store.ts の PATCH_COLUMNS
R11 適用した accounts/service.ts の writeOr
R12 適用した auth/verify.ts の idpFromUsername
R13 適用した routes/views.ts の accountDetailBody
R14 適用した RequireLogin
R15 適用した useAttempt
R16 適用した scripts/tests/test_check_markdown_links.py の fixture
R17 適用した hist を消し HistoryRecord で書く
R18 適用した AccountUpdate
R19 適用した accounts/store.ts の userPk と鍵の頭の定数
R20 適用した factory/api/src/env.ts の requireEnv

適用 19 件・採らない 1 件。この節はマージの後、リリース後テスト(#2548 (comment) )の指摘で足した。

モード: standard / 通した工程: 実装 → 完了判定 → Pull Request

🤖 Generated with Claude Code

takemi-ohama and others added 5 commits November 5, 2026 02:06
…er の配線だけにする(#2199 の R20・R02)

- requireEnv の 5 つの写しを src/env.ts へ寄せる
- createApiApp・jsonLogger・webOriginFromEnv を app.ts、depsFromEnv を auth/deps.ts、
  progressStoreFromEnv を progress/deps.ts へ移し、index.ts・runs/deps.ts・handlers/ どうしが
  handlers/ を読まない形にする
- テストは createApiApp の import 元だけを替える(期待値は変えない)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…9・R10・R11・R17・R18・R19)

- AccountStore・AccountPatch・ConditionFailedError と新しい AccountUpdate を accounts/port.ts へ移す
- updateAccount の 5 つの位置引数を AccountUpdate 1 つにする
- DynamoAccountStore.transact が履歴を受け取り、items → 履歴 → after の順に並べる
- AccountPatch の列を PATCH_COLUMNS の表で回す(プレースホルダは :plan・:mode のまま)
- 鍵の頭を USER_PREFIX・ACCOUNT_PREFIX と userPk・accountPk にまとめる
- AccountService の 4 つの再試行を retryOnConflict、3 つの条件の失敗の読み替えを writeOr にし、hist を消す
- store.test.ts は import 元と updateAccount の呼び出しの形だけを替える(期待値は変えない)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…13・R03・R12)

- validateSeatType を accounts/service.ts に置き、teams.ts と accounts.ts の 3 つの経路が使う(文言は同じ)
- 「チームなら席を読んで詳細の本文を作る」を views.ts の accountDetailBody にし、3 つの経路が使う
- github-oidc/app.ts の /token と /userinfo が githubUser を使う(判定の条件は同じ)
- auth/verify.ts の IdP の判定を idpFromUsername に出す(判定の順序は同じ)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- RequireLogin(context.tsx)で App.tsx のログインの後の枠を包み、12 画面の hasToken と /login への転送を消す
- usePolled の enabled の引数を消す(呼ぶ画面はすべて token の有無を渡していただけ)
- 「呼んで、失敗なら画面の文を出す」を useAttempt(context.tsx)にし、判定表の対象の try/catch を置き換える
- 席の種類の <option> を SeatTypeOptions(parts.tsx)にし、TeamPage と NewTeamPage が使う

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…の R16)

11 のテストに写っていた読み込みの 4 行を関数スコープの fixture check_module にする。
テストの関数の数と、確かめる入力・期待値の組は変えない(46 passed のまま)。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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