Skip to content

Make CI runnable again: bump deprecated actions and decouple make test from the schema download - #56

Merged
kogai merged 5 commits into
mainfrom
claude/bump-deprecated-github-actions
Sep 13, 2026
Merged

kogai merged 5 commits into
mainfrom
claude/bump-deprecated-github-actions

Conversation

@kogai

@kogai kogai commented Sep 13, 2026 •

Copy link
Copy Markdown
Owner

CI が 2 段階で壊れていたので、両方を直して「テストが実際に走る」状態まで戻します。

1 段目: 廃止されたアクションによる即死

両ジョブがジョブ開始 2 秒、ビルドが 1 行も走る前に失敗していました。

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

GitHub 側で actions/cache の v1/v2 が廃止され、アクションのダウンロード段階で自動的に失敗します。あわせて Node 12 ランタイムのままだったものも上げました。

  • actions/cache v2 → v4 (2 箇所、直接の原因)
  • actions/checkout v2 → v4
  • actions/setup-node v2.1.4 → v4
  • haskell/actions/setup v1 → haskell-actions/setup v2 (リポジトリ移管済み)

ツールのバージョン (GHC 8.8.3 / stack 2.5.1 / Node 12.x) は変更していません。今回の変更をアクションのバージョンだけに限定し、切り分けを容易にするためです。haskell-actions/setup v2 もキャッシュステップが参照する stack-path output を提供しています。

