Initial how_progression baseline

This commit is contained in:
2026-09-20 17:12:20 +00:00
commit 890a250270
22 changed files with 7258 additions and 0 deletions
+45
View File
@@ -0,0 +1,45 @@
-- Dormant framework: no missions, events, callbacks or commands are registered
-- until a future migration explicitly calls register on an instance.
local ids = require 'shared.mission_ids'
local Registry = {}
Registry.__index = Registry
function Registry.new()
return setmetatable({ missions = {} }, Registry)
end
function Registry:register(mission)
assert(type(mission) == 'table' and type(mission.id) == 'string', 'mission.id is required')
assert(ids.definitions[mission.id], 'unknown mission ID: ' .. mission.id)
assert(not self.missions[mission.id], 'duplicate mission ID: ' .. mission.id)
self.missions[mission.id] = mission
return mission
end
function Registry:get(missionId)
return self.missions[missionId]
end
function Registry:resolveProgPhase(contact, notation)
local phase = ids.parseProgPhase(contact, notation)
if not phase then return nil end
local mission = self.missions[phase.missionId]
if not mission or not mission.phases or not mission.phases[phase.phaseName] then
return nil
end
return mission, mission.phases[phase.phaseName], phase
end
function Registry:list()
local result = {}
for id, mission in pairs(self.missions) do
result[#result + 1] = { id = id, mission = mission }
end
table.sort(result, function(a, b) return a.id < b.id end)
return result
end
return Registry