Skip to content

chore(docs): scope-out cpp-dev distroless, narrow M3 to 4 images - #526

Merged
ayutaz merged 2 commits into
devfrom
chore/t-016-scope-out
May 20, 2026
Merged

chore(docs): scope-out cpp-dev distroless, narrow M3 to 4 images#526
ayutaz merged 2 commits into
devfrom
chore/t-016-scope-out

Conversation

@ayutaz

@ayutaz ayutaz commented May 20, 2026

Copy link
Copy Markdown
Owner

Summary

distroless 移行 milestone (M3 supply chain) のうち、 cpp-dev image を scope-out する docs only PR。 trial bundle PR (webui + cpp-inference) で multi-stage build pattern / glibc ABI 整合 / shell-less entrypoint 移植の知見が既に揃ったため cpp-dev での再実証は不要。 加えて cpp-dev は dev image (production 推論経路なし、 GHCR 配布は dev 用のみ) で distroless 哲学と本質的に不整合 (cmake / clang / gdb を final stage に残さざるを得ない) のため、 大目的「container image の CVE 80%+ 削減 / size 50%+ 削減」 への寄与が限定的と判断。

Affected Components

  • Documentation

Type

  • Documentation

Risk Level

  • patch (内部 docs 更新のみ、 production paths / build pipeline / contract gate 影響ゼロ、 audit fixture は line offset 吸収のみで block 数不変)

