{ }
Resource profile / Official Astro Monorepo Development Guide
About this skill

Workflow & requirements

Independent BB Skills packaging and recorded scope (2026-10-08)

Official Astro monorepo contributor guide, fixed repository snapshot 28e74103fe3d999a56ae3404b5fe67a1ad6d8013. This is not a website-generation skill or a versioned Astro release. Thirteen original files, including six skill files, linked repository context, the actual Biome configuration and complete MIT notice, are retained unchanged under repository-context. The original primary instructions remain at repository-context/.agents/skills/astro-developer/SKILL.md. Only local link targets in the primary copy below are adjusted for this package; the original text is preserved separately. Evaluation prompts are retained as source material, not executed.

Independent local evidence records 46 observations across nine original documentation blocks with Node 24.10.0, Biome 2.5.3 and separately installed Astro 7.3.7. Node type erasure is experimental and is not a TypeScript typecheck. Synthetic imports and input files are explicitly provided by the runner. The unchanged Markdown unit assertion fails because its implementation retains a leading newline; the unchanged manifest unit assertion passes. A dual buildRoutes comparison also fails ESM parsing. These expected counterexamples are recorded, not silently rewritten.

The exact upstream Biome configuration reports Node API diagnostics in tested runtime folders and runtime-named files. Other lint diagnostics remain separate; zero errors from one rule does not mean a complete lint pass. The original bad virtual-module plugin emits a Node import; its emitted code is linted but its file read is not executed. Pure/configuration/Markdown/manifest functions and original file-reading plugin hooks use only independent synthetic data. Shared nested references and missing-frontmatter behavior are recorded.

Two real standalone Astro builds use the unchanged original JSON virtual-module plugin. Synthetic pages render different inputs in separate output and cache directories. The first output stays unchanged after the second build; generated title escaping, English HTML, one H1 and fixture canonical are checked. No monorepo loadFixture cache-pollution reproduction, browser hydration, edge adapter or all-pipeline compatibility claim follows. The build API is experimental. JavaScript HTTP/socket connections are denied by an independent preload during the builds; telemetry is disabled and zero attempts were recorded.

No account, database, real credential, production data, paid API or complete AI-client execution is involved. Installing locked dependencies separately contacts the free public registry. Full Astro checkouts and their current contributor instructions remain necessary for framework contributions; retained context is not the full monorepo. Installed dependencies, generated outputs and binaries are excluded from the download. Inspect examples/README.md and fixture-evidence.json for reproduction and limits. runtime_tested is false.

Astro Developer Skill

Context-loading skill for AI agents and developers working in the Astro monorepo. Loads relevant documentation based on your task.

Quick Decision Matrix

What are you doing? → Read these files:

Task Primary Docs Supporting Docs
Adding a core feature architecture.md, constraints.md testing.md
Fixing a bug debugging.md architecture.md
Writing/fixing tests testing.md constraints.md
Creating an integration Explore packages/integrations/ for examples testing.md
Understanding architecture architecture.md -
Dealing with errors debugging.md, constraints.md testing.md
Understanding constraints constraints.md architecture.md

Critical Warnings

Before you start, be aware of these common pitfalls:

  1. Prefer Unit Tests: Write unit-testable code by default. Use integration tests only when necessary → testing.md
  2. Node.js API Restrictions: Cannot use Node.js APIs in runtime/ code → constraints.md
  3. Test Isolation: Must set unique outDir for each integration test → testing.md
  4. Runtime Boundaries: Core vs Vite vs Browser execution contexts → architecture.md
  5. Prerelease Mode: Changesets target origin/next branch (check .changeset/config.json)

Quick Command Reference

# Development
pnpm install                                    # Install (root only)
pnpm run build                                  # Build all packages
pnpm run dev                                    # Watch mode
pnpm run lint                                   # Lint codebase

