docs: ADR-0026 起票(経歴書ドラフトの縮小)+ SSoT lint の CI 検知漏れ修正 - #568
Conversation
GitHub 連携データからの経歴書ドラフトを運用した結果、GitHub に存在しない職歴 (会社・役割・工程・チーム規模)をプレースホルダで埋めており、生成物がそのまま 経歴書として使えないことが分かった。生成範囲を縮小する判断を記録する。 - 出力単位を experience から project 明細へ縮小し、プレースホルダ生成を廃止 - リポジトリの採否を自動選定から人間の候補選択へ移す(機械は候補を落とさず、 デフォルト非選択 + 理由表示で表現する) - 選定順を「継続期間 × 実装量」へ変更し、直近性はタイブレークへ降格 - 選定シグナルを AnalyzedRepoSummary へ後方互換で永続化(GitHub API の追加取得なし) - フォーム注入を experiences の丸ごと置換から projects への追加へ改訂 - 索引の一覧・関連列(0018/0020/0025)・LLM/Agent 系統図を更新 ADR-0018/0020/0025 は部分改訂のため Accepted のまま維持する。 実装は #561〜#567。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (2)
🚧 Files skipped from review as they are similar to previous changes (1)
📝 WalkthroughWalkthroughADR-0026 defines a project-scoped resume draft workflow with user-controlled selection and additive injection. The ADR index records the decision. CI runs SSoT checks independently and includes them in the deploy gate. ChangesResume draft scope
SSoT CI gate
Estimated code review effort: 3 (Moderate) | ~20 minutes Possibly related issues
Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@docs/adr/0026-resume-draft-project-scope.md`:
- Around line 75-82:
具体的な選定スコアと判定仕様をADR内で定義してください。継続期間×実装量の算出式、実装量に含めるフィールドと各重み、継続期間の閾値、topicsの正規化手順、同点時に適用する完全な決定論的tie-breaker順を明記し、#562の実装とテストが同一条件を使用できるようにしてください。
- Around line 90-95: ADR-0026の「追加」方針に、対象experience/clientの安定ID(例:
full_name)による選択と、projects追加時の重複排除ルールを明記してください。同一ドラフトを再適用しても同じprojectが重複しない冪等性を定義し、対象experienceまたはclientが存在しない場合の扱いと、追加に失敗した際に既存データを変更しない更新契約も記載してください。
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: 864fc7bb-2124-49c2-beb4-631d3372e8a8
📒 Files selected for processing (2)
docs/adr/0026-resume-draft-project-scope.mddocs/adr/README.md
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
lint-env-keys / lint-adr-index / lint-tdd は test-backend の先頭ステップに 同居していたが、そのジョブが `if: inputs.app` でゲートされているため、docs だけを変更した PR では丸ごと skip され drift を検知できなかった(本 PR で ADR だけを変更した際に発覚)。検知対象(docs/adr/** / .claude/**)と実行条件 (web/** / backend/**)がズレていたのが原因。 - 3 つの SSoT lint を独立ジョブ lint-ssot として切り出し、inputs でゲートしない - nix も npm も要らない bash/grep/comm/git のみのため数秒で完了する - 切り出しでデプロイ条件が緩まないよう deploy-gate の needs に lint-ssot を追加 - lint-tdd 用の fetch-depth: 0 は lint-ssot 側へ移し、test-backend は既定深度に戻す Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
PR レビューで「#562 / #566 の実装が複数解釈に分かれる」と指摘された 2 点を、 契約レベルで確定する。数値定数は ADR に複製せず実装側を正本にする。 - 選定順序: 完全順序を保証し、最終 tie-breaker は full_name 辞書順とする (現行 select_repos の決定論保証を引き継ぐ)。スコア式・閾値・topics の 正規化規則は ADR で固定せず mapper.py の定数を正本にする(drift 防止) - 注入の冪等性: 同一 client 内に同名 project があれば追加しない。判定キーは project name とし、由来リポジトリ用の専用フィールドは新設しない (ResumeProject は DB 永続化される保存契約のため波及が大きい) - 追加先は明示指定を必須とし、experience / client が無い場合は空で 1 件作る - 注入は部分適用しない(失敗時はフォーム state を変更前のまま維持) - 同名リポジトリ衝突のトレードオフを明記 #562 / #566 の issue 本文も同じ契約に更新済み。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Uh oh!
There was an error while loading. Please reload this page.
概要
GitHub 連携データからの経歴書ドラフト(ADR-0018 → 0020 → 0025)を運用した結果、生成物がそのまま経歴書として使えないことが分かった。生成範囲を縮小する判断を ADR-0026 として起票する。
本 PR は ADR とその索引のみ(実装コードの変更なし)。実装は #561〜#567 に分割済み。
なぜ縮小するのか
GitHub には職歴情報(会社・案件・役割・工程・チーム規模)が存在しないのに、
resume_draft/mapper.pyは Resume 互換の構造を満たすため固定値を生成していた。"個人開発""GitHub 上での個人開発活動""開発(個人開発)"加えて 2 つの問題が実装に現れていた。
applyResumeDraftToFormは experiences を丸ごと置換するため、上書き確認を承認すると実務経歴が「個人開発」1 件に置き換わる。ADR-0025 の「既存データを不用意に消さない」がスカラーにしか効いていないselect_reposの第 1 キーが最終 push 日時降順のため、「昨日 README を直したチュートリアル」が「半年前に完成させた本命」に勝つ。判別材料(topics / 依存の厚み / IaC)はRepoDataにあるのに、AnalyzedRepoSummaryが 4 フィールドしか永続化していない決定内容(5 点)
role/phases/teamは空で返して人間が埋めるAnalyzedRepoSummaryへ後方互換で永続化。GitHub API の追加呼び出しはしないclients[].projectsに足すADR-0018 のハイブリッド方式(構造=ルールベース / 自然文=LLM)と ADR-0020 の非同期構造・課金の原子性は変えない。
撤去ではなく縮小を選んだ理由
resume_draftはTaskTypeの 2 本目であり、「非同期タスク基盤 × LLM ハイブリッド × 課金の原子性」を実証する唯一の縦串サンプル。撤去するとGITHUB_LINK1 本に戻る撤退条件は ADR の「将来の移行条件」に明記した(縮小後も候補が採用されないなら ADR-0022 の流儀で全量撤去)。
ADR のステータス方針
ADR-0018 / 0020 / 0025 は Accepted のまま維持する。本 ADR は決定の一部(出力単位・キャッシュ保存内容・注入のマージ規則)を改訂する部分改訂であり、ADR-0020 が 0018 の決定 5 を更新したときと同じ扱いにした。索引側の「置き換え・関連」列と LLM/Agent 系統図でクロスリファレンスを張っている。
実装 issue
AnalyzedRepoSummaryへ永続化依存: #561 → #562 / #563 → #564 → #565 / #563 → #566 / 全部 → #567
追加: SSoT lint の CI 検知漏れ修正(2 コミット目)
この PR 自身で見つかった穴を同時に塞ぐ。 1 コミット目(ADR のみ)を push したところ、
lint-adr-indexを含む SSoT drift 検知が CI で一度も走らなかった。原因は、
lint-env-keys/lint-adr-index/lint-tddがtest-backendジョブの先頭ステップに同居しており、そのジョブがif: ${{ inputs.app }}(=web/**backend/**の変更)でゲートされていること。検知対象(docs/adr/**/.claude/**)と実行条件(web/**/backend/**)がズレていたため、ADR だけを変更した PR では索引の drift を検知できないまま green になる。変更内容
lint-ssotとして切り出し、inputsでゲートせず常に実行するdeploy-gateのneedsにlint-ssotを追加する(同居していた頃は lint 失敗がtest-backendの失敗としてゲートに効いていた)lint-tdd用のfetch-depth: 0はlint-ssot側へ移し、test-backendは既定深度に戻すレビュー時の注意
tests / lint-ssotが増える。main の保護(ruleset)へ必須チェックとして登録しないと、このジョブが落ちてもマージはブロックされないapp系 CI(test-backend / test-web / e2e / codegen-drift / smoke-backend)も一通り実行される確認
lint-env-keys/lint-adr-index/lint-tddの 3 つとも greenmake lintgreentest.ymlの YAML 構造を検証済み(lint-ssotにifが無いこと、deploy-gate.needsに含まれること、test-backendから 3 ステップが消えていること)🤖 Generated with Claude Code
Summary by CodeRabbit
New Features
Bug Fixes
Documentation