Skip to content

dump -H <dir> changed which channel carries the directory when the ELF dump CLI migrated onto the shared typed executor — recorded, deliberately not reverted (ADR-063 Track 1, 2026-09-05)

Index: Known gaps

Status (re-verified 2026-10-09 at 456989f): POLICY_NOTE. service_dump_pipeline.py:347 splits -H and passes directories as public_header_dirs, which enables provenance tagging. scope_header_dirs is now set only at the dumper.py level (dumper.py:411), as the entry says. The entry records this as deliberate convergence with compare, not a defect.

Found while retiring cli_dump_helpers.perform_elf_dump: the one assertion in its test suite that could not be rehomed, because the behaviour it pinned is no longer the behaviour. perform_elf_dump split its -H list with header_utils.split_public_header_inputs and routed the directory half into dumper.dump's scope_header_dirs — folded into the extraction contract's scope, with ADR-015 declaration-provenance tagging deliberately left off (tests/test_dumper_contract_wiring.py:: test_scope_header_dirs_does_not_enable_provenance_tagging still pins that distinction at the dumper level, which is where it lives). The typed request performs the identical split in service_dump_pipeline. resolve_dump_request but passes the directory as a real public_header_dirs entry, so a plain dump -H include/ now does tag provenance for everything under it. scope_header_dirs has no typed-request field populating it at all any more — api_types.py says as much, where it excludes the field from the dump_manifest mutual-exclusivity set.

Why it stands. This is convergence, not drift: compare has always treated its own -H list this way, and dump's own --public-header/--public-header-dir pair — removed earlier precisely for saying the same thing a second way — is what the new behaviour matches. The original comment on perform_elf_dump's fold gave "so a dump --header <dir> baseline and a live compare --header <dir> candidate of the identical header set agree on scope_fingerprint" as its whole purpose; both commands now reach that agreement through one shared split rather than two hand-maintained ones. Reverting would mean re-introducing a dump-only channel and a dump-vs-compare provenance asymmetry to preserve a behaviour whose own stated goal the convergence already serves.

What is not established. Nobody has measured whether the added provenance tagging changes any real snapshot's classification for a directory operand that contains genuinely private siblings — the analogous hazard the public_include_search_dirs rule exists for (an auto-derived umbrella directory holding a private sibling header). The difference is that -H <dir> is an explicit operand, not an auto-derived one, and declaring a directory public is exactly what typing it means; that is the reasoning, not a measurement. If a real case turns up where it is wrong, the fix is at the split (split_public_header_inputs' contract, shared by both commands), not by restoring a per-command channel. tests/test_dump_cli_execution_behaviors.py:: test_dump_header_directory_reaches_the_extraction_scope pins the current channel with this reasoning attached, so the next reader finds the decision rather than re-deriving it from a diff.