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
Dependency-gate guard cannot distinguish PyPCAP from PCAP_CT, so a wrong install is a false pass #762
tests/_dependency_gates.py's liveness guard cannot tell PyPCAP from PCAP_CT, so a CI job
installing one while reaching the other's gate is reported as satisfied rather than as a gap.
Both distributions install a top-level pcap module, and extras_providing() resolves either
import name to both extras.
Doctoring one install line each way, against the real guard:
doctored job
reaches
guard says
unexplained gaps workflow-wide
pypcap-parity installs PCAP_CT
4 HAS_PYPCAP gates
no gap
0
engine-tests installs PyPCAP
1 HAS_PCAP_CT gate
no gap
0
It is blind in both directions. Liveness still passes in both worlds because HAS_PYPCAP's
exclusion lists integration+gate, which are real gaps — so the wrong non-gap is never examined.
Expected behavior
A job installing PCAP_CT should be reported as not satisfying HAS_PYPCAP, and vice versa.
Additional context
The conflation is not at the flag level. flag_requirements() resolves them apart correctly — ('tests/foundation/engines/test_new_engine_parity_runtime.py', 'HAS_PYPCAP') -> {'pcap'} and ('tests/foundation/engines/test_pcap_ct_engine.py', 'HAS_PCAP_CT') -> {'pcap._pcap'}. It is extras_providing() one level down that collapses both.
Proposed fix, same shape as the existing machinery and no per-distribution model needed: assert that
every (job, gate) pair deemed satisfied is satisfied through an import name with exactly one
providing extra, else require an explicit allowlist entry. That fails loudly on both rows above.
Found while cross-reviewing #755; the guard itself landed in #745.
Being fixed in #755 rather than in its own PR: #755 is what adds the two jobs (engine-tests, pypcap-parity) whose gates this falsely clears, and it already owns tests/_dependency_gates.py, so a separate PR would only contend on the same file.
Activity
JarryShaw commentedon Sep 25, 2026
Being fixed in #755 rather than in its own PR: #755 is what adds the two jobs (
engine-tests,pypcap-parity) whose gates this falsely clears, and it already ownstests/_dependency_gates.py, so a separate PR would only contend on the same file.ci: add a per-engine test job for Scapy, PyShark, PyPCAPFile and pcap-ct
ci: add a per-engine test job for Scapy, PyShark, PyPCAPFile and pcap-ct
ci: add a per-engine test job for Scapy, PyShark, PyPCAPFile and pcap-ct
ci: add a per-engine test job for Scapy, PyShark, PyPCAPFile and pcap-ct
ci: add a per-engine test job for Scapy, PyShark, PyPCAPFile and pcap-ct