pre-commit: parallel: true commands: lint: glob: "*.{js,jsx,ts,tsx}" run: bunx oxlint {staged_files} format: glob: "*.{js,jsx,ts,tsx,json,md,yaml,yml}" # --no-error-on-unmatched-pattern: don't fail when staged files all # fall under .prettierignore (e.g. docs-only changes to docs/docs.json). run: bunx oxfmt --check --no-error-on-unmatched-pattern {staged_files} typecheck: glob: "*.{ts,tsx}" run: cd packages/core && bunx tsc --noEmit && cd ../studio && bunx tsc --noEmit filesize: # Scoped to packages/studio — the 500 LOC limit is a studio architecture # standard enforced as part of the App.tsx decomposition work. Player and # other packages enforce size discipline via code review and convention. # Files temporarily over the limit are listed in .filesize-allowlist. glob: "packages/studio/**/*.{ts,tsx}" exclude: "(\\.test\\.(ts|tsx)$|\\.generated\\.)" run: | for f in {staged_files}; do if grep -qxF "$f" .filesize-allowlist 2>/dev/null; then continue; fi lines=$(wc -l < "$f") if [ "$lines" -gt 500 ]; then echo "ERROR: $f has $lines lines (max 500) — add to .filesize-allowlist if temporarily needed" exit 1 fi done commit-msg: commands: commitlint: run: bunx commitlint --edit "{1}"