-- Release matrix, version 1. Fixed by #14.
--
-- A rule change is a NEW VERSION, never an UPDATE. Without the version history
-- a past release cannot be reconstructed when an award is protested — the one
-- thing the function form of these rules costs.
--
-- Mirrored in src/release/matrix.ts, which the evaluation surface renders its
-- dimmed cells from. The screen and the policy must not be able to disagree.

INSERT INTO release_matrix (version, class, level, released) VALUES
  -- Non-content pre-bid signal: who opened, who acknowledged, who intends to
  -- bid. This is what #12 actually promised the retailer, and it is the reason
  -- sealing response content costs them nothing they were counting on.
  (1, 'vendor_identity',      'invited',      'true'),
  (1, 'participation_signal', 'invited',      'true'),

  -- Exact quantities behind the acknowledgement gate. The coarse volume band
  -- stays in the teaser (#14 decision 4).
  (1, 'scenario_quantity',    'acknowledged', 'true'),

  -- Sealed until the deadline, then the whole field at once.
  (1, 'answer_text',          'open',         'true'),
  (1, 'exception_text',       'open',         'true'),
  (1, 'vault_document',       'open',         'true'),
  (1, 'price_quote',          'open',         'true'),
  (1, 'derived_cost',         'open',         'true'),

  -- A vendor's own scoring, released to them at award. They never see anything
  -- of the field — no count, no identities, no rank including their own.
  (1, 'own_scoring',          'awarded',      'true');

-- TWO-ENVELOPE, deferred not declined: moving price_quote and derived_cost to a
-- level reached only after scoring locks is a version bump here plus an
-- irreversible lock transition. That is the point of choosing a matrix over
-- lifecycle logic written inline in each policy.
