@rtorcato/repo-tooling 3.38.2 → 3.38.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/AGENTS.md CHANGED
@@ -98,6 +98,8 @@ npx @rtorcato/repo-tooling fix claude-skills --yes --json
98
98
 
99
99
  Fixers marked `explicitOnly` are exempt from `fix` all *and* from `fix --yes` — they only run when named as the target. Today that is `claude-skills`, the one fixer whose blast radius is outside the repo.
100
100
 
101
+ The same goes for every `optional-missing` finding: a bulk `fix` records it `skipped`, because optional tools are often mutually exclusive (Biome / ESLint / Prettier / Oxlint, semantic-release / Changesets / Release Please) and installing them all is never the intent (#630). Name the one you want — `fix editorconfig --yes`.
102
+
101
103
  A fixer may also **refuse** — the target file holds something the generator cannot reproduce, so overwriting would destroy it. Today that is `dependabot` against a config with repo-local `ignore:` rules (#422), and `biome` against a `biome.json` that does not parse, whose settings cannot be merged (#587). A targeted `fix dependabot` then exits 1 with `error: dependabot-ignore-rules`; a bulk `fix --yes` records it `skipped` and carries on with the rest. Neither `--yes` nor `--json` overrides it — resolve the named rules by hand and re-run.
102
104
 
103
105
  ## Source-of-truth files in the repo
@@ -502,8 +502,10 @@ export async function fixCommand(target, options = {}) {
502
502
  if (!silent) {
503
503
  console.log(` ${chalk.bold(result.check)} (${result.status}) → ${fixer.target}`);
504
504
  }
505
- // Opt-in only — `--yes` must not sweep in a fixer that writes outside the repo.
506
- if (fixer.explicitOnly) {
505
+ // Opt-in only — `--yes` must not sweep in a fixer that writes outside the repo,
506
+ // nor an optional tool: optional alternatives (Biome/ESLint/Prettier/Oxlint,
507
+ // semantic-release/Changesets/Release Please) are mutually exclusive (#630).
508
+ if (fixer.explicitOnly || result.status === 'optional-missing') {
507
509
  actions.push(recordFor(fixer.target, result.check, result.status, 'skipped', []));
508
510
  if (!silent) {
509
511
  console.log(chalk.gray(` skipped — run \`fix ${fixer.target}\` explicitly`));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rtorcato/repo-tooling",
3
- "version": "3.38.2",
3
+ "version": "3.38.3",
4
4
  "description": "One CLI to scaffold, audit and fix your repo's whole toolchain — linting, tests, commits, releases & CI.",
5
5
  "type": "module",
6
6
  "keywords": [