fix(examples): reference stacks read delivery_url, the field the schema defines - #97
Open
ucekmez wants to merge 1 commit into
Open
fix(examples): reference stacks read delivery_url, the field the schema defines#97ucekmez wants to merge 1 commit into
ucekmez wants to merge 1 commit into
Conversation
…ma defines Both reference implementations read `body.callback_url` on subscribe. `schemas/v0.1/subscription.request.json` defines `delivery_url` and has no `callback_url` property at all, so a conformant subscriber's delivery target was silently discarded: the subscription was created, returned 200, and could never receive a webhook. `callback_url` is the stacks' own internal column name. It was never part of the request body. Both `@eep-dev/middleware` and `eep-middleware` read `delivery_url` correctly; only the reference stacks — the code implementors are pointed at as the worked example — got it wrong. The existing tests passed because they posted `callback_url` themselves and never asserted on the stored value. `tests/cross-impl` does send the correct `delivery_url`, but exercises the gate publisher example rather than these stacks. Changes: - Read `delivery_url`, falling back to `callback_url` as a deprecated alias so existing demo scripts keep working. - Echo `delivery_url` and `created_at` in the subscribe response, so the recorded target is assertable rather than write-only. This is what makes the regression tests meaningful. - Return `201` for a created subscription, matching SPECIFICATION.md §5.1.1 and both middleware packages. The stacks returned `200`. - Regression tests in both stacks covering the wire field, the deprecated alias, and the status code. Note for maintainers: these suites are not run by any CI job — there is no `test-reference-implementation` in .github/workflows/test.yml — which is why this survived. `python/tests/test_app.py::test_combined_bundle_content` is also failing on main today, independently of this change. Both are addressed in a follow-up rather than folded in here. Refs: EEP audit 2026-08, follow-on from finding A1 Signed-off-by: Ugur Cekmez <ucekmez@gmail.com>
9 tasks
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.
Summary
PR 5 of a stacked series. Base is #96. Not for merge without review.
Found while checking field names for #96.
Both reference implementations read
body.callback_urlon subscribe:schemas/v0.1/subscription.request.jsondefinesdelivery_urland has nocallback_urlproperty at all. So a conformant subscriber's delivery target was silently discarded — the subscription was created, returned200, and could never receive a webhook.callback_urlis the stacks' own internal column name. It was never part of the request body. Both@eep-dev/middlewareandeep-middlewarereaddelivery_urlcorrectly. Only the reference stacks — the code implementors are pointed at as the worked example — got it wrong.Why it survived: the existing tests posted
callback_urlthemselves and never asserted on the stored value.tests/cross-impldoes send the correctdelivery_url, but it exercises the gate publisher example, not these stacks.What changed
delivery_url, falling back tocallback_urlas a deprecated alias so existing demo scripts keep working.delivery_urlandcreated_atin the subscribe response, so the recorded target is assertable rather than write-only. This is what makes the regression tests meaningful — a test that can't observe the stored value is how this bug hid.201for a created subscription, matching §5.1.1 and both middleware packages. The stacks returned200.Scope
Checklist
201instead of200; any consumer asserting200needs updating (both in-tree suites are updated here).Verification
vitest)pytest)Two things maintainers should know
1. No CI job runs these suites. There is no
test-reference-implementationjob in.github/workflows/test.yml— the jobs cover every@eep-dev/*andeep-*-pythonpackage pluscross-impl, but not the reference stacks. That is precisely why this bug survived. The README describes this stack as what "contributors and CI use to exercise Layer 1 discovery, Layer 2 subscribe/stream, Layer 3 pulse and the gate endpoints against shared parity fixtures." CI does not.2.
python/tests/test_app.py::test_combined_bundle_contentneeds the localeep-gates, not the installed one.I originally reported this as a TypeScript/Python parity defect. That was wrong — I'm correcting it here. Against the repo source, the Python reference suite is fully green:
The failure I hit came from my virtualenv resolving
eep_gatesto a stale copy insite-packagesthat was missing the tier-resource filter inaccess_resolver.py. Both the repo source and the publishedeep-gates==0.1.0wheel contain that filter — I checked the wheel directly. There is no parity defect and no published-package bug. Apologies for the noise.What it does illustrate is point 1: because no CI job installs and runs these stacks, "the reference implementation passes" depends on whatever happens to be in a contributor's environment. The follow-up PR adds the missing jobs, pinned to the workspace sources.