Skip to content

core: fold the rest of extension resolution (TOML read, bare-name gating, spec build) into Rust #1111

Closed

Description

@thekevinbot

Part of #1072. Follow-up to #1078, which landed only the argv config-path scan (dirsql::launcher::config_paths_from_argv, PR #1106).

What is left

The rest of the cluster #1078 measured is still a Python/TypeScript port of one another:

Python TypeScript
launcher --extension flag build cli/resolve_config_extensions.py cli/resolve-config-extensions.ts
TOML load + [[dirsql.extension]] read resolve_config_extensions.py load-extension-entries.ts
multi-config spec resolution resolve_configs_extension_specs.py + resolve_entries.py resolve-config-extensions.ts
bare-name classification + path resolve resolve_extension.py resolve-extension.ts
package-dir lookup + loadable glob (inside the above) resolve-package.ts + package-dir.ts

Only importlib.util.find_spec / require.resolve are host-specific. Everything else is language-neutral and the core already carries clap and toml.

Shape (from #1078)

The core exposes a resolution plan over argv plus config contents; each launcher answers "where is package X installed on this host" and hands the answer back; the core builds the path::entrypoint specs and the --extension flags.

Why it was split off

Constraints

Same as #1072: public API surface unchanged, no existing test rewritten or weakened, PARITY.md updated if any SDK-visible surface moves.

Activity

  1. thekevinscott commented on Sep 17, 2026

    @thekevinscott
    Owner

    Proposed M-or-smaller slice plan:

    • Slice A: add the Rust core language-neutral extension-resolution plan/types and exhaustive core tests; no SDK behavior switch yet.
    • Slice B: migrate the Python binding/SDK constructor and CLI launcher to consume the core plan, retaining Python-only package lookup.
    • Slice C: migrate the TypeScript binding/SDK constructor and CLI launcher, retaining Node-only package lookup and lazy TOML loading.
    • Slice D: remove obsolete duplicated resolvers, update parity/docs/tests, and complete cross-SDK/e2e cleanup.

    I will implement only Slice A in the first PR, with its own sub-issue and Fixes #<slice-issue> link. The later slices will be stacked or based on the landed core contract as appropriate.

  2. thekevinbot commented on Sep 18, 2026

    @thekevinbot
    CollaboratorAuthor

    All four slices are merged: #1119 (core plan contract), #1120 (Python), #1121 (TypeScript), #1122 (programmatic path + parity cleanup). Extension resolution now plans once in dirsql::extension_resolution; each host keeps only its package lookup.

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

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions