scenario: hotel reservations ships ready (transactional-review)#20
Merged
Conversation
The scenario that validates the selection vocabulary — atomic with the intent that governs it, per the established no-intent-without-scenario discipline. The shelf completes: six ready, zero planned. Intent transactional-review + five floor rules: options in a collection with an explicit action (component-choice); at least two alternatives per list (required-composition min:2 — the reason `list` exists); every option states attributes (selectable-card ⊃ metadata-list); metadata carries items; every option is named. Exact counts, upper bounds, and exactly-one-primary are inexpressible in current rule types and remain prose guidance, stated in the rules' own rationales. The worked example is deliberately NOT a hotel — ex.plan-comparison, pricing plans — so the vocabulary's domain neutrality is exercised before hotel copy exists. Fixtures (Spark, ollama:gpt-oss:latest, published dspack-gen 0.1.2): - fixture-015 clean: FIRST live pass on the deepest composite yet (card → list → selectable-cards → metadata-lists): three named, badged hotels, 3-item metadata each, one "Book now" action. - fixture-016 argues-back: asked for a single no-options recommendation, the model ships a bare apology text node; rule.review-presents-options catches a surface with nothing to choose (three findings) and the repair ships two named hotels compared on their attributes. First --require-repair attempt, unforced. Break-it: review-without-options (recordedCatch → argues-back). studio-shell's planned-reveal test becomes "six ready, no planned placeholders" (the planned-entry machinery keeps its code path); permalinks' not-ready test uses an invented id now that none remains. Fail-first: pre-contract recording failed with "intent 'transactional-review' is not registered"; all four hotel-reservations.spec.ts tests failed on the pre-scenario build. Gates: pnpm -r typecheck/test green; contracts build+drift clean; local Playwright 106 passed / 4 skipped; production config vs local deploy artifact 86 passed; one live agent run produced a clean three-option comparison, audit passed. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
This PR completes the “transactional-review” platform slice by registering the new intent and governance rules in the Astryx contract, and landing the validating “hotel-reservations” scenario (with replay fixtures and E2E coverage) so the shelf reaches six ready scenarios and zero planned placeholders.
Changes:
- Adds the
transactional-reviewintent plus five governance rules and a worked example (ex.plan-comparison) to the Astryx contract. - Promotes
hotel-reservationsto ready, adds two live replay fixtures (clean + governed repair), and wires a matching Break-it condition. - Updates Playwright/E2E and docs to reflect “six ready, zero planned,” including a new
hotel-reservationsspec and updated permalink handling.
Reviewed changes
Copilot reviewed 12 out of 12 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| playwright.production.config.ts | Includes the new hotel-reservations E2E spec in the production Playwright suite. |
| packages/scenarios/src/registry.ts | Marks hotel-reservations as ready and attaches seed/break prompts plus fixtures 015/016. |
| packages/scenarios/src/break-conditions.ts | Adds a governed-repair Break-it condition for transactional-review with recorded catch linkage. |
| packages/replay/fixtures/fixture-015.json | Adds the “clean first pass” live recording for hotel-reservations. |
| packages/replay/fixtures/fixture-016.json | Adds the “argues back” governed-repair live recording for hotel-reservations. |
| packages/contracts/astryx.dspack.json | Registers the new intent, governance rules, and the domain-neutral plan comparison example. |
| e2e/studio-shell.spec.ts | Updates shelf assertions to “six ready scenarios, no planned placeholders” and verifies selection works. |
| e2e/permalinks.spec.ts | Switches the “not-yet-ready” link test to an invented id now that no planned scenarios remain. |
| e2e/hotel-reservations.spec.ts | Adds replay-first E2E coverage for the new scenario (clean, repair, and permalink resolution). |
| docs/NAV-REFACTOR.md | Updates scenario inventory and audit table notes to reflect hotel-reservations as ready. |
| docs/IMPLEMENTATION_LOG.md | Logs the completion of the vocabulary + intent + scenario shelf. |
| docs/AUDIT.md | Updates the Scenarios milestone status from partial to complete (6 ready / 0 planned). |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
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.
What
PR B of the approved platform design — stacked on #19 (retarget to main when it merges). The
transactional-reviewintent and the scenario that validates it land atomically; the shelf completes at six ready, zero planned.Governance (floors only, ceilings stated honestly)
Five rules: options-in-a-collection with an explicit action; ≥2 alternatives per list (
required-composition min:2— the platform reasonlistexists); every option states attributes (selectable-card ⊃ metadata-list); metadata carries items; every option is named. Exact counts, upper bounds, and exactly-one-primary-per-option are inexpressible in current rule types and remain prose guidance, stated inside the rules' own rationales. The worked example is deliberately not a hotel (ex.plan-comparison, pricing plans) — the domain-neutrality test built into the contract itself.Fixtures (Spark Ollama, published dspack-gen 0.1.2)
fixture-015"clean first pass": the first live attempt on the deepest composite yet (card → list → selectable-cards → metadata-lists) passed clean — three named, badged hotels with populated 3-item attribute lists and one "Book now" action. The 0.1.2 required-props grammar mechanism carried straight over.fixture-016"the interface argues back": asked for a single no-options recommendation, the model shipped a bare apology text node ("I'm sorry, but I can't comply with that request.");rule.review-presents-optionscaught a surface with nothing to choose (three findings — list, selectable-card, button all absent), and the repair shipped two named hotels compared on their attributes. First--require-repairattempt, unforced.Spec housekeeping (the milestone's end state)
studio-shell.spec.ts: planned-reveal test becomes "six ready scenarios, no planned placeholders" (the planned-entry machinery keeps its code path for the next expansion).permalinks.spec.ts: the not-yet-ready-link test uses an invented id, since no planned scenario remains.Fail-first evidence
Gates
pnpm -r typecheck/testgreen · contractsbuild:catalogs+drift-checkclean · local Playwright 106 passed / 4 skipped · production config vs the local deploy artifact 86 passed · one live agent run: clean three-option comparison, audit passed.🤖 Generated with Claude Code