Description
The loop6 reference audit found MissingConfig and MissingCredential are siblings of IncompleteConfig in collector/config.py:42-51. The CLI configuration handler catches MissingCredential only, so missing identifiers can produce a traceback and exit1 rather than the intended diagnostic/exit2. Current operator docs disclose the exception instead of claiming uniform behavior. Fix the CLI boundary without performing any live reads or hiding unexpected programming errors.
Acceptance Criteria
- #1 Incomplete required identifiers and credentials consistently produce a concise configuration diagnostic and intended exit2 before any network or publication
- #2 Unexpected runtime errors are not swallowed as configuration failures
- #3 An offline CLI reproduction fails against the old behavior and proves the corrected public exit contract
Definition of Done
- #1 just test
- #2 just tf-validate
- #3 just check-identifiers and just no-em-dashes both return clean
Implementation Plan
Loop7 frozen packets: bounded implementation or AC1 research; public-boundary proof, offline gate and CodeRabbit before landing, exact landed CI. Root security review/guard landing, research staff GET probe and conditional reserve decision, integrated review, stable release and dev-only rollout proof. Tracker remains root-owned.
Final Summary
CLI catches shared IncompleteConfig base (both subclasses) before metadata/source/publication calls: actual cleared-environment subprocess missing identifier exits 2 with one JSON stderr record and no stdout. Unexpected error propagates unchanged. Three added boundary tests and two publication-guard tests updated because S-EXIT requires config validation before metadata. Failing-first watched missing identifier traceback/exit 1. Landed b073f9182dc73613005e32b4d3d694dbdd84a613, exact CI 36874121093 all four jobs successful; 57 targeted tests, final just check, completed CodeRabbit zero findings. No live calls.