Conversation
The repository is about to become public, and public is not the same as open source. With no licence, default copyright applies: somebody may read this and nothing else. The README said so plainly rather than wearing a badge it had not earned, and that sentence has now been paid for. # Why the Affero variant For the one thing it adds over the GPL: running a modified version as a network service counts as distributing it. A messenger is used over a network and almost never installed by the person it serves, so the plain GPL would let somebody host a changed build — with the cryptography quietly weakened — and owe nobody the source. That is the same substitution the manifest, the release workflow and the browser extension exist to make detectable. A licence permitting in law what the code fights in practice would have been an odd pair. `publish = false` stays on every crate. The licence says what may be done with the source; it does not make any of this fit for a registry, and the status section is unchanged — no audit, and none coming. # The table was two features behind `README.md` listed neither Web Push nor the verifiable client, both of which landed today, nor `deploy/`. Somebody arriving at a public repository reads that table first, and it described a project from this morning.
chore: choose the AGPL, and say what the table already does
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 2c72b1a096
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| **GNU Affero General Public License, version 3 or later.** The full text is in | ||
| [LICENSE](LICENSE). |
There was a problem hiding this comment.
Update the remaining unlicensed contributor notice
Declaring the repository AGPL-licensed here leaves CONTRIBUTING.md:206-208 telling prospective contributors that no licence has been chosen, that nothing grants redistribution rights, and that the README says the same. Anyone reading the contribution guide now receives the exact opposite legal status, so that stale paragraph should be updated as part of this licence switch.
Useful? React with 👍 / 👎.
| | Storage quota | 256 MiB per account by default, charged on vault writes and attachment uploads, credited back when a purge deletes. Envelopes are outside it: charging a sealed post would mean naming its sender — see [docs/ROADMAP.md](docs/ROADMAP.md) | | ||
| | Web, desktop | Vite 7 + React 19; Tauri 2 wraps the same build | | ||
| | Push notifications | Web Push, off until a deployment names a contact in `VAPID_SUBJECT`. The wake-up carries no text, no sender and no group id — the worker cannot decrypt, so it says only that something arrived | | ||
| | Verifiable web client | The bundle belongs to no deployment, so one published manifest of hashes describes every instance. CI attests it to GitHub; an extension compares what the browser actually received. See [docs/THREAT-MODEL.md](docs/THREAT-MODEL.md) § 4quinquies for what that establishes and what it does not | |
There was a problem hiding this comment.
Qualify the manifest coverage of call-enabled builds
The claim that one manifest describes every instance is false when an operator enables the audio-call deployment described above: docs/DEPLOY.md:92-94 and scripts/release-web.sh:26-29 explicitly state that setting VITE_MEDIA_URL changes index.html and makes the deployment stop matching the published build. In that supported configuration the extension will report a legitimate deployment as altered, so this row should state the call-enabled exception rather than promise coverage of every instance.
Useful? React with 👍 / 👎.
| Because of the one thing it adds: **running a modified version as a network service counts as | ||
| distributing it**. A messenger is used over a network and almost never installed by the person it |
There was a problem hiding this comment.
Describe the AGPL network obligation accurately
The AGPL does not redefine operating a network service as distribution: Section 13 in LICENSE:542-548 instead requires a modified version that supports remote interaction to prominently offer its Corresponding Source to the users interacting with it. Calling the service operation itself distribution misstates both the legal mechanism and the obligation being imposed, so this public licence rationale should describe the source-offer requirement directly.
Useful? React with 👍 / 👎.
Promotes the licence and the README corrections to the branch visitors land on, immediately before the repository becomes public.
Two commits:
4f524aa chore: choose the AGPL, and say what the table already does—LICENSE,Cargo.tomlfromUNLICENSEDtoAGPL-3.0-or-later, the field added to bothpackage.json, the README's licence section rewritten, and the "What works today" table brought up to date with Web Push, the verifiable client anddeploy/.2c72b1a— its merge.Why this has to land before the visibility change, not after:
mainis the default branch. Opened public without this, the repository would greet everybody with "No licence has been chosen yet — this repository is not legally open source", no licence badge, and a feature table two features behind. The licence exists ondevand nowhere a visitor looks.CI was green on this exact content on #45 —
rust18m13,web,wasm,changes;auditskipped by its path filter.