Skip to content

cfgd v0.10.0

Latest

Choose a tag to compare

@tj-smith47 tj-smith47 released this 07 Sep 16:25

What's new in v0.10.0

Changelog

Features

  • 1756208 add cfgd backup rollback, which puts the pre-restore copy back over a unit's source through restore's own lock, hooks and confirmation, keeps one retained copy per unit, and lists what it could roll back when no unit is named (@tj-smith47)
  • 05eabd4 count each unit snapshots in backup list, and call a snapshot a snapshot everywhere a backup definition is not what is meant (@tj-smith47)
  • 38ebb80 make --module isolate the named modules, add --with-profile, and warn on filter tokens that match nothing (@tj-smith47)
  • cb1d39d add a derived state field to module status JSON, so a machine consumer reads the same Synced or Drifted verdict the human row shows (@tj-smith47)
  • 20660d4 add a usageHints config option with CFGD_USAGE_HINTS and --no-hints overrides that silence closing hints entirely (@tj-smith47)
  • 7269f6a add cfgd status --scan and a last-scan age header (@tj-smith47)
  • 94390b5 add nord, monokai, adventure-time, catppuccin-mocha, gruvbox-dark, tokyo-night and one-dark theme presets, every slot pinned to its palette official canon (@tj-smith47)
  • 5fbe38d blow the status resource table up to one row per file with its method under -o wide and drop the one-file aggregate count (@tj-smith47)
  • 9243d02 check a pinned package's installed version during live drift scans instead of presence alone (@tj-smith47)
  • 8032d3f close a preview on the command that performs it, scoped exactly as the preview was (@tj-smith47)
  • 7dbafb5 give explain field drilldowns a Docs row (@tj-smith47)
  • 0817c10 make the decide action optional, so the bare cfgd decide the docs promise really lists pending decisions instead of erroring (@tj-smith47)
  • 6af5785 name the owner on every generated env line, and spell --package tokens as the schema path they land in (brew.taps:x), so a shell file says who put each line there and a profile edit writes exactly where cfgd explain said it would (@tj-smith47)
  • 2a6c308 promote --yes and --theme to global flags (CFGD_YES, CFGD_THEME), so any subcommand honors both from one place (@tj-smith47)
  • 15a6126 promote npm off its fallback global prefix automatically once the configured prefix is writable again, retiring the cfgd state forget-prefix escape hatch (@tj-smith47)
  • d8d17d4 render a source's effective policy in source show (@tj-smith47)
  • 3a0d5e9 render one Sources table on every surface that lists sources, hint the next command after every drift verdict and source failure, stamp a module install time once, and humanize every age and uptime (@tj-smith47)
  • fa5f2b8 roll the status dashboard's owners into a Component Health section whose verdict word carries its role (@tj-smith47)
  • 5737bb5 show what a source provides and what a pending decision would set, name composed sources in the run header, render a source failure cause once under its owner, and add --require-signed-commits to source add/update (@tj-smith47)
  • 85d1fca gate an env var or alias to named platforms with the same platforms: list a module and a package take, and concatenate the PATH declarations that survive on a host instead of keeping only the last (@tj-smith47)
  • ba52450 record when this machine was last scanned for drift (@tj-smith47)
  • eebab2b report the reconcile and sync intervals the loop is running on, so a status check confirms a SIGHUP reload without reading the log (@tj-smith47)
  • 3854d53 report only what differs, so a converged surface leaves no line to read past (@tj-smith47)
  • 0855c5e render cfgd explain as documentation, so a field list reads as prose and its descriptions hang under the description column (@tj-smith47)
  • fb6200b render the Docs row as an OSC 8 hyperlink on terminals that open one and as the release-pinned GitHub URL everywhere else, detected from the terminal rather than a flag, with docsUrl beside docs in -o json (@tj-smith47)
  • d8c2ded show a structure-only recursive tree with named field types, accepted value lists, a docs pointer per kind, and fuller field descriptions (@tj-smith47)
  • 0f5404f add StatusBuilder::qualifier and migrate ~60 label:value status sites (@tj-smith47)
  • a5124d0 add TitleLabel, the 3-slot Label: value heading composer (@tj-smith47)
  • 46c2e99 add drift_detail, the canonical want/have mismatch spelling (@tj-smith47)
  • 01471c7 annotate the profile header row with its inheritance chain on every surface the one builder feeds (@tj-smith47)
  • 83b9422 consolidate apply caveats into one closing Caveats section (@tj-smith47)
  • 21f93c7 drop a hint's colon-introduced commands onto indented command-block lines instead of run-on backticked sentences (@tj-smith47)
  • 47e2271 give schema type annotations their own typeHint theme slot, defaulting dracula to the official cyan-italic Types mapping (@tj-smith47)
  • 50a1b3b give the drift report one operand vocabulary, so a missing package reads the same word on every surface and the shell section stops calling itself Env (@tj-smith47)
  • 60e98fd narrate every long wait — package scans, probes, fetches, installs (@tj-smith47)
  • eefa994 narrate the source refresh and module resolution every command waits on before its first line (@tj-smith47)
  • 99ddd35 read a module's state as Synced/Drifted/Failed/NotApplied, so no surface spells one machine state two ways (@tj-smith47)
  • 95b833c narrate each phase as the planner computes it, so plan stops standing silent and then dumping its whole tree at once (@tj-smith47)
  • e1c6284 scan declared aliases and env vars for live drift (@tj-smith47)
  • e718fa1 accept the one-word CRD kind spelling for cfgd skill, and tighten the rendered protocol to one explain call, real re-run guards, secrets handling and an honest exemplar note (@tj-smith47)
  • 8d64bf7 name the Source column what it holds, read source status through one display vocabulary, and group the commit rows in source show (@tj-smith47)
  • 87d9e54 subscriber-side requireSignedCommits on the subscription, ORed with the source manifest flag (@tj-smith47)
  • f1d25a6 name whose each managed resource is and group a manager package list into one wrapped row, so the table reports what was deployed instead of restating state-matching keys (@tj-smith47)
  • d70dae6 redesign cfgd status --module as a summary, with -o wide itemizing every declared surface and --show-values revealing declared values and full script bodies (@tj-smith47)
  • 8c22697 name the local repo path and render a ref movement as the commit it left and the one it landed on (@tj-smith47)

Bug Fixes

  • 9f5a66c default to the Claude 5 model ids (claude-opus-5, claude-sonnet-5) in the config default, the generate schema and the client (@tj-smith47)
  • 29aabbb copy an adopted file aside inside the Files phase, so the sidecar lands with the write it protects instead of mutating disk while the plan is still a preview (@tj-smith47)
  • 4d5c356 keep the tracing channel out of the apply report, demoting the two events that restated the row two lines below them (@tj-smith47)
  • 7de58a5 scan build scripts for session-narrative comments (@tj-smith47)
  • 6c9a581 scan test code for session-narrative comments, mint declared_modules_dir, and widen the themed-arrow walk (@tj-smith47)
  • b8aa89c carry the symlinks inside a directory source through every hop of a rollback, so the sidecar cfgd leaves beside data it displaces can put the tree back as it was rather than as neither generation (@tj-smith47)
  • 34396b1 make cfgd backup rollback reversible by copying the contents it displaces aside through the same sidecar writer, publish only sidecars cfgd itself wrote, and name the destination in its confirmation prompt (@tj-smith47)
  • f150a12 record a restore safety copy as its own kind, so backup list stops reporting the restore as the unit last run and the daemon stops re-anchoring the schedule on it (@tj-smith47)
  • b5aa969 refuse a link a host will not recreate by naming the link and the privilege it needs, and pick a Windows link type from the target the link itself points at (@tj-smith47)
  • ec8ac5f retry and verify every third-party binary a Dockerfile or CI script installs (@tj-smith47)
  • 788dcc0 animate one spinner per gateway round-trip, not two (@tj-smith47)
  • a2e59aa attribute a floor check error by its key grammar and close the wide module status on its healing hint (@tj-smith47)
  • 534b7df attribute standing package/env/alias rows through one core scope, close the diff verdict and JSON gaps (@tj-smith47)
  • f9f449b auto-expand a single-object explain path without --recursive (@tj-smith47)
  • 516781d bound a failed command's row detail to the same tail the live window showed, and lay its lines out as lines instead of spending the row's own separator on each one (@tj-smith47)
  • b7b0483 carry a sync's unresolvable configuration into -o json with a nonzero exit, keeping exit 0 for a cached read the fetch repairs (@tj-smith47)
  • a7afcae claim the env surface for a tilde-spelled check key and pin the finding an unanswered check outranks (@tj-smith47)
  • 70ef286 clear a healed env entry from the drift report instead of restating it against itself, and label the managed env file apart from the entries inside it (@tj-smith47)
  • e2fcfe6 close a decisions section on its answer hint from inside on every surface, name the next command in every closing hint, and hide the terminal cursor for the life of every live region (@tj-smith47)
  • 42b9786 close a module push on the Module resource the cluster applies instead of re-spelling the push without its signing, platform and attestation flags (@tj-smith47)
  • 42f870e close a status report that shows unresolved drift on the command that heals it (@tj-smith47)
  • bca381f close compliance diff with a total-count status line (@tj-smith47)
  • 33fff66 close every mutating profile, secret and rollback verb on a next step, so the guided path module create points into no longer dead-ends (@tj-smith47)
  • cdb6cea close every run verdict that did not converge on a next step, and leave the abort line stating the fact rather than the instruction (@tj-smith47)
  • dbd9b63 compare a pinned package's distro version by its upstream part and run the floor pass on every scoped surface that resolves version rows (@tj-smith47)
  • 16829d6 compare brew formula and cask versions by their upstream parts so revision and build suffixes stop erroring the floor check and re-planning converged installs (@tj-smith47)
  • 4d0e4d5 compare recorded module file and walked source paths as posix so the Windows suite stops failing on backslashes (@tj-smith47)
  • c4ca6b7 compose a backup restore's configuration once, so conflicting sources are reported and recorded once (@tj-smith47)
  • c7f8083 compose a module export install script from the manager that would run it, so a generated Dockerfile cannot install differently than an apply (@tj-smith47)
  • e8f525f compose an owner token once, so a status row, a diff heading and an apply group cannot spell one owner three ways (@tj-smith47)
  • eddd9bb config get/unset not-found goldens track the typed-error rendering (@tj-smith47)
  • fe3493a date drift and the Component Health heading in one checked vocabulary and theme every apply verdict by its role (@tj-smith47)
  • 9703764 decide a recorded drift row's owner once, through the chain's resolved scope, on every status path, and settle each verb's drift verdict and exit code from one predicate on its summary type (@tj-smith47)
  • e676921 derive every resolved-profile header's Modules row from the one dependency-expanded resolution, so status, diff, sync and daemon status cannot name one profile differently (@tj-smith47)
  • fc68021 drop a manager PATH dir the declared PATH already carries and spell $HOME once per dialect, say packages never pkgs, keep the Type column singular, name the session env row and its missing manager, size a wrapped table column by what it paints, date the drift verdict by its scan, explain the [+] mark, stop a footer respelling its heading, pre-skip a session publish no manager can perform, give skip and info their own glyphs, hang a next step below the caveats, and time every executed action (@tj-smith47)
  • f411008 drop a recorded drift row the live scan re-reports, so status --scan renders one drift as one row and resolves env drift in one statement per apply (@tj-smith47)
  • 6b26c3b drop the double colon module show renders for an unresolved package (@tj-smith47)
  • aa1fbbb drop the header rows that echo an invocation's own scope, annotate a dep-pulled module the way a profile's inherits reads, and colour every owner token and Title-Cased status word by its role (@tj-smith47)
  • 335180b drop the plan JSON payload's theme-reachable arrow parameter, dedupe the v-strip/owner-split/cache-root/drift-id/floor-parse triplicates, and close the round-0 narrative and doc residue (@tj-smith47)
  • 9eeb175 drop the syncing display arm nothing writes, and seed status fixtures with the tokens production actually stores (@tj-smith47)
  • 598de08 drop the zero clauses from a recalled apply summary, so a stored run reads the way the live rollup worded it (@tj-smith47)
  • 9abb6ad exit 0 from a sync whose own fetch heals the cached checkout the header could not read, for every source kind (@tj-smith47)
  • c49d007 fold no-scan package attribution and scoped-scan JSON standing to the same drift the human render sees, and keep a scoped daemon tick from healing env rows it never re-checked (@tj-smith47)
  • 977aa43 fold the home directory in every closing hint and in the sidecar detail beside it, so one report spells $HOME one way (@tj-smith47)
  • 16d66ea fold the home directory in every confirm prompt and display row that names a path, like the rows beside them (@tj-smith47)
  • 98feac2 fold the home directory in every header path row, init clone row and cfgd paths listing through the one fold, so a report spells $HOME one way above its action rows (@tj-smith47)
  • 11576f0 fold the home directory in every table cell and row that renders a recorded path, so a status report spells $HOME one way from its Config row to its Managed Resources (@tj-smith47)
  • 2fbc38c fold the home directory out of every compliance path slot, carry a status transitions arrow from its caller, and anchor the roleless-status guard on no file list (@tj-smith47)
  • 3fa2052 fold the package presence vocabulary into one core predicate and prove the scoped below-floor path on every host (@tj-smith47)
  • a3478fa gate a converged module record on the plan before --skip/--only pruning (@tj-smith47)
  • 2b56dfe gate the gsettings-fixture checkin tests to Linux, where their drift source is registered (@tj-smith47)
  • e7e3b50 give the explain marks the reader is told to scan for a column each, instead of concatenating them onto a variable-width type (@tj-smith47)
  • 887c958 give the module status a recorded drift fallback and scope a module diff to the env entries the module owns (@tj-smith47)
  • 6f3dfda give the untyped structured error fallback a real kind (@tj-smith47)
  • 45b26f9 have an explain field name the siblings it relates to, instead of pointing at a rendered position the alphabetical sort does not put it in (@tj-smith47)
  • 36518e8 head the compliance diff report with a title label, so it reads like every sibling report instead of baking its subject into a plain heading (@tj-smith47)
  • fc96432 heal only the drift rows a run re-checked, across the daemon tick and both scoped verbs, and store one identity for a provision finding (@tj-smith47)
  • b7cc6b4 hold module push, pull, build and image pack output in one section each, with the digest and signing verdict as rows under it (@tj-smith47)
  • af9dd34 hold module push, pull, build and image pack under their own title section, report a Module signature as one word in a SIGNATURE column, open kubectl cfgd status with its context and namespace and measure the pods carrying modules, fill a Module PLATFORMS column from the artifact it names, and prove the exec bit survives push and CSI unpack (@tj-smith47)
  • 0ca189e hold the PATH read guard while a module-only plan resolves real managers (@tj-smith47)
  • 0d67b55 keep a module headline and its component health row from claiming Synced while a drift check error stands unresolved (@tj-smith47)
  • 3ab6cc1 keep a nested field named kind in cfgd explain, mark TeamConfig members required per the Crossplane XRD, and point scaffold modelines at the release-tagged schema files on GitHub (@tj-smith47)
  • 5f008cc keep every package and file operand on the -o json wire, cutting a long subject list only where a row is rendered (@tj-smith47)
  • 062ada0 keep spec.fileStrategy in config show -o json, pruning an undeclared default at the user-file rewrite instead of skipping it in serde (@tj-smith47)
  • 0aafaad key a field's docs body on schema.docs's own path, dedupe the heading walk, and drop em dashes from new explain prose (@tj-smith47)
  • d1b002e label the directory kubectl cfgd debug and exec prepend to PATH as PATH Entry, not Path Prefix (@tj-smith47)
  • 0d33fd0 land a wrapped action row's duration at its group's column, name the run total as wall-clock, close the rollup with one em dash and one parenthetical, grade every provider note by whether the reader must act, and name an initialized directory once when --from already cloned into it (@tj-smith47)
  • 1e87bc7 lead a module report on Status and Scope, paint the scope as an owner token, and list aliases before env (@tj-smith47)
  • 2fbdb12 lead a module status row with its verdict and parenthesise the counts under it (@tj-smith47)
  • 1d454fc lead the Last Apply block on its verdict and slim the scan hint to the one command it names (@tj-smith47)
  • 7f24975 leave the implicit local source's priority, origin and signing demand absent on daemon status instead of printing 0 and no, and fill its Commit column from the commit the daemon's own pull landed on (@tj-smith47)
  • 5f57ddb let a diff that could not check everything say so, and give checkin one voice per fact (@tj-smith47)
  • be254d8 let a not-scanned package seed yield only to a verdict for its own manager in status --module, so a name declared twice under two managers keeps each row's manager (@tj-smith47)
  • aa6fbf2 list a profile's aliases ahead of its env vars everywhere, and let restore put data back over an unreachable module (@tj-smith47)
  • 29d600b make the restore failure line testable, skip the reword a default conflict never renders (@tj-smith47)
  • d11903f match verify's recorded PATH dirs in diff/status/live-drift env checks, isolate --module env checks to the full desired state (@tj-smith47)
  • e1f456d migrate the remaining doctor.rs status subjects to the qualifier composer (@tj-smith47)
  • 9cf2f0f mint every system drift identity through the one composer and floor the fleet-field pin's reader walk (@tj-smith47)
  • ed0d03e move every colon-introduced hint command onto its own command-block line and keep block lines unwrapped (@tj-smith47)
  • 582d486 name a module's scripts in the status headline beside its packages and files, and quote every confirmed env and alias value the way the generated env file spells it (@tj-smith47)
  • 4091c07 name a profile-declared resource profile: in the status tables, the owner the plan, apply and diff already print for it, and keep cfgd for what cfgd manages on its own behalf (@tj-smith47)
  • b216027 name a restore's target in its action row, keep the pre-restore safety copy out of the unit's snapshots, counts and retention, and keep a source's two commit rows adjacent (@tj-smith47)
  • 44bd387 name every package and every file a row is about to touch, wrapping the list under the row rather than cutting it at +N more (@tj-smith47)
  • 3562380 name the config and profile the daemon loop is reconciling under, through the one header-row builder every other surface reads (@tj-smith47)
  • bc3a1f9 name the config the profile-show header sits under, and judge every header-filling literal for an empty sources slot (@tj-smith47)
  • ff63f32 name the declared sources on every header a config backs — a refused sync, the isolates, the backup fire (@tj-smith47)
  • 2147540 name the header's Sources off the declared subscriptions, so a never-synced machine still says where config comes from (@tj-smith47)
  • 3717e57 name the map arm of every list-or-map union in explain and stop each field description restating the type span above it (@tj-smith47)
  • 04f138b name the origin and the revision on every init row about a config checkout, not just the directory cfgd picked (@tj-smith47)
  • e3d816d name the profile's modules in every header that reports on a resolved profile, through the one builder the apply header already reads, so status, diff, sync and daemon status open on the same rows apply does (@tj-smith47)
  • 089e9df name the resolved profile's modules and sources in every backup run header, read off the resolution the verb already performed (@tj-smith47)
  • 67ef1c6 name what a withheld live-session publish is for, so its row does not spend both slots on the noun its reason already carries (@tj-smith47)
  • 30a1b53 nest depth-0 status spinners under their owning section, with depth-assertion coverage (@tj-smith47)
  • 0c6c511 nest recorded drift under its owner in Component Health and spell one drift vocabulary across the surfaces (@tj-smith47)
  • 08ef843 open a backup restore with the same run header every other run prints, and name the sources a backup run merged (@tj-smith47)
  • 621bc1f open every report on one header block, Config, Sources, Profile and Modules in one order (@tj-smith47)
  • bdf48c8 order the status tables by the owner comparator the plan and apply trees render their groups by, and spell a cfgd-owned row with the group suffix those trees head it with (@tj-smith47)
  • ee5e571 paint a recorded scope's owner tokens in every slot that renders one and keep a heading's facts indented under it until a row ends its scope (@tj-smith47)
  • 4172bd2 paint the empty Drift section of status as an Info line rather than a green tick when no scan stands behind it, the one role diff already refuses for a check that could not run (@tj-smith47)
  • f012d3b peel a Result wrapper before judging a payload return type, weld the exit-code surface matrix both ways, hold the drift-cause chooser to a golden that shows both wordings, and refuse a review-finding tag in a comment (@tj-smith47)
  • f222241 price a --phase plan footer over the phases it lists, report kubectl's own failure instead of a broken pipe when it exits before reading its manifest, and settle backup and restore rows through one classifier (@tj-smith47)
  • adba7df price a pre-skipped action outside the apply verdict at both ends, drop a Sources column no listed source can fill, title every decisions section through one builder, and close every mutating source verb on its next step (@tj-smith47)
  • 1ff87da price the packages 'cfgd init --apply-module' and 'cfgd module create --apply' install, so their rendered and stored actions match every other apply path (@tj-smith47)
  • 4289662 print a command's produced facts as its rows' details instead of between them, clone a local-path source at full depth, and point a built module's hint at module push (@tj-smith47)
  • ef5a476 print the module-push registration hint as a runnable kubectl apply -f <module-resource>.yaml (@tj-smith47)
  • 1b10f59 propagate a real module error instead of swallowing it into a false-clean diff/verify (@tj-smith47)
  • a7b71e5 prove kubectl plugin -o yaml round-trips -o json for status/version/deploy (@tj-smith47)
  • 2fef0bd put sync's Modules row back under Profile in the header and withhold the Synced verdict from a pull that failed (@tj-smith47)
  • 1becbd6 qualify a fleet drift row's field with its configurator so two configurators sharing a key stop colliding into one DriftAlert row (@tj-smith47)
  • 5ba746c raise a held package through its family's upgrade verb, judge floors by version order, and read real listings for the four managers that still reported every version unknown (@tj-smith47)
  • dffc164 read a Module with no signature verdict as unknown on kubectl cfgd status instead of deriving unverified from its declared key, and close every mutating module verb — push, pull, build included — on the next command through the one composer the source verbs use (@tj-smith47)
  • abf68e4 read a package row's declared owner through the one id composer its producer writes (@tj-smith47)
  • accca43 read a scanned package's recorded verdict over the scan's not-scanned seed in status --module, so a package the Drift section names never reads not scanned beside its finding (@tj-smith47)
  • 15db078 read an apply summary back as prose, count a no-op action as skipped, make the module headline agree with its table, spell every packages row manager, word script counts per hook, say the scan hint once, name a --package entry by its schema noun, stop a buffered emission painting a blank row, fold a wrapped npm warning into one caveat, and render a next step as a hint (@tj-smith47)
  • e907a35 read the run's own resolved module cache for the unmanaged-file check, fold Windows PATH-entry case, thread the theme arrow through every reconciler formatter, and make SCRIPT_SENTINEL a shared constant (@tj-smith47)
  • bcafa5d read the status Owner column off the same profile derivation the header row does, so a run that resolved no profile names one nowhere (@tj-smith47)
  • dd74272 recompute the declared env/alias line for every display consumer, not just diff (@tj-smith47)
  • c1a1753 record a converged module as applied, so a machine that needs no work stops reporting the module as never applied (@tj-smith47)
  • c954a0d record one package identity across every drift check and keep verify --module to the surfaces its scope can vouch for (@tj-smith47)
  • 44cc217 record what every live drift check finds so the recorded status view reads the truth (@tj-smith47)
  • 08141d9 refuse a sync whose subscription profile the cache cannot resolve, since the fetch never re-resolves it (@tj-smith47)
  • aec0f70 register the cross-platform system configurators unconditionally so a check whose tool lives off PATH runs instead of reporting a clean scan (@tj-smith47)
  • 30e8082 render an Age row or column as a bare magnitude, since the key already says the dimension, and keep the relation word for a slot keyed on the event (@tj-smith47)
  • 0f5fd5e render and price the drift rows a scan kept standing, so status --scan and its exit code agree with the record it just wrote (@tj-smith47)
  • 8bdb9e7 render declared-only module inventories as declarations instead of dressing them in verdict glyphs (@tj-smith47)
  • 773181c render each word of a changed compliance row in its own status role, give every isolate surface the same delta-only Modules row, and refuse the roleless status spelling at its producer (@tj-smith47)
  • 369f4f0 render every producer's recorded module drift through the module status fallback and scope the module diff's resolve set to what it checked (@tj-smith47)
  • 463c5f0 render every recorded status token as its TitleCase display word, so a status table stops leaking the spelling the database uses (@tj-smith47)
  • 4574a83 render module show script hooks as bare declarations through the same command-list shape the status inventory uses (@tj-smith47)
  • 5559bb1 render the scope a run recorded, so an isolated run stops being reported under a profile it never resolved (@tj-smith47)
  • b6f40d9 render, price and keep the standing rows a scoped or full drift scan could not re-check (@tj-smith47)
  • cb49368 report an erroring system check as a first-class verify row and exit Error ahead of DriftDetected on every exit-code surface (@tj-smith47)
  • 9cf8827 report the live scan status --scan --module actually ran (@tj-smith47)
  • 58d02ca report the platform a module push resolved on its pushed row and in its payload (@tj-smith47)
  • 9ded145 resolve the kubectl plugin's omitted --namespace from the kubeconfig current context (@tj-smith47)
  • d596f60 resolve the per-file drift rows an apply heals so status stops advising the command that already ran (@tj-smith47)
  • f6e5593 restore the pending-decisions doc comment a helper insertion split in half, and escape hand-modified paths on the source remove confirm screen (@tj-smith47)
  • 0a10f23 route a live version-floor check through the checked comparator so a spawn failure reports a check error instead of invented drift, refuse a raise no manager can perform at the seam where the floor is known, batch go's version reads into one spawn, read nix's array-shaped listing, and bound flatpak's and snap's version reads with the same timeout every other listing gets (@tj-smith47)
  • cde5085 route every not-found miss through a typed CfgdError, not bare anyhow (@tj-smith47)
  • f47e574 route module show's platform-skip wording through status's constant (@tj-smith47)
  • 7e8a440 route the daemon's pull through the one outcome seam so a plain config directory is not a failure on every tick, type each pull refusal so its next step cannot be missed, and scope the closing-hint walk's composer exemption to the composers it pins (@tj-smith47)
  • 410cf6b say nothing to apply with the pending count instead of up to date while a decision is withheld, annotate a decision item a higher layer outranks, close every result line in one sentence shape, count pending decisions in the section title, spell the decide hint once with backticked commands, retire a successful clone silently, name the Sources section and source owner one way, humanize Last Sync, add Last Sync and Signed columns to source list, and record a Module artifact attestation types beside its platforms (@tj-smith47)
  • 227e661 scope verify recording to what each run checked and keep drift rows a live check cannot re-find (@tj-smith47)
  • 96c7d1c separate sibling blocks with one blank line on every rendered surface and never open, close or double one (@tj-smith47)
  • 27f1208 settle a local pull through one classifying seam, so cfgd pull and cfgd sync agree on a non-repo and on a refusal's exit code, and hold back only the advisory whose remedy is the command printing it (@tj-smith47)
  • 3ea4213 settle the configured file strategy into every deploy action and prune the module file manifest to the declared set, so the apply tree, the wide status table and the recorded counts speak one method and one file list (@tj-smith47)
  • 906ee8a settle the recorded hash of every link-deployed row before init --apply, module create --apply and the daemon's applying tick return, so the next tick reports no refresh on a machine nobody touched (@tj-smith47)
  • cd56fdb settle the two status-line grammars into a partition, so a result line reads as an outcome and a run body row as work (@tj-smith47)
  • 349a6fa shim and serialize the nameless-unit systemd diff test, whose live spawn broke sibling listing counts (@tj-smith47)
  • 2d014af show a drifted env var or alias against the line the machine actually holds, and word it the same way whether or not the run scanned (@tj-smith47)
  • f3ba224 source show renders effective signature enforcement and adds the missing policy fields (@tj-smith47)
  • cbccaa6 spell a checkout row's revision one way, so the clone init prints on a first run names its commit like the three rows beside it (@tj-smith47)
  • 82ac92b spell the home directory as ~ in every rendered action and restore subject, so one report never names $HOME two ways (@tj-smith47)
  • d01154b state a package or file shortfall as what was already in place instead of a ratio over the total the elided subject already gives (@tj-smith47)
  • b595a05 state a pushed artifact platform once, in the row that produced it (@tj-smith47)
  • 12c33b3 state an honest shortfall for a whole-module drift row and attribute an undeclared package to the loose bucket (@tj-smith47)
  • e465f6b state each surface's real drift coverage so the gateway, doctor and compliance reports stop implying checks they never ran (@tj-smith47)
  • 75a3067 state the count a module file deploy produces as the row's detail on the plan bullet, the apply row and the -o json plan payload, never as a parenthetical on its subject (@tj-smith47)
  • bfe4535 state what the status Owner column does with a cell naming no owner, and pin the dash and its sort position (@tj-smith47)
  • 591a82a stop verify --module re-dating the machine-wide last scan (@tj-smith47)
  • f82f482 stop a missing key saying config twice, and let an unresolved package name its reason as a reason (@tj-smith47)
  • 843fe20 stop reading a module-deployed file as a stranger on apply, report an adopted target backup on its own action row, and break the module Scripts row down per hook (@tj-smith47)
  • ec9e097 stop the module push hint naming the module manifest the verb itself consumes (@tj-smith47)
  • 76ffb4e strip every inline test module from a walk pin's production slice instead of only the trailing one (@tj-smith47)
  • 83a4ab9 take every env-file fixture's path and body from the running platform's own generator, refuse a state dir no home resolves, and reach the module cache through its one resolver (@tj-smith47)
  • 222939a walk the whole fleet drift surface in its pin and state the dashboard cards' system-only coverage (@tj-smith47)
  • 73ee43c word a package shortfall this run itself provisioned as provisioned by this run, never as already installed (@tj-smith47)
  • 5e49778 word a restore's safety copy through the sidecar's own outcome, so a restore over bytes an earlier copy already holds reads "already backed up at" instead of claiming a write it never made (@tj-smith47)
  • 4d54fa5 word an operand-less standing row through the one cause chooser, land a script-shaped module row on its own module, and widen four walk pins onto their class (@tj-smith47)
  • 4cdd5a9 word backup rollback hints for what a reader can safely do, and break the owner-label self-check on a receiver-chain split (@tj-smith47)
  • 9906c95 word the restore row restore from <snapshot> beside snapshot <name>, drop a column no row can fill from every listing, and print no phase row on a run whose only phase restates its title (@tj-smith47)
  • 13862c5 wrap cmd_module_pull in a Pull section to match cmd_module_push (W8) (@tj-smith47)
  • 2fcb103 write one PATH line per env file naming both producers, price plan footers without pre-skipped actions, humanize backup times, and render every duration, hint and withheld row through one rule each (@tj-smith47)
  • d44904b write through a null config section in config set, and stop init --from and profile rewrites littering user files with null and empty sections (@tj-smith47)
  • 1a7653c declare both the bare-list and the map shape every spec.packages manager accepts in its schema, so explain and the published SchemaStore schemas stop rejecting config apply accepts (@tj-smith47)
  • ac7693b keep a schema type's doc comment to what a user reads, so cfgd explain, the SchemaStore schema and the agent skills stop printing private function names in rustdoc link syntax (@tj-smith47)
  • 519fdd9 carry an unreadable minVersion through the floor dedup so its check error surfaces at the manager instead of vanishing (@tj-smith47)
  • 468a385 compose every declared version floor in one place so a v-prefixed minVersion stops reporting a converged package as outdated (@tj-smith47)
  • 771dc1e count a module skipped whole nowhere, so the header, the tree, the apply rollup and the daemon tick price one plan one way (@tj-smith47)
  • 4a0c621 heal an env action under the row its own producer minted and refuse a module name carrying a path separator at the one seam every insert site passes through (@tj-smith47)
  • b226ef1 mint one re-findable drift row per resolved package instead of a module-wide aggregate, so a full scan can never resolve a row it did not check (@tj-smith47)
  • d5878e9 mint the daemon system drift id through the one composer, key an applied setting on that id alone, and respell the colon rows old ticks recorded (@tj-smith47)
  • a8f9651 pass git reset/checkout revisions with a trailing --, since --end-of-options is refused before 2.43.7 (@tj-smith47)
  • 6f07a14 read a declared floor through one spelling so the pkg comparator stops re-planning a package that clears a v-prefixed minVersion (@tj-smith47)
  • 5a08abf refuse a range-shaped minVersion in the pkg floor check and let an unreadable floor win the dedup so its check error surfaces (@tj-smith47)
  • e1de6b2 report a declared minVersion nothing can parse as a check error instead of inventing permanent version drift (@tj-smith47)
  • 7735bb2 report no scan stamp when the store refused to write one (@tj-smith47)
  • ae02727 retire memoized command resolution and provider sweeps when a run removes what they describe (@tj-smith47)
  • 248f94d retire the source-refresh narration silently, so a source that fails to load says so twice instead of four times (@tj-smith47)
  • 5eda313 settle a floor dedup order-independently when one floor is unreadable to the manager, and gate the tool-shim floor pins for Windows (@tj-smith47)
  • 2a03b9b withhold a pending decision file from the drift rows a daemon apply resolves, and keep the live-session id out of the rc-line resolve (@tj-smith47)
  • f1e9b4e word a package version finding off the row its producer minted, so a floor its own manager judged reads as a version mismatch on every surface (@tj-smith47)
  • 69b43d5 word module-upgrade dependency/package/file diffs as added/removed, not a bare colon (@tj-smith47)
  • 52ee8d4 add command_list + AccentHeading composers, finish OwnerLabel migration, resolve the heading_owner naming collision (@tj-smith47)
  • 59e56dd revert a persisted conflict string to <-, dedupe its display restatement, and stop misusing .qualifier() for a preposition (@tj-smith47)
  • 6da18ff reword the conflict arrow on apply own surface, compose every glue through the renderer (@tj-smith47)
  • 614983e count the deployed files a pull actually moved instead of every file the module row covers, keeping a per-file breakdown beside each recorded hash (@tj-smith47)
  • e3f0360 count the files a refreshed deployed-hash row stands for, not the rows, in the reconcile tick sentence (@tj-smith47)
  • efff7fb date the module a per-module tick probed instead of the machine-wide scan stamp (@tj-smith47)
  • d2abe7b keep the startup banner's socket path absolute on purpose, a journal line being read by scripts and other hosts, and pin that no tracing line ever folds the home directory (@tj-smith47)
  • 127051f make a source sync.autoApply actually apply, by forcing the drift policy for the tick its refresh triggers (@tj-smith47)
  • 681212c resolve drift rows under the ids their writers mint, keep planned module files recorded, and batch drift snapshots in one indexed transaction (@tj-smith47)
  • 9a10246 stamp every log line with the local time, name its subsystem, log a reconcile outcome and a pull in the same prose every human surface reads, fold the file events a pull explains into that pull, print the Ctrl+C hint only on a TTY, title-case every rendered label, humanize daemon status ages, hide an empty Sources table, and say that image pack pushed (@tj-smith47)
  • fd4e637 state the machine-wide drift count once instead of crediting it to whichever config source happens to sit first (@tj-smith47)
  • ae4bd0f thread --cache-dir through the daemon's dir overrides so the reconcile loop reads the cache the caller named (@tj-smith47)
  • 7505cf7 word the sync tick from what changed on the machine — a deployed file changed upstream and is already live through its link — instead of reporting the record cfgd refreshed as work (@tj-smith47)
  • c884363 keep --module diff resilient to an unrelated module's failure (@tj-smith47)
  • 7a349cb resolve rustdoc link and cfg-visibility findings from the --all-features doc gate (@tj-smith47)
  • 0f2bf7d match a declared package in its manager identity space so a case-insensitive listing no longer reads as missing (@tj-smith47)
  • 0343453 fold the plan-comment id lookup outside the pipe so pipefail cannot fail the step on an early-exiting reader (@tj-smith47)
  • 51c3f5f drop the category label from every error whose sentence already names its subject (@tj-smith47)
  • 425d16f describe schema fields by behavior instead of pointing at internal Rust symbols, so explain and schema descriptions read like user docs (@tj-smith47)
  • 27d8702 list a union's one object shape's fields by name, name a $ref member by its $defs type, state each shape once, and mark only rows the legend's path can resolve (@tj-smith47)
  • ad8813e skip an OSC string whole when measuring a wrapped row, withhold the hyperlink inside a terminal multiplexer, and never probe the terminal when colour is already off (@tj-smith47)
  • 47aa101 finish the apply progress bar explicitly on failure, never via Drop (@tj-smith47)
  • c469529 commit the Initialize cfgd heading before the clone window paints (@tj-smith47)
  • c27a5b9 resolve a locked module by its recorded commit, so a warm cache answers it with no network (@tj-smith47)
  • 63e583b satisfy a bare module package entry from the available manager that already holds it instead of re-installing it through the platform default (@tj-smith47)
  • 6fa4ac7 carry blank-line bookkeeping across a printer retheme (@tj-smith47)
  • 1292687 close a mutating run on a next step at the run own depth, clone a new source under the bar so the title lands with its manifest, and title every early return of source update (@tj-smith47)
  • d324dee compose subject/detail through the canonical " — " glue instead of hand-rolled em-dash strings (@tj-smith47)
  • f9498d5 count what each env target actually wrote, so a write line describes its own file (@tj-smith47)
  • 31d72fe demote the tracing events that restate a printed line to debug, and keep the daemon at info so its journal survives the new warn default (@tj-smith47)
  • 1b8c2d8 drain a section its own buffered rows, so they stop rendering above its header while it reports itself empty (@tj-smith47)
  • 4da5eec emit_raw_block takes depth, flushes headers, indents to it (@tj-smith47)
  • feac0a6 end every table row on its last glyph while the header keeps the pad the rule spans (@tj-smith47)
  • a600b7f flush pending section statuses before any later emission, so a status never renders after the diff, kv block or subsection it precedes (@tj-smith47)
  • 0d5e1e9 fold every renderer slot that carries text cfgd did not author (@tj-smith47)
  • fdb7256 fold every tracing event before it reaches a terminal (@tj-smith47)
  • 3b26d81 give a section header after a top-level kv block the blank line a status line in the same place already gets (@tj-smith47)
  • f2b9593 give source show the blank-separated top-level sections module show renders, under a Source: title (@tj-smith47)
  • 6ce1c9d give the approval screen one voice and fold the live region (@tj-smith47)
  • 30eec94 hang source show off an owner section and retire the heading slot an owner could take (@tj-smith47)
  • 3d111c1 keep the truncation marker the renderer produced on the in-flight row, so a running action and the row that replaces it spell one subject (@tj-smith47)
  • 1b67802 mark the partial verdicts failure count with the same glyph its failed rows carry, and hang the wall total off the line that names the run (@tj-smith47)
  • cfea374 narrate a command's wait before its title lands, end a heading's scope at its prose, and drop every annotation that restates a row already on the screen (@tj-smith47)
  • 7848bfe narrate a module upgrade, build or signature wait before or inside the frame it fills, so no title paints over a frozen screen (@tj-smith47)
  • 29383cc pad a plan bullet's produced count to the report's one alignment column, the way every status row already does (@tj-smith47)
  • 0d73639 place a buffered kv block where its rows were written, not where the renderer stands when they drain (@tj-smith47)
  • b56a000 render owner tokens through OwnerLabel's three slots everywhere they head a line (@tj-smith47)
  • 2878567 report the kubectl plugin image-pin rewrites and the Windows permissions-ignored notice on channels the user actually reads (@tj-smith47)
  • 417ecd1 retire a clone or fetch bar silently when the failure it would settle is the one it returns, so a refused source is reported once (@tj-smith47)
  • be18eec route every rendered relationship through Theme::arrow(), and change markers through Role instead of hand-typed glyphs (@tj-smith47)
  • 454081a route pseudo-phase and preview-only phase headings through PhaseLabel (@tj-smith47)
  • aa88f3f route the kubectl plugin subscriber through the live region too, so a log event cannot strand a bar its printer has on screen (@tj-smith47)
  • adcf61e route tracing through the live region and default the CLI to warn, so a log event mid-spinner repaints it instead of stranding it (@tj-smith47)
  • 43bbf74 sanitize the two terminal writers that never pass the renderer (@tj-smith47)
  • 201dff9 scope the daemon's info tracing floor to the reconcile loop, leaving one-shot daemon commands at warn (@tj-smith47)
  • e224202 section cfgd init so its children indent and Apply gets a leading blank line (@tj-smith47)
  • b7dc8c6 spell the owner token in the colon form on the settled git progress lines too, so one owner vocabulary reads the same live and after it lands (@tj-smith47)
  • 0408f71 stop untrusted text repainting the lines that describe it (@tj-smith47)
  • 6243a43 strip foreign escapes from every status_simple subject, so a gateway string cannot repaint the terminal (@tj-smith47)
  • 0c9d86d strip trailing ellipsis from in-flight subjects, add an absence-vocabulary helper, and route command/description lists through kv_block (@tj-smith47)
  • 0482374 tint the owner token in a live label that carries a trailing detail, and spell every live owner label in the colon form the tint reads (@tj-smith47)
  • 008da8d unify section-title casing and drop count-in-parens (@tj-smith47)
  • 6435e20 withhold every escape from a stream the printer decided against, so an attribute-only theme slot no longer writes SGR under --color never (@tj-smith47)
  • 6918f2b hand every manager spawn the directories this run bootstrapped, so a just-installed manager can price and version itself (@tj-smith47)
  • 4333c1f keep asking the npm fallback prefix while it still holds packages, and scan the bin dir go itself reports, so a package installed under one root is never re-queued from another (@tj-smith47)
  • 12f5597 keep the Linux-only bootstrap arms of flatpak and snap compiling on a host that has neither, so a warnings-as-errors build off Linux is not stopped by a parameter their other arm never reads (@tj-smith47)
  • 8357032 order brew-tap installs ahead of the formulae the taps may deliver (@tj-smith47)
  • 70b7e8d order manager families through a non-panicking rank lookup (@tj-smith47)
  • 84ef514 prepend brew's directories to PATH per entry through the one guarded composer (@tj-smith47)
  • d140c15 register brew's install-time PATH directories, not only its bootstrap directories (@tj-smith47)
  • 488208c resolve an install's PATH directories at the process level only (@tj-smith47)
  • e8b2b8f stop an npm caveat opening on its own tag, and state the no-doubling rule once for every authored note (@tj-smith47)
  • e6977c8 strip sudo unconditionally from an install script cfgd emits for another host, so a non-root author's module export writes a container build that runs (@tj-smith47)
  • bbefcc1 trust a brew tap right after adding it, so current brew stops ignoring the tap's formulae, and drop the trust entry on untap (@tj-smith47)
  • 199aaf1 word a failed brew untrust as what it left behind, so the note does not repeat the tag its error display already carries (@tj-smith47)
  • 294550e bound the lent install-enumeration memo by age, build a run's registry only when a module needs it, and commit an apply's verdict with the ownership rows it describes (@tj-smith47)
  • 151a5ca parse every readable go version -m block despite exit 1, require every manager to declare its raise verb, and read a nix store path's whole version remainder before peeling name-mismatched suffixes (@tj-smith47)
  • 0a3f4e6 peel a nix multi-output suffix, split a go header on its first colon-space, and prove a raise-less manager lists only the unknown sentinel (@tj-smith47)
  • 391a7fb refuse a nixpkgs unstable snapshot's date fragment as a peeled version, and stop calling None a family's "no distinct raise verb" (@tj-smith47)
  • 8d2a45d weld every manager version-grammar sample to its own family reader, so a sample no listing or query produces is refused (@tj-smith47)
  • 62e79ce diff a module package against what its manager already holds, so a converged module stops re-listing its whole declared set every run (@tj-smith47)
  • db094c9 drop the unreachable duplicate provision strand-record arm (@tj-smith47)
  • 42d181b keep a declared package whose installed copy is below its minVersion floor (@tj-smith47)
  • 478e11a honor CFGD_CONFIG when resolving the kubectl plugin theme (@tj-smith47)
  • 7917468 load the configured theme for kubectl cfgd output, so plugin surfaces stop rendering the default palette on themed machines (@tj-smith47)
  • d1a9c30 name every mounted module in the debug shell prompt (@tj-smith47)
  • 260d598 drop a pruned file from the declared set so the survivor cannot claim a converged sibling (@tj-smith47)
  • aa4ea66 elide a module file only when the deploy manifest owns it, judging Patch merges at plan time (@tj-smith47)
  • 4327c05 hash every file a directory-shaped link entry deploys into its recorded row, on both the profile and module halves (@tj-smith47)
  • 82c5a25 install a tool once when a module declares the manager cfgd would bootstrap (@tj-smith47)
  • 963ea70 keep the mediator an elided package was delivered through wanted across the re-plan, and elide an aliased entry by the canonical name its cascade delivers, so a declared package can never vanish from a plan that dropped its row (@tj-smith47)
  • 47e91a9 keep the node that DELIVERED an elided package wanted across the re-plan, not only the mediator it came through, so the mediator is never provisioned for nobody (@tj-smith47)
  • 622a471 let a dispatchable tap cross the tier barrier and hold only its own family's installs behind it (@tj-smith47)
  • a12ed4d mark the withheld-plan carrier must_use so a complement-resolve cannot silently drop the ids only the prune can attribute (@tj-smith47)
  • d80d19b plan only module files whose deployed targets drifted, and run lifecycle hooks only when some of the module's work survived (@tj-smith47)
  • 31289ca price a manager bootstrap cascade against the managers the same plan delivers, so npm plans via the brew the run provisions instead of falling to apt (@tj-smith47)
  • ad80d17 refuse a module file source that does not exist instead of settling an unchanged deploy, honouring private as skip (@tj-smith47)
  • 5675254 remove a stale hash-refresh walk's backward blind spot, extend the "we"/self-citation sweep repo-wide with an audit.sh gate, and pin every module-cache hand-join and themed-arrow-into-json seam (@tj-smith47)
  • b7975ec report a Files-phase encryption refusal as its own counted action row instead of a host-declined module skip, withhold every escape from a colourless progress bar, widen the colour-gate walk to the whole escape-writing class, and narrow the unpublished module-skip migration to a whole-module id (@tj-smith47)
  • b3041ac retain a package for its floor only when the manager can actually read both operands, and settle a floor dedup in the manager's own grammar (@tj-smith47)
  • d33cdb4 route a module provision only through a manager its author named, and elide the entry for a tool the run already provisioned (@tj-smith47)
  • e19a8c3 state on the row when an install landed fewer packages than it named (@tj-smith47)
  • 770fe39 state the version a landed provision delivered on its own row, read off the manager the executor just verified (@tj-smith47)
  • b944974 stop a full deploy row restating the total its subject's +N more marker already gives (@tj-smith47)
  • f83202e time a failed action that ran, like every other row in its phase (@tj-smith47)
  • 6c2f1a6 word a provision failure from what the run installed, not from the tool it did not find (@tj-smith47)
  • 4461e98 warn about every hand-modified file and confirm before cfgd source remove forgets the hashes that prove they diverged (@tj-smith47)
  • bfb4ec9 keep the cache-wait notice visible at Quiet, hold the cache lock across a checkout removal, and take back a cache root a failed load created (@tj-smith47)
  • e2bccea re-ask a source decision only when the item itself changed, not when the source delivered anything else (@tj-smith47)
  • 95b5db9 verify a fetched head before publishing it, and let a refused source recover on the next sync (@tj-smith47)
  • 9689a62 re-record a symlinked file's content hash after an edit made through the link, so the recorded state stops describing bytes that are no longer on disk (@tj-smith47)
  • 68a08f8 refresh a module's recorded aggregate hash after an edit through a deployed symlink, so module files stop reading as stale too (@tj-smith47)
  • 1973fb7 earn a Synced verdict only from a check that covers its owner, and let a scoped scan date the report it leaves (@tj-smith47)
  • 1e7443c fall back to a file count when a modules targets share no directory, so the managed-resources row stops naming the filesystem root as a managed one (@tj-smith47)
  • d221f5d give a module report one verdict per package and per file, so a phase that ran cannot vanish and a drifted file cannot read converged (@tj-smith47)
  • dd8e9e9 give each declaration of one package name its own scan verdict instead of the last one (@tj-smith47)
  • 4cb037d make directory drift detection strategy-aware, unify drift shaping (@tj-smith47)
  • b0318a0 order module drift rows by surface then item, and match a drifted file to its cause through the id both halves are keyed by (@tj-smith47)
  • ccf8cdd report a platform-gated package as skipped rather than as one nobody scanned (@tj-smith47)
  • e36e58e run a live drift scan for --module --exit-code (@tj-smith47)
  • 95e5d04 keep an indented xfconf continuation that opens with a path out of the channel snapshot (@tj-smith47)
  • 39a7bf9 restore relocatable gsettings parity, bound git spawns, and stop scanning the machine for a report nobody reads #minor (@tj-smith47)
  • 9bd428d emit the daemonTerminated -o json key at every upgrade exit, replacing daemonRestarted #minor (@tj-smith47)
  • 5958df3 installedPath payload takes the fs-key fold so POSIX paths stay byte-exact, and the stderr fence reads literals as literals (@tj-smith47)
  • 4c15e33 report the daemon as terminated rather than restarted, in the human line and the -o json payload (@tj-smith47)
  • de35edf tell the human reader the daemon was terminated, not only the JSON payload (@tj-smith47)
  • 38eacec answer every drift question through the one live-drift engine and report an erroring check on every surface (@tj-smith47)
  • 1581a6a compute filter_plan's known-module set once, decouple a debug-log assertion from cfgd-core's exact wording (@tj-smith47)
  • 3e6a671 mint the package drift id through one workspace composer and route the uninstall membership probe through the tracking composer (@tj-smith47)
  • 86ecc4e put every report subject in its own heading slot, and stop rendering a captured script blob as one status verdict per line (@tj-smith47)
  • 31e68e5 render every short commit id through one helper, and re-pad the restore diagram the snapshot rename widened (@tj-smith47)
  • 3a48f8a route the json action_type env verbs through the one write/inject spelling (@tj-smith47)
  • adee01e read an env default and await a shutdown request through one shared helper each, and widen the duplicate-function audit to generic and pub(crate) definitions (@tj-smith47)
  • 1e94847 name the template-engine selector engine_for so it no longer collides with the patch resolver's for_origin (@tj-smith47)

Performance

  • 3e548bb diff the machine once per checkin, sharing one pass between the compliance snapshot and the drift report (@tj-smith47)
  • 4f03dfb parse the config, open the state store and read each package manifest once per run instead of two or three times (@tj-smith47)
  • f7b78fc read one installed-package enumeration per manager across diff, status, verify, doctor, compliance and the planner (@tj-smith47)
  • 5713c33 reflect every explain schema once per process, so a mistyped resource name no longer walks all nine kinds twice (@tj-smith47)
  • cffda06 reuse the provider registry and file manager a run already built, and stop registering every custom package manager twice (@tj-smith47)
  • eca478b ask each provider for its availability once per planning pass instead of once per comparison (@tj-smith47)
  • 18ca18d detect the platform once per process instead of once per file manager, module walk and daemon tick (@tj-smith47)
  • 0010516 let the MCP server keep one installed-package memo for its whole life instead of re-enumerating every manager per tool call (@tj-smith47)
  • aa8c7b9 derive a reconcile tick's config once per change instead of once per tick (@tj-smith47)
  • 24257b6 register each template body and every custom Tera function once per file manager instead of once per render (@tj-smith47)
  • 067a0f6 read installed packages through the session enumeration memo so a scan turn does not re-list every manager (@tj-smith47)
  • 345bf92 price only the packages a plan will surface, under the planning spinner, so a converged plan answers in under a second instead of fourteen (@tj-smith47)
  • 176cc2e skip the fetch a pinned SHA already answers, price a package once per run, and hash module trees without buffering them (@tj-smith47)
  • 5f217a8 batch nix and scoop installs into one spawn, keeping per-package failure attribution (@tj-smith47)
  • d7af9bb resolve each secret reference once per run, not once per place it appears (@tj-smith47)
  • f4c930c read each keyed system configurator in one bulk spawn per diff, not one per declared key (@tj-smith47)

Released with anodizer