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