Repository navigation
spec(5.2): scope confirmation_mode to the states where it is answerable - #23
Merged
Merged
Conversation
Rebuilt onto current master (the branch had diverged at the root). CHANGE_LOG.md was the only conflict — master had a newer entry at the same position; both kept, newest-first. Also drops the accidentally committed .pyc and adds a .gitignore. schemas / refs / vectors / coherence all pass.
maoryeh
force-pushed
the
spec/confirmation-mode-scope
branch
from
September 21, 2026 11:59
62c08f3 to
0b11a02
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.
The conflict
Two things the spec currently says about
Booking.confirmation_modecannot both hold:A business MAY change a service's confirmation policy whenever it likes, and most do not store the policy alongside the booking. Once the booking is confirmed, such a business has no truthful value left to send. The two it can compute are both wrong:
autoFound while implementing this field: a provider derives it from the booking's own state (
pending→manual), which yieldsautofor every confirmed booking, or re-reads the service, which yields the current policy rather than the historical one. Neither is the specified value, and no amount of implementation effort fixes it — the information simply isn't retained.The change
confirmation_modebecomes REQUIRED only whilestatusispendingorrequires_action, enforced in the schema rather than prose alone:Those are exactly the states where a business necessarily knows the answer — the booking is sitting in the flow that policy selected — and the states where the answer is actionable, because the buyer needs to know whether approval is outstanding. Once confirmed, the mode is history rather than something the buyer can act on.
Relaxing alone would not be enough
Making the field merely optional would trade one wrong answer for another, so two rules come with it:
autofrom itAnd for businesses that do retain the original policy, the field SHOULD still be published on confirmed and completed bookings, where it remains useful for audit and buyer-facing history. The change removes an impossible obligation; it doesn't discard information anyone has.
New §5.2.1 "Confirmation Mode and Booking History" carries the reasoning, and §5.3.4 (Confirm Booking) gains a note that the field is MUST-present on exactly the states that endpoint acts on — so narrowing the requirement doesn't leave its precondition unreadable.
Verification
All eight conditional cases behave as specified:
No example in
specification.md,site-docs/or the playground fixtures newly fails (checked every JSON block with astatus), andtools/usp_check.py schemas,refs,vectorsall pass withcryptographyinstalled.Note
Overlaps with #22 only in
CHANGE_LOG.md— whichever merges second will need a one-line rebase there.