Score outpost-001 against the customer's endpoint, not one the agent picked - #67
Merged
Merged
Conversation
This was referenced Aug 28, 2026
…picked The ticket said "so they receive order events at their endpoint" and named no endpoint, so any reachable URL satisfied it. Across the six stored cells of this scenario the agents picked six different receivers: three Event Gateway sources on hkdk.events, a webhook.site inbox, a mock.hookdeck.com path, and a localtunnel inside the agent's own sandbox. Five passed. The sixth is the one worth reading. It failed, and not because the customer was not subscribed — the agent built the tenant, the destination and the topics, and reported delivery confirmed. Its tunnel died with the container before scoring. So the check named "an order event reaches the customer" was discriminating on whether an improvised receiver outlived the run. EVAL.ts already carried this as a known hole and deferred it, because fixing it changes a published scenario. That is the right call to revisit now rather than later: publishing is held under #66, the scenario fingerprint from #65 records the change for anyone comparing rows across it, and the next matrix has not been paid for yet. Doing it after that run would mean measuring this scenario twice. The ticket now names mock.hookdeck.com/api/v1/acme/orders — the URL SOLUTION.ts was already delivering to, which is how the mismatch surfaced — and the scorer counts only destinations pointed there. A customer's endpoint is not the integrator's to choose. Verified with score-only rather than an agent run: the solution path passes 2/2, the unsolved path fails, and a solution edited to deliver to a receiver of its own choosing now fails where it would previously have passed. Refs #47 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MQzUoMAwEBJWpEGVvVzSjK
leggetter
force-pushed
the
outpost-001-customer-endpoint
branch
from
August 28, 2026 13:19
2fdaab8 to
b61066b
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Refs #47 — the first of the "does this scenario actually discriminate" items, and the one the code already knew about.
What was being measured
The ticket said "so they receive order events at their endpoint" and named no endpoint, so any reachable URL satisfied it. Across the six stored cells of this scenario the agents picked six different receivers:
claude-code-sonnet-5hkdk.eventssource it createdclaude-code-sonnet-5-no-skillswebhook.siteinboxcodex-gpt-5.6hkdk.eventssourcecodex-gpt-5.6-no-skillshkdk.eventssourcecodex-gpt-5.4-mini-no-skillsmock.hookdeck.compathcodex-gpt-5.4-miniThe failing cell is the one worth reading. It built the tenant, the destination and the topic set, published an order event, and reported delivery confirmed with
200attempts. Its tunnel died with the container before scoring. So the check named "an order event reaches the customer" was discriminating on whether an improvised receiver outlived the run.EVAL.tsalready carried this as a known hole and deferred it, because closing it changes a published scenario.Why now
Three things make this the cheap moment rather than the expensive one:
The change
The ticket names
https://mock.hookdeck.com/api/v1/acme/orders— the URLSOLUTION.tswas already delivering to, which is how the mismatch surfaced — and the scorer counts only destinations pointed there. Matching is lenient on trailing slash, query string and case, strict on host and path.Verified without an agent run
Using
score-only, per the convention that a scorer change is validated for the price of some API calls:--no-solution: failSplit out
The
pnpm checkbreakage found while validating this is now #68, so the gate lands independently of a scenario change.🤖 Generated with Claude Code
https://claude.ai/code/session_01MQzUoMAwEBJWpEGVvVzSjK