softwaremill / softwaremill/chimp

T11 - client automatic era detection

Open
#249 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

2026-07-28 version support
Dominant language
Scala
Stars
102
Forks
10
Avg merge
1d 2h
Merged PRs (30d)
16

Description

Target branch: 2026-07-28-protocol-support

Requires:

A chimp client with no pinned protocol version works against 2026-07-28 servers and 2025-xx servers without configuration. Users who upgrade chimp and talk to a legacy server see no change.

Policy

  • The client has a version policy, automatic detection is the default. A fixed version, as today, is still available and skips detection.
  • With a fixed stateless version the client behaves as in T10. With a fixed legacy version it behaves as today.

Detection

  • Over HTTP the first request is server/discover. A discover result, or a recognised 2026-07-28 error such as -32022, means the server is modern. Any other outcome, including a 400, 404 or 405 whose body is not a recognised modern error, means the server is legacy.
  • Over stdio the first request is server/discover as well. A timeout also means legacy.
  • The decision never depends on one specific error code.
  • After a modern decision the client uses the stateless wire and negotiates the version on -32022 as in T10. After a legacy decision the client sends initialize with the highest legacy version chimp supports.
  • The decision is made once per client and reused for its lifetime.

Errors

  • A modern server that shares no version with chimp fails the client with an error that names both version lists.
  • A legacy server that rejects initialize fails the client as it does today.

Coverage

  • The rules above hold for the sync and streaming clients, over HTTP and stdio, on ZIO, Ox and Pekko.
  • The existing integration tests against the legacy everything server pass with the default policy and no other change.
  • Unit tests cover every row of the spec compatibility matrix that involves a chimp client: modern, legacy and dual-era client against modern and legacy servers.

Spec:

Conformance scenarios that must pass after this task: none new.

Docs: yes.

  • docs/client/protocol.md: the detection rules, what the client sends first, and how to pin a version.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with T10 (issue 248) and trace the client’s server/discover flow across HTTP and stdio, including the sync and streaming clients and ZIO, Ox, and Pekko implementations. Use the compatibility matrix to organize unit coverage, then run the existing legacy everything-server integration tests with the default policy. Done includes the required detection behavior, version errors, compatibility coverage, and updates to docs/client/protocol.md.

Written by the indexing model from the issue text.

Assessment

Tech stack
scala
Domain
api, networking
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
38/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.