# Storybook Project - Claude Code Instructions

## Commit Policy (CRITICAL - NEVER BYPASS)

These rules are **MANDATORY** for all commits:

1. **All tests must pass** - Run `cargo test` and verify 0 failures before every commit
2. **All new code must have tests** - No exceptions, no untested code allowed
3. **No unused variables or dead code** - Clean up unused code, don't suppress warnings with underscore prefixes
4. **Commit frequently** at logical milestones
5. **Never use `--no-verify`** flag to bypass pre-commit hooks

## Development Workflow

### Cleaning Build Artifacts

To clean all build artifacts across the entire workspace:

```bash
cargo xtask clean
```

This removes:
- Rust build artifacts (`target/`, `Cargo.lock`)
- tree-sitter node_modules and build output
- Zed extension build artifacts (`grammars/`, `extension.wasm`)
- mdbook build artifacts (`docs/book/`)

### Installing the LSP

To reinstall/update the Storybook LSP after making changes:

```bash
cargo install --path . --bin storybook-lsp --force
```

The LSP binary is installed to `~/.cargo/bin/storybook-lsp`. The Zed extension will automatically find it if `~/.cargo/bin` is in your PATH.

### Installing the Zed Extension

To rebuild and install the Zed extension after making changes:

```bash
cd zed-storybook
./build-extension.sh
```

Then in Zed:
1. `Cmd+Shift+P` → "zed: install dev extension"
2. Select: `/Users/sienna/Development/storybook/zed-storybook`

**Updating tree-sitter grammar:**
When the grammar changes, update `zed-storybook/extension.toml` and change the `rev` field under `[grammars.storybook]` to the new commit SHA or branch name.

## Git Workflow

Development happens directly on `mainline` until the language is stable. Releases are tagged with version numbers (e.g., `v0.2.0`). Branches are only used for external contributors or later development phases.

Pre-commit hooks check: trailing whitespace, rustfmt, clippy.

### Commit Message Guidelines

Keep commit messages clean and focused:

- **DO**: Use conventional commit format (e.g., `feat(lexer):`, `fix(parser):`, `docs:`)
- **DO**: Write clear, concise descriptions of what changed and why
- **DON'T**: Include attribution (no "Co-Authored-By")
- **DON'T**: Include test status (e.g., "all tests pass")
- **DON'T**: Include sprint/milestone markers
- **DON'T**: Include version markers (e.g., "Part of v0.3.0")

Example:
```
feat(lexer): add type system keywords

Added four keywords for new type system:
- concept: Base type definition
- sub_concept: Enum/record sub-type definition
- definition: Compile-time enum mapping
- any: Universal type for dynamic contexts
```

## Project Structure

- `src/` - Core Storybook compiler and runtime
- `tree-sitter-storybook/` - Tree-sitter grammar for Storybook DSL
- `zed-storybook/` - Zed editor extension
- `storybook-editor/` - LSP server implementation
- `docs/` - Specifications and documentation
  - `SBIR-v0.2.0-SPEC.md` - Storybook Intermediate Representation binary format
- `.claude/tmp` - Unlimited storage for temporary files. Use this for plans, reports, and other temporary data that is not part of the repository.

## Debugging Protocol

When debugging fails after 2 attempts, stop and enter plan mode. Explain your current hypothesis, what you've tried, and propose next steps before making more changes. Do not blame caching or environment without evidence.

## Project-Specific: Zed Extension

For Zed extension work: the compiled grammar is cached and `highlights.scm` must be bundled correctly. Never delete local query files assuming Zed will fall back to fetched ones. Always verify the extension builds and loads before declaring success.

## Testing Philosophy

- Every feature needs tests
- Every bug fix needs a regression test
- Tests must pass before commits
- Use `cargo test --lib` to run unit tests
- Use `cargo test` to run all tests including integration tests
