Fabric Spark / PM decision report

Spark Runtime lifecycle notification proposal

A decision-ready contract for runtime labels, selector behavior, persistent Workspace notifications, migration guidance, and priority when lifecycle and adoption campaigns overlap.

Prepared for PM review Decision snapshot: 2026-09-08 Source investigation: trident-de-ds-app

Executive recommendation

Use backend stage for lifecycle state and backend constraints for selection. Show one persistent Workspace MessageBar only when the effective runtime is EOSA, EOS, unavailable, or cannot be evaluated. Do not infer EOS, blocking, or a migration target from deprecationDate.

Legend

Verified current behavior

Observed behavior supplied by the trident-de-ds-app investigation. These statements describe the current product and known implementation gaps.

Implementation contract

releaseStage

Authoritative lifecycle state. The UI must not derive GA, EOSA, or EOS from a date.

deprecationDate

Display-only lifecycle context. Validate it as a calendar date, interpret the boundary in UTC, and localize it for display.

allowedRuntimeVersionOptions

Authoritative selectability. It governs which runtimes are valid for a new selection.

defaultSparkRuntimeVersion

A default, not a recommendation. It must not be presented automatically as the migration target.

A timer may refresh date wording at the UTC date boundary. Spark dates never alter stage, selectability, or execution.

Verified current behavior Current surfaces

These are evidence about the current implementation, not the proposed end state.

Final lifecycle scenario matrix

Recommended PM decision Apply these rules to the effective runtime and to selector options where stated.

Scenario Decision inputs New-selection behavior Workspace UI treatment Recommended MessageBar copy Actions/dismissal
ExperimentalPublicPreview Stage plus presence in allowedRuntimeVersionOptions. Selectable only if allowed. Dropdown label: Experimental. No lifecycle MessageBar. None. None.
PublicPreview Stage plus presence in allowedRuntimeVersionOptions. Selectable if allowed. Dropdown label: Public Preview. No lifecycle MessageBar. None. None.
GA without date releaseStage = GA; no valid date. Selectable if allowed. No lifecycle MessageBar. None. None.
GA with deprecationDate releaseStage = GA; date may be valid. Selectable if allowed. No lifecycle MessageBar. Stage is authoritative; a date alone must never imply EOSA or EOS. None. None.
EOSA with valid future date releaseStage = EOSA; valid future calendar date. Selectable only if allowed. Warning icon for the affected option/current selection. Persistent Warning MessageBar. Fabric Runtime {version} will reach end of support on {date}. Switch to a supported Fabric Runtime to reduce security and reliability risks. Change runtime and Learn more; not dismissible.
EOSA with missing/invalid date releaseStage = EOSA; absent or invalid calendar date. Selectable only if allowed. Same warning icon and persistent Warning MessageBar. Fabric Runtime {version} will reach end of support. Switch to a supported Fabric Runtime to reduce security and reliability risks. Change runtime and Learn more; not dismissible.
EOSA where announced date has passed releaseStage = EOSA; valid date is on or before the current UTC date. Do not infer EOS or block from the date alone; follow allowed options. Keep persistent Warning. Emit sanitized contract-anomaly telemetry. Wait for backend stage to advance to EOS. Fabric Runtime {version} has reached its announced end-of-support date. Switch to a supported Fabric Runtime. Change runtime and Learn more; not dismissible.
EOS releaseStage = EOS plus allowed options. Exclude or disable according to allowedRuntimeVersionOptions. Preserve display for a workspace already pinned to it. Persistent Error MessageBar for the effective runtime. Fabric Runtime {version} is no longer supported in Fabric. New sessions and jobs may fail. Switch to a supported Fabric Runtime to continue running workloads. Change runtime and Learn more; not dismissible.
releaseStage = null Runtime metadata exists but has no stage. Hidden and invalid for new execution. If a legacy workspace still resolves to it, show persistent Error. Fabric Runtime {version} isn't available. Choose a supported runtime. Change runtime; not dismissible.
Current runtime absent from sparkRuntimeVersionMap Persisted effective value cannot be resolved in the runtime map. Preserve the value; do not guess GA. Persistent Warning. We couldn't determine the support status for Fabric Runtime {version}. Refresh or choose another runtime. Refresh and Change runtime; not dismissible.
Constraints API failure or invalid schema Request failure or contract validation failure. Preserve the current setting. Do not create a GA-shaped fallback. Persistent Warning. We couldn't load runtime support information. Refresh and try again. Refresh; not dismissible.

