Skip to content

chore: advance eve compatibility baseline to 0.29.4 - #28

Merged
ncosentino merged 1 commit into
mainfrom
chore/advance-eve-baseline
Aug 1, 2026
Merged

chore: advance eve compatibility baseline to 0.29.4#28
ncosentino merged 1 commit into
mainfrom
chore/advance-eve-baseline

Conversation

@ncosentino

Copy link
Copy Markdown
Owner

Advances the pinned compatibility baseline from eve 0.27.6 (message-stream protocol 19) to eve 0.29.4 (protocol 20), 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:

Both only exist from eve 0.28.0. Against a 0.27.6 server 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.6 accepted includeTailIndex=1 but never reported x-eve-stream-tail-index, so that path was unreachable against a real server.

Upstream risk review

Read the full eve changelog for 0.27.70.29.4. There are no major/breaking sections — only minor and patch. The one entry marked "Breaking" (7ff4f77, in 0.28.0) is a TypeScript type change (MessageStreamEvent becoming canonical, HandleMessageStreamEvent kept as a deprecated alias); it is additive on the wire and does not affect a .NET client.

The 0.29.0 minor changes remove CLI surface (/channels, eve channels add, eve traceeve traces). The fixture only invokes eve build and eve start, both verified working.

Changes

  • Fixture pinned to eve@0.29.4. ai moves 7.0.347.0.42 to satisfy eve's ^7.0.38 peer range. The shipped package remains dependency-free — this is test-fixture-only.
  • EveProtocol.ReferenceEveVersion0.29.4, MessageStreamVersion20.
  • README reference commit → 85c1dd7 (the eve@0.29.4 tag), which is what the eve-client-upstream-radar skill parses, so future parity scans compare from the new baseline.
  • Probe assertions flipped from absent to required:
    • every event of a turn carries an evt_-prefixed Crockford base32 ULID, and no identifier repeats;
    • the approval-gated pause arrives as tool-approvalEveInputRequestKind.ToolApproval;
    • a real bounded catch-up read is verified against the durable tail header instead of asserting the header is missing.
  • run-client-probe.mjs reads 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.md records 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.
  • Documentation updated across README.md, AGENTS.md, docs/index.md, docs/compatibility.md, docs/streaming.md, docs/attachments-and-input.md, and docs/authentication.md.

Validation

Everything below was run on this branch.

Gate Result
dotnet format --verify-no-changes clean
dotnet build -c Release 0 warnings, 0 errors
dotnet test -c Release 100 passed, 0 failed, 0 skipped
npm ci + npm run test:client (real eve 0.29.4) passed
mkdocs build --strict built
python -m unittest discover -s scripts/tests 6 passed
Invoke-Pester (upstream radar) 16 passed, 0 failed
radar baseline parse EveProtocol.cs = 0.29.4, README = 0.29.4 @ 85c1dd7… — consistent
dotnet pack + validate-packages.ps1 validated 0.1.0-alpha-0002-g455c5a97a3
test-package-consumer.ps1 clean consumer built

The flip was empirically driven, not assumed. Running the old probe unchanged against 0.29.4 failed with:

The text turn produced 'session.started' with identifier 'evt_01KYXGNEJ9H98126J96N1NDNDS',
but eve 0.27.6 emits stream protocol 19, which stamps none.

That is the real server proving meta.id projection works end to end. Tail-index support was likewise confirmed twice — statically in eve's compiled channel (EVE_STREAM_TAIL_INDEX_HEADER is set when a tail is resolved) and dynamically by the now-strict probe assertion passing.

Disclosed gaps

HIGH — none.

MEDIUM

  • The CI gate no longer exercises protocol-19 tolerance against a real server. Absent identifiers and absent discriminators are still handled, and are covered by contract tests, but there is no longer a live protocol-19 server in CI. Keeping one would mean running two fixtures; that tradeoff is documented in docs/compatibility.md rather than silently dropped.
  • The fixture ai bump is required by eve's peer range, so fixture and eve versions are now coupled on upgrade.

LOW

  • 0.24.6 and 0.27.6 rows are retained in the compatibility table as tolerated-but-not-gated, reflecting reality rather than implying continued verification.
  • The probe hardcodes the evt_ prefix and 26-character Crockford alphabet rather than importing a shared validator, matching upstream's own shape-only check.

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
@ncosentino
ncosentino enabled auto-merge (squash) August 1, 2026 02:21
@ncosentino
ncosentino merged commit 6c9786c into main Aug 1, 2026
10 checks passed
@ncosentino
ncosentino deleted the chore/advance-eve-baseline branch August 1, 2026 02:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant