# Pavan — Claude Code Instructions
## Project Identity
**Pavan** (Sanskrit: पवन — wind, breeze) — Aerodynamics engine for AGNOS
- **Type**: Flat library crate
- **License**: GPL-3.0
- **MSRV**: 1.89
- **Version**: SemVer 0.1.0
## Consumers
kiran/joshua (flight sim, projectiles, wind effects), impetus (aero forces on bodies), badal (atmospheric feed)
## Development Process
### P(-1): Scaffold Hardening (before any new features)
0. Read roadmap, CHANGELOG, and open issues — know what was intended before auditing what was built
1. Test + benchmark sweep
2. Cleanliness check: fmt, clippy, audit, deny
3. Baseline benchmarks (`./scripts/bench-history.sh`)
4. Internal deep review — gaps, optimizations, security, logging/errors, docs
5. External research — domain completeness, missing capabilities, best practices, world-class accuracy
6. Cleanliness check — must be clean after review
7. Additional tests/benchmarks from findings
8. Post-review benchmarks — prove the wins
9. Repeat if heavy with benchmarks
7. Repeat if heavy
### Work Loop / Working Loop (continuous)
1. Work phase — new features, roadmap items, bug fixes
2. Cleanliness check: `cargo fmt --check`, `cargo clippy --all-features --all-targets -- -D warnings`, `cargo audit`, `cargo deny check`, `RUSTDOCFLAGS="-D warnings" cargo doc --all-features --no-deps`
3. Test + benchmark additions for new code
4. Run benchmarks (`./scripts/bench-history.sh`)
5. Internal review — performance, memory, security, throughput, correctness
6. Cleanliness check — must be clean after review
7. Deeper tests/benchmarks from review observations
8. Run benchmarks again — prove the wins
9. If review heavy → return to step 5
10. Documentation — update CHANGELOG, roadmap, docs
11. Version check — VERSION, Cargo.toml, recipe all in sync
12. Return to step 1
### Task Sizing
- **Low/Medium effort**: Batch freely — multiple items per work loop cycle
- **Large effort**: Small bites only — break into sub-tasks, verify each before moving to the next. Never batch large items together
- **If unsure**: Treat it as large. Smaller bites are always safer than overcommitting
### Refactoring
- Refactor when the code tells you to — duplication, unclear boundaries, performance bottlenecks
- Never refactor speculatively. Wait for the third instance before extracting an abstraction
- Refactoring is part of the work loop, not a separate phase. If a review (step 5) reveals structural issues, refactor before moving to step 6
- Every refactor must pass the same cleanliness + benchmark gates as new code
### Key Principles
- Never skip benchmarks
- Own the stack (hisab types)
- `#[non_exhaustive]` on enums, `#[must_use]` on pure fns, `#[inline]` on hot paths
- ISA atmosphere values must match standard tables
- All physics formulas must have correctness tests with known engineering values
## DO NOT
- Commit/push — user handles git
- NEVER use `gh` CLI
- No unwrap/panic in library code
- No skip benchmarks
## Documentation Structure
```
Root files (required):
README.md — quick start, features, dependency stack, consumers, license
CHANGELOG.md — per-version changes (Added/Changed/Fixed/Removed)
CLAUDE.md — this file (development process, principles, DO NOTs)
CONTRIBUTING.md — fork, branch, make check, PR workflow
SECURITY.md — supported versions, scope, reporting
CODE_OF_CONDUCT.md — Contributor Covenant
LICENSE — GPL-3.0
docs/ (required):
architecture/
overview.md — module map, data flow, consumers, dependency stack
math.md — (if applicable) mathematical reference for algorithms/formulas
development/
roadmap.md — completed items, backlog, future features (demand-gated), v1.0 criteria
docs/ (when earned — not scaffolded empty):
adr/
NNN-title.md — architectural decision records (when non-obvious choices are made)
development/
threat-model.md — attack surface, mitigations (when security-relevant)
dependency-watch.md — deps to monitor for updates/CVEs
guides/
usage.md — patterns, philosophy, code examples
testing.md — test count, coverage, testing patterns
ADR format:
# NNN — Title
## Status: Accepted/Superseded
## Context: Why this decision was needed
## Decision: What we chose
## Consequences: Trade-offs, what changes
```
## CHANGELOG Format
Follow [Keep a Changelog](https://keepachangelog.com/):
```markdown
# Changelog
## [Unreleased]
### Added — new features
### Changed — changes to existing features
### Fixed — bug fixes
### Removed — removed features
### Security — vulnerability fixes
### Performance — benchmark-proven improvements (include numbers)
## [X.Y.Z] - YYYY-MM-DD
### Added
- **module_name** — what was added and why
### Changed
- item: old behavior → new behavior
### Fixed
- issue description (root cause → fix)
### Performance
- benchmark_name: before → after (−XX%)
```
Rules:
- Every PR/commit that changes behavior gets a CHANGELOG entry
- Performance claims MUST include benchmark numbers
- Breaking changes get a **Breaking** section with migration guide
- Group by module when multiple changes in one release
- Link to ADR if a change was driven by an architectural decision