AGENTS.md · git:20260905.fbbf867 · 2026-09-05 · sha256 db4e979830564302

AGENTS.md git:20260905.fbbf867A

Immutable. This exact content never changes and is served at /api/v1/blob/db4e979830564302.

# AGENTS.md

## Project Shape

Starwind UI is a pnpm/Turbo monorepo for Astro, React, and Vue 3.5 beta components,
framework-neutral Runtime controllers, generated Primitive adapters, and the `starwind` CLI.

- `packages/runtime`: behavior-only DOM controllers and component subpath exports.
- `packages/astro` and `packages/react`: generated first-party Primitive adapters.
- `packages/vue`: generated Vue 3.5 public-beta Primitive adapters. The beta remains outside the
  stable Runtime, Astro, and React fixed package group.
- Svelte adapter verification stays in the private development repository. It is not an npm, CLI,
  demo, or public workspace surface.
- `packages/cli`: CLI commands, registries, migrations, and project integration.
- `apps/demo` and `apps/react-demo`: complete Astro and React integration demos.
- `apps/vue-demo`: public Vue beta integration and review demo.
- `scripts/portable-runtime`: adapter contracts, generators, smoke tests, and measurement tooling.

Use pnpm for package work. Package metadata requires Node `>=22.12.0`; CI uses Node 24.

## Useful Commands

```bash
pnpm install
pnpm build
pnpm verify
pnpm test:run
pnpm test:coverage
pnpm typecheck
pnpm lint:check
pnpm format:check
pnpm demo:smoke
pnpm react-demo:smoke
pnpm vue-demo:smoke
pnpm runtime:generate:all
pnpm runtime:registry:generate
pnpm runtime:size:check
```

## Contribution Conventions

- Runtime behavior belongs in `packages/runtime`; framework adapters wire props, refs, events, and
  markup to Runtime behavior rather than reimplementing it.
- Generated adapter outputs should be changed through contracts, specs, or generators and then
  regenerated.
- Keep TypeScript strict and ESM-only.
- Put tests in the established `tests` homes rather than adding colocated `__tests__` directories.
- Preserve `data-slot` for public part identity and use `data-sw-*` for Runtime discovery hooks.
- Add deferred styled version intent under `.changeset/styled-components/` for changed existing
  components; the generated Version Packages PR consolidates manifest bumps. Regenerate registry
  artifacts rather than editing generated registry JSON by hand.
- Add deferred primitive version intent under `.changeset/primitive-components/` for changed
  existing vendored primitives. Use normal SemVer: `patch` for compatible fixes, `minor` for
  backward-compatible capabilities, and `major` for breaking changes.
- Add a Changeset for package-facing changes. Follow the Vue beta release policy for
  `@starwind-ui/vue`. Never add Changesets for `@starwind-ui/svelte` or `vue-demo` while they remain
  quarantined or private.
- Follow `docs/release/versioning.md`. Existing component changes schedule a `starwind` patch
  independently from their component bump. A brand-new stable component schedules a `starwind`
  minor.
- Never create, modify, or approve a `starwind` major Changeset without express user consent for
  that CLI major in the current task.
- Use conventional commits such as `feat(runtime): ...`, `fix(cli): ...`, or `docs: ...`.

Before handoff, run the narrowest relevant tests and report any checks that were not run.