From e782c3dd33aa3e87809cb039b7c34735bc5f6096 Mon Sep 17 00:00:00 2001 From: Gianluca Carucci Date: Tue, 14 Jul 2026 10:59:17 +0200 Subject: [PATCH 1/2] [#209] refactor: consolidate gate/tooling scripts into @pair/dev-tools MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit New @pair/dev-tools package holds the genuinely repo-wide, no-package-affinity gates as tested TS modules (ADL 2026-07-13): code-hygiene-check (ported from scripts/code-hygiene-check.js) and sync-version-in-docs (ported from scripts/sync-version-in-docs.js). Both scripts deleted; root package.json and version.yml delegate to the new package. docs-staleness-check, skills-conformance-check, check-broken-links stay in their owning packages (website, knowledge-hub) — each needs that package's own context (docs tree, dataset), moving them would trade correct path resolution for a deep relative reach into a sibling package's internals. Also promotes skills-conformance's catalog-count check from WARN to hard ERROR (TODO #313/T1) now that next correctly states 35 skills. Refs: #209 Co-Authored-By: Claude Sonnet 5 --- .github/workflows/version.yml | 2 +- package.json | 3 +- packages/dev-tools/README.md | 20 ++ packages/dev-tools/package.json | 32 +++ .../dev-tools/src/code-hygiene-check.test.ts | 80 +++++++ packages/dev-tools/src/code-hygiene-check.ts | 135 ++++++++++++ .../src/sync-version-in-docs.test.ts | 163 ++++++++++++++ .../dev-tools/src/sync-version-in-docs.ts | 205 ++++++++++++++++++ packages/dev-tools/tsconfig.json | 6 + packages/dev-tools/vitest.config.ts | 30 +++ .../tools/skills-conformance-check.test.ts | 10 +- .../src/tools/skills-conformance-check.ts | 33 +-- pnpm-lock.yaml | 33 +++ scripts/code-hygiene-check.js | 63 ------ scripts/sync-version-in-docs.js | 112 ---------- 15 files changed, 723 insertions(+), 204 deletions(-) create mode 100644 packages/dev-tools/README.md create mode 100644 packages/dev-tools/package.json create mode 100644 packages/dev-tools/src/code-hygiene-check.test.ts create mode 100644 packages/dev-tools/src/code-hygiene-check.ts create mode 100644 packages/dev-tools/src/sync-version-in-docs.test.ts create mode 100644 packages/dev-tools/src/sync-version-in-docs.ts create mode 100644 packages/dev-tools/tsconfig.json create mode 100644 packages/dev-tools/vitest.config.ts delete mode 100644 scripts/code-hygiene-check.js delete mode 100644 scripts/sync-version-in-docs.js diff --git a/.github/workflows/version.yml b/.github/workflows/version.yml index 1f3c87b1..f7d9fd00 100644 --- a/.github/workflows/version.yml +++ b/.github/workflows/version.yml @@ -78,7 +78,7 @@ jobs: pnpm changeset version # Sync version into markdown/MDX files that hardcode it - node scripts/sync-version-in-docs.js "$OLD_CLI_VERSION" + pnpm sync-version -- "$OLD_CLI_VERSION" # Get new CLI version after changesets CLI_VERSION=$(node -e "console.log(require('./apps/pair-cli/package.json').version)") diff --git a/package.json b/package.json index 827e95be..8acaabe8 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,8 @@ "clean": "pnpm -w -r turbo prune && turbo clean && find . -type d \\( -name node_modules -o -name .turbo -o -name dist -o -name coverage \\) -exec rm -rf {} + 2>/dev/null || true; find . -type d -path './scripts/workflows/release' -prune -o -type d -name release -exec rm -rf {} + 2>/dev/null || true; find . -type f -name \"*tsbuildinfo\" -exec rm -f {} + 2>/dev/null || true", "a11y:report": "turbo a11y:report", "a11y:report:html": "turbo a11y:report:html", - "hygiene:check": "node scripts/code-hygiene-check.js", + "hygiene:check": "pnpm --filter @pair/dev-tools code-hygiene:check", + "sync-version": "pnpm --filter @pair/dev-tools sync-version", "docs:staleness": "pnpm --filter @pair/website docs:staleness", "skills:conformance": "pnpm --filter @pair/knowledge-hub skills:conformance", "dup:check": "jscpd apps packages", diff --git a/packages/dev-tools/README.md b/packages/dev-tools/README.md new file mode 100644 index 00000000..163a13b6 --- /dev/null +++ b/packages/dev-tools/README.md @@ -0,0 +1,20 @@ +# @pair/dev-tools + +Pair's own gate/tooling scripts, as tested TypeScript modules — the reference pattern for repo quality gates (per [ADL 2026-07-13-gate-tooling-code-in-tested-modules](../../.pair/adoption/decision-log/2026-07-13-gate-tooling-code-in-tested-modules.md)). + +## Tools + +| Script | Module | Purpose | +| --------------------- | ----------------------------- | ------------------------------------------------------------------------ | +| `code-hygiene:check` | `src/code-hygiene-check.ts` | Fails if suppression markers (`@ts-ignore`, `eslint-disable`, `.skip`) are committed | +| `sync-version` | `src/sync-version-in-docs.ts` | Detects/rewrites hardcoded CLI version strings across `.md`/`.mdx` docs | + +Both are runnable via the repo-root scripts (`pnpm hygiene:check`, `pnpm sync-version -- `), which delegate here (`pnpm --filter @pair/dev-tools