# CLAUDE.md - this project

Project instructions for Claude Code.

## Project

A Unity (C#) project.

Stack: Unity (C#).

## Commands

- Run tests (CLI): `Unity -batchmode -projectPath . -runTests -testPlatform EditMode -testResults results.xml`

## Project structure

- Scripts in `Assets/Scripts/<Feature>/`. Use Assembly Definitions per feature to keep compile times down.

## How to work in this repo

- Read the relevant files before editing. Follow the patterns already in the codebase over these generic rules.
- Make the smallest change that solves the task. Do not refactor or reformat unrelated code.
- Before saying a task is done, run the type-check, lint and tests listed under Commands and fix what you broke.
- If requirements are ambiguous, ask one clear question instead of guessing.
- Never commit secrets, API keys or `.env` files. Use env vars and keep `.env.example` up to date.
- Do not add a new dependency when the standard library or an existing dependency already covers it.
- Ask before adding, removing or upgrading any dependency.
- Ask before changing database schemas, auth, payments or CI configuration.
- Never delete files, drop data or run destructive commands (`rm -rf`, `git push --force`, `DROP TABLE`) without explicit approval.
- Keep each change under ~200 changed lines where possible; split larger work into steps.

## Unity (C#)

- Only edit `.cs` files. Never hand-edit `.meta`, `.unity`, `.prefab` or `.asset` files, and never invent GUIDs. Tell the user what to change in the Editor instead.
- Never touch `Library/`, `Temp/` or `Logs/`.
- Expose inspector fields as `[SerializeField] private`, not public fields.
- Cache component references in `Awake`; never call `GetComponent`, `GameObject.Find` or `FindFirstObjectByType` (formerly `FindObjectOfType`) inside `Update`.
- Movement and physics in `FixedUpdate` with `Rigidbody`; frame-rate-dependent logic multiplies by `Time.deltaTime`.
- Avoid allocations in per-frame code (no LINQ, string concatenation or `new` in `Update`). Pool frequently spawned objects.
- Use ScriptableObjects for shared config and data.
- Use the Input System package if the project has it installed.

## Reference docs

- [Unity Manual](https://docs.unity3d.com/Manual/index.html)
