- rename internal/pdbmux to internal/puppetdb
- fetch facts with one GET /pdb/query/v4/facts AST query per node
- drop the per-node fallback route and its two response shapes
- rename --pdb to --puppetdb, CATALOG_DIFF_PDB to CATALOG_DIFF_PUPPETDB and
pdb_url to puppetdb_url
- describe the fact source generically in the README and AGENTS.md
The capture carried a production certname, real role and class names and
internal paths into a public repo.
- replace hostnames, class names and paths with fake equivalents
- keep the shape under test: catalog envelope, string version, null
code_id, resources with and without parameters and file/line, the
exported and sensitive_parameters cases
- document the range of --retry and --timeout
Real PuppetDB answers /factsets/<certname> with an array; the fallback
decoded a bare object, so it only worked against pdbmux's own divergent
response.
- decode an array of factsets, picking the requested certname
- keep accepting a single bare factset object
- drop and report a fact record that will not decode instead of failing
the whole fetch
- fail only when nothing in the response decodes
A negative --retry skipped the compile loop, leaving a nil error inside
exitError that panicked when printed.
- reject a negative or oversized --retry and a non-positive --timeout as
usage errors (exit 3)
- print an exit code when exitError carries no inner error
- cap the backoff shift so a large --retry cannot overflow
- cancel the sibling compile on the first failure, and do not report that
cancellation as the cause
- report a context cancellation during the retry backoff instead of the
stale compile error
- unwrap the {"catalog": ...} envelope, still accepting a bare catalog
- report an environment-less response as a protocol mismatch, not an ENC problem
- make Resource.Line a pointer and Resource.Params() map absent onto empty
- render a missing manifest location as "(source unknown)"
- retry compile failures caused by the compiler's PuppetDB query
- stop retrying manifest errors the compiler returns as HTTP 500
- add a trimmed real-server response fixture and tests for each shape
Compile a host's catalog in a base and a test environment over the
puppetserver API, then diff the two.
- add catalog-diff CLI with cobra flags, config precedence and exit codes
- add puppetserver mTLS client for POST /puppet/v4/catalog
- add pdbmux fact client
- add catalog normalisation, diff engine and text/JSON renderers
- add Makefile, nfpm RPM packaging and woodpecker pipelines