reviewing the strace slice (PRs #1022 / #1023 / #1024), the dependency-accuracy check nearly produced a wrong verdict. deb-list.py strace on an arm64 host reported:
Depends: libc6 (>= 2.38)
no libunwind8. the slice lists libunwind8_libs as an essential of strace_bins, so on that evidence alone it looks like a textbook over-include (rejection reason #15) -- and readelf -d on the arm64 binary backs it up: libc.so.6 only, plus the string "binary is built without stack tracing".
that conclusion is wrong. strace's Depends: is arch-dependent:
24.04 amd64 Depends: libc6, libunwind8
24.04 arm64 Depends: libc6
25.10 amd64 Depends: libc6, libunwind8
25.10 arm64 Depends: libc6
26.04 amd64 Depends: libc6, libtinfo6, libunwind8
26.04 arm64 Depends: libc6, libtinfo6
strace's libunwind-based stack unwinding (-k) is compiled in on x86 only; the arm64 build ships without it. so libunwind8_libs is a legitimate dep on amd64 and dead weight on arm64 -- it's arch-gated, not over-included.
root cause (the skill gap)
deb-list.py inspects a single arch -- whatever the host / default is (arm64 here). the review-slice guidance leans on it and on pkg-deps for dependency accuracy, but never warns that:
Depends: can differ per arch, so a single-arch deb-list.py run is not sufficient evidence to call a dep spurious (or complete).
- the
pkg-deps CI bot runs on amd64, so its output and a deb-list.py run on an arm64 host can legitimately disagree -- and that disagreement is signal, not noise.
on an arm64 host the trap is symmetric and cuts both ways: you can wrongly flag an amd64-only dep as over-included, or miss an amd64-only dep that's genuinely absent from the slice.
shared/CHISEL.md already lists "Essential syntax" and dep changes under cross-release differences, and the arch-gated-essentials section covers how to express per-arch deps -- but nothing tells the reviewer to look across arches before judging a dep.
suggested fixes
- review-slice.md, Dependency Validation: add a line -- before calling a dep over-included or missing, check
Depends: across all release arches, not just the host arch. per-arch differences mean arch-gating (v3 essential-as-map, or v3-essential: on v1/v2), not a bug.
- note explicitly that
pkg-deps CI runs on amd64, so a host-arch deb-list.py that disagrees with it is expected when a dep is arch-specific -- reconcile the two rather than trusting either alone.
deb-list.py: either default to reporting Depends: for all arches, or add an --arch all / arch-loop mode, so the deterministic pass surfaces per-arch deltas instead of hiding them behind the host arch.
reviewing the strace slice (PRs #1022 / #1023 / #1024), the dependency-accuracy check nearly produced a wrong verdict.
deb-list.py straceon an arm64 host reported:Depends: libc6 (>= 2.38)
no
libunwind8. the slice listslibunwind8_libsas an essential ofstrace_bins, so on that evidence alone it looks like a textbook over-include (rejection reason #15) -- andreadelf -don the arm64 binary backs it up:libc.so.6only, plus the string"binary is built without stack tracing".that conclusion is wrong. strace's
Depends:is arch-dependent:24.04 amd64 Depends: libc6, libunwind8
24.04 arm64 Depends: libc6
25.10 amd64 Depends: libc6, libunwind8
25.10 arm64 Depends: libc6
26.04 amd64 Depends: libc6, libtinfo6, libunwind8
26.04 arm64 Depends: libc6, libtinfo6
strace's libunwind-based stack unwinding (
-k) is compiled in on x86 only; the arm64 build ships without it. solibunwind8_libsis a legitimate dep on amd64 and dead weight on arm64 -- it's arch-gated, not over-included.root cause (the skill gap)
deb-list.pyinspects a single arch -- whatever the host / default is (arm64 here). the review-slice guidance leans on it and onpkg-depsfor dependency accuracy, but never warns that:Depends:can differ per arch, so a single-archdeb-list.pyrun is not sufficient evidence to call a dep spurious (or complete).pkg-depsCI bot runs on amd64, so its output and adeb-list.pyrun on an arm64 host can legitimately disagree -- and that disagreement is signal, not noise.on an arm64 host the trap is symmetric and cuts both ways: you can wrongly flag an amd64-only dep as over-included, or miss an amd64-only dep that's genuinely absent from the slice.
shared/CHISEL.mdalready lists "Essential syntax" and dep changes under cross-release differences, and the arch-gated-essentials section covers how to express per-arch deps -- but nothing tells the reviewer to look across arches before judging a dep.suggested fixes
Depends:across all release arches, not just the host arch. per-arch differences mean arch-gating (v3 essential-as-map, orv3-essential:on v1/v2), not a bug.pkg-depsCI runs on amd64, so a host-archdeb-list.pythat disagrees with it is expected when a dep is arch-specific -- reconcile the two rather than trusting either alone.deb-list.py: either default to reportingDepends:for all arches, or add an--arch all/ arch-loop mode, so the deterministic pass surfaces per-arch deltas instead of hiding them behind the host arch.