# 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`.