# Testing
pnpm -C packages/astro exec astro-scripts test "test/**/*.test.js"  # All tests
pnpm -C packages/astro exec astro-scripts test -m "pattern"         # Filter tests
pnpm run test:e2e                               # E2E tests
node --test test/file.test.js                   # Single test

# Examples
pnpm --filter @example/minimal run dev          # Run example

# Changesets
pnpm exec changeset --empty                     # Create changeset, no interactive mode

Key File Paths

packages/astro/src/
├── core/              # Node.js execution context (build/dev commands)
├── runtime/
│   ├── server/        # Vite SSR execution context
│   └── client/        # Browser execution context
├── virtual-modules/   # Virtual module entry points
├── content/           # Content layer system
├── vite-plugin-*/     # Vite plugins
└── types/             # Centralized TypeScript types

packages/integrations/  # Official integrations
examples/              # Test your changes here
test/fixtures/         # Test fixtures

Note: Error stack traces in node_modules/ map to source in packages/. See architecture.md for details.

Usage

This skill loads relevant context—it doesn't orchestrate workflows. After loading appropriate docs:

  1. Read the recommended files for your task
  2. Apply the patterns and constraints described
  3. Use the commands and file paths provided
  4. Search docs for error messages if you encounter issues

Architecture Quick Summary

Three Execution Contexts:

  • core/ → Node.js, build/dev commands, avoid Node APIs except in Vite plugins
  • runtime/server/ → Vite SSR, CANNOT use Node APIs
  • runtime/client/ → Browser, CANNOT use Node APIs at all

Five Pipeline Types:

  • RunnablePipeline → astro dev with Vite loader system
  • NonRunnablePipeline → astro dev without runtime module loading (Cloudflare adapter)
  • BuildPipeline → astro build + prerendering
  • AppPipeline → Production serverless/SSR
  • ContainerPipeline → Container API

See architecture.md for complete details.

Testing Quick Summary

Philosophy: Prefer unit tests over integration tests. Write unit-testable code by default.

Unit tests (fast, preferred):

  • Test pure functions and business logic
  • Extract business logic from infrastructure
  • Use dependency injection

Integration tests (slow, use sparingly):

  • Only for features that cannot be unit tested (virtual modules, full build pipeline)
  • Always set unique outDir to avoid cache pollution

See testing.md for complete patterns and examples.

When NOT to Use This Skill

  • Bug triage: Use the triage skill instead
  • GitHub Actions analysis: Use the analyze-github-action-logs skill
  • Simple questions: Just ask directly, don't load this skill
  • Root: /AGENTS.md
  • Root: /CONTRIBUTING.md
  • Astro docs: https://docs.astro.build/
  • Package: packages/astro/src/core/README.md
  • Build plugins: packages/astro/src/core/build/plugins/README.md
PACKAGE TRANSPARENCY

Inspect before installing

Source: Astro · MIT · SHA-256 shown alongside the download.

28 files106932 ZIP bytes2 script/code files

License file included. A license and checksum are not a security certification. Review package instructions and scripts before running them.

View files and uncompressed sizes
Machine-readable installation guide →
CATALOG REVIEW NOTES

Know what you need before installing

Source and packaging checks recorded on 2026-10-08. These notes are not safety certification or measured task performance.

Requirements

For Astro framework contributions use a complete matching checkout. Included independent fixture tested with Node 24.10.0, Astro 7.3.7 and Biome 2.5.3 installed separately from the lockfile. Node type erasure and the Astro build API are experimental.

Costs, access & practical limits

Free MIT resource. Fixture acquisition uses public npm; no paid API, real account, database or credential. Local evidence does not certify all pipeline/edge/browser behavior or complete AI-client skill execution.

View the recorded checks
  • Thirteen upstream files verified against fixed Git blob and SHA-256; complete MIT notice retained
  • Four companion guides, original evaluation source and linked context remain together
  • Forty-six named observations across nine original blocks include explicit original assertion/parse counterexamples
  • Actual upstream Biome configuration records Node API rule diagnostics separately from other errors
  • Original JSON virtual-module plugin used by two real standalone Astro builds with independent synthetic pages
  • Separate output hashes and zero JavaScript connection attempts recorded; no monorepo cache or full-runtime claim

