Skip to content

ui: the harness family filters claims, it does not bind dispatch - #911

Merged
orveth merged 3 commits into
mainfrom
ui/harness-family-is-not-dispatch
Aug 26, 2026
Merged

ui: the harness family filters claims, it does not bind dispatch#911
orveth merged 3 commits into
mainfrom
ui/harness-family-is-not-dispatch

Conversation

@orveth

@orveth orveth commented Aug 25, 2026

Copy link
Copy Markdown
Contributor

Split out of #900 at the reviewer's request. Doc/UI only, no behaviour change.

What was wrong

The runner sheet's Profile section told operators that harness_family is enforced at dispatch, and a passing test pinned that mark in place.

Nothing at the seat reads harness_family. Dispatch selects a harness by the offer's agent preset alone, and a seat with several configured presets runs its first when none is named — so a multi-harness seat can match the family filter and execute a different harness within it.

The claim was never true of the shipped binary. It is not a regression from any recent change.

Why it needed its own head rather than a line in #900

#900 corrected the same false premise in RELEASE_NOTES.md. Fixing only the notes would have corrected the description of the defect and shipped the defect: the operator-facing string would still say "enforced at dispatch", with a green test over it.

The reviewer's enumeration named two lines in RELEASE_NOTES.md, and a second reviewer independently confirmed them. Both were right, and both searched that one file — a complete enumeration inherits the scope of the corpus searched, exactly as a zero does. A tree-wide search found four more instances, in code.

The four sites, and why a string search finds only half

web/app/src/ui/docks.ts     mark: "enforced at dispatch"
web/app/src/ui/docks.ts     const ENFORCED_AT_DISPATCH
web/app/src/ui/docks.ts     doc comment: "the one capability field backed by a mechanism"
web/app/src/ui/docks.ts     tooltip: "Dispatch binds to the named family exactly or not at all"
web/app/test/capability.test.ts   the assertion holding the mark green

Only two contain the literal mark string. The constant name is underscored and upper-cased, and the doc comment and tooltip state the claim in prose without ever using the phrase.

The tooltip is the load-bearing one. A mark is a chip; the tooltip is where a buyer decides whether a family request guarantees which harness runs their job. It said yes.

What settles which artifact is wrong

The constant cites docs/protocol-v1.md §4.5.3 as its source. That section reads that harness_family is neither enforced nor echoed. The code cited a spec asserting the opposite of what it displayed, so no arbitration is needed.

What changes

ENFORCED_AT_DISPATCHFILTERS_CLAIMS_NOT_DISPATCH, mark filters claims, not dispatch.

The freshness half of the old wording was correct and is kept: the field is read from the live roster on every beat. Only the enforcement claim changes. markClass is unchanged, so no styling moves and no other row is touched.

The doc comment is written in the constrained register LAST_OBSERVED already uses on the neighbouring field, and names the verbs that would make it wrong again — enforced, pinned, guaranteed, exact-or-nothing at dispatch.

Second review round — two blockers, both real, both fixed

Blocker 1: the false claim survived in the changed files. docks.ts still called harness_family an ENFORCEMENT and contrasted the weakest row with "the enforced one"; capability.test.ts still said "one enforcement, one echo, one silence". Both contradict docs/protocol-v1.md §4.5.3, which states that NONE of the three filterable fields is an enforcement — harness_model is echoed, harness_family and capabilities are both silence. One inconsistency signal and two silences.

The rows still differ and the marks still carry the difference, but on what a reader can do with the value, not on how true it is. Two rows being equally unenforced does not make them interchangeable: they differ in freshness and in what they gate.

Why the first sweep missed it, since it is the more useful half. That sweep searched four exact strings — enforced at dispatch, ENFORCED_AT_DISPATCH, backed by a mechanism, exactly or not at all — and reported all four as 0. Every one of those counts was true. A literal set is an inclusion filter over a claim that has other spellings, and the claim was spelled ENFORCEMENT twelve lines below the edit. The numbers were right and the conclusion was wrong. This round swept shapes instead: enforce/enforced/enforcement/guarantee/binds/dispatch/pinned, reading every hit rather than counting.

Blocker 2: the load-bearing tooltip was not under test. This PR's own description names docks.ts as the place a buyer decides what a family request buys — and the only changed assertion checked the chip. The corrected tooltip could have been swapped back for the old false one with the suite still green. A green that cannot go red is not coverage.

Verification

The suite now runs locally. The earlier note that this worktree has no node_modules, tsx or tsc was accurate at the time; npm ci installs them from the committed lockfile and the suite runs. Unmutated: 74 pass, 0 fail, rc=0. The count moved 73 → 74, so the new test demonstrably executed rather than being silently skipped.

RED-PROVEN FIVE TIMES, ONE VARIABLE PER RUN, because the runner stops a test at its first failing assertion — so a single mutation can only ever prove one assertion has power:

restore the old false tooltip        -> rc=1  forbidden shape /backed by a mechanism/i
drop "decides which seats may…"      -> rc=1  "must say the family filters claimant eligibility"
drop "never which harness runs one"  -> rc=1  "must say the family does not select what executes"
drop "must name the preset"          -> rc=1  "must say the `agent` preset is what buys the guarantee"
drop the phrase, object-field
  assertions removed                 -> rc=1  the RENDERED title="…" assertion
no mutation (control)                -> rc=0  74 pass, 0 fail

