Task: Catch untangled shell scripts before review

Table of Contents

This page documents a task in the Split the trade into an anchor and its components story. It captures the goal, current status, acceptance, and any notes or results.

1. Goal

A recipe whose tangled scripts are missing or stale fails both the local check set and CI.

2. Status

Field Value
State DONE
Parent story Split the trade into an anchor and its components
Now Nothing.
Waiting on Nothing.
Next Nothing.
Last touched 2026-10-04

3. Acceptance

  • shell-script-drift.yml fails on an untracked script under projects/ores.shell/scripts/library.
  • compass-pr-raise lists the tangle among the local checks.

4. Plan

(Implementation strategy. Written when work starts; key decisions are distilled into the parent story's * Decisions at close, but the plan itself stays — it is the historical record of what we did.)

5. Measurements

Every number this task claims about a tree, with the command that produced it and the commit it was measured at. A number without both is not a measurement, because a clean-up record describes a tree and trunk moves under a branch: a consumer count, a gate's component count and a suite's size all change with no code changing, and the reader of a bare number cannot tell which tree it came from. Where the raw output matters, put it in an evidence/ file beside the task and name that file in the Command column.

What Value Command Commit
       

6. Notes

7. Test Scenarios

Manual QA scenarios (scaffolded via compass add test_scenario) that verify this task. Link new ones here as they're created; the scenario doc itself links back via its "Verifies task" field.

Scenario State Notes
     

8. PRs

PR Title
#2605 [ci] Catch untangled shell scripts before review

9. Review

# Comment summary File Decision Notes
1 Found in PR 2603: three earlier pull requests added recipes whose tangled scripts were never committed, and CI passed them. shell-script-drift.yml Accept git diff ignores untracked files; the check now lists them too.
2 PR 2605 review: the job comment still says only "a diff". shell-script-drift.yml Accept It names untracked scripts too.
3 PR 2605 review: a stale script stops the step before the untracked list prints. shell-script-drift.yml Decline CI fails either way, and the local check shows both.
4 PR 2605 review: the workflow does not run on a modeling-only change. shell-script-drift.yml Decline A regenerated recipe changes doc/recipes/shell, which the filter covers; codegen drift catches an unregenerated model.

10. Result

The shell script drift check now fails on a script a recipe produces that nobody committed, as well as on a stale one: proved locally by an untracked probe script, which fails the check, and a clean tree, which passes. The compass-pr-raise skill lists the tangle among the local checks, so the gap shows before review.

Emacs 29.3 (Org mode 9.6.15)