Skip to content

Drop three unused Haskell dependencies - #60

Open
kogai wants to merge 6 commits into
mainfrom
claude/drop-unused-haskell-deps
Open

kogai wants to merge 6 commits into
mainfrom
claude/drop-unused-haskell-deps

Conversation

@kogai

@kogai kogai commented Sep 13, 2026

Copy link
Copy Markdown
Owner

flow / unordered-containers / mtl の 3 つは package.yaml の library スタンザに宣言されていますが、どこからも import されていません。

base は #56 (CI が動く状態が前提のため)。

根拠

src/ app/ test/ の全 import を列挙して突き合わせました。

$ grep -rh '^import' src/*.hs src/Xsd/*.hs app/*.hs test/*.hs | ...
パッケージ 期待される import 実際
flow Flow 0
unordered-containers Data.HashMap.* 0
mtl Control.Monad.{State,Reader,Writer,Except} 0

ツリー内の "Flow" 2 件は test/TestModel.hs:312 と test/TestMixed.hs:33 にある ONIX の型名で、パッケージとは無関係です。

mtl について補足すると、パーサが使っているのは Control.Monad.Trans.State / Control.Monad.Trans.Except / Control.Monad.Trans.Reader で、これらは transformers が提供するモジュールです(mtl の Control.Monad.State ではありません)。transformers は宣言に残しています。

なぜ resolver 更新より先に出すか

resolver を上げるとスナップショットがこの 3 つも解決対象に含みます。先に落としておけば、満たすべきパッケージが 3 つ減り、もしビルドが通らなかったときの容疑者も 3 つ減ります。

onix.cabal について

hpack の生成物ですがコミットされているので、同じ 3 行を手で削って整合させました。本来は stack に再生成させるべきですが、この環境では実行できません(haskell.org が egress ポリシーでブロック)。

確認

  • import の全列挙による突き合わせ(上表)
  • ビルドは未検証。GHC / stack がこの環境に無いため、この PR の CI が唯一の検証手段です。3 つのいずれかが実は推移的に必要だった場合はここで落ちます

🤖 Generated with Claude Code

https://claude.ai/code/session_01P8rZakwAiz1jpViUX34x1Z


Generated by Claude Code

kogai and others added 5 commits September 13, 2026 06:49
Both CI jobs currently fail two seconds after starting, before any build
step runs:

    ##[error]This request has been automatically failed because it uses a
    deprecated version of `actions/cache: v2`.

GitHub has closed down actions/cache v1 and v2 and now auto-fails runs
that reference them at action-download time, so the workflow cannot get
as far as `make test` or the bazel e2e target.

Bump actions/cache to v4 to unblock that, and bump the remaining actions
still on the Node 12 runtime at the same time:

- actions/checkout v2 -> v4
- actions/setup-node v2.1.4 -> v4
- haskell/actions/setup v1 -> haskell-actions/setup v2 (repository moved)

Tool versions are left as they are (GHC 8.8.3, stack 2.5.1, Node 12.x) so
this change is limited to action versions. haskell-actions/setup v2 still
exposes the stack-path output the cache step depends on.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P8rZakwAiz1jpViUX34x1Z
With the deprecated actions bumped, the Haskell job now reaches `make
test` and fails there instead: `make test` depends on the `schema`
target, which fetches the EDItEUR archives, and editeur.org now answers
bazel's request with `202 Accepted` instead of the zip.

The test suite does not need those archives. Everything under test/ reads
fixtures/test_*.xsd; the only reader of ./schema is schemaRoot in
src/Lib.hs, which is the code-generation path. The dependency was an
over-specification that tied the whole feedback loop for the parser to
the availability of an external service.

Drop it from `test` and keep it on `build`, where generating code really
does need the schema. This does not fix the 202 itself: generation and
tracking new schema releases still need the download.

Also introduce docs/adr/ to record decisions like this one, with a
template, an index, and the two decisions made here.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P8rZakwAiz1jpViUX34x1Z
The previous commit dropped the `schema` prerequisite from `make test` on
the claim that nothing under test/ reads schema/. That claim was wrong,
and review caught it: fixtures/test_mixed_html.xsd included
../schema/v2/ONIX_XHTML_Subset.xsd directly. Xsd.getSchema follows
includes recursively and resolves that relative path with readFile, which
throws when the file is absent, and schema/ is gitignored — so on a clean
checkout the suite would have failed instead of running.

Commit 9352123 confirms the dependency was deliberate: it added
`test: schema` in the same change that deleted the vendored
2_1_rev03_schema/ tree and repointed this fixture at ../schema/v2/.

Rather than restore the prerequisite, move what the fixture needs into
the repository. test_mixed_html_xhtml_subset.xsd declares the 40 element
names the fixture refers to, each as a mixed complex type. That is the
property the assertions actually rest on: TestModel expects
Model.collectElements to come back empty, and that filter keeps only
elements with complexMixed = False, so the test means "XHTML elements do
not leak into models". Deleting the include instead would have made the
assertion vacuous.

The stand-in is written here rather than copied from the EDItEUR
distribution, so it raises no redistribution question.

ADR-0002 is rewritten around what is actually true, including why the
dependency was real and why a stand-in is enough.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P8rZakwAiz1jpViUX34x1Z
BZL_BIN used `:=`, so `$(shell npx bazel info bazel-bin)` ran while make
parsed the file — on every target, `make test` included. The Haskell job
runs `make test` without ever installing node_modules, so that expansion
just fails there. Measured in this environment: `make -n test` took
18.1s and printed a bazel download error before doing anything, and
0.011s with the assignment deferred to `=`. Nothing outside the schema
recipes reads BZL_BIN, so deferring it costs nothing.

Also drop the `ls -lah` step that printed the stack tool path; it was
debugging output for the cache setup, not a check anything depends on.

Both spotted in review of this PR.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P8rZakwAiz1jpViUX34x1Z
flow, unordered-containers and mtl are declared in the library stanza but
nothing imports them.

  $ grep -rh '^import' src app test | ...   # no Flow, no Data.HashMap,
                                            # no Control.Monad.{State,Reader,
                                            #   Writer,Except}

The two "Flow" hits in the tree are ONIX type names in test expectations,
not the package. The State, Reader and Except monad transformers the
parser uses come from Control.Monad.Trans.*, which is transformers, not
mtl; transformers stays declared.

They are removed ahead of the resolver bump rather than with it: three
fewer packages the snapshot has to satisfy, and three fewer candidates to
rule out if that bump does not compile.

onix.cabal is hpack output but it is committed, so it is updated to match
by hand — the same three build-depends entries. Regenerating it properly
needs stack, which cannot run here (haskell.org is blocked by egress
policy), so CI is what confirms this.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P8rZakwAiz1jpViUX34x1Z

kogai commented Sep 13, 2026

Copy link
Copy Markdown
Owner Author

総評

flow と unordered-containers の 2 つは調べた限り本当にどこからも使われておらず、削除して問題ありません。ただし mtl は現状のコードのままでは外せません。src/Xsd/Parser.hs:14 の import Control.Monad.Trans(末尾に .Class が付かない方)は transformers-0.5.6.2 には存在しないモジュールで、mtl-2.2.2 が提供しているものです。PR 説明の照合表が Control.Monad.{State,Reader,Writer,Except} だけを「mtl 由来として期待される import」に挙げていて、この 1 行が網から漏れています。このまま CI を回すと Could not find module 'Control.Monad.Trans' で library のビルドが落ちるはずです。import を 1 行書き換えれば 3 つとも安全に落とせるので、その修正を同じコミットに含めてから CI を回すことをおすすめします。加えて onix.cabal の hpack ハッシュが更新されていない点も直しておいた方がよいです。


必須

1. mtl は削除できない — src/Xsd/Parser.hs:14 が mtl のモジュールを import している

  • ファイル: package.yaml(削除された - mtl == 2.2.2)/ onix.cabal(削除された , mtl ==2.2.2)/原因は src/Xsd/Parser.hs:14

  • 問題: src/Xsd/Parser.hs:14 の import Control.Monad.Trans は Control.Monad.Trans.Class でも Control.Monad.Trans.State でもなく、裸の Control.Monad.Trans です。このモジュール名は transformers-0.5.6.2 の exposed-modules に含まれておらず、mtl-2.2.2 の exposed-modules に含まれています(mtl 側の実体は Control.Monad.Trans.Class と Control.Monad.IO.Class を再 export するだけの薄いモジュール)。

  • なぜ問題か: cabal / stack は直接依存パッケージのモジュールしか import 可能にしません(-hide-all-packages + -package-id)。mtl を build-depends から外すと Control.Monad.Trans が解決できず、library のコンパイルがそこで止まります。lts-16.27 のスナップショットに mtl が入っていることや、mustache などが間接的に mtl に依存していることは救いになりません。

  • 修正案: src/Xsd/Parser.hs:14 を

    -import Control.Monad.Trans
    +import Control.Monad.Trans.Class (lift)

    に変更してください。このモジュールから実際に使っているのは lift 1 箇所(src/Xsd/Parser.hs:598)だけで、Control.Monad.Trans.Class は transformers-0.5.6.2 の exposed-modules に入っています。なお liftIO は src/Xsd.hs:71 の 1 箇所だけで、そちらは src/Xsd.hs:12 の import Control.Monad.IO.Class 経由 = base(base-4.9 以降に移管済み。transformers 0.5.6.2 は impl(ghc < 7.11) のときだけ legacy/pre711 から同名モジュールを露出する条件付き記述になっています)なので影響ありません。この 1 行を直せば mtl の削除は成立します。


推奨

2. onix.cabal:7 の hpack ハッシュが古いまま

  • ファイル: onix.cabal:7 — -- hash: d894bbda696a3e4398796a16a928bd9923bbeaae2b4a61ad371f193c8322fa0d

  • 問題: hpack はヘッダコメント(3〜8 行目)を除いた本文の SHA-256 を -- hash: に記録し、「手で編集されたか」の判定に使います。今回 build-depends を手で 3 行削ったのにこの行が base ブランチのままなので、記録値と実際の内容が一致しません。

  • なぜ問題か: ハッシュ不一致の .cabal を hpack は「手動で変更されたファイル」とみなし、--force なしでは上書きしません。stack も同様に警告を出して package.yaml ではなく既存の .cabal を採用します。今回は両ファイルを同じ内容に揃えてあるのでビルド結果自体は変わりませんが、以後 package.yaml を編集しても .cabal に反映されない状態が固定されるため、次に依存を足す人が踏みます。

  • 修正案: stack build(または hpack --force)で再生成するのが本筋です。手で直すなら 7 行目を

    -- hash: ccd13791926f8c74575d5f17648a17adbbe0740ce44707823a93b20ae5f7605c
    

    にすれば整合します(算出方法は後述の検証セクション参照)。ただし必須 Configure Renovate #1 の修正を入れると .cabal 側の中身は変わらないのでハッシュも同じ値のままで大丈夫です。


任意(このPRで直す必要はないが、フォローアップ候補)

3. package.yaml:3-7 のメタデータがテンプレートの初期値のまま

  • github: "githubuser/onix" → 生成物の onix.cabal の homepage / bug-reports / source-repository head がすべて実在しない https://github.com/githubuser/onix を指しています(description だけは正しく kogai/onix を指しているので食い違ってもいます)。
  • author: "Author name here" / maintainer: "example@example.com" / copyright: "2020 Author name here" もプレースホルダのままです。
  • license: BSD3 ですが、リポジトリの LICENSE は実際には MIT License / Copyright (c) 2020 Shinichi Kogai です。.cabal は license: BSD3 + license-file: LICENSE を出力するので、配布物としてはライセンス表示が矛盾します。
  • 依存整理の PR の射程を超えるので別 PR が妥当だと思いますが、license の食い違いだけは実害があるので優先度は高めです。

4. package.yaml:53-56 の ghc-options が YAML の複数行スカラーになっている

    ghc-options:
      - -threaded
      - -rtsopts
      - -with-rtsopts=-N
        -Wall
        -fwarn-incomplete-patterns
        -fwarn-incomplete-uni-patterns

-Wall 以下はリスト要素ではなく、-with-rtsopts=-N の plain scalar の折り返しとして 1 要素に畳み込まれています。cabal 側は空白区切りで分解するので 結果的に意図どおりの ghc-options が出ています(onix.cabal の executable スタンザを見ると -threaded -rtsopts -with-rtsopts=-N -Wall -fwarn-incomplete-patterns -fwarn-incomplete-uni-patterns になっている)が、偶然成立しているだけで、- を付け足すつもりで触ると壊れます。各行を独立したリスト要素にするのが安全です。ついでに tests スタンザ(package.yaml:65-68)には -Wall 系が付いておらず、テストコードだけ警告が効いていません。


確認したこと / できなかったこと

差分の範囲

$ git diff origin/claude/bump-deprecated-github-actions...origin/claude/drop-unused-haskell-deps

変更は onix.cabal の library スタンザから flow / mtl / unordered-containers の 3 行、package.yaml の library スタンザから同じ 3 行の計 6 行削除のみ。executable / test スタンザは無変更で、そもそもこの 3 つを列挙していません。.cabal の build-depends は削除後もアルファベット順(base, bytestring, containers, filepath, http-client, http-client-tls, mustache, network-uri, parsec, text, transformers, vector, xml-conduit, yaml)を保っており、hpack が生成する並びと一致します。

全 .hs の洗い出し

対象は git ls-tree -r --name-only で列挙した 16 ファイル(Setup.hs, app/Main.hs, src/{Code,Lib,Mixed,Model,Util,Xsd}.hs, src/Xsd/{Parser,Types}.hs, test/{Spec,TestCode,TestMixed,TestModel,TestParser,TestUtils}.hs)。^import に限定せず grep -rn "import" で行頭以外・インデント付き・複数行 import も含めて全件を目視しました。

検索したパターンと結果(いずれも src/ app/ test/ 全体、--include=*.hs):

検索語 結果
Flow 2 件。ただし test/TestModel.hs:312 の typeName = Just "Flow" と test/TestMixed.hs:33 の xmlReferenceName = "Flow" で、いずれも ONIX の型名の文字列リテラル。import は 0 件
flow の演算子 |> <| .> <. !> <! 0 件
HashMap / HashSet / unordered-containers いずれも 0 件
Control.Monad.{State,Except,Reader,Writer,RWS,Cont,Error} すべて 0 件
MonadState / MonadReader / MonadError / throwError / catchError / liftEither すべて 0 件(mtl 固有の型クラス・関数は使われていない)
PackageImports 0 件({-# LANGUAGE PackageImports #-} による別経路の import は無し)
Control.Monad.Trans(前方一致) src/Xsd/Parser.hs:14 に完全一致の 1 件 ← 必須 #1

Data.HashMap を経由しない形での unordered-containers 依存(mustache の Value が内部で HashMap を使う、Data.Yaml/aeson の Object など)も確認しましたが、このリポジトリ側は Text.Mustache の object / (~>) / ToMustache しか触っておらず、HashMap 型がシグネチャに現れる箇所はありません。型クラスインスタンスの解決は直接依存でなくても効くので、この経路で build-depends が要求されることはありません。

transformers に実在するか 1 個ずつ確認

src/Xsd.hs と src/Xsd/Parser.hs で実際に使われている識別子を列挙し、transformers-0.5.6.2(タグ 0.5.6.2, commit 0fe761c)の exposed-modules と突き合わせました。

$ curl -s https://raw.githubusercontent.com/haskell/transformers/0fe761c9287111373ae64ab39b67fbcde212b3f7/transformers.cabal
  # (条件分岐を畳んで整形した抜粋)
  exposed-modules:
    Control.Applicative.Backwards
    Control.Applicative.Lift
    Control.Monad.Signatures
    Control.Monad.Trans.Accum
    Control.Monad.Trans.Class
    Control.Monad.Trans.Cont
    Control.Monad.Trans.Except
    Control.Monad.Trans.Error
    Control.Monad.Trans.Identity
    Control.Monad.Trans.List
    Control.Monad.Trans.Maybe
    Control.Monad.Trans.Reader
    Control.Monad.Trans.RWS(.CPS/.Lazy/.Strict)
    Control.Monad.Trans.Select
    Control.Monad.Trans.State(.Lazy/.Strict)
    Control.Monad.Trans.Writer(.CPS/.Lazy/.Strict)
    Data.Functor.Constant
    Data.Functor.Reverse
    Data.Functor.Identity
    (加えて impl(ghc<7.11) のときだけ Control.Monad.IO.Class ほか)

$ curl -s -o /dev/null -w "%{http_code}" .../0fe761c.../Control/Monad/Trans.hs
404
$ curl -s -o /dev/null -w "%{http_code}" .../0fe761c.../Control/Monad/Trans/Class.hs
200
$ curl -s https://raw.githubusercontent.com/haskell/mtl/v2.2.2/mtl.cabal
  exposed-modules:
    ...
    Control.Monad.Trans        ← ここにある
    ...
$ curl -s https://raw.githubusercontent.com/haskell/mtl/v2.2.2/Control/Monad/Trans.hs
module Control.Monad.Trans (
    module Control.Monad.Trans.Class,
    module Control.Monad.IO.Class
  ) where

各 import と使用ヘルパの判定:

箇所 import / 識別子 提供元 判定
src/Xsd.hs:13 Control.Monad.Trans.State transformers OK
src/Xsd.hs:64,67,72 evalStateT / gets / modify' transformers Control.Monad.Trans.State(.Lazy) OK
src/Xsd.hs:12,71 Control.Monad.IO.Class / liftIO base(base-4.9 以降) OK
src/Xsd/Parser.hs:15,524,599 Control.Monad.Trans.Except / runExcept / throwE / Except transformers OK
src/Xsd/Parser.hs:16,33,525,564,625… Control.Monad.Trans.Reader / runReaderT / ReaderT / asks / local transformers OK
src/Xsd/Parser.hs:13 Control.Monad(unless / when など) base OK
src/Xsd/Parser.hs:14,598 Control.Monad.Trans / lift mtl NG(必須 #1)

src/Lib.hs:48,58 の reader は file Reader = "reader" と "reader.mustache" という文字列リテラルで、mtl の reader とは無関係です。src/Xsd/Types.hs:49 の get、test/TestModel.hs:42 の put も State モナドとは無関係で、前者はコメント文中の "get rid of"、後者はテストデータの文字列リテラル内の語です。

hpack ハッシュ

onix.cabal:7 の -- hash: が「1〜2 行目 + 9 行目以降(= ヘッダコメント 6 行を除いた本文)」の SHA-256 であることを、base ブランチの .cabal で再現して確認しました。

$ alg(){ { sed -n '1,2p' "$1"; tail -n +9 "$1"; } | sha256sum | cut -d' ' -f1; }
$ git show origin/claude/bump-deprecated-github-actions:onix.cabal > base.cabal
$ git show origin/claude/drop-unused-haskell-deps:onix.cabal     > new.cabal
base recorded : d894bbda696a3e4398796a16a928bd9923bbeaae2b4a61ad371f193c8322fa0d
base computed : d894bbda696a3e4398796a16a928bd9923bbeaae2b4a61ad371f193c8322fa0d   ← 一致(アルゴリズム確認)
new  recorded : d894bbda696a3e4398796a16a928bd9923bbeaae2b4a61ad371f193c8322fa0d
new  computed : ccd13791926f8c74575d5f17648a17adbbe0740ce44707823a93b20ae5f7605c   ← 不一致(推奨 #2)

その他

  • stack.yaml の extra-deps は HUnit-1.6.1.0 と typeable/xsd-parser の 2 つだけで、今回の 3 パッケージは lts-16.27 のスナップショット由来。extra-deps 側に取り残しは発生しません。
  • Bazel(BUILD.bazel / WORKSPACE)は EDItEUR のスキーマ取得と Go の e2e だけを扱っており、Haskell の依存宣言は持っていません。追随が必要なファイルは他にありません。
  • .github/workflows/test.yml のキャッシュキーは hashFiles('**/package.yaml') と hashFiles('**/onix.cabal') を含むので、この変更でキャッシュは自然に切り替わります。

