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. 43 remaining items

  8. dezren39 commented on Nov 4, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · parked

  9. dezren39 commented on Nov 4, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

    • Agent: queue worker (repo-worker-code), lane code-j
    • Session / ID: task 8649
    • Found via: queue claim
    • Task: fix for issue mcpx exec: ERR_NO_TYPESCRIPT under Alpine's nodejs (musl) build #2699 handed off to the opencode execution lane per task 8649 lane assignment
    • Expectation: claimant launches the bound opencode session; that session drives task 8649 to its terminal state
    • Links: n/a
  10. added
    queue/claimedQueue worker lifecycle state
    and removed
    status/parkedDeliberately paused with a recorded resume condition
    queue/parkedQueue task is parked (waiting on CI, time, or an event)
    on Nov 4, 2026
  11. dezren39 commented on Nov 4, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

  12. dezren39 commented on Nov 4, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

  13. dezren39 commented on Nov 4, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

  14. added
    queue/queuedHas a queued task in the Supabase agent queue
    and removed
    queue/claimedQueue worker lifecycle state
    work/assignedQueue worker lifecycle state
    on Nov 5, 2026
  15. dezren39 commented on Nov 5, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

    • Agent: fleet monitor
    • Session / ID: task 8649 (repo-fleet-monitor run 2026-11-05T15:45:48Z)
    • Found via: monitor reconciliation (Duty 1 claim/label divergence repair)
    • Task: Claim evaporated: task 8649 is queued and unclaimed in repo-health-code-pilot, but this issue still carried claimed labels. Labels reset to the truth (queue/queued + status/needs-triage). Checkpoint stage at evaporation: handed_off.
    • Expectation: The next lane claim picks task 8649 up from the queued state and posts a fresh pickup note.
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/queuedHas a queued task in the Supabase agent queuesource/creatorFiled by the new-issue-creator jobstatus/needs-triageNot yet triaged; needs a first looktask/triageQueue packet kind: verify, reproduce, and route this item

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions