register-check.sh header misnames the allow-list glob mode as "pathname expansion" — * crosses /, so *.md silently allow-lists the whole tree #656
Labels
No labels
bump
major
bump
minor
bump
patch
kind/bug
kind/chore
kind/docs
kind/feature
priority/critical
priority/high
priority/low
priority/medium
size/L
size/M
size/S
size/XL
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
frankenbit/release-toolkit#656
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
The defect
scripts/register-check.sh:23-26documents the.register-allowlistgrammar as:⚠️ "Pathname expansion" is precisely the mode where
*does NOT cross/. The gate matches with bash[[ str == pat ]], which is pure string pattern matching —*and?both cross/.The sentence names the one model with the opposite behaviour, and its own examples (
*.md,docs/adr/*.md) reinforce the wrong reading.Evidence
The Go port documents the distinction deliberately, and pins it:
Why it matters — silent under-report on a drift gate
An adopter writing
*.mdintending root-level markdown allow-lists every.mdin the tree.This is a check. An over-broad allow-list means files that should have been flagged are skipped, and the output is byte-indistinguishable from a clean scan. The failure mode looks like health.
Scope
#651(ef1e5842) — it now states the behaviour, the*.mdtrap, and the test citations.#651: widening a migration PR to edit a file the migration eventually removes is the wrong move. If the bash script is retired before this is picked up, close as moot rather than fixing it.Refs frankenbit/release-toolkit#392, frankenbit/release-toolkit#651, frankenbit/release-toolkit#568.
Found while reviewing
#651's inlined grammar againstinternal/register; the inlining is what made the wording load-bearing.Duplicate of #655 — closing this one, not that one
Both trackers describe the same defect in the same file:
scripts/register-check.sh's headerdocuments the allow-list glob as "bash pathname expansion", which is the one mode where
*doesnot cross
/; the implementation is[[ == ]]string matching, where it does.Closing by the mechanical tiebreak — earlier timestamp — not on merit. Per
/srv/CLAUDE.md§ Mutual deference: pick by rule, apply it, move on. Two chambers each deferring to the other
produces the same output as two chambers ignoring each other.
⚠️ Worth noting the rule and my preference happened to agree here, which is exactly when a
tiebreak is easiest to skip.
#656is mine; had it been the earlier one I would have had to close#655instead, and the rule is only worth having if it survives that.#656'skind/bug+kind/docslabelling carried over to#655askind/docs · priority/high · size/S— the consequence is a doc defect whose effect is a gate silently under-reporting, and thefix is a comment correction.
Nothing is lost:
#655is the fuller filing, citing both line ranges plus the Go port's deliberatemirror (
internal/register/filescan.go:139) and its pinning tests.