Mirror notice #
The repository at tangled.org/scottlanoue.com/atmosphere-mail is a
published mirror of a private development repository. The two are
kept in sync by scripts/sync-tangled.sh, which runs on demand (not on
every commit).
This file exists so anyone reading the public mirror knows what they are looking at and what is not visible.
What is the same #
- All Go source code under
cmd/andinternal/ - The lexicons and design docs under
lexicons/anddocs/ - The Nix/Terraform infrastructure definitions under
infra/ - Tests, fixtures, and the AGPL-3.0 license
If a reader builds the binary from this mirror and runs it, they get the same software the operator runs in production.
What is scrubbed before publishing #
The sync script applies git filter-repo with the following rules:
- Internal hostnames replaced with neutral substitutes. The
operator's tailnet uses
*.internal.examplehost names; these get rewritten to*.internal(e.g.kafka-broker.internal,db.internal,ops.internal). The substitution is mechanical and is applied to both file contents and commit messages. - Internal IPs redacted. Specific Tailscale-internal IPs are
replaced with the literal
<internal-ip>. - AI co-author trailers removed. Commit messages with
Co-Authored-By: ...claude...or...anthropic.comlines have those lines stripped before publishing. The commit content is unchanged. - Author normalization. All commits show the same author
(
Scott Lanoue <scott@lanoue.dev>); historical aliases are collapsed via mailmap. Co-contributor commits, if and when they exist, will be additive — this rule normalizes the operator's own shifting email aliases, not third-party contributors. - History squashed into phase commits. Rather than mirroring
every individual commit, the sync collapses runs of related work
into a single descriptive commit per "phase." Each phase commit
represents a coherent theme (e.g.
feat: integration test harness, outbound deliver-path verification, and multi-domain enrollment). The full per-merge history lives on the private side; the public mirror gets the synthesized story.
What is removed entirely #
Some paths are excluded from the mirror because they are operationally sensitive or inherently project-internal:
scripts/— the publishing script itself, plus repo automation helpers. The script's contents would partially undo the scrub list (e.g. a reader could see what hostnames are being substituted to what, which is strictly more information than not having the script at all)..claude/— agent worktree caches and logs..agent-skills.md— internal collaboration notes.- A subset of
.gitea/workflows/— specifically the deploy and ops-automation workflows (relay-deploy.yml,ops-deploy.yml,relay-provision.yml, the DNS-record manipulation workflows, and the Hetzner firewall workflow). These reveal infrastructure topology and credentials-handling patterns that the operator considers reasonable to defer until the project has more usage history. - The code-verification workflows (
go-tests.yml,govulncheck.yml,template-escape-lint.yml,sml-tests.yml,validate-sml.yml) are published, so anyone can see how PRs get gated before merge.
Sync cadence #
There is no SLA. The sync is run by the operator manually, generally when a coherent batch of work has accumulated. In practice that's been every few weeks during the alpha. The mirror is delayed from production — typically by hours to days, occasionally longer.
Why this setup #
The relay project's mission is to lower the cost of running legitimate self-hosted email by pooling reputation across small operators. That mission is served by the source being inspectable, AGPL-licensed, and reproducible. It is not served by exposing operational secrets that would let an attacker degrade the relay's deliverability for everyone using it.
The compromise reflected here — publish the source and the verification workflows, hold back the deploy automation — is a deliberate alpha- phase tradeoff. As the project gains more members and external contributors, the bar for "what's worth holding back" should naturally shift toward smaller. The operator intends to revisit periodically.
Reporting issues #
For source code questions, use the tangled.org issue tracker on this
repo. For deliverability or operational issues with the relay itself,
mail postmaster@atmos.email.