This is the relevant code. The portal room in the mansion has no special handling for any portals, so once it is unlocked it is available.
exploration.gd
Python:
func umbra():
if globals.state.umbrafirstvisit == true:
globals.state.umbrafirstvisit = false
mansion.maintext = mansion.maintext + "\n\n" + globals.questtext.UmbraFirstVisit
var array = []
if globals.state.mainquest >= 38 && globals.state.portals.has('dragonnests') == false:
globals.events.umbraportalenc()
array.append({name = "Black Market (shop)", function = 'umbrashop'})
array.append({name = "Buy Slaves", function = 'umbrabuyslaves'})
array.append({name = "Sell Servants", function = 'umbrasellslaves'})
array.append({name = "Return to Mansion", function = 'mansionreturn'})
outside.buildbuttons(array,self)
events.gd
Python:
func umbraportalenc():
var state = true
var text = textnode.umbrateleportenc
var buttons = []
globals.state.portals.dragonnests = {'enabled' : true, 'code' : 'dragonnests'}
text += "\n\n[color=yellow]New Portal unlocked[/color]"
globals.main.dialogue(state, self, text, buttons)
The finale with Hade and Melissa is stage 41 of the main quest, 38 or higher is needed for the portal, which is set in Gorn before the final set of battles.
As far as I can tell, the most likely causes are either that you didn't know to check the portal room to access the Dragon Nests or the mod is still applied to your game. You self reported that the critical piece of data relevant to the portal in your save file was correct, so unless you have data corruption in that save file that is preventing you from accessing the portal I don't see any other possibilities. While I still have no idea which mod you are using, there are some reasonable assumptions that can be made about how things break in Strive.