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.