# Contributing
Both projects live under the [`ethswarm-tools`](https://github.com/ethswarm-tools)
GitHub org.
- CLI: [`ethswarm-tools/bee-check`](https://github.com/ethswarm-tools/bee-check)
- SPA: [`ethswarm-tools/bee-check-web`](https://github.com/ethswarm-tools/bee-check-web)
- Book: this directory (`bee-check/book/`) — edit links at the
bottom of each page take you to the source.
## What's interesting to work on
- **ENS resolution** — the biggest deferred feature. Needs an
Ethereum JSON-RPC client + namehash + a call to the ENS resolver
contract. Applies to both CLI and SPA. ~300 LOC + a JSON-RPC dep
on the Rust side.
- **Cold-content download probe** — currently we probe stewardship
and per-chunk; a `/bytes/{ref}` end-to-end download would round
out the retrievability story for non-manifest content.
- **`bzz.link` / Swarm-hosted SPA** — dogfood the deployment by
mirroring `bee-check-web` onto Swarm itself.
## Report shape changes
The `spec_version: 1` JSON shape is defined in
[`SPEC.md`](https://github.com/ethswarm-tools/bee-check/blob/main/SPEC.md)
in the CLI repo. Both surfaces (CLI's `Report` Rust struct and the
SPA's TS types) implement that shape — keep them in sync.
- New fields = additive, no version bump. Consumers must ignore
unknown fields.
- Renames or removals bump `spec_version`.
## Local development
CLI:
```bash
cargo run -- <ref> --bee http://localhost:1633
cargo test
```
SPA:
```bash
cd bee-check-web
npm install
npm run dev # http://localhost:5173/bee-check-web/
npm run check # svelte-check
npm run build
```
Book:
```bash
cd bee-check/book
mdbook serve --open # http://localhost:3000
mdbook build # static output in book/book/
```
## Release process
CLI: tag `vX.Y.Z`, push — `cargo-dist` builds and uploads prebuilt
binaries; `cargo publish` for crates.io.
SPA: bump `package.json`, commit, push to `main` — GH Pages workflow
deploys automatically. Tag `vX.Y.Z` and `gh release create` for a
named release.
Book: edits to `book/**` trigger the book deploy workflow on push
to `main`.