@rtorcato/repo-tooling 3.9.0 → 3.9.2

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
@@ -100,7 +100,7 @@ npx @rtorcato/repo-tooling fix bun --yes --json # Bun runtime/test confi
100
100
 
101
101
  ## Conventions in this repo
102
102
 
103
- - Conventional commits enforced via commitlint; header max 72 chars
103
+ - Conventional commits enforced via commitlint; header max 100 chars, body/footer line length unenforced
104
104
  - Biome for lint + format (run via `pnpm exec biome check --config-path=tooling/biome/biome.json src scripts`)
105
105
  - Tests live alongside source in `tests/`; vitest with no separate config
106
106
  - semantic-release runs on push to `main`; `fix:` → patch, `feat:` → minor, `chore:` / `docs:` → no release
@@ -20,8 +20,13 @@ const COUNTER_GLOW = '#6e7bff';
20
20
  const INK = '#0A0E16';
21
21
  const TEXT = '#e6edf3';
22
22
  const MUTED = '#9ba6b8';
23
+ /** `"` matters because this output also lands in double-quoted attributes (the `aria-label` below). */
23
24
  function esc(s) {
24
- return s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
25
+ return s
26
+ .replace(/&/g, '&amp;')
27
+ .replace(/</g, '&lt;')
28
+ .replace(/>/g, '&gt;')
29
+ .replace(/"/g, '&quot;');
25
30
  }
26
31
  /**
27
32
  * Greedy word wrap to a character budget. Character-budgeted rather than
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rtorcato/repo-tooling",
3
- "version": "3.9.0",
3
+ "version": "3.9.2",
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": [
@@ -2,11 +2,10 @@ export default {
2
2
  extends: ["@commitlint/config-conventional"],
3
3
  ignores: [
4
4
  (commit) => commit.includes("[skip ci]"),
5
- // Bot commit bodies are machine-written blocks (dependabot's
6
- // `- dependency-name: …` YAML) that never wrap at 72, so every bot PR
7
- // failed body-max-line-length. commitlint can't relax a single rule per
8
- // commit, so skip bot commits wholesale — squash-merge uses the PR
9
- // title, which is still linted on the merge commit.
5
+ // Bot commits are machine-written end to end, including headers long
6
+ // enough to trip header-max-length. Skipping them wholesale keeps bot
7
+ // PRs green — squash-merge uses the PR title, which is still linted on
8
+ // the merge commit.
10
9
  // ponytail: matches the trailer, not a bare "[bot]", so a human commit
11
10
  // that merely mentions a bot is still linted.
12
11
  (commit) => /^Signed-off-by: .*\[bot\]/m.test(commit),
@@ -32,10 +31,15 @@ export default {
32
31
  ],
33
32
  // 100 is the conventional-commits/semantic-release default. 72 was too
34
33
  // tight: GitHub appends " (#NN)" to squash commits, overflowing the
35
- // header on main and skipping the release. Body/footer stay at 72.
34
+ // header on main and skipping the release.
36
35
  "header-max-length": [2, "always", 100],
37
- "body-max-line-length": [2, "always", 72],
38
- "footer-max-line-length": [2, "always", 72],
36
+ // Body/footer length is unenforced. Machine-written commits (agents,
37
+ // bots) don't wrap, and a `BREAKING CHANGE:` footer — the input
38
+ // semantic-release reads to cut a major — is the worst thing to make
39
+ // someone hand-rewrap. The subject rules below decide the release
40
+ // type and stay enforced.
41
+ "body-max-line-length": [0],
42
+ "footer-max-line-length": [0],
39
43
  // Enforce case rules (allow common patterns)
40
44
  "subject-case": [0], // Disable case enforcement to allow flexibility
41
45
  "type-case": [2, "always", "lower-case"],