CONTRIBUTING.md
Rama main · réplica de lectura del repositorio original.
# Contributing to EVE Space
Feedback, issue reports, technical review, and code contributions are all welcome. EVE Space is
under active pre-release development, so interfaces and architecture still move; opening an issue
before a large change saves rework.
## Licensing of Contributions
EVE Space is licensed under the
[GNU Affero General Public License v3.0 or later](LICENSE). Contributions are inbound under the same
terms as the project is outbound: **by submitting a pull request, you agree that your contribution is
licensed under AGPL-3.0-or-later.**
There is no contributor license agreement to sign and no copyright assignment. You keep the copyright
in what you write.
Only contribute code you have the right to license this way. Do not paste code from a source under an
incompatible license, and if your employment contract assigns your work to your employer, get their
sign-off before contributing.
Third-party dependencies must be under a license compatible with AGPL-3.0-or-later. In practice that
means MIT, ISC, Apache-2.0, BSD, or similar permissive terms; raise anything else in the pull request
so it can be reviewed before it lands.
Contributions must not include EVE Online assets, static data, or other CCP property beyond what the
[EVE Online Developer License Agreement](https://developers.eveonline.com/license-agreement) permits.
See the EVE Online Intellectual Property section of the [README](README.md) for what the project
license does and does not cover.
## Getting Set Up
Requirements, EVE application setup, environment variables, and the local run instructions are in the
[README](README.md). In short:
```bash
corepack enable
pnpm install --frozen-lockfile
pnpm stack:up
pnpm dev
```
## Engineering Guide
[`AGENTS.md`](AGENTS.md) is the authoritative engineering guide: architecture boundaries, API and
contract rules, Vue and Nuxt conventions, schema ownership, authentication and security
requirements, ESI and caching rules, and persistence rules. Read the sections relevant to your change
before you start. Preserve the documented architecture and security boundaries unless the change is
explicitly about changing them.
Two rules cause the most review churn, so they are worth repeating here:
- **Never commit `.env`.** Document every new setting in `.env.example`.
- **Respect ESI caching.** Do not refresh a resource before its expiry, and preserve conditional
requests, cooldowns, and error-budget handling. Bypassing ESI caching can get the application's
access revoked.
## Checks
[Lefthook](lefthook.yml) runs lint and formatting on commit. Pushes add Knip, typechecking, frontend,
API, module, registry, Redis, and PostgreSQL suites. Coverage and production browser/Rust checks run
in CI. The checks are repository-wide rather than staged-file-scoped on purpose. Run `pnpm install`
at least once so the hooks are installed.
To run the core checks yourself:
```bash
pnpm lint
pnpm format:check
pnpm knip
pnpm typecheck
pnpm test:frontend
pnpm test:api
pnpm test:modules
pnpm test:redis
pnpm test:postgres
pnpm test:packaging
cargo fmt --manifest-path sde-ingest/Cargo.toml --all --check
cargo clippy --manifest-path sde-ingest/Cargo.toml --all-targets --all-features --locked -- -D warnings
cargo test --manifest-path sde-ingest/Cargo.toml --all-features --locked
```
Use `pnpm lint:fix` and `pnpm format` for the mechanical fixes, and `pnpm knip` to find unreachable
code. The Redis and PostgreSQL suites need a working Docker Engine because they run against real
containers.
New behavior needs tests. The API coverage suite enforces 80% lines, functions, and statements and
75% branches, and CI will fail the pull request below those thresholds.
### ESI Client Generation
The ESI client uses exactly `@hey-api/openapi-ts@0.99.0` as private build-time tooling, under its MIT License. It is configured only to generate natural TypeScript and Zod 4 artifacts; the published package uses the repository-maintained client runtime and does not ship a Hey API SDK or client runtime.
From the repository root, `pnpm --filter @evespace/esi-client generate` and `pnpm esi:generate:check` are offline and read the committed corrected `packages/esi-client/openapi/generated/esi-openapi.json` snapshot. Only `pnpm --filter @evespace/esi-client generate:source:refresh` may contact ESI; it validates, corrects, hashes, and records provenance for the refreshed source before generation.
Keep the Hey API dependency exactly pinned. Any pin change must pass complete generation, semantic, package, and installed-tarball validation before it is accepted.
## Pull Requests
- Branch from `main` and keep each pull request to one coherent change.
- Use [Conventional Commits](https://www.conventionalcommits.org) for commit subjects, matching the
existing history: `feat(api): ...`, `fix: ...`, `ci: ...`, `docs: ...`.
- Say what changed and why, and note any new environment variable, migration, or ESI scope.
- Add schema changes as new ordered migrations. Never rewrite a migration that has already been
applied.
- Make sure `CI` and `Coverage` are green before asking for review. Changes to the ESI client or its toolchain must also pass the path-scoped `ESI Client` validation and package quality gate.
## Security
Do not open a public issue for a security vulnerability. Report it privately to skrypets@gmail.com
with enough detail to reproduce it, and allow time for a fix before any public disclosure.