#!/usr/bin/env python3 """The page-set catalogue: every family of page sets, built and named by content. python3 tools/pagesets/catalog.py --write # rebuild; update data/pagesets/index.json python3 tools/pagesets/catalog.py --check # rebuild; fail if data/pagesets/index.json differs python3 tools/pagesets/catalog.py --out DIR # rebuild; write the site's copy into DIR python3 tools/pagesets/catalog.py --check --out DIR # both (the site's build does this) The packages (.obz) are never committed: they are rebuilt from their sources wherever they are needed. What is committed is the catalogue, data/pagesets/index.json, which names every package by its content (SHA-256) with its size, so the app knows each package before it downloads it, checks it when it does, and a build whose packages differ from the committed catalogue — stale sources, or a generator that is not reproducible — fails. Families -------- A family of page sets comes from a generator listed in generators.json (beside this file): `{"generators": [{"script": "build.py", "args": [], "families": ["growing-core", "fixed-paths"]}, ...]}` (a phrase-set generator registers as `{"script": "phrases/build.py", "args": [], "families": [...]}`). The contract a generator keeps: python3