Skip to content

docs: add [all] extra and document ilspycmd as external prerequisite - #150

Merged
bodencrouch merged 3 commits into
masterfrom
docs/ilspycmd-optional-dependency
Jul 30, 2026
Merged

docs: add [all] extra and document ilspycmd as external prerequisite#150
bodencrouch merged 3 commits into
masterfrom
docs/ilspycmd-optional-dependency

Conversation

@bodencrouch

Copy link
Copy Markdown
Contributor

Summary

  • ilspycmd (ILSpy's .NET/IL decompiler CLI) is a .NET global tool, not a PyPI package — confirmed via pip index versions ilspycmd (and plausible wrapper-package names), all resolve to "No matching distribution found."
  • Adding it directly to [project.optional-dependencies] would make pip install agentdecompile[all] fail dependency resolution for everyone, regardless of extras grouping.
  • Added a real [all] extra bundling pip-installable optional features (currently just semantic), and documented dotnet tool install -g ilspycmd separately in the README as an external prerequisite for .NET/IL decompilation.

Test plan

  • uv pip install --dry-run -e ".[all]" resolves cleanly
  • No ilspycmd reference exists anywhere else in the codebase (grepped) — this is packaging/documentation only, not wiring up an existing integration

🤖 Generated with Claude Code

https://claude.ai/code/session_01Ros3797gzvmswnJudQ1Znk

ilspycmd is ILSpy's .NET global tool (dotnet tool install -g ilspycmd),
not a PyPI package -- it cannot be expressed as a pip dependency, and
adding it to optional-dependencies would break `pip install
agentdecompile[all]` for everyone (confirmed: pip/uv cannot resolve it
under any name). Added an [all] extra bundling the real pip-installable
optional features (currently `semantic`) and documented ilspycmd
installation separately in the README as an external prerequisite.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ros3797gzvmswnJudQ1Znk
bodencrouch and others added 2 commits July 30, 2026 13:18
Two pre-existing CI failures on master, discovered while verifying the
swkotor.exe autonomous recovery loop end-to-end:

- tests/test_rewrite_queue.py's two concurrency tests create
  multiprocessing.Process with the default start method, which is "spawn"
  on macOS (vs "fork" on Linux). Spawn re-imports the target function in a
  fresh interpreter rather than reusing the parent's loaded image -- this
  fails on macOS CI with ModuleNotFoundError ("tests" package not reliably
  importable by the fresh interpreter) and, for a locally-nested function,
  AttributeError (can't pickle a <locals> function at all). Reproduced
  locally on Linux via an explicit spawn context to confirm the exact
  failure class, then fixed by forcing multiprocessing.get_context("fork")
  explicitly (available on both Linux and macOS, the only two CI
  platforms) and moving the previously-nested _writer to module level as
  defense in depth.
- source_parity_synthesize.py: removed an unused `.state.now` import
  (ruff F401), unrelated pre-existing dead import blocking the lint step.

601 unit tests pass; ruff clean.

Co-authored-by: Copilot <th3w1zard1@users.noreply.github.com>
@bodencrouch
bodencrouch merged commit 1e52f45 into master Jul 30, 2026
20 checks passed
@bodencrouch
bodencrouch deleted the docs/ilspycmd-optional-dependency branch July 30, 2026 19:02
bodencrouch pushed a commit that referenced this pull request Jul 30, 2026
# Conflicts:
#	pyproject.toml
#	tests/test_rewrite_queue.py
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