Skip to content

feat(xum): rebrand mux module to xum following coder/xum rename - #1126

Draft
phorcys420 wants to merge 2 commits into
mainfrom
phorcys/xum-rebrand
Draft

phorcys420 wants to merge 2 commits into
mainfrom
phorcys/xum-rebrand

Conversation

@phorcys420

Copy link
Copy Markdown
Member

Renames the coder/mux module to coder/xum, following the upstream coder/muxcoder/xum repo/product rename (done after a trademark concern from Mux.com). The module already installed @coder/xum; this brings the module identity, branding, binary, and runtime paths in line with the canonical xum naming.

What changed

  • Module moved registry/coder/modules/muxregistry/coder/modules/xum (mux.tftest.hclxum.tftest.hcl), history preserved via rename.
  • Source path is now registry.coder.com/coder/xum/coder; version reset to 1.0.0.
  • Canonical xum naming throughout: xum binary, XUM_SERVER_AUTH_TOKEN / XUM_BINARY / XUM_NODE_VERSION, install prefix ~/.coder-modules/coder/xum, log ~/.coder-modules/coder/xum/logs/xum.log, TF resources coder_script.xum / coder_app.xum / random_password.xum_auth_token, display name Xum, slug xum.
  • Server-lock cleanup removes both ~/.xum/server.lock (canonical) and ~/.mux/server.lock (legacy).
  • Added .icons/xum.svg (Xum mark), removed the orphaned .icons/mux.svg; icon references now /icon/xum.svg.
  • Hero image renamed to xum-product-hero.webp.

Intentionally retained mux references: the legacy npm-package guard in tests, the dual xum/mux bin note (the npm package still ships both), the legacy ~/.mux lock cleanup, and the historical "legacy mux package name" note.

Breaking change

The module source path changes from coder/mux/coder to coder/xum/coder. Existing references to registry.coder.com/coder/mux/coder will no longer resolve — registry modules can't redirect. The old mux module is removed rather than kept as a shim.

Testing

  • terraform test: 24/24 pass
  • bun test main.test.ts: 8/8 pass (real @coder/xum install via npm + tarball fallback)
  • bun run fmt: clean

Follow-ups / reviewer notes

  • .icons/xum.svg uses the brand's black mark; if it renders on a dark surface it'll be low-contrast (the old mux.svg was white-filled). Easy to swap to a white/themed variant.
  • xum-product-hero.webp is the previous hero image bytes renamed; if it still shows Mux branding it should be replaced with a real Xum asset.
Decision log
  • Full rename (dir + source path) rather than rebrand-in-place, per maintainer direction, accepting the breaking source-path change.
  • Version reset to 1.0.0 as a fresh module identity.
  • Switch to canonical xum binary/env names (both work today since @coder/xum ships xum and mux bins and accepts MUX_* env aliases, but canonical is future-proof).
  • Clean both .xum and .mux lockfiles so restarts work whether the running CLI wrote the canonical or legacy path.

This PR was generated by Coder Agents on behalf of @phorcys420.

@github-actions

github-actions Bot commented Sep 18, 2026

Copy link
Copy Markdown
Contributor

Module Scorecard Check

coder/xum: first scorecard, 91 / 100

No existing scorecard discussion found for Xum; this is the initial score. A dedicated discussion is created after merge.

Full scorecard for this PR
Presentation & Onboarding Agent Integration Credential Hygiene Restricted-Environment Readiness Engineering Quality Overall
17 / 17 20 / 25 20 / 20 17 / 20 10 / 10 91 / 100
Drilldown

Presentation & Onboarding — 17 / 17

Criterion Max Score Notes
Configuration-mode examples 12 12 README provides comprehensive examples covering major modes: basic usage, version pinning, project launch, custom arguments, restart behavior, custom port, package manager selection, custom registry, cached installation, and skip-install mode. Each example includes sensible defaults and clear use cases.
Visual preview 5 5 README includes ![Xum](../../.images/xum-product-hero.webp) image that exists and displays the product (verified 249.1 KB).

Agent Integration — 20 / 25

Criterion Max Score Notes
AI governance 10 5 README mentions "Coder AI Gateway" in the description but provides no documentation on how to configure or use it. No mention of Agent Firewall. The module generates an auth token (XUM_SERVER_AUTH_TOKEN) for cross-site request protection but this is module-level auth, not AI governance. Half credit for mentioning AI Gateway without implementation details.
Dashboard entry point 5 5 coder_app resource is fully implemented with proper URL, healthcheck, and configurable display options (slug, display_name, subdomain, share, order, group, open_in).
Session continuity 5 5 README explicitly documents restart behavior: "Enable automatic restarts after Xum exits" with restart_on_kill, restart_delay_seconds, and max_restart_attempts variables. The launcher removes stale locks and restarts the server, enabling session continuity across crashes.
Managed configuration 5 5 README documents add_project variable to open a specific project on launch, and additional_arguments for arbitrary server configuration. Examples show --open-mode pinned and other settings.

Credential Hygiene — 20 / 20

Criterion Max Score Notes
Secrets marked sensitive 16 16 The module generates random_password.xum_auth_token for authentication. While not explicitly marked sensitive = true in the resource definition (random_password doesn't expose sensitive values by default in outputs), the token is never exposed in README examples and is only used internally in the script and URL. No README examples show inline secrets or placeholder keys.
Non-hardcoded auth path 4 4 Module generates its own auth token (random_password.xum_auth_token) and injects it via environment variable and URL query parameter, avoiding any need for users to paste keys. This is a proper API key helper pattern.

Restricted-Environment Readiness — 17 / 20

Criterion Max Score Notes
Mirrorable artifact source 5 5 registry_url variable (default https://registry.npmjs.org) overrides the npm registry URL for installing @coder/xum. The script uses this variable in both package manager installs and tarball fallback downloads. Example shows: registry_url = "https://npm.pkg.github.com".
Bring-your-own binary 10 10 install = false variable documented with example: "Run without installing from the network (requires a xum binary at <install_prefix>/xum)". Script checks for existing binary and skips network operations when disabled.
Egress transparency 3 0 No dedicated README section enumerating external endpoints. Endpoints are scattered across examples (registry.npmjs.org, nodejs.org for Node bootstrap) but not consolidated in a network/offline/air-gapped section.
Runs without sudo 2 2 Inspected run.sh: no sudo invocations anywhere. All operations (mkdir, curl, tar, npm/pnpm/bun, ln) run as the current user. Node bootstrap downloads to $HOME/.coder-modules. Full credit from code verification alone.

Engineering Quality — 10 / 10

Criterion Max Score Notes
Input quality 6 6 All inputs have clear descriptions. Sensible defaults throughout (port 4000, install_prefix under module root, restart_delay_seconds 5). Validation blocks present for package_manager (enum check), restart_delay_seconds (>= 0), max_restart_attempts (whole number >= 0), share (enum), open_in (enum). Precondition validates install and use_cached conflict.
Test coverage 4 4 .tftest.hcl covers business logic: required vars, conflicts, custom ports, auth token injection, argument parsing, restart behavior, validation failures, path defaults, package selection, registry URL. main.test.ts provides end-to-end tests: default install with tarball fallback, npm install, argument parsing in containers, signal-based exit logging, restart after clean exit, restart after SIGTERM. Tests verify actual behavior in containers and remove them inline to avoid cleanup timeouts.

Overall — 91 / 100

Raw 84 / 92 → round(84 / 92 × 100) = 91

Tip

You can run this locally by telling your agent: "review this module against .github/scorecard/SCORECARD.md".


Scored against SCORECARD.md with claude-sonnet-4-5. Language-model scores are advisory.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant