Crosswake.SupportMatrix (crosswake v0.1.2)

View Source

Canonical support-matrix truth shared across manifest generation, doctor, and docs.

Summary

Functions

action_classes()

@spec action_classes() :: [Crosswake.Manifest.Types.ActionClassEntry.t()]

audit_ledger_support_truth()

@spec audit_ledger_support_truth() :: [map()]

auth_contract_truth()

@spec auth_contract_truth() :: [map()]

canonical(opts \\ [])

@spec canonical(keyword()) :: Crosswake.Manifest.Types.SupportMatrix.t()

capability_families(support_matrix)

@spec capability_families(Crosswake.Manifest.Types.SupportMatrix.t()) :: [
  Crosswake.Manifest.Types.CapabilitySupportEntry.t()
]

change_classes(support_matrix)

@spec change_classes(Crosswake.Manifest.Types.SupportMatrix.t()) :: [
  Crosswake.Manifest.Types.ChangeClassEntry.t()
]

commerce_corridor_denial_codes()

@spec commerce_corridor_denial_codes() :: [String.t()]

commerce_corridor_prerequisite_taxonomy()

@spec commerce_corridor_prerequisite_taxonomy() :: [atom()]

Returns the canonical taxonomy of prerequisite classes that may be referenced by commerce corridor entries. Every prerequisite_classes value on a commerce corridor entry must be drawn from this set so doctor/support/guides taxonomy stays parity-locked.

commerce_corridor_proof_classes()

@spec commerce_corridor_proof_classes() :: %{
  required(String.t()) => %{
    proof_class: :merge_blocking | :advisory,
    advisory_provider_proof: boolean()
  }
}

Returns the canonical commerce corridor proof-class mapping.

Every commerce corridor declares whether its hermetic Phoenix-owned contract proof is :merge_blocking (core route/manifest/denial truth that must pass before merge) and whether it also carries an advisory_provider_proof flag for storefront/simulator evidence (StoreKit, Play Billing) that stays advisory in v3.2.

commerce_corridors()

@spec commerce_corridors() :: [map()]

companion_support_truth()

@spec companion_support_truth() :: [map()]

diagnostic_export_support_truth()

@spec diagnostic_export_support_truth() :: [map()]

diagnostic_severities()

@spec diagnostic_severities() :: [atom()]

fetch_status(support_matrix, category, version)

@spec fetch_status(Crosswake.Manifest.Types.SupportMatrix.t(), atom(), String.t()) ::
  {:ok, Crosswake.Manifest.Types.SupportEntry.status()} | :error

gating_truth()

@spec gating_truth() :: [map()]

Returns a runtime snapshot of gate state for every registered companion.

Reads Application.get_env(:crosswake, :companions, []) at call time (NOT compile_env) so test fixtures can register companions via Application.put_env/3 and production callers see live runtime-registered companions.

Each entry is a map with:

  • :companion_id — the atom id from companion.companion_id()
  • :gate_state — one of "gated", "rolling_out (N%)", "killed", or nil (nil means the companion's gate is inactive or unconfigured)

Kill-switch status overrides gate_status — if the kill switch is active, the entry shows "killed" regardless of gate_status.

The :gate_state values are D-08 locked display strings. "rolling_out (N%)" is never equivalent to "supported" — the gating_truth_label/0 column heading reinforces this distinction.

gating_truth_label()

@spec gating_truth_label() :: String.t()

Runtime gate-state label.

Returns the column label for the gating-truth section of the support matrix, deliberately runtime-distinct from build-proof posture. This label must never be misread as "supported" — a route in "rolling_out (10%)" state is gated, not supported, and the column label makes that explicit.

D-08: "Runtime Gate State — not build-proof posture."

media_recovery_proof_truth()

@spec media_recovery_proof_truth() :: [map()]

notification_support_truth()

@spec notification_support_truth() :: [map()]

package_surfaces(support_matrix)

@spec package_surfaces(Crosswake.Manifest.Types.SupportMatrix.t()) :: [
  Crosswake.Manifest.Types.PackageSurfaceEntry.t()
]

promotion_rules()

@spec promotion_rules() :: [Crosswake.Manifest.Types.PromotionRuleEntry.t()]

proof_classes()

@spec proof_classes() :: [atom()]

rebuild_matrix(support_matrix)

@spec rebuild_matrix(Crosswake.Manifest.Types.SupportMatrix.t()) :: [
  Crosswake.Manifest.Types.RuntimeLineRow.t()
]

release_boundaries(support_matrix)

@spec release_boundaries(Crosswake.Manifest.Types.SupportMatrix.t()) :: [
  Crosswake.Manifest.Types.ReleaseBoundaryEntry.t()
]

statuses()

@spec statuses() :: [atom()]

validate(support_matrix)

@spec validate(Crosswake.Manifest.Types.SupportMatrix.t()) :: [map()]