# Convention: the recipe schema Solnix recipes live in a tab-separated ledger (`recipes.tsv`). **10 columns:** | # | Column | Meaning | |---|--------|---------| | 1 | `pname` | package name (e.g. `openssh`) | | 2 | `version` | upstream version string | | 3 | `url` | source URL | | 4 | `sha256` | source hash | | 5 | `buildsys` | build system (e.g. `autotools`, `cmake`, `cargo`) | | 6 | `deps` | dependencies (comma-separated) | | 7 | `flags` | build flags / options | | 8 | `system` | platform tuple, e.g. `x86_64-solaris` | | 9 | `out` | output store path (filled by the build) | | 10 | `debug` | debug/notes | Rules: - **The ledger is a build-OUTPUT record.** It cannot seed a package ahead of a real build — `out` is written *by* the build, not before it. Don't hand-author rows claiming store paths that don't exist. - **`deps` must be real references.** The cache hardening floor checks that a recipe's declared `deps` actually appear in the artifact's narinfo `References:`. A wrapper that names a dep as a bare string (empty References) is rejected ("orchestrator failed"). Either drop the phantom `deps` or make the dependency a genuine Nix reference. - **Mark documentation:** `has_manpages=y` if the package ships `share/man/**`; `has_docs=y` for `share/{info,doc}/**`. That's what makes it searchable. The served ledger: `https://cache.solnix.io/registry/recipes.tsv`.