Python PR #2285527 reuse matrix

The Python implementation offers useful UX patterns, but its date-based block-new state does not match the Spark contract.

Python lifecycle patternSpark decisionRationale
Backend-driven and version-independentReuseLifecycle policy should not be hard-coded to a particular runtime version.
Warning icon only when selected value is affectedReuseA lifecycle state on an unselected option must not create a workspace-level warning.
Keep all backend-supported alternatives selectableReuseThe backend constraints contract remains the source of truth for valid choices.
Hide blocked choices while preserving legacy metadata/valueReuse for EOSNew selection and display of an existing persisted value are different concerns.
Missing/invalid date still gets a date-free warningReuseEOSA remains actionable even when display metadata is incomplete.
Python EOSA_BLOCKNEW / date-based blockingDo not copySpark has no EOSA_BLOCKNEW; the lifecycle Wiki defines the date as UX-only.
Auto-computing "latest version" or "X and lower"Do not copy1.3acc and release channels are not safely ordered by simple semantic version rules.

Migration recommendation strategy

Recommended PM decision Keep guidance generic until the backend provides an explicit campaign target.

  1. Do not always use defaultSparkRuntimeVersion as the migration target; a default is not necessarily the campaign recommendation.
  2. With the current API, say a supported Fabric Runtime and open the full selector.
  3. If PM wants copy such as Switch to Runtime 2.0, the backend should expose recommendedSparkRuntimeVersion or lifecycle campaign metadata.
  4. Show a concrete target only when it is present in the map, allowed, GA, and different from the current runtime.
  5. Never use the frontend fallback to 1.1 for lifecycle guidance.

Display placement and priority

ConcernRecommended rule
PlacementPlace the lifecycle MessageBar above the Workspace Spark Settings Runtime section.
Effective runtimeUse the workspace runtime for standard settings; use the published Environment runtime when a custom Environment is selected.
Single-bar priorityAt most one lifecycle/campaign bar: EOS/unavailable > EOSA > lifecycle-data error > adoption campaign.
Runtime 2.0 campaignSuppress the Runtime 2.0 adoption campaign while EOS or EOSA is active.
Preview statesPreview is a selector label, not a lifecycle MessageBar.
DismissalLifecycle bars are persistent. An adoption campaign can be dismissible.

Current sample outcome

This table applies the recommended policy to the supplied sample runtime metadata. It does not introduce additional implementation facts.

RuntimeSupplied stateWorkspace outcome
1.0 / 1.1 / 1.2EOSPersistent Error only when the runtime is currently effective/selected; do not show lifecycle bars merely because EOS options exist.
1.3GA and current defaultNo lifecycle bar even with deprecationDate. A separate Runtime 2.0 adoption Info banner may appear.
1.3accGANo lifecycle bar. The existing adoption campaign may match base version 1.3.
2.0GANo lifecycle bar.

PM decision table

DecisionRecommendation
Should EOSA/EOS be dismissible?No. Lifecycle risk remains until the effective runtime changes or backend state changes.
Should GA plus a date warn?No. releaseStage is authoritative.
Do we need an intermediate block-new state?Add explicit backend EOSA_BLOCKNEW or isSelectable; never infer it from a date.
Should we show a concrete migration target?Use generic guidance now; use a backend-provided target if PM requires one.
Should the Runtime 2.0 campaign appear alongside a lifecycle bar?No. Show at most one bar using the defined priority.
What severity should each state use?EOS: Error; EOSA: Warning; data retrieval/status anomaly: Warning; campaign: Info.

References

Evidence boundary: Current implementation facts on this page are limited to the verified behaviors supplied by the investigation. All other lifecycle handling is explicitly presented as a recommendation for PM decision.