You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
the .deb ships no dign binary — documented dign capsule fetch is command-not-found on a package install #316
The .deb ships no dign binary. dpkg -L on a package install lists only /usr/bin/dig-node.
The verb exists — dig-node capsule fetch works — but every doc, runbook and issue that names dign capsule fetch is wrong for anyone who installed from the package rather than from source. A person following the documented command gets command not found and has no way to know the binary is simply named differently.
Either ship dign in the package (a symlink or a second bin target), or correct every doc that names it. Prefer shipping it: dign is the name used across docs.dig.net and the ecosystem's own issues, so renaming the documentation is the larger and more error-prone change.
Evidence bar
dpkg -L on a built package lists the dign path, asserted by the packaging test rather than by hand.
Lane open. Branch loop/316-317-deb-dign-isolation, draft PR #359 (batched with the sibling ticket — one branch, one PR, closes both).
Worktree: worktrees/dn-316-317. Next action: TDD red — a scripts/tests/deb-contents.test.sh that builds a .deb and asserts dpkg-deb -c lists /usr/bin/dign and that the postinst honours a configure-before-joining marker.
Fixed and proven on a real Ubuntu 24.04 host. Branch loop/316-317-deb-dign-isolation, HEAD 8a93ef2, PR #359 (still draft — gate round pending).
The .deb now installs /usr/bin/dign as a relative symlink to dig-node, not a second copy: both binaries are one-line shims over the same dig_node_service::run and clap derives the displayed program name from arg0, so a symlink is behaviourally identical, cannot drift from its target, and does not double the package.
Measured by building the package from the real 0.149.0 release binary and installing it:
<STORE> <ROOT> space-separated matches the docs; no doc change was needed there.
The BIND hazard is asserted, not assumed./usr/bin/dig is dnsutils' DNS tool. The package ships nothing at that path, and scripts/tests/deb-contents.test.sh fails if it ever does — proven load-bearing by adding ln -s dig-node \/usr/bin/dig and watching the check fire.
The gate is the packaging test asked for: it builds a .deb and asserts against dpkg-deb -c, so it measures the artifact rather than the script's source. Reverting the symlink line makes it fail with the exact ticket text; shipping dign as a copy instead also fails it.
Resume-ready: branch loop/316-317-deb-dign-isolation, HEAD 8a93ef2, PR #359 (draft, awaiting its gate round).
Done — packaging fix, scripts/tests/deb-contents.test.sh (green in CI, log confirms it RAN rather than skipped), SPEC.md + README.md, version 0.151.1 → 0.152.0 with Cargo.lock re-locked, real-host acceptance on Ubuntu 24.04, seven revert-proofs. Companion docs PR: DIG-Network/docs.dig.net#83.
CI: both build .deb jobs (amd64 + arm64) pass, plus Clippy, Rustfmt, CodeQL, commitlint, version-increment and the service-smoke matrix. Zero failures.
Next action: dispatch the gate round over the combined diff, then undraft and squash-merge. Gate tier: one correctness gate — the diff edits no Rust symbol (shell, systemd unit, a new conffile, a new shell test, docs, version), so the blast radius is the package layout, not the node's behaviour.
I found this the expensive way: I edited docs.dig.net/docs/run-a-node/apt.md to say the package installs dign, runs as root and uses the reverse-DNS unit id — and that repo's tests/unit/install-path-lint.test.mjs failed the build, correctly. The apt page documents the other package and was accurate as written. That docs PR is closed not-planned (DIG-Network/docs.dig.net#83).
So the dign gap also exists in apt.dig.net's package, by a different mechanism: its packaging/config.sh sets PKG_dig_store_EXTRA_BINS="digs" but no PKG_dig_node_EXTRA_BINS. Filed as DIG-Network/apt.dig.net#11.
This ticket is still correctly closed by #359, because the fleets and the raw-package route both use this repo's .deb: .claude/scripts/e2e-p2p/mvp6-run.sh:56 fetches dig-node_${VER}_arm64.deb from this repo's releases, and line 57 fetches dign separately — the out-of-band workaround that can now retire.
Activity
MichaelTaylor3d commentedon Aug 25, 2026
Lane open. Branch
loop/316-317-deb-dign-isolation, draft PR #359 (batched with the sibling ticket — one branch, one PR, closes both).Worktree:
worktrees/dn-316-317. Next action: TDD red — ascripts/tests/deb-contents.test.shthat builds a.deband assertsdpkg-deb -clists/usr/bin/dignand that the postinst honours a configure-before-joining marker.MichaelTaylor3d commentedon Aug 25, 2026
Fixed and proven on a real Ubuntu 24.04 host. Branch
loop/316-317-deb-dign-isolation, HEAD8a93ef2, PR #359 (still draft — gate round pending).The
.debnow installs/usr/bin/dignas a relative symlink todig-node, not a second copy: both binaries are one-line shims over the samedig_node_service::runand clap derives the displayed program name from arg0, so a symlink is behaviourally identical, cannot drift from its target, and does not double the package.Measured by building the package from the real 0.149.0 release binary and installing it:
And the documented command reaching a running node from the packaged binary:
<STORE> <ROOT>space-separated matches the docs; no doc change was needed there.The BIND hazard is asserted, not assumed.
/usr/bin/digisdnsutils' DNS tool. The package ships nothing at that path, andscripts/tests/deb-contents.test.shfails if it ever does — proven load-bearing by addingln -s dig-node \/usr/bin/digand watching the check fire.The gate is the packaging test asked for: it builds a
.deband asserts againstdpkg-deb -c, so it measures the artifact rather than the script's source. Reverting the symlink line makes it fail with the exact ticket text; shippingdignas a copy instead also fails it.MichaelTaylor3d commentedon Aug 25, 2026
Resume-ready: branch
loop/316-317-deb-dign-isolation, HEAD8a93ef2, PR #359 (draft, awaiting its gate round).Done — packaging fix,
scripts/tests/deb-contents.test.sh(green in CI, log confirms it RAN rather than skipped), SPEC.md + README.md, version 0.151.1 → 0.152.0 withCargo.lockre-locked, real-host acceptance on Ubuntu 24.04, seven revert-proofs. Companion docs PR: DIG-Network/docs.dig.net#83.CI: both
build .debjobs (amd64 + arm64) pass, plus Clippy, Rustfmt, CodeQL, commitlint, version-increment and the service-smoke matrix. Zero failures.Next action: dispatch the gate round over the combined diff, then undraft and squash-merge. Gate tier: one correctness gate — the diff edits no Rust symbol (shell, systemd unit, a new conffile, a new shell test, docs, version), so the blast radius is the package layout, not the node's behaviour.
MichaelTaylor3d commentedon Aug 25, 2026
Cross-link + a finding that changes the scope of "every doc that names it".
There are two different
.debs that both install a binary calleddig-node, and this ticket's fix reaches only one of them:.deb(fixed by #359)packaging/linux/build-deb.sh(this repo)apt.dig.net/packaging/build-deb.shnet.dignetwork.dig-node.servicedig-node.serviceUser=dig-node(unprivileged)dignI found this the expensive way: I edited
docs.dig.net/docs/run-a-node/apt.mdto say the package installsdign, runs as root and uses the reverse-DNS unit id — and that repo'stests/unit/install-path-lint.test.mjsfailed the build, correctly. The apt page documents the other package and was accurate as written. That docs PR is closed not-planned (DIG-Network/docs.dig.net#83).So the
digngap also exists in apt.dig.net's package, by a different mechanism: itspackaging/config.shsetsPKG_dig_store_EXTRA_BINS="digs"but noPKG_dig_node_EXTRA_BINS. Filed as DIG-Network/apt.dig.net#11.This ticket is still correctly closed by #359, because the fleets and the raw-package route both use this repo's
.deb:.claude/scripts/e2e-p2p/mvp6-run.sh:56fetchesdig-node_${VER}_arm64.debfrom this repo's releases, and line 57 fetchesdignseparately — the out-of-band workaround that can now retire.