HelioSoftware

Spec

The contracts that two HelioSoftware tools depend on, written down once, with checksums so a copy that drifts is caught.

Contracts

ContractVersionProducerRead byFiles
Checksums1this folder everything below, and the site check that runs on every change SHA256SUMS, spec_sums.py
Drift check1this folder every repository that keeps a copy of a file from here check_spec.py
Attic convention1this folder every HelioSoftware repository: where retired files, branches and folders are recorded, and how to restore them attic.md
Em-dash guard1this folder CI in the Website, sunback and the store (vendored copies) tools/no_em_dash.py
Short links1this folder (tools/check_site.py --write-shortlinks) the site check, offline and live shortlinks.json
Agent preamble1this folder every HelioSoftware repository's agent guide (CLAUDE.md or AGENTS.md), as a hash-stamped copy that check_spec.py verifies agent-preamble.md
RHEF conventionsv1this folder every RHEF implementation, and anyone comparing two of them rhef/conventions.md
RHEF test vectorsbundle 1.0.0generated from the reference implementation the conformance tests of each implementation rhef/vectors.json, rhef/golden/
Release feed1this folder (heliosoftware/feed/append_record.py) the hub, the product pages, What's new and the release scripts of each product release-feed.md
Imagery contractv1sunback, aws_lambda/video_builder gilly.space/sun.html and the wall page, Heliogram, the Heliogram image mirror CONTRACT.md in the producer repository, with the schemas and the dated fixtures beside it
Colour tables1HelioFITS (tools/colormaps/gen_colormaps.py --json-out) anyone comparing the colour tables of two products, with tools/diff_luts.py colormaps/, tools/diff_luts.py
Rainbow recipedescription, 2026-10-05this folder sunback and the My Heliogram store, which both build the three-channel picture rainbow-recipe.md
Versioning1this folder every product's release scripts and the shared release gate: one declared version source per product, the tag and changelog convention versioning.md
Publish handshake1this folder each product's publish script: which files it may write into this site; the site owns every page publish-handshake.md
Family look1this folder gilly.space stylesheets now; the store stylesheets (sunback_webapp) once Gilly approves the colour change. tools/tokens.py --check fails on drift tokens.json, tools/tokens.py, icon-family.md
Provenance1this folder every product that exports an image, movie or sidecar: the fields, where PNG, FITS and MP4 keep them, and the credit and disclaimer text. tools/check_provenance.py reads a file back provenance.md, attribution.json, tools/check_provenance.py
Processing record1.0this folder every product that exports an image, movie or data file, beside the provenance stamp: each layer's sources by SHA-256, its steps in order, and the producer's scene for a rebuild. Heliad reads it back processing-record.md, hfrecord-1.schema.json, examples/

Using it from another repository

Keep a copy of this folder next to your checkout and point the check at it. The check reads the marker a copied file carries and says whether the copy still matches its source.

export HELIOSOFTWARE_SPEC_DIR=~/vscode/Website/heliosoftware/spec
python3 check_spec.py CLAUDE.md
python3 spec_sums.py --check

Two markers are understood. A copied block of text sits between <!-- heliosoftware-preamble v1 sha256=<hex> --> and <!-- /heliosoftware-preamble -->. A copied file starts, on line 1 or on line 2 after a shebang, with # heliosoftware-vendored: <label>:<path> sha256=<hex> (// or ; in other comment syntaxes). The hash is of the file with that one line removed. Exit codes: 0 all copies match, 1 a copy has drifted, 2 a file carries neither marker.

Rules