chore: advance eve compatibility baseline to 0.29.4 - #28
Merged
Conversation
The pinned CI fixture ran eve 0.27.6, which emits message-stream protocol 19. That release predates both the durable stream event id and the framework-owned input-request discriminator, so the presence half of each contract could only be covered by handwritten payloads. The fixture now runs eve 0.29.4 (protocol 20). ai moves to 7.0.42 to satisfy eve's ^7.0.38 peer range; the shipped package stays dependency-free. EveProtocol.ReferenceEveVersion and MessageStreamVersion, the README reference commit, and the documentation all move with it, so the upstream parity radar compares future releases against the new baseline. The compatibility probe now requires an evt_-prefixed Crockford ULID on every event of a turn with no repeats, requires the tool-approval discriminator on a real approval-gated pause, and verifies a real bounded catch-up read against the x-eve-stream-tail-index header. That last path was unreachable on 0.27.6, which accepted includeTailIndex without reporting the header. Protocol 19 servers stay readable: absent identifiers and absent discriminators are still projected as absent instead of failing. That tolerance is covered by contract tests rather than the pinned fixture. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 6f397bc8-d45e-4945-a1f7-eb8d8d91a4fc
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.
Advances the pinned compatibility baseline from eve
0.27.6(message-stream protocol19) to eve0.29.4(protocol20), so the C# client is gated against what eve actually ships today.Why
CI boots a real eve server and runs the C# client against it — that fixture is the strongest evidence this repository produces. It was pinned to
0.27.6, which predates:meta.idstream event identifier ([Upstream eve] Expose stable stream event IDs #24, merged in feat: expose stable eve stream event ids #27), andkinddiscriminator ([Upstream eve] Preserve framework-owned input request kinds #25, merged in fix: preserve framework-owned eve input request kinds #26).Both only exist from eve
0.28.0. Against a0.27.6server the probe could therefore only prove the absence-tolerance half of each contract; the presence half was covered by handwritten payloads. Bounded catch-up reads were in the same position:0.27.6acceptedincludeTailIndex=1but never reportedx-eve-stream-tail-index, so that path was unreachable against a real server.Upstream risk review
Read the full eve changelog for
0.27.7→0.29.4. There are no major/breaking sections — only minor and patch. The one entry marked "Breaking" (7ff4f77, in0.28.0) is a TypeScript type change (MessageStreamEventbecoming canonical,HandleMessageStreamEventkept as a deprecated alias); it is additive on the wire and does not affect a .NET client.The
0.29.0minor changes remove CLI surface (/channels,eve channels add,eve trace→eve traces). The fixture only invokeseve buildandeve start, both verified working.Changes
eve@0.29.4.aimoves7.0.34→7.0.42to satisfy eve's^7.0.38peer range. The shipped package remains dependency-free — this is test-fixture-only.EveProtocol.ReferenceEveVersion→0.29.4,MessageStreamVersion→20.85c1dd7(theeve@0.29.4tag), which is what theeve-client-upstream-radarskill parses, so future parity scans compare from the new baseline.evt_-prefixed Crockford base32 ULID, and no identifier repeats;tool-approval→EveInputRequestKind.ToolApproval;run-client-probe.mjsreads the fixture's installed eve version instead of hardcoding it, and the two workflow step names are now version-agnostic so the next bump does not touch CI.CHANGELOG.mdrecords the baseline move plus the two features merged in fix: preserve framework-owned eve input request kinds #26/feat: expose stable eve stream event ids #27, which those PRs did not add.README.md,AGENTS.md,docs/index.md,docs/compatibility.md,docs/streaming.md,docs/attachments-and-input.md, anddocs/authentication.md.Validation
Everything below was run on this branch.
dotnet format --verify-no-changesdotnet build -c Releasedotnet test -c Releasenpm ci+npm run test:client(real eve 0.29.4)mkdocs build --strictpython -m unittest discover -s scripts/testsInvoke-Pester(upstream radar)EveProtocol.cs = 0.29.4,README = 0.29.4 @ 85c1dd7…— consistentdotnet pack+validate-packages.ps10.1.0-alpha-0002-g455c5a97a3test-package-consumer.ps1The flip was empirically driven, not assumed. Running the old probe unchanged against
0.29.4failed with:That is the real server proving
meta.idprojection works end to end. Tail-index support was likewise confirmed twice — statically in eve's compiled channel (EVE_STREAM_TAIL_INDEX_HEADERis set when a tail is resolved) and dynamically by the now-strict probe assertion passing.Disclosed gaps
HIGH — none.
MEDIUM
docs/compatibility.mdrather than silently dropped.aibump is required by eve's peer range, so fixture and eve versions are now coupled on upgrade.LOW
0.24.6and0.27.6rows are retained in the compatibility table as tolerated-but-not-gated, reflecting reality rather than implying continued verification.evt_prefix and 26-character Crockford alphabet rather than importing a shared validator, matching upstream's own shape-only check.