Skip to content

The per-package floor legs reinstall from the registry, so they deadlock on a Version PR the same way check D did #27

Description

@usetheodev

Impact

The per-package floor legs added in 0.8.0 hit the same structural deadlock that #17 fixed for check D: on a Version Packages PR, they try to fetch a workspace version that the PR itself is what publishes.

usetheokit/theokit#533 — the Version PR for theokit@0.57.1:

Pin only this floor      success
Reinstall at that floor  FAILURE
Build, filtered …        skipped
Suite, for the packages … skipped
pinned @theokit/http 0.4.0 under `pnpm.overrides` for pnpm
…
ERR_PNPM_NO_MATCHING_VERSION  No matching version found for theokit@0.57.1
The latest release of theokit is "0.57.0".

Two jobs red — @theokit/http@0.4.0, the floor only some packages claim and the — result roll-up.

Why the #17 fix does not cover it

#17 taught check D to pack unpublished siblings from the workspace and substitute them, transitively, with a printed note per substitution. That fix lives in the tarball path.

The floor legs take a different path: Pin only this floor writes pnpm.overrides, then Reinstall at that floor runs a plain pnpm install --no-frozen-lockfile against the registry. The override forces a re-resolution, and the re-resolution asks npm for a workspace version that does not exist there yet.

Same cause, same shape, different step.

Suggested fix

The same three options I listed on #17, in the same order — but option (3) is more attractive here than it was there, because the leg's purpose is a floor claim about a sibling range, and an unpublished sibling is not the thing under test:

  1. Substitute unpublished workspace siblings from local tarballs, as check D now does.
  2. pnpm.overrides mapping each unpublished sibling to its packed tarball, alongside the floor pin.
  3. Skip the leg for a floor whose reinstall would demand an unpublished sibling, reporting NOT CHECKED (unpublished sibling in tree) rather than passing — consistent with the untestedFloors precedent, and with what the What this run actually checked step already exists to say.

What must not happen is the leg going green on this: the case it exists to catch is a range whose floor genuinely does not work, and that is indistinguishable from a resolution failure if the reason is not named.

Not blocking, and why I am saying so explicitly

Neither leg is a required context on usetheokit/theokit's main — only dep-check / dependency gate is, and that passes. So #533 proceeds. I am reporting this rather than routing around it because the next repo to cut a release with two interdependent packages will see the same two red jobs and have no way to tell them from a real range defect.

Related

  • #17 — the same deadlock in check D, fixed in 0.6.0
  • #6 / #16 — the per-package legs these are

Found cutting theokit@0.57.1. No secrets in this report.

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