Skip to contentView the source on GitHub

Changelog

Release history for Astro Doctor and its integrations. This page is generated directly from each package changelog and updates on the next documentation build after Changesets publishes a version.

Astro Doctor CLI and GitHub Action

Package: @santi020k/astro-doctor

@santi020k/astro-doctor

1.5.0

Minor Changes

  • #58 77aab01 Thanks @santi020k! - Improve project discovery, diagnostic safety, and installed CLI setup:

    • Preserve Unicode and whitespace in Git filenames and resolve changes relative to the selected project directory.
    • Detect insecure session cookies in supported Astro config export forms and read only the workspace packages list.
    • Package the agent skill with the CLI, report installation failures, and generate a workflow that checks config-only changes.
    • Escape GitHub annotation properties, clean up failed baseline snapshots, and clear failed telemetry request timers.
    • Offer line suppression actions only where JavaScript frontmatter supports them.

    Refresh the pending dependency branches and compatible security fixes. Existing CLI flags and skill destinations remain supported.

    Refresh the documentation with Lumen v4, the project’s orange brand palette, accessible mobile navigation, page and theme transitions, readable rule examples, and accurate score explanations. Remove unused documentation dependencies and code, expand unused-code checks to the docs, and add browser and dependency-security regression checks.

    Add safe fix previews with --fix-dry-run, effective configuration explanations with explain-config <file>, and baseline progress with full-scan pruning. Preview reports and JSON include projected fix results; partial scans never claim resolved findings. Baseline pruning preserves existing debt without accepting new findings and writes atomically. Parser failures block previews and baseline comparisons/pruning without changing valid scan behavior. Existing JSON fields and the baseline format remain compatible.

    Parse TypeScript frontmatter consistently in the CLI, ESLint plugin, editor diagnostics and safe line suppressions. Fail ordinary lint scans on parser errors instead of returning a false clean health score, and keep parser error diagnostics visible in the editor. Ship the parser and its TypeScript runtime dependency for standalone installations.

    Keep workspace config explanations and scans aligned with project presets, disambiguate fix-preview patch paths, and retain editor diagnostics when malformed files are present at startup.

    Honor explicit CLI presets over workspace configuration and revalidate current main immediately before publishing, release metadata writes, and deployment.

    Recount preview diagnostics after baseline filtering, reject config explanations for files excluded by selected workspace projects, and emit bounded, Git-applicable hunks for distant fixes.

    Fail closed when recovering published-version metadata without a matching registry publishing SHA. Require full or files scope for fix previews, and mark unsupported file types excluded in config explanations.

    Align .env.example secret-token matching with template diagnostics. Let the GitHub Action apply its own score threshold and keep project-audit config explanations consistent with template-only ignores.

    Require editor recovery and registry publication to use the package-tagged release source. Resolve config explanation discovery from actual configured project audit paths instead of conservative changed-file extensions.

Patch Changes

  • #58 77aab01 Thanks @santi020k! - Correct secret-env detection for static bracket access and destructuring while avoiding substring false positives. Recognize aliased Astro asset image imports, ignore unrelated custom components, check static source expressions, and reject disabled size inference.

    Harden the GitHub Action with validated inputs, literal environment-based argument handling, isolated temporary reports, strict report checks, and failure propagation. Gate releases and documentation deployment on successful CI for the exact current main commit; manual runs reuse the full validation workflow.

  • Updated dependencies [77aab01]:

    • @santi020k/eslint-plugin-astro-doctor@1.5.0

1.4.0

Minor Changes

  • #45 4171c72 Thanks @santi020k! - Add Astro 7 migration audits for removed experimental flags and invalid advanced-routing entrypoints.

Patch Changes

  • Updated dependencies [4171c72]:
    • @santi020k/eslint-plugin-astro-doctor@1.4.0

1.3.2

Patch Changes

  • #32 bc4a9f3 Thanks @santi020k! - Match uppercase and mixed-case script tags when auditing ClientRouter lifecycle handlers.

  • Updated dependencies [bc4a9f3]:

    • @santi020k/eslint-plugin-astro-doctor@1.3.2

1.3.1

Patch Changes

  • #25 29d3a0a Thanks @santi020k! - Pin the composite GitHub Action’s runtime dependencies to reviewed commit SHAs and refresh vulnerable transitive build dependencies.

  • Updated dependencies [29d3a0a]:

    • @santi020k/eslint-plugin-astro-doctor@1.3.1

1.3.0

Minor Changes

  • 0695440 Thanks @santi020k! - Improve package export and packed-install validation for published artifacts, including the dependencies bundled with the VS Code extension.

Patch Changes

  • Updated dependencies [0695440]:
    • @santi020k/eslint-plugin-astro-doctor@1.3.0

1.2.2

Patch Changes

  • 0695440 Thanks @santi020k! - Improve package export and packed-install validation for published artifacts.

  • Updated dependencies [0695440]:

    • @santi020k/eslint-plugin-astro-doctor@1.2.2

1.2.1

Patch Changes

  • #16 f7fa4a3 Thanks @santi020k! - Remove the incompatible eslint-plugin-jsx-a11y dependency and align the runtime with eslint-plugin-astro 3 and astro-eslint-parser 3. Astro Doctor’s proprietary accessibility diagnostics and official Astro rules remain enabled.

  • Updated dependencies [f7fa4a3]:

    • @santi020k/eslint-plugin-astro-doctor@1.2.1

1.2.0

Minor Changes

  • #14 b2f1dda Thanks @santi020k! - Make the GitHub Action skip comments for fork and Dependabot pull requests, add a native min-score quality gate, and remove its unused changed-files manifest.

Patch Changes

  • Updated dependencies [b2f1dda]:
    • @santi020k/eslint-plugin-astro-doctor@1.2.0

1.1.0

Minor Changes

  • #12 e5bb5a7 Thanks @santi020k! - Compose Astro Doctor with the official Astro ESLint ecosystem. The recommended preset now includes official recommended rules, strict adds accessibility, security, and best-practice checks, and the new all preset enables every non-deprecated upstream rule with automatic overlap deduplication.

  • #12 c538858 Thanks @santi020k! - Add project-aware audits for missing Astro Action input schemas, insecure session cookie overrides, and ClientRouter scripts that incorrectly rely on DOMContentLoaded.

  • #12 d71e1d1 Thanks @santi020k! - Add safe automatic fixes and suggestions to the CLI and editor, official eslint-plugin-astro rule presets, baseline-aware changed scope, persistent baseline files, content-based scan caching, glob-based config overrides, SARIF output, strict CLI validation, verbose phase timings, and versioned JSON and baseline schemas. Harden the LSP with incremental document sync, debounced stale-result protection, configuration watching, workspace caching, and path-safe project selection. Category filters now score only visible diagnostics, GitHub workflows receive annotations, unresolved errors or unhealthy workspace projects cannot receive misleadingly high scores, and package-manager preference is opt-in.

Patch Changes

  • #12 a7e3981 Thanks @santi020k! - Ignore diagnostics from ESLint rules that are not part of Astro Doctor’s standalone scanner, and inherit pnpm package-manager configuration from a workspace root when auditing included nested projects. Package-manager audits now recognize npm, Yarn, and Bun lockfiles.

  • #12 c538858 Thanks @santi020k! - Fix current-file scanning and conflict-safe automatic fixes in the language server, restart the VS Code client when extension settings change, and escape dynamic sidebar content.

  • #12 7269d52 Thanks @santi020k! - Make GitHub Action releases reproducible by running the matching CLI package version with a supported Node.js runtime, automate the floating v1 action tag, and correct package metadata for the Node.js requirement already introduced by the Astro parser dependency in 1.0.3. The VS Code extension now requires VS Code 1.125 or newer, launches its bundled language server with the supported Node.js executable from the user’s environment instead of VS Code’s embedded runtime, and includes the cross-platform WASI compiler required by Astro Parser 3. Reduce false positives for explicit inline scripts, JSON-LD structured data, and runtime-populated images, and restore audit mode on ESLint 10.7.

  • Updated dependencies [e5bb5a7, d71e1d1]:

    • @santi020k/eslint-plugin-astro-doctor@1.1.0

1.0.4

Patch Changes

  • #9 9501d73 Thanks @santi020k! - Make GitHub Action releases reproducible by running the matching CLI package version with a supported Node.js runtime, automate the floating v1 action tag, and correct package metadata for the Node.js requirement already introduced by the Astro parser dependency in 1.0.3. The VS Code extension now requires VS Code 1.125 or newer, launches its bundled language server with the supported Node.js executable from the user’s environment instead of VS Code’s embedded runtime, and includes the cross-platform WASI compiler required by Astro Parser 3. Reduce false positives for explicit inline scripts, JSON-LD structured data, and runtime-populated images, and restore audit mode on ESLint 10.7.

  • Updated dependencies []:

    • @santi020k/eslint-plugin-astro-doctor@1.0.4

