From 88bfb736ec278f26c4c2f05aeb65fd83430fd694 Mon Sep 17 00:00:00 2001 From: Josh Vaughen Date: Thu, 8 Oct 2026 19:55:32 -0700 Subject: [PATCH 1/2] docs: name gnu-alpha among the rsync mirrors --- CLAUDE.md | 6 +++--- README.md | 10 +++++----- engines/rsync.yml | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 9c3df4e..2c64c38 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -137,9 +137,9 @@ command line. Last, it encrypts and decrypts a file with the `age` verb and a te identity. `task check` does not examine a change to `README.md`. For that change, the review is the check. -Seven repositories link to headings of `README.md`: ctan, dropbox, github, gnu, nongnu, site -and tlnet. Do not change the text of these headings. If you change it, the links from -these repositories cannot find them: +Eight repositories link to headings of `README.md`: ctan, dropbox, github, gnu, gnu-alpha, nongnu, +site and tlnet. Do not change the text of these headings. If you change it, the links from these +repositories cannot find them: - `#secrets` - `#storage` diff --git a/README.md b/README.md index d62ec07..564084e 100644 --- a/README.md +++ b/README.md @@ -60,8 +60,8 @@ flowchart LR Each mirror has the structure of this diagram, with one upstream and one sink. There are two types of mirror: -- A public mirror (ctan, tlnet, gnu and nongnu) copies an rsync tree into a bucket, and a - domain serves the bucket. The bucket is the mirror. +- A public mirror (ctan, tlnet, gnu, gnu-alpha and nongnu) copies an rsync tree into a + bucket, and a domain serves the bucket. The bucket is the mirror. - A private mirror (github and dropbox) copies an account into Proton Drive. Its bucket contains only the data that the next run uses. @@ -924,7 +924,7 @@ A full CTAN mirror is approximately 140 GB: approximately $2.10 a month, at $0.0 GB-month. R2 has a free tier for each account, not for each bucket. The free tier is 10 GB-month of -storage, 1 million Class A operations and 10 million Class B operations each month. All six +storage, 1 million Class A operations and 10 million Class B operations each month. All seven buckets are in one account, and ctan, gnu and nongnu use all of the free tier. Thus, each README gives gross costs: storage only, at $0.015 for each GB-month, with no free tier subtracted. @@ -1009,7 +1009,7 @@ from GHCR. A run does not build an image, and it does not use Docker Hub. | Variant | Base | Tools | For | |---|---|---|---| -| `rsync` | ubuntu 24.04 | rsync, gpgv, xz, curl, perl (shasum), go-task, AWS CLI v2 with only s3 and sts | rsync upstreams into a bucket: ctan, tlnet, gnu, nongnu | +| `rsync` | ubuntu 24.04 | rsync, gpgv, xz, curl, perl (shasum), go-task, AWS CLI v2 with only s3 and sts | rsync upstreams into a bucket: ctan, tlnet, gnu, gnu-alpha, nongnu | | `proton` | python 3.13 slim | proton-drive, age, git, go-task, boto3, requests, pytest, ruff, and `s3`, a boto3 script that gets and puts objects | Proton Drive sinks: github with the proton engine, dropbox with its Python | The two images have these properties: @@ -1053,7 +1053,7 @@ There are two types of pin, with one policy: The two tags move. When they move, a change to a verb or a tool goes into each mirror at its next run. - Each mirror pins each `uses:` of a lib workflow to the commit of a release, and - Dependabot updates it. The repositories of the four public mirrors have an Actions + Dependabot updates it. The repositories of the five public mirrors have an Actions policy: each `uses:` must have a full SHA. The other repositories pin each `uses:` with the same method. diff --git a/engines/rsync.yml b/engines/rsync.yml index 638cf83..123848f 100644 --- a/engines/rsync.yml +++ b/engines/rsync.yml @@ -322,7 +322,7 @@ tasks: # rejects a vars input that validate-vars.sh does not accept. Ceiling: a different # caller that gives text that is not safe to `task sync --`. Upgrade path: make sure # here that the value is a number. Then do `task render-update` in lib and in each - # rsync mirror (ctan, tlnet, gnu and nongnu). The render.txt of each records this + # rsync mirror (ctan, tlnet, gnu, gnu-alpha and nongnu). The render.txt of each records this # line. - >- awk -F'\t' -v OFS='\t' -v CAP=$(({{.BATCH_GB | default 4}} * 1000000000)) -v DIR={{.RUN}} -v TL="{{.TL}}" ' From 499a51f8e89e2357bfc0073c9984cb7f857418b0 Mon Sep 17 00:00:00 2001 From: Josh Vaughen Date: Thu, 8 Oct 2026 20:18:47 -0700 Subject: [PATCH 2/2] docs: drop the lists and counts of mirrors and repositories --- CLAUDE.md | 5 ++--- README.md | 24 ++++++++++++------------ engines/rsync.yml | 3 +-- 3 files changed, 15 insertions(+), 17 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 2c64c38..4cfe134 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -137,9 +137,8 @@ command line. Last, it encrypts and decrypts a file with the `age` verb and a te identity. `task check` does not examine a change to `README.md`. For that change, the review is the check. -Eight repositories link to headings of `README.md`: ctan, dropbox, github, gnu, gnu-alpha, nongnu, -site and tlnet. Do not change the text of these headings. If you change it, the links from these -repositories cannot find them: +The other repositories of the org link to headings of `README.md`. Do not change the text of +these headings. If you change it, the links from those repositories cannot find them: - `#secrets` - `#storage` diff --git a/README.md b/README.md index 564084e..5c937ca 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ that, you can read each section without the other sections. ```mermaid flowchart LR subgraph up["Upstreams"] - u1["CTAN, GNU and Savannah, over rsync"] + u1["Trees over rsync, for example CTAN and GNU"] u2["GitHub, over the API and git"] u3["Dropbox, over the API"] end @@ -60,10 +60,10 @@ flowchart LR Each mirror has the structure of this diagram, with one upstream and one sink. There are two types of mirror: -- A public mirror (ctan, tlnet, gnu, gnu-alpha and nongnu) copies an rsync tree into a - bucket, and a domain serves the bucket. The bucket is the mirror. -- A private mirror (github and dropbox) copies an account into Proton Drive. Its bucket - contains only the data that the next run uses. +- A public mirror copies an rsync tree into a bucket, and a domain serves the bucket. The + bucket is the mirror. +- A private mirror copies an account into Proton Drive. Its bucket contains only the data + that the next run uses. The two types of mirror do a run with the same steps: @@ -924,10 +924,10 @@ A full CTAN mirror is approximately 140 GB: approximately $2.10 a month, at $0.0 GB-month. R2 has a free tier for each account, not for each bucket. The free tier is 10 GB-month of -storage, 1 million Class A operations and 10 million Class B operations each month. All seven -buckets are in one account, and ctan, gnu and nongnu use all of the free tier. Thus, each -README gives gross costs: storage only, at $0.015 for each GB-month, with no free tier -subtracted. +storage, 1 million Class A operations and 10 million Class B operations each month. All the +buckets of katoptra are in one account, and the largest mirrors use all of the free tier. +Thus, each README gives gross costs: storage only, at $0.015 for each GB-month, with no free +tier subtracted. The engines use these facts about R2: @@ -1009,8 +1009,8 @@ from GHCR. A run does not build an image, and it does not use Docker Hub. | Variant | Base | Tools | For | |---|---|---|---| -| `rsync` | ubuntu 24.04 | rsync, gpgv, xz, curl, perl (shasum), go-task, AWS CLI v2 with only s3 and sts | rsync upstreams into a bucket: ctan, tlnet, gnu, gnu-alpha, nongnu | -| `proton` | python 3.13 slim | proton-drive, age, git, go-task, boto3, requests, pytest, ruff, and `s3`, a boto3 script that gets and puts objects | Proton Drive sinks: github with the proton engine, dropbox with its Python | +| `rsync` | ubuntu 24.04 | rsync, gpgv, xz, curl, perl (shasum), go-task, AWS CLI v2 with only s3 and sts | rsync upstreams into a bucket | +| `proton` | python 3.13 slim | proton-drive, age, git, go-task, boto3, requests, pytest, ruff, and `s3`, a boto3 script that gets and puts objects | Proton Drive sinks, with the proton engine or with the Python of the mirror | The two images have these properties: @@ -1053,7 +1053,7 @@ There are two types of pin, with one policy: The two tags move. When they move, a change to a verb or a tool goes into each mirror at its next run. - Each mirror pins each `uses:` of a lib workflow to the commit of a release, and - Dependabot updates it. The repositories of the five public mirrors have an Actions + Dependabot updates it. The repositories of the public mirrors have an Actions policy: each `uses:` must have a full SHA. The other repositories pin each `uses:` with the same method. diff --git a/engines/rsync.yml b/engines/rsync.yml index 123848f..114a1bb 100644 --- a/engines/rsync.yml +++ b/engines/rsync.yml @@ -322,8 +322,7 @@ tasks: # rejects a vars input that validate-vars.sh does not accept. Ceiling: a different # caller that gives text that is not safe to `task sync --`. Upgrade path: make sure # here that the value is a number. Then do `task render-update` in lib and in each - # rsync mirror (ctan, tlnet, gnu, gnu-alpha and nongnu). The render.txt of each records this - # line. + # rsync mirror. The render.txt of each records this line. - >- awk -F'\t' -v OFS='\t' -v CAP=$(({{.BATCH_GB | default 4}} * 1000000000)) -v DIR={{.RUN}} -v TL="{{.TL}}" ' index($1, TL "/tlpkg/") == 1 || $1 !~ /\// { dec[++nd] = $0; next }