Skip to content

Multi-LLM Council CLI: production-ready fixes and improvements#10

Merged
antunesand merged 2 commits into
mainfrom
claude/multi-llm-council-cli-f2eaU
Feb 17, 2026
Merged

Multi-LLM Council CLI: production-ready fixes and improvements#10
antunesand merged 2 commits into
mainfrom
claude/multi-llm-council-cli-f2eaU

Conversation

@antunesand

Copy link
Copy Markdown
Owner

Summary

  • ruff check + ruff format: all linting and formatting passes cleanly (297 tests, 0 failures)
  • Dry-run semantics: --dry-run now marks state as dry_run with rounds skipped, exits code 0, never marks run as failed
  • Multi-candidate persistence + resume: all candidate outputs saved in Round 0; chosen candidate persisted in state.json; resume loads the correct selected candidate
  • Apply safety: council apply checks for dirty working tree, requires --force to proceed
  • README: documents resume, apply, --no-save, --redact-paths, --smart-context, --structured-review, --claude-n/--codex-n, and updated Run Artifacts section
  • council list: new command to list recent runs with status

Test plan

  • ruff check . passes
  • ruff format --check . passes (32 files formatted)
  • pytest — 297 tests pass
  • Dry-run tests lock in exit-code-0 and state behavior
  • Multi-candidate tests verify persistence and resume correctness
  • Apply safety tests verify dirty-tree blocking and --force override

https://claude.ai/code/session_01NLdqwmPoeinJoc4ojUEAma

…safety, docs

A) Fix all 44 ruff lint errors (unused imports, import sorting, ambiguous
   variable names, unnecessary f-strings, ternary refactors, combined with
   statements). ruff check . now passes cleanly.

B) Fix --dry-run semantics: previously marked runs as "failed" because
   the dry-run exit path shared the same branch as "both tools failed".
   Now returns a _DRY_RUN_SENTINEL, marks all rounds as "skipped", and
   sets state status to "dry_run". Exits with code 0.

C) Fix multi-candidate + resume correctness: the chosen candidate name
   (e.g. claude_2) was only held in a local variable and never persisted.
   On resume, _load_round_output always loaded the base candidate. Now
   persists chosen_candidates dict in state.json round 0 details and
   reads it back on resume.

D) Add working-tree safety to council apply: refuses to apply patches
   on a dirty working tree unless --force is passed. --check (read-only)
   skips the dirty-tree check.

E) Update README with all missing documentation: council resume, council
   apply (with --check/--yes/--apply-to/--force), --no-save, --redact-paths,
   --smart-context, --structured-review, --claude-n/--codex-n, updated
   run artifacts section (state.json, review files, multi-candidate files).

F) Add council list command to list recent runs with status/metadata.

Tests: 297 passed (up from 285), ruff check clean.

https://claude.ai/code/session_01NLdqwmPoeinJoc4ojUEAma
Applies consistent formatting (ruff format .) to all 26 Python files.
No logic changes — formatting only.

ruff check: All checks passed
ruff format --check: 32 files already formatted
pytest: 297 passed

https://claude.ai/code/session_01NLdqwmPoeinJoc4ojUEAma
@antunesand antunesand merged commit 7c3fc86 into main Feb 17, 2026
2 checks passed
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.

2 participants