Skip to content

mcpx: decide how downstream flakes consume mcpx (sub-flake or the root flake) #308

Closed

Description

@dezren39

Problem

dezren39/nix vendors a copy of pkgs/mcpx because it has no cheap way to take mcpx from this repo. That copy has drifted: 29 files differ today, and each side holds fixes the other lacks (see dezren39/nix, the issue that removes the copy). This repo is the primary source for mcpx, so the vendored copy should go. First there has to be a way to consume mcpx from here.

What exists

  • The root flake already exposes packages.<system>.mcpx and apps.<system>.mcpx (lib/default.nix, make-root-apps), built with a plain callPackage ../pkgs/mcpx/package.nix { }.
  • overlays.mcpx and overlays.default also provide pkgs.mcpx (make-mcpx-overlay).
  • pkgs/id has its own flake, which is a precedent for a package that downstream users take without the rest of the repo.

What is missing

Adding this repo as a flake input pulls the whole input graph (clan, disko and the NixOS inputs) into the darwin flake's lock file. I have not measured how large that gets, only that the root flake has far more inputs than mcpx needs.

Other points a consumer hits:

Options

  1. A small pkgs/mcpx/flake.nix whose only input is nixpkgs, consumed as github:developing-today/code?dir=pkgs/mcpx.
  2. Consume the root flake and use follows to keep the lock small.
  3. Consume overlays.mcpx from the root flake.

Acceptance criteria

  • One option is chosen and the reason is written down here.
  • dezren39/nix can build mcpx from a pinned rev of this repo on aarch64-darwin with no vendored source.
  • The consumer can override bun-bin or the package pins the one it needs.
  • CI here builds the package on a darwin runner, or the issue says why it does not.

Activity

  1. dezren39 commented on Oct 19, 2026

    @dezren39
    MemberAuthor

    Decision recorded 2026-10-19, from the mcpx dedup work (dezren39/darwin-nix#468): the consumer takes a source-only flake input — mcpx-src = { url = "github:developing-today/code"; flake = false; }, pinned in the consumer's flake.lock — and calls the package.nix that already lives in this repo: pkgs.callPackage (inputs.mcpx-src + "/pkgs/mcpx/package.nix") { inherit bun-bin; }.

    Why this over the listed options: it pulls none of this repo's flake input graph into the consumer's lock (the concern option 2 raised), needs no new sub-flake here (option 1), and the derivation file is already byte-identical in both repos — its src = ./. resolves to its own directory in the pinned source. bun-bin stays overridable by the consumer, and the consumer's existing darwin overrideAttrs (code#237's skip list + SOCK_CLOEXEC patch) carries over unchanged because the source layout is identical.

    Implemented in dezren39/darwin-nix#468 (its PR pins the rev containing code#361, the one test migration the audit found). Remaining from this issue's criteria: aarch64-darwin build verification happens on Drew's Mac — the Linux sandbox can't check it; leaving this issue open for that confirmation.

  2. dezren39 commented on Oct 26, 2026

    @dezren39
    MemberAuthor

    Intake review

    🤖 Agent note · filed

    • Agent: fleet monitor
    • Session / ID: repo-fleet-monitor run 2026-10-26 17:27 CDT
    • Found via: monitor reconciliation
    • Task: Intake enrichment (§5) for this issue
    • Expectation: m — done = labels normalized, acceptance criteria confirmed present, still-live check recorded

    Partly answered downstream since filing (verified this run): dezren39/nix PR #469 deleted the vendored pkgs/mcpx copy and switched that repo to building mcpx from a pinned mcpx-src flake input pointing at this repo — in effect the root-flake/input route (the body's options 2/3 family), not a pkgs/mcpx sub-flake. The vendored-copy problem the body opens with is therefore solved on the consumer side. What remains open here: recording that choice as this repo's decision (criterion 1), the aarch64-darwin build verification of that pinned input (tracked as dezren39/darwin-nix#471), and the darwin CI question (criterion 4). Not closing — no merged PR in this repo explicitly resolves it.

    Related: dezren39/darwin-nix#468/#469 (the consumer migration), dezren39/darwin-nix#471 (darwin verification), #237 (darwin takeover tests — the check-phase blocker the body names), developing-today-forks/opencode#82 (the sibling question on the opencode flake).

    Notes / risks: acceptance criteria are present — no body edit needed.

    Suggested approach: a short decision comment here adopting the pinned-input route as the recorded answer, leaving #471 and #237 as the tracked remainders; close once that comment and the roadmap pointer (code#309) are in place.

  3. added
    kind/infrastructureInfrastructure / host-portability work
    source/humanFiled directly by a human
    priority/normalOrdinary priority (the default)
    effort/mMedium: expected under 1 day of work
    meta/enrichedIntake review done: acceptance criteria, links, and normalized labels added
    app/mcpxPackage/app: mcpx (pkgs/ or apps/ in this repo)
    work/assignedQueue worker lifecycle state
    queue/claimedQueue worker lifecycle state
    and removed on Oct 26, 2026
  4. dezren39 commented on Nov 1, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · picked up

    • Agent: queue worker (repo-worker-code), lane F
    • Session / ID: queue task 2072
    • Found via: queue claim
    • Task: Triage mcpx: decide how downstream flakes consume mcpx (sub-flake or the root flake) #308: verify on current main how downstream flakes can consume mcpx today (sub-flake? root flake? vendored copy status in dezren39/nix) and route: scoped follow-up packet, or a decision surface if the choice is genuinely Drew's.
    • Expectation: s — triage verdict posted with current-HEAD evidence.
  5. dezren39 commented on Nov 1, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · done (triage — decision already made and implemented; closing)

    • Agent: queue worker (repo-worker-code), lane F
    • Session / ID: queue task 2072 (triage)
    • Found via: queue claim
    • Task: Triage verdict below, verified fresh on current main today (2026-11-01).

    The question this issue asked is already answered. The 2026-10-19 comment on this issue records the decision (from the dezren39/darwin-nix#468 dedup work): downstream flakes consume mcpx as a source-only flake input — mcpx-src = { url = "github:developing-today/code"; flake = false; } — and callPackage this repo's existing pkgs/mcpx/package.nix from the pinned source. That is neither option 1 (no sub-flake: pkgs/mcpx/ on current main has no flake.nix — verified by directory listing today) nor options 2/3 (no root-flake input graph enters the consumer's lock).

    Acceptance criteria, dispositioned:

    1. ✅ Option chosen, reason written down — the 2026-10-19 decision comment above (why: no input-graph pollution, no new sub-flake needed, derivation byte-identical in both repos at the time).
    2. ◐ Consumer builds from a pinned rev on aarch64-darwin, no vendored source — the no-vendored-source half is done and verified today: dezren39/nix PR fix(lab-ops-hub): judge inet_aton IPv4 spellings in the container crawl validator #469 (merged 2026-10-19) deleted the vendored copy; pkgs/ in dezren39/nix no longer contains mcpx and its flake.nix references mcpx-src. The aarch64-darwin build verification itself is still owed and is tracked as mcpx: aarch64-darwin build verification still owed for the pinned mcpx-src input (from #469/#468) dezren39/darwin-nix#471 — it can only run on Drew's Mac, per the decision comment.
    3. ✅ Consumer can override bun-bin — the decision keeps bun-bin consumer-overridable and nix#468 implemented it that way (the consumer's darwin overrideAttrs carried over unchanged).
    4. ✅ Answered here, as the criterion allows ("or the issue says why it does not") — this repo's CI does not nix build the package on a darwin runner: there is no darwin Nix builder in the fleet's CI. What CI does do today (verified in .github/workflows/mcpx.yml on main): PR jobs cross-compile-check darwin/arm64 from ubuntu (scripts/darwin-compile-check.sh), and the nightly stress job runs the Go suite on macos-latest. The actual darwin nix build verification is exactly the remainder tracked in mcpx: aarch64-darwin build verification still owed for the pinned mcpx-src input (from #469/#468) dezren39/darwin-nix#471.

    Closing this issue — the decision + consumer migration it existed to produce are complete; every remainder already has its own tracked home: dezren39/darwin-nix#471 (darwin build verification, Drew's Mac), code#237 (darwin takeover-test check-phase blocker), code#309 (mcpx backlog re-home, still open). No follow-up packet is needed from this triage.

  6. added a commit that references this issue on Nov 2, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

app/mcpxPackage/app: mcpx (pkgs/ or apps/ in this repo)effort/mMedium: expected under 1 day of workkind/infrastructureInfrastructure / host-portability workmeta/enrichedIntake review done: acceptance criteria, links, and normalized labels addedpriority/normalOrdinary priority (the default)source/humanFiled directly by a human

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions