[DX] TypeScript Quality Gates — ESLint, pre-commit hooks, Gitea CI #53
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What & Why
The TypeScript repo has no lint, no pre-commit hooks, and no CI workflow. Without these gates, type errors and style drift accumulate silently. This task matches the discipline the Python side already has.
Done looks like
pnpm lintruns ESLint across all TypeScript source and exits 0pnpm typecheckexits 0 (already works; just needs wiring)pnpm typecheckorpnpm lintpnpm typecheck && pnpm linton every PR tomainAGENTS.mdat workspace root documents the hook setup and push workflowmake installactivates the hooks with one commandOut of scope
Tasks
eslint,@typescript-eslint/eslint-plugin,@typescript-eslint/parserto workspace devDeps. Writeeslint.config.tsat workspace root covering allartifacts/**/*.tsandlib/**/*.ts. Fix any violations sopnpm lintexits 0.lintandtypecheckscripts to workspace rootpackage.jsonrunning across all packages viapnpm -r..githooks/pre-commitand.githooks/pre-pushrunningpnpm typecheck && pnpm lint, blocking on failure. Both executable.installtarget runsgit config core.hooksPath .githooks..gitea/workflows/ci.ymltriggering on PR tomain;pnpm install --frozen-lockfilethenpnpm typecheck && pnpm lintonnode:22-alpine.make install), lint/typecheck commands, PR-only merge convention, push viabash scripts/push-to-gitea.sh.Relevant files
package.jsontsconfig.base.jsonartifacts/api-server/package.jsonAll items from this issue are already implemented and merged to
main:eslint.config.tswithtypescript-eslint—pnpm lintexits 0 (15 warnings, 0 errors)lintandtypecheckscripts present and working.githooks/pre-commitand.githooks/pre-push— both executable, block on typecheck/lint failuresinstalltarget runsgit config core.hooksPath .githooks.gitea/workflows/ci.yml— runs typecheck + lint on PRs to main usingnode:22-alpinemake install), quality commands, push workflow, and PR conventionsNo additional changes needed. This issue can be closed.
All six requirements from this issue are already implemented on
main:eslint.config.tswithtypescript-eslint, warnings-only forno-require-importsandno-explicit-anypnpm lint(exits 0) andpnpm typecheck(exits 0, runs across all packages).githooks/pre-commitand.githooks/pre-push, both executable, block on failuremake installrunsgit config core.hooksPath .githooks.gitea/workflows/ci.ymltriggers on PR tomain, runs typecheck + lint onnode:22-alpinemake install), lint/typecheck commands, push workflow, and PR conventionsVerified:
pnpm typecheckexits 0 andpnpm lintexits 0 (15 warnings, 0 errors). No additional work required — this issue can be closed.PR created: #86
All quality gate infrastructure was already in place (ESLint config, hooks, CI workflow, Makefile, AGENTS.md). The only code fix needed was moving
slideStylesbefore theslidesarray inartifacts/mobile/app/onboarding.tsxto resolve TS2448/TS2454 (used before declaration). Bothpnpm typecheckandpnpm lintnow exit 0.