Conversation
*Why* The "Retry as DB Connect setup" recovery fired only for the CLI's provable, pre-sync E_PROVISION_CONFLICT (a direct-pin disjoint). Transitive conflicts, and clashes with databricks-connect's own dependency tree, surface only during `uv sync` as a generic E_PROVISION and got no recovery affordance -- leaving the motivating "uv sync failed on conflicting versions" users stuck. *What* Widen the recovery gate so a Full-preset run (one that pinned cluster constraints) that fails provisioning with E_PROVISION -- and carries a pre-merge backupPath -- offers the same recovery as E_PROVISION_CONFLICT: restore the pre-merge pyproject.toml, then retry as DB Connect (--no-constraints). Gating on the specific E_PROVISION code (not just the provision phase) leaves E_PYTHON_INSTALL on its own "Select Python interpreter" remediation. Loop-safe: the gate requires the run to have carried the pins (!skipConstraints), so a --no-constraints retry can never re-enter recovery. Greenfield projects (no backup) fall through unchanged. *Verification* - New unit tests: same recovery buttons on a generic E_PROVISION Full failure; the retry re-runs with --no-constraints and adopts; no recovery on a pins-dropped run or when there is no backup. - yarn test:unit (1146 passing) and yarn test:lint both clean. Co-authored-by: Isaac <no-reply@databricks.com>
|
If integration tests don't run automatically, an authorized user can run them manually by following the instructions below: Trigger: Inputs:
Checks will be approved automatically on success. |
|
🤖 Integration tests ❌ failed for |
|
Closing in favor of a CLI-side fix. Review of this extension-side widening showed that gating the "Retry as DB Connect" recovery on the generic The recovery only resolves failures actually caused by the cluster pins — which is exactly what Closing this PR; the work moves CLI-side. |
What
Widen the Python-setup conflict recovery so a Full-preset run that fails
uv syncwith a genericE_PROVISION(not only the CLI's provable, pre-syncE_PROVISION_CONFLICT) offers the same recovery: restore the pre-mergepyproject.toml, then Retry as DB Connect setup (--no-constraints).Why
E_PROVISION_CONFLICTis raised at the merge phase for a direct-pin disjoint (a version pinned in both the user'spyproject.tomland the cluster constraints). Conflicts that onlyuv's resolver finds — transitive dependencies, or clashes withdatabricks-connect's own dependency tree — instead fail during the sync as a genericE_PROVISION, and today get no recovery button. The Full tier's pinned cluster deps are the prime suspect for such a failure, so offering the DB-Connect retry (which drops those pins) closes the gap for the motivating "uv sync failed on conflicting versions" users.How
E_PROVISION_CONFLICTto(E_PROVISION_CONFLICT || E_PROVISION) && !skipConstraints && backupPath.[Retry as DB Connect setup]+[Open pyproject.toml], withShow Logshidden (self-service) — identical to the provable-conflict path.!skipConstraints), so the--no-constraintsretry can never re-enter recovery.E_PROVISIONcode (not merely the provision phase) leavesE_PYTHON_INSTALLon its own "Select Python interpreter" remediation.backupPath) fall through to today's handling.Testing
E_PROVISIONFull failure; the retry re-runs with--no-constraintsand adopts the interpreter; no recovery on a pins-dropped (DB Connect) run; no recovery when there is no backup.yarn test:unit(1146 passing) andyarn test:lintboth clean.Notes
conflict_retrytrigger; the preceding failure'serrorCode(E_PROVISIONvsE_PROVISION_CONFLICT) distinguishes a provable conflict from a suspected one in the funnel.This pull request and its description were written by Isaac.