Pin the srv2 filter dimensions and the filtered epoch resume in a tier-2 fixture - #918
Merged
Merged
Conversation
…r-2 fixture The event-feed scenario suite moved to srv2, but no fixture configured performers, exclude_performers or actor_types, so their identifier and query spellings were unpinned at tier 2 and the README's claim that a 410 resume preserves the canonical filter set rested on fixture 16, which has no filters. Dropping exclude_performers from the subscription, misspelling actor_types, or losing performers on the poll seam left all 26 fixtures green. Fixture 35 configures the three srv2 dimensions, pins them on the subscription identifier and the entry poll's exact query, and then accepts a feed 410 whose served resume carries them: the resume is followed verbatim at since=<epoch_after_id>, its first page delivers and saves.
There was a problem hiding this comment.
🟡 Changes recommended
Two mechanically derived README inventories omit fixture 34.
Get a fresh assessment by requesting another Copilot review.
Pull request overview
Adds tier-2 coverage for srv2 filter dimensions and filtered 410 epoch resumes.
Changes:
- Adds fixture 35 covering filter propagation and resume behavior.
- Updates fixture inventories and dependency documentation.
[!TIP]
If you aren't ready for review, convert to a draft PR.
Click "Convert to draft" or rungh pr ready --undo.
Click "Ready for review" or rungh pr readyto reengage.
File summaries
| File | Description |
|---|---|
conformance/event-feed/README.md |
Documents fixture 35 and its coverage. |
conformance/event-feed/fixtures/35-srv2-dimensions-carry-through-the-epoch-resume.json |
Tests srv2 filters across subscription, polling, and epoch resume. |
Review details
- Files reviewed: 2/2 changed files
- Comments generated: 2
- Review effort level: Balanced
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Both lists are hand-maintained; re-derived from the fixture files. The 200-poll row is the account envelope's, so it names that lane (32 and 33 serve the inbox envelope, pinned by their own row).
jeremy
approved these changes
Sep 16, 2026
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.
The event-feed scenario suite runs on srv2, but no fixture sets any of the dimensions srv2 added:
performers,exclude_performers,actor_types. Their spellings on the subscription identifier and the poll query were pinned only by Go unit tests. The README's claim that a 410 resume keeps the canonical filter set rested on fixture 16, which has no filters. Dropexclude_performersfrom the subscription, misspellactor_types, or loseperformerson the poll seam, and all 26 fixtures still pass.Tracked in 09 Conformance and eventfeed on the live contract
exclude_performersis the acting agent's loop guard and the reason the connector needs srv2. A regression there would pass the cross-language suite, and the suite is the contract other SDKs port against.Fixture 35 sets the three dimensions. It pins them on the subscription identifier, and checks that they reach the poll seam on the entry poll. The driver builds the poll query itself, so the spelling on the wire there is tier 1's to pin. Then it accepts a feed 410 whose served resume carries them. The resume is followed as served, at
since=<epoch_after_id>and neversince=now, and its first page delivers and saves. Values are configured in ascending order, so the pin doesn't favour configured-order joining over sorted joining. The README's inventory and dependency table now list it.Each of the three mutations above fails only fixture 35. Replacing the accepted resume with
since=nowfails 16, 27, 33 and 35.Follows Event feed: split the poll lanes' 410s and give their 400 a reason and Event feed connector: bind the seams to the generated operations.
The README inventories marked "mechanically derived" have no generator or drift check. They are maintained by hand, which is how fixture 34 was left out of two of them. This PR re-derives both lists from the fixture files, and nothing prevents the next drift.