結果: Test e2e が緑になりました。ログ上も実際にビルドとテストが走っています (//e2e/go:snapshot_test PASSED, Executed 1 out of 1 test: 1 test passes)。

2 段目: make test が editeur.org に依存していた

1 段目を直すと、Test haskell codes は make test まで到達して、今度はそこで失敗しました。

WARNING: Download from https://www.editeur.org/files/ONIX%202.1/...Issue_36.zip
         failed: UnrecoverableHttpException GET returned 202 Accepted
make: *** [Makefile:35: schema/v2] Error 1

make test が schema ターゲット (EDItEUR の zip をダウンロードして展開する) に依存していたためです。再実行しても同じ結果でした。

ここで、テストは schema/ を読んでいません。test/ 配下が読むのは fixtures/test_*.xsd だけで、./schema を参照するのは src/Lib.hs の schemaRoot (コード生成の実行時パス) のみです。つまりこの依存は事実の反映ではなく過剰指定で、パーサのロジックに対するフィードバックループ全体を外部サービスの可用性に縛り付けていました。

test から schema 依存を外し、build 側には残しています (生成には実際にスキーマの実体が要るため、こちらは本物の依存)。

スコープ外

この PR は 202 の問題そのものを解決しません。コード生成と、最新スキーマへの追従は引き続きダウンロードを必要とします。そちらは取得方法の設計判断が要るため、別途 ADR と PR で扱います。

ADR

この種の判断を残す場所として docs/adr/ を用意し、テンプレートと索引、今回の 2 件を記録しました。

  • ADR-0001: 設計判断を ADR として記録する
  • ADR-0002: ユニットテストを取得済みスキーマから切り離す

確認

  • ワークフローの YAML パースと uses の置換内容を確認済み
  • test/ が ./schema を参照していないことを grep で確認済み (参照は src/Lib.hs:82 のみ)
  • Haskell / Bazel はこの作業環境では検証不可 (haskell.org・releases.bazel.build ともに egress ポリシーでブロック) のため、最終確認はこの PR の CI で行います

🤖 Generated with Claude Code

https://claude.ai/code/session_01P8rZakwAiz1jpViUX34x1Z

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
@kogai kogai mentioned this pull request Sep 13, 2026
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
@kogai kogai changed the title Bump deprecated GitHub Actions in the test workflow Make CI runnable again: bump deprecated actions and decouple make test from the schema download Sep 13, 2026

kogai commented Sep 13, 2026

Copy link
Copy Markdown
Owner Author

レビュー: 要修正 (changes needed)

Actions のバンプ (1 つ目のコミット) は妥当で、haskell-actions/setup@v2 が stack-path を保っていることも確認できました。問題は 2 つ目のコミットです。「テストは fixtures/*.xsd しか読まず ./schema を参照しない」という前提が 成り立っていません。fixtures/test_mixed_html.xsd が <xs:include schemaLocation="../schema/v2/ONIX_XHTML_Subset.xsd" /> を持っていて、Xsd.getSchema は include を再帰的に辿ってこのファイルを実際に開きます。/schema は .gitignore 済みなので、クリーンチェックアウト (= CI) には存在せず、make test は例外で落ちます。つまりこの変更は、schema ダウンロードの失敗を「fixture の include 解決失敗」に置き換えるだけになる可能性が高いです。ADR-0002 は耐久的な記録として残るものなので、この事実誤認をそのまま残すのは特に避けたいところです。Actions のバンプ (dd4ae6c) だけ切り出して先にマージするのが安全だと思います。


必須

1. make test から schema 依存を外すとテストが落ちる — 前提が成立していない

  • ファイル: Makefile:15-21、fixtures/test_mixed_html.xsd:3
  • 何が問題か:
    • fixtures/test_mixed_html.xsd:3 に <xs:include schemaLocation="../schema/v2/ONIX_XHTML_Subset.xsd" /> があります。
    • これを読むのは test/TestMixed.hs:18 と test/TestModel.hs:202 の getSchema "./fixtures/test_mixed_html.xsd" の 2 箇所。test/Spec.hs:18 は M.tests ++ P.tests ++ C.tests ++ Mi.tests を全部走らせるので、どちらも実行対象です。
    • src/Xsd.hs:70-93 の go / goInclude は include を再帰的に辿り、combineURIs (src/Xsd.hs:107-112) がローカル相対パスとして ./fixtures/../schema/v2/ONIX_XHTML_Subset.xsd に解決します。
    • fetchXsd (src/Xsd.hs:131-139) → parseFile (src/Xsd/Parser.hs:536-539) は Text.XML.readFile をそのまま呼ぶので、ファイルが無ければ Left ではなく IOException。HUnit がこれを error として数え、test/Spec.hs:20-22 が exitFailure します。
    • .gitignore に /schema があるため、クリーンチェックアウトにこのファイルは存在しません。schema/v2/ONIX_XHTML_Subset.xsd は BUILD.bazel の onix2p1 filegroup 経由で make schema が作るものです。
    • 履歴的にも裏が取れます。git show 9352123 (Prepare to build v3 (#19)) は、リポジトリに置いてあった 2_1_rev03_schema/ を削除して fixture の include 先を ../2_1_rev03_schema/... から ../schema/v2/... に書き換えたのと 同じコミット で test: schema を追加しています。この依存は「過剰指定」ではなく、この fixture のために意図的に足されたものです。
  • 直し方 (どちらか):
    • (a) 前提のほうを本当に成立させる: ONIX_XHTML_Subset.xsd のうちテストが必要とする分だけを最小の XSD として fixtures/ に置き (既存の *_codelists.xsd を隣に置く慣習と同じ形)、fixtures/test_mixed_html.xsd:3 の include をその隣のファイルに向ける。EDItEUR 配布物の再配布を避けたいなら、h1/div/… の宣言だけを自作した最小ファイルで十分なはずです。これなら「テストは fixtures だけで完結する」が事実になり、ADR-0002 の主張もそのまま正しくなります。
    • (b) それが重いなら test: schema を戻し、ADR-0002 を「テストは schema に依存している。切り離すには fixture の include を先に外す必要がある」という内容に書き換える。
    • いずれにせよ、schema/ が無い状態で make test を実際に流して緑になることを確認してからマージしてください。

2. ADR-0002 の中心的な記述が事実と異なる

  • ファイル: docs/adr/0002-decouple-unit-tests-from-the-vendored-schema.md (背景・理由の各節)
  • 何が問題か: 「テストコードはそもそも schema/ を読んでいない」「test/ 配下が読むのは fixtures/test_*.xsd だけで、./schema を参照するのは src/Lib.hs の schemaRoot (コード生成の実行時パス) のみ」「依存として書かれていたのは事実の反映ではなく、単なる過剰指定だった」は、上記 1 の理由でいずれも誤りです。./schema の参照は src/Lib.hs:82 だけでなく fixtures/test_mixed_html.xsd:3 にもあります。
  • なぜ重要か: ADR は「後から来た人が判断の前提を再構成するための durable な記録」として導入するもの (ADR-0001 の主張そのもの) なので、最初の実質的な ADR に事実誤認が入るとその目的を裏切ります。
  • 直し方: 1 の (a)/(b) どちらを採るかに合わせて背景・理由・結果を書き直す。特に「なぜ 2021 年にこの依存が足されたのか」(9352123 の経緯) を書いておくと、同じ調査が繰り返されずに済みます。

推奨

3. ADR-0001 が「決定」した内容がこの PR で実施されていない

  • ファイル: docs/adr/0001-record-architecture-decisions.md 決定節、docs/adr/README.md
  • 「AGENTS.md には、どういう判断を ADR にすべきかの基準を書き、両者を相互に参照させる」と書かれていますが、この PR は AGENTS.md に何も足していません (AGENTS.md 自体が別 PR Add AGENTS.md #55 で main には未マージ)。docs/adr/README.md の「このリポジトリの価値 (AGENTS.md 参照)」も、Add AGENTS.md #55 が入らない限りダングリング参照になります。
  • 直し方: Add AGENTS.md #55 を先にマージする前提を PR 本文に明記したうえで、AGENTS.md 側に ADR への参照節を足す (この PR か Add AGENTS.md #55 のどちらかで)。あるいは ADR-0001 の決定節を現状に合わせて書き分ける。

4. #55 の AGENTS.md との記述の食い違い

  • origin/claude/agents-md-onix-support-c9y6cu:AGENTS.md のコマンド一覧に make test # schema + stack test (HUnit) とあります。仮に 1 を (a) で解決して test から schema 依存を外すなら、この行も直す必要があります。2 つの PR のどちらかで揃えてください。

5. v4 系は「非推奨解消」になりきっていない / renovate PR と衝突する

任意

6. デバッグの残骸 — .github/workflows/test.yml:24 の - run: ls -lah ${{steps.haskell-setup.outputs.stack-path}}。実ログでは /opt/hostedtoolcache/stack/2.5.1/x64 の中身 (60MB の stack バイナリ) を出しているだけです。消してよいと思います。

7. cache の path に stack-path を入れる意味が薄い — .github/workflows/test.yml:19。stack-path は v1/v2 とも「stack 実行ファイルのディレクトリ」の定義で、実測でも setup が毎回入れ直す tool cache に解決されます。stack のビルドキャッシュを狙うなら ~/.stack (= stack-root 出力) で、それは既に path に入っています。この行は削ってよいです。

8. restore-keys が緩い — .github/workflows/test.yml:23 の restore-keys: ${{ runner.os }}- は、GHC/stack のバージョンが違う .stack-work も復元しえます。key に ghc-version / stack-version を含めると事故が減ります (既存の問題)。

9. node-version: 12.x — Node 12 は EOL ですが、今回のランで e2e ジョブは成功しているので今すぐ壊れてはいません (検証済み)。renovate/node-14.x ブランチもあるので追随は別 PR で。ついでに setup-node@v4 は cache: 'npm' を持つので、~/.npm を手で cache するステップは不要になります。

10. ADR-0002 の引用の精度 — 引用されている WARNING 行は実ログの短縮版です (実際は failed: class com.google.devtools.build.lib.bazel.repository.downloader.UnrecoverableHttpException GET returned 202 Accepted)。省略を示す … があると親切です。make: *** [Makefile:35: schema/v2] Error 1 は変更前の行番号としては正しいですが、この PR 適用後は 39 行目になります (当時の記録としてはそのままで問題なし)。また「202 を返す bot 対策」は推測で、裏が取れていません (下記参照)。「原因は不明だが 202 が返る」と書くほうが ADR として正確です。


検証したことと、その方法

検証できたこと

  • grep -rnoE '"\./[^"]*"' test/ → test/ 内の直接のパスリテラルは全 32 件すべて ./fixtures/*.xsd。「テストが直接開くのは fixtures だけ」という部分は正しい。
  • grep -rn "schemaLocation" fixtures/ → include を持つ fixture は 6 件。うち 5 件は隣の *_codelists.xsd だが、fixtures/test_mixed_html.xsd:3 だけが ../schema/v2/ONIX_XHTML_Subset.xsd を指す。これが反例。
  • src/Xsd.hs の getSchema / goInclude / combineURIs / fetchXsd と src/Xsd/Parser.hs:536-539 の parseFile を読み、include が再帰的に fetch されること、ローカル相対で解決されること、ファイル欠損が (Left ではなく) 例外になることを確認。
  • grep -rn "\./schema" --exclude-dir=.git . → src/Lib.hs:82 と fixtures/test_mixed_html.xsd:3 の 2 箇所。
  • git show 9352123 → test: schema の追加と fixture の include 先変更が同一コミット。git blame -L 14,18 origin/main -- Makefile でも同コミットを確認。
  • Makefile の依存グラフ (build: schema .stack-work / generated/{go,ts}/%: build / debug: build / WORKSPACE: go.mod / schema: schema/v2 schema/v3) を確認。test が schema を作る副作用に依存しているターゲットは他に無いので、今回の変更で影響を受けるのは test だけ (これは PR の言うとおり)。
  • curl https://raw.githubusercontent.com/haskell-actions/setup/v2/action.yml と v1 の同ファイルを比較 → stack-path は v1/v2 で The path of the stack executable _directory_ という同じ定義のまま存在。「v2 でも stack-path は生きている」という主張は正しい。 実ラン (run 34743704512) でも cache ステップに path: /opt/hostedtoolcache/stack/2.5.1/x64 として展開され、ステップは success。
  • run 34743704512 のジョブログで、ADR-0002 が引用する 202 エラーと make: *** [Makefile:35: schema/v2] Error 1 が実在することを確認 (引用は正確、上記 任意-10 の短縮を除く)。
  • 同ランで e2e ジョブ (checkout@v4 + setup-node@v4 + node 12.x + cache@v4) は success。Actions のバンプ自体は動く。
  • git diff --stat origin/main...origin/claude/bump-deprecated-github-actions → 変更は .github/workflows/test.yml、Makefile、docs/adr/* のみ。src/、template/、generated/、fixtures/20201200.json に差分なし。生成コードの後方互換性への影響なし。

検証できなかったこと

  • この環境に stack / GHC が無いため、make test をローカルで実行して 必須-1 を実測することはできていません。上記は静的解析 (grep + src/Xsd.hs の読解) とコミット履歴からの結論です。
  • editeur.org は egress ポリシーでブロックされているため、202 の原因 (bot 対策かどうか) は確認できていません。

Generated by Claude Code

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

kogai commented Sep 13, 2026

Copy link
Copy Markdown
Owner Author

レビューありがとうございます。必須の 2 件はご指摘のとおりで、こちらの誤りでした。 修正を 5af27c0 で push しました。

必須 1・2: fixtures/test_mixed_html.xsd の include

確認しました。

$ grep -rn 'schemaLocation' fixtures/*.xsd
fixtures/test_mixed_html.xsd:3:  <xs:include schemaLocation="../schema/v2/ONIX_XHTML_Subset.xsd" />
$ grep -rn 'test_mixed_html' test/*.hs
test/TestMixed.hs:18:          scm <- getSchema "./fixtures/test_mixed_html.xsd"
test/TestModel.hs:202:          scm <- getSchema "./fixtures/test_mixed_html.xsd"

Xsd.getSchema が include を再帰的にたどる以上、これは本物の依存でした。当方の grep は .hs 内の "./schema" という文字列しか見ておらず、フィクスチャ経由の間接参照を見落としていました。9352123 が「2_1_rev03_schema/ の削除」と「test: schema の追加」を同一コミットで行っているという指摘も確認しました。意図的な依存でした。

修正方針: 依存を消すのではなく、依存先をリポジトリ内に移す

test: schema を復活させる案も筋は通りますが、XSD 1 ファイルのためにテスト全体を外部サービスに縛り続けることになります。代わりに fixtures/test_mixed_html_xhtml_subset.xsd を追加し、include をそちらに向けました。

重要なのはテストの意味を保つことです。TestModel.hs:202 の collectElements == [] は、complexMixed = False の要素だけを拾うフィルタに対する表明なので、意味は「XHTML 要素がモデルに漏れてこない」ことです。したがって代替物でも全要素を <xs:complexType mixed="true" /> として宣言しました。フィクスチャ側の ref 40 個すべてに宣言が対応することは機械的に確認しています(refs: 40 declared: 40 / missing: none / extra: none)。

include を単に削除する案は採りませんでした。Annotation 以外に要素が無くなるので表明は通ってしまいますが、何も検証しなくなるためです。

代替物は EDItEUR の配布物をコピーしたのではなく自前で書いたので、ADR-0003 で保留している再配布の判断には触れません。

ADR-0002 は、誤った前提のまま残すと後から読む人を騙すので、全面的に書き直しました。「依存は本物だった」ことと、なぜ代替物で足りるのかを明記しています。

推奨・任意の各件

  • ADR-0001 の AGENTS.md 相互参照、および Add AGENTS.md #55 の make test # schema + stack test の記述: ご指摘のとおりです。AGENTS.md 側は Add AGENTS.md #55 で直します(この PR に AGENTS.md は含まれないため)。
  • renovate PR Update actions/checkout action to v7 #52/Update actions/cache action to v6 #53/Update actions/setup-node action to v7 #54 との衝突: 確認して、必要なら整理します。
  • ls -lah のデバッグステップ、stack-path のキャッシュ、緩い restore-keys、EOL の Node 12.x: いずれも妥当です。ただし今この push で CI が「フィクスチャ修正で実際に緑になるか」を検証中なので、結果を確認してから別途まとめて対応します。Node 12.x はツールチェーン更新の PR で扱います。
  • ADR-0002 のログ引用の省略と「bot 対策」という推測: 書き直しの際、原因の推測は ADR-0003 側に寄せ、この ADR では観測事実のみに留めました。

未検証: こちらも stack / GHC がこの環境に無く(haskell.org が egress ポリシーでブロック)、テストをローカル実行できていません。代替物が実際に期待どおり振る舞うかは、この PR の CI が唯一の検証手段です。赤が出たら追って直します。


Generated by Claude Code

kogai pushed a commit that referenced this pull request Sep 13, 2026
Keeps this stacked branch's CI running the corrected test suite.

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
kogai pushed a commit that referenced this pull request Sep 13, 2026
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P8rZakwAiz1jpViUX34x1Z
kogai pushed a commit that referenced this pull request Sep 13, 2026
Both jobs on this branch die before running anything, on the
actions/cache@v2 deprecation that #56 fixes. #56 is green, so port it
here rather than wait for it to merge.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P8rZakwAiz1jpViUX34x1Z
* Add AGENTS.md describing repository values and workflows

Document the two things this repository exists for: following the ONIX
spec while keeping backward compatibility, and growing the set of target
languages through code generation.

Covers the schema -> XSD parser -> intermediate representation -> mustache
pipeline, the make/bazel commands, how to bump an EDItEUR schema release,
a step-by-step procedure for adding a new target language, the fixture-
driven test convention, and which paths are generated and must not be
hand-edited.

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

* Align AGENTS.md with the CI and ADR changes

`make test` no longer depends on the schema download, so the command
table said something that is about to stop being true. Also point at
ADR-0003 where `make schema` is described, since that is the command
that is currently broken.

Add the rule that came out of getting this wrong once: a fixture must not
include anything outside fixtures/. Xsd.getSchema follows xs:include
recursively, so a single `../schema/` reference puts the whole suite back
on editeur.org's availability, which is exactly what test_mixed_html.xsd
did.

Add a section on recording design decisions as ADRs, with the criteria
for what warrants one, so the reference from docs/adr/README.md is
reciprocated.

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

---------

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
@kogai
kogai merged commit 372f7d3 into main Sep 13, 2026
2 checks passed
@kogai
kogai deleted the claude/bump-deprecated-github-actions branch September 13, 2026 10:36
kogai pushed a commit that referenced this pull request Sep 13, 2026
Both .gitignore additions are kept: node_modules/ from the npm work on
main, /third_party/distdir/ from this branch's ADR.

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