ADR-0149: 残タスクの単一 SSoT ページを設け、ソースページ作成をトリガーに自動更新する
- Status: Accepted
- Mode: Standard
- Kruchten Type: Executive/Property
- Scope: platform
- Implementation Status: In Progress
- 起案者: [email protected]
- 起案日時 (JST): 2026-06-13 00:41
- 承認日時 (JST): 2026-06-13 01:08
- Approver Role: platform
- Approver Who: [email protected]
- Driver: [email protected]
- Consulted: Decision Pipeline AI 審査 (Gate 0-4)
実装状況詳細 (impl_detail)
Phase 1-2 Done: 派生索引 COVERAGE_GAPS 拡張〔役割タグ + TODO_future / BUG_tracking / ADR followups 集約 + 件数ガード / 再生成鮮度 / ソース別乖離検知〕= PR #1930/#1932/#1933/#1934/#1936/#1939/#1940、自動更新 CI wiring〔coverage-gaps-sync.yml = cron + 変更トリガー再帰 glob + 件数ガード health-check issue〕= PR #1956/#1958/#1960/#1961/#1962。 残タスク #1 impl_detail 節の今後 (正式化 / 撤退 / 現状維持) = 正式化採択 (ADR-0162 として起案・PR #2347 で受理 2026-06-21・PR #2426 で機械担保 + 派生ビュー実装) = 完了。 残 = SSoT フェーズは撤退ゲート 180 日 Go/No-Go 待ち〔承認 2026-06-13 起算〕+ 後続スキーマ ADR〔タスク ID 採番 / 完了配線 / GitHub Issue 状態遷移〕
コンテキスト
§1.1 背景
セッション開始時の残タスク把握に際し、複数の情報源を頭の中でマージする運用が常態化しており、探す・迷うコストと取りこぼしが恒常的に発生している。直近導入された COVERAGE_GAPS(ADR-0145)は handover の残タスク節を集約する部分的な派生索引にとどまり、「残タスクを網羅的に把握する単一の起点」にはなっていない。
§1.2 現状 (As-Is)
残タスクの所在は 5 つの独立した情報源 / 7 つの入口に分散している。
- A:
tasks/prompts/*.md(handover・sub_・main_)は、同一データが 3 面で露出する。①SessionStart hook の受信箱 ②ops-prompt ラベルの GitHub issue ③COVERAGE_GAPS ページ(「## 残タスク(優先順)」節だけ)。 - B:
TODO_future.md(MAS-XXX / DOC-OPS-NN の恒久バックログ)が他ソースと相互リンクされず孤立している。 - C:
BUG_tracking.md(バグ・既知の地雷)。 - D: ADR frontmatter の
followups:(ADR-0144)。 - E: auto-memory
MEMORY.mdの残=…行。
COVERAGE_GAPS(ADR-0145)の現状は (1) マーカー節を持つ handover のみ(120 本中 23 本) (2) sub/main の役割が混在 (3) B〜E を含まない。
§1.3 課題
セッション開始時に着手候補を把握するには、人(または開始時の AI)がこの 7 入口を頭の中でマージするしかなく、探す・迷うコストが恒常的に発生し、取りこぼしが起きる。現状コスト(横断マージに要する時間・取りこぼしと判明した件数)は計測の仕組みが未整備のため未実測である(派生索引拡張 PR のマージ時点で過去 30 日分のセッションログを遡及集計し、投資回収の妥当性を裏取りする)。
§1.4 制約・要件
- 残タスクのソースは複数を許容する(物理的な入口統合は狙わない)。
- 集約レイヤを単一系列に限り、同位置づけの部分集約ページを追加で新設しない。
- 残タスクの SSoT への反映は手作業転記に依存せず、ソースの作成・更新をトリガーに機械が反映する。
- 自動更新トリガーは「取りこぼさない設計」を制約とする(ディレクトリ単位の再帰 glob + 定期 cron 併用、Issue 等は webhook / API ポーリング / ファイル化規約で補完)。
- 将来は「把握 → 着手 → 完了」を安定したタスク IDで辿れる作りとする(ページからの直接実行は狙わず、ID コピー → 別途実行の半接続)。
§1.5 目標 (To-Be)
残タスク把握の単一 SSoT ページを最終目標に据え、現状の派生索引(COVERAGE_GAPS)を足場として段階的にそこへ育てる。Non-Goals: 入口(ソース)の物理的統合、ページからの直接タスク実行、未決スキーマ(ID 採番 / コピー UI / 完了配線等)の本 ADR での確定。
決定
残タスクの単一 SSoT ページを最終目標に据え、現状の派生索引(COVERAGE_GAPS)を足場として段階的にそこへ育てる。ソースは複数を許容し、ソースページの作成・更新をトリガーに SSoT を自動更新する。同じ位置づけの中間的な部分集約ページは新設しない。移行の速さは自動化手段の実現可否に律速され、可能になり次第速やかに SSoT へ移行する。乖離は cron 全再生成で「生じさせない」設計に加え、乖離検知機能を防御多重化として持ち、検知された宿題の解答は ADR として起案する。未決の情報項目(スキーマ・ID 採番・UI・完了配線等)は別 ADR で個別審査する。
判断基準 (Decision Drivers)
3.1 評価軸
| # | 軸 | 重要度 (係数) | 案件特有の解釈 |
|---|---|---|---|
| 1 | #usable | [Must] (×2.0) | 最終的に SSoT ページ 1 枚で残タスク全体を把握でき、どこを見るか迷わない。役割(sub / main)で絞り込める。 |
| 2 | #reliable | [High] (×1.0) | 各ソースの残タスクを取りこぼさない。ソースの作成・更新が確実に SSoT へ反映される。派生索引フェーズでは元ソースとの乖離を検知できる。 |
| 3 | #maintainable | [Medium] (×0.5) | 集約レイヤを単一系列(派生索引 → SSoT)に限り、部分集約ページを増やさない。既存ソースの仕組み(受信箱・台帳・frontmatter)を壊さない。 |
K.O. criterion: 自動更新が CI で実装できず手作業転記に依存する、または同位置づけの部分集約ページの新設を避けられない場合は不採用。Must 軸(#usable)の score < 3 は不採用。
3.2 評価軸 × 案スコア表
| 軸 | 係数 | 採択案 | 案 A (現状維持) | 案 B (用途別並立) | 案 C (入口統合) | 案 D (手管理 SSoT) |
|---|---|---|---|---|---|---|
#usable | ×2.0 | 5 | 2 | 2 | 5 | 4 |
#reliable | ×1.0 | 4 | 3 | 3 | 2 | 2 |
#maintainable | ×0.5 | 4 | 4 | 1 | 1 | 2 |
| 加重和 (正規化) | 0.914 | 0.514 | 0.471 | 0.671 | 0.629 | |
| K.O. 通過 (Must ≥3) | ✓ | ❌ | ❌ | ✓ | ✓ |
検討した代替案 (Alternatives Considered)
- 案 A(現状維持・派生索引のまま据え置き): COVERAGE_GAPS を部分集約のままにし SSoT 化しない — 網羅的な起点にならず B〜E は孤立したまま、Must 軸
#usableで K.O.。不採用。 - 案 B(部分集約ページを用途別に複数並立): handover 用・ADR 用・バックログ用などに集約ページを分けて作る — 集約レイヤが多重化し「集約ページ自体が分散」する、Must 軸
#usableで K.O.。不採用。 - 案 C(入口を物理的に 1 つへ統合): 全ソースを 1 ファイルに集約し入口を 1 本化する — 受信箱の消化サイクル・ADR frontmatter・台帳は性質が異なり統合困難、
#reliable/#maintainableで劣る。不採用。 - 案 D(派生索引を飛ばして手管理 SSoT を新設): いきなり手管理の SSoT ページを立てる — 転記漏れと二重化を検証なしで引き受ける、
#reliableで劣る。不採用。
影響 (Consequences)
§5.1 正の影響 (Good)
- 残タスクの起点が最終的に 1 枚へ集約。
- 自動更新により手作業転記の漏れを防止。
- 集約レイヤの多重化を防ぐ(同位置づけの部分集約ページ新設 0)。
- セッション開始時の手動マージが不要になる。
- 安定したタスク ID により「把握 → 着手 → 完了」のトレーサビリティが成立し、乖離検知の突き合わせキーにもなる。
§5.2 負の影響 (Bad)
- 自動更新の仕組み(トリガー連携)の新規保守コストが発生する。
- ソース側に「残タスクを機械可読に置く」規約整備が一部必要(未決部分は別 ADR)。
- 未決の情報項目が別 ADR 待ちで滞留するリスク。
- 全ソースを自動集約する手段が見つからず派生索引フェーズに留まるリスク(その場合も部分集約として実害は限定的)。
§5.3 中立・トレードオフ (Neutral / Trade-offs)
検出された盲点(Gate 1)に対する設計上の防御と注記:
- 盲点①(再生成 CI ジョブの無音失敗): 再生成ジョブの最終成功タイムスタンプを SSoT ページ冒頭に埋め込み、一定時間以上更新が無ければ GitHub issue / 通知へアラートする「鮮度チェック」を CI に組む(閾値時間は CI 実行頻度と許容遅延の擦り合わせが要るため SSoT フェーズ実装 PR で確定)。
- 盲点①追加(全ソース同時クラッシュで SSoT が無音で空になる): SSoT 再生成ジョブに「前回エントリ数との差分が X% 以上減少した場合は失敗扱い」とする件数ガード節を必須要件とする(具体閾値 X% は SSoT フェーズ実装 PR で確定、暫定 30% を目安)。
- 盲点②(電帳法の変更履歴真正性): タスク管理文書が電子帳簿保存法(2024年1月施行)の業務記録に該当するかを税理士または顧問弁護士に確認する。該当する場合は SSoT の再生成方式を「追記型ログ + 最新ビュー生成」に変更する要否を SSoT フェーズ実装前に判定する(該当する場合は本 ADR 撤退条件の追加トリガーとする)。
- 盲点③(cron と変更トリガーの二重起動による中間状態書き込み): GitHub Actions の concurrency 設定(group 名・cancel-in-progress の可否)を SSoT フェーズ実装 PR の必須項目とし、並行起動テストを本番マージ前に実施する手順を実装 PR の Definition of Done に含める。
- 盲点④(ADR-0144 の
followups:フィールド競合): ADR-0144 のパイプラインが書き込み・本 ADR のパイプラインが読み取りの単方向を原則とし、SSoT 側は frontmatter を書き換えない(SSoT 上の完了記録は ID をキーに ADR-0144 完了検知の入力として渡す)。詳細仕様は別 ADR(後続スキーマ ADR)で確定する。 - 盲点⑤(パスベース単独トリガーの新規ファイル検知漏れ): ディレクトリ単位の再帰 glob(
tasks/prompts/**等)+ 定期 cron を併用しパスベース単独トリガーは採用しない。 - 盲点⑥(信頼定着後の誤集約発見遅延): SSoT ページに「このページは自動生成です。原典は各ソースファイルです」の免責表示と元ソースへの逆引き直接リンクを必須要素とする(具体スキーマは別 ADR)。
- 盲点④追加(GitHub Issue クローズ・ラベル剥奪のイベント処理):
issuesイベントのclosed/unlabeled/deletedを受けた際の SSoT エントリの状態遷移(即時削除 / アーカイブ表示 / 完了フラグ付与のいずれか)を後続スキーマ ADR のスコープに明示的に含める。ADR-0134 の消化サイクル(変更しない)との整合は当該 ADR で確認する。 - 盲点⑦(現状コスト未実測のまま設計工数先行投資): 派生索引拡張 PR のマージ時点で過去 30 日分のセッションログを遡及集計し、横断マージの実測コストと取りこぼし件数を取得する。実測値が「1 セッションあたり横断マージ 1 分未満かつ取りこぼし 0 件」であれば SSoT フェーズへの進行を再評価(派生索引で打ち止めの可能性を含む)。
- 盲点⑧(SSoT 便利化による元ソース参照低下): 月次集計に「元ソースを直接参照した頻度」の指標を追加し、参照率が一定値(具体値は実装 PR で確定)を下回った場合に SessionStart hook でリマインダーを挿入する運用を組み込む。
- その他のリスク: 未決の情報項目が別 ADR 待ちで滞留する / 全ソースを自動集約する手段が見つからず派生索引フェーズに留まる(その場合も部分集約として実害は限定的)。
撤退条件 (Rollback Plan)
- 中核の撤退条件 = 「乖離を自動で検知し、自動で解消する」機構が成立しないこと: ①ソース変更トリガー + cron 全再生成で乖離を自動的に解消し、②乖離検知機能で残った食い違いを検出する — この検知 + 自動解消の機構が実装できない、または実装しても乖離の自動解消が常態的に機能しないと判明した場合、SSoT 化を撤退し、派生索引(COVERAGE_GAPS)+ 既存ソースの相互リンク強化に留める。
- 機構が機能していないシグナル(いずれかが常態化したら撤退評価に入る):
- 自動更新のトリガー漏れが月 2 件以上(自動解消が漏れている)。
- 鮮度チェックのアラート(再生成の無音失敗)が頻発し復旧が追いつかない。
- 乖離検知機能が食い違いを出し続け、再生成で収束しない(自動解消が効いていない)。
- 件数ガード節(前回比 X% 以上減少)の発火が頻発する。
- 判定期限(盲点③: 派生索引フェーズの恒久化防止): ADR 承認から 180 日以内に、代表取締役が「検知 + 自動解消の機構が成立しているか」で SSoT フェーズ移行の Go/No-Go を判断する。成立の定義 = 全ソースがトリガー連携済み・トリガー漏れ 0 件・乖離検知が収束した状態を 30 日間維持。
- 既定動作(盲点⑤: 判定が行われなかった場合): 180 日経過時点で代表取締役の判定が記録されていなければ 自動 No-Go(派生索引フェーズで打ち止め)とする。再開には新規 ADR 起案を要する。
- 代替判定者: 代表取締役が不在・判断不能の場合、Decision Pipeline Owner(平時の DRP 運用責任者)が代行する。
- 判定レポートのフォーマット: 件数(トリガー漏れ件数 / 鮮度アラート件数 / 乖離検知件数 / 件数ガード発火件数)・期間(計測開始日〜判定日)・判定者・判定日・Go/No-Go 結論を含む Markdown レポートを必須とする。
- ベースライン計測の開始日: 派生索引拡張 PR のマージ日を起点とする(以後 30 日間を初期ベースラインとする)。
- 電帳法該当時の追加トリガー(盲点②): 税理士・弁護士確認の結果タスク管理文書が電子帳簿保存法の業務記録に該当し、かつ「追記型ログ + 最新ビュー生成」方式への変更が実装コスト・LLM セッション規模で本 ADR のコスト試算を 2 倍以上超過すると見積もられた場合は SSoT 化を撤退する。
- 補助シグナル: 導入後 90 日で SSoT が実際の起点として使われない(従来どおり個別ソース直参照が続く)なら、起点化の価値が出ていないため撤退評価に入る。
- ロールバック手順: SSoT ページを nav から外す(元の 5 ソースは無傷・データ影響なし)。
コスト試算
実装は LLM(Claude Code)が行うため、人日でなく LLM セッションの実時間で見積もる。前例として ADR-0145(本件の足場となる COVERAGE_GAPS 生成器の新規作成)は Proposed 起票 → Accepted → 実装 PR まで約 2.5 時間・同日完結だった。
- 派生索引フェーズの拡張(sub): 現状の COVERAGE_GAPS 生成器の改修(集約対象ソースの追加 + 役割表示)で 1〜2 時間 / 1 PR 規模。
- SSoT フェーズ(自動更新の仕組み): ソースの作成・更新をトリガーに SSoT を再生成する生成器 + トリガー連携 + 取りこぼし検知 + 件数ガード節 + concurrency 設定で 数時間 / 1〜2 セッション規模。CI / トリガーの本番組込確認は main 領分。
- 未決スキーマの別 ADR: 情報項目の規約確定は別 DRP 起案(本決定スコープ外・コストは当該 ADR で計上)。
- 電帳法該当性確認: 税理士・弁護士への問い合わせ 1 件分(顧問契約範囲内・追加課金見込まず)。
- 運用: 生成は CI で走り LLM 追加コスト 0 円。
- 律速は実装工数ではなく暦日のリードタイム: 圧縮できないのは LLM の作業時間でなく、PR レビュー・マージ判断(代表取締役)、main 領分の CI wiring(別クローンとの協調)、未決スキーマの別 ADR 審査待ち(DRP パイプライン)。実装そのものは各フェーズ数時間規模。
Confirmation
検証手段: 月次で以下を集計する。
- SSoT ページ経由で着手されたタスク件数 / 個別ソースを直接参照した件数。
- 自動更新のトリガー漏れ件数。
- 再生成ジョブの最終成功タイムスタンプ(鮮度)。
- 件数ガード節の発火件数(前回エントリ数比の減少率)。
- 乖離検知件数。
- 元ソース直接参照頻度(盲点⑧対応)。
乖離は「測って許容する」ものでなく cron 全再生成で「生じさせない」設計のため、乖離率しきい値は監視指標に置かない(代わりに件数ガード節と鮮度チェックで担保)。
実行頻度: 生成 = ソース変更トリガー + cron 定期全再生成 / 鮮度チェック = CI 上で定周期(周期は SSoT フェーズ実装 PR で確定) / 集計 = 月次。
違反時対応: 起点化率が低い、トリガー漏れが常態化したら撤退条件評価を行う。鮮度チェック・件数ガード節がアラート発火したら即時に CI ログを確認し再生成ジョブを復旧する。元ソース直接参照頻度が閾値を下回ったら SessionStart hook でリマインダー挿入を有効化する。
KPI:
- セッション開始時の残タスク確認が SSoT 1 枚で完結する割合 80% 以上。
- 自動更新のトリガー漏れ 月 0 件(CI 捕捉可能ソース範囲)。
- 再生成の鮮度 = 定周期内に最終成功している(無音失敗 0)。
- 集約レイヤ = 単一系列を維持(同位置づけの部分集約ページ新設 0)。
- 件数ガード節の発火 = 月 0 件(発火時は即時調査)。
参照 (References)
- 関連 ADR:
- ADR-0145(COVERAGE_GAPS を handover 残タスク集約に転用): 上位化・拡張 — 本決定は現状の派生索引を足場とし、集約対象を全ソースへ広げて SSoT へ育てる。部分集約ページの多重化を避ける点で本決定が方針上位。
- ADR-0048(doc inventory & coverage tracking / known-unknowns を TODO_future へ移送): 補完 — TODO_future を集約対象ソースの一つとして束ねる。
- ADR-0134(受信箱・消費者退避): 並立 — 着信ソース(受信箱 / ops-prompt issue)を集約対象に含む。消化サイクルは変えない。GitHub Issue のクローズ・ラベル剥奪・削除イベントの SSoT エントリ状態遷移は後続スキーマ ADR で整合確認する(盲点⑥)。
- ADR-0144(実装フォローアップ半自動検知): 補完 — ADR の
followups:(frontmatter)を集約対象ソースに含む。frontmatter 宣言が自動更新の入力になる。書き込みは ADR-0144 パイプライン、読み取りは本 ADR パイプラインの単方向を原則とし、SSoT 側は frontmatter を書き換えない。SSoT 上のタスク ID による完了記録は ADR-0144 の完了検知の入力として渡す。競合解決ルールの詳細仕様は後続スキーマ ADR で確定する(盲点④)。 - 後続 ADR(本決定がトリガー): SSoT ページで管理する未決の情報項目(スキーマ・必須フィールド・役割表示・タスク ID 採番 / コピー UI / 完了記録の配線・GitHub Issue 状態遷移・ADR-0144 競合解決等)の規約、および乖離検知で「決定を要する宿題」が surface した場合の解答は、別 ADR ドラフトとして DRP で個別審査する。
- 関連 PR/Issue: -
- 外部資料:
- 電子帳簿保存法(2024年1月施行・宥恕期間終了): 業務記録該当性の確認対象。
- 中小企業会計指針(2024年改訂): 補助簿に準ずる業務記録の変更証跡保持を推奨。