The single full-tooltip restore was not sufficient on its own: it fails on the forbidden-shape list, which leaves the three load-bearing positive assertions unexercised. That is why each was dropped in turn.

The forbidden-shape list is an inclusion filter and is commented as one. It pins the spellings this claim has already worn here and cannot prove a new wording is safe. The positive assertions carry the weight, which is why they are asserted separately — so satisfying one cannot stand in for another.

The rendered title="…" attribute is asserted as well as the object field: those are different artifacts and only the second one ships.

Deliberately not touched

crates/maxplayer-core/src/heartbeat.rs also says "exact-or-nothing". It says AgentRegistry::dispatch is exact-or-nothing on the preset NAME, which is true. The defect was applying a true property to the wrong field, so the true statement stays.

The runner sheet told operators `harness_family` was "enforced at dispatch",
and a passing test pinned that mark green. Nothing at the seat reads
`harness_family`: dispatch selects a harness by the offer's `agent` preset
alone, and a seat with several configured presets runs its first when none
is named. So a multi-harness seat can match the family filter and execute a
different harness within it.

The claim was never true of the shipped binary. It is not a regression from
any recent change.

Four places carried it, and only two contained the literal mark string, so a
search for that string alone would have left half the defect in place:

- the mark itself, `enforced at dispatch`
- the constant name, `ENFORCED_AT_DISPATCH`
- its doc comment, "the one capability field backed by a mechanism"
- its hover tooltip, "Dispatch binds to the named family exactly or not at
  all" — the fullest statement of the claim and the one an operator is most
  likely to read

The tooltip is the reason this is worth its own head. A mark is a chip; the
tooltip is where a buyer decides whether a family request guarantees which
harness runs their job. It said yes.

`docs/protocol-v1.md` §4.5.3 is cited by this constant as its source and
reads that `harness_family` is neither enforced nor echoed. The code cited a
spec asserting the opposite of what it displayed, which settles which side
is wrong without arbitration.

The freshness half of the old wording was correct and is kept: the field IS
read from the live roster on every beat. Only the enforcement claim changes.
`markClass` is unchanged, so no styling moves.

The doc comment is written in the constrained register `LAST_OBSERVED`
already uses on the neighbouring field, and names the verbs that would make
it wrong again — enforced, pinned, guaranteed, exact-or-nothing at dispatch.

`heartbeat.rs` also says "exact-or-nothing" and is deliberately untouched: it
says `AgentRegistry::dispatch` is exact-or-nothing on the preset NAME, which
is true. The defect was applying a true property to the wrong field.

Split from #900 on purpose. That PR is money-path and already cleared on
code; this is a TypeScript surface with a different reviewer competence.

Not run locally: this worktree has no `node_modules`, no `tsx` and no `tsc`,
so `npm test` exits 127 at the typecheck step. CI is the execution evidence.
What is verified here is the mark string and the test's expectation extracted
and compared byte-exact — 28 bytes each, identical, with a mutation control
and a self-diff control — since a mark/expectation mismatch is the failure
this change could most plausibly introduce.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@vercel

vercel Bot commented Aug 25, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
mobee Ready Ready Preview Aug 25, 2026 11:41pm

Request Review

Two defects, both found in review, both mine.

The first is that the false claim survived in the changed files. The docks
comment still called `harness_family` an ENFORCEMENT and contrasted the
weakest row with "the enforced one"; the test comment still said "one
enforcement, one echo, one silence". `docs/protocol-v1.md` §4.5.3 is explicit
that NONE of the three filterable fields is an enforcement: `harness_model` is
echoed, so a divergence is at least visible in a buyer's own records, and
`harness_family` and `capabilities` are both silence. One inconsistency signal
and two silences.

The rows still differ, and the marks still carry the difference — but on what
a reader can DO with the value, not on how true it is. Two rows being equally
unenforced does not make them interchangeable; they differ in freshness and in
what they gate.

Why the first sweep missed it: it searched for the literal mark string and
three other exact phrases. All four counts were genuinely zero. A literal set
is an inclusion filter over a claim that has other spellings, so every number
was correct and the conclusion was wrong. The claim was spelled ENFORCEMENT
twelve lines below the edit.

The second defect is the one that matters. The tooltip is where a buyer
decides what a family request buys, and nothing asserted on it — the only
changed assertion checked the chip text. So the corrected tooltip could have
been swapped back for the old false one and the suite would have stayed green.
A green that cannot go red is not coverage.

The new test pins the three things a buyer needs, asserted separately so
satisfying one cannot stand in for another: the family filters claimant
eligibility, it does not select what executes, and the `agent` preset is what
buys the execution guarantee. It also asserts on the RENDERED title attribute,
because the object field and the string a buyer hovers are different artifacts
and only the second one ships.

Red-proven locally, five times, one variable per run. Restoring the old false
tooltip fails on the forbidden-shape list. Dropping each of the three positive
phrases in turn fails that phrase's own assertion, with its own message.
Removing the object-field assertions and dropping the phrase fails the
rendered-attribute assertion. Unmutated: 74 pass, 0 fail.

The per-assertion runs were necessary rather than thorough: the runner stops a
test at its first failing assertion, so the single full-tooltip restore proved
only that the shape list has power and left the three load-bearing assertions
unexercised.

The forbidden-shape list is an inclusion filter and is commented as one. It
pins the spellings this claim has already worn here and cannot prove a new one
is safe; the positive assertions are what carry the weight.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@orveth
orveth merged commit 881adc2 into main Aug 26, 2026
9 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.

1 participant