Contract Impact

  • None — docs/spec/*.toml 不変更、 doc-examples audit fixture (tests/fixtures/doc_examples_audit/audit.json) は ticket line shift を吸収する regenerate のみで block 数 446 不変

変更内容

機能名 動作 これがないと起こること
cpp-dev ticket Status 「除外確定」 化 Status 行を「計画中」→「除外確定 (M3 distroless scope-out 2026-05-20)」、 上部に scope-out rationale を明記 (spike 目的達成 + dev image 構造的不整合 + production 経路なしで supply chain 寄与限定)。 旧 wolfi-base trial の Note は履歴として保持 後続着手者が cpp-dev distroless を「未着手」と誤認して再着手し、 既に判明した構造的不整合 (apk packaging 不足 / dev tools が final stage 必須) を再発見する無駄が出る
M3 milestone scope 縮小 (5 → 4 image) §1 直下に scope 変更注記を追加、 §2 配下チケット表 header を「Distroless × 5 image」→「Distroless × 4 image」、 cpp-dev 行を strikethrough + Status「除外確定」、 §2 依存関係を 4 件 scope の認識が ticket と milestone で食い違い、 後続 promotion PR 計画時に「5 image 全部やる」 と誤った前提で動く
doc-examples audit fixture regenerate ticket / milestone の line shift を吸収するため snapshot を再生成 (block 数 446 不変、 中身は code block の start/end line offset 更新のみ) PR の audit gate (check-snapshot) が drift で fail し merge ブロック

設計判断

  • scope-out の根拠を rationale 化 — 「やらない」 判断を明示的な doc として残すことで、 数ヶ月後の retrospective で根拠の再構築が不要になる。 spike 目的が達成済かどうかの判断材料 (trial bundle PR 番号 + 実証された pattern 3 種) を ticket §Note と milestone §1 の両方に重ね書き
  • ticket を削除せず履歴記録として保持 — 将来 dev image base 最適化を別 milestone で再着手する可能性があるため、 過去の検討と wolfi 試行失敗の構造的理由 (OpenJTalk / mecab / iconv chain の apk 不在) を消さない
  • 個別 ticket の merged 反映は本 PR scope 外 — webui / cpp-inference / python-inference の Status 同期は別 PR (post-merge ticket Status update の cadence)。 本 PR は scope-out 判断 1 件だけに絞り、 review burden を最小化
  • 代替案 (debian:12-slim 切替) は別 ticket 候補として明記 — scope-out は「distroless 化を止める」 だけで「dev image size 最適化を止める」 ではない。 後続の独立 ticket として再立案する余地を ticket §Note に残す
  • conservative 路線 — production paths (canonical Dockerfile / docker-compose / webui-test.yml / release pipeline) には一切触らない docs のみの変更で、 build / publish / deploy 経路への副作用ゼロ

Test Plan

  • uv run python scripts/check_doc_examples.py audit --check-snapshot tests/fixtures/doc_examples_audit/audit.json で audit fixture drift なし (block 数 446 不変、 exit 0) を確認
  • cpp-dev ticket と M3 milestone doc を render し、 scope-out 根拠 (spike 目的達成 + dev image 不整合 + production 経路なし) が両方に書かれており参照整合が取れていることを目視確認
  • git diff dev...HEAD -- docker/ .github/ src/ docs/spec/ が空 (production paths / contract spec への副作用なし) を確認
  • markdownlint / hadolint / pre-commit hooks が全て pass

Checklist

  • Tests pass locally (該当 contract gate / audit がすべて green)
  • No GPL-LGPL deps (該当なし、 docs only)
  • Documentation updated (本 PR 自体が documentation 更新)

Related Issues

なし (M3 milestone の scope 縮小判断、 issue 紐付けなし)

PR #524 (distroless webui + cpp-inference trial bundle) で M3 distroless spike の本来目的 (multi-stage build pattern / glibc ABI 整合 / entrypoint 移植) は達成済。 cpp-dev は dev image (production 推論経路なし、 GHCR 配布は dev 用) で、 distroless 哲学と本質的に不整合 (cmake / clang / gdb を final stage に残さざるを得ない) のため、 supply chain 大目的 (CVE 80% 削減 / size 50% 削減) への寄与が限定的と判断し scope-out 確定。

- cpp-dev ticket: Status「計画中」→「除外確定」、 §Note に scope-out rationale (spike 目的達成 + dev image 構造的不整合 + production 経路なしで supply chain 寄与限定) を明記、 旧 wolfi-base trial Note は履歴記録として保持
- M3 milestone doc: §1 直下に 5 image → 4 image scope 縮小注記、 §2 配下チケット表 header と本文を 4 image に更新、 cpp-dev 行は strikethrough + 除外確定、 §2 依存関係 を 4 件に
- doc-examples audit fixture: ticket / milestone の line shift 吸収のため regenerate (block 数 446 不変、 中身は line offset 更新のみ)

個別 ticket Status の merged 反映 (python-inference trial PR #523 / webui + cpp-inference trial PR #524) は別 PR で扱う scope。
Copilot AI review requested due to automatic review settings May 20, 2026 11:59
@github-actions

github-actions Bot commented May 20, 2026

Copy link
Copy Markdown
Contributor

Required status-check gate (deferred)

Head SHA 4b8b849 is no longer the branch tip (latest: 9832a40). Waiting for the new commit's spoke runs to complete before re-evaluating.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Docs-only update to narrow the M3 “Distroless migration” milestone scope by explicitly scoping out the cpp-dev image (T-016), documenting the rationale and keeping historical context, plus regenerating the doc-examples audit snapshot to account for line shifts.

Changes:

  • Mark T-016 (cpp-dev distroless) as scope-out confirmed, adding a rationale note while retaining the prior Wolfi trial note.
  • Update the M3 milestone to reflect “Distroless × 4 images” and strike through T-016 with updated dependency notes.
  • Regenerate tests/fixtures/doc_examples_audit/audit.json to align line offsets (block count unchanged).

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 3 comments.

File Description
tests/fixtures/doc_examples_audit/audit.json Snapshot regen to absorb doc line shifts (offset updates + generated_at).
docs/tickets/tickets/T-016-distroless-cpp-dev.md Document T-016 scope-out decision and rationale; keep prior Wolfi trial note/history.
docs/tickets/milestones/M3-supply-chain.md Update milestone scope from 5→4 images and reflect T-016 scope-out in the ticket table/dependencies.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread docs/tickets/tickets/T-016-distroless-cpp-dev.md Outdated
Comment thread docs/tickets/tickets/T-016-distroless-cpp-dev.md Outdated
Comment thread docs/tickets/tickets/T-016-distroless-cpp-dev.md Outdated
Copilot review (PR #526) 指摘 3 件への対応:
- PR フィールドを他 ticket 同じ `#NNN (...)` 形式に揃える (`PR ` prefix 除去)
- 実在しない例示パス `docs/tickets/proposals/...` を抽象表現「別 proposal doc」に書き換え (factual error fix)
- 未設定値 `―` を canonical 表記 `なし` に統一 (grep / 自動処理整合)

ticket 内容は不変、 schema / 表記の正規化のみ。
@ayutaz
ayutaz merged commit e2fee8f into dev May 20, 2026
35 checks passed
@ayutaz
ayutaz deleted the chore/t-016-scope-out branch May 20, 2026 13:07
ayutaz added a commit that referenced this pull request May 20, 2026
…tone

lychee (PR #529) が `docs/tickets/milestones/M3-supply-chain.md` line 20 の `[T-016 §Note](../tickets/T-016-distroless-cpp-dev.md)` を broken link として検出。 cpp-dev ticket file 削除に伴う dangling reference の修正漏れ。

詳細誘導先を file link から PR #526 (scope-out 確定) + 削除済 ticket は git history で参照可能、 の text 記述へ書き換え。
ayutaz added a commit that referenced this pull request May 20, 2026
…tickets

Copilot review (PR #529) 6 件指摘の整合性破綻を一括修正。 前回 PR の cleanup で私が「歴史的記述として残す」 と判断した旧計画記述が、 scope-out 後の現状と矛盾して読まれる状態が残っていた。

- M3 milestone Status: 「計画中」 → 「進行中 (Distroless trial 3/4 投入済 PR #523 / #524、 promotion 観測中。 SLSA L3 未着手)」 — 実態に合わせて milestone 全体 status を更新
- M3 milestone post-M3 retrospective 項目: 「T-012〜T-016 完了で」 → 「T-012〜T-015 完了で (cpp-dev scope-out で対象外)」
- 各 ticket の §M3 内推奨実装順 quote block (T-012/T-013/T-014/T-015 冒頭): 旧計画「cpp-dev → cpp-inference → webui → python-inference → wyoming」 を「旧計画、 PR #523/#524 trial bundle と PR #526 scope-out で再編済」 と注記化、 PR 番号で実際の cadence を併記
- T-012 Trial scope note: 「5+ PR cadence」 → 「4+ PR cadence」、 「T-013/T-014/T-015/T-016 + canonical 置換」 → 「T-013/T-014/T-015 + canonical 置換」
- T-012 §2.2 base image 候補比較表: 「shell + apk で柔軟、 T-016 で実績」 → 「shell + apk で柔軟」 + 短所列に「PR #524 wolfi-base trial で apk packaging 不足 (OpenJTalk / mecab tooling chain は Debian apt 前提) と判明、 dev image 文脈での失敗実証済」
- T-013 §2.7: 「T-016 と同 format」 → 「distroless-report.md format (旧 T-016 で想定された M3 共通 format、 cpp-dev scope-out で未作成、 promotion PR で別途定義予定)」
- T-014: 「5 image 中で最後に着手」 → 「distroless 4 image 中で最後に着手予定」、 「M3 全 5 image」 → 「M3 distroless 4 image (cpp-dev scope-out で対象外)」
- T-015 (最大規模、 9 箇所): §推奨 (cc-dynamic + T-016 統一) → 「PR #524 trial で `debian:12-slim` + `gcr.io/distroless/cc-debian12` 採用」、 §並列度 (T-016 完了後着手) → 「PR #524 で T-013 と trial bundle として直接着手・merged」、 §採否 (T-016 spike 結果次第) → 「PR #524 trial で size -2.2% 実証済」、 §6.結論 (T-016 retrospective) → 「M3 全体 retrospective に持ち越し」、 §7.2 Handoff (T-016 と整合) → 「cpp-dev wolfi-base trial で構造的失敗実証済、 採用不可」、 §7.3 未解決質問 (T-016 retrospective で決定) → 「PR #524 で確定」 へ更新
- doc-examples audit fixture を regenerate (ticket file の line shift 吸収、 block 数 444 不変)

production paths / build pipeline / contract gate 影響ゼロ、 docs integrity の最終確保のみ。
ayutaz added a commit that referenced this pull request May 20, 2026
)

* chore(docs): finalize M3 distroless cleanup, delete cpp-dev ticket

PR #526 で確定した M3 distroless scope 縮小 (cpp-dev 除外) と PR #523 / #524 の trial merged 状態を docs 全体に反映する一括整理。

- cpp-dev ticket file (旧 T-016) を削除。 経緯は git history + PR #524 (wolfi trial 失敗) + PR #526 (scope-out 確定) で参照可能
- M3 milestone 表の Status / PR 列を ticket 本体と sync: python-inference / webui / cpp-inference を「計画中」→「着手中 (trial merged 2026-05-20、 promotion 観測中)」 + PR 列に #523 / #524 を記入、 cpp-dev 行は表から除去 (補足注記で git history を案内)
- tickets/README の M3 ticket list から cpp-dev link 除去、 「5 image」→「4 image」、 milestone status を「計画中」→「進行中 (trial 3/4 投入済)」 へ
- 各 ticket §先行チケット (T-012/T-013/T-014/T-015) の T-016 link を除去し scope-out 経緯を注記
- T-015 §着手前提 「T-016 完了推奨 (Wolfi multi-stage の知見を流用)」 → 「なし (T-016 scope-out で wolfi-base trial は失敗実証済、 PR #524 で webui との trial bundle として直接着手)」 (factual error 修正、 wolfi 失敗実証済の事実反映)
- CHANGELOG [Unreleased] の cpp-dev entry を「本 PR から除外、 別 PR で扱う」 (時点表現) → 「scope-out 確定 (PR #526)、 ticket file 削除済」 (確定表現) へ更新、 scope-out 根拠 (production 経路なし + distroless 哲学不整合 + 大目的への寄与限定) を併記
- doc-examples audit fixture を regenerate (T-016 削除で block 数 446 → 444、 内訳は bash=191 / python=19 等で言語別総数は実体に同期)

production paths (canonical Dockerfile / docker-compose / deploy-huggingface.yml / build pipeline) は不変更、 docs integrity 確保のみの保守的な一括整理。

* fix(docs): remove dangling link to deleted cpp-dev ticket in M3 milestone

lychee (PR #529) が `docs/tickets/milestones/M3-supply-chain.md` line 20 の `[T-016 §Note](../tickets/T-016-distroless-cpp-dev.md)` を broken link として検出。 cpp-dev ticket file 削除に伴う dangling reference の修正漏れ。

詳細誘導先を file link から PR #526 (scope-out 確定) + 削除済 ticket は git history で参照可能、 の text 記述へ書き換え。

* fix(docs): finish T-016 scope-out integrity across all M3 distroless tickets

Copilot review (PR #529) 6 件指摘の整合性破綻を一括修正。 前回 PR の cleanup で私が「歴史的記述として残す」 と判断した旧計画記述が、 scope-out 後の現状と矛盾して読まれる状態が残っていた。

- M3 milestone Status: 「計画中」 → 「進行中 (Distroless trial 3/4 投入済 PR #523 / #524、 promotion 観測中。 SLSA L3 未着手)」 — 実態に合わせて milestone 全体 status を更新
- M3 milestone post-M3 retrospective 項目: 「T-012〜T-016 完了で」 → 「T-012〜T-015 完了で (cpp-dev scope-out で対象外)」
- 各 ticket の §M3 内推奨実装順 quote block (T-012/T-013/T-014/T-015 冒頭): 旧計画「cpp-dev → cpp-inference → webui → python-inference → wyoming」 を「旧計画、 PR #523/#524 trial bundle と PR #526 scope-out で再編済」 と注記化、 PR 番号で実際の cadence を併記
- T-012 Trial scope note: 「5+ PR cadence」 → 「4+ PR cadence」、 「T-013/T-014/T-015/T-016 + canonical 置換」 → 「T-013/T-014/T-015 + canonical 置換」
- T-012 §2.2 base image 候補比較表: 「shell + apk で柔軟、 T-016 で実績」 → 「shell + apk で柔軟」 + 短所列に「PR #524 wolfi-base trial で apk packaging 不足 (OpenJTalk / mecab tooling chain は Debian apt 前提) と判明、 dev image 文脈での失敗実証済」
- T-013 §2.7: 「T-016 と同 format」 → 「distroless-report.md format (旧 T-016 で想定された M3 共通 format、 cpp-dev scope-out で未作成、 promotion PR で別途定義予定)」
- T-014: 「5 image 中で最後に着手」 → 「distroless 4 image 中で最後に着手予定」、 「M3 全 5 image」 → 「M3 distroless 4 image (cpp-dev scope-out で対象外)」
- T-015 (最大規模、 9 箇所): §推奨 (cc-dynamic + T-016 統一) → 「PR #524 trial で `debian:12-slim` + `gcr.io/distroless/cc-debian12` 採用」、 §並列度 (T-016 完了後着手) → 「PR #524 で T-013 と trial bundle として直接着手・merged」、 §採否 (T-016 spike 結果次第) → 「PR #524 trial で size -2.2% 実証済」、 §6.結論 (T-016 retrospective) → 「M3 全体 retrospective に持ち越し」、 §7.2 Handoff (T-016 と整合) → 「cpp-dev wolfi-base trial で構造的失敗実証済、 採用不可」、 §7.3 未解決質問 (T-016 retrospective で決定) → 「PR #524 で確定」 へ更新
- doc-examples audit fixture を regenerate (ticket file の line shift 吸収、 block 数 444 不変)

production paths / build pipeline / contract gate 影響ゼロ、 docs integrity の最終確保のみ。
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.

2 participants