Local branch had diverged from origin/master (sibling commits on the same base). Rewrote local history linearly on top of origin/master, folding in all local content: exa/hot-platform discovery hunters, leaks ledger, nightly sweep orchestrator, updated .gitignore and skill docs, plus the latest hunt output and vault state. Remote-only files (vault keys, channel scripts) were restored rather than dropped, so the resulting tree is a full union of both sides.
1 line
7.8 KiB
JSON
1 line
7.8 KiB
JSON
{"repo": "bermudi/nelsonctl", "files": {"internal/config/config_test.go": {"abed6ec35f36afe15db8b70e759badd6bbf89ad5": {"t": 1786068300.2334933, "n": 7037, "h": "17719d0cfcdd6d81", "c": "package config\n\nimport (\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n\t\"testing\"\n\t\"time\"\n)\n\nfunc TestLoadDefaultsWithoutConfigFile(t *testing.T) {\n\tconfigHome := t.TempDir()\n\tt.Setenv(\"XDG_CONFIG_HOME\", configHome)\n\n\tcfg, path, err := Load()\n\tif err != nil {\n\t\tt.Fatalf(\"Load() error = %v\", err)\n\t}\n\n\tif path != filepath.Join(configHome, \"nelsonctl\", \"config.yaml\") {\n\t\tt.Fatalf(\"path = %q\", path)\n\t}\n\tif cfg.Agent != \"pi\" {\n\t\tt.Fatalf(\"Agent = %q, want pi\", cfg.Agent)\n\t}\n\tif cfg.Steps.Apply.Model != \"minimax/minimax-m2.7\" {\n\t\tt.Fatalf(\"apply model = %q\", cfg.Steps.Apply.Model)\n\t}\n\tif cfg.Controller.Provider != ProviderOpenCode {\n\t\tt.Fatalf(\"provider = %q, want %q\", cfg.Controller.Provider, ProviderOpenCode)\n\t}\n\tif cfg.Controller.MaxToolCalls != 50 {\n\t\tt.Fatalf(\"max_tool_calls = %d, want 50\", cfg.Controller.MaxToolCalls)\n\t}\n\tif cfg.Controller.Timeout.Std() != 45*time.Minute {\n\t\tt.Fatalf(\"timeout = %s, want 45m\", cfg.Controller.Timeout.Std())\n\t}\n}\n\nfunc TestLoadParsesConfigFile(t *testing.T) {\n\tconfigHome := t.TempDir()\n\tt.Setenv(\"XDG_CONFIG_HOME\", configHome)\n\tpath := filepath.Join(configHome, \"nelsonctl\", \"config.yaml\")\n\tif err := os.MkdirAll(filepath.Dir(path), 0o755); err != nil {\n\t\tt.Fatalf(\"mkdir: %v\", err)\n\t}\n\tcontent := strings.Join([]string{\n\t\t\"agent: claude\",\n\t\t\"steps:\",\n\t\t\" apply:\",\n\t\t\" model: anthropic/claude-sonnet-4\",\n\t\t\" timeout: 11m\",\n\t\t\" review:\",\n\t\t\" model: moonshotai/kimi-k2.5\",\n\t\t\" timeout: 7m\",\n\t\t\" fix:\",\n\t\t\" model: anthropic/claude-sonnet-4\",\n\t\t\" timeout: 13m\",\n\t\t\"controller:\",\n\t\t\" provider: openrouter\",\n\t\t\" model: deepseek/deepseek-reasoner\",\n\t\t\" max_tool_calls: 64\",\n\t\t\" timeout: 55m\",\n\t\t\"review:\",\n\t\t\" fail_on: warning\",\n\t}, \"\\n\")\n\tif err := os.WriteFile(path, []byte(content), 0o644); err != nil {\n\t\tt.Fatalf(\"write: %v\", err)\n\t}\n\n\tcfg, _, err := Load()\n\tif err != nil {\n\t\tt.Fatalf(\"Load() error = %v\", err)\n\t}\n\n\tif cfg.Agent != \"claude\" {\n\t\tt.Fatalf(\"Agent = %q\", cfg.Agent)\n\t}\n\tif cfg.Steps.Apply.Timeout.Std() != 11*time.Minute {\n\t\tt.Fatalf(\"apply timeout = %s\", cfg.Steps.Apply.Timeout.Std())\n\t}\n\tif cfg.Controller.Provider != ProviderOpenRouter {\n\t\tt.Fatalf(\"provider = %q\", cfg.Controller.Provider)\n\t}\n\tif cfg.Review.FailOn != FailOnWarning {\n\t\tt.Fatalf(\"fail_on = %q\", cfg.Review.FailOn)\n\t}\n}\n\nfunc TestWriteOmitsCredentials(t *testing.T) {\n\tpath := filepath.Join(t.TempDir(), \"config.yaml\")\n\tcfg := DefaultConfig()\n\tif err := Write(path, cfg); err != nil {\n\t\tt.Fatalf(\"Write() error = %v\", err)\n\t}\n\tdata, err := os.ReadFile(path)\n\tif err != nil {\n\t\tt.Fatalf(\"ReadFile() error = %v\", err)\n\t}\n\ttext := string(data)\n\tfor _, forbidden := range []string{\"DEEPSEEK_API_KEY\", \"OPENROUTER_API_KEY\", \"POE_API_KEY\", \"POE_OAUTH_TOKEN\", \"api_key:\"} {\n\t\tif strings.Contains(text, forbidden) {\n\t\t\tt.Fatalf(\"config should not contain %q\", forbidden)\n\t\t}\n\t}\n}\n\nfunc TestValidateControllerCredentials(t *testing.T) {\n\tcfg := DefaultConfig()\n\tif err := ValidateControllerCredentials(cfg, func(key string) string { return \"\" }); err == nil || !strings.Contains(err.Error(), \"OPENCODE_API_KEY\") {\n\t\tt.Fatalf(\"expected missing OPENCODE_API_KEY, got %v\", err)\n\t}\n\n\tcfg.Controller.Provider = ProviderOpenRouter\n\tif err := ValidateControllerCredentials(cfg, func(key string) string {\n\t\tif key == \"OPENROUTER_API_KEY\" {\n\t\t\treturn \"present\"\n\t\t}\n\t\treturn \"\"\n\t}); err != nil {\n\t\tt.Fatalf(\"ValidateControllerCredentials() error = %v\", err)\n\t}\n\n\tcfg.Controller.Provider = ProviderPoe\n\tif err := ValidateControllerCredentials(cfg, func(key string) string {\n\t\tif key == \"POE_API_KEY\" {\n\t\t\treturn \"present\"\n\t\t}\n\t\treturn \"\"\n\t}); err != nil {\n\t\tt.Fatalf(\"ValidateControllerCredentials() poe api key error = %v\", err)\n\t}\n\tif err := ValidateControllerCredentials(cfg, func(key string) string {\n\t\tif key == \"POE_OAUTH_TOKEN\" {\n\t\t\treturn \"present\"\n\t\t}\n\t\treturn \"\"\n\t}); err != nil {\n\t\tt.Fatalf(\"ValidateControllerCredentials() poe oauth error = %v\", err)\n\t}\n}\n\nfunc TestResolveControllerCredential(t *testing.T) {\n\tvalue, source, err := ResolveControllerCredential(ProviderPoe, func(key string) string {\n\t\tswitch key {\n\t\tcase \"POE_OAUTH_TOKEN\":\n\t\t\treturn \"oauth-token\"\n\t\tcase \"POE_API_KEY\":\n\t\t\treturn \"\"\n\t\tdefault:\n\t\t\treturn \"\"\n\t\t}\n\t})\n\tif err != nil {\n\t\tt.Fatalf(\"ResolveControllerCredential() error = %v\", err)\n\t}\n\tif value != \"oauth-token\" || source != \"POE_OAUTH_TOKEN\" {\n\t\tt.Fatalf(\"ResolveControllerCredential() = %q, %q\", value, source)\n\t}\n\n\t_, _, err = ResolveControllerCredential(ProviderPoe, func(string) string { return \"\" })\n\tif err == nil || !strings.Contains(err.Error(), \"POE_OAUTH_TOKEN\") {\n\t\tt.Fatalf(\"expected oauth hint, got %v\", err)\n\t}\n}\n\nfunc TestValidateAgentStepConfigAmp(t *testing.T) {\n\tcfg := DefaultConfig()\n\tif err := ValidateAgentStepConfig(cfg, \"pi\"); err != nil {\n\t\tt.Fatalf(\"ValidateAgentStepConfig(pi) error = %v\", err)\n\t}\n\tif err := ValidateAgentStepConfig(cfg, \"amp\"); err == nil || !strings.Contains(err.Error(), \"deep, large, rush, or smart\") {\n\t\tt.Fatalf(\"expected amp mode validation error, got %v\", err)\n\t}\n\n\tcfg.Agent = \"amp\"\n\tcfg.Steps.Apply.Model = \"smart\"\n\tcfg.Steps.Review.Model = \"deep\"\n\tcfg.Steps.Fix.Model = \"rush\"\n\tif err := cfg.Validate(); err != nil {\n\t\tt.Fatalf(\"cfg.Validate() amp error = %v\", err)\n\t}\n}\n\nfunc TestNormalizeControllerProviderAliases(t *testing.T) {\n\tif got := NormalizeControllerProvider(\"open-router\"); got != ProviderOpenRouter {\n\t\tt.Fatalf(\"NormalizeControllerProvider(open-router) = %q\", got)\n\t}\n\tif got := NormalizeControllerProvider(\"open-code\"); got != ProviderOpenCode {\n\t\tt.Fatalf(\"NormalizeControllerProvider(open-code) = %q\", got)\n\t}\n\tif got := NormalizeControllerProvider(\"poe.com\"); got != ProviderPoe {\n\t\tt.Fatalf(\"NormalizeControllerProvider(poe.com) = %q\", got)\n\t}\n}\n\nfunc TestResolveAgentPiFirst(t *testing.T) {\n\tcfg := DefaultConfig()\n\tresolved := ResolveAgent(cfg, \"\")\n\tif resolved.Name != \"pi\" || resolved.Mode != ModeNelson || resolved.Source != \"config\" {\n\t\tt.Fatalf(\"resolved = %#v\", resolved)\n\t}\n\n\tresolved = ResolveAgent(cfg, \"codex\")\n\tif resolved.Name != \"codex\" || resolved.Mode != ModeRalph || resolved.Source != \"flag\" {\n\t\tt.Fatalf(\"resolved override = %#v\", resolved)\n\t}\n}\n\nfunc TestValidateWorkspace(t *testing.T) {\n\trepo := t.TempDir()\n\tif err := ValidateWorkspace(repo); err == nil || !strings.Contains(err.Error(), \"specs/\") {\n\t\tt.Fatalf(\"expected specs validation error, got %v\", err)\n\t}\n\n\tpaths := []string{\n\t\tfilepath.Join(repo, \"specs\"),\n\t\tfilepath.Join(repo, \".agents\", \"skills\", \"litespec-apply\"),\n\t\tfilepath.Join(repo, \".agents\", \"skills\", \"litespec-review\"),\n\t}\n\tfor _, path := range paths {\n\t\tif err := os.MkdirAll(path, 0o755); err != nil {\n\t\t\tt.Fatalf(\"mkdir %s: %v\", path, err)\n\t\t}\n\t}\n\tfor _, file := range []string{\n\t\tfilepath.Join(repo, \".agents\", \"skills\", \"litespec-apply\", \"SKILL.md\"),\n\t\tfilepath.Join(repo, \".agents\", \"skills\", \"litespec-review\", \"SKILL.md\"),\n\t} {\n\t\tif err := os.WriteFile(file, []byte(\"skill\"), 0o644); err != nil {\n\t\t\tt.Fatalf(\"write %s: %v\", file, err)\n\t\t}\n\t}\n\n\tif err := ValidateWorkspace(repo); err != nil {\n\t\tt.Fatalf(\"ValidateWorkspace() error = %v\", err)\n\t}\n}\n"}}}} |