---
task_number: 91
status: complete
priority: P2
owner: Michael
created: 2026-04-04
---
task_number: 91

# 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)

---
task_number: 91

## 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)

---
task_number: 91

## 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);
```

---
task_number: 91

## Information Needed

Before implementing, get from Pterodactyl Admin → Nodes:

- [ ] **TX1 (Dallas) Node ID:** ___
- [ ] **NC1 (Charlotte) Node ID:** ___

---
task_number: 91

## 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

---
task_number: 91

## 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.

---
task_number: 91

## Related Files

- `services/arbiter-3.0/src/panel/discovery.js`
- `services/arbiter-3.0/src/routes/admin/servers.js`
- `.env` (MINECRAFT_NEST_IDS)

---
task_number: 91

**Fire + Frost + Proper Node Detection** 🔥❄️
