Skip to content

0.3.56: adopt ciris-server 0.5.190 - #64

Merged
emooreatx merged 2 commits into
mainfrom
chore/adopt-server-0.5.189
Aug 28, 2026
Merged

0.3.56: adopt ciris-server 0.5.190#64
emooreatx merged 2 commits into
mainfrom
chore/adopt-server-0.5.189

Conversation

@emooreatx

Copy link
Copy Markdown
Contributor

Pin v0.5.188v0.5.189 (ca4896b). Substrate follows: edge v18.10.0 + persist v38.6.0 + verify v13.6.1.

Why this one matters here

The duplicate storm is fixed (CIRISPersist#771). This node's own canonical peer refused 7,536 attestation envelopes in six hours — 428 distinct rows re-sent up to 82× each — because put_attestation reported an already-held row as federation_backend, a backend error. The sender never learned the row had landed, so it retried forever: 58% of all refusals on that node, and pure churn on the transport this crate exists to watch.

The actor/node key split (CC 3.4.7.3, CIRISConstitution#95). ciris-status is a fabric node, so this is its identity too. A node's substrate identity used to be whatever key the host handed it — in the embedded fold, an agent-typed key. persist's agency gate constrains only a node-only recipient, so the fusion didn't blur "infrastructure must not have agency", it switched the rule off. A node now mints its own <alias>-node key, and provisioning is a readiness gate.

Worth knowing for an operator of this node

edge v18.10.0 splits the advertised id from the transport-identity storage key (CIRISEdge#541). Coupling those across an identity move makes a keystore-backed deployment miss its stored entry, regenerate, and silently change its destination hash — invalidating every saved peer route, with no error anywhere.

Gates

clippy clean (--all-targets -D warnings) · 110 tests · fmt clean

🤖 Generated with Claude Code

https://claude.ai/code/session_01L6nEV7rs9P6YS6TvL2FUUV

emooreatx and others added 2 commits August 27, 2026 07:21
0.3.56. Pin v0.5.188 → v0.5.189 (ca4896b); substrate follows to edge v18.10.0 +
persist v38.6.0 + verify v13.6.1.

Two things in this cut land directly on ciris-status, which is why the record
above the pin says so rather than reciting a changelog.

THE DUPLICATE STORM IS FIXED (CIRISPersist#771). This node's own canonical peer
refused 7,536 attestation envelopes in a six-hour window — 428 distinct rows
re-sent up to 82 times each — because `put_attestation` reported an already-held
row as `federation_backend`, a backend ERROR. The sender never learned the row
had landed, so it retried forever: 58% of all refusals on that node, and pure
churn on the transport this crate exists to watch. persist v38.6.0 returns
`AlreadyHeld` and edge routes it to `ApplyOutcome::Duplicate` — counted, not
swallowed.

THE ACTOR/NODE KEY SPLIT (CC 3.4.7.3). ciris-status IS a fabric node, so this is
its identity too. A node's substrate identity used to be whatever key the host
handed it; in the embedded fold that is an `agent`-typed key, so the transport
identity, `self_key_id` and the de-admission self all named a key carrying
agency. persist's agency gate constrains only a NODE-ONLY recipient, so the
fusion did not blur "infrastructure must not have agency" — it switched the rule
off. A node now mints its own `<alias>-node` key and provisioning is a readiness
gate: edge must not start on a half identity.

Also in the substrate bump: edge v18.10.0 splits the ADVERTISED id from the
transport-identity STORAGE key (CIRISEdge#541). Worth knowing for an operator of
this node specifically — coupling those across an identity move makes a
keystore-backed deployment miss its stored entry, regenerate, and silently change
its destination hash, invalidating every saved peer route with no error anywhere.

Gates: clippy clean (--all-targets -D warnings), 110 tests, fmt clean.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L6nEV7rs9P6YS6TvL2FUUV
Supersedes the 0.5.189 pin this branch carried and the mechanical
`autorepin/ciris-server-v0.5.190` branch, which bumped the version and the tag
without touching the record above the pin. Both changes in one place, so the
record does not skip a version.

0.5.189 is what this crate has the stake in — the duplicate storm it was watching
(7,536 refusals in six hours on its own canonical peer, 428 rows re-sent up to
82x) and the actor/node key split, which is ciris-status's identity too because
ciris-status IS a fabric node.

0.5.190 rides along and changes nothing operationally here: it is the Android
install fix. ciris-status installs the manylinux wheel and never sees the
universal one, so that cut is inherited rather than consumed. Recorded anyway,
because the pin moved and a record that skips a version is a record that has
started drifting — which is the exact failure the block above this pin already
documents at v0.5.187, where the record had drifted to v0.5.117 while the pin
read v0.5.187.

Gates: clippy clean (--all-targets -D warnings), 110 tests, fmt clean.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L6nEV7rs9P6YS6TvL2FUUV
@emooreatx emooreatx changed the title 0.3.56: adopt ciris-server 0.5.189 — the mesh reliability cut 0.3.56: adopt ciris-server 0.5.190 Aug 27, 2026
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.

@emooreatx
emooreatx merged commit 1e3795e into main Aug 28, 2026
3 checks passed
@emooreatx
emooreatx deleted the chore/adopt-server-0.5.189 branch August 28, 2026 01:08
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