検証できなかったこと

  • 実ビルド。この環境には GHC も stack も無く、haskell.org(= Hackage 含む)が egress ポリシーでブロックされているため取得もできません。必須 Configure Renovate #1 は Hackage ではなく GitHub 上の haskell/transformers と haskell/mtl のリリースタグを直接参照して判断しています。
  • hpack / stack の実挙動。「ハッシュ不一致 → 手動変更扱いで上書きしない/package.yaml を無視して .cabal を採用」は hpack・stack の既知の挙動に基づく説明で、この環境で実行して再現したものではありません。ハッシュが不一致であること自体は上記のとおり実測です。
  • import Control.Monad.Trans 以外に mtl 由来のものが無いかの網羅性は、上表の grep の範囲での確認です。CPP による条件付き import は grep -rn '^#' --include=*.hs が 0 件、{-# LANGUAGE ... #-} も OverloadedStrings / LambdaCase / DeriveGeneric / FlexibleInstances / NamedFieldPuns / DuplicateRecordFields のみで、PackageImports や CPP は使われていないことまでは確認しました。

Generated by Claude Code

Review caught that mtl was not in fact unused. src/Xsd/Parser.hs:14 was
`import Control.Monad.Trans` — the bare module, which transformers does
not expose. It comes from mtl, which re-exports
Control.Monad.Trans.Class and Control.Monad.IO.Class through it. The
check behind the previous commit only looked for
Control.Monad.{State,Reader,Writer,Except}, so this line went unnoticed,
and with -hide-all-packages the build would have failed on a missing
module rather than anything subtle.

Import Control.Monad.Trans.Class (lift) instead. lift is the only thing
Parser.hs used from it (one use, line 598); liftIO in Xsd.hs comes from
base's Control.Monad.IO.Class, which that module already imports
directly. With this, mtl really is unused.

Also refresh onix.cabal's hpack hash, which the previous commit left
pointing at the pre-edit content. A stale hash makes hpack treat the file
as hand-modified and stop regenerating it, so later package.yaml changes
would silently fail to propagate. The algorithm was confirmed by
reproducing origin/main's recorded hash from its own file before
computing this one.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P8rZakwAiz1jpViUX34x1Z

kogai commented Sep 13, 2026

Copy link
Copy Markdown
Owner Author

レビューありがとうございます。必須の指摘は完全に正しく、こちらの検証が不十分でした。 修正しました (4653a9d)。

必須: mtl は落とせない

src/Xsd/Parser.hs:14 を確認しました。

$ sed -n '12,17p' src/Xsd/Parser.hs
import Control.Monad
import Control.Monad.Trans          ← これ
import Control.Monad.Trans.Except

bare の Control.Monad.Trans で、transformers は公開していないモジュールです。当方の突き合わせ表は Control.Monad.{State,Reader,Writer,Except} しか見ておらず、Control.Monad.Trans 自体が mtl の再エクスポート用モジュールであることを見落としていました。-hide-all-packages 下では Could not find module で落ちます。「CI サイクルを節約するための PR が、そのサイクルを 1 つ潰す」というのはご指摘のとおりです。

対応

ご提案どおり、import を絞りました。

import Control.Monad.Trans.Class (lift)

lift は Parser.hs:598 の 1 箇所のみ。liftIO は Xsd.hs:71 で使われますが、そちらは同ファイルが直接 import している base の Control.Monad.IO.Class 由来です。これで mtl は本当に不要になりました。

推奨: hpack のハッシュが陳腐化

こちらも確認しました。アルゴリズム(onix.cabal の 1〜2 行目 + 9 行目以降の sha256)を実装し、まず origin/main の記録ハッシュを自分で再現できることを確かめてから、この PR の値を計算しました。

origin/main
  recorded: d894bbda696a3e4398796a16a928bd9923bbeaae2b4a61ad371f193c8322fa0d
  computed: d894bbda696a3e4398796a16a928bd9923bbeaae2b4a61ad371f193c8322fa0d
  match: True          ← アルゴリズムが正しいことの確認

origin/claude/drop-unused-haskell-deps (修正前)
  recorded: d894bbda...
  computed: ccd13791926f8c74575d5f17648a17adbbe0740ce44707823a93b20ae5f7605c
  match: False

ご提示の ccd13791... と完全に一致しました。この値に更新しています。「ハッシュが古いと hpack がファイルを手動変更扱いして再生成をやめ、以降の package.yaml の変更が静かに反映されなくなる」という指摘は、放置すると後で原因不明のバグになる類のもので、助かりました。

任意

  • package.yaml のプレースホルダとライセンス不一致: ライセンスが LICENSE(MIT) / package.yaml・onix.cabal(BSD3) / package.json(ISC) の 3 者で食い違う件は Correct the stale metadata in package.json #62 でも触れています。どれが正かは作者にしか判断できないので、こちらでは揃えません(LICENSE 側が誤りだった場合に誤りを広げるため)。方針を決めていただければ別 PR で対応します。
  • -Wall が -with-rtsopts=-N に YAML の行継続で吸収されている: 確認しました。cabal が空白で分割するため結果的に正しく効いていますが、明らかに事故です。tests スタンザに -Wall が無い点も含め、別 PR で整理します。

Generated by Claude Code

Base automatically changed from claude/bump-deprecated-github-actions to main September 13, 2026 10:36
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