1.0.3

Patch Changes

  • #7 2584508 Thanks @santi020k! - Update dependencies and support the JSX-shaped Astro AST introduced by astro-eslint-parser 3.

  • Updated dependencies [2584508]:

    • @santi020k/eslint-plugin-astro-doctor@1.0.3

1.0.2

Patch Changes

  • #5 faeaf66 Thanks @santi020k! - Fix post-launch documentation and plugin meta accuracy

    • eslint-plugin: plugin meta.version now reads dynamically from package.json instead of being hardcoded to 0.1.0
    • docs/README/llms.txt: corrected score formula description — each file is scored independently (errors cost 25 pts, warnings cost 10 pts, clamped per-file then averaged); previous docs described the old global density formula
    • docs/README/action.yml: updated score grade references from A–F to S, A–F to reflect that a perfect score of 100 returns the S grade; clarified that S means zero diagnostics — no issues found anywhere in the codebase (not just “high score” but truly clean); docs homepage grade cards now show a description label for each grade
    • console reporter: added missing S: '🌟' entry to SCORE_EMOJI — previously a perfect score would fall through to the 🟡 fallback
    • GitHub Action PR comment: same fix — scoreEmoji map now includes S: '🌟' so PR comments show the correct emoji for a clean codebase
  • Updated dependencies [faeaf66]:

    • @santi020k/eslint-plugin-astro-doctor@1.0.2

1.0.1

Patch Changes

  • ac335ba Thanks @santi020k! - Fix VS Code extension publish and align package versions

  • Updated dependencies [ac335ba]:

    • @santi020k/eslint-plugin-astro-doctor@1.0.1

1.0.0

Major Changes

  • f1af77d Thanks @santi020k! - Six improvements: per-file scoring, smarter client:load rule, derived rule categories, --quiet flag, scan error handling, and a better --changed-files-from warning.

    Breaking changes

    computeScore signature changed (@santi020k/astro-doctor)

    The exported computeScore function now takes (diagnostics: readonly Diagnostic[], fileCount: number) instead of (errorCount: number, warningCount: number, fileCount: number). Update any direct calls to pass the diagnostics array.

    no-client-load-overuse default behaviour changed (@santi020k/eslint-plugin-astro-doctor)

    The rule now allows one client:load per file by default (max: 1). Previously it warned on every occurrence. To restore the old strict behaviour, add "astro-doctor/no-client-load-overuse": ["warn", { "max": 0 }] to your ESLint config.

    New features

    Per-file scoring — computeScore now scores each file independently (errors −10 pts, warnings −3 pts, clamped to [0, 100]) and averages the results. A single heavily-broken file in a large project no longer drags the overall score below its actual impact.

    no-client-load-overuse: configurable max option — Set { "max": N } to allow up to N client:load usages per file before warning. max: 0 reports every occurrence individually (old behaviour). max: 1 (default) allows one per file and reports a single file-level message when exceeded, including the usage count.

    Rule categories derived from plugin metadata — The scanner no longer maintains a separate hard-coded RULE_CATEGORY_MAP. Categories are read directly from each rule’s meta.docs.category, so new rules are automatically classified without any extra bookkeeping. This also fixes prefer-content-collections which was silently missing from the old map.

    --quiet flag — Pass --quiet to suppress warning diagnostics from console output. Errors are still shown, and the health score / exit-code thresholds still reflect all diagnostics.

    Scan error handling — If ESLint throws during a scan (e.g. a malformed .astro file), the CLI now prints a friendly error message and exits with code 1 instead of crashing with an unhandled exception.

    --changed-files-from empty-list warning — When the changed files list is non-empty but contains no .astro files, the CLI now prints a clear message and exits cleanly instead of silently returning a perfect score of 100.

Minor Changes

  • b070540 Thanks @santi020k! - Add four new ESLint rules covering performance, accessibility, and best practices.

    no-blocking-script (performance · warn) — Detects <script src="..."> tags without defer, async, or type="module". Render-blocking scripts delay First Contentful Paint and stall HTML parsing. Use defer to preserve execution order, async for independent scripts, or type="module" for always-deferred ES modules.

    no-missing-lang (accessibility · error) — Requires a lang attribute on the root <html> element. Missing lang is a WCAG 2.1 Level A failure (SC 3.1.1) that breaks screen reader language detection and search engine indexing.

    no-process-env (best-practices · warn) — Flags process.env usage in .astro files. process.env is Node.js-only and doesn’t work in client-side code or respect Astro’s PUBLIC_ prefix visibility rules. Use import.meta.env instead.

    prefer-content-collections (best-practices · warn) — Flags Astro.glob() usage for content files. Astro.glob() returns untyped frontmatter objects. Use getCollection() from astro:content instead for TypeScript types, build-time validation, and caching.

Patch Changes

  • Updated dependencies [b070540, f1af77d]:
    • @santi020k/eslint-plugin-astro-doctor@1.0.0

ESLint plugin

Package: @santi020k/eslint-plugin-astro-doctor

@santi020k/eslint-plugin-astro-doctor

1.5.0

Patch Changes

  • #58 77aab01 Thanks @santi020k! - Correct secret-env detection for static bracket access and destructuring while avoiding substring false positives. Recognize aliased Astro asset image imports, ignore unrelated custom components, check static source expressions, and reject disabled size inference.

    Harden the GitHub Action with validated inputs, literal environment-based argument handling, isolated temporary reports, strict report checks, and failure propagation. Gate releases and documentation deployment on successful CI for the exact current main commit; manual runs reuse the full validation workflow.

1.4.0

Minor Changes

  • #45 4171c72 Thanks @santi020k! - Add Astro 7 migration audits for removed experimental flags and invalid advanced-routing entrypoints.

1.3.2

Patch Changes

  • #32 bc4a9f3 Thanks @santi020k! - Match uppercase and mixed-case script tags when auditing ClientRouter lifecycle handlers.

1.3.1

Patch Changes

  • #25 29d3a0a Thanks @santi020k! - Pin the composite GitHub Action’s runtime dependencies to reviewed commit SHAs and refresh vulnerable transitive build dependencies.

1.3.0

Minor Changes

  • 0695440 Thanks @santi020k! - Improve package export and packed-install validation for published artifacts, including the dependencies bundled with the VS Code extension.

1.2.2

Patch Changes

  • 0695440 Thanks @santi020k! - Improve package export and packed-install validation for published artifacts.

1.2.1

Patch Changes

  • #16 f7fa4a3 Thanks @santi020k! - Remove the incompatible eslint-plugin-jsx-a11y dependency and align the runtime with eslint-plugin-astro 3 and astro-eslint-parser 3. Astro Doctor’s proprietary accessibility diagnostics and official Astro rules remain enabled.

1.2.0

Patch Changes

  • #14 b2f1dda Thanks @santi020k! - Restore Node.js 20 support with the compatible Astro parser and plugin line. Align the ESLint peer range with @santi020k/eslint-config-basic v2, include the accessibility plugin required by the strict preset, and derive deprecated upstream rules from plugin metadata so the all preset stays current.

1.1.0

Minor Changes

  • #12 e5bb5a7 Thanks @santi020k! - Compose Astro Doctor with the official Astro ESLint ecosystem. The recommended preset now includes official recommended rules, strict adds accessibility, security, and best-practice checks, and the new all preset enables every non-deprecated upstream rule with automatic overlap deduplication.

  • #12 d71e1d1 Thanks @santi020k! - Add safe automatic fixes and suggestions to the CLI and editor, official eslint-plugin-astro rule presets, baseline-aware changed scope, persistent baseline files, content-based scan caching, glob-based config overrides, SARIF output, strict CLI validation, verbose phase timings, and versioned JSON and baseline schemas. Harden the LSP with incremental document sync, debounced stale-result protection, configuration watching, workspace caching, and path-safe project selection. Category filters now score only visible diagnostics, GitHub workflows receive annotations, unresolved errors or unhealthy workspace projects cannot receive misleadingly high scores, and package-manager preference is opt-in.

1.0.4

1.0.3

Patch Changes

  • #7 2584508 Thanks @santi020k! - Update dependencies and support the JSX-shaped Astro AST introduced by astro-eslint-parser 3.

1.0.2

Patch Changes

  • #5 faeaf66 Thanks @santi020k! - Fix post-launch documentation and plugin meta accuracy

    • eslint-plugin: plugin meta.version now reads dynamically from package.json instead of being hardcoded to 0.1.0
    • docs/README/llms.txt: corrected score formula description — each file is scored independently (errors cost 25 pts, warnings cost 10 pts, clamped per-file then averaged); previous docs described the old global density formula
    • docs/README/action.yml: updated score grade references from A–F to S, A–F to reflect that a perfect score of 100 returns the S grade; clarified that S means zero diagnostics — no issues found anywhere in the codebase (not just “high score” but truly clean); docs homepage grade cards now show a description label for each grade
    • console reporter: added missing S: '🌟' entry to SCORE_EMOJI — previously a perfect score would fall through to the 🟡 fallback
    • GitHub Action PR comment: same fix — scoreEmoji map now includes S: '🌟' so PR comments show the correct emoji for a clean codebase

