diff --git a/CLAUDE.md b/CLAUDE.md
index 5b84c90..9356f84 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -6,10 +6,8 @@ gitignored `.env`.
## File naming
-New services use `compose.yml` — the current Compose spec name, and the
-shorter one. Existing services that still use `docker-compose.yml` stay as
-they are; do not rename them, not even while touching the file for something
-else.
+Every service uses `compose.yml` — the current Compose spec name, and the
+shorter one. Not `docker-compose.yml`.
## Installing software in an image
diff --git a/alloy/.github/workflows/validate.yml b/alloy/.github/workflows/validate.yml
index 4393841..adb4ea9 100644
--- a/alloy/.github/workflows/validate.yml
+++ b/alloy/.github/workflows/validate.yml
@@ -28,7 +28,7 @@ jobs:
- name: Extract embedded Alloy config
uses: mikefarah/yq@v4
with:
- cmd: yq '.configs.alloy_config.content' docker-compose.yml > config.alloy
+ cmd: yq '.configs.alloy_config.content' compose.yml > config.alloy
- name: Validate Alloy config syntax
run: |
diff --git a/alloy/README.md b/alloy/README.md
index c4b9fa6..9fe29f7 100644
--- a/alloy/README.md
+++ b/alloy/README.md
@@ -10,7 +10,7 @@ API to it. The Alloy config is embedded inline via Compose `configs:`, so
there is no `config.alloy` on disk. There is no `.env.example` either: the
nine variables are exported before `docker compose up`.
-The compose file is `docker-compose.yml`. Both containers have fixed names,
+Both containers have fixed names,
`container_name: alloy` and `alloy-dockerproxy`, and `dockerproxy` publishes
`127.0.0.1:2375` — Alloy runs with host networking, so it has no compose
network to reach the proxy over.
diff --git a/alloy/docs/known-noise-coolify-ssh-sessions.md b/alloy/docs/known-noise-coolify-ssh-sessions.md
index ec1bb56..d0dc5a4 100644
--- a/alloy/docs/known-noise-coolify-ssh-sessions.md
+++ b/alloy/docs/known-noise-coolify-ssh-sessions.md
@@ -60,7 +60,7 @@ If the matching key's comment is `coolify` → this doc applies.
### Option A — drop the noise at Alloy (host stays as-is)
-Edit the `loki.process "default"` block inside `journal_module` in `docker-compose.yml`:
+Edit the `loki.process "default"` block inside `journal_module` in `compose.yml`:
```alloy
loki.process "default" {
diff --git a/alloy/docs/upstream-sources-of-truth.md b/alloy/docs/upstream-sources-of-truth.md
index a6170f9..b616748 100644
--- a/alloy/docs/upstream-sources-of-truth.md
+++ b/alloy/docs/upstream-sources-of-truth.md
@@ -30,7 +30,7 @@ When the upstream integration changes (adds a metric, drops a panel, renames a l
## Upstream references
-The two reference pages this repo's `docker-compose.yml` mirrors:
+The two reference pages this repo's `compose.yml` mirrors:
- **Linux Node integration** —
- **Docker integration** —
@@ -42,7 +42,7 @@ Where official mixin dashboards exist they're tier-2 corroboration:
## Mapping our config to upstream
-| Block in `docker-compose.yml` | Upstream source |
+| Block in `compose.yml` | Upstream source |
|---|---|
| `prometheus.exporter.unix` (collectors, mounts, fs/net excludes) | Linux Node integration page → "Configure Alloy" |
| `prometheus.relabel "integrations_node_exporter"` (`keep` allowlist of 157 metrics) | Linux Node integration page → [Metrics](https://grafana.com/docs/grafana-cloud/monitor-infrastructure/integrations/integration-reference/integration-linux-node/#metrics) section, verbatim |
@@ -56,11 +56,11 @@ Where official mixin dashboards exist they're tier-2 corroboration:
1. **Don't expand the metric set unilaterally.** If a panel in a Grafana Cloud dashboard requires a metric we don't ship, we'd add it — but the trigger is "the integration dashboard needs it, verified from a tier 1–4 source", not "node_exporter exposes it".
2. **Don't filter further than upstream does.** We ship at least what the upstream config does. Tightening (e.g. for cost) goes in a clearly-named overlay or a downstream env-specific config.
-3. **Re-check on Alloy/integration major versions.** When bumping `grafana/alloy` image or when the Grafana Cloud integration revs, diff the upstream Alloy snippet against `docker-compose.yml` and update.
+3. **Re-check on Alloy/integration major versions.** When bumping `grafana/alloy` image or when the Grafana Cloud integration revs, diff the upstream Alloy snippet against `compose.yml` and update.
## Audit (2026-04-26)
-Both keep-lists in `docker-compose.yml` are copied verbatim from the **Metrics** section of each integration page (tier 1):
+Both keep-lists in `compose.yml` are copied verbatim from the **Metrics** section of each integration page (tier 1):
- **Linux-Node** — 157 raw metrics (`node_*`, `process_max_fds`, `process_open_fds`, `up`). The list also contains `instance:node_num_cpu:sum`, which is a recording-rule output computed server-side by Grafana Cloud's ruler — it's intentionally **not** in the keep-list because the agent doesn't produce it.
- **Docker** — 16 metrics (`container_*`, `machine_memory_bytes`, `machine_scrape_error`, `up`).
diff --git a/couchbase/README.md b/couchbase/README.md
index 2044455..e3c9e08 100644
--- a/couchbase/README.md
+++ b/couchbase/README.md
@@ -1,7 +1,7 @@
# couchbase
[Couchbase Server](https://www.couchbase.com), single node, defined in
-`docker-compose.yml` with `container_name: db`.
+`compose.yml` with `container_name: db`.
## Networking
diff --git a/traffmonetizer/README.md b/traffmonetizer/README.md
index 57451be..bb15c8c 100644
--- a/traffmonetizer/README.md
+++ b/traffmonetizer/README.md
@@ -1,7 +1,7 @@
# traffmonetizer
[TraffMonetizer](https://traffmonetizer.com) bandwidth-sharing client, defined
-in `docker-compose.yml` with `container_name: tm` and `restart: always`. It
+in `compose.yml` with `container_name: tm` and `restart: always`. It
only makes outbound connections, so there is no port to map a domain to.
The image tag is `arm64v8`. Change it to match the host architecture.