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)
Task
dig-node-core/SPEC.md§6.2 mandates announcing two records per held capsule — storegranularity 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
crates/dig-node-core/SPEC.md:659-662): "the nodeannounce_providers it at storegranularity (
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::Storerecord never carries anunverified_mirror_coin_id, and structurallynever 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 underDIG-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)