Skip to content

A fetch-only call: install a line without opening it (Registry.Fetch / Ensure), in all four bindings #492

Description

@EricAndrechek

Ask (from a downstream consumer). A public call that fetches and installs a line or build into the cache WITHOUT opening it: for example Registry.Fetch(line) / registry.fetch(line), the library counterpart of chtypes fetch.

Why:

Note on #468. The reporter asked that fetch failures be included in #468's fix. They are: 1.0.3's fix unlocks the setup after ANY failed open attempt before load step 7, the fetch and signature check included (see each binding's 1.0.3 CHANGELOG). A fetch-only call would not touch the setup at all.

Shape: a new public name in all four bindings, so it lands after the public-surface parity gate (#436). Returns the installed build's identity (version, build, manifest digest) and never loads a library.

🤖 Generated with Claude Code

Activity

  1. EricAndrechek commented on Oct 9, 2026

    @EricAndrechek
    MemberAuthor

    Planned after 2.0.0, as a 2.1.0 candidate. This is additive: binding-level API or CLI, no ABI change. The v2 lock freezes the ABI fingerprint, not the binding surface, so additions like this ship as 2.x minor releases, as 1.1.0 did for 1.x. It stays off the 2.0.0 critical path.

  2. added
    v2-pre-lockMust land before the v2 ABI lock (it may reveal an ABI need)
    and removed on Oct 9, 2026
  3. EricAndrechek commented on Oct 9, 2026

    @EricAndrechek
    MemberAuthor

    Correction: this moves BEFORE the v2 lock. It is no longer a 2.1.0 candidate. The rule now: every applicable item lands before the ABI locks, even one that looks ABI-neutral, because doing it can reveal an ABI need (a fetch-only call may want a C-ABI entry or argument). It is scheduled after the registry-lock fix (#491) and the production fetch channel, which touch the same code.

  4. EricAndrechek commented on Oct 10, 2026

    @EricAndrechek
    MemberAuthor

    Done in #609 (merged into v2 at 98f0ba4). Every binding's registry now has a fetch-only call. It resolves, fetches, verifies and installs a line or build into the cache, opens nothing, and returns the fetch layer's Resolved (version, build, digests, library path):

    • Go: (*Registry).Fetch(ctx, request) (Resolved, error)
    • Python: Registry.fetch(request) -> Resolved
    • TypeScript: registry.fetch(request): Promise<Resolved>
    • Rust: Registry::fetch(&self, request) -> Result<Resolved>

    It honours the same options as an open. A concurrent fetch and open of one request share a single fetch. Every binding has a test that it installs without loading, and one for that shared fetch. docs/reference/bindings-v1.md §2 documents it. It ships in the next 2.0.0-dev release.

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

    enhancementNew feature or requestv2-pre-lockMust land before the v2 ABI lock (it may reveal an ABI need)

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions