Skip to content

docs(PLAN63): base イメージの日本語の描画と、文書を扱う軽量の道具の要求仕様と設計 (#161, #160) - #221

Merged
takemi-ohama merged 9 commits into
release/v3.7.0from
design/v3.7.0-base-rendering
Sep 22, 2026
Merged

takemi-ohama merged 9 commits into
release/v3.7.0from
design/v3.7.0-base-rendering

Conversation

@takemi-ohama

@takemi-ohama takemi-ohama commented Sep 21, 2026 •

Copy link
Copy Markdown
Contributor

Summary

base イメージの日本語の描画(#161)と、文書を扱う軽量の道具(#160)の要求仕様と設計である。設計文書だけを載せる。containers/base/Dockerfile は変更しない(実装は別のブランチで行う)。

2 件を 1 本にしたのは、どちらも containers/base/Dockerfile の同じ apt / COPY の区画を触るためである(#160 の本文が「#161 を先に入れるか、1 本の PR にまとめる」と書いている)。

ベースは release/v3.7.0(release Pull Request は #212)。

範囲外として起票したもの

課題 内容
#219 Office 文書を画像へ描画する経路を base の外に置く。#160 の 3 つの比べ方と LibreOffice の実測表を引き写した
#220 base が Playwright のブラウザを取得直後に捨てている。arm64 には動く Chromium が入らない。#161 の「決めること」

決めたこと

issues/PLAN63_base-image-rendering-design.md

  • 決定 1: 置き場所は /etc/fonts/local.conf から動かさない
  • 決定 2: 中国語・韓国語の規則は、総称ファミリを名指ししたときだけ効かせる
  • 決定 3: 未導入の書体の受け皿は、弱い結合の append 1 つで足りる
  • 決定 4: 6 パッケージは、1 つ目の RUN の最初の apt-get install の一覧へ足す
  • 決定 5: COPY と fc-cache -f は末尾の COPY 群へ置く
  • 決定 6: 回帰テストは 2 段にする。形は Docker なしで、解決先は Docker ありで固定する
  • 決定 7: 設定は Dockerfile のヒアドキュメントではなく、独立したファイルにする
  • 決定 8: 日本語を既定にし、言語を明示しない中国語は日本語の字形で描く
  • 決定 9: 利用者の上書きの口は塞がない

Test plan

設計の段で確かめたことである。すべて手元の devbase-base:latest(Ubuntu 26.04 / arm64 / fontconfig 2.17.1 / 7.09GB)の稼働中のコンテナで実行した(イメージは建て直していない)。実装の受け入れ条件は、建て直したイメージで採り直す。

  • 現状の再現: fc-match sans-serif / sans-serif:lang=ja / serif / monospace / Noto Sans JP / Meiryo / Yu Gothic / MS PGothic / Zen Kaku Gothic New / Calibri / Cambria がすべて WenQuanYi Zen Hei(monospace は WenQuanYi Zen Hei Mono)を返すことを確認。/etc/fonts/local.conf は存在しない(ls が No such file or directory)
  • 置き場所の実測: 同じ内容を /etc/fonts/conf.d/99-devbase-fonts.conf と /etc/fonts/local.conf へ置いて比べた。前者では sans-serif が WenQuanYi Zen Hei のまま、後者では Noto Sans CJK JP になる。<alias><prefer> だけが読み込み順に依存し、<match target="pattern"> はどちらでも効くことも確認した
  • 設定の 3 変種の比較(exit=0): 規則なし / bug: 日本語が中国語フォントで描画される(sans-serif の解決先が WenQuanYi Zen Hei になる) #161 の本文の形(lang だけを見る)/ この設計の形(family + lang)を同じイメージの中で比べた。bug: 日本語が中国語フォントで描画される(sans-serif の解決先が WenQuanYi Zen Hei になる) #161 の形では serif:lang=zh-cn が Noto Sans CJK SC に、Arial:lang=zh-cn が Noto Sans CJK SC になる(様式と欧文が奪われる)。この設計の形では 12 行すべてが期待どおりになる。設計の「決定 2」に表がある
  • パッケージの追加(exit=0): apt-get install -y --no-install-recommends poppler-utils python3-pil python3-defusedxml python3-lxml fonts-crosextra-carlito fonts-crosextra-caladea が成功。新規に入るのは 24 パッケージ、ディスクの増分は 約 24 MB。pdftoppm / pdfinfo / pdffonts / pdftocairo が入り、PIL 12.1.1 / defusedxml 0.7.1 / lxml 6.0.2 が import でき、soffice / libreoffice / pip / pip3 は入らない
  • 欧文の metric 互換: Calibri → Carlito、Cambria → Caladea、Arial → Liberation Sans が、local.conf を置いた後も変わらないことを確認
  • 利用者の上書き: ~/.config/fontconfig/fonts.conf(スロット 50)に書いた <prefer> が /etc/fonts/local.conf(スロット 51)より優先されることを確認
  • playwright-kit の確認: devbasex/ai-plugins の plugins/playwright-kit/skills/playwright-kit-ops/templates/run.sh・scripts/init_project.sh・templates/runtime-README.md が、初回に uv sync + playwright install chromium を実行する設計であることを確認。bug: 日本語が中国語フォントで描画される(sans-serif の解決先が WenQuanYi Zen Hei になる) #161 の「決めること」の判断材料にした(chore: base が Playwright のブラウザを取得直後に捨てている。arm64 には動く Chromium が入らない #220)

この Pull Request では継続的統合が 1 件も動かない

.github/workflows/ci.yml の on.pull_request.branches は main だけである。release/v3.7.0 を base にした Pull Request では検査ジョブが 1 件も動かない(#216)。gh pr checks は no checks reported を、mergeStateStatus は CLEAN を返すため、画面の上では通ったように見える。通っていない。 検証は手元で行った(上の証跡)。

この Pull Request は設計文書の 2 ファイルだけを足すため、lib / bin / tests には差分が無い。

base コンテナで sans-serif が中国語フェイス(WenQuanYi Zen Hei)へ解決される問題と、
Office 文書・PDF を扱う軽量の道具が無い問題を、1 本の設計にまとめた。

どちらも containers/base/Dockerfile の同じ apt / COPY の区画を触るため 1 本にした。
実装は別のブランチで行う。この Pull Request は設計文書だけを載せる。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

@takemi-ohama takemi-ohama left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

🤖 cross-review | round 1 | kiro | APPROVE

設計・要求文書 2 ファイルのみの追加。主要な事実主張を作業ツリーで突き合わせて確認した:

  • CI が動かない主張(.github/workflows/ci.yml の on.pull_request.branches: [main])— 一致
  • ビルドコンテキストがディレクトリそのもの(lib/devbase/commands/container.py:1741 の str(image_dir))— 一致
  • fc-cache を末尾に置く根拠(containers/base/Dockerfile の playwright --with-deps chromium RUN 直後に ~/.cache 削除、その後に USER ubuntu の COPY 群)— 一致
  • 6 パッケージ追加先(Dockerfile:22 の fonts-noto-cjk fonts-noto-cjk-extra; が 1 つ目 apt-get install の末尾)— 一致
  • containers/lfm/Dockerfile:23 が fonts-noto-cjk を base 非依存で自前導入 — 一致
  • 決定 2 の壊れ方(lang 単独条件が欧文/様式を奪う)とそれを回避する family+lang 設計 — 論旨に矛盾なし

fc-match の解決先やパッケージ数・サイズ増分は稼働中コンテナでの実測値で、イメージ再ビルドでしか最終確認できない旨が本文・受け入れ条件・「未確認のまま残ること」に明記されており、範囲外(#219 / #220)の切り出しも一貫している。修正を要するコード/設定/記述の不整合は検出されなかった。実装 PR で受け入れ条件 1〜16 を再ビルド後の証跡で採り直すこと。

@takemi-ohama takemi-ohama left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

🤖 cross-review | round 1 | agy | REQUEST_CHANGES

要求仕様(受け入れ条件)と設計文書(フォント設定規則・テスト設計)の間で、韓国語等幅フォント(monospace:lang=ko)の検証および fonts-wqy-zenhei のテスト方針に関して記述の整合を取る必要があります。詳細は各インラインコメントをご確認ください。

Comment thread issues/PLAN63_base-image-rendering.md
Comment thread issues/PLAN63_base-image-rendering-design.md Outdated
レビュー指摘 2 件への対応。

- 受け入れ条件 6 の表に総称ファミリ 4 つ × 言語 2 つの 8 行が揃っていなかった。
  `sans:lang=zh-cn` / `sans:lang=ko` / `monospace:lang=ko` を足し、欧文を名指しした
  行にも `Arial:lang=ko` を足して 12 行にした(major)
- 設計文書の「解決先の表」にも同じ 4 行を足し、`serif:lang=ko` の変更前が
  `(未測定)` のままだったのを実測値 `WenQuanYi Zen Hei` へ直した
- テスト設計の受け入れ条件 6 の行を「8 つ」から「12 行(総称ファミリ 4 つ ×
  言語 2 つの 8 行と、欧文を名指しした 3 行、中国語の書体を名指しした 1 行)」へ改めた
- 「変えないもの」の `fonts-wqy-zenhei` の行が Dockerfile の実態と合っていなかった。
  導入の行は無く `npx playwright install --with-deps chromium` が依存として入れる、
  と書き直した。決定 6 の検査の観点も `apt-get remove` / `apt-get purge` / `dpkg -r`
  が無いことの確認へ具体化した(minor)

いずれも手元の devbase-base:latest(arm64)での実測にもとづく。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@takemi-ohama

Copy link
Copy Markdown
Contributor Author

レビュー指摘への対応(round 1)

項目 件数
対応 2
うち major 1
うち minor 1
deferred 0
rejected 0

commit: 62755ba75dd0959e7c77d5898f6fe63dde4ffbf2

対応の内訳

1. major — 受け入れ条件 6 の表に monospace:lang=ko が無い(issues/PLAN63_base-image-rendering.md)

規則は「総称ファミリ 4 つ(sans-serif / sans / serif / monospace)× 言語 2 つ(zh-cn / ko)= 8 つ」なのに、表は 5 行しかありませんでした。sans:lang=zh-cn / sans:lang=ko / monospace:lang=ko を足して 8 つを揃え、欧文を名指しした行にも Arial:lang=ko を加えて 12 行にしました。設計文書の「解決先の表」にも同じ 4 行を追加し、あわせて serif:lang=ko の「変更前」が (未測定) のままだったのを実測値 WenQuanYi Zen Hei へ直しています。「テスト設計」の受け入れ条件 6 の行も「8 つ」から「12 行(総称ファミリ 4 つ × 言語 2 つの 8 行と、欧文を名指しした 3 行、中国語の書体を名指しした 1 行)」へ改めました。追加した値はいずれも手元の devbase-base:latest(arm64)で実測済みです。

2. minor — 「変えないもの」の書き方が Dockerfile の実態と合っていない(issues/PLAN63_base-image-rendering-design.md)

Dockerfile に fonts-wqy-zenhei を入れる行は無く、npx playwright install --with-deps chromium が依存として入れています。箇条書きを「削除しないこと。Dockerfile に導入の行は無く、Playwright が依存として入れる」という形へ書き直し、決定 6 の検査の観点も「Dockerfile に fonts-wqy-zenhei を対象とする apt-get remove / apt-get purge / dpkg -r が無いこと」へ具体化しました。

検証

この Pull Request は設計文書だけでコードの変更もテストコードもないため、テストの追加・実行はありません。代わりに、直した表の行数と設計文書の規則の数が一致していることを確かめました。

$ grep -cE '^      \| `(sans-serif|sans|serif|monospace):lang=(zh-cn|ko)`' issues/PLAN63_base-image-rendering.md
8

受け入れ条件 6 の表は見出しと区切りを除いて 12 行、うち総称ファミリ × 言語が 8 行です。

なお本 Pull Request は release/v3.7.0 を base にしているため、継続的統合は 1 件も動きません(on.pull_request.branches が main だけ。#216)。gh pr checks の no checks reported は正常です。

変更したファイルは issues/PLAN63_base-image-rendering.md と issues/PLAN63_base-image-rendering-design.md の 2 つだけです。

🤖 Generated with Claude Code

@takemi-ohama takemi-ohama left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

🤖 cross-review | round 2 | kiro | APPROVE

設計・要求文書 2 ファイルのみの追加 PR。差分外を含め主要な技術主張をワークツリー実体と突き合わせた(.github/workflows/ci.yml の pull_request.branches: [main]=前提6、containers/base/Dockerfile の apt 2 回呼び出し=L17/L57=決定4、fonts-noto-cjk が L22 で libnss3(L21) の隣=設計の差分の形、末尾 COPY 群の --chmod=0644=L227/240、npx playwright install --with-deps chromium=L213 とその後の cleanup=決定5、sudo install -d/sudo ln -sf=L226/250、tests/snapshot/test_restore_incremental.py の shutil.which→docker info→docker image inspect→skip の 3 段=決定6 の先例、pyproject.toml [tool.pytest.ini_options] に markers/addopts 無し=決定6、amd64 の google-chrome-stable=未確認欄)。いずれも文書の記述と一致し、文書間の用語・前提・数値(+約24MB / 24 パッケージ / +0.34%)にも矛盾は見当たらなかった。修正を要する指摘は無い。

@takemi-ohama takemi-ohama left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

🤖 cross-review | round 2 | codex | REQUEST_CHANGES

切り戻し手順と XML の規則数に関するテスト設計の修正が必要です。

Comment thread issues/PLAN63_base-image-rendering.md Outdated
Comment thread issues/PLAN63_base-image-rendering-design.md Outdated
cross-review round 2 (codex) の 2 件へ対応した。

- 切り戻し手順を 4 段(revert / base の再ビルド / 派生イメージの建て直し /
  稼働中コンテナの作り直し)へ書き直した。base のタグを戻しても、派生イメージは
  `FROM devbase-base:latest` を自分のビルドの時点で焼き込むため建て直すまで古い層を持つ。
  「影響」の表の「利用者の操作」の行にも同じことを書いた
- `fonts-local.conf` の `<match>` は、未導入の書体の受け皿 1 つと総称ファミリ 4 つ ×
  言語 2 つの 8 つで合計 9 つである。テスト設計の検査条件と本文の説明の両方を 9 つへ直した

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@takemi-ohama

Copy link
Copy Markdown
Contributor Author

🤖 cross-review round 2 | fix 完了

区分 件数
対応 2 件(major 1 / minor 1)
deferred 0 件
rejected 0 件

commit: 493e9d8595079664a50c16fc39d0f046e7b50425

対応の内容

  • [major / 運用手順] issues/PLAN63_base-image-rendering.md の「切り戻し手順」を 4 段(revert / devbase build base --no-cache / 派生イメージの建て直し / 稼働中コンテナの作り直し)へ書き直した。派生イメージは FROM devbase-base:latest を自分のビルドの時点で焼き込むため、base のタグを戻しても建て直すまで古い層を持つ。「影響」の表の「利用者の操作」の行にも同じことを書いた
  • [minor / テスト設計] issues/PLAN63_base-image-rendering-design.md の <match> の数を 8 つから 9 つ(未導入の書体の受け皿 1 つ + 総称ファミリ 4 つ × 言語 2 つの 8 つ)へ直した。334 行のテスト設計の表と 171 行の本文の 2 か所で、数が 9 つで一致していることを grep で確かめた

設計文書だけの Pull Request のためテストコードは無く、テストの追加・実行は行っていない。継続的統合はこの Pull Request では動かない(#216)。

レビュースレッドは 2 件とも reply のうえ Resolve 済み。

@takemi-ohama takemi-ohama left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

🤖 cross-review | round 3 | codex | REQUEST_CHANGES

修正提案はインラインの1件です。

Comment thread issues/PLAN63_base-image-rendering-design.md Outdated

@takemi-ohama takemi-ohama left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

🤖 cross-review | round 3 | agy | REQUEST_CHANGES

要求文書(受け入れ条件 6)・決定 2・テスト設計との間で「解決先の表」に Times New Roman:lang=zh-cn が欠落している点(major)、および決定 2 内での決定番号の参照違い(minor)の 2 点についてインラインで修正提案を記載しました。

Comment thread issues/PLAN63_base-image-rendering-design.md
Comment thread issues/PLAN63_base-image-rendering-design.md Outdated
round 3 のレビュー指摘 3 件へ対応する。

- 解決先の表へ `Times New Roman:lang=zh-cn` の行を足す(実測済みの値。
  `Arial:lang=ko` は既にあった)
- 決定 2 の中の参照先を「決定 4」から「決定 8」へ直す。`sans-serif` の
  prefer を日本語へ向けるのは決定 8 である
- 決定 4 のキャッシュの説明を Docker の仕様へ合わせる。`RUN` のキャッシュが
  効いている間はその中身が実行されないため、取得先の内容が変わっても
  キャッシュは無効にならない

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@takemi-ohama

Copy link
Copy Markdown
Contributor Author

round 3 のレビュー指摘への対応

項目 件数
対応 3 件
うち major 1 件
うち minor 2 件
deferred 0 件
rejected 0 件

コミット: 133cc2fcb69aa7e270e6faabb950c4494327058e

変更したのは issues/PLAN63_base-image-rendering-design.md の 1 ファイルだけです。

対応の内訳

# 重要度 / 観点 指摘 対応
1 major / 整合性 「解決先の表」に Times New Roman:lang=zh-cn が漏れている Arial:lang=zh-cn の直後へ Times New Roman:lang=zh-cn(Liberation Serif)の行を追記。実測済みの値。Arial:lang=ko は既に表にあったため追記は 1 行
2 minor / 正確性 決定 2 の中の参照先「決定 4」が違う 参照先を 決定 8(日本語を既定にする決定)へ修正
3 minor / 正確性 決定 4 のキャッシュの説明が Docker の仕様と合っていない キャッシュが無効になる条件は「命令の文字列 / 親の層 / --no-cache」の 3 つであり、取得先の中身が変わっても無効にならないこと(curl | bash はキャッシュが効いている間は実行されない)へ書き換え。あわせて、この変更自体が 1 つ目の RUN の文字列を変えるため層を分けても 1 度は建て直される旨を追記

確認

設計文書だけの Pull Request でテストコードが無いため、次の 2 点を確認しました。

  • 「解決先の表」に Times New Roman:lang=zh-cn と Arial:lang=ko の行があること → 66 行目・67 行目に存在
  • 決定 4 の という語が残っていないこと → grep -c "決定 4 の" が 0

3 件とも thread へ返信のうえ Resolve 済みです。継続的統合はこの Pull Request では動きません(#216)。

@takemi-ohama takemi-ohama left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

🤖 cross-review | round 4 | kiro | COMMENT

設計・要求文書として実測に裏付けられ、コード参照(ci.yml の branches: [main]、Dockerfile の 2 回の apt-get install・playwright --with-deps chromium 直後の ~/.cache 削除・末尾 COPY 群、_build_single_image の str(image_dir)、snapshot テストの 3 段 skip 先例、lfm:23 の fonts-noto-cjk 自前導入)はいずれも作業ツリーと一致していることを確認した。指摘は 1 点(minor / 整合性)で、受け入れ条件 13 の増分サイズの合否ラインと測定方法の不一致(インライン参照)。ブロッカーではない。

Comment thread issues/PLAN63_base-image-rendering.md Outdated

@takemi-ohama takemi-ohama left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

🤖 cross-review | round 4 | agy | APPROVE

Round 3 までの修正内容(解決先の表への追加、参照番号の整合、キャッシュ無効化条件の説明)が正しく反映されており、要求仕様および設計文書の整合性が確認できました。追加の修正アクションはありません。

受け入れ条件 13 は合否のラインを「約 24 MB」とし、検証を `docker images`
の差と定めていた。しかし 24 MB は稼働中のコンテナでの `du` の差(apt の
リストとキャッシュを含む)で、`docker images` が出す層単位の値とは測り方が
違う。そのままでは正しい実装でも不合格になりうる。

合否のラインを「7.09GB に対して +0.5% 未満(40 MB 以下)」へ改め、
24 MB をラインに使わない理由を条件の中に書いた。設計文書の
「未確認のまま残ること」にも、このラインが測り方の違いを吸収するための
ものである旨を追記した。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@takemi-ohama

Copy link
Copy Markdown
Contributor Author

cross-review 最終スイープ 完了

round 4 で残っていた指摘 1 件に対応し、PR 上の未解決スレッドを 0 件にしました。

今回のスイープで対応した件数: 1 件

担当 深刻度 箇所 内容 対応
kiro minor / 整合性 issues/PLAN63_base-image-rendering.md:186 受け入れ条件 13 の合否のライン(約 24 MB)と測り方(docker images の差)が食い違っている 受け入れ

合否のラインを 7.09GB に対して +0.5% 未満(40 MB 以下) へ改め、「合否のラインを『約 24 MB』にしない」理由(24 MB は稼働中のコンテナでの du の差で apt のリストとキャッシュを含む測り方、docker images は層単位の値で層の重なりの分だけずれる)を条件の中に書きました。あわせて設計文書の「未確認のまま残ること」の「イメージの増分の測り方」の行に、このラインが測り方の違いを吸収するためのものである旨を追記しました。

状態

  • round 1〜3 の 7 件: 対応済み・Resolve 済み
  • round 4 の 1 件: 本コミットで対応・reply + Resolve 済み
  • 残 open thread: 0 件(review thread 合計 8 件すべて resolved)
  • commit SHA: 7cf8a34399a53f91da38c058b674df4e9a2f474c
  • 変更したファイル: issues/PLAN63_base-image-rendering.md / issues/PLAN63_base-image-rendering-design.md の 2 ファイルのみ(設計文書だけの PR のため、コードとテストの変更は無し)

継続的統合はこの PR では 1 件も動きません(#216)。no checks reported は正常です。

🤖 Generated with Claude Code

@takemi-ohama takemi-ohama left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

🤖 cross-review | round 5 | kiro | APPROVE

設計・要求文書の主張を実コードと照合した(CI の on.pull_request.branches=main、tests/containers/ 8 ファイル、Docker gated テストの先例 tests/snapshot/test_restore_incremental.py の which→docker info→image inspect 3 段、pyproject.toml に marker/addopts 無し、_build_single_image が containers/base をビルドコンテキストに渡すこと、Dockerfile の COPY 群が USER ubuntu より後で fc-cache を playwright の --with-deps より後に置ける位置関係、fonts-wqy-zenhei が明示 install されず playwright 依存で入ること、<alias>4/<match>9 の内数整合)。いずれも一致し、修正を要する不正確・矛盾・存在しないパスは見つからなかった。指摘無しで承認する。

@takemi-ohama takemi-ohama left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

🤖 cross-review | round 5 | codex | REQUEST_CHANGES

修正が必要な指摘は 1 件です。

Comment thread issues/PLAN63_base-image-rendering.md Outdated
devbase rebuild は devbase build --expires=7 のシノニム
(lib/devbase/commands/container.py の cmd_rebuild) で、イメージのビルドしか
行わず稼働中のコンテナを作り直さない。期限内ならビルドそのものを飛ばすため、
切り戻しにも適用にも使えない。

「影響」の表の「利用者の操作」と「切り戻し手順」の 4 番目の両方で、稼働中の
コンテナの作り直しを devbase down → devbase up に統一し、devbase rebuild が
ここでは使えない理由を書き添えた。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@takemi-ohama

Copy link
Copy Markdown
Contributor Author

round 5 の指摘への対応

項目 件数
対応 1
major 1
deferred 0
rejected 0
  • commit SHA: c64b0604277646c528db159d514cd4a490b3aebc
  • 変更したファイル: issues/PLAN63_base-image-rendering.md(1 ファイル / 2 か所)

内容

codex(major / 正確性)の「devbase rebuild では切り戻しが反映されない」を受け入れました。lib/devbase/commands/container.py の cmd_rebuild を読んで裏を取っています。devbase rebuild は devbase build --expires=7(既定 7 日)のシノニムで、イメージのビルドしか行わず稼働中のコンテナを作り直しません。期限内ならビルドそのものを飛ばすため、切り戻しにも適用にも使えません。

  1. 「影響」の表の「利用者の操作」— 稼働中のコンテナの作り直しを devbase down → devbase up に置き換え、「devbase up では反映されない」を「devbase up だけでは反映されない」に改めました。
  2. 「切り戻し手順」の 4 番目 — devbase rebuild を選択肢から外して devbase down → devbase up に統一し、devbase rebuild がここでは使えない理由を書き添えました。

grep -n "devbase rebuild" issues/PLAN63_base-image-rendering.md で残るのは 2 の「使えない」という説明の中の 1 か所だけです。

未解決スレッドは 0 件です。設計文書だけの Pull Request のためテストコードは無く、テストの追加・実行はしていません。継続的統合はこの Pull Request では 1 件も動きません(#216)。

🤖 Generated with Claude Code

@takemi-ohama takemi-ohama left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

🤖 cross-review | round 6 | codex | APPROVE

修正を求める指摘はありません。

@takemi-ohama takemi-ohama left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

🤖 cross-review | round 6 | agy | REQUEST_CHANGES

要求仕様書(受け入れ条件)と設計文書(解決先の表・テスト設計)の間で、検証対象の項目にいくつか漏れや対応の不整合があります。

  • IPAPGothic(名指し)の対応付け: 設計書の解決先の表で固定対象となっている IPAPGothic(名指し) が、要求仕様書の受け入れ条件およびテスト設計の対応表から欠落しています。
  • fc-match sans の受け入れ条件追加: fonts-local.conf で個別に alias を定義し解決先の表にもある sans 単体の検証が、受け入れ条件 1〜4 から抜けています。
  • fc-match -s のテスト設計への反映: 受け入れ条件 2 で要求されている fc-match -s sans-serif:lang=ja の 1 件目の検証が、テスト設計の固定対象(解決先の表の各行)から漏れています。

Comment thread issues/PLAN63_base-image-rendering-design.md
Comment thread issues/PLAN63_base-image-rendering.md
Comment thread issues/PLAN63_base-image-rendering-design.md Outdated
…-s を書く (#221)

round 6 のレビュー指摘 3 件への対応。

- 受け入れ条件 6 の表へ `IPAPGothic`(名指し)の行を足した。イメージに実在する
  日本語の書体がそのまま残ることを固定する。受け入れ条件 4 は「イメージに無い
  書体名が JP へ落ちる」条件なので、`WenQuanYi Zen Hei`(名指し)と同じ性質の
  この行は 6 の表へ置いた
- 受け入れ条件 1 へ `fc-match sans`(`lang` なし)を足した。`fonts-local.conf` は
  `sans` の `<alias>` を持つのに、`lang` を付けない照合が固定されていなかった
- テスト設計の受け入れ条件 1〜4 の行へ、`fc-match -s sans-serif:lang=ja` の 1 件目も
  確かめることを明記した。あわせて受け入れ条件 6 の行数を 12 から 13 へ直した

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@takemi-ohama

Copy link
Copy Markdown
Contributor Author

round 6 の指摘への対応(3 件)

区分 件数
対応 3 件(major 1 / minor 2)
deferred 0 件
rejected 0 件

commit: a9081d1ee6ad037f4c971bccb63b07503ddb77b3

対応の内訳

  1. [major / 正確性] IPAPGothic(名指し)が受け入れ条件に割り当てられていない — 受け入れ条件 6 の表へ | ``IPAPGothic``(名指し) | ``IPAPGothic``(残る。イメージに実在する日本語の書体を奪わない) | を足しました。ご提案の受け入れ条件 4 ではなく 6 に置いています。4 は「イメージに無い書体名が JP へ落ちる」ことを固定する条件で、IPAPGothic は fonts-ipafont-gothic で実在する書体だからです。固定したいのは「名指しした実在の書体が奪われない」ことで、これは 6 の表に既にある WenQuanYi Zen Hei(名指し)と同じ性質です。あわせて設計文書のテスト設計の受け入れ条件 6 の行を 12 行から 13 行へ直しました。
  2. [minor / 正確性] fc-match sans が受け入れ条件 1〜4 から抜けている — 受け入れ条件 1 へ fc-match sans を追記しました(実測値: 変更前 WenQuanYi Zen Hei / 変更後 Noto Sans CJK JP)。
  3. [minor / 網羅性] テスト設計に fc-match -s の検証が無い — テスト設計の受け入れ条件 1〜4 の行へ、fc-match -s sans-serif:lang=ja の 1 件目が Noto Sans CJK JP であることも確かめる旨を明記しました(同じ docker run の中で出力の先頭を採る)。

変更したのは issues/PLAN63_base-image-rendering.md と issues/PLAN63_base-image-rendering-design.md の 2 ファイルのみです(設計文書だけの Pull Request のため、コードとテストの変更はありません)。

未解決スレッドは 0 件です。

@takemi-ohama takemi-ohama left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

🤖 cross-review | round 7 | kiro | COMMENT

設計・要求文書はコードベースの事実(base Dockerfile の RUN 構成・COPY 区画・playwright --with-deps、_build_single_image のビルドコンテキスト、cmd_rebuild=build --expires=7、test_restore_incremental.py の docker skip 3 段、ci.yml の pull_request.branches: [main]、containers/lfm/Dockerfile:23)と一致していることを確認した。設計レベルの追加指摘は無い。インラインの 1 件(受け入れ条件 5 の Calibri/Cambria の分類)のみ。

Comment thread issues/PLAN63_base-image-rendering.md Outdated

@takemi-ohama takemi-ohama left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

🤖 cross-review | round 7 | agy | APPROVE

要求仕様書・設計文書ともに既存コードおよびコンテナ実機検証の結果と整合しており、受け入れ条件とテスト設計の対応付けも正確です。修正を要するアクションはありません。

受け入れ条件 5 の見出しは「欧文が壊れない」だが、`Calibri` と `Cambria` は
変更前に `WenQuanYi Zen Hei`(中国語のフェイス)へ落ちており、`Arial` などの
「変更の前後で変わらない」ものとは性質が違う。同じ枠に並べると基準を誤読させる。

- 受け入れ条件 5 は変わらない 3 つ(`Arial` / `Times New Roman` / `Courier New`)に絞る
- 受け入れ条件 11 を「欧文の metric 互換が直る」とし、現状がどちらも
  `WenQuanYi Zen Hei` であることと、直す手段(`fonts-crosextra-carlito` /
  `fonts-crosextra-caladea`)を書く
- 設計文書のテスト設計の表の `5・11` の行を、上の切り分けに合わせる

受け入れ条件の番号は 1〜16 のまま変えていない。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@takemi-ohama

Copy link
Copy Markdown
Contributor Author

cross-review 最終スイープ(完了)

round 7 で残っていた 1 件に対応し、PR 上の未解決スレッドは 0 件になった。

区分 件数
対応済み(累計) 13 件
このスイープで対応 1 件
残 open thread 0 件

このスイープで対応した指摘

  • kiro / minor / 正確性(issues/PLAN63_base-image-rendering.md:154): 受け入れ条件 5 が Calibri / Cambria を Arial などと同じ「欧文が壊れない」の枠に並べており、基準(baseline)を誤読させる

指摘のとおりである。Calibri / Cambria は変更前に WenQuanYi Zen Hei(中国語のフェイス)へ落ちており、「変わらない」ではなく「壊れている → 直る」ものである。次のとおり切り分けた。

  • 受け入れ条件 5: 「欧文が壊れない(変更の前後で変わらない)」とし、対象を Arial / Times New Roman / Courier New の 3 つに絞った。Calibri / Cambria を含めない理由と、受け入れ条件 11 で固定することを明記
  • 受け入れ条件 11: 「欧文の metric 互換が直る。」とし、現状はどちらも WenQuanYi Zen Hei であることと、fonts-crosextra-carlito / fonts-crosextra-caladea で直ることを明記。以前の「受け入れ条件 5 と同じ行」という参照は本文へ置き換えた
  • 設計文書のテスト設計の表: 5・11 の行を、上の切り分けに合わせて書き直した

受け入れ条件の番号は 1〜16 のまま変えていない(後ろの条件の番号がずれるとテスト設計の表との対応が壊れるため)。

変更

  • commit: e6a8398
  • 変更ファイル: issues/PLAN63_base-image-rendering.md / issues/PLAN63_base-image-rendering-design.md の 2 ファイルのみ(設計文書だけの変更で、containers/ や tests/ は触っていない)

継続的統合はこの Pull Request では 1 件も動かない(#216)。no checks reported は正常である。

@takemi-ohama takemi-ohama left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

🤖 cross-review | round 8 | codex | APPROVE

設計文書の差分と関連実装を確認し、修正を要する指摘はありません(イメージ再ビルド・実機描画は本レビューでは未実施)。

@takemi-ohama takemi-ohama left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

🤖 cross-review | round 8 | kiro | REQUEST_CHANGES

設計文書の実測表に 1 件の相互矛盾があります。「解決先の表」の ko 行の『変更前』と、決定 2 の『規則なし』列(=同じ現状 base)で sans-serif:lang=ko / serif:lang=ko の値が食い違っており、受け入れ条件・回帰テストの基準値がずれます。インラインの指摘を参照してください。

Comment thread issues/PLAN63_base-image-rendering-design.md
「解決先の表」の ko の「変更前」と、決定 2 の表の ko の「規則なし」は
食い違って見えるが、測っている状態が違う。前者は /etc/fonts/local.conf
が無い今の base イメージそのまま(WenQuanYi Zen Hei)、後者は local.conf
は置いたうえで zh-cn / ko の <match> だけを書かなかった状態
(Noto Sans CJK JP / Noto Serif CJK JP)である。どちらも 2026-09-22 に
arm64 で実測した値なので、値は変えない。

読み分けられるように、決定 2 の表の列の見出しを「zh-cn / ko の規則なし」
へ改め、表の直前に 3 つの列がどれも local.conf を置いた状態であることと、
local.conf を置く前の値は「解決先の表」の「変更前」にあることを書いた。
決定 2 の末尾の段落の言い回しも同じ語に揃えた。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@takemi-ohama

Copy link
Copy Markdown
Contributor Author

round 8 の指摘 1 件(kiro / major)へ対応しました

cd4f4b54eb84f95c26d394acd258e66f265c42fc / 変更したファイルは issues/PLAN63_base-image-rendering-design.md の 1 つだけです。

指摘

「解決先の表」の ko の『変更前』(WenQuanYi Zen Hei)と、決定 2 の表の ko の『規則なし』(Noto Sans CJK JP / Noto Serif CJK JP)が食い違っている。

判断: 一部だけ受け入れ

食い違って見えること自体は正しい指摘なので受け入れました。一方で提案された値の書き換え(「解決先の表」の ko の『変更前』を Noto Sans CJK JP / Noto Serif CJK JP へ)は採っていません。2 つの表は違う状態を測っており、書き換えると誤った値が入るためです。

表 列 測っている状態 sans-serif:lang=ko serif:lang=ko
解決先の表 変更前 /etc/fonts/local.conf が無い、今の base イメージそのまま WenQuanYi Zen Hei WenQuanYi Zen Hei
決定 2 の表 規則なし local.conf は置いたが、zh-cn / ko の <match> だけを書かなかった状態 Noto Sans CJK JP Noto Serif CJK JP

local.conf を置くと <alias><prefer> が sans-serif を日本語のフェイスへ向けるため、ko の規則が無いと韓国語の指定まで日本語のフェイスになります。local.conf そのものが無い今の base では sans-serif 自体が WenQuanYi Zen Hei なので、ko も WenQuanYi Zen Hei です。どちらの値も 2026-09-22 に arm64 の devbase-base:latest で実測済みで、書き換えると受け入れ条件が使う「現状」の基準値が誤ります。

実際に直したところ

読み分けられるよう、値ではなく列の見出しと前置きの文を直しました。

  1. 決定 2 の表の列の見出しを 規則なし → zh-cn / ko の規則なし へ
  2. 表の直前に、3 つの列はどれも local.conf を置いた状態であること、local.conf を置く前の値は「解決先の表」の「変更前」の列にあることを明記
  3. 決定 2 の末尾の段落も「zh-cn / ko の規則を 1 つも置かない案も採らない」へ揃え、日本語の字形になるのは local.conf を置いたことで初めて起きる旨を補足

「解決先の表」の値は 1 つも変えていません。設計文書のみの PR のため、テストの追加・実行はありません(CI は #216 により本 PR では動きません)。

これで round 1〜8 の指摘 14 件すべてが対応済み・Resolve 済み、未解決スレッドは 0 件です。

@takemi-ohama takemi-ohama left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

🤖 cross-review | round 9 | codex | APPROVE

要求仕様・設計と関連コードを確認し、修正を要する指摘はありません。

@takemi-ohama takemi-ohama left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

🤖 cross-review | round 9 | agy | APPROVE

要求仕様および設計文書の整合性、受け入れ条件とテスト設計の対応、実測値・切り戻し手順の妥当性を確認しました。修正を要する指摘事項はありません。

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