diff --git a/internal/cli/root.go b/internal/cli/root.go index 3206dcc..a31ca3c 100644 --- a/internal/cli/root.go +++ b/internal/cli/root.go @@ -192,9 +192,6 @@ func statusCommand(opts *options) *cobra.Command { } plan, err := opts.plan() if err != nil { - if isMissingConfigError(home, opts.configPath, err) { - return nil - } return err } fmt.Fprint(cmd.OutOrStdout(), core.DriftSummary(plan)) @@ -580,17 +577,6 @@ func validationError(errs []error) error { return errors.Join(errs...) } -func isMissingConfigError(home, configPath string, err error) bool { - var pathErr *os.PathError - if !errors.As(err, &pathErr) || !errors.Is(pathErr.Err, os.ErrNotExist) { - return false - } - if configPath == "" { - configPath = filepath.Join(home, "kanon.yaml") - } - return filepath.Clean(pathErr.Path) == filepath.Clean(configPath) -} - func confirm(in io.Reader, out io.Writer) (bool, error) { fmt.Fprint(out, "Apply these changes? [y/N] ") line, err := bufio.NewReader(in).ReadString('\n') diff --git a/internal/cli/root_test.go b/internal/cli/root_test.go index 1058b3c..0997bd6 100644 --- a/internal/cli/root_test.go +++ b/internal/cli/root_test.go @@ -225,6 +225,33 @@ func TestStatusReportsRemoteSkillMaterializationErrors(t *testing.T) { } } +func TestStatusFailsWhenConfigMissing(t *testing.T) { + userHome := t.TempDir() + t.Setenv("HOME", userHome) + + home := t.TempDir() + if err := core.InitHome(core.InitOptions{Home: home}); err != nil { + t.Fatal(err) + } + configPath := filepath.Join(home, "kanon.yaml") + if err := os.Remove(configPath); err != nil { + t.Fatal(err) + } + + cmd := NewRootCommand() + var out bytes.Buffer + cmd.SetOut(&out) + cmd.SetErr(&out) + cmd.SetArgs([]string{"--home", home, "status"}) + err := cmd.Execute() + if err == nil { + t.Fatalf("expected status to fail when %s is missing\n%s", configPath, out.String()) + } + if !strings.Contains(err.Error(), configPath) { + t.Fatalf("expected status error to name %s, got %v\n%s", configPath, err, out.String()) + } +} + func TestLockCommandWritesLockfile(t *testing.T) { repo, ref := newRemoteSkillRepo(t, "version one\n") home := t.TempDir()