Upstream commit: 28e74103fe3d999a56ae3404b5fe67a1ad6d8013

Runtime status: not tested by this catalog. Configure your client and test the skill in your own environment.

LICENSE & ATTRIBUTION

License & attribution

The notices identify their files, attribution and changes. Retain the applicable original notices when adapting or redistributing the package.

MIT ↗

Original Astro instructions, context and configuration; repository notice retains applicable originating-part notices

Attribution: Copyright (c) 2021 Fred K. Schott; applicable originating-part attributions retained

Changes: Only primary-copy local link targets adjusted; original files preserved unchanged

Included notice: astro-developer/LICENSE.upstream.txt

Declared source ↗

MIT ↗

Independent BB Skills packaging, preface, fixture and scoped evidence

Attribution: Copyright (c) 2026 BB Skills

Changes: Independent synthetic test harness with explicitly recorded counterexamples

Included notice: astro-developer/LICENSE.bb-skills.txt

Declared source ↗
SCENARIOS

Inputs, criteria and recorded outcomes

Records are supplied by the site administrator and bound to a specific package. They are not third-party safety certification. This page does not execute skills.

Official Astro blocks, Biome boundaries and standalone builds

Reported passed · v28e74103fe3d.bb1

View input and acceptance criteria

Input

Forty-six named observations across nine unchanged Astro documentation blocks with Node 24.10.0, Biome 2.5.3 and Astro 7.3.7. Actual upstream Biome configuration records Node API rule diagnostics separately from other lint failures. Original function and synthetic file effects, shallow shared references, missing-frontmatter behavior and file-reading plugin hooks are recorded. The original Markdown unit assertion intentionally fails due to a leading newline; the original manifest unit assertion passes. A duplicate buildRoutes example intentionally fails ESM parsing after experimental Node type erasure. Two real standalone Astro builds use the original JSON virtual-module plugin and independent synthetic pages, output/cache directories and input data. The second build preserves the first output; fixture language, H1, canonical and escaping are checked. Telemetry is disabled and JavaScript build connections denied with zero attempts. No complete TypeScript typecheck, monorepo cache-pollution reproduction, browser, edge, adapter/pipeline matrix, real credentials, production authorization, speed, full security or complete AI-client execution claim.

Acceptance criteria

All 46 named observations match their explicit expected values, including original assertion and parse failures. Lint, unit and standalone build scope remain separate; no full-skill or production claim.

Recorded outcome

Forty-six named observations across nine unchanged Astro documentation blocks with Node 24.10.0, Biome 2.5.3 and Astro 7.3.7. Actual upstream Biome configuration records Node API rule diagnostics separately from other lint failures. Original function and synthetic file effects, shallow shared references, missing-frontmatter behavior and file-reading plugin hooks are recorded. The original Markdown unit assertion intentionally fails due to a leading newline; the original manifest unit assertion passes. A duplicate buildRoutes example intentionally fails ESM parsing after experimental Node type erasure. Two real standalone Astro builds use the original JSON virtual-module plugin and independent synthetic pages, output/cache directories and input data. The second build preserves the first output; fixture language, H1, canonical and escaping are checked. Telemetry is disabled and JavaScript build connections denied with zero attempts. No complete TypeScript typecheck, monorepo cache-pollution reproduction, browser, edge, adapter/pipeline matrix, real credentials, production authorization, speed, full security or complete AI-client execution claim.

Scoped native evidence:
{
  "executed_at": "2026-10-08T03:06:08.045Z",
  "versions": {
    "node": "v24.10.0",
    "astro": "7.3.7",
    "biome": "2.5.3"
  },
  "observations": 46,
  "cases": [
    {
      "name": "config retains existing fields",
      "status": "passed",
      "actual": "/demo",
      "expected": "/demo"
    },
    {
      "name": "config marks transformed output",
      "status": "passed",
      "actual": true,
      "expected": true
    },
    {
      "name": "config does not add property to input",
      "status": "passed",
      "actual": false,
      "expected": false
    },
    {
      "name": "config returns a new object",
      "status": "passed",
      "actual": true,
      "expected": true
    },
    {
      "name": "config nested object remains shared",
      "status": "passed",
      "actual": true,
      "expected": true
    },
    {
      "name": "original coupled config function writes file",
      "status": "passed",
      "actual": {
        "base": "/first",
        "transformed": true
      },
      "expected": {
        "base": "/first",
        "transformed": true
      }
    },
    {
      "name": "original separated config infrastructure writes file",
      "status": "passed",
      "actual": {
        "base": "/second",
        "transformed": true
      },
      "expected": {
        "base": "/second",
        "transformed": true
      }
    },
    {
      "name": "config infrastructure propagates missing file",
      "status": "passed",
      "actual": "ENOENT",
      "expected": "ENOENT"
    },
    {
      "name": "original markdown keeps leading newline",
      "status": "passed",
      "actual": "\nNOTE: Fix this",
      "expected": "\nNOTE: Fix this"
    },
    {
      "name": "original markdown without delimiters throws",
      "status": "passed",
      "actual": "TypeError",
      "expected": "TypeError"
    },
    {
      "name": "original separated markdown infrastructure writes file",
      "status": "passed",
      "actual": "\nNOTE: Fix this",
      "expected": "\nNOTE: Fix this"
    },
    {
      "name": "original coupled markdown infrastructure writes file",
      "status": "passed",
      "actual": "\nNOTE: Fix this",
      "expected": "\nNOTE: Fix this"
    },
    {
      "name": "pure manifest output contains route",
      "status": "passed",
      "actual": 1,
      "expected": 1
    },
    {
      "name": "pure manifest output increments version",
      "status": "passed",
      "actual": 2,
      "expected": 2
    },
    {
      "name": "pure manifest retains original routes",
      "status": "passed",
      "actual": 0,
      "expected": 0
    },
    {
      "name": "pure manifest retains original version",
      "status": "passed",
      "actual": 1,
      "expected": 1
    },
    {
      "name": "pure manifest returns distinct route array",
      "status": "passed",
      "actual": true,
      "expected": true
    },
    {
      "name": "pure manifest retains shared route object",
      "status": "passed",
      "actual": true,
      "expected": true
    },
    {
      "name": "coupled manifest mutates input",
      "status": "passed",
      "actual": 1,
      "expected": 1
    },
    {
      "name": "coupled manifest increments input version",
      "status": "passed",
      "actual": 2,
      "expected": 2
    },
    {
      "name": "unchanged original markdown unit assertion fails",
      "status": "passed",
      "actual": 1,
      "expected": 1
    },
    {
      "name": "unchanged original manifest unit assertion passes",
      "status": "passed",
      "actual": true,
      "expected": true
    },
    {
      "name": "unchanged dual buildRoutes example fails ESM parse",
      "status": "passed",
      "actual": 1,
      "expected": 1
    },
    {
      "name": "Biome Node API rule: packages/astro/src/runtime/server/sample.ts",
      "status": "passed",
      "actual": 5,
      "expected": 5
    },
    {
      "name": "Biome Node API rule: packages/astro/src/runtime/client/sample.ts",
      "status": "passed",
      "actual": 5,
      "expected": 5
    },
    {
      "name": "Biome Node API rule: packages/astro/src/vite-plugin-sample/runtime.ts",
      "status": "passed",
      "actual": 5,
      "expected": 5
    },
    {
      "name": "Biome Node API rule: packages/astro/src/core/render/runtime-utils.ts",
      "status": "passed",
      "actual": 5,
      "expected": 5
    },
    {
      "name": "Biome Node API rule: packages/astro/src/vite-plugin-sample/plugin.ts",
      "status": "passed",
      "actual": 0,
      "expected": 0
    },
    {
      "name": "Biome Node API rule: packages/astro/src/core/build/sample.ts",
      "status": "passed",
      "actual": 0,
      "expected": 0
    },
    {
      "name": "original bad plugin emits Node import",
      "status": "passed",
      "actual": true,
      "expected": true
    },
    {
      "name": "Biome Node API rule: packages/astro/src/runtime/server/generated-bad.ts",
      "status": "passed",
      "actual": 1,
      "expected": 1
    },
    {
      "name": "original file-reading plugin 3 returns synthetic source",
      "status": "passed",
      "actual": "BB synthetic file",
      "expected": "BB synthetic file"
    },
    {
      "name": "original file-reading plugin 6 returns synthetic source",
      "status": "passed",
      "actual": "BB synthetic file",
      "expected": "BB synthetic file"
    },
    {
      "name": "real Astro build 1 renders supplied title",
      "status": "passed",
      "actual": true,
      "expected": true
    },
    {
      "name": "real Astro build 1 has English HTML",
      "status": "passed",
      "actual": true,
      "expected": true
    },
    {
      "name": "real Astro build 1 has canonical",
      "status": "passed",
      "actual": true,
      "expected": true
    },
    {
      "name": "real Astro build 1 has single H1",
      "status": "passed",
      "actual": 1,
      "expected": 1
    },
    {
      "name": "real Astro build 1 attempts no JS socket or HTTP connection",
      "status": "passed",
      "actual": 0,
      "expected": 0
    },
    {
      "name": "real Astro output escapes synthetic script",
      "status": "passed",
      "actual": false,
      "expected": false
    },
    {
      "name": "real Astro build 2 renders supplied title",
      "status": "passed",
      "actual": true,
      "expected": true
    },
    {
      "name": "real Astro build 2 has English HTML",
      "status": "passed",
      "actual": true,
      "expected": true
    },
    {
      "name": "real Astro build 2 has canonical",
      "status": "passed",
      "actual": true,
      "expected": true
    },
    {
      "name": "real Astro build 2 has single H1",
      "status": "passed",
      "actual": 1,
      "expected": 1
    },
    {
      "name": "real Astro build 2 attempts no JS socket or HTTP connection",
      "status": "passed",
      "actual": 0,
      "expected": 0
    },
    {
      "name": "second Astro build preserves first output",
      "status": "passed",
      "actual": "bfb6a507c9f0083fab3030bc6e7c1e8a7f325d391df20a511eb5c3526b02d90b",
      "expected": "bfb6a507c9f0083fab3030bc6e7c1e8a7f325d391df20a511eb5c3526b02d90b"
    },
    {
      "name": "Biome Node API rule: packages/astro/src/runtime/server/generated-good.ts",
      "status": "passed",
      "actual": 0,
      "expected": 0
    }
  ],
  "native_blocks": [
    {
      "source": "testing.md",
      "block_index": 2,
      "block_sha256": "02ab850dc5d3e90b0aac61390f3c20004b4f6551408a1af07100abefd1b73831",
      "language": "typescript"
    },
    {
      "source": "testing.md",
      "block_index": 5,
      "block_sha256": "07b2c8fe133768be3cda194b39cb7df28c33a5e3d94ce8bbb82c129517712ce3",
      "language": "typescript"
    },
    {
      "source": "testing.md",
      "block_index": 8,
      "block_sha256": "7f49b33abd00323f839908163470a22d6f9b01986a44ef7a4256a322706525ac",
      "language": "typescript"
    },
    {
      "source": "testing.md",
      "block_index": 6,
      "block_sha256": "7435a74b345b78df4816d31fca8f222061366003c415cae6a6c134b3335fb0b3",
      "language": "typescript"
    },
    {
      "source": "constraints.md",
      "block_index": 1,
      "block_sha256": "3afd2a7685c14d17b7bce54fe948b4c1e3b24f162e520a10a561bd3d7b258dea",
      "language": "typescript"
    },
    {
      "source": "constraints.md",
      "block_index": 4,
      "block_sha256": "ee5db7220812c7ee91ff93600848b9970609faea268fdf5306be4e701a901a04",
      "language": "typescript"
    },
    {
      "source": "constraints.md",
      "block_index": 3,
      "block_sha256": "5cb2c4f11620951dde4800e45566eb2d95debe7478c61c46f1531f97739835ca",
      "language": "typescript"
    },
    {
      "source": "constraints.md",
      "block_index": 6,
      "block_sha256": "8013afb2265b64d413fda08cfda755a0329a0780e795e7f0a6e13d7d5219fb9f",
      "language": "typescript"
    },
    {
      "source": "constraints.md",
      "block_index": 7,
      "block_sha256": "3e7c1ca94def5313e2bced9d59e1234ec1d5212d52cb471721fa15d85cd45c41",
      "language": "typescript"
    }
  ],
  "lint_results": [
    {
      "path": "packages/astro/src/runtime/server/sample.ts",
      "source_sha256": "3afd2a7685c14d17b7bce54fe948b4c1e3b24f162e520a10a561bd3d7b258dea",
      "exit_code": 1,
      "diagnostics": [
        {
          "category": "lint/correctness/noNodejsModules",
          "severity": "error"
        },
        {
          "category": "lint/correctness/noNodejsModules",
          "severity": "error"
        },
        {
          "category": "lint/correctness/noNodejsModules",
          "severity": "error"
        },
        {
          "category": "lint/correctness/noNodejsModules",
          "severity": "error"
        },
        {
          "category": "lint/correctness/noNodejsModules",
          "severity": "error"
        },
        {
          "category": "lint/correctness/noUnusedImports",
          "severity": "error"
        },
        {
          "category": "lint/correctness/noUnusedImports",
          "severity": "error"
        },
        {
          "category": "lint/correctness/noUnusedImports",
          "severity": "error"
        },
        {
          "category": "lint/correctness/noUnusedImports",
          "severity": "error"
        },
        {
          "category": "lint/correctness/noUnusedImports",
          "severity": "error"
        }
      ],
      "node_api_diagnostics": 5
    },
    {
      "path": "packages/astro/src/runtime/client/sample.ts",
      "source_sha256": "3afd2a7685c14d17b7bce54fe948b4c1e3b24f162e520a10a561bd3d7b258dea",
      "exit_code": 1,
      "diagnostics": [
        {
          "category": "lint/correctness/noNodejsModules",
          "severity": "error"
        },
        {
          "category": "lint/correctness/noNodejsModules",
          "severity": "error"
        },
        {
          "category": "lint/correctness/noNodejsModules",
          "severity": "error"
        },
        {
          "category": "lint/correctness/noNodejsModules",
          "severity": "error"
        },
        {
          "category": "lint/correctness/noNodejsModules",
          "severity": "error"
        },
        {
          "category": "lint/correctness/noUnusedImports",
          "severity": "error"
        },
        {
          "category": "lint/correctness/noUnusedImports",
          "severity": "error"
        },
        {
          "category": "lint/correctness/noUnusedImports",
          "severity": "error"
        },
        {
          "category": "lint/correctness/noUnusedImports",
          "severity": "error"
        },
        {
          "category": "lint/correctness/noUnusedImports",
          "severity": "error"
        }
      ],
      "node_api_diagnostics": 5
    },
    {
      "path": "packages/astro/src/vite-plugin-sample/runtime.ts",
      "source_sha256": "3afd2a7685c14d17b7bce54fe948b4c1e3b24f162e520a10a561bd3d7b258dea",
      "exit_code": 1,
      "diagnostics": [
        {
          "category": "lint/correctness/noNodejsModules",
          "severity": "error"
        },
        {
          "category": "lint/correctness/noNodejsModules",
          "severity": "error"
        },
        {
          "category": "lint/correctness/noNodejsModules",
          "severity": "error"
        },
        {
          "category": "lint/correctness/noNodejsModules",
          "severity": "error"
        },
        {
          "category": "lint/correctness/noNodejsModules",
          "severity": "error"
        },
        {
          "category": "lint/correctness/noUnusedImports",
          "severity": "error"
        },
        {
          "category": "lint/correctness/noUnusedImports",
          "severity": "error"
        },
        {
          "category": "lint/correctness/noUnusedImports",
          "severity": "error"
        },
        {
          "category": "lint/correctness/noUnusedImports",
          "severity": "error"
        },
        {
          "category": "lint/correctness/noUnusedImports",
          "severity": "error"
        }
      ],
      "node_api_diagnostics": 5
    },
    {
      "path": "packages/astro/src/core/render/runtime-utils.ts",
      "source_sha256": "3afd2a7685c14d17b7bce54fe948b4c1e3b24f162e520a10a561bd3d7b258dea",
      "exit_code": 1,
      "diagnostics": [
        {
          "category": "lint/correctness/noNodejsModules",
          "severity": "error"
        },
        {
          "category": "lint/correctness/noNodejsModules",
          "severity": "error"
        },
        {
          "category": "lint/correctness/noNodejsModules",
          "severity": "error"
        },
        {
          "category": "lint/correctness/noNodejsModules",
          "severity": "error"
        },
        {
          "category": "lint/correctness/noNodejsModules",
          "severity": "error"
        },
        {
          "category": "lint/correctness/noUnusedImports",
          "severity": "error"
        },
        {
          "category": "lint/correctness/noUnusedImports",
          "severity": "error"
        },
        {
          "category": "lint/correctness/noUnusedImports",
          "severity": "error"
        },
        {
          "category": "lint/correctness/noUnusedImports",
          "severity": "error"
        },
        {
          "category": "lint/correctness/noUnusedImports",
          "severity": "error"
        }
      ],
      "node_api_diagnostics": 5
    },
    {
      "path": "packages/astro/src/vite-plugin-sample/plugin.ts",
      "source_sha256": "3afd2a7685c14d17b7bce54fe948b4c1e3b24f162e520a10a561bd3d7b258dea",
      "exit_code": 1,
      "diagnostics": [
        {
          "category": "lint/correctness/noUnusedImports",
          "severity": "error"
        },
        {
          "category": "lint/correctness/noUnusedImports",
          "severity": "error"
        },
        {
          "category": "lint/correctness/noUnusedImports",
          "severity": "error"
        },
        {
          "category": "lint/correctness/noUnusedImports",
          "severity": "error"
        },
        {
          "category": "lint/correctness/noUnusedImports",
          "severity": "error"
        }
      ],
      "node_api_diagnostics": 0
    },
    {
      "path": "packages/astro/src/core/build/sample.ts",
      "source_sha256": "3afd2a7685c14d17b7bce54fe948b4c1e3b24f162e520a10a561bd3d7b258dea",
      "exit_code": 1,
      "diagnostics": [
        {
          "category": "lint/correctness/noUnusedImports",
          "severity": "error"
        },
        {
          "category": "lint/correctness/noUnusedImports",
          "severity": "error"
        },
        {
          "category": "lint/correctness/noUnusedImports",
          "severity": "error"
        },
        {
          "category": "lint/correctness/noUnusedImports",
          "severity": "error"
        },
        {
          "category": "lint/correctness/noUnusedImports",
          "severity": "error"
        }
      ],
      "node_api_diagnostics": 0
    },
    {
      "path": "packages/astro/src/runtime/server/generated-bad.ts",
      "source_sha256": "352197755342141eacd9f2f629872a6d3e42fcd0e6d86ef6f885d564c3c46704",
      "exit_code": 1,
      "diagnostics": [
        {
          "category": "lint/correctness/noNodejsModules",
          "severity": "error"
        }
      ],
      "node_api_diagnostics": 1
    },
    {
      "path": "packages/astro/src/runtime/server/generated-good.ts",
      "source_sha256": "7fcba4932531ef7672005f736557d95db687a5fb93cfb48ab03d699e4e36ad69",
      "exit_code": 0,
      "diagnostics": [],
      "node_api_diagnostics": 0
    }
  ],
  "build_results": [
    {
      "out_dir": "output-1",
      "html_sha256": "bfb6a507c9f0083fab3030bc6e7c1e8a7f325d391df20a511eb5c3526b02d90b",
      "source_input_sha256": "20c481f5fdc298b5cb2a42b8b5d2534439752a0b56a3880aa64efa93eddb0ef9",
      "network_attempts": 0
    },
    {
      "out_dir": "output-2",
      "html_sha256": "345efb27d4f0e873eb1598bf26ac334b1d95e0460617fe865b79f85b3d800bee",
      "source_input_sha256": "c1d0da34a427327b81a879d332df96885af0e2276e2bbef7c548dc54063a4119",
      "network_attempts": 0
    }
  ],
  "unchanged_original_unit_tests": {
    "passed": 1,
    "failed_expected": 1,
    "expected_failure": "Markdown example keeps a leading newline, unlike its original expected string",
    "tap_sha256": "543054174278cb07c32e70cb0c8dbd09ba9e9fc0d7711cac693694b0cb518b51"
  },
  "source_hashes": {
    "examples/run_fixture.mjs": "1e4abea4e345802627cd664caf60621277a0524d4efcf6c6fb0a75d7353c9f17",
    "examples/deny_network.mjs": "ef76924da542c724cb00cf5152675b3885ef9bfff5e91280f408d64c13c72b3d",
    "package.json": "781593050c71122a1d28076904768afb1d58f87f42a324077ff7cb8fe5093ce5",
    "package-lock.json": "af00dd3b178aa7505eab9d18e5e82254857a9743466a700847deb0d0b9ebfb90",
    "repository-context/biome.jsonc": "61766702c45acd574de0f02fb418f528eec884489f413bd9fba0ef371a7552de",
    "repository-context/.agents/skills/astro-developer/testing.md": "e389858edfbce3ed26ea45cca0bb83e315c94f32b053ef0c39e1ae7784ffaee7",
    "repository-context/.agents/skills/astro-developer/constraints.md": "e5e20a6db57d2fe5c67bc1a866c2d40bb154d84e288a1b6717e3f48f4eadec95"
  },
  "synthetic_setup": "Independent wrappers and inputs; full upstream source blocks preserved before Node type erasure; VCS lookup disabled only by the Biome CLI flag.",
  "runtime_tested": false,
  "ai_client_executed": false,
  "production_tested": false,
  "paid_api_used": false,
  "real_credentials_used": false,
  "monorepo_test_runner_used": false,
  "esm_cache_pollution_reproduced": false,
  "edge_runtime_executed": false,
  "full_typescript_typecheck_ran": false,
  "astro_build_api_experimental": true,
  "javascript_network_preload_denied_build_connections": true,
  "resolved_independent_setup_issue": "On Windows, the Node --import preloader requires a file:// URL rather than a C: path."
}

Environment

Windows; Node 24.10.0; Astro 7.3.7; Biome 2.5.3; synthetic files only. Standalone build API and Node type erasure experimental. No preview server, account, key, database or paid service. Skill snapshot and runtime version identities separate.

Package SHA-256: 6ff1d049520eed60eada682d632f746a065fa7375ec577b5ddda094798d0758f

Outcome recorded: 2026-10-08 03:06 UTC

Open evidence ↗

Community reviews

★ New

Be the first to share your experience.

Sign in to leave a review →

Guides using this resource

All guides →
Practical guide

Astro contributor checks: runtime boundaries and isolated builds

Check Astro contributor guidance with real lint and build evidence: distinguish Node API boundaries, runnable examples, shallow immutability and separate build outputs.

By BB Skills · Read guide →
View all ↗

Links use published guide associations and catalog labels. Inspect each resource’s requirements and license.