{"format":"vercy-enterprise-allocation-fixtures/v1","candidateName":"Offering Catalogue","executionState":"specified-not-executed","cases":[
{"id":"rate-only-change","kind":"positive","input":"Only a rate changes for an unchanged commercial shape.","expect":"Offering remains; one immutable plan version is added."},
{"id":"mixed-rate-eligibility","kind":"positive","input":"Rate changes while eligibility narrows.","expect":"Successor Offering is created and predecessor plan remains unchanged."},
{"id":"entitlement-increase","kind":"positive","input":"An Offering adds quota for future buyers.","expect":"Successor Offering is created; live predecessor agreements are unchanged."},
{"id":"commercial-shape-change","kind":"positive","input":"Currency, billing period or term length changes.","expect":"Successor Offering is created because commercial shape changed."},
{"id":"future-dated-rate","kind":"positive","input":"A future rate is published with effectiveFrom.","expect":"Historical quote resolution returns the plan version effective at quote time."},
{"id":"unclassified-change","kind":"negative","input":"A change matches no declared class.","expect":"Safe default creates a successor Offering and logs the case."},
{"id":"plan-path-roundtrip","kind":"positive","input":"A quote and agreement pin Offering, planName and planVersionOrdinal.","expect":"Exactly one immutable plan version resolves; no Offering version exists."},
{"id":"quote-overlay-subscription","kind":"positive","input":"An accepted quote discounts an agreement.","expect":"Agreement still pins Offering plus plan path; entitlement derives only from Offering."},
{"id":"quote-adds-entitlement","kind":"negative","input":"A quote attempts to add entitlement absent from Offering.","expect":"The quote is rejected and a successor Offering is required."},
{"id":"withdrawal-live-agreement","kind":"positive","input":"An Offering is withdrawn while agreements remain active.","expect":"Orderability ends, but agreements, entitlement and plan pins survive without catalogue-driven migration."},
{"id":"zero-rate-offering","kind":"positive","input":"A free internal Offering is orderable.","expect":"It carries an explicit zero-rate plan; missing plan means not orderable."},
{"id":"bundle-recursion","kind":"negative","input":"A bundle Offering nests another Offering and independently bills member plans.","expect":"Nested recursion and member billing are rejected."},
{"id":"roadmap-cancellation","kind":"negative","input":"A roadmap item is cancelled after a quote or agreement exists.","expect":"Quote and agreement remain unchanged; no catalogue or contract mutation follows."}
]}
