Skip to content

Correct the claims that Sendan was never released, and give the README an install path - #331

Merged
Serraniel merged 2 commits into
mainfrom
docs/correct-stale-claims
Oct 25, 2026
Merged

Serraniel merged 2 commits into
mainfrom
docs/correct-stale-claims

Conversation

@Serraniel

@Serraniel Serraniel commented Oct 25, 2026 •

Copy link
Copy Markdown
Owner

Two commits, reviewable separately.

1. docs: correct claims that the project was never released

Six files said Sendan has no published release. Seven exist; the claims have been false since v0.1.0 was tagged on 31 August. These were not harmless — the worst of them tells a reader that the project's headline guarantee does not work:

Nothing published carries these signatures yet. v0.1.0 is tagged, but the workflow that builds and signs its artefacts was never started, and the release keys do not exist. — SECURITY.md

Checked before removing it. The v0.3.3 manifest verifies under both documented keys:

$ minisign -Vm manifest.json -P 'RWQt826yhqM+nKsvcrv1lu/eePUVXmE2haeCmGUBpgzwu7CWVZxyRUVk'
Signature and comment signature verified
Trusted comment: sendan v0.3.3 client asset manifest

$ go run ./tools/pq-sign verify release.pqpub manifest.json
manifest.json: signature verified

Both match the constants in cmd/sendan-cli/verify.go, so the note was wrong about the keys existing too.

docs/design.md opened with "This document describes software that has not yet been implemented." It is the first row of the README's documentation table, so that was the first thing a reviewer of the design read.

Two real bugs fell out, not just stale prose

Image tags carry no v the registry holds 0.1.0 … 0.3.3 and zero v-prefixed tags, so cosign verify ghcr.io/serraniel/sendan:v0.5.0 was wrong in form as well as version — it would have failed for anyone substituting a real release. compose.yaml now records the convention where somebody pinning a deployment reads it
docs/cli.md asked for Go 1.25 go.mod requires 1.26.0, so the documented build could not work on the version it named

v0.5.0 placeholders are replaced by a $VERSION variable rather than another literal, so the snippets stay copy-pasteable from one edit.

2. docs: give the README an install path

There wasn't one. Headings ran Try it → Features → Cryptographic design → … → Security; anyone wanting to run Sendan had to reach docs/deployment.md through a table two thirds down, and until commit 1 that document opened by saying no image existed.

Adds Run it between Try it and Features: a single docker run for a local trial, compose.yaml for a real deployment with the reason the first isn't one (links come from SENDAN_BASE_URL; streaming needs HTTP/2, so TLS), the :0.3.3-not-:latest pin, and the CLI with the checksum step included rather than left as an exercise.

Both commands were run, not transcribed. The published image starts with no configuration at all:

{"msg":"metadata store ready","location":"sqlite:/var/lib/sendan/sendan.db"}
{"msg":"blob store ready","location":"file:/var/lib/sendan/blobs"}
{"msg":"reaper started","interval":"5m0s","batch":500}
{"msg":"listening","addr":":8080"}
GET /            200, 2617 bytes
GET /api/source  200, v0.3.3

Both documented download URLs return 200.

Also corrects the sendan verify sample in Try it, which showed v0.3.0 and 31 assets. The demo reports v0.3.3 at a5fbc01 and that manifest carries 33 assets, so the numbers are now reproducible against the live demo.

Note

Touches README.md in the same file as #332, which adds a documentation-table row. Whichever merges second may want a trivial rebase.

🤖 Generated with Claude Code

Serraniel and others added 2 commits October 25, 2026 21:21
Six files stated that Sendan has no published release. Seven releases
exist, v0.3.3 is current, and the claims had been false since v0.1.0 was
tagged on 31 August.

They were not stale in a harmless way. The worst of them told a reader
that the project's headline guarantee does not work:

  SECURITY.md: "Nothing published carries these signatures yet. v0.1.0 is
  tagged, but the workflow that builds and signs its artefacts was never
  started, and the release keys do not exist."

Checked before removing it, rather than assumed. The v0.3.3 manifest
verifies under both documented keys:

  minisign -Vm manifest.json -P RWQt826yhqM+...
    Signature and comment signature verified
    Trusted comment: sendan v0.3.3 client asset manifest

  go run ./tools/pq-sign verify release.pqpub manifest.json
    signature verified

Both keys match the constants compiled into cmd/sendan-cli/verify.go, so
the note was wrong about the keys existing too.

docs/design.md opened by telling the reader that none of it is built. It
is the first entry in the README's documentation table, so that was the
first thing a reviewer of the design read.

The v0.5.0 placeholders are replaced by a $VERSION variable rather than
another literal, so the snippets stay copy-pasteable from one edit.

Two bugs came out of this rather than only stale prose:

- The image tags carry no `v`. The registry holds 0.1.0 through 0.3.3
  and no v-prefixed tag, so `cosign verify ghcr.io/...:v0.5.0` was wrong
  in form as well as version and would have failed for anyone who
  substituted a real release. compose.yaml now records the convention
  where somebody pinning a deployment will read it.
- docs/cli.md asked for Go 1.25. go.mod requires 1.26.0, so the
  documented build could not work on the version it named.

Fixes the three "build this yourself because there is no image" passages
in docs/deployment.md and compose.yaml, which told people to build from
source as the only option while a signed multi-arch image was published.

Signed-off-by: Serraniel <mail@serraniel.dev>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: Serraniel <mail@serraniel.dev>
The README had none. Its headings ran Try it, Features, Cryptographic
design, Browser requirements, Documentation, Roadmap, License, Security -
somebody who wanted to run Sendan had to reach docs/deployment.md through
a table two thirds of the way down, and until the previous commit that
document opened by saying no image had been published.

Adds a "Run it" section between "Try it" and "Features":

- a single `docker run` for a local trial
- `compose.yaml` for a real deployment, with the reason the first is not
  sufficient for one: links are built from SENDAN_BASE_URL, and streaming
  an upload needs HTTP/2, which browsers only offer over TLS
- the `:0.3.3` rather than `:latest` pin, and the absent `v`
- the command line client, with the checksum step not left as an exercise

Both commands were run rather than written from the documentation. The
published image starts with no configuration at all and serves the client:

  $ docker run -d -p 18080:8080 -v ... ghcr.io/serraniel/sendan:0.3.3
  {"msg":"metadata store ready","location":"sqlite:/var/lib/sendan/sendan.db"}
  {"msg":"blob store ready","location":"file:/var/lib/sendan/blobs"}
  {"msg":"reaper started","interval":"5m0s","batch":500}
  {"msg":"listening","addr":":8080"}
  GET /            200, 2617 bytes
  GET /api/source  200, v0.3.3

and both documented download URLs return 200.

Also corrects the `sendan verify` sample output in "Try it", which still
showed v0.3.0 and 31 assets. The demo instance reports v0.3.3 at commit
a5fbc01 and the v0.3.3 manifest carries 33 assets, so the numbers are now
the ones a reader reproduces by running the command against the demo.

Signed-off-by: Serraniel <mail@serraniel.dev>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: Serraniel <mail@serraniel.dev>
@Serraniel
Serraniel merged commit f5b2d22 into main Oct 25, 2026
15 checks passed
@Serraniel
Serraniel deleted the docs/correct-stale-claims branch October 25, 2026 20:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant