From fcb13111efc34360a88d20479f7315d5e62c32bf Mon Sep 17 00:00:00 2001 From: Jayson Grace Date: Mon, 3 Aug 2026 13:24:08 -0700 Subject: [PATCH] fix: resolve lab config through active environment for scoring **Changed:** - Score key generation now resolves the GOAD config via the active environment's `ResolvedLabConfigPath()` instead of hardcoding `ad/GOAD/data/config.json`, so overlays and variant labs are honored for the selected `--env` - `cli/cmd/score.go` - Scoreboard demo and generate-key alias commands use the same environment-resolved config path, ensuring the correct lab is scored - `cli/cmd/scoreboard.go` - Updated flag help text for `--config` to describe the new default as the active environment's resolved lab config --- cli/cmd/score.go | 10 ++++++++-- cli/cmd/scoreboard.go | 12 +++++++++--- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/cli/cmd/score.go b/cli/cmd/score.go index 356f5c4c..dab0d276 100644 --- a/cli/cmd/score.go +++ b/cli/cmd/score.go @@ -49,7 +49,7 @@ func init() { scoreCmd.Flags().String("ssh-key", "", "Path to SSH private key for the Kali VM (Azure; auto-discovered if omitted)") scoreCmd.Flags().String("ssh-user", "kali", "SSH username for the Kali VM (Azure)") - scoreGenerateKeyCmd.Flags().String("config", "", "Path to GOAD config.json (default: ad/GOAD/data/config.json)") + scoreGenerateKeyCmd.Flags().String("config", "", "Path to GOAD config.json (default: the active environment's resolved lab config)") scoreGenerateKeyCmd.Flags().String("output", "", "Output path for answer_key.json (default: scoreboard/answer_key.json)") } @@ -238,7 +238,13 @@ func runScoreGenerateKey(cmd *cobra.Command, _ []string) error { } configPath, _ := cmd.Flags().GetString("config") if configPath == "" { - configPath = filepath.Join(cfg.ProjectRoot, "ad", "GOAD", "data", "config.json") + // Resolve through the active environment so overlays and variant labs + // are honored. Hardcoding ad/GOAD/data/config.json scores the base lab + // no matter which --env is selected. + configPath, err = cfg.ResolvedLabConfigPath() + if err != nil { + return err + } } outputPath, _ := cmd.Flags().GetString("output") if outputPath == "" { diff --git a/cli/cmd/scoreboard.go b/cli/cmd/scoreboard.go index a00e40ef..30eab679 100644 --- a/cli/cmd/scoreboard.go +++ b/cli/cmd/scoreboard.go @@ -50,10 +50,10 @@ func init() { scoreboardCmd.AddCommand(scoreboardRunCmd) scoreboardCmd.AddCommand(scoreboardDemoCmd) - scoreboardGenerateKeyAlias.Flags().String("config", "", "Path to GOAD config.json (default: ad/GOAD/data/config.json)") + scoreboardGenerateKeyAlias.Flags().String("config", "", "Path to GOAD config.json (default: the active environment's resolved lab config)") scoreboardGenerateKeyAlias.Flags().String("output", "", "Output path for answer_key.json (default: scoreboard/answer_key.json)") - scoreboardDemoCmd.Flags().String("config", "", "Path to GOAD config.json (default: ad/GOAD/data/config.json)") + scoreboardDemoCmd.Flags().String("config", "", "Path to GOAD config.json (default: the active environment's resolved lab config)") scoreboardRunCmd.Flags().String("transport", "local", "Transport: local, ssm, or ares") scoreboardRunCmd.Flags().String("report", "./report.jsonl", "Path to the agent's report file (on the target, for local/ssm)") @@ -196,7 +196,13 @@ func runScoreboardDemo(cmd *cobra.Command, _ []string) error { } configPath, _ := cmd.Flags().GetString("config") if configPath == "" { - configPath = filepath.Join(cfg.ProjectRoot, "ad", "GOAD", "data", "config.json") + // Resolve through the active environment so overlays and variant labs + // are honored. Hardcoding ad/GOAD/data/config.json scores the base lab + // no matter which --env is selected. + configPath, err = cfg.ResolvedLabConfigPath() + if err != nil { + return err + } } ak, err := scoreboard.GenerateAnswerKey(configPath) if err != nil {