Changelog
What changed for users of eslint-config, per version.
@workspace/eslint-config 2.2.0Developmentunreleased, in development in Foundationbaseline ce081dc3
The version line at the top of this page is read from the package and the release register of Foundation. A version heading in the changelog below is not a release by itself: only a recorded release is. While the status says development, the content can still change before it is released.
Notable changes to @workspace/. Format based on
Keep a Changelog; versioning per
Semantic Versioning.
This file is the authoritative release history for @workspace/
from v1.0.0 onward (the externally-publishable baseline). The pre-baseline
0.0.0 sentinel was never published.
[Unreleased]#
Documentation#
No links to documents of another repository. References to Datyx documents (
DATYX-, itsWERKWIJZE. md docs/) are text now, marked as history, instead of links that resolve nowhere in the repository that holds the package. Links into the shared base (docs/) stay. No preset changed.standards/
[2.2.0] — 2026-10-20#
Changed (platform ADR-115)#
The ESLint plugins the presets import are
dependencies, no longerdev:Dependencies @eslint-,react/ eslint- plugin @eslint/,js @next/,eslint- plugin- next eslint-,config- prettier eslint-,plugin- only- warn eslint-,plugin- react- hooks eslint-,plugin- turbo globalsandtypescript-, at the same ranges. A preset needs them wherever it is loaded, so an installation of the package now brings them.eslint eslintandtypescriptstay development dependencies of the package itself; the workspace that runs ESLint declares its owneslint. No rule, severity or option changed.Transferable as a registered tooling owner of the reusable-package register (D-10): a repository that receives active-ui or active-format by managed source transfer requests it with
--owners eslint-, so their own lint runs there. The package carriesconfig .(gitattributes * -text) so a Git checkout keeps its bytes.
Added#
The package now lints its own source with its own baseline: an
eslint.onconfig. mjs baseplus"lint": "eslint . --max-in the manifest. Measured at 0 warnings, so no consumer budget is affected. This adds one workspace to a repo-widewarnings 100" pnpm lintrun.A
descriptionfield in the manifest.
Fixed#
The README claimed MIT.
LICENSEcarries the proprietary text and the manifest declares"license": "UNLICENSED"with"private": true; only the README's License section still said MIT, inherited from the v1.0.0 entry below. Corrected. No licence terms changed with this entry.resource-is documented inrules API.. The fourth exported subpath has existed since v1.1.0 (see below) but appeared in no API reference.md The two
Catchselectors are documented.Clause base.carries fivejs no-selectors; the reference listed the three em-dash ones and omitted the catch-binding pair. The documented consequence is new too:restricted- syntax testswitches the whole rule id off, so test files lose the catch-binding check together with the em-dash check.Files Override Stale claims about the workspace corrected: the warning-debt register is empty (the README still named a grandfathered workspace with ceiling 195, removed on 2026-09-13), the consumer counts were wrong in four documents, and a source comment in
base.pointed at a standards section that does not exist. Frozen counts are replaced by measuring commands where the number was a snapshot rather than an event.js
Changed#
Authored source is English in
base.,js next.,js react-andinternal. js react-. Comments only: no rule name, severity, selector or option changed, and the toolchain gate is green before and after.rules. js New ADR D-9 for the resource-rules scoping decision that has been in force since v1.1.0, and an amendment to D-2 whose "a package may raise its own cap" rationale has been untrue since D-8.
Buiten dit package, 2026-09-13#
lint.ingrandfathered packages/is leeg: de entry voorrepo- tools/ src/ tools/ validation- debt- baseline. json @workspace/(plafond 195) is verwijderd nadat die workspace op 37 waarschuwingen kwam. Het gewone budget van 100 geldt weer voor elke workspace; het ratelmechanisme van D-8 blijft staan. Zieactive- actions DONE..md lint.in hetzelfde bestand is leeg:watch apps/stond er op 96 en meet na de headroomtranche 66. Ziepension DONE..md
[2.1.0] — 2026-09-13 (later dezelfde dag)#
Minor bump: één additief configuratieblok in base, geen wijziging aan regels of presets. Besluit: D-8.
Added#
Node-globals voor
**/in*. mjs base.(js globals.). Elknode .-bestand in de repository is een Node-module; zonder dit blok melddemjs no-achttien keerundef process,console,URL,TextenDecoder structuredin acht bestanden, en droegClone active-daarvoor een eigen lokaal blok. Dat lokale blok is verwijderd. De gateui lint-bewaakt het blok.eslint- toolchain. mjs
Buiten dit package, dezelfde werkstroom#
Root
pnpm lintdraaitturbo lint --concurrency=4 --continue: volledige traversering, exitcode 1 bij elke gefaalde taak.validation-›debt- baseline. json lint.is een afgedwongen ratel geworden (grandfathered packages/, proefbank RAT1 t/m RAT8);repo- tools/ src/ lib/ lint- debt. mjs @workspace/staat op plafond 195, gekalibreerd op de meting na de quick-win-tranche.active- actions De quick-win-tranche van 24 lintbevindingen is uitgevoerd; zie
DONE..md
[2.0.0] — 2026-09-13#
ESLint 10 en een andere React-lintautoriteit. Major bump: de react/-regels verdwijnen uit react- en next-; wie er een consumer-override op had, moet die verwijderen (in de repository was dat één eslint--directive). Besluit: D-7.
Changed#
ESLint 10 (
eslint ^10.10.0,@eslint/) in alle 81 manifesten, in één spelling. ESLint 9 was end-of-life sinds 2026-08-06. Nieuw injs ^10.0.1 eslint:recommendeden bewust intact gelaten:no-,useless- assignment no-,unassigned- vars preserve-(gemeten: 45, 0 en 2 meldingen repo-breed).caught- error eslint-vervangen doorplugin- react @eslint-(exacte pin, geen caret). Beide React-presets spreiden nu het gedeelde blok uit het nieuwereact/ eslint- plugin@5.18.10 react-: 16 pariteitsregels (waaronderrules. js dom-enno- unknown- property dom-, die buiten het upstream-preset staan), 11 extra regels met laag volume (no- unsafe- target- blank no-,nested- component- definitions no-,unnecessary- use- prefix no-,children- map no-,children- for- each no-,clone- element jsx-,no- key- after- spread jsx-,no- leaked- dollar jsx-,no- leaked- semicolon dom-,no- void- elements- with- children web-,api- no- leaked- timeout web-) en 12 hooksregels van ESLint React explicietapi- no- leaked- event- listener off.eslint-is de enige hooksautoriteit; deplugin- react- hooks react--directives in de codebase blijven het vocabulaire.hooks/ * settings.(het pad dat op ESLint 10 crashte) is vervangen doorreact. version: 'detect' settings['react-van ESLint React.x']. version: 'detect' Em-dash ban gescoped op JSX (Walt-besluit 2026-08-02; stond sindsdien als Unreleased). De
Literal- enTemplate-selectors inElement no-matchen alleen nodes binnen eenrestricted- syntax JSXElement/JSXFragment;JSXTextis ongewijzigd. Strings buiten JSX zijn developer-facing en vallen niet onder de regel. Zie D-1 § Scope-herziening.
Added#
react-(intern, geen subpath-export): het gecureerde React-blok plus een testbestand-verzachting voorrules. js @eslint-(fixtures diereact/ jsx- no- children- prop childrenin een props-object meegeven).Gate
lint-ineslint- toolchain. mjs packages/met mutatieproef: één ESLint-spelling repobreed, exacte pin oprepo- tools @eslint-, geenreact/ eslint- plugin eslint-in een first-party manifest, de pariteitsset aan en de hooksduplicaten uit in de werkelijk geladen presets.plugin- react
Removed#
react/enreact- in- jsx- scope: off react/als overrides (er is geenprop- types: off react/-regel meer), en daarmee de* prop--asymmetrie tussen de twee React-presets.types react/zonder vervanging: nul bevindingen, geen schoon equivalent, marginale waarde (D-7 punt 5).no- unescaped- entities De ESLint 9-hold op
eslinten@eslint/injs .;ncurc. yml @eslint-staat daar nu als bewuste hold (exacte pin).react/ eslint- plugin
Notes for consumers#
De import-paden zijn ongewijzigd (./, ./, ./, ./). Nieuwe meldingen dragen het voorvoegsel @eslint-; een eslint- op een react/-regel is een ongebruikte directive geworden en meldt zichzelf.
[1.1.0] — 2026-07-24#
Added#
New subpath export
./— a project-generic ESLint plugin for the resource data-access mechanism, with two defence-in-depth rules:resource- rules resources/(Prismaselect- required find/Many findmust pass an explicitFirst select) andresources/(nono- raw- where- spread {.../where} ...merge). Both carry no project-specific identifiers, so they travel with the platform layer.extra Where resourcereturns a ready-made flat-config block; the caller supplies the scope. See README § Resource rules.Rules Config(files)
Minor bump: additive public API, no change to the existing presets or rule shapes.
[1.0.2] — 2026-05-20 (later same day)#
Changed#
CI lint-cap verlaagd van 500 naar 100, uniform repo-breed. Toepasbaar nadat de warning-cleanup-sessie 86 outstanding warnings (na eerdere 214 any + 44 em-dash sweeps) naar 0 bracht. Hogere per-package caps (e.g.
active-op 1000) opgeheven — alle 41 workspaces nu uniform op 100.grid Docs bijgewerkt voor de cap-verlaging:
CLAUDE.,md docs/,ARCHITECTUUR. md docs/,guidelines/ CI- PIPELINE. md packages/.eslint- config/ docs/ {ARCHITECTURE,DECISIONS,FUNCTIONEEL- OVERZICHT,INDEX}. md DECISIONS.heeft nu een tweetraps-geschiedenis (0 → 500 → 100).md § D- 2
Geen ESLint-rule-shape-wijzigingen — alleen de CI-cap en bijbehorende doc-strings.
[1.0.1] — 2026-05-20#
Changed#
Em-dash rule message: hyphen-minus (
-) toegevoegd aan de lijst van toegestane vervangingen in deno--fail-message. Vorige tekst: "Use ':', '.', '(', or leave empty". Nieuwe tekst: "Use '-', ':', '.', '(', or leave empty". Dezelfde aanpassing inrestricted- syntax packages/(locale-JSON-verifier hint).scripts/ src/ verify- no- emdash. ts PAGE_STANDARDS-doc: nieuw "CLI / log line"-rij in de replacement-tabel met
-als visual-equivalent voorbeeld; korte alinea onder de tabel met wanneer hyphen wel/niet de juiste keuze is.Geen ESLint-rule-shape-wijzigingen — alleen de error-message en doc-guidance. Bestaande regel-detectie (Literal/TemplateElement/JSXText) ongewijzigd. Hyphen-minus was al toegestaan via §859 van PAGE_STANDARDS; deze release maakt dat ook zichtbaar in de message die ontwikkelaars als eerste zien.
[1.0.2-catch-naming] — 2026-05-20 (ongenummerd bij release; stond tot 2026-09-13 als tweede "Unreleased"-kop)#
Added#
no-rule uitgebreid met tweerestricted- syntax Catch-selectors dieClause catch (e)encatch (error)als ESLint-error markeren. Materialiseert dedocs/-claim die tot deze release feitelijk onjuist was. AST-only: triggert niet op string-literals of comments. Cleanup van 7 occurrences (2 real-code, 5 in template-literals/JSDoc) doorgevoerd in dezelfde commit. Zieguidelines/ CODING_ STANDARDS. md § Catch variable naming DONE.2026-05-20 voor volledige scope + rationale.md
Audit-only (geen source-wijziging)#
Wrong-preset audit voltooid: twee packages (
active-,auth active-) onderzocht op de hypothese dat ze ten onrechte opconfig react-zaten. Uitkomst: beide false positives — beide hebben eigeninternal .-files + React-imports. ROADMAP-item §1 ingetrokken. Volledige bevindingen intsx DONE.2026-05-20.md
[1.0.0]: 2026-05-19#
First stable major release. External-publishability milestone.
Locks in the three-preset surface (base, react-, next-)
and commits to an API-stability promise from this version onward. The
version bump from 0.0.0 to 1.0.0 marks the transition from
never-published sentinel to a tagged baseline.
The release does not change any ESLint rules. It locks in the current
shape, ships supporting documentation, and adds the missing license
field plus a LICENSE file.
Added#
LICENSE: standard MIT text. The package shipped without an attached license file before; this aligns the manifest with reality.README.: feature summary, quick-start (extending in a consumer'smd eslint.), preset table, key-rules table, and documentation links. Replaces the 72-byteconfig. mjs @turbo/-template placeholder that lingered fromeslint- config turbo init.docs/: central navigation with role-based reading paths.INDEX. md docs/: preset graph (1 base + 2 specializations), plugin-stack order inARCHITECTURE. md base., em-dash AST-selector mechanism,js only--downgrader explanation, the documented asymmetries betweenwarn react-andinternal next-, and the relationship tojs CLAUDE..md docs/: consumer distribution across the three presets (5 Next.js apps onFUNCTIONEEL- OVERZICHT. md next-, 12 React-library packages onjs react-, 21 server-only packages oninternal base), comparison with the typescript-config consumer mapping, and the scope boundary against Prettier / Vitest / Husky.docs/: per-preset reference (When-to-use, Spreads, Adds, Overrides, example consumerAPI. md eslint.) plus a project-rule reference table and a plugin-stack reference.config. mjs docs/: six ADRs (D-1 through D-6) covering the high-impact ESLint rule choices and the structural decisions: D-1 em-dash ban viaDECISIONS. md no-, D-2restricted- syntax eslint-as severity-downgrader, D-3plugin- only- warn ^_-prefix ignore-patterns forno-, D-4 flat-config commitment + three-preset structure, D-5 no separateunused- vars nodejspreset, D-6 asymmetries betweenreact-andinternal next-.js docs/: open work, including a wrong-preset audit for two packages onROADMAP. md react-(internal active-,auth active-), a documentation drift inconfig CODING_about catch-naming enforcement, and the ESLint-major-upgrade path constrained bySTANDARDS. md eslint-'s compatibility window.plugin- react docs/: this file.CHANGELOG. md
Changed#
package.version bumped fromjson 0.0.0to1.0.0.package.addsjson "license": "MIT", matching the newLICENSEfile.
Notes for consumers#
No ESLint rule changes. Existing imports continue to work unchanged across all three presets:
@workspace/eslint- config/ base @workspace/eslint- config/ react- internal @workspace/eslint- config/ next- js
The documentation tree under ./ is the new source of truth for
the rule rationale. Treat README. as the orientation entrypoint
only.
Known drift (documented, not fixed)#
The following items are intentionally kept as-is for the v1.0.0
baseline; see ROADMAP. for the reasoning:
Redundant re-spreading of
js.,configs. recommended eslint, andConfig Prettier tseslint.inconfigs. recommended react-andinternal. js next..js react/declared inprop- types: off react-but absent ininternal next-(no behavioural impact under the current plugin stack).js Three-form naming for the Next preset: filename
next., export pathjs ./, named exportnext- js next.Js Config