diff --git a/docs/tasks/server-matrix-node-fix/README.md b/docs/tasks/server-matrix-node-fix/README.md new file mode 100644 index 0000000..0e0b6f1 --- /dev/null +++ b/docs/tasks/server-matrix-node-fix/README.md @@ -0,0 +1,120 @@ +# Task: Fix Server Matrix Node Detection + +**Task ID:** #91 +**Created:** April 4, 2026 +**Status:** In Progress — waiting for Michael to get home (needs MobaXterm) +**Priority:** High (blocking Holly's new servers from appearing) + +--- + +## Problem + +Holly added 6 new servers ~2 hours ago. They don't appear in Trinity Console Server Matrix. + +**Root Cause:** The matrix grouping logic filters servers by either: +1. Node name matching ("TX1", "NC1", "Node 2", "Node 3") +2. Server name containing "TX" or "NC" + +Servers that match NEITHER condition fall through and aren't displayed. + +**Affected Servers (not showing):** +- Beyond Ascension +- Wold's Vaults +- Otherworld [Dungeons & Dragons] +- DeceasedCraft +- Submerged 2 +- (1 more — 18 total, 12 showing) + +**Servers showing (have -TX or -NC suffix):** +- Mythcraft 5 - NC +- Create Plus - TX +- Vanilla - TX +- Beyond Depth - TX +- (8 more) + +--- + +## The Fix + +### Part 1: Update discovery.js + +**File:** `/home/claude/firefrost-services/services/arbiter-3.0/src/panel/discovery.js` + +**Change:** Add `nodeId` to the returned server object. + +```javascript +// Line 25-28, change from: +}).map(server => ({ + identifier: server.attributes.identifier, + name: server.attributes.name +})); + +// To: +}).map(server => ({ + identifier: server.attributes.identifier, + name: server.attributes.name, + nodeId: server.attributes.node +})); +``` + +### Part 2: Update servers.js grouping logic + +**File:** `/home/claude/firefrost-services/services/arbiter-3.0/src/routes/admin/servers.js` + +**Change:** Replace name-based filtering with node ID filtering. + +```javascript +// Line 47-48, change from: +const txServers = enrichedServers.filter(s => s.node === 'TX1' || s.node === 'Node 3' || s.name.includes('TX')); +const ncServers = enrichedServers.filter(s => s.node === 'NC1' || s.node === 'Node 2' || s.name.includes('NC')); + +// To (replace X and Y with actual node IDs): +const TX_NODE_ID = X; // Get from Pterodactyl Admin → Nodes +const NC_NODE_ID = Y; // Get from Pterodactyl Admin → Nodes + +const txServers = enrichedServers.filter(s => s.nodeId === TX_NODE_ID); +const ncServers = enrichedServers.filter(s => s.nodeId === NC_NODE_ID); +``` + +--- + +## Information Needed + +Before implementing, get from Pterodactyl Admin → Nodes: + +- [ ] **TX1 (Dallas) Node ID:** ___ +- [ ] **NC1 (Charlotte) Node ID:** ___ + +--- + +## Implementation Steps + +1. SSH to Command Center (63.143.34.217) via MobaXterm +2. `cd /path/to/arbiter-3` (verify actual path) +3. Edit `src/panel/discovery.js` — add nodeId +4. Edit `src/routes/admin/servers.js` — update grouping logic with node IDs +5. Restart Arbiter: `sudo systemctl restart arbiter-3` +6. Verify all 18 servers appear in Trinity Console +7. Commit changes to Gitea + +--- + +## Future Consideration + +**Also discussed:** Removing the nest filter entirely for future expansion (Ark, Palworld, etc.) + +Current filter: `MINECRAFT_NEST_IDS=1,6,7` + +**Recommendation:** Consult Gemini before removing — may have downstream implications for whitelist sync trying to write to non-Minecraft servers. + +--- + +## Related Files + +- `services/arbiter-3.0/src/panel/discovery.js` +- `services/arbiter-3.0/src/routes/admin/servers.js` +- `.env` (MINECRAFT_NEST_IDS) + +--- + +**Fire + Frost + Proper Node Detection** 🔥❄️