@shivaedev/quality 0.10.0 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.11.0 - 2026-10-05
4
+
5
+ ### Added
6
+
7
+ - The preset turns on `noNonScalableViewport` at `error`: a `<meta name="viewport">` with `user-scalable=no` stops people from zooming. The rule has no fix. A repository that upgrades records its existing findings with `quality baseline write --rule biome`.
8
+
9
+ ### Changed
10
+
11
+ - The preset sets `noUndeclaredClasses` and `noInlineStyles` off and declares why: the first cannot resolve a stylesheet imported through an alias and does not know Tailwind utilities, and an inline style is the right tool for a value computed at run time.
12
+
3
13
  ## 0.10.0 - 2026-10-05
4
14
 
5
15
  ### Added
package/README.md CHANGED
@@ -389,13 +389,13 @@ quality baseline migrate [--config <file>] [--from <file>]
389
389
  The preset sets:
390
390
 
391
391
  - **Formatting:** tabs, a line width of 150, double quotes, semicolons, trailing commas and operators at the start of a wrapped line. An object key keeps its quotes, because a quoted key marks a [foreign name](#foreign-names).
392
- - **Lint:** every rule Biome recommends, at `error`, and a list of stricter rules on top, among them `noUnsafeTypeAssertion`, `useBlockStatements`, `useNumericSeparators`, `useUnicodeRegex`, `useLiteralKeys`, `noFloatingPromises`, `useExhaustiveDependencies`, `it` for every test, function declarations over function expressions, interfaces for object types, a cognitive complexity limit of 15, no nested ternaries, and the naming rules under [Naming](#naming).
392
+ - **Lint:** every rule Biome recommends, at `error`, and a list of stricter rules on top, among them `noUnsafeTypeAssertion`, `useBlockStatements`, `useNumericSeparators`, `useUnicodeRegex`, `useLiteralKeys`, `noFloatingPromises`, `useExhaustiveDependencies`, `it` for every test, no viewport that disables zoom (`noNonScalableViewport`), function declarations over function expressions, interfaces for object types, a cognitive complexity limit of 15, no nested ternaries, and the naming rules under [Naming](#naming).
393
393
  - **Imports:** organized in five groups: Node and Bun builtins, packages, `@shivaedev/*` packages, aliases and relative paths. Biome counts as an alias a specifier that starts with `#`, `@/`, `~`, `$` or `%`; a tsconfig path such as `@app/*` sorts with the packages, and Biome's `noUndeclaredDependencies` takes it for one, so name aliases in a form Biome recognizes.
394
394
  - **Assist:** organized imports and sorted keys, attributes, enum members, interface members and properties. Keys are sorted in JSON and in object literals alike, but only reported: `quality fix` leaves the order to the author. `package.json` is left out, because `manifests/sorted` gives it the order npm users expect.
395
395
  - **Plugins:** GritQL rules that ban ambient time, randomness, `console` and `process.env` for Effect's services, and the naming plugins under [Naming](#naming). They load from `./node_modules/@shivaedev/quality/biome/plugins`, so the package must be installed at the repository root.
396
396
  - Files ignored by git are skipped.
397
397
 
398
- The preset turns off `noUnusedVariables` and `noUnusedFunctionParameters`, because the tsconfig presets report them through TypeScript, allows default exports in `*.config.*` files, which tools load through the default export, and turns off `useComponentExportOnlyModules` in `*.test.*` and `*.spec.*` files, which define the helper and harness components they render. It also turns off `noProcessGlobal`, `useJsonImportAttributes`, `noMisusedPromises`, `useExhaustiveSwitchCases`, `useSortedClasses`, `noDelete`, `useConsistentArrayType`, `useConsistentCurlyBraces`, `noEqualsToNull` and `noSkippedTests`, because `quality fix` applies every lint fix and their fixes changed behavior or did not terminate on real code. It declares these weakenings in its `declarations.json`, so `suppressions/biome-overrides` takes them as declared. Every other weakening a repository adds is an override it declares with a reason.
398
+ The preset turns off `noUnusedVariables` and `noUnusedFunctionParameters`, because the tsconfig presets report them through TypeScript, allows default exports in `*.config.*` files, which tools load through the default export, and turns off `useComponentExportOnlyModules` in `*.test.*` and `*.spec.*` files, which define the helper and harness components they render. It also turns off `noProcessGlobal`, `useJsonImportAttributes`, `noMisusedPromises`, `useExhaustiveSwitchCases`, `useSortedClasses`, `noDelete`, `useConsistentArrayType`, `useConsistentCurlyBraces`, `noEqualsToNull` and `noSkippedTests`, because `quality fix` applies every lint fix and their fixes changed behavior or did not terminate on real code. It keeps `noUndeclaredClasses` off, because the rule cannot resolve a stylesheet imported through an alias and Tailwind utilities are not declared in CSS, and `noInlineStyles` off, because an inline style is the right tool for a value computed at run time. It declares these weakenings in its `declarations.json`, so `suppressions/biome-overrides` takes them as declared. Every other weakening a repository adds is an override it declares with a reason.
399
399
 
400
400
  An autofix applies only a change that removes no decision; a fix that can change behavior or delete something written on purpose reports only, and the author decides. The preset keeps `noAccessKey`, `noAriaHiddenOnFocusable`, `noAutofocus`, `noInteractiveElementToNoninteractiveRole`, `noNoninteractiveElementToInteractiveRole`, `noNoninteractiveTabindex`, `noRedundantRoles`, `useValidAriaProps`, `useValidAriaRole`, `noImportantStyles`, `noConstAssign`, `noUnusedPrivateClassMembers`, `useExhaustiveDependencies`, `noFloatingPromises`, `useConsistentTestIt`, `useRegexpTest`, `useUnicodeRegex`, `noNonNullAssertion`, `useAtIndex`, `noParametersOnlyUsedInRecursion` and `useNamingConvention` at `error` with their fixes off, and `quality fix` skips `noDuplicateObjectKeys` and `useSortedKeys`, whose fixes Biome's config cannot turn off.
401
401
 
@@ -73,5 +73,15 @@
73
73
  "includes": ["**"],
74
74
  "reason": "An unused private member asks whether it is still needed or should be used; deleting it automatically skips that decision.",
75
75
  "rule": "lint/correctness/noUnusedPrivateClassMembers"
76
+ },
77
+ {
78
+ "includes": ["**"],
79
+ "reason": "The rule cannot resolve a stylesheet imported through an alias, and Tailwind utilities are not declared in any CSS file, so it misses real findings and reports valid classes.",
80
+ "rule": "lint/nursery/noUndeclaredClasses"
81
+ },
82
+ {
83
+ "includes": ["**"],
84
+ "reason": "An inline style is the right tool for a value computed at run time, such as a position, a transform or a drag offset.",
85
+ "rule": "lint/nursery/noInlineStyles"
76
86
  }
77
87
  ]
package/biome/preset.json CHANGED
@@ -287,6 +287,7 @@
287
287
  "noExtendNative": "error",
288
288
  "noFloatingPromises": { "fix": "none", "level": "error" },
289
289
  "noIdenticalTestTitle": "error",
290
+ "noInlineStyles": "off",
290
291
  "noInvalidFileInputAccept": "error",
291
292
  "noInvalidPropertyInitValue": "error",
292
293
  "noJsonUnsafeValues": "error",
@@ -295,6 +296,7 @@
295
296
  "noLoopFunc": "error",
296
297
  "noMisusedPromises": "off",
297
298
  "noNegationInEqualityCheck": "error",
299
+ "noNonScalableViewport": "error",
298
300
  "noObsoleteTags": "error",
299
301
  "noPlaywrightElementHandle": "error",
300
302
  "noPlaywrightEval": "error",
@@ -309,6 +311,7 @@
309
311
  "noReactStringRefs": "error",
310
312
  "noThisOutsideOfClass": "error",
311
313
  "noTopLevelLiterals": "error",
314
+ "noUndeclaredClasses": "off",
312
315
  "noUnmodifiedLoopCondition": "error",
313
316
  "noUnnecessaryTemplateExpression": "error",
314
317
  "noUnsafeIframeSandbox": "error",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shivaedev/quality",
3
- "version": "0.10.0",
3
+ "version": "0.11.0",
4
4
  "description": "Repository quality gate with typed rules, a baseline of existing debt and a registry of reasoned exceptions",
5
5
  "homepage": "https://github.com/ShivaeDev/platform/tree/main/packages/quality#readme",
6
6
  "bugs": {