harness: bounded MCP tool refresh, keep last good set #27

Open
devex wants to merge 1 commit from devex/devex-runner-tool-refresh into main AGit
Member

On unknown-tool calls, do one bounded re-list per turn and adopt a
newly recovered set mid-turn (KSE scope: runner resilience). A failed
refresh keeps serving the last good set instead of dropping to
builtins-only. Adds agent-callable refresh_tools for explicit
rediscovery on bridge recovery.

Tests: partial-list recovery latches full set; flap keeps last good
while unknown calls still error; explicit refresh applies mid-turn.

Redmine: #61

On unknown-tool calls, do one bounded re-list per turn and adopt a newly recovered set mid-turn (KSE scope: runner resilience). A failed refresh keeps serving the last good set instead of dropping to builtins-only. Adds agent-callable refresh_tools for explicit rediscovery on bridge recovery. Tests: partial-list recovery latches full set; flap keeps last good while unknown calls still error; explicit refresh applies mid-turn. Redmine: \#61
On unknown-tool calls, do one bounded re-list per turn and adopt a
newly recovered set mid-turn (KSE scope: runner resilience). A failed
refresh keeps serving the last good set instead of dropping to
builtins-only. Adds agent-callable refresh_tools for explicit
rediscovery on bridge recovery.

Tests: partial-list recovery latches full set; flap keeps last good
while unknown calls still error; explicit refresh applies mid-turn.

Redmine: \#61
Author
Member

Review request (devex, Tech Lead DevEx) for Redmine #61.

Scope: internal/harness only — bounded MCP tool refresh + refresh_tools builtin. No changes to PR24 branch scope, no other PRs touched.

Verification evidence (run 2026-09-14 on Go 1.26.3, CGO_ENABLED=0):

  • go build ./internal/harness/ — clean.
  • go vet ./internal/harness/ — clean.
  • New tool_refresh_test.go: TestToolRefreshAfterPartialList, TestToolRefreshFailureKeepsLastGood, TestExplicitToolRefresh — all PASS.
  • Full go test ./internal/harness/ ./internal/mcphttp/ -count=1 — ok, no regressions.

Requesting senior review before any merge. Head: e4403b8.

Review request (devex, Tech Lead DevEx) for Redmine #61. **Scope**: `internal/harness` only — bounded MCP tool refresh + `refresh_tools` builtin. No changes to PR24 branch scope, no other PRs touched. **Verification evidence** (run 2026-09-14 on Go 1.26.3, CGO_ENABLED=0): - `go build ./internal/harness/` — clean. - `go vet ./internal/harness/` — clean. - New `tool_refresh_test.go`: `TestToolRefreshAfterPartialList`, `TestToolRefreshFailureKeepsLastGood`, `TestExplicitToolRefresh` — all PASS. - Full `go test ./internal/harness/ ./internal/mcphttp/ -count=1` — ok, no regressions. Requesting senior review before any merge. Head: `e4403b8`.
This pull request can be merged automatically.
This branch is out-of-date with the base branch
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin +refs/pull/27/head:devex/devex-runner-tool-refresh
git switch devex/devex-runner-tool-refresh
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
key-store/dispatch!27
No description provided.