package cockpit import ( "strings" "testing" ) // TestStatus_FidelityLabels: Status flags advisory per-playbook targets with // "(advisory)", aggregate records with "(aggregate, ADVISORY)", and leaves the // enforced Claude line unsuffixed. func TestStatus_FidelityLabels(t *testing.T) { cfg := testConfig(t) pb := loadHandover(t) if _, err := Generate(cfg, pb, "claude"); err != nil { t.Fatal(err) } if _, err := Generate(cfg, pb, "cursor"); err != nil { t.Fatal(err) } if _, err := GenerateAll(cfg, []Playbook{pb}, "agents"); err != nil { t.Fatal(err) } joined := strings.Join(Status(cfg), "\n") for _, want := range []string{ "claude/handover: on", "cursor/handover: on (advisory)", "agents: on (aggregate, ADVISORY)", } { if !strings.Contains(joined, want) { t.Errorf("status missing %q:\n%s", want, joined) } } // The enforced line must NOT carry an advisory suffix. for _, line := range Status(cfg) { if strings.HasPrefix(line, "claude/handover:") && strings.Contains(line, "advisory") { t.Errorf("enforced claude line wrongly marked advisory: %q", line) } } } // TestCursorGenerateOff_Reversible: a per-playbook advisory target emits and // reverses cleanly through the unchanged emit machinery. func TestCursorGenerateOff_Reversible(t *testing.T) { cfg := testConfig(t) pb := loadHandover(t) res, err := Generate(cfg, pb, "cursor") if err != nil { t.Fatalf("Generate cursor: %v", err) } if res.Fidelity != EnforcementAdvisory || !strings.Contains(res.Message(), "advisory") { t.Errorf("cursor result not flagged advisory: %q", res.Message()) } vr, err := Verify(cfg, pb, "cursor", "") if err != nil { t.Fatal(err) } if !vr.Clean { t.Errorf("fresh cursor emit should verify clean: %q", vr.Detail) } off, err := Off(cfg, pb, "cursor") if err != nil { t.Fatalf("Off cursor: %v", err) } if !off.Changed { t.Error("Off cursor reported no change") } }