configure.sh model inference on carries; harden ruleset snippets - #334
Merged
Conversation
Fixes the operational-carry gap and the snippet nits bundled into #332 (raised by Copilot on the Vantage-Config carry and the #330 sweep PRs). 1. configure.sh: when the registry is absent (a downstream carry), the model is inferred from which develop payload is carried - a carry holds exactly its own model's. Ambiguous layouts (both or neither, e.g. a partial copy) abort rather than guess. The documented no-arg form now works on operational carries. The model may also be passed as the sole argument (configure.sh operational); previously arg 1 was always parsed as a repo name. 2. repo-config/README.md regen snippet + AUDIT.md section 6 ruleset snippet: enforce exactly one ruleset per name before using the id - a duplicate name previously produced a multiline id that silently corrupted the follow-up API path; zero/duplicates is declared drift, so fail loudly (regen) or report and continue (audit). Single list fetch, jq-selected. 3. repo-config/README.md documents the inference fallback and the model-only argument form. Declined from the bundle with rationale: gh api --input - portability (fleet standard is current gh; no temp-file churn) - recorded on #332. The jq-derived secret lists and --paginate hardening apply to the blessed downstream self-audit reference, which lives in the Vantage-Config carry - propagated there, not here (the hub's fleet audit reads spec/secrets.json programmatically already). Resolution logic matrix-tested (infer release/operational, ambiguous both/neither abort exit 1, explicit arg override, model-as-sole-arg, unknown-model abort); hardened snippets live-tested read-only against this repo (both rulesets in sync; duplicate simulation counts 2). shellcheck and bash -n clean; markdownlint and editorconfig-checker clean. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Contributor
There was a problem hiding this comment.
Pull request overview
This PR improves repo-config portability and reliability by (1) making configure.sh work correctly when carried downstream without the hub registry and (2) hardening the ruleset regen/audit snippets to avoid silently selecting a corrupt/multiline ruleset id when duplicate same-name rulesets exist.
Changes:
- Infer
releasevsoperationalinrepo-config/configure.shwhenregistry/repos.jsonis absent, and allow passing the model as the sole argument. - Update
repo-config/README.mdto document the new inference and model-only argument form, and harden the ruleset regen snippet to enforce exactly one ruleset per expected name. - Harden
AUDIT.mdruleset diff snippet to detect and report duplicate/zero same-name rulesets rather than diffing an arbitrary selection.
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
| repo-config/README.md | Documents new configure.sh behavior and hardens the regen snippet to require exactly one ruleset per expected name. |
| repo-config/configure.sh | Adds model inference for downstream carries (no registry) and supports configure.sh operational as a shorthand. |
| AUDIT.md | Updates the ruleset audit snippet to treat duplicate/zero same-name rulesets as an explicit defect/drift signal. |
gh api --paginate emits each page as a separate JSON doc; re-assemble with jq -s so a name match on a later page is never missed - the same trap configure.sh already guards against. Live-tested read-only against this repo (both rulesets in sync). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…lot #334) With --jq '.[]' the paginated fetch emits one JSON object per ruleset across all pages; jq -s re-assembles them into the single array the selections expect. The old wording described the un-filtered per-page behavior. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…334) An operational repo's develop ruleset diffs against operational/develop.json - the same registry-workflowModel selection audit.py makes; the snippet hard-coded repo-config/$b.json and would false-DRIFT every operational repo. Live-tested read-only against Vantage-Config (operational: both rulesets in sync via the swapped payload). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The model-only invocation examples now use the repo-root-relative repo-config/configure.sh form the docs use elsewhere, and the payload inference tests use -f (regular file), not -e. Inference matrix re-run: release/operational infer, both/neither abort. shellcheck clean. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…#334) The round-4 patch rewrote repo-config/README.md through a text-mode round-trip that stripped its CRLF endings - the Lint sources job correctly failed on it; restored byte-exact CRLF (editorconfig-checker clean). The regen snippet's develop-payload presence check now uses -f like the configure.sh inference checks. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #332 (core gap + the six bundled nits from the #330 sweep reviews; two of the six live in the blessed downstream reference and propagate via the Vantage-Config carry, not this repo - see below).
configure.sh: model inference on downstream carries
In a carry the registry is absent, so the no-arg form defaulted to
releaseand then hit the intended fail-safe abort on operational carries (missingdevelop.json) - arg 2 was effectively mandatory there. Now the model is inferred from whichdeveloppayload is carried (a carry holds exactly its own model's); ambiguous layouts (both or neither - e.g. a partial copy) abort rather than guess. Also: the model may be passed as the sole argument (configure.sh operational) - previously arg 1 was always parsed as a repo name (bundled nit, Utilities #417).Matrix-tested with the apply path stubbed: infer release, infer operational, both-present abort (exit 1), neither-present abort (exit 1), explicit arg-2 override, model-as-sole-arg, unknown-model abort. Hub behavior unchanged (registry present -> registry lookup, as before). shellcheck + bash -n clean.
Ruleset snippet hardening (duplicate-name id corruption)
The
id=$(gh api ... select(.name==...).id)pattern in the README regen snippet and AUDIT.md section 6 produced a multiline id when duplicate same-name rulesets exist, silently corrupting the follow-up API path (bundled nit, Utilities #417 + LanguageTags #278). Both snippets now fetch the list once and enforce exactly one ruleset per name: the regen snippet fails loudly (never regen from a guess); the audit snippet reportsfound N (defect/drift)and continues - matching the declared drift semantics. Live-tested read-only against this repo (develop + main in sync; duplicate simulation counts correctly).README wording
Documents the inference fallback and the model-only argument form (bundled nit, Utilities #417).
Bundled nits NOT in this PR (with rationale)
gh api --input -portability (MediaTools Mediatools #19): declined - fleet standard is current gh; not worth temp-file churn.--paginatein the secrets check (MediaTools Mediatools #19, LanguageTags docs: restructure codecov snippet comments to the summarized style #278, PlexCleaner Promote Copilot Skill Link Fix #854): these live in the blessed downstream self-audit reference (the Vantage-Config carry), not in hub files - propagated there directly after this merges (the hub's fleet audit readsspec/secrets.jsonprogrammatically already).Propagation caveat
This re-drifts the five existing carries (Vantage-Config + the four #330 sweep repos) until their next conformance touch; Vantage-Config is updated immediately after this merges since it is the blessed reference the queued operational standups (HomeAssistant-Config #16, ESPHome-Config #46, HomeAutomation-Config #21) will adapt from.
🤖 Generated with Claude Code