The shell script library is untangled

Table of Contents

This page is a capture in the inbox bucket of the product backlog — a pre-sprint idea, not yet pulled into a sprint as a story.

1. What

The shell recipe library is generated, not written: every recipe under doc/recipes/shell/ with an ores-shell block tangles into a runnable .ores under projects/ores.shell/scripts/library/, and projects/ores.shell/application/CMakeLists.txt installs that folder as the shipped library. The tangle runs only when somebody asks for it (./compass.sh build --direct tangle_shell_scripts); it is not a dependency of the default build, and projects/ores.codegen/scripts/check_component_drift.py regenerates the recipes from the models but never tangles them. So when the codegen work of 2026-09-22 added the entity recipes for the whole model surface (apps, batches, calendars, currencies, …), their scripts were never produced or committed.

The gap is 793 scripts on top of the 223 that are committed: on 2026-09-26 the tangle emitted 1016 scripts and git saw 793 untracked files in 98 category folders. Run the tangle, commit its output, and make the state self-checking: either add tangle_shell_scripts to the default build, or extend the drift gate to tangle and diff the library so a recipe without its script fails the gate.

2. Why

The library is what compass shell -f <recipe>.ores loads and what the install rule ships. A recipe whose script is absent is a documented procedure nobody can run, and the stale compute recipes that the 2026-09-26 end-to-end run exposed are the visible half of the same problem. Because no gate compares the library to the recipes, a recipe edit can also land with its script left behind.

3. References

  • projects/ores.lisp/src/ores-build-recipe-scripts.el — the tangle; its header states the .ores artefacts are generated and committed.
  • projects/ores.shell/application/CMakeLists.txt — installs scripts/library/ as share/ores/shell-scripts.
  • CMakeLists.txt — the tangle_shell_scripts target, not part of all.
  • doc/recipes/shell/ — 193 recipes, 189 of them with an ores-shell block.
  • doc/llm/runbooks/run_compute_end_to_end_job/runbook.org — the run that exposed the stale compute recipes.

4. See also

Emacs 29.3 (Org mode 9.6.15)