Upgrade kolibri-format to 3.0.1 and migrate ESLint to flat config
Los mantenedores suelen responder en 1 día
@LianaHarris360 ya está trabajando en esto.
Desde el 22/10/2026.
Evaluación
Este issue todavía no se ha evaluado.
Descripción
❌ This issue is not open for contribution. Visit Contributing guidelines to learn about the contributing process and how to find suitable issues.
Overview
kolibri-format 3.0.1 runs ESLint 9 and uses flat configuration. Flat configuration is the eslint.config.mjs format that replaced .eslintrc. Studio runs kolibri-format 1.0.1 and loads kolibri-format/.eslintrc, a file the package stopped shipping in version 2.4.0.
This issue moves Studio onto the new toolchain and keeps CI green. The new rules that version 3.0.1 adds stay off.
Complexity: High
Target branch: unstable
Context
What changed between the two versions:
| Item | 1.0.1 | 3.0.1 |
|---|---|---|
| ESLint | ^8.57 with .eslintrc |
^9.39 with flat configuration |
| Configuration file | .eslintrc.js |
eslint.config.mjs |
| Import plugin | eslint-plugin-import |
eslint-plugin-import-x, new rule names |
eslint-plugin-kolibri |
0.18.0 | 1.3.0 |
| Added plugins | none | jsdoc, vuejs-accessibility, n, small-import |
| Added dependency | none | kolibri-css-variables |
| Node engine | 18.x | 20.19.0 or later |
Version 1.3.0 of eslint-plugin-kolibri removes vue-no-unused-methods. It adds tests-no-hardcoded-strings, tests-no-stubs, no-undefined-translator-keys, vue-no-root-v-if-with-style-v-bind, and two theming rules.
Measured results across 943 frontend files. Autofix is the set of fixes that --write applies without help. Autofix rewrites 230 files. 2425 problems will remain in 364 files:
| Plugin | Problems | Autofix clears | Files |
|---|---|---|---|
| jsdoc | 1890 | 938 | 177 |
| kolibri | 833 | 203 | 135 |
| vue | 422 | 0 | 103 |
| jest | 170 | 155 | 19 |
| vuejs-accessibility | 51 | 0 | 28 |
| import-x, n, core | 59 | 14 | 44 |
Import resolution depends on the resolver settings. Measured counts for import-x/no-unresolved and import-x/order:
- No webpack resolver: 1284 and 530.
- Webpack resolver only: 518 and 0.
- Webpack resolver and node resolver: 0 and 0.
The linting job in CI runs pre-commit run --all-files. The frontend-lint hook calls pnpm run lint-frontend:format, which writes fixes to disk and fails when it changes a file. A commit that changes the configuration and leaves 230 files unformatted will fail that job on unstable.
Prettier 3.9 on its own wants to change 345 files, because it removes blank lines inside single file component blocks. The rule kolibri/vue-component-block-padding puts those lines back in the same pass. The result is 230 files, not 345.
The Change
eslint.config.mjsmust carry everything that.eslintrc.jscarries today: the six globals, the webpack resolver, the node resolver that pnpm needs, and the three rule overrides forkolibri/vue-component-class-name-casing,vue/no-v-text-v-html-on-component, andvue/attribute-hyphenation.package.jsonmust keepeslint-import-resolver-webpack, because the new configuration calls it, and thestylelint-config-*packages, because stylelint resolvesextendsagainst the repository root.- The lint dependencies in
package.jsonmust stop conflicting with ESLint 9.eslint ^8.57.0,eslint-plugin-kolibri 0.18.0,eslint-plugin-import, andeslint-plugin-jest ^29each need a bump or a removal. - Thirteen disable comments name
import/*rules. They must nameimport-x/*instead. - Nine comments name
kolibri/vue-no-unused-methods. Seven of them also namevue/no-unused-properties, which stays, so those seven need an edit and not a delete. The pair inshared/views/Tabs.vueat lines 30 and 107 can go. - Those nine comments must change in the same commit as the version bump. The rule is live in 0.18.0, so the comments still do work until the bump lands.
- Two files use
/* eslint-env jest */. Flat configuration ignores it and ESLint 10 fails on it. Both must use/* global jest */. - The scripts
lint-frontend:watchandlint-frontend:watch:formatpass--monitor. No version of the command line tool accepts that flag, so both scripts should be removed. - The 45
import-x,n, and core problems that autofix leaves behind must be fixed by hand. They are the evidence that the resolver settings work. - Every rule whose output autofix cannot clear must be turned off, each with a comment that names the follow-up issue: all
jsdocrules,kolibri/tests-no-hardcoded-strings,vue/no-restricted-static-attribute,vue/no-bare-strings-in-template, thevuejs-accessibilityrules, the two theming rules, and thejestrules that still report after autofix. .github/dependabot.ymlmust excludekolibri-globandkolibri-css-variablesfrom cooldown.- The formatting rewrite must land in the same pull request as the configuration change. It must be a commit of its own, and that commit must go in
.git-blame-ignore-revs.
Check these two things before writing any code:
- Make sure that pnpm links the Kolibri Design System into
kolibri-css-variables. That package declareskolibri-design-systemas an optional peer dependency and reads theme names from it. The Kolibri Design System is not in the hoistednode_modules/.pnpm/node_modules/. If the link is missing, each theming rule reportsThis rule cannot check theme namesonce per file and finds nothing. If the link is missing, addkolibri-css-variablesas a direct development dependency. - Read the autofix output for the four files that raise
ESLintCircularFixesWarning. Two fixers disagree in each one. The files areshared/composables/useChannelVersionHistory.js,shared/composables/useSpecialPermissions.js,shared/views/SidePanelModal/index.vue, andshared/vuex/draggablePlugin/module/getters.js.
Out of Scope
- The two theming rules.
kolibri/tests-no-hardcoded-stringsat 606 problems,vue/no-restricted-static-attributeat 261,vue/no-bare-strings-in-templateat 161,vuejs-accessibilityat 51, and thejsdocrules. Autofix forjsdoc/require-paraminserts@paramstubs. Those stubs raisejsdoc/require-param-descriptionfrom 359 to 551. Leave thejsdocblock off until enabled it rule by rule.kolibri/vue-no-rtl-breaking-inline-styles, which kolibri-format does not enable.- Changes to how the application behaves. If a rule cannot be satisfied by autofix or a small edit, turn it off and record it.
Acceptance Criteria
General
-
package.jsonlistskolibri-formatat3.0.1. -
.eslintrc.jsis gone andeslint.config.mjsholds every setting it carried. -
pnpm installruns under pnpm, andkolibri-css-variablesresolveskolibri-design-system. - The two theming rules report real violations when switched on by hand, and not
This rule cannot check theme names. -
import-x/no-unresolvedandimport-x/ordereach report 0 across the frontend. - No lint dependency in
package.jsonconflicts with ESLint 9. -
eslint-import-resolver-webpackand thestylelint-config-*packages are still listed. - No
/* eslint-env */comment is left in the frontend. - No disable comment names an
import/*rule orkolibri/vue-no-unused-methods. - The seven comments that also name
vue/no-unused-propertiesstill name it. - Every rule turned off in
eslint.config.mjscarries a comment that names the follow-up issue. - The formatting rewrite is a separate commit and its hash is in
.git-blame-ignore-revs. -
.github/dependabot.ymlexcludeskolibri-globandkolibri-css-variablesfrom cooldown. -
package.jsonno longer containslint-frontend:watchorlint-frontend:watch:format.
Testing
-
pre-commit run --all-filespasses from a clean tree. - A second
pre-commit run --all-fileschanges no file. -
pnpm testpasses. -
pnpm run buildsucceeds. -
ESLintCircularFixesWarningno longer appears, and the four files it named are correct.
Testing
pnpm install
pnpm run lint-frontend
pre-commit run --all-files
pnpm test
pnpm run build
Run pnpm install with pnpm and not with npm. The link between kolibri-css-variables and the Kolibri Design System is what the install is checking.
To confirm that link, turn the two theming rules on for one run. They must report about 155 and 58 problems. If there is a cannot check theme names error per file means the link is missing.
References
.github/workflows/pre-commit.ymlruns the lint job across all files..pre-commit-config.yamlholds thefrontend-linthook that writes fixes..git-blame-ignore-revsalready lists two formatting commits.- CI runs Node 20.x, which meets the new engine requirement. Local machines on Node 18 need an upgrade.
AI usage
I ran the kolibri-format 3.0.1 toolchain against Studio's frontend from a scratch install to produce the counts in this issue, with the repo working tree untouched. I used Claude Code to draft the issue from those results. I checked its claims about the CI lint job, the nine vue-no-unused-methods comments, and the resolver counts against the repository myself.
- Lenguaje dominante
- Python
- Estrellas
- 213
- Forks
- 314
- Merge medio
- 2 d 20 h
- PR fusionados (30 d)
- 65
Preparar el entorno
- Incluye un Dockerfile o un archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de learningequality/studio
-
Set unpublishable: true on PublishedChange by construction to simplify handleMaxRevs predicateAbiertoDEV: frontend P3 - low
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
learningequality/studio#5868 ·
Los mantenedores suelen responder en 1 día
-
TAG: tech update / debt
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
learningequality/studio#2245 ·
Los mantenedores suelen responder en 1 día
-
Turn on the KDS theming lint rules and move theme values out of inline stylesPosiblemente ocupada @LianaHarris360 la tomó hace 1 día. AbiertoDEV: frontend P1 - important
learningequality/studio#6329 · 1 asignado ·
Los mantenedores suelen responder en 1 día
-
bug DEV: frontend P0 - critical
Dificultad 4/5 3-5 días Aptitud para principiantes 25/100
learningequality/studio#6327 · 1 comentario · 1 reacción ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 3/5 1-2 días Aptitud para principiantes 25/100
learningequality/studio#6326 · 1 comentario ·
Los mantenedores suelen responder en 1 día
Todos los issues de learningequality/studio
Issues similares
-
bug
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
Los mantenedores suelen responder en 1 día
-
documentation
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
sergey-miryanov/gcmon#230 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Azure-Samples/azure-search-openai-demo#3249 ·
Los mantenedores suelen responder en 1 día
-
[BUG] Failed archive extraction deletes the dataset cachePosiblemente ocupada @dajiaohuang la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
alibaba/GraphScope#4674 ·