--- // "Which files do I need": pick a setup and systems, get the file list and // the install command. Client side only: reads public/data/picker/*.json, // which convert.py derives from install/.json. The selection // follows install.py narrow(): a file is kept when one of its systems is // chosen, a file with no system when "other" is chosen. // The list follows the current data. release-advertised.json says what the // published ZIP of each setup holds, so the page can say when the two // differ. generate_site.py writes it from release_record.load_advertised(): // the release record reduced to the setups the registry marks release_pack, // the rule the setup pages and get/ pages follow. A setup the release still // holds a pack for but the registry no longer marks gets no ZIP line here. import release from '../generated/release-advertised.json'; const base = import.meta.env.BASE_URL.replace(/\/?$/, '/'); const packs = Object.fromEntries( Object.values(release.packs ?? {}).flatMap((pack) => pack.platforms.map((platform) => [platform, { files: pack.files, size: pack.extracted_size }]), ), ); ---