Skip to content

SPEC 6.2 mandates a store-granularity announce without stating that such a record is unbondable by construction #520

Description

@MichaelTaylor3d

Task

dig-node-core/SPEC.md §6.2 mandates announcing two records per held capsule — store
granularity and capsule granularity — and says nothing about the fact that one of those two can
never be collateral-verified.
State it, so a later reader does not measure it and file it as a
defect.

The structural fact

  • §6.2 (crates/dig-node-core/SPEC.md:659-662): "the node announce_providers it at store
    granularity
    (ContentId::store(store_id)) AND capsule granularity
    (ContentId::capsule(store_id, root)) — two records per held capsule."
  • crates/dig-node-service/src/mirror/pointers.rs:113:
    if dig_dht::ContentId::capsule(store, root) != *content { return None; }

So a ContentId::Store record never carries an unverified_mirror_coin_id, and structurally
never could: ContentId::Store { store_id } names no root, while a mirror coin bonds
(store, root, owner, epoch).

Why this needs writing down

Roughly half of all provider records ecosystem-wide are pointer-less by construction, published
by fully current software — not by old nodes, and not transiently. Anyone measuring collateral
coverage without this fact concludes the pointer mechanism is half broken. It is not; the store
record is a discovery aid and the capsule record is the one that carries a bond.

This is the fact that refuted the original vacuity argument on the parent ticket, and it is
currently written in neither SPEC.

Scope

One paragraph in crates/dig-node-core/SPEC.md §6.2. Normative text only — no behaviour change,
no announce change.
The two-record announce is correct and stays.

The mirror image of this statement lands in dig-dht's SPEC §6.9 under
DIG-Network/dig-dht#28; the two must agree (§4.1/§4.2 layering: SPEC.md
<-> SYSTEM.md <-> docs must not contradict).

Acceptance

§6.2 states that the store-granularity record is unbondable by construction, why, and that this is
correct rather than a gap. A reader measuring pointer coverage can tell the expected number from the
spec alone.

Links (both directions, per the no-orphans rule)

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