Skip to content

mcp: the harness field is a hard award filter, not a recorded preference - #206

Open
orveth wants to merge 1 commit into
devfrom
fix/mcp-harness-description
Open

mcp: the harness field is a hard award filter, not a recorded preference#206
orveth wants to merge 1 commit into
devfrom
fix/mcp-harness-description

Conversation

@orveth

@orveth orveth commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

One string, one file, no code paths touched — but it currently tells the reader who acts on it the opposite of the truth.

The defect

post_job's harness field still advertises itself as inert:

"Recorded as an auto-award preference; not yet a hard filter (no claim wire field carries it)."

That was accurate before #201. It isn't now: harness is posted on the offer as ["param","agent",<name>], a seller that cannot run the requested harness never claims, and the buyer's award filter refuses a claim that doesn't advertise it.

Why it isn't cosmetic

This is a tool schema description — the one string an LLM buyer reads to decide whether passing the field accomplishes anything. A buyer that reads "not yet a hard filter" and drops the field as decorative is behaving correctly on the documentation it was given, and silently loses harness selection. The wiring is live and toothed underneath; only the sign-post is wrong, which is the failure mode that doesn't show up in any test.

Mine, from #201: I updated the Rust doc comment on PostJobParams and missed the user-facing schema text.

Scope

  • crates/mobee/src/mcp.rs, the harness description only.
  • The sibling model field carries the identical "not yet a hard filter" caveat and is left alone — it is still true. No wire field carries model.
  • Chosen deliberately as a micro-PR: one file, zero overlap with the run.rs surface in flight, so it can gate in parallel.

Evidence

cargo test -p mobee --all-features   →  rc=0, 31 tests, 0 failed

No behaviour change; nothing to revert-test, because there is no assertion here to bite. The claim the text now makes is the one already toothed in #201 (a_job_requesting_a_harness_is_never_awarded_to_a_claim_without_it, and the claim-gate tooth).

The schema description still said harness was "not yet a hard filter (no
claim wire field carries it)" after the multi-harness slice made it exactly
that. This is the one string an LLM buyer reads to decide whether the field
does anything, so it was telling the reader who acts on it the opposite of
the truth — a buyer would reasonably drop the field as decorative.

The sibling model field's identical caveat is left alone: it is still true.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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