puppetsync::setup_project_repos emits the repo-targets summary table twice at session start:
out::message(puppetsync::summarize_repo_targets($repos))
warning(puppetsync::summarize_repo_targets($repos,true))
Once plain via out::message and once colorized via warning() — and since Bolt's default console level shows warnings, both render in every run.
Fix: keep one (probably the colorized out::message form, matching how output_pipeline_results renders the results table) and drop the other.
Not to be confused with the whole-output doubling under --log-level info: that one is Bolt behavior (out::message prints directly to the console and emits an info-level log event, so raising the console level to info renders everything twice) — reproduced 1× at default vs 2× at info on a minimal fixture; nothing puppetsync can cleanly do about it, and it only occurs when verbose output was explicitly requested.
Cosmetic; fine to fold into whatever PR next touches setup_project_repos.pp rather than fixing standalone.
🤖 Generated with Claude Code
puppetsync::setup_project_reposemits the repo-targets summary table twice at session start:Once plain via
out::messageand once colorized viawarning()— and since Bolt's default console level shows warnings, both render in every run.Fix: keep one (probably the colorized
out::messageform, matching howoutput_pipeline_resultsrenders the results table) and drop the other.Not to be confused with the whole-output doubling under
--log-level info: that one is Bolt behavior (out::messageprints directly to the console and emits an info-level log event, so raising the console level toinforenders everything twice) — reproduced 1× at default vs 2× at info on a minimal fixture; nothing puppetsync can cleanly do about it, and it only occurs when verbose output was explicitly requested.Cosmetic; fine to fold into whatever PR next touches
setup_project_repos.pprather than fixing standalone.🤖 Generated with Claude Code