ci: wire Biome as the linter (replace never-installed eslint)#8
Merged
Conversation
Every workspace package shipped a "lint": "eslint ..." script, but eslint was never installed anywhere in this fork (no devDependency, absent from the lockfile) and the leftover root .eslintrc.json never actually ran. The org standard linter is Biome, so adopt it to match the agiletec repo. - Add @biomejs/biome to root devDependencies (no pnpm catalog here, pinned). - Add biome.json replicating agiletec's curated ruleset (recommended:false + error-level rules), formatter, and vcs blocks. - Replace "eslint ..." with "biome check ." in all 20 package lint scripts (packages/gemini-core left as its echo no-op, per design). - Remove the orphaned .eslintrc.json. - Apply `biome check --write` (formatting + safe fixes) and fix the residual real violations: unused catch bindings, escape/shadowed-global renames, redundant test non-null assertions, a placeholder async generator, and a generic-T cast where biome's Object.hasOwn safe-fix outran tsc. Rules tuned for inherited Qwen-fork code (for reviewers): - noControlCharactersInRegex: off — terminal/ANSI handling intentionally matches control chars (every hit carried an eslint-disable no-control-regex). - noUndeclaredVariables: off — redundant with tsc and misfires on TS type references; mirrors agiletec's TypeScript override. - noExplicitAny / noEmptyBlockStatements: warn — too noisy to gate on now across the fork; kept visible as warnings for later cleanup.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
The org reusable CI (
node-pnpm-ci.yml, adopted in #4) runspnpm turbo run build lint test, butlintwas guaranteed to fail: every workspace package shipped a"lint": "eslint ..."script while eslint was never installed anywhere in this fork (no devDependency, absent frompnpm-lock.yaml), and the leftover root.eslintrc.jsonnever actually ran. The org standard linter is Biome (see theagiletecrepo).#4 merged the CI workflow to
mainbut did not fix the eslint wiring, soci / ciis currently red onmain. This PR makespnpm turbo run lintpass.What
@biomejs/biome@^2.4.16to rootdevDependencies(no pnpm catalog in this repo, so pinned literally).biome.jsonreplicatingagiletec's curated ruleset (recommended: false+ error-level rules), formatter, and vcs blocks;files.includesadapted to this layout."eslint ..."with"biome check ."in all 20 package lint scripts (packages/gemini-corekeeps itsechono-op by design)..eslintrc.json.biome check --write(formatting + safe fixes) and fix the residual real violations: unused catch bindings,escape/shadowed-global renames, redundant test non-null assertions, a placeholder async generator, and a generic-Tcast where biome'sObject.hasOwnsafe-fix outrantsc.Rules tuned for inherited Qwen-fork code
noControlCharactersInRegex: off— terminal/ANSI handling intentionally matches control chars (every hit carried aneslint-disable no-control-regex).noUndeclaredVariables: off— redundant withtscand misfires on TS type references; mirrorsagiletec's TypeScript override.noExplicitAny/noEmptyBlockStatements: warn— too noisy to gate on now across the fork; kept visible as warnings for later cleanup.Verification
pnpm turbo run lint→ 2 successful, 2 total (the two workspace packages,@airiscode/cli+@airiscode/core).Pre-existing failures (NOT addressed here — out of lint scope)
ci / cirunsbuild lint test. Two pre-existing, unrelated failures remain (they were masked in #4's run because turbo fail-fast aborted on the eslint error first):@airiscode/cli#buildfailserror TS17004: Cannot use JSX unless the '--jsx' flag is provided— the airis-generatedtsconfig.base.jsonhas nojsxoption but the CLI uses Ink/React JSX. Fix belongs inmanifest.toml [typescript]+airis gen(or a hand-setjsxin the generated tsconfig).@airiscode/core#test(and cli) failMISSING DEPENDENCY '@vitest/coverage-v8'— the vitest config requests coverage but the provider is not installed anywhere. Fix: add@vitest/coverage-v8devDep (or drop coverage from the vitest config).These block full
ci / cigreen and should be handled separately.