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 two rule-one residuals are held in prose; the conformance harness never probes them #127
ADR-0006 calls rule one hard: accepted(compose2pod) ⊆ accepted(docker), no exceptions. #87 documents two exceptions, parked as a deliberate ruling because closing them fights the validation design.
This issue is not about closing them. It is about the fact that nothing measures them.
The harness looks like it covers this, and does not
corpus/depends_on_unknown.yaml puts the ghost dependency on the target service, where startup_order's closure walk catches it. The residual needs it on a service outside the closure. No corpus file does that, and the generated matrix probes one key on one service, so it cannot reach two.
Measured just now, docker compose config v5.1.2 against the same YAML given to both oracles:
ghost docker: REJECT (service "other" depends on undefined service "ghost": invalid compose project)
cycle docker: REJECT (dependency cycle detected: a -> b -> a)
ghost compose2pod: ACCEPT <- forbidden combination
cycle compose2pod: ACCEPT <- forbidden combination
services:
app: { image: nginx } # the target; its closure never reaches `other`other:
image: nginxdepends_on: [ghost]
The reason these are not in the corpus is obvious once stated: assert_rule raises on exactly this combination, so adding either file turns the suite red. A known breach of the hard rule therefore survives only as prose in an ADR and an issue body, which is the same position rule two was in before #109.
What would close it
A residual catalogue, mirroring _OVER_REJECTIONS but for the forbidden direction: a corpus_residual/ directory whose documents are expected to produce it, probed by their own test and printed in the terminal summary rather than failing.
Two properties matter:
assert_rule keeps raising for everything else. The hard rule stays hard; only the documents in that directory are exempt, and each one is a file someone had to add deliberately.
The test fails when a residual closes. If compose2pod starts rejecting one of these, the row is wrong and the file should go. A catalogue that merely tolerates would go stale silently, which is the failure mode this whole harness exists to prevent.
It does not detect a residual widening — a third false green of the same shape would be caught by assert_rule only if something probes it, and that remains the matrix's limitation rather than this mechanism's.
Activity