LH017 amendments
All three were made on 30 September 2026, after workflows were seen, by the writer (the driving session), the third after the evidence review. The brief's stopping condition allows this: "A case these rules do not decide is judged by the question's own test (does a job take L's version from a timed file?) and recorded as a dated amendment naming the jobs it affects, labelled as made after workflows were seen." None changes the question, frame, classes, pair rule, measures, conventions or seed. Each can be switched off in the scripts (LH017_NO_A1=1, LH017_NO_A2=1, LH017_NO_A3=1), and the counts below compare the script's classes with and without it, from runs of the whole read with the switch set, compared by scripts/amendment_counts.py (output in data/amendment_counts.txt).
-
What a shell resolves from literal text. Made between 07:18 and 07:32 UTC, after the first reads showed scripts that move to their own directory before installing. The brief substitutes
${{ }}expressions and literalenv:values and leaves any other value unknown. Three further readings are literal: a variable assigned a literal value earlier in the same run script or called script (ROOT=..., then$ROOT); the script-directory idioms,$(dirname "$0"),$(cd "$(dirname "$0")/.." && pwd)and theBASH_SOURCEforms, read as the called script's own directory (or its parent), and$(git rev-parse --show-toplevel)as the checkout's root; and a command substitution that lists files by a literal pattern,$(ls dist/*.whl)or`(cd dist && ls *whl)`, read as that pattern. 51 jobs in 18 pairs in 7 repositories change the script's class: 32 from class 6 to "to judge" (chaoss/grimoirelab's wheels, then judged class 6 by reading B4), 7 from 6 to 3, 5 from 6 to 1, 3 from 5 to 1, 2 from 6 to 5, 1 from 5 to 6 and 1 from 5 to 2. One pair's class changes: P009 (abe404/root_painter), from undetermined to reads the pin. -
Poetry's
--lockflag. Made at 07:33 UTC, after reading Poetry's command documentation again (https://python-poetry.org/docs/cli/, read 07:32:46 UTC, logged in data/read_log.csv as a documentation read; LH015 read the same page as its D9). Onpoetry addandpoetry update,--lockmeans "Do not perform install (only update the lockfile)". Such a step installs nothing; a laterpoetry installorsyncin the same job reads a lock the step re-resolved, class 2 (upgrade). 112 jobs in 8 pairs, all in chaoss/grimoirelab's release workflows, change from "to judge" to class 5; no pair's class changes. -
uv's
--packageflag, and workspaces without a lockfile. Made at about 08:23 UTC, after the evidence review (notes/R-0026.md) found that the script had classeduv sync --package ai-parrot-toolsin phenobarbital/ai-parrot from the workspace root's manifest. The brief's rules name uv's lock-reading commands and take the manifest at the project's directory, but name neither--packagenor a workspace with no lockfile. uv's documentation of workspaces (https://docs.astral.sh/uv/concepts/projects/workspaces/, read at 08:45:44 UTC, after the amendment was made, to check it, and logged in data/read_log.csv) says that a workspace "shares a single lockfile, ensuring that the workspace operates with a consistent set of dependencies", thatuv runanduv sync"operate on the workspace root by default, though both accept a --package argument", and that the members are the directories themembersglobs include and theexcludeglobs do not. By the question's own test, then: where nouv.lockexists,uv syncoruv runwith--package <member>reads the named member's manifest and the manifests of the members it takes from the workspace ({ workspace = true }in its[tool.uv.sources], one level), anduv syncoruv runat a workspace's root resolves every member's manifest together; where one of those manifests is a timed file, the job takes L's version from it, class 1, without the "may re-lock" flag, since no lockfile exists to rewrite. 11 jobs in one pair change the script's class, from 2 to 1, and that pair, P327 (phenobarbital/ai-parrot), from does not read the pin to reads the pin.
Corrections to the script that implement rules the brief states, made in the same period and listed in the record's Method rather than here: a cd to ~ or to a literal absolute path, and the runner's temporary and home directories, are outside the workspace; a path a step runs that is not a repository file at the snapshot is not a repository script, a non-shell program is not read, and a sourced environment file sets variables only; tox's factor-conditional changedir; wheels from an artefact that a needed job builds; a checkout whose ref: names the default branch; Makefile pattern rules; a make target given by an expression; YAML mapping keys that are booleans; and the triggers of the workflows that call a reusable one.
Corrections made after the evidence review (notes/R-0026.md), between about 08:23 and 08:44 UTC, for faults it found or that follow from them, each implementing a rule the brief states and none changing a rule: xargs is looked past, as sudo and env are, so the installer it runs is read (the review counted 34 job rows, in asozialesnetzwerk/an-website at six snapshots and one homeassistant-ai/ha-mcp job; no pair's class changes); an install of the project with --no-deps takes nothing from its manifest wherever it occurs, as the script already held in part, so the writer's reading A2 no longer applies to such jobs, and P076 (boneio-eu/app_bbb), whose job installs the project with --no-deps and then L by name without a version, moves from reads the pin to does not read the pin; pip install --find-links <dir> of the project's own package, where <dir> holds wheels that an external action built in the job (PyO3/maturin-action), is class 6 (external), as the brief says of a wheel whose origin the rules cannot trace, which moves P277 and P278 (nchain-innovation/chain-gang) from does not read the pin to undetermined; a constraints file (-c) that pins L never overrides a reading of the pin, since a constraint installs nothing, which changes no pair's class; bash -c '<command>' is read as the command it runs; and S1's tally of installers counts a job row once for each installer, where it had counted a row twice when a job ran uv twice. The writer's judgements as made before the blind sample was drawn are kept in data/judgements_before_check.csv; the 27 made or changed after the review, all in an-website and all for jobs whose xargs installs the correction exposed, are marked in data/judgements.csv's made column; the four build-source-tarball jobs that reading A2 had made class 1 are now decided by the script under the --no-deps correction, class 2 (lock unused), and change no pair's class.
From studies/LH017/amendments.md in the repository, last changed 30 September 2026.