You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Five issues were filed in a row from the same probe (a 3.0-strict seller — Wonderstruck). On their own they read as five spot fixes. They aren't. They're one bug wearing five hats: at every seam between adopter input and the seller wire, the SDK is being polite instead of honest.
That politeness was invisible against permissive sellers. Against a 3.0-strict seller it surfaces all at once.
The SDK is a witness, not a translator. Don't fabricate, don't normalize stale shapes, don't placeholder when prereqs are unmet, don't flatten the wire diagnostic, don't upgrade a skip to a partial pass.
Fail closed at every seam. The same principle already governs capability declarations (capabilities must match actual behavior — see the precedent set in #931 where a test-mode flag that changed runtime behavior was required to flip the capability block). These five extend that principle one layer up: requests and grades, not just the capabilities body.
Merge order matters
#1684 (for #1679) ships first. It's the keystone — purely visibility. While step.error arrives as {}, the other four can regress silently because every failure looks like INVALID_REQUEST: ¯\\_(ツ)_/¯. Land #1684 and every future politeness regression becomes a tripwire. Land the others first and the next one sneaks back in unannounced.
Is: a coordination issue so the five PRs ship as a coherent rewrite with a single migration story in CHANGELOG and the migration guide. Reviewers should land #1684 first and read the others against this framing.
Isn't: a new spec PR. No adcontextprotocol/adcp change is needed — the spec already says fail closed at each seam; the SDK was being lenient anyway.
Closes when: all five PRs are merged and the migration guide entry calls out "politeness moves removed" as a section.
Five issues were filed in a row from the same probe (a 3.0-strict seller — Wonderstruck). On their own they read as five spot fixes. They aren't. They're one bug wearing five hats: at every seam between adopter input and the seller wire, the SDK is being polite instead of honest.
That politeness was invisible against permissive sellers. Against a 3.0-strict seller it surfaces all at once.
The five hats
accountfrombrand.domainproduct_ids[]/ objectbudgetand rewrites in place{{runner.webhook_url:…}}when no receiver is configurednot_applicableINVALID_REQUESTdetail to{}partialThe rule that emerges
Fail closed at every seam. The same principle already governs capability declarations (capabilities must match actual behavior — see the precedent set in #931 where a test-mode flag that changed runtime behavior was required to flip the capability block). These five extend that principle one layer up: requests and grades, not just the capabilities body.
Merge order matters
#1684 (for #1679) ships first. It's the keystone — purely visibility. While
step.errorarrives as{}, the other four can regress silently because every failure looks likeINVALID_REQUEST: ¯\\_(ツ)_/¯. Land #1684 and every future politeness regression becomes a tripwire. Land the others first and the next one sneaks back in unannounced.Suggested order:
not_applicablerouting.webhook_receiverrequirement. Builds on fix(conformance): grade storyboards not_applicable when required_tools are missing #1682'snot_applicableplumbing.What this is, what this isn't
Is: a coordination issue so the five PRs ship as a coherent rewrite with a single migration story in CHANGELOG and the migration guide. Reviewers should land #1684 first and read the others against this framing.
Isn't: a new spec PR. No
adcontextprotocol/adcpchange is needed — the spec already says fail closed at each seam; the SDK was being lenient anyway.Closes when: all five PRs are merged and the migration guide entry calls out "politeness moves removed" as a section.