fix(specverb): let a matches constraint carry alternative globs #325
No reviewers
Labels
No labels
burndown-2026-06
burndown-2026-08
sunday-sprint
autonomy
async-consult
autonomy
epic
autonomy
headless
autonomy
live-collab
coherence-core
priority
P0
priority
P1
priority
P2
priority
P3
priority
P4
qa-fixture
role/advocate
role/director
role/exec
role/frontend
role/gamedev
role/human
role/platform
role/qa
role/science
role/sysadmin
state
ambient
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
coilyco-flight-deck/umbra!325
Loading…
Reference in a new issue
No description provided.
Delete branch "aos/1105-matches-variadic"
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?
Closes #324. Follow-up to #322, landed before it has any consumer, so this is a shape fix rather than a break.
The hole
#322 shipped
matcheswith exactly one glob and made a second argument a parse error. Two problems.It does not match its siblings. Every other glob guard in the DSL is variadic:
restrict <param> matches <glob...>, and execverb'swhen/deny-when <sel> matches <glob...>.It forced a wildcard where the vocabulary is fixed, and the wildcard leaks. Constraints stack with AND, so "one of these four" was not expressible. Measured against the real endpoint that consumes this, a name outside the vocabulary is dropped silently with a 200:
So under
priority/*a typo likepriority/p2orpriority/P9passed the guard, the write proceeded, and nothing was applied. The control would report success over exactly the hazard it exists to prevent - the silent-success shape #316 removed for numeric ids and agentic-os#1047 is about, reappearing one layer up.The change
Globs within one constraint are alternatives. Alternation within a constraint, AND across constraints, so a refusal still names one axis:
Verification
make test(34 packages, no failures),make vet,make lint(0 issues),make tidy,godoc-current.txtregenerated.code-commentsreports 18 violations onmainunchanged; this branch adds none.The parser test pins alternation round-tripping, and an empty glob anywhere in the list still fails closed. A new test proves
priority/P9,priority/p2andpriority/NOPEare each refused, with the transport rigged to fail the test if anything reaches the wire.The second commit removes a
specgenbinary staged by mistake in the first; the squash lands only the source change.