Skip to content

feat: support dependency containers and a shared network for wip up - #13

Merged
abechan1 merged 2 commits into
mainfrom
feat/wip-dependencies
Jul 31, 2026
Merged

feat: support dependency containers and a shared network for wip up#13
abechan1 merged 2 commits into
mainfrom
feat/wip-dependencies

Conversation

@abechan1

@abechan1 abechan1 commented Jul 31, 2026

Copy link
Copy Markdown
Contributor

Summary

Investigated the report that wip rails c was still broken on slidict.io even with the interactive-TTY fix (#11) in place. Root cause turned out to be architectural, not a bug in the Ruby code:

  • wip.yml only ever describes one container (defaults). wip up had no way to start anything else.
  • slidict.io's config/database.yml connects to host: development.mysql, and compose.yml also depends on redis — both defined as separate Compose services on a shared bridge network with DNS aliases.
  • Since wip up only started app (no network, no mysql/redis), bin/rails c hung indefinitely trying to resolve development.mysql, which is exactly what I reproduced: multiple stuck bin/rails c processes piling up inside the container, and a direct TCP connect confirming there was nothing listening.

This is a real gap, not something fixable by tweaking CommandRunner/CommandBuilder — wip needed a way to model dependency containers.

Change

  • New defaults.network (optional) and top-level dependencies map in wip.yml:
    defaults:
      network: app-tier
    dependencies:
      redis:
        image: redis:latest
      development.mysql:
        image: mysql:8.0
        command: --default-authentication-plugin=mysql_native_password
        env:
          MYSQL_ROOT_PASSWORD: password
          MYSQL_DATABASE: development
  • wip up: creates the network first if it doesn't exist, then brings up each dependency (same quiet find → start-or-create flow already used for the main container), then starts the main container attached to that network — so it can resolve dependencies by name, mirroring Compose service DNS.
  • wip down: tears down the main container and all dependencies (network is left in place; shared infra, not owned by a single teardown).
  • CommandBuilder: network_create/network_list, dependency_up/dependency_start/dependency_find/dependency_down/dependency_remove.
  • Config: dependencies, dependency(name), network, with validation (must be a mapping, each entry needs image).

Verification

  • bundle exec rspec (38 examples, 0 failures) — added specs for Config#dependency/#network, all the new CommandBuilder methods, and a CLI spec asserting the full wip up command sequence (network list → network create → dependency find → dependency run → container find → container run).
  • bundle exec rubocop (no offenses)
  • Full real-world verification against wslc.exe with slidict.io: added network: slidict-app-tier + development.mysql/redis to its wip.yml, ran wip up -d, confirmed all three containers came up on the shared network, getent hosts development.mysql redis resolved from inside app, and a live TCP connect from app to development.mysql:3306 succeeded. (Reverted that wip.yml change afterward — it's the user's file to opt into.)

🤖 Generated with Claude Code

Summary by CodeRabbit

  • 新機能

    • ネットワーク設定に対応し、必要なネットワークを自動作成してコンテナを接続できるようになりました。
    • Redisなどの依存コンテナを、メインコンテナより先に起動・停止・削除できるようになりました。
    • 依存サービスのイメージ、環境変数、ポート、カスタムコマンドを設定できるようになりました。
    • 未定義の依存関係やイメージ不足を設定エラーとして通知します。
  • ドキュメント

    • 依存コンテナ、ネットワーク設定、およびupdownコマンドの利用方法を追加・更新しました。

`wip rails c` was reported broken again on slidict.io even after the
TTY fix; the actual cause turned out to be architectural: wip only
ever managed a single container, so `wip up` never started the
MySQL/Redis services that config/database.yml requires (host:
development.mysql), and `bin/rails c` hung forever trying to resolve
a hostname that didn't exist on any network. compose.yml already
models this via a bridge network + service names, but wip.yml had no
equivalent.

Add `defaults.network` and a `dependencies` map to wip.yml. `wip up`
now creates the network first (if missing), brings up each dependency
by name (reusing the same find/start-or-create flow as the main
container), then starts the main container attached to that network
so it can resolve dependencies by name — mirroring Compose service
resolution. `wip down` tears down the main container and all
dependencies (network is left in place).

Verified end-to-end against a real wslc.exe + slidict.io: created the
network, started development.mysql + redis + app together, confirmed
DNS resolution and a live TCP connection from app to
development.mysql:3306 across the shared network.

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

coderabbitai Bot commented Jul 31, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@abechan1, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 46 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 1c4ffddc-8314-4b30-b4c6-e2519ba841bf

📥 Commits

Reviewing files that changed from the base of the PR and between e18f816 and f6fa9b1.

📒 Files selected for processing (1)
  • lib/wip/version.rb
📝 Walkthrough

Walkthrough

defaults.networkdependencies の設定を追加しました。wip up はネットワークと依存コンテナを先に処理します。wip down は依存コンテナも停止・削除します。関連するコマンド生成、検証、RSpecテスト、READMEを更新しました。

Changes

依存コンテナとネットワーク対応

Layer / File(s) Summary
依存関係設定と検証
lib/wip/config.rb, spec/wip/config_spec.rb, README.md
networkdependencies を設定から取得します。依存コンテナの既定値を適用し、image と環境変数を検証します。設定例をREADMEに追加しました。
Dockerコマンド生成
lib/wip/command_builder.rb, spec/wip/command_builder_spec.rb
ネットワーク作成・一覧表示と、依存コンテナの起動・開始・検索・停止・削除コマンドを生成します。
CLIの起動・停止制御
lib/wip/cli.rb, spec/wip/cli_spec.rb, README.md
up はネットワーク、依存コンテナ、メインコンテナの順に処理します。down は依存コンテナも処理します。存在確認はJSON配列を扱う汎用処理に変更しました。

Estimated code review effort: 3 (Moderate) | ~20 minutes

Sequence Diagram(s)

sequenceDiagram
  participant CLI
  participant Config
  participant CommandBuilder
  participant Docker

  CLI->>Config: network と dependencies を取得
  CLI->>CommandBuilder: network_list を生成
  CLI->>Docker: ネットワーク一覧を取得
  CLI->>CommandBuilder: network_create を生成
  CLI->>Docker: ネットワークを作成
  CLI->>CommandBuilder: dependency_find を生成
  CLI->>Docker: 依存コンテナの存在を確認
  CLI->>CommandBuilder: dependency_up または dependency_start を生成
  CLI->>Docker: 依存コンテナを起動
  CLI->>CommandBuilder: up を生成
  CLI->>Docker: メインコンテナを起動
Loading

Possibly related PRs

  • slidict/wip#1: Wip::CLIWip::CommandBuilderWip::Configの同じ実装を拡張します。
  • slidict/wip#10: Wip::CommandBuilderWip::Configの設定およびコマンド生成を拡張します。
  • slidict/wip#11: コンテナ存在確認処理を依存コンテナとネットワークに拡張します。

Poem

うさぎはネットワークをぴょんと作る
Redisを先に巣へ招く
メインコンテナも後から到着
updown が順序を守る
新しい設定で巣は整う
ぴょん、テストも合格!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed タイトルは、依存コンテナと共有ネットワークをwip upに追加する主要な変更を明確かつ簡潔に示しています。
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.
✨ 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/wip-dependencies

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.

@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: 4

🤖 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 `@lib/wip/cli.rb`:
- Around line 154-157: 既存コンテナを開始する前に配置ネットワークへの接続を保証するよう、lib/wip/cli.rb の
ensure_dependency(154-157行)と ensure_container(164-169行)を更新してください。wslc container
inspect の NetworkSettings を確認し、未接続なら network connect または再作成を start
より先に実行してください。spec/wip/cli_spec.rb(63-110行)には、未接続の既存依存コンテナとメインコンテナで接続処理または再作成が最初に呼ばれるケースを追加してください。

In `@lib/wip/command_builder.rb`:
- Around line 77-79: Update dependency_start and the corresponding
main-container start flow so existing containers are connected to the configured
defaults.network after ensure_network runs. Reapply the network to both
containers, or recreate containers with the network option when their existing
network configuration is stale, while preserving normal start behavior.

In `@lib/wip/config.rb`:
- Around line 61-64: Update validate_dependencies! to reject any dependency name
that matches defaults.container before validating dependency entries, raising
the existing configuration error with a clear message. Add or update the
configuration specification to document that dependency names must not duplicate
defaults.container.
- Around line 51-52: 構成読み込み時の検証フロー(validate_commands! と validate_dependencies!
の呼び出し箇所)に defaults.network の検証を追加し、空文字列および空白のみの値を無効として ConfigError
を即時に報告してください。これにより無効なネットワーク値が wip up まで通過しないようにし、空文字列と空白文字列の構成例も追加してください。
🪄 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: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 69728743-23c2-4d73-80db-804989fd9322

📥 Commits

Reviewing files that changed from the base of the PR and between 3649588 and e18f816.

📒 Files selected for processing (7)
  • README.md
  • lib/wip/cli.rb
  • lib/wip/command_builder.rb
  • lib/wip/config.rb
  • spec/wip/cli_spec.rb
  • spec/wip/command_builder_spec.rb
  • spec/wip/config_spec.rb

Comment thread lib/wip/cli.rb
Comment on lines +154 to +157
def ensure_dependency(name)
if resource_exists?(builder.dependency_find(name))
warn "wip: starting existing dependency '#{name}'"
execute(builder.dependency_start(name))

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy lift

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

ast-grep outline lib/wip/command_builder.rb --items all

rg -nP -C 4 \
  'def\s+(up|start|dependency_up|dependency_start|network_\w+)|network\s+(connect|inspect)|\binspect\b' \
  lib/wip/command_builder.rb lib/wip/cli.rb spec/wip/cli_spec.rb

Repository: slidict/wip

Length of output: 3899


🏁 Script executed:

#!/bin/bash
set -euo pipefail

sed -n '1,190p' lib/wip/cli.rb
printf '\n--- spec snippet ---\n'
sed -n '1,140p' spec/wip/cli_spec.rb
printf '\n--- relevant builder methods ---\n'
sed -n '20,115p' lib/wip/command_builder.rb

Repository: slidict/wip

Length of output: 13733


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '%s\n' '--- all network-related occurrences ---'
rg -n -C 3 '"network"|network|Network|networks|container.*network|Containers' lib spec

printf '%s\n' '--- CLI test coverage around existing containers/networks ---'
rg -n -C 3 "existing|network|dependency|connect|start app|start redis|app-tier" spec/lib spec/wip lib/wip/cli.rb spec/wip/cli_spec.rb

Repository: slidict/wip

Length of output: 25675


🌐 Web query:

wslc net container inspect networks JSON

💡 Result:

In the WSL container feature (WSL Containers), the command to inspect a container's networking configuration is: wslc container inspect <container_id_or_name> The wslc CLI (available in Windows Subsystem for Linux public preview as of July 2026) outputs container information in JSON format [1]. When you run the inspect command, the output includes a NetworkSettings object within the container's inspection data [2]. The InspectContainer schema, which dictates the structure of this JSON output, is defined in the WSL codebase [2]. The NetworkSettings section contains details about the networks the container is connected to, specifically mapping network names to endpoint settings (represented as an InspectEndpointSettings object) [2]. Because wslc commands like container inspect are designed to output structured JSON directly to the console [1], you can pipe or redirect this output as needed for parsing or further processing. [1].

Citations:


🌐 Web query:

Microsoft WSL wslc container inspect NetworkSettings endpoints configuration

💡 Result:

In the Microsoft Windows Subsystem for Linux (WSL) container feature, the wslc CLI tool uses an inspection mechanism to retrieve detailed information about containers, which includes their network configurations [1][2]. ### Inspecting Network Settings To view the network configuration of a container, you use the wslc container inspect command (or the Inspect method in the WSL container API) [1][2]. The output is a JSON-formatted structure that maps to an internal schema [2]. The NetworkSettings configuration within this inspection data is defined by an InspectNetworkSettings object [3]. This object primarily contains a map of InspectEndpointSettings keyed by the network name [3]: - InspectNetworkSettings: Contains a collection (std::map) of network endpoints associated with the container [3]. - InspectEndpointSettings: Represents the configuration for a specific network endpoint, which may include settings such as IP addresses, network aliases, links, and driver-specific options [3][4][5]. ### Context and Usage - CLI Interaction: The wslc binary allows you to manage containers with a familiar interface, supporting commands like wslc container inspect <container_id> [6][7]. This command triggers the backend Inspect logic, which gathers the container state, configuration, and network settings, then outputs the result as JSON [1][2]. - API Layer: For developers using the WSL container API (available via NuGet), the Container object provides an Inspect method that returns an InspectContainer structure [8][7]. This structure includes the NetworkSettings field, allowing programmatic access to the container's network topology, including endpoints created via wslc container run or wslc network connect [1][4]. - Network Capabilities: Recent updates have extended the endpoint configuration to support Docker-style settings such as --network-alias, --ip, --link, --link-local-ip, and --driver-opt [4][5]. These endpoint configurations are persisted and surfaced through the inspection flow, enabling the retrieval of detailed network state [4][5]. For further details on the exact schema structure, you can refer to the wslc_schema.h file in the official Microsoft WSL repository [3].

Citations:


既存コンテナの共有ネットワーク接続を保証してください。

up は配置ネットワークを作成/存在確認するだけで、既存の依存コンテナ・メインコンテナがそのネットワークに接続済みであるとは限りません。

  • lib/wip/cli.rbensure_dependencyensure_container は、既存リソースに対して start だけを実行します。
  • 配置ネットワークが存在する既存コンテナの場合、start 前に wslc container inspectNetworkSettings にそのネットワークのエンターポイントがあるか確認し、未接続なら network connect するか再作成してください。
  • spec/wip/cli_spec.rb にも既存かつ未接続の依存コンテナ・メインコンテナのケースを追加し、接続または再作成が最初に実行されることを検証してください。
📍 Affects 2 files
  • lib/wip/cli.rb#L154-L157 (this comment)
  • lib/wip/cli.rb#L164-L169
  • spec/wip/cli_spec.rb#L63-L110
🤖 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 `@lib/wip/cli.rb` around lines 154 - 157,
既存コンテナを開始する前に配置ネットワークへの接続を保証するよう、lib/wip/cli.rb の ensure_dependency(154-157行)と
ensure_container(164-169行)を更新してください。wslc container inspect の NetworkSettings
を確認し、未接続なら network connect または再作成を start
より先に実行してください。spec/wip/cli_spec.rb(63-110行)には、未接続の既存依存コンテナとメインコンテナで接続処理または再作成が最初に呼ばれるケースを追加してください。

Comment on lines +77 to +79
def dependency_start(name)
[@wslc, 'start', name.to_s]
end

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

rg -n -C 4 --glob '*.rb' \
  '\b(network\s+(connect|disconnect)|dependency_start|ensure_dependency|ensure_container|start\s*\()' \
  lib spec

Repository: slidict/wip

Length of output: 7251


🌐 Web query:

Does Microsoft WSLC start attach an existing container to a newly configured network? If not, what command connects an existing container to a network?

💡 Result:

The wslc start command is used to start an existing container, but it does not connect a container to a new network [1]. To connect an existing container to a network, you should use the wslc network connect command [2][3]. The wslc network connect command allows you to add an existing container to a specified network [2][3]. It supports various flags to configure the connection, including: - --network-alias: Defines a network alias for the container [3]. - --ip: Assigns a static IP address on the network [3]. - --link: Adds network links [3]. - --link-local-ip: Specifies link-local IP addresses [3]. - --driver-opt: Provides arbitrary driver options [3]. The WSL container feature, introduced in 2026, provides the wslc.exe CLI for managing containers, images, and networks [4][5]. While container networking configuration (such as the initial network) is often handled during the create or run phases [6][3], wslc network connect provides the mechanism for modifying the network membership of an existing, provisioned container [2][3].

Citations:


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '--- command_builder.rb relevant ---\n'
sed -n '1,140p' lib/wip/command_builder.rb

printf '\n--- cli.rb ensure dependency/container/network ---\n'
sed -n '1,240p' lib/wip/cli.rb

printf '\n--- tests around existing containers and network ordering ---\n'
sed -n '30,120p' spec/wip/cli_spec.rb

Repository: slidict/wip

Length of output: 240


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo '--- command_builder.rb relevant ---'
sed -n '1,140p' lib/wip/command_builder.rb

echo
echo '--- cli.rb ensure dependency/container/network ---'
sed -n '1,240p' lib/wip/cli.rb

echo
echo '--- tests around existing containers and network ordering ---'
sed -n '30,120p' spec/wip/cli_spec.rb

Repository: slidict/wip

Length of output: 14269


既存コンテナを network に接続してください。

up では ensure_network を先に実行していますが、既存の main container と dependency container はそれぞれ start / dependency_start のみで起動されます。wslc start は既存コンテナの network 配置を変更しないため、defaults.network を後から追加した既存コンテナは shared network に入っていません。network の再適用で両方を接続するか、古い network 配置を持つ場合は再作成して --network を渡してください。

🤖 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 `@lib/wip/command_builder.rb` around lines 77 - 79, Update dependency_start and
the corresponding main-container start flow so existing containers are connected
to the configured defaults.network after ensure_network runs. Reapply the
network to both containers, or recreate containers with the network option when
their existing network configuration is stale, while preserving normal start
behavior.

Comment thread lib/wip/config.rb
Comment on lines +51 to +52
validate_commands!
validate_dependencies!

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

defaults.network を構成読み込み時に検証してください。

defaults.network: "" は現在通過します。Ruby では空文字列が真値なので、CLI はネットワーク作成を試み、後で required_networkConfigError を送出します。空白だけの値も拒否してください。無効な値は wip up ではなく構成読み込み時に報告してください。

修正案
 def validate!
   raise ConfigError, "Unsupported configuration version: #{`@raw`['version']}" unless (`@raw`['version'] || 1) == 1
   raise ConfigError, 'up must be a mapping' if `@raw.key`?('up') && !`@raw`['up'].is_a?(Hash)

   validate_commands!
   validate_dependencies!
+  validate_network!
 end
+
+def validate_network!
+  network = `@raw.dig`('defaults', 'network')
+  return if network.nil?
+
+  unless network.is_a?(String) && !network.strip.empty?
+    raise ConfigError, 'defaults.network must be a non-empty string'
+  end
+end

defaults.network: "" と空白文字列の構成例も追加してください。

🤖 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 `@lib/wip/config.rb` around lines 51 - 52, 構成読み込み時の検証フロー(validate_commands! と
validate_dependencies! の呼び出し箇所)に defaults.network の検証を追加し、空文字列および空白のみの値を無効として
ConfigError を即時に報告してください。これにより無効なネットワーク値が wip up
まで通過しないようにし、空文字列と空白文字列の構成例も追加してください。

Comment thread lib/wip/config.rb
Comment on lines +61 to +64
def validate_dependencies!
raise ConfigError, 'dependencies must be a mapping' unless dependencies.is_a?(Hash)

dependencies.each { |name, entry| validate_dependency!(name, entry) }

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

依存コンテナ名と defaults.container の重複を拒否してください。

依存名が main container 名と同じ場合、up は先に依存コンテナを作成します。その後、main container の検索が同じコンテナを検出します。結果として main container は作成されず、down は同じコンテナを複数回停止・削除しようとします。

修正案
 def validate_dependencies!
   raise ConfigError, 'dependencies must be a mapping' unless dependencies.is_a?(Hash)

-  dependencies.each { |name, entry| validate_dependency!(name, entry) }
+  dependencies.each do |name, entry|
+    if name == defaults['container'].to_s
+      raise ConfigError, "dependencies.#{name} must not match defaults.container"
+    end
+
+    validate_dependency!(name, entry)
+  end
 end

dependenciesdefaults.container と同じ名前を設定した場合の仕様も追加してください。

📝 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
def validate_dependencies!
raise ConfigError, 'dependencies must be a mapping' unless dependencies.is_a?(Hash)
dependencies.each { |name, entry| validate_dependency!(name, entry) }
def validate_dependencies!
raise ConfigError, 'dependencies must be a mapping' unless dependencies.is_a?(Hash)
dependencies.each do |name, entry|
if name == defaults['container'].to_s
raise ConfigError, "dependencies.#{name} must not match defaults.container"
end
validate_dependency!(name, entry)
end
🤖 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 `@lib/wip/config.rb` around lines 61 - 64, Update validate_dependencies! to
reject any dependency name that matches defaults.container before validating
dependency entries, raising the existing configuration error with a clear
message. Add or update the configuration specification to document that
dependency names must not duplicate defaults.container.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
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