Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 12 additions & 3 deletions config/texlive-tag-refs.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,15 @@
"name": "latex-environment"
},
{
"name": "latex-release-action"
"name": "latex-release-action",
"ignore": [
"CHANGELOG.md"
],
"ignore_note": "どのリリースが何を出したかの記録。2026d と 2026a を名乗る行があるが、現行版に揃えると履歴が壊れる。",

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ [MEDIUM] ignore_noteextra_patterns_note はスキーマ上の正式フィールドか確認を

ignore_note および extra_patterns_note はコメント代わりに使われていますが、JSON にはコメント構文がないためこのアプローチ自体は理解できます。ただし、これらのフィールドがスキーマや処理スクリプト側で「未知フィールドとして無視される」ことが保証されているか確認してください。スキーマ検証が厳格(additionalProperties: false 相当)な場合、バリデーションエラーになる可能性があります。

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

スキーマ検証は存在しないので、バリデーションエラーにはなりません。 据え置きます。

audit-texlive-tags.sh が jq で読むフィールドはこれだけです。

.image
.name
.ignore
.extra_patterns
.source_of_truth.repo
.source_of_truth.path

ignore_noteextra_patterns_note は読まれず、単に無視されます。スクリプト内に $schema / ajv / jsonschema 等による検証は一切ありません。

そもそもこの書き方はこのファイルの既存の慣習です。

  • トップレベルの $schema-note — ファイル全体の趣旨を書いている
  • invariants — 5 つの不変条件を散文で書いている
  • latex-ecosystemignore_note / extra_patterns_note — 今回追加したものと同じ形

つまり _note サフィックスは、JSON にコメント構文がないことへの既定の対処としてこのファイルが元から採っている方式で、今回それに倣っただけです。ご指摘のとおり additionalProperties: false のスキーマが後から導入されれば影響しますが、そのときは既存の $schema-noteinvariants も同時に引っかかるので、このファイル全体の設計判断として扱うべき話になります。

"extra_patterns": [
"(?<!ghcr\\.io/smkwlab/)texlive-ja-textlint:\\K[0-9]{4}[a-z]?"

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🚨 [HIGH] extra_patterns の重複リスク

latex-release-actionlatex-ecosystem の両方に同一パターン (?<!ghcr\.io/smkwlab/)texlive-ja-textlint:\K[0-9]{4}[a-z]? が追加されています。

PR 本文では「否定後読みで重複を防ぐ」と説明されていますが、それは同一リポジトリ内での既定検出との重複を防ぐものです。もし将来、両リポジトリが同じファイルを参照するような構成変更があった場合、このパターン自体が複数エントリに存在することで混乱を招く可能性があります。

また、このパターンが latex-release-actionCHANGELOG.md に対しても適用されるかどうか(ignore リストが extra_patterns にも効くか)を、スクリプト側で明示的に保証しているか確認が必要です。もし ignoreextra_patterns に適用されない実装であれば、CHANGELOG.md 内の texlive-ja-textlint:2026d のような行が誤検出される恐れがあります。

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

2 点とも確認しました。どちらも据え置きます。

ignoreextra_patterns にも効きます

ご指摘の懸念が一番重要でしたが、audit-texlive-tags.sh の処理順がこうなっています。

ignore=$(printf '%s' "$spec" | jq -r '.ignore // [] | .[]')

hits=$( ... 既定の検出 ... )                    # ① 既定検出を集める

extra=$(printf '%s' "$spec" | jq -r '.extra_patterns // [] | .[]')
while IFS= read -r pattern; do
    found=$( ... grep -oHnP "$pattern" ... )
    [ -n "$found" ] && hits=$(printf '%s\n%s' "$hits" "$found")   # ② extra も同じ hits へ
done <<EOF
$extra
EOF

while IFS= read -r hit; do                       # ③ hits 全体に ignore を適用
    file=${hit%%:*}
    ignored=false
    while IFS= read -r path; do
        [ "$file" = "$path" ] && ignored=true
    done <<EOF
$ignore
EOF
    [ "$ignored" = true ] && continue

既定検出と extra_patterns の結果は同じ hits に集約され、除外はその後に一度だけ適用されます。 実装コメントにも設計意図が明記されています。

除外パスは grep の後で落とす。git ls-files に渡して絞ると、宣言したパスが消えていても気付けない

したがって CHANGELOG.md は、パターンが到達しても後段で確実に落ちます。誤検出は起きません。

同一パターンが 2 エントリにある件

宣言はリポジトリごとに独立して適用されます。スクリプトは各リポジトリを個別に clone し、その作業ディレクトリで git ls-filesgrep を走らせるため、latex-release-action のパターンが latex-ecosystem のファイルに当たることはありません。

「両リポジトリが同じファイルを参照する構成変更」は、この仕組みでは起こりえない形です。パターンが同じ文字列であることは偶然ではなく、同じ書き方(レジストリ接頭辞なしのイメージ参照)を拾いたいという同じ要求から来ています。共通化するとしたら宣言の構造自体を変える話になり、この PR の範囲を超えます。

],
"extra_patterns_note": "Dockerfile の 1 行目は既定の検出が拾うが、8 行目の注記はレジストリ接頭辞を伴わないため拾えない。同じイメージを指す 2 箇所のうち片方だけが動くと、どのバリアントが使われるかの説明が実態と食い違う。否定後読みは、既定の検出と同じ箇所を二重に数えないため。"
},
{
"name": ".github"
Expand All @@ -32,9 +40,10 @@
],
"ignore_note": "更新手順の説明で、架空の版(2025d)をリリースする筋書きとして書いている。現行版に揃えると手順の語りが壊れる。",
"extra_patterns": [
"texlive-ja-textlint \\| \\K[0-9]{4}[a-z]?"
"texlive-ja-textlint \\| \\K[0-9]{4}[a-z]?",
"(?<!ghcr\\.io/smkwlab/)texlive-ja-textlint:\\K[0-9]{4}[a-z]?"
],
"extra_patterns_note": "ECOSYSTEM.md のバージョン互換性の表は、イメージ名とタグを別の列に書くため既定の検出では拾えない。この表は 2026-08-04 まで 2026a のまま放置されていた。"
"extra_patterns_note": "ECOSYSTEM.md のバージョン互換性の表は、イメージ名とタグを別の列に書くため既定の検出では拾えない。この表は 2026-08-04 まで 2026a のまま放置されていた。2 つ目は同じ表の次の行で、こちらは名前とタグがコロンで 1 セルに収まっているため 1 つ目では拾えない。隣り合う 2 行の片方だけが監査対象という状態になっていた。"
},
{
"name": "sotsuron-template"
Expand Down