Skip to content

ci: port kotobae's quality gates and CI for TypeScript - #8

Merged
umiyosh merged 1 commit into
masterfrom
feat/quality-gates-ci
Oct 11, 2026
Merged

umiyosh merged 1 commit into
masterfrom
feat/quality-gates-ci

Conversation

@umiyosh

@umiyosh umiyosh commented Oct 11, 2026 •

Copy link
Copy Markdown
Owner

Closes #4 except the branch protection step (after merge). Part of #2.

Why

The repository had no lint, no formatter check and no CI, so nothing stopped a regression from landing. This ports kotobae's TypeScript gates so every pull request runs them.

What changed

  • ESLint (eslint.config.js): kotobae's config without the React plugins, Node globals. complexity / max-depth / max-lines / max-lines-per-function / max-params stay warnings.
  • Prettier (.prettierrc, .prettierignore): kotobae's settings, plus embeddedLanguageFormatting: off for Markdown. Without it Prettier added a trailing comma inside the README's settings.json example, which breaks the JSON a user pastes. The .ts files and docs are reformatted (formatting only).
  • Quality baseline (scripts/quality-gate*.mjs, quality-baseline.json, knip.json): the TypeScript scope of kotobae's gate. The Rust collectors and platform handling are removed. Two fixes on the way:
    • Knip 6 reports one entry per file with an array per issue type. kotobae's collector expects a type field per issue and so collects nothing. knipIssuesFromReport reads the new shape and has a test.
    • The ESLint message parser only read Function '...'. Async function 'main' ... fell back to a line-based key, so editing lines above main would have shown up as a new violation. It now reads async functions and methods, with a test.
  • Knip findings fixed instead of baselined: runFfmpeg, FilmPart, Scene and TimingScene were exported but unused outside their file. The ffmpeg binary is ignored (it is the PATH fallback on purpose).
  • Baseline: one entry, main in cli.ts with complexity 25 (limit 20).
  • Makefile: lint, fmt, fmt-check, typecheck, quality-test, lint-quality, lint-quality-ts, quality-baseline, and check (everything CI runs). test / test-coverage come with Add unit tests, the coverage gate and a render smoke test #5.
  • CI (.github/workflows/ci.yml): the node-suite job on pull_request, Node 22, npm ci, concurrency cancel, contents: read.
  • PR template in English, and a Development section in both READMEs.

Verification

  • make check: ESLint 0 errors / 1 baselined warning, Prettier clean, tsc clean, 21 quality gate tests pass, baseline gate unchanged
  • The reformatted CLI still behaves the same on a real work dir: narrate leaves timing.json byte-identical, and stills at 30 s and 57.5 s match earlier PNGs byte for byte
  • Plugin users do not get the new devDependencies: Claude Code 2.1.296 builds the plugin install from dependencies, optionalDependencies and peerDependencies only (read from the CLI's code, not from docs)
  • CI passes on this pull request (node-suite)

Not verified

  • After merge: add node-suite as a required status check on the Protect master ruleset (adding it before merge would block every open pull request that has no CI yet).

@umiyosh
umiyosh merged commit 84dbb8d into master Oct 11, 2026
1 check passed
@umiyosh
umiyosh deleted the feat/quality-gates-ci branch October 11, 2026 13:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Port kotobae's quality gates and CI

1 participant