Skip to content

fix(skills): make the workspace handle reachable — sync the embedded mirror, resolve furrow from the package - #889

Closed
AbirAbbas wants to merge 2 commits into
mainfrom
fix/furrow-client-discovery
Closed

fix(skills): make the workspace handle reachable — sync the embedded mirror, resolve furrow from the package#889
AbirAbbas wants to merge 2 commits into
mainfrom
fix/furrow-client-discovery

Conversation

@AbirAbbas

Copy link
Copy Markdown
Contributor

Summary

Two small things, both found while e2e-testing #885 + Agent-Field/SWE-AF#130 against a live cloud deployment.

1. main is red. #885 added the workspace-handle section to skills/agentfield-use/SKILL.md but not to the embedded copy the control plane actually serves, leaving it 41 lines behind. Three internal/skillkit tests have been failing since that merge (TestAgentfieldUseEmbeddedFallbackContractMatchesSource, TestSkillCatalogAndEmbeddedMirrorsStayAligned/agentfield-use, TestEmbeddedSkillSyncCheck). First commit runs scripts/sync-embedded-skills.sh and nothing else.

2. The handle was documented as unreachable. The skill said to use it "only if furrow is on PATH (and, for an ssh:// handle, furrow-dial)" — but furrow has no release channel, so it is on nobody's PATH, and the instruction silently disabled the feature for every caller. The binaries are vendored inside the installed SWE-AF package (Agent-Field/SWE-AF#130), so the second commit replaces the PATH assumption with a lookup that checks PATH first and then the installed package, keeping the silent-skip fallback for the genuinely-not-installed case.

Changes Made

  • fix(skills): regenerate the embedded agentfield-use mirror (generated file; no hand edits).
  • docs(skill): furrow_bin() resolver covering both install layouts (bin/ for a //go-subdir install, go/bin/ for a root install) and both platforms via uname; the ssh:// and dir: recipes now invoke the resolved paths.

Test Plan

  • go test ./internal/skillkit — passes (was 3 failures on main before this branch)
  • go build ./... clean; the two gofmt findings in internal/skillkit are pre-existing and in files this PR does not touch
  • Resolver snippet verified live on a real machine: it resolves the already-vendored swe-pro-linux-amd64 out of ~/.agentfield/packages/swe-planner/go/bin/ using the identical pattern
  • End-to-end clone of a live cloud run's workspace verified against a Railway deployment using these exact commands

🤖 Generated with Claude Code

The workspace-handle section added in #885 landed in skills/ only, leaving the
embedded copy the control plane actually serves 41 lines behind. Three skillkit
tests have been failing on main since that merge.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@AbirAbbas
AbirAbbas requested a review from a team as a code owner August 6, 2026 17:19
furrow has no release channel today, so "use it only if furrow is on PATH"
silently disabled the workspace handle for every caller. Point the lookup at
`~/.agentfield/bin` (where provisioning puts it) and at a node's own vendored
copy, and keep the silent-skip when neither exists. Provisioning itself belongs
in the install path, not in this document.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@AbirAbbas

Copy link
Copy Markdown
Contributor Author

Folded into #890 — same story, one PR instead of three.

@AbirAbbas AbirAbbas closed this Aug 6, 2026
@github-actions

github-actions Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

📊 Coverage gate

Thresholds from .coverage-gate.toml: per-surface ≥ 84%, aggregate ≥ 85%, max per-surface regression ≤ 1.0 pp, max aggregate regression ≤ 0.50 pp.

Surface Current Baseline Δ
control-plane 87.10% 87.40% ↓ -0.30 pp 🟡
sdk-go 92.70% 92.00% ↑ +0.70 pp 🟢
sdk-python 93.82% 93.73% ↑ +0.09 pp 🟢
sdk-typescript 91.19% 90.42% ↑ +0.77 pp 🟢
web-ui 84.75% 84.79% ↓ -0.04 pp 🟡
aggregate 85.62% 85.75% ↓ -0.13 pp 🟡

✅ Gate passed

No surface regressed past the allowed threshold and the aggregate stayed above the floor.

@github-actions

github-actions Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

📐 Patch coverage gate

Threshold: 80% on lines this PR touches vs origin/main (from .coverage-gate.toml:thresholds.min_patch).

Surface Touched lines Patch coverage Status
control-plane 0 ➖ no changes
sdk-go 0 ➖ no changes
sdk-python 0 ➖ no changes
sdk-typescript 0 ➖ no changes
web-ui 0 ➖ no changes

✅ Patch gate passed

Every surface whose lines were touched by this PR has patch coverage at or above the threshold.

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