Skip to content

ciris-client 0.5.206: the floor already resolves it — but the VENDORING §1 emitter pin is twelve releases stale #555

Description

@emooreatx

ciris-client 0.5.206 is published — and for the node, there is less to do than usual

pyproject.toml:85 declares ciris-client>=0.5.203,<0.6. That range already resolves 0.5.206, so nothing has to change for a node to pick it up. This issue is two decisions and one overdue chore, stated plainly rather than as work manufactured for its own sake.

One caveat first: 0.5.204 and 0.5.205 do not exist on PyPI. Both were tagged, built every wheel, and then failed the release gate on a vendoring digest, so nothing was uploaded; their GitHub releases carry mobile assets only. Anything that pins either exactly will not resolve. 0.5.206 supersedes both.


1. What is actually in it for a node attachment

Most of 0.5.204–0.5.206 is agent-facing (the setup-complete request body) or harness-facing. The part that touches node territory is CIRISClient#40:

The desktop client now waits for :8080, :4243 and :4242 to be bindable — a real bind(), not a pid check — before it launches ciris-server, and again after it stops one. The trigger was a factory reset leaving the previous backend holding :4242/:4243, so the next boot died on Edge transport ports are held by another process. Two measured facts from the agent side shaped it: SIGTERM is accepted and never acted on (CIRISAgent#1152), and SIGKILL releases the ports roughly 2s after the pid is gone.

For you this means: if a node is slow to release its ports, the client now says which ports, and what to run, instead of letting Edge init fail in your words. If you think the client should be asking the node to stop over /v1/system/shutdown rather than signalling the process it launched, say so — I deliberately did not add that, because it reaches into a backend the app may not own.

The /health contract from CIRISServer#548 is unchanged and still relied on exactly as you settled it: 200 means serving, "starting" has no producer, NODE_ONLY_ENDPOINT polls :4243/health.

2. Should the floor move to >=0.5.206?

My recommendation: no, leave >=0.5.203. A floor should encode a dependency, and the node does not depend on anything added since .203 — the setup-complete fix is the agent's surface, and the port wait is client-side behaviour a node cannot observe. Raising it would only make older-but-fine clients unresolvable.

Raise it only if you want the port-release behaviour guaranteed for a bundled desktop node, which is a product call rather than a technical one. Either way, no code change.

3. Nothing to do about localization

Recording this because the compat matrix looks like it says otherwise. The 0.5.203 row states locale_bundle.keys: 3907; 0.5.204 onward states 3923. That is a corrected measurement, not sixteen new ids — the bundle is byte-identical in key set at both tags (3923 flattened keys, 29 languages, verified by packaging/localization_bundle.py). The 3907 was stale. No new message ids since .203, so no --verify pass is needed on your mirror.

4. The actual ask: a §8 pull is twelve releases overdue

client/VENDORING.md §1 records:

Upstream Last merged state Pulled
CIRISAI/CIRISServer v0.5.188 (1b4f377) 2026-08-24

You are at v0.5.200. This is not cosmetic bookkeeping: that recorded ref is what CI checks out as .emitters, and five of the twelve localization checks grade our bundles against the Rust that emits the ids — pinned to the merged state so the grade is against what this tree was reconciled with, not whatever main holds. So any message id your emitters have gained since v0.5.188 is currently graded by nothing on either side.

The current run is honest about its denominator (244 emitted id(s)), which is why this is visible rather than a silent pass. If ids were added in .189.200, they are unscored today.

The pull is a three-way merge, not a wipe — procedure in client/VENDORING.md §8. Happy to drive it from our side; what I need from you is whether v0.5.200 is the right target or you would rather I wait for a specific release.

What would settle this

  1. A decision on the floor (§2) — I expect "leave it".
  2. Confirmation on §1 whether the client should ask a node to stop rather than signal it.
  3. A target ref for the §8 pull (§4), which is the only item here with a real gap behind it.

Compat row: compat/matrix.json 0.5.206node_min unchanged at 0.5.168, node_max_tested 0.5.198.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Db9uHKMfhnANvagjWSo59x

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions