Skip to content

feat: 新規マシンでも nix-darwin セットアップが通るようにする - #1004

Merged
keito4 merged 5 commits into
mainfrom
feat/multi-host-nix-bootstrap
Jul 23, 2026
Merged

feat: 新規マシンでも nix-darwin セットアップが通るようにする#1004
keito4 merged 5 commits into
mainfrom
feat/multi-host-nix-bootstrap

Conversation

@keito4

@keito4 keito4 commented Jul 23, 2026

Copy link
Copy Markdown
Owner

Summary

新規マシン(別ユーザー名・別ホスト名・Determinate Nix・Homebrew 6+)で darwin-rebuild switch が最後まで通らない問題を解消する。oykotnoMacBook-Air での初回セットアップで実際に踏んだ失敗を一つずつ潰し、再発防止として nix 設定の CI 検証とセットアップガイドを追加した。

Why

flake が keito / keitonoMacBook-Pro 固定で新規マシンに適用できず、さらに以下の環境差分で activation が失敗するため:

  1. Determinate Nix が nix-darwin の Nix 管理と衝突(error: Determinate detected, aborting activation
  2. Homebrew 6+ が untrusted tap の formula 読み込みを拒否(brew bundle 失敗)
  3. gcloud-cli cask の postinstall が virtualenv コマンドを要求して失敗
  4. brew bash 未導入だと typeset -g を使うスクリプト(setup-claude.sh 等)が macOS 標準 bash 3.2 で動かない
  5. 初回 activation で enforceKanaryCapsControl がリンク生成前に実行され失敗
  6. ~/.local/bin(claude / codex のネイティブインストール先)が PATH に無い

また、nix ファイルは文字列ベースの jest テストしかなく、構成の破損を CI で検出できなかった。

What

  • flake をマルチホスト対応にし、mkDarwin ヘルパーで username / hostname をパラメータ化(oykotnoMacBook-Air を追加)
  • determinateNix オプションを追加し、有効時は nix.enable = false(既存ホストは従来どおり nix-darwin が Nix を管理)
  • preActivation で primaryUser として宣言済み tap を brew trust(brew trust 未対応の旧 Homebrew ではスキップ)
  • gcloud-cli cask を nixpkgs の google-cloud-sdk に置き換え
  • bash を brews に追加
  • enforceKanaryCapsControl を linkGeneration の後に実行
  • ~/.local/bin を PATH に追加(path.zsh)
  • /Users/keito 固定パス(skhd・agent-deck launchd・dotfiles の private-config 参照)を username 変数化
  • CI: Nix Config Eval ジョブを追加 — 両ホストの darwinConfigurations を Linux ランナーで評価検証し、Quality Gate に組み込み
  • docs/setup/macos.md を追加 — 実機検証済みの新規 Mac セットアップ手順(トラブルシューティング付き)
  • テストの期待値をパラメータ化後の記述に追従

How to test

  • nix eval .#darwinConfigurations.oykotnoMacBook-Air.system.drvPath / keitonoMacBook-Pro 両方成功
  • npx jest --runInBand 779 件全パス(brew bash 導入後)
  • oykotnoMacBook-Air(新規 MacBook Air, Determinate Nix)で switch 完走・brew bundle 60 件・home-manager activation 成功を実機確認
  • CI の Nix Config Eval ジョブが両ホストの評価に成功すること(本 PR で初回実行)
  • keitonoMacBook-Pro で make nix-switch が従来どおり通ること

Checklist

  • セルフレビュー済み
  • テストを追加・更新した(該当する場合)
  • ドキュメントを更新した(docs/setup/macos.md、README、AGENTS.md 自動生成セクション)
  • 破壊的変更がない(ある場合は詳細を記述)

Related

  • ADR 0016(Kanary は引き続き手動インストール前提)

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features

    • Added macOS setup guide for provisioning a new Apple Silicon machine.
    • Introduced host-specific macOS/Nix configuration generation with optional Determinate Nix behavior.
    • Added Google Cloud SDK to the Home environment.
    • Added automatic Homebrew tap trust during setup.
    • CI now evaluates Nix configuration changes via a dedicated Nix evaluation step.
  • Improvements

    • Made user-specific paths and settings fully dynamic for each configured username.
    • Updated shortcut/agent log locations and PATH behavior to use the active user home.
    • Adjusted IME-related tests and re-ordered Kanary activation for reliable first-run behavior.
    • Refreshed contributor docs and settings for better automation/readability.

- flake をマルチホスト対応にし、mkDarwin ヘルパーで username /
  hostname をパラメータ化(oykotnoMacBook-Air を追加)
- Determinate Nix 環境向けに determinateNix オプションを追加し、
  nix-darwin の Nix 管理と衝突しないよう nix.enable = false を設定
- Homebrew 6+ の untrusted tap 拒否対策として、activation 前に
  primaryUser で brew trust を実行
- gcloud-cli cask を nixpkgs の google-cloud-sdk に置き換え
  (cask の postinstall が virtualenv コマンドを要求し新規マシンで失敗するため)
- bash 4+ を brews に追加(setup-claude.sh と typeset -g を使うスクリプトが必要)
- /Users/keito 固定だったパス(skhd・agent-deck・dotfiles)を username 変数化

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@cursor

cursor Bot commented Jul 23, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@coderabbitai

coderabbitai Bot commented Jul 23, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

Darwin configurations now support multiple usernames and optional Determinate Nix management. Home Manager paths, host services, IME shortcuts, Homebrew tap trust, Google Cloud tooling, CI evaluation, macOS setup documentation, and repository tooling metadata are updated.

Changes

Darwin configuration and macOS setup

Layer / File(s) Summary
Configuration and home-directory wiring
nix/flake.nix, nix/home/default.nix, nix/home/dotfiles.nix
Named Darwin configurations pass username and determinateNix through nix-darwin and Home Manager, which derive user-specific home and dotfile paths.
Darwin host behavior
nix/hosts/darwin/default.nix, test/nix-darwin-config.test.js
Nix management is conditional on determinateNix; primary-user settings, IME commands, launchd paths, and test assertions use the configured username.
Homebrew, packages, and activation
nix/modules/homebrew.nix, nix/home/packages.nix, nix/home/kanary.nix
Homebrew taps are trusted during activation, the gcloud cask is replaced by google-cloud-sdk, and Kanary enforcement runs after link generation.
CI validation and setup guide
.github/workflows/ci.yml, README.md, docs/setup/README.md, docs/setup/macos.md, .zsh/configs/pre/path.zsh
Nix changes trigger Darwin configuration evaluation in CI, macOS setup documentation is linked, and ~/.local/bin is prepended to PATH.

Repository tooling metadata

Layer / File(s) Summary
Plugin and validation guidance
.claude/settings.json, AGENTS.md
A Claude marketplace and plugin are registered, and repository path and shellcheck guidance is updated.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Flake
  participant NixDarwin
  participant HomeManager
  Flake->>NixDarwin: Create named Darwin configuration
  NixDarwin->>NixDarwin: Apply username and determinateNix
  NixDarwin->>HomeManager: Pass configRoot and username
  HomeManager->>HomeManager: Configure user home and managed paths
Loading

Possibly related PRs

  • keito4/config#612: Both changes modify the Nix flake, Home Manager, and Darwin host parameterization.
  • keito4/config#897: Both changes update Home Manager argument and dotfile path plumbing.
  • keito4/config#939: Both changes modify Darwin IME shortcut paths and related tests.

Suggested reviewers: bhanuprasad14

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title clearly summarizes the main change: making nix-darwin setup work on new machines.
Description check ✅ Passed The description matches the template well and covers Summary, Why, What, How to test, Checklist, and Related.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/multi-host-nix-bootstrap

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@claude

claude Bot commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

Claude encountered an error after 3m 3s —— View job


I'll analyze this and get back to you.

@keito4 keito4 self-assigned this Jul 23, 2026

@coderabbitai coderabbitai Bot 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.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@nix/modules/homebrew.nix`:
- Around line 19-23: Remove the `|| true` failure suppression from the `brew
trust` command generated by `system.activationScripts.preActivation.text`.
Ensure each required tap trust failure causes activation to exit nonzero, while
preserving the existing user, Homebrew path, and tap iteration behavior.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 72df67ab-1a29-43cd-ae23-a51564000ab6

📥 Commits

Reviewing files that changed from the base of the PR and between 094ce48 and cdb2243.

📒 Files selected for processing (7)
  • nix/flake.nix
  • nix/home/default.nix
  • nix/home/dotfiles.nix
  • nix/home/packages.nix
  • nix/hosts/darwin/default.nix
  • nix/modules/homebrew.nix
  • test/nix-darwin-config.test.js

Comment thread nix/modules/homebrew.nix
Comment on lines +19 to +23
system.activationScripts.preActivation.text = ''
if [ -x /opt/homebrew/bin/brew ] && sudo -u ${config.system.primaryUser} -H /opt/homebrew/bin/brew trust --help >/dev/null 2>&1; then
${lib.concatMapStringsSep "\n " (
tap: ''sudo -u ${config.system.primaryUser} -H /opt/homebrew/bin/brew trust "${tap}" || true''
) taps}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🩺 Stability & Availability | 🟠 Major | ⚡ Quick win

Do not suppress tap-trust failures.

Line 22 masks every brew trust error even though Lines 16-18 identify trust as required before Homebrew activation. This can still make darwin-rebuild switch fail later, while hiding the actionable cause. Let the activation fail, or collect failed taps and exit nonzero.

Proposed fix
-        tap: ''sudo -u ${config.system.primaryUser} -H /opt/homebrew/bin/brew trust "${tap}" || true''
+        tap: ''sudo -u ${config.system.primaryUser} -H /opt/homebrew/bin/brew trust "${tap}"''
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
system.activationScripts.preActivation.text = ''
if [ -x /opt/homebrew/bin/brew ] && sudo -u ${config.system.primaryUser} -H /opt/homebrew/bin/brew trust --help >/dev/null 2>&1; then
${lib.concatMapStringsSep "\n " (
tap: ''sudo -u ${config.system.primaryUser} -H /opt/homebrew/bin/brew trust "${tap}" || true''
) taps}
system.activationScripts.preActivation.text = ''
if [ -x /opt/homebrew/bin/brew ] && sudo -u ${config.system.primaryUser} -H /opt/homebrew/bin/brew trust --help >/dev/null 2>&1; then
${lib.concatMapStringsSep "\n " (
tap: ''sudo -u ${config.system.primaryUser} -H /opt/homebrew/bin/brew trust "${tap}"''
) taps}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@nix/modules/homebrew.nix` around lines 19 - 23, Remove the `|| true` failure
suppression from the `brew trust` command generated by
`system.activationScripts.preActivation.text`. Ensure each required tap trust
failure causes activation to exit nonzero, while preserving the existing user,
Homebrew path, and tap iteration behavior.

@chatgpt-codex-connector chatgpt-codex-connector Bot 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: cdb2243a82

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread nix/flake.nix
Comment on lines +65 to +68
"oykotnoMacBook-Air" = mkDarwin {
hostname = "oykotnoMacBook-Air";
username = "oykot";
determinateNix = true;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Add an ADR for the new Darwin host model

This adds a second Darwin configuration with a Determinate Nix mode, which is a non-trivial architecture change to the macOS environment. I searched docs/adr and found no ADR covering the multi-host/Determinate decision, so future agents and reviewers will not have the context the repository requires before implementation; please add an ADR with the context, decision, and consequences.

Useful? React with 👍 / 👎.

keito4 and others added 4 commits July 23, 2026 14:19
初回 activation ではリンク生成前に helper を呼ぶため
~/.local/bin/kanary-enforce-caps-control が存在せずエラーになる

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
claude / codex のネイティブインストーラーが ~/.local/bin に
バイナリを配置するため、新規マシンでも PATH が通るようにする

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- CI に Nix Config Eval ジョブを追加し、両ホストの
  darwinConfigurations を Linux ランナーで評価検証する
  (これまで nix ファイルは文字列ベースの jest テストのみで
  構成の破損を検出できなかった)
- nix 変更が CI をトリガーするよう paths / changes フィルタに追加
- Quality Gate に Nix Config Eval を組み込み
- 実機で検証した手順を docs/setup/macos.md として文書化
  (Homebrew → Nix → App Store / Kanary → flake ホスト追加 →
  初回 switch → Claude/credentials、トラブルシューティング付き)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

@coderabbitai coderabbitai Bot 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.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/ci.yml:
- Around line 269-291: Update the checkout step in the nix-eval job to set
persist-credentials to false, while preserving the existing pinned
actions/checkout reference and all other evaluation steps.

In `@AGENTS.md`:
- Around line 152-157: Escape the pipe character in the shellcheck command
within the scripts table as \| so Markdown keeps the command in one column,
while preserving the existing *.sh glob and command behavior.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: cf0687c7-2c3b-4d74-b2e2-f0136e1f3aab

📥 Commits

Reviewing files that changed from the base of the PR and between cdb2243 and a577c60.

📒 Files selected for processing (8)
  • .claude/settings.json
  • .github/workflows/ci.yml
  • .zsh/configs/pre/path.zsh
  • AGENTS.md
  • README.md
  • docs/setup/README.md
  • docs/setup/macos.md
  • nix/home/kanary.nix

Comment thread .github/workflows/ci.yml
Comment on lines +269 to +291
nix-eval:
name: Nix Config Eval
runs-on: ubuntu-latest
timeout-minutes: 15
needs: changes
if: needs.changes.outputs.nix == 'true'
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0

- name: Install Nix
uses: DeterminateSystems/nix-installer-action@ef8a148080ab6020fd15196c2084a2eea5ff2d25 # v22

# 評価はプラットフォーム非依存なので Linux ランナーで aarch64-darwin の
# darwinConfigurations を検証できる(ビルドはしない)
- name: Evaluate darwin configurations
working-directory: nix
run: |
for host in keitonoMacBook-Pro oykotnoMacBook-Air; do
echo "Evaluating darwinConfigurations.${host}..."
nix eval --raw ".#darwinConfigurations.\"${host}\".system.drvPath"
echo
done

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

echo "== workflow excerpt =="
sed -n '240,305p' .github/workflows/ci.yml 2>/dev/null || true

echo
echo "== checkout usages in ci.yml =="
rg -n "actions/checkout|persist-credentials|evaluate|nix eval|darwinConfigurations|secrets|GITHUB_TOKEN|token" .github/workflows/ci.yml || true

echo
echo "== changed workflow diff stat =="
git diff --stat .github/workflows/ci.yml || true
git diff -- .github/workflows/ci.yml | sed -n '1,260p' || true

Repository: keito4/config

Length of output: 3622


🌐 Web query:

actions/checkout persist-credentials default true README

💡 Result:

In the actions/checkout GitHub Action, the persist-credentials parameter is a configuration option that determines whether the authentication token or SSH key used to check out the repository is persisted in the local git configuration [1][2][3]. Key details include: - Default Value: The default is true [1][2][3]. - Purpose: When set to true, it enables subsequent steps in your workflow to run authenticated git commands (e.g., git push, git fetch) without needing to manually re-configure authentication [1][3][4]. - Security Implementation: The credentials are removed during the post-job cleanup [1][3][5]. As of version v6.0.0, the action was updated to store these credentials in a separate file under the $RUNNER_TEMP directory rather than directly in the local.git/config file, improving security by reducing potential exposure [6][7]. - Opt-out: You can explicitly set persist-credentials: false in your workflow step if you do not want the credentials to be persisted [1][3][4]. While this setting has been the subject of long-standing security discussions regarding the exposure of tokens to other steps in a job, it remains the default behavior to support common automation workflows [8][9]. Users are generally advised to follow the principle of least privilege by setting appropriate repository permissions for the GITHUB_TOKEN used in their workflows [9].

Citations:


Disable credential persistence for the checkout used by Nix evaluation.

actions/checkout persists the GitHub token by default, and this job then evaluates PR-controlled Nix darwinConfigurations. Add persist-credentials: false to this checkout step.

Proposed fix
       - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
+        with:
+          persist-credentials: false
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
nix-eval:
name: Nix Config Eval
runs-on: ubuntu-latest
timeout-minutes: 15
needs: changes
if: needs.changes.outputs.nix == 'true'
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Install Nix
uses: DeterminateSystems/nix-installer-action@ef8a148080ab6020fd15196c2084a2eea5ff2d25 # v22
# 評価はプラットフォーム非依存なので Linux ランナーで aarch64-darwin の
# darwinConfigurations を検証できる(ビルドはしない)
- name: Evaluate darwin configurations
working-directory: nix
run: |
for host in keitonoMacBook-Pro oykotnoMacBook-Air; do
echo "Evaluating darwinConfigurations.${host}..."
nix eval --raw ".#darwinConfigurations.\"${host}\".system.drvPath"
echo
done
nix-eval:
name: Nix Config Eval
runs-on: ubuntu-latest
timeout-minutes: 15
needs: changes
if: needs.changes.outputs.nix == 'true'
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
persist-credentials: false
- name: Install Nix
uses: DeterminateSystems/nix-installer-action@ef8a148080ab6020fd15196c2084a2eea5ff2d25 # v22
# 評価はプラットフォーム非依存なので Linux ランナーで aarch64-darwin の
# darwinConfigurations を検証できる(ビルドはしない)
- name: Evaluate darwin configurations
working-directory: nix
run: |
for host in keitonoMacBook-Pro oykotnoMacBook-Air; do
echo "Evaluating darwinConfigurations.${host}..."
nix eval --raw ".#darwinConfigurations.\"${host}\".system.drvPath"
echo
done
🧰 Tools
🪛 zizmor (1.26.1)

[warning] 276-276: credential persistence through GitHub Actions artifacts (artipacked): does not set persist-credentials: false

(artipacked)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/ci.yml around lines 269 - 291, Update the checkout step in
the nix-eval job to set persist-credentials to false, while preserving the
existing pinned actions/checkout reference and all other evaluation steps.

Source: Linters/SAST tools

Comment thread AGENTS.md
Comment on lines +152 to +157
| Script | Command | Purpose |
| ----------------------------------------------------------------------------------------------------------------------- | --------------------------------- | -------------------------- |
| `format:check` | `prettier --check .` | Code formatting validation |
| `lint` | `eslint . --ext .js` | Code quality validation |
| `test` | `jest --runInBand` | Unit test execution |
| `shellcheck` | `find script -name '*.sh' -type f | xargs -r shellcheck -x` | Shell script validation |

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Escape the pipe in the shellcheck command.

The | in Line 157 creates a fourth Markdown table column, so the documented command is rendered incorrectly. Escape it as \| while preserving the corrected *.sh glob.

Proposed fix
-| `shellcheck` | `find script -name '*.sh' -type f | xargs -r shellcheck -x` | Shell script validation |
+| `shellcheck` | `find script -name '*.sh' -type f \| xargs -r shellcheck -x` | Shell script validation |
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
| Script | Command | Purpose |
| ----------------------------------------------------------------------------------------------------------------------- | --------------------------------- | -------------------------- |
| `format:check` | `prettier --check .` | Code formatting validation |
| `lint` | `eslint . --ext .js` | Code quality validation |
| `test` | `jest --runInBand` | Unit test execution |
| `shellcheck` | `find script -name '*.sh' -type f | xargs -r shellcheck -x` | Shell script validation |
| Script | Command | Purpose |
| ----------------------------------------------------------------------------------------------------------------------- | --------------------------------- | -------------------------- |
| `format:check` | `prettier --check .` | Code formatting validation |
| `lint` | `eslint . --ext .js` | Code quality validation |
| `test` | `jest --runInBand` | Unit test execution |
| `shellcheck` | `find script -name '*.sh' -type f \| xargs -r shellcheck -x` | Shell script validation |
🧰 Tools
🪛 markdownlint-cli2 (0.23.0)

[warning] 157-157: Table column count
Expected: 3; Actual: 4; Too many cells, extra data will be missing

(MD056, table-column-count)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@AGENTS.md` around lines 152 - 157, Escape the pipe character in the
shellcheck command within the scripts table as \| so Markdown keeps the command
in one column, while preserving the existing *.sh glob and command behavior.

Source: Linters/SAST tools

@keito4
keito4 merged commit 30cfda6 into main Jul 23, 2026
21 checks passed
@keito4
keito4 deleted the feat/multi-host-nix-bootstrap branch July 23, 2026 06:34
@github-actions

Copy link
Copy Markdown
Contributor

🎉 This PR is included in version 1.127.0 🎉

The release is available on GitHub release

Your semantic-release bot 📦🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

released リリース済み

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant