Skip to content

deps(NC-7): dig-gossip is pinned by git rev 51054a41, not a published version — invisible to every index check #350

Description

@MichaelTaylor3d

Task

dig-gossip is consumed by a git rev rather than a published version — an NC-7 violation that no index
check can see.

Pinned at rev 51054a41 in dig-node's manifests.

NC-7 (§3.6, HARD RULE): every crate under modules/crates is a real crates.io-published crate, never
git-dep-only, and consumers depend on the published version, never git = ….

Why this one survived when others were caught

A git-sourced dependency is structurally invisible to the index.crates.io freshness check that §2.4b
prescribes: the registry has nothing to report, so the dep reads as fine forever. That is the same
blind spot that let digstore-chain drift undetected until it was found blocking three epics at once, and
it is now written into CLAUDE.md §2.4b — but the rule only helps if someone looks.

Measured earlier in this ecosystem: a rev-pinned dig-gossip had drifted two minors behind its own
main — rev 51054a41 corresponded to v0.25.0 while main was at v0.30.0 with a dependency cascade
already adopted. Verify the current gap before assuming it is the same one.

And check whether dig-gossip is published at all. A prior measurement found
index.crates.io/di/g-/dig-gossip returning 404 — if that is still true, this is not a bump but a
publish-first job, and the NC-7 remedy is to publish the crate before any consumer can depend on it by
version.

Scope

  1. Measure: is dig-gossip on the index? If yes, at what version, and how far is 51054a41 behind
    main?
  2. If unpublished — publish it (§3.6: new crates ship the publish workflow and a real SemVer version;
    a crate is not done until it is live on crates.io and its consumers have migrated off any git dep).
  3. Then repoint dig-node from the rev to the published version.

Release-first (§4.1) binds: you cannot depend on a version that is not published. If dig-gossip has
its own unpublished dependencies, walk that chain bottom-up and say what it was.

The trap to expect on the repoint

Moving off a git rev is not a no-op even when the code is identical. A rev pin and a version pin
resolve differently, and a caret-compatible sibling can silently leave an old line alive — measured here:
a cargo update -p dig-peer-selector patch bump rewrote 190 lock lines and left two dig-nat lines
and two dig-tls lines
while printing success.

Verify the final state from the resolved Cargo.lock, not the caret declarations, and confirm one line
per family among crates this ecosystem declares. cargo tree -d is not a usable gate here —
chia-bls alone resolves to several lines whose roots are upstream (clvmr, chialisp) and reach no
public DIG signature. Trace a duplicate to its root and report the trace instead.

Note on dig-node's own dep state

§2.4b is currently unsatisfiable in dig-node without a full cascade — five semver-incompatible dig-*
steps (dig-nat 0.18→0.21, dig-tls 0.3→0.4, dig-peer 0.11→0.12, dig-dht 0.11.1→0.12.1,
dig-download 0.19→0.20.4), and dig-wallet is stranded on the chia 0.26 line because the chia umbrella
crate has no 0.36 release (tracked on dig-node#308). Do not attempt that cascade here — this ticket
is the git-rev violation only. Say clearly if the repoint cannot be done without it.

Evidence

  • Verify any publish from the INDEX, not the workflow log — a green publish job is not a published
    crate. curl -sH 'User-Agent: dig-loop' https://index.crates.io/<a>/<b>/<crate>; the header is
    required
    or the response reads exactly like "not published". Use a known-bogus control.
  • Read passed-counts, never ok.

Provenance

Surfaced by the review gate on DIG-Network/dig-node PR #347 (eco#2760 / #253), and independently by the
lane that fixed it — non-gating there, filed here so it is not rediscovered a third time.

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