From 17b99183ca3b1565f014fb571778d55560ae4ccb Mon Sep 17 00:00:00 2001 From: codex-bot-andresmgsl Date: Tue, 25 Aug 2026 07:31:39 +0000 Subject: [PATCH 1/3] test: guard release path doctrine --- test/release-path.test.sh | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/test/release-path.test.sh b/test/release-path.test.sh index fad884d..46181c8 100755 --- a/test/release-path.test.sh +++ b/test/release-path.test.sh @@ -97,6 +97,17 @@ path_check() { [ -z "$missing" ] && [ -z "$extra" ] } +readme_has_no_path_enumeration() { + local token found=no + for token in bin/ lib/version.sh lib/decide.sh lib/facts.sh lib/changelog.sh; do + if grep -qF "$token" "$ROOT/drills/README.md"; then + printf 'drill doctrine enumerates release path: %s\n' "$token" >&2 + found=yes + fi + done + [ "$found" = no ] +} + fixture() { local name="$1" tree tree="$TMP/$name" @@ -125,6 +136,8 @@ check "manifest prints the specified ordered release path" 0 \ bash "$PATH_SCRIPT" check "real workflow and transitive dependencies match the manifest" 0 "" \ path_check "$ROOT" +check "drill doctrine does not duplicate the executable release path" 0 "" \ + readme_has_no_path_enumeration # A door growing a dependency must name the missing path (#237 D7). tree="$(fixture missing)" From a0ffc4bbd8ede1b44f96aeb59c78252fd316caa2 Mon Sep 17 00:00:00 2001 From: codex-bot-andresmgsl Date: Tue, 25 Aug 2026 07:32:30 +0000 Subject: [PATCH 2/3] docs: make release path manifest authoritative --- changelog.d/251.md | 3 +++ drills/README.md | 8 ++++---- 2 files changed, 7 insertions(+), 4 deletions(-) create mode 100644 changelog.d/251.md diff --git a/changelog.d/251.md b/changelog.d/251.md new file mode 100644 index 0000000..eef754f --- /dev/null +++ b/changelog.d/251.md @@ -0,0 +1,3 @@ +### Fixed + +- Kept drill doctrine's release-path instructions aligned with the executable manifest by removing its duplicate path list (#251). diff --git a/drills/README.md b/drills/README.md index b75847f..bd71948 100644 --- a/drills/README.md +++ b/drills/README.md @@ -84,10 +84,10 @@ drill owed, that verdict wins. except the `CEREMONY_SELF_REF` pin line in `.github/workflows/release.yml`. 2. The release path is exactly the output of - `.github/scripts/release-path.sh`: `.github/workflows/release.yml`, `bin/`, - `lib/version.sh`, `lib/decide.sh`, `lib/facts.sh`, and - `lib/changelog.sh`. The script is the record author's copy-paste source; - its contract test keeps this inline list and the workflow's direct and + `.github/scripts/release-path.sh`. Run the script and paste its output into + the record; measure the diff with + `git diff ..HEAD -- $(sh .github/scripts/release-path.sh)`. + The script's contract test keeps its list and the workflow's direct and transitive dependencies in agreement. 3. The last rehearsed tag's own record is a full rehearsal, its release is published, and `main` was re-armed to `-dev` after it. From 1cd8a6996f6e1d4699b6cdd3d7a21ee4675ac843 Mon Sep 17 00:00:00 2001 From: codex-bot-andresmgsl Date: Tue, 25 Aug 2026 07:33:25 +0000 Subject: [PATCH 3/3] test: reject forge path doctrine copies --- test/release-path.test.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/release-path.test.sh b/test/release-path.test.sh index 46181c8..2ba304a 100755 --- a/test/release-path.test.sh +++ b/test/release-path.test.sh @@ -99,7 +99,9 @@ path_check() { readme_has_no_path_enumeration() { local token found=no - for token in bin/ lib/version.sh lib/decide.sh lib/facts.sh lib/changelog.sh; do + for token in \ + bin/ lib/version.sh lib/decide.sh lib/facts.sh lib/changelog.sh lib/forge.sh + do if grep -qF "$token" "$ROOT/drills/README.md"; then printf 'drill doctrine enumerates release path: %s\n' "$token" >&2 found=yes