Add EC2 Launch Template strain genesis for AWS horizontal scale.

Ship POST /api/v1/forge/launch-template with cloud-init user-data embedding genesis snapshot hash and strain card ID; first template-tagged auth pins SpreadGeneration=0 and ParentAgentID=template.
This commit is contained in:
AetherForge
2026-06-07 09:57:11 -07:00
parent 7d15888ab0
commit 7191bda6fd
12 changed files with 462 additions and 0 deletions

View File

@@ -0,0 +1,44 @@
package spreadgenesis
import (
"strings"
"crypto-miner-server/internal/models"
"crypto-miner-server/internal/strategy"
)
const (
JoinLaneLaunchTemplate = "launch_template"
LaunchTemplateParentAgentID = "template"
)
type AuthProbe struct {
JoinLane string
ParentAgentID string
GenesisSnapshotHash string
}
func IsFirstAuth(isNewAgent bool, auth AuthProbe) bool {
if !isNewAgent {
return false
}
if strings.TrimSpace(auth.GenesisSnapshotHash) != "" {
return true
}
if strings.EqualFold(strings.TrimSpace(auth.ParentAgentID), LaunchTemplateParentAgentID) {
return true
}
return strings.TrimSpace(auth.JoinLane) == JoinLaneLaunchTemplate
}
func ApplyFirstAuth(agent *models.Agent, isNewAgent bool, auth AuthProbe) {
if agent == nil || !IsFirstAuth(isNewAgent, auth) {
return
}
agent.ParentAgentID = LaunchTemplateParentAgentID
agent.SpreadGeneration = 0
agent.JoinLane = JoinLaneLaunchTemplate
if strings.TrimSpace(agent.SpreadStrain) == "" {
agent.SpreadStrain = strategy.SpreadStrainFromJoinLane(JoinLaneLaunchTemplate)
}
}