1.0.1

Patch Changes

  • ac335ba Thanks @santi020k! - Fix VS Code extension publish and align package versions

1.0.0

Major Changes

  • f1af77d Thanks @santi020k! - Six improvements: per-file scoring, smarter client:load rule, derived rule categories, --quiet flag, scan error handling, and a better --changed-files-from warning.

    Breaking changes

    computeScore signature changed (@santi020k/astro-doctor)

    The exported computeScore function now takes (diagnostics: readonly Diagnostic[], fileCount: number) instead of (errorCount: number, warningCount: number, fileCount: number). Update any direct calls to pass the diagnostics array.

    no-client-load-overuse default behaviour changed (@santi020k/eslint-plugin-astro-doctor)

    The rule now allows one client:load per file by default (max: 1). Previously it warned on every occurrence. To restore the old strict behaviour, add "astro-doctor/no-client-load-overuse": ["warn", { "max": 0 }] to your ESLint config.

    New features

    Per-file scoring — computeScore now scores each file independently (errors −10 pts, warnings −3 pts, clamped to [0, 100]) and averages the results. A single heavily-broken file in a large project no longer drags the overall score below its actual impact.

    no-client-load-overuse: configurable max option — Set { "max": N } to allow up to N client:load usages per file before warning. max: 0 reports every occurrence individually (old behaviour). max: 1 (default) allows one per file and reports a single file-level message when exceeded, including the usage count.

    Rule categories derived from plugin metadata — The scanner no longer maintains a separate hard-coded RULE_CATEGORY_MAP. Categories are read directly from each rule’s meta.docs.category, so new rules are automatically classified without any extra bookkeeping. This also fixes prefer-content-collections which was silently missing from the old map.

    --quiet flag — Pass --quiet to suppress warning diagnostics from console output. Errors are still shown, and the health score / exit-code thresholds still reflect all diagnostics.

    Scan error handling — If ESLint throws during a scan (e.g. a malformed .astro file), the CLI now prints a friendly error message and exits with code 1 instead of crashing with an unhandled exception.

    --changed-files-from empty-list warning — When the changed files list is non-empty but contains no .astro files, the CLI now prints a clear message and exits cleanly instead of silently returning a perfect score of 100.

Minor Changes

  • b070540 Thanks @santi020k! - Add four new ESLint rules covering performance, accessibility, and best practices.

    no-blocking-script (performance · warn) — Detects <script src="..."> tags without defer, async, or type="module". Render-blocking scripts delay First Contentful Paint and stall HTML parsing. Use defer to preserve execution order, async for independent scripts, or type="module" for always-deferred ES modules.

    no-missing-lang (accessibility · error) — Requires a lang attribute on the root <html> element. Missing lang is a WCAG 2.1 Level A failure (SC 3.1.1) that breaks screen reader language detection and search engine indexing.

    no-process-env (best-practices · warn) — Flags process.env usage in .astro files. process.env is Node.js-only and doesn’t work in client-side code or respect Astro’s PUBLIC_ prefix visibility rules. Use import.meta.env instead.

    prefer-content-collections (best-practices · warn) — Flags Astro.glob() usage for content files. Astro.glob() returns untyped frontmatter objects. Use getCollection() from astro:content instead for TypeScript types, build-time validation, and caching.

VS Code extension

Extension: santi020k.vscode-astro-doctor

Astro Doctor for VS Code

1.5.0

Bundle the 1.5.0 language-server improvements: consistent TypeScript frontmatter parsing, visible parser-error diagnostics, responsive startup with malformed files, and safer line suppressions. See the CLI changelog for the shared diagnostic changes.

1.4.0

Minor Changes

  • #45 4171c72 Thanks @santi020k! - Add Astro 7 migration audits for removed experimental flags and invalid advanced-routing entrypoints.

1.3.2

Patch Changes

  • #32 bc4a9f3 Thanks @santi020k! - Match uppercase and mixed-case script tags when auditing ClientRouter lifecycle handlers.

1.3.1

Patch Changes

  • #25 29d3a0a Thanks @santi020k! - Pin the composite GitHub Action’s runtime dependencies to reviewed commit SHAs and refresh vulnerable transitive build dependencies.

1.3.0

Minor Changes

  • 0695440 Thanks @santi020k! - Improve package export and packed-install validation for published artifacts, including the dependencies bundled with the VS Code extension.

1.2.2

1.2.1

Improved

  • Updated the bundled Astro linting stack for compatibility with eslint-plugin-astro 3 and astro-eslint-parser 3.
  • Kept Astro Doctor’s accessibility diagnostics and official Astro rules enabled without relying on an incompatible JSX accessibility dependency.

1.2.0

Improved

  • Updated the bundled diagnostic engine and its release dependencies for more reliable marketplace installs.

1.1.0

Added

  • Added safe automatic fixes and suggestions directly in the editor.
  • Added official eslint-plugin-astro rule presets and broader accessibility, security, and best-practice diagnostics.
  • Added incremental document sync, configuration watching, workspace caching, and debounced diagnostics.

Fixed

  • Fixed current-file scanning and conflict-safe automatic fixes.
  • Restarted the language client when extension settings change.
  • Escaped dynamic sidebar content.

1.0.4

Improved

  • Added support for the Astro Parser 3 runtime used by the bundled language server.
  • The extension now resolves a supported Node.js executable from the user’s environment instead of relying on VS Code’s embedded runtime.
  • Included the cross-platform WASI compiler required to analyze Astro files.

Fixed

  • Reduced false positives for explicit inline scripts, JSON-LD structured data, and runtime-populated images.

1.0.3

Fixed

  • Added support for the JSX-shaped Astro syntax tree produced by astro-eslint-parser 3.

1.0.2

Fixed

  • Corrected score and grade metadata shown by Astro Doctor.
  • Kept bundled plugin version information synchronized with the extension.

1.0.1

Fixed

  • Fixed marketplace publishing and aligned bundled package versions.

1.0.0

Initial release of Astro Doctor for VS Code.

Highlights

  • Live Astro diagnostics, hovers, and quick fixes.
  • Workspace and current-file scans.
  • A sidebar health report with per-category results.
  • Performance, accessibility, security, architecture, and best-practice rules.
  • Per-file health scoring that prevents one heavily broken file from distorting an entire project.
  • Configurable client:load overuse detection.

Oxlint configuration

Package: @santi020k/oxlint-config-astro-doctor

@santi020k/oxlint-config-astro-doctor

1.5.0

No changes in this release.

1.4.0

Minor Changes

  • #45 4171c72 Thanks @santi020k! - Add Astro 7 migration audits for removed experimental flags and invalid advanced-routing entrypoints.

1.3.2

Patch Changes

  • #32 bc4a9f3 Thanks @santi020k! - Match uppercase and mixed-case script tags when auditing ClientRouter lifecycle handlers.

1.3.1

Patch Changes

  • #25 29d3a0a Thanks @santi020k! - Pin the composite GitHub Action’s runtime dependencies to reviewed commit SHAs and refresh vulnerable transitive build dependencies.

1.3.0

1.2.2

1.2.1

1.2.0

1.1.0

Patch Changes

1.0.4

1.0.3

1.0.2

1.0.1

Patch Changes

  • ac335ba Thanks @santi020k! - Fix VS Code extension publish and align package versions

0.1.0

Minor Changes

  • b070540 Thanks @santi020k! - Add four new ESLint rules covering performance, accessibility, and best practices.

    no-blocking-script (performance · warn) — Detects <script src="..."> tags without defer, async, or type="module". Render-blocking scripts delay First Contentful Paint and stall HTML parsing. Use defer to preserve execution order, async for independent scripts, or type="module" for always-deferred ES modules.

    no-missing-lang (accessibility · error) — Requires a lang attribute on the root <html> element. Missing lang is a WCAG 2.1 Level A failure (SC 3.1.1) that breaks screen reader language detection and search engine indexing.

    no-process-env (best-practices · warn) — Flags process.env usage in .astro files. process.env is Node.js-only and doesn’t work in client-side code or respect Astro’s PUBLIC_ prefix visibility rules. Use import.meta.env instead.

    prefer-content-collections (best-practices · warn) — Flags Astro.glob() usage for content files. Astro.glob() returns untyped frontmatter objects. Use getCollection() from astro:content instead for TypeScript types, build-time validation, and caching.