chore(release): 0.6.4 — Copilot token usage + review-stall fixes#8
Conversation
Two Copilot CLI defects from live E2E (1.0.63), both scoped per-adapter so other CLIs are unaffected. - Token usage was always 0/None: Copilot writes modelMetrics only in the trailing session.shutdown line, ~1s after agentStop. read_usage now grace-polls the transcript instead of reading once. - Multi-turn reviews stalled: agentStop fires per response turn, so a parallel-subagent review ends several turns and tripped the global stop_without_result_nudges default of 1. Adds two layered knobs (CLI profile ships the default; [adapter] / [adapter.<stage>] policy overrides it; both editable in the settings TUI): usage_grace_s (8s for copilot) and per-adapter stop_without_result_nudges (5 for copilot). Effective value = stage ?? base ?? profile ?? global. Also de-stales the Copilot docs: pin a capable model (the free GPT-5 mini default silently skips steps in multi-step skills) and clarify it's the Copilot CLI binary, not the VS Code extension. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
WalkthroughVersion 0.6.4 adds two new adapter configuration knobs— ChangesCopilot Adapter Timing Knobs and 0.6.4 Release
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
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. Comment |
🤖 Augment PR SummarySummary: Prepares the 0.6.4 patch release and fixes two Copilot CLI E2E issues (token usage reporting and multi-turn review stalls). Changes:
Technical Notes: Effective adapter values resolve as stage override → base adapter override → CLI profile default → global limits fallback (where applicable). 🤖 Was this summary useful? React with 👍 or 👎 |
| if usage_parser not in USAGE_PARSERS: | ||
| raise fail(f"usage_parser must be one of {sorted(USAGE_PARSERS)}: got {usage_parser!r}") | ||
|
|
||
| usage_grace_s = float(doc.get("usage_grace_s", 0.0)) |
There was a problem hiding this comment.
usage_grace_s = float(...) and the int(...) cast for stop_without_result_nudges can raise TypeError/ValueError for non-numeric TOML values, which would bypass the intended ProfileError path and surface as an unhandled exception. Consider validating types / catching conversion failures so misconfigurations consistently produce a user-friendly profile parse error.
Other locations where this applies: src/automator/adapters/profile.py:126, src/automator/policy.py:288, src/automator/policy.py:298.
Severity: medium
Other Locations
src/automator/adapters/profile.py:126src/automator/policy.py:288src/automator/policy.py:298
🤖 Was this useful? React with 👍 or 👎, or 🚀 if it prevented an incident/outage.
There was a problem hiding this comment.
🧹 Nitpick comments (1)
tests/test_tui_settings.py (1)
111-114: 🧹 Nitpick | 🔵 Trivial | ⚡ Quick winAdd the clear-to-inherit assertion for the stage nudge knob too.
This test validates clear semantics for
usage_grace_s, but not foradapter.review.stop_without_result_nudgesafter setting it on Line 105. Add a symmetric clear + assert-Nonecheck to lock in delete-key behavior for both new knobs.🤖 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 `@tests/test_tui_settings.py` around lines 111 - 114, The test validates clear semantics for usage_grace_s but lacks a symmetric test for adapter.review.stop_without_result_nudges that was set earlier on line 105. Add a matching clear-to-inherit assertion block after the usage_grace_s test by setting adapter.review.stop_without_result_nudges to None via doc.set(), then asserting that policy_mod.loads(doc.dumps()).adapter.review.stop_without_result_nudges is None to ensure consistent delete-key behavior for both configuration knobs.
🤖 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.
Nitpick comments:
In `@tests/test_tui_settings.py`:
- Around line 111-114: The test validates clear semantics for usage_grace_s but
lacks a symmetric test for adapter.review.stop_without_result_nudges that was
set earlier on line 105. Add a matching clear-to-inherit assertion block after
the usage_grace_s test by setting adapter.review.stop_without_result_nudges to
None via doc.set(), then asserting that
policy_mod.loads(doc.dumps()).adapter.review.stop_without_result_nudges is None
to ensure consistent delete-key behavior for both configuration knobs.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 722789ef-da75-4563-a7b6-0fe7fa1b854c
⛔ Files ignored due to path filters (11)
docs/images/dashboard.pngis excluded by!**/*.pngdocs/images/dashboard.svgis excluded by!**/*.svgdocs/images/demo.gifis excluded by!**/*.gifdocs/images/settings-scm.pngis excluded by!**/*.pngdocs/images/settings-scm.svgis excluded by!**/*.svgdocs/images/settings.svgis excluded by!**/*.svgdocs/images/start-run-modal.pngis excluded by!**/*.pngdocs/images/start-run-modal.svgis excluded by!**/*.svgdocs/images/sweep-decision.pngis excluded by!**/*.pngdocs/images/sweep-decision.svgis excluded by!**/*.svguv.lockis excluded by!**/*.lock
📒 Files selected for processing (20)
.claude-plugin/marketplace.jsonCHANGELOG.mdREADME.mddocs/FEATURES.mddocs/setup-guide.mdmodule.yamlpyproject.tomlsrc/automator/__init__.pysrc/automator/adapters/generic_tmux.pysrc/automator/adapters/profile.pysrc/automator/cli.pysrc/automator/data/profiles/copilot.tomlsrc/automator/data/settings/core.tomlsrc/automator/data/skills/bmad-auto-setup/assets/module.yamlsrc/automator/policy.pysrc/automator/tui/screens/settings_screen.pytests/test_generic_tmux.pytests/test_policy.pytests/test_profile.pytests/test_tui_settings.py
Release prep for 0.6.4 (patch). Two Copilot CLI defects from live E2E (1.0.63), fixed per-adapter so other CLIs are unaffected, plus the supporting policy/TUI knobs and doc updates.
Fixed
modelMetricsonly in the trailingsession.shutdownline, ~1s afteragentStop— usage was sampled before it landed.read_usagenow grace-polls the transcript, driven by a new per-profileusage_grace_s(8s forcopilot, 0 elsewhere = read once).agentStopfires per response turn, so a parallel-subagent review ends several turns and tripped the globalstop_without_result_nudgesdefault of 1. New per-adapter floor (5 forcopilot), overridable per stage via[adapter.review].Added
[adapter] usage_grace_s/stop_without_result_nudges(base + per-stage[adapter.dev|review|triage]), editable in the settings TUI. Unset = inherit the CLI profile's shipped default. Effective value:stage ?? base ?? profile ?? global.Changed
Notes
model/extra_argsalready work: profile ships the default (copilot works out-of-box), policy.toml overrides it, TUI edits the override.trunk checkclean. Live Copilot E2E is the reporter's confirmation step (can't run here).🤖 Generated with Claude Code
Summary by CodeRabbit
New Features
Bug Fixes
Documentation