Skip to content

Tracking new source config wiring issues #1254

Closed
24 of 42 issues completed
Closed

Description

@smoparth

Epic: Wire new source: resolver config (backward compatible)

Branch: new-resolver-config
Proposal: New resolver and download configuration
Data model PRs: #1228 (resolver provider and requirement), #1235 (download method)

Overview

Wire the new source: config into the runtime pipeline alongside the legacy settings. Packages that declare source: use the configured resolver; packages without it keep the legacy behavior.

Non-goals: Deprecation warnings, removal of legacy code, and migration tooling.

Current status (2026-10-27)

Complete on new-resolver-config

In review

Open feature work

Contract decisions

Tracked separately

Architecture

When source: is configured, resolution selects a provider through source_resolver and source download uses that resolver's download() method. The download result carries both the artifact path and its DownloadKind. Preparation and sdist building use that information and the resolver's build strategy. For prebuilt profiles, bootstrap must skip source-build phases and use the selected resolver to download a fresh wheel; this path is under review in #1208 / PR #1393. Packages without source: continue through the legacy settings and hooks.

Branch maintenance (complete)

Phase breakdown

Phase 1: Activate the model and validate settings (complete)

Load source: on package and variant settings, expose PackageBuildInfo.source_resolver, and reject mixed new and legacy source settings, including conflicts across package and variant levels.

Phase 2: Resolution dispatch (complete)

Configured profiles select their resolver provider; packages without source: retain legacy resolution.

The hook URL contract is tracked in #1373.

Phase 3: Source download dispatch (complete)

Configured profiles use source_resolver.download(); packages without source: retain legacy source download.

The question of which selected-candidate data reaches download is tracked in #1384.

Phase 3b: Typed download result and hook compatibility (complete)

Use DownloadedSource to carry the path and kind, with documented compatibility for legacy download hooks.

The remaining hook-profile combination is tracked in #1387.

Phase 4: Git preparation and sdist building

Git checkouts are prepared as directories. The resolver's build_sdist strategy selects PEP 517 or tarball behavior where an sdist build applies.

Phase 5: Prebuilt selection and wheel download (in review)

pypi-prebuilt and hook-prebuilt must skip source-build phases. When a fresh wheel is needed, bootstrap and later build commands must use the selected resolver's download contract. Legacy prebuilt behavior must continue to work.

Phase 6: Source type reporting (open)

Phase 7: Cooldown integration (open)

Phase 8: Command integration (open)

The former Phase 9 issues are listed with their owning paths above: #1368 in Phase 1, #1256 and #1210 in Phase 4, and #1252 in Phase 7.

Hook and download contract work

Current work map

Arrows show the runtime path or the part of that path affected by remaining work. They do not declare every issue a merge dependency.

flowchart TD
    A["Done: config and validation<br/>#1291 #1207 #1368"] --> B["Done: resolution<br/>#1292 #1324"]
    B --> C["Done: source download<br/>#1293 #1331"]
    C --> D["Done: prepare and build sdist<br/>#1205 #1206 #1256"]

    C --> E["In review: prebuilt path and wheel download<br/>#1208 · PR #1393"]
    B --> F["Open: cooldown<br/>#1252"]
    C --> G["Open: source reporting and commands<br/>#1209 #1294"]
    C --> H["Open: Git submodules<br/>#1210"]
    B -.-> I["Contract work<br/>#1373 #1384 #1387"]
Loading

Follow-ups and deferred work

How to contribute

  1. Pick an open issue whose relevant path is already wired.
  2. Branch from new-resolver-config and target that branch with the PR.
  3. Keep configured-source and legacy behavior covered by focused tests.

Activity

  1. 19 remaining items

  2. mprpic commented on Nov 5, 2026

    @mprpic
    Contributor

    Closing: the source: wiring merged in #1414. The remaining follow-ups have their own issues.

    If you feel this change is still needed, feel free to reopen this issue. Thank you!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions