Skip to content

No peer-readable route for a node's self-report: infra:attest confers the authority, no family carries it #97

Description

@emooreatx

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:

  1. 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.
  2. 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.
  3. 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

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