# swamplink tools landing page The roost marketing page at and the family catalog at are **not** files in this GitHub repository. They live in **swamplink-root**, a separate git repo on lynx (`/srv/git/swamplink-root.git`). Pushing that repo is deploying: a post-receive hook unpacks into `/var/www/swamplink`. xycalc already splices one file into the same tree (`tools/xycalc/calculator/index.html`) from its own `deploy-calculator.yml`. `versions.json` is a multi-tool catalog. Live shape (2026-08-21): ```json { "roost": { "version": "0.10.1", "date": "2026-08-21" }, "leghorn": { "version": "0.4.14", "date": "2026-08-15" }, "legbar": { "version": "0.3.6", "date": "2026-08-20" } } ``` This repo owns **only the roost stanza**. The source of truth that must match `roost.py` `__version__` is [`packaging/swamplink-roost.json`](../packaging/swamplink-roost.json). `packaging/check-version-consistency.sh` asserts that, and `packaging/publish-swamplink-roost.sh` rewrites just the `roost` key in a catalog file, leaving every other tool alone. `release.yml`'s `swamplink-tools` job clones swamplink-root over SSH and runs that script when the `SWAMPLINK_SSH_KEY`, `SWAMPLINK_HOST`, and `SWAMPLINK_KNOWN_HOSTS` secrets exist (same names xycalc uses). Until those secrets are registered on this repo, the live catalog will not move on a tag; bump `tools/versions.json` in swamplink-root by hand, or copy the stanza from `packaging/swamplink-roost.json`. Do not add the full catalog to this repo. A roost-only checkout cannot be the authority for leghorn or legbar versions.