feat(xum): rebrand mux module to xum following coder/xum rename - #1126
Draft
phorcys420 wants to merge 2 commits into
Draft
phorcys420 wants to merge 2 commits into
phorcys420 wants to merge 2 commits into
Conversation
Contributor
Module Scorecard Check
|
| 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  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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Renames the
coder/muxmodule tocoder/xum, following the upstreamcoder/mux→coder/xumrepo/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 canonicalxumnaming.What changed
registry/coder/modules/mux→registry/coder/modules/xum(mux.tftest.hcl→xum.tftest.hcl), history preserved via rename.registry.coder.com/coder/xum/coder; version reset to1.0.0.xumnaming throughout:xumbinary,XUM_SERVER_AUTH_TOKEN/XUM_BINARY/XUM_NODE_VERSION, install prefix~/.coder-modules/coder/xum, log~/.coder-modules/coder/xum/logs/xum.log, TF resourcescoder_script.xum/coder_app.xum/random_password.xum_auth_token, display nameXum, slugxum.~/.xum/server.lock(canonical) and~/.mux/server.lock(legacy)..icons/xum.svg(Xum mark), removed the orphaned.icons/mux.svg; icon references now/icon/xum.svg.xum-product-hero.webp.Intentionally retained
muxreferences: the legacy npm-package guard in tests, the dualxum/muxbin note (the npm package still ships both), the legacy~/.muxlock cleanup, and the historical "legacymuxpackage name" note.Breaking change
The module source path changes from
coder/mux/codertocoder/xum/coder. Existing references toregistry.coder.com/coder/mux/coderwill no longer resolve — registry modules can't redirect. The oldmuxmodule is removed rather than kept as a shim.Testing
terraform test: 24/24 passbun test main.test.ts: 8/8 pass (real@coder/xuminstall via npm + tarball fallback)bun run fmt: cleanFollow-ups / reviewer notes
.icons/xum.svguses the brand's black mark; if it renders on a dark surface it'll be low-contrast (the oldmux.svgwas white-filled). Easy to swap to a white/themed variant.xum-product-hero.webpis the previous hero image bytes renamed; if it still shows Mux branding it should be replaced with a real Xum asset.Decision log
1.0.0as a fresh module identity.xumbinary/env names (both work today since@coder/xumshipsxumandmuxbins and acceptsMUX_*env aliases, but canonical is future-proof)..xumand.muxlockfiles so restarts work whether the running CLI wrote the canonical or legacy path.This PR was generated by Coder Agents on behalf of @phorcys420.