Skip to content

Commit b39c3c7

Browse files
bbestclaude
andcommitted
chore: bump to 3.11.0 for the directory-output guard
The guard changes build_targets_list() behavior — it can now fail the build — so it needs a version and a NEWS entry rather than riding along unversioned. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NYLFocBGCeJGjeRzAR8szX
1 parent 39be72d commit b39c3c7

2 files changed

Lines changed: 29 additions & 1 deletion

File tree

DESCRIPTION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Package: calcofi4db
22
Title: CalCOFI Database Tools
3-
Version: 3.10.0
3+
Version: 3.11.0
44
URL: https://calcofi.io/calcofi4db
55
BugReports: https://github.com/calcofi/calcofi4db/issues
66
Authors@R:

NEWS.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,31 @@
1+
# calcofi4db 3.11.0
2+
3+
## `build_targets_list()` refuses a directory `output:`
4+
5+
Every pipeline target is `format = "file"`, so `targets` hashes whatever path the
6+
command returns. If that path is a **directory**, anything later written
7+
underneath it — by a downstream target, or by hand — moves the hash and leaves
8+
the owning target reported outdated forever.
9+
10+
`release_database` shipped in that state: it declared `data/releases`, and
11+
`test_release` writes `data/releases/{version}/test_results.json`. On
12+
v2026.08.08 the release's own files landed 16:46-17:06 and `test_results.json` at
13+
17:08:47, so the target went stale the moment the pipeline finished, and every
14+
subsequent `tar_make()` on it or anything downstream re-ran a ~40 minute freeze
15+
and a multi-GB re-upload of an already-promoted release.
16+
17+
`check_nested_outputs()` now fails the build on any directory `output:`, and on
18+
one declared output nested inside another. Worth knowing why it checks what it
19+
checks: `test_release` declares `_output/test_release.html` and writes into
20+
`data/releases` as a **side effect**, so no comparison of the `output:` fields
21+
could ever have related the two — a first cut that only compared declared paths
22+
passed the real broken configuration. What *is* statically visible is that a
23+
target claimed a directory at all, and that is what is enforced.
24+
25+
The fix for such a target is a single small file it alone writes — for the
26+
release, `data/releases/_release_stamp.json` carrying the version and a digest of
27+
the frozen catalog, deterministic so a no-op re-run does not cascade.
28+
129
# calcofi4db 3.10.0
230

331
## `declare_measurement_bounds()` — put a bound on a type that already exists

0 commit comments

Comments
 (0)