There is no peer-readable way for a node to report on itself
Filing this as one missing capability rather than three defects, because three
implementation attempts each fixed the named problem and hit a different structural
wall. The walls are the finding.
What was attempted, and what stopped each
1. Automate the existing OP_SELF_SHED declaration. Refused at the write
door: check_admin_action_attribution requires a non-empty delegation_id on any
admin_action: event, because an admin action is a governance act by a person who
can be held to it. A node has no delegation. Correct — and this one should stay
refused.
2. A node-authored hard_case: observation with an expiry. Admitted, but
HardCaseEvent is on no replication plane (edge carries Attestation, Key,
IdentityOccurrence, TransportDestination, Community, CommunityMembershipRevocation).
No peer can ever receive it.
3. A short-lived config:load:v1 attestation (CC 3.1 config:{scope}, CC
3.4.5 self-or-owner, witness_relation: self, signed expires_at). This is the
right semantics — CC 3.1 says a config row is "only ever about the emitting
node" — and it still cannot reach a peer usefully, for three independent reasons:
- Scope.
config:* is normatively cohort_scope: self (CIRISServer#324), and
self scope is structurally invisible — it suppresses holds_bytes precisely so
config is never directory-advertised or replicable. The namespace is either
compliant and unreadable by peers, or federation-scoped and in breach.
- Trust set. A receiving peer's composer pins
accord_holder and steward
only; an ordinary node key screens as NotInTrustSet before its fields are read.
- Composition weighting. Self-attestations are weighted by live count, so a
node that renews to stay current halves its own signal (one live row 0.5, two
overlapping 1/3) — continued pressure makes the claim quieter.
The shape of the gap
The constitution supports a node speaking about itself. infra:attest is
conferred on every node — "vouch as the delegator's infrastructure" — and Clause
E has a node "sign its own refusal without new authority." CC 3.4.5 gives
config:{scope} a self-or-owner emitter rule. The authority is not in question.
What is missing is a route: a family that is (a) authored by the node about
itself, (b) replicable to peers, and (c) composable by a peer that has not
individually pinned that node. Today (a) and (b) are mutually exclusive, and (c)
has no path at all.
Why it matters beyond load
Load is the instance we hit; the shape is general. Anything a node alone can
observe about itself and a peer would act on takes the same route: I am at
capacity, my clock is unreliable, my storage is failing, I am shutting down
in 30s. Each is a self-report only the node can make, and none is expressible
peer-readably today. As the mesh grows, the case for peers reacting to a node's own
account of itself gets stronger, not weaker.
What we would need decided
Roughly, in descending order of scope:
- Does a
config:* sub-namespace exist that permits federation visibility —
or does a peer-readable self-report belong in a different family entirely?
Either answer is fine; what does not work is federation-scoping a namespace whose
invariant is invisibility.
- Is
infra:attest sufficient for composition? A peer that trusts a node
enough to replicate from it arguably already has grounds to weight that node's
claims about itself — but TrustSet today pins only accord holders and
stewards, and nothing derives trust from the infra:* grant.
- How is a renewed self-report weighted? A renewing claim should not decay
simply for being renewed. supersedes is the obvious primitive; whether a
self-report should use it, or whether composition should count distinct
subjects rather than distinct rows, is a policy question rather than an
implementation one.
We are not blocked: CIRISServer 0.5.194 already has each node pacing its own
optional work under measured contention, which needs no authority and reaches no
peer. This is about the half a peer can act on.
Related: CIRISServer#504 (the withdrawn attempt, with the evidence) ·
CIRISServer#324 (config self-scope) · CIRISConstitution#96 ·
CIRISPersist#777/#778/#779
There is no peer-readable way for a node to report on itself
Filing this as one missing capability rather than three defects, because three
implementation attempts each fixed the named problem and hit a different structural
wall. The walls are the finding.
What was attempted, and what stopped each
1. Automate the existing
OP_SELF_SHEDdeclaration. Refused at the writedoor:
check_admin_action_attributionrequires a non-emptydelegation_idon anyadmin_action:event, because an admin action is a governance act by a person whocan be held to it. A node has no delegation. Correct — and this one should stay
refused.
2. A node-authored
hard_case:observation with an expiry. Admitted, butHardCaseEventis on no replication plane (edge carries Attestation, Key,IdentityOccurrence, TransportDestination, Community, CommunityMembershipRevocation).
No peer can ever receive it.
3. A short-lived
config:load:v1attestation (CC 3.1config:{scope}, CC3.4.5 self-or-owner,
witness_relation: self, signedexpires_at). This is theright semantics — CC 3.1 says a config row is "only ever about the emitting
node" — and it still cannot reach a peer usefully, for three independent reasons:
config:*is normativelycohort_scope: self(CIRISServer#324), andself scope is structurally invisible — it suppresses
holds_bytesprecisely soconfig is never directory-advertised or replicable. The namespace is either
compliant and unreadable by peers, or federation-scoped and in breach.
accord_holderandstewardonly; an ordinary node key screens as
NotInTrustSetbefore its fields are read.node that renews to stay current halves its own signal (one live row 0.5, two
overlapping 1/3) — continued pressure makes the claim quieter.
The shape of the gap
The constitution supports a node speaking about itself.
infra:attestisconferred on every node — "vouch as the delegator's infrastructure" — and Clause
E has a node "sign its own refusal without new authority." CC 3.4.5 gives
config:{scope}a self-or-owner emitter rule. The authority is not in question.What is missing is a route: a family that is (a) authored by the node about
itself, (b) replicable to peers, and (c) composable by a peer that has not
individually pinned that node. Today (a) and (b) are mutually exclusive, and (c)
has no path at all.
Why it matters beyond load
Load is the instance we hit; the shape is general. Anything a node alone can
observe about itself and a peer would act on takes the same route: I am at
capacity, my clock is unreliable, my storage is failing, I am shutting down
in 30s. Each is a self-report only the node can make, and none is expressible
peer-readably today. As the mesh grows, the case for peers reacting to a node's own
account of itself gets stronger, not weaker.
What we would need decided
Roughly, in descending order of scope:
config:*sub-namespace exist that permits federation visibility —or does a peer-readable self-report belong in a different family entirely?
Either answer is fine; what does not work is federation-scoping a namespace whose
invariant is invisibility.
infra:attestsufficient for composition? A peer that trusts a nodeenough to replicate from it arguably already has grounds to weight that node's
claims about itself — but
TrustSettoday pins only accord holders andstewards, and nothing derives trust from the
infra:*grant.simply for being renewed.
supersedesis the obvious primitive; whether aself-report should use it, or whether composition should count distinct
subjects rather than distinct rows, is a policy question rather than an
implementation one.
We are not blocked: CIRISServer 0.5.194 already has each node pacing its own
optional work under measured contention, which needs no authority and reaches no
peer. This is about the half a peer can act on.
Related: CIRISServer#504 (the withdrawn attempt, with the evidence) ·
CIRISServer#324 (config self-scope) · CIRISConstitution#96 ·
CIRISPersist#777/#778/#779