spec(3.9): booking_window and its members are optional - #27
Merged
Merged
Conversation
Rebuilt onto current master. This PR was the one showing CONFLICTING; the branch had diverged at the root, so the conflict was not resolvable by merge — reapplied as one commit on top of master instead. Still needed: master's `ServicePolicies.required` still lists `booking_window`. After this it does not, and the window's own members are no longer required either. CHANGE_LOG.md was the only content conflict; both entries kept, newest-first. Also drops the accidentally committed .pyc and adds a .gitignore. schemas / refs / vectors / coherence all pass.
maoryeh
force-pushed
the
maoryeh/booking-window-optional
branch
from
September 21, 2026 12:00
e3c1ae4 to
8a0b082
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
ServicePolicies.booking_windowwas Required, andschemas/catalog.jsonrequired all three of
min_advance,max_advanceandslot_intervalinside it.A business that constrains none of them had no conformant way to say so.
The result is that the field cannot be trusted for the thing it exists for. An
implementation whose upstream states no window has to invent values to satisfy the
schema, and a consumer then cannot tell
from
slot_intervalis the sharpest case. A business that publishes no generationinterval has no honest value to send, so a required field turns into a fabricated
claim about when appointments can start — and §3.6.3 already warns consumers not
to substitute it for a snapshot's own
start_interval, which only matters if thevalue means something.
Found implementing the Wix adapter, where
slot_intervalis not derivable fromanything upstream and every service therefore published the same invented
PT30M.The change
booking_windowbecomes optional, each member becomes independently optional, andthe presence rule is stated:
This is the pattern the specification already uses elsewhere rather than a new
one. §5.2 says a business that does not hold slot capacity MAY omit
expires_at, and §5.6 puts it plainly: presence is the advertisement. A windowconstraint is the same kind of claim.
Backwards compatible for producers: everything valid before is still valid. It
relaxes an obligation rather than adding one, so a consumer that already reads
these fields must now handle their absence — which it had to handle anyway for
no_show, and which is strictly better than reading an invented value as fact.Mirrored in
schemas/catalog.jsonandsite-docs/specification/service-catalog.md.tools/usp_check.py allreports the same results as cleanmaster: schemas, refs,vectors and coherence ok, and the same 56 pre-existing
authorityfailures, whichwant a built site.
🤖 Generated with Claude Code