Cooperative email for PDS operators
atmosphere-mail MIRROR.md
4.6 kB · 97 lines
Markdown
at main

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/ and internal/
  • The lexicons and design docs under lexicons/ and docs/
  • 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:

  1. Internal hostnames replaced with neutral substitutes. The operator's tailnet uses *.internal.example host 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.
  2. Internal IPs redacted. Specific Tailscale-internal IPs are replaced with the literal <internal-ip>.
  3. AI co-author trailers removed. Commit messages with Co-Authored-By: ...claude... or ...anthropic.com lines have those lines stripped before publishing. The commit content is unchanged.
  4. 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.
  5. 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.