Skip to content

mcpx exec: ERR_NO_TYPESCRIPT under Alpine's nodejs (musl) build #2699

Open

Description

@dezren39

Finding (from #1987 tier-2 container work, task 3283, 2026-10-30)

mcpx exec under Alpine's nodejs build fails immediately:

$ docker run --rm mcpx-tier2-node exec 'console.log("hi")'
node:internal/util:237
    throw new ERR_NO_TYPESCRIPT();
    ^

Repro: static mcpx (CGO_ENABLED=0) copied into alpine:3.21 with apk add nodejs, MCPX_SCRIPT_RUNTIME=node. The same exec smoke passes in the same alpine image with bun's musl build, and in gcr.io/distroless/cc with deno — so the daemon, the static binary and the exec plumbing are fine; specifically mcpx's node invocation (TypeScript handling — node is asked to strip/run TS in a mode Alpine's node build does not provide) is what breaks.

Why it matters

Alpine + apk add nodejs is the lightest documented way to give a minimal image an exec surface (#1987 tier 2). Today that combination is broken at the first script, with a raw node stack instead of an mcpx-level diagnosis.

Acceptance

  • mcpx exec works under Alpine's nodejs (musl) build, OR mcpx detects the unsupported node mode up front and fails with its own actionable message (which runtime/mode is missing, what to use instead).
  • A tier-2 CI leg alpine-node-exec is added to pkgs/mcpx/scripts/tier2-containers.sh + the mcpx tier-2 containers workflow asserting it (the leg is deliberately absent today; see docs/container.md §4).

Activity

  1. added
    kind/bugSomething isn't working (prefixed form of the classic bug label)
    priority/normalOrdinary priority (the default)
    app/mcpxPackage/app: mcpx (pkgs/ or apps/ in this repo)
    on Oct 30, 2026
  2. added
    effort/sSmall: expected under 2 hours of work
    meta/enrichedIntake review done: acceptance criteria, links, and normalized labels added
    on Oct 30, 2026
  3. dezren39 commented on Oct 30, 2026

    @dezren39
    MemberAuthor

    Intake review

    Fleet monitor intake pass (2026-10-30 run). Labels normalised this pass: status/needs-triage, effort/s, meta/enriched (kind/bug, priority/normal, app/mcpx were already present). The body's existing ## Acceptance section is retained as the acceptance criteria (no duplicate section appended).

    Still live: no merged PR since filing touches mcpx's node invocation / TypeScript handling; the failure is cleanly isolated by the filer's own controls (same image + bun musl build passes; distroless + deno passes), so this is a node-mode detection problem, not a daemon or exec-plumbing problem.

    Notes / risks: the acceptance deliberately allows two outcomes — make it work, or detect-and-diagnose up front. The detect path is the safer first slice: an mcpx-level error naming the missing node mode beats a raw ERR_NO_TYPESCRIPT stack for every minimal-image user, and it unblocks the tier-2 leg either way.

    Suggested approach: probe the node's type-stripping capability once at runtime selection (cache the verdict with the runtime record), fail with the actionable message when absent, and add the alpine-node-exec tier-2 leg asserting whichever behaviour lands.

  4. added
    queue/queuedHas a queued task in the Supabase agent queue
    source/creatorFiled by the new-issue-creator job
    task/triageQueue packet kind: verify, reproduce, and route this item
    on Nov 3, 2026
  5. developing-today commented on Nov 3, 2026

    @developing-today
    Contributor

    agent-note:v1
    state: triaged (coverage pass)
    Coverage pass 2026-11-03: reviewed in the fleet-wide per-issue pass (drift / overlap / already-handled / stale / blockers / ordering). Verdict: still live; queued in repo-health-code-pilot as triage at priority 40 (priority/normal). If this is already handled at current main, the triage closes it with evidence; if it needs splitting, the triage files the split.
    Found via: coverage pass 2026-11-03

  6. added
    work/assignedQueue worker lifecycle state
    and removed
    queue/queuedHas a queued task in the Supabase agent queue
    on Nov 3, 2026
  7. 62 remaining items

  8. added
    queue/claimedQueue worker lifecycle state
    and removed
    queue/queuedHas a queued task in the Supabase agent queue
    status/parkedDeliberately paused with a recorded resume condition
    queue/parkedQueue task is parked (waiting on CI, time, or an event)
    on Nov 8, 2026
  9. dezren39 commented on Nov 8, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · picked up

  10. added
    queue/parkedQueue task is parked (waiting on CI, time, or an event)
    status/parkedDeliberately paused with a recorded resume condition
    and removed
    queue/claimedQueue worker lifecycle state
    on Nov 8, 2026
  11. dezren39 commented on Nov 8, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · parked

  12. dezren39 commented on Nov 8, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

  13. developing-today commented on Nov 8, 2026

    @developing-today
    Contributor

    🤖 Agent note · handed off

    • Agent: repo-worker-code-o (lane code-o)
    • Task: task 8649 (small_fix, issue mcpx exec: ERR_NO_TYPESCRIPT under Alpine's nodejs (musl) build #2699 — mcpx exec under Alpine nodejs) — execution-lane assignment is opencode (§1b); handed off to the claimant.
    • Next: claimant session implements the node TypeScript-support probe / mcpx-level diagnosis and the alpine-node-exec tier-2 leg per the packet.
  14. dezren39 commented on Nov 8, 2026

    @dezren39
    MemberAuthor

    Agent note — handed off (task 8649)

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/sSmall: expected under 2 hours of workkind/bugSomething isn't working (prefixed form of the classic bug label)meta/enrichedIntake review done: acceptance criteria, links, and normalized labels addedpriority/normalOrdinary priority (the default)queue/parkedQueue task is parked (waiting on CI, time, or an event)source/creatorFiled by the new-issue-creator jobstatus/parkedDeliberately paused with a recorded resume conditiontask/triageQueue packet kind: verify, reproduce, and route this itemwork/assignedQueue worker lifecycle state

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions