feat: widen scope to AI developer tools; enforce hard 1,000-star floor

The list was already drifting past "coding agents" — ADEs were admitted in
the previous commit. Rather than keep widening criterion 1 one category at a
time, it now describes the actual subject: developer tools built around AI.
The dividing line becomes tools you use vs. building blocks you import, which
keeps libraries, SDKs, model weights and skill collections out.

The star floor drops from a soft "roughly 10,000+" to a hard 1,000:

- enforceStarFloor drops any below-floor entry from the ranking and emits an
  ::error:: annotation, so the published list can never violate the rule.
  Dropping rather than failing keeps one bad entry from blocking the refresh
  of every other repo.
- -check cannot catch this (star counts need the API, -check runs offline);
  docs/CONTRIBUTING.md says so explicitly.

Side effect: Orkas (1,998 stars) now clears the floor it previously missed.

go run . -check: 43 agents valid. go test ./...: ok.
This commit is contained in:
tiennm99 committed 2026-09-16 21:21:12 +07:00
1 parent 21ad0d47a5
commit c5d8561d8f
6 files changed
+81 -17

No files matched your search

+21
View File
@@ -312,3 +312,24 @@ func TestFetchStats_StaleWarning(t *testing.T) {
t.Errorf("missing archived warning %q in:\n%s", want, logs)
}
}
func TestEnforceStarFloor(t *testing.T) {
in := []Stat{
{CanonicalKey: "a/above", Stars: minStars + 1},
{CanonicalKey: "b/exactly", Stars: minStars},
{CanonicalKey: "c/below", Stars: minStars - 1},
{CanonicalKey: "d/zero", Stars: 0},
}
got := enforceStarFloor(in)
want := []string{"a/above", "b/exactly"}
if len(got) != len(want) {
t.Fatalf("kept %d entries, want %d: %+v", len(got), len(want), got)
}
for i, w := range want {
if got[i].CanonicalKey != w {
t.Errorf("kept[%d] = %s, want %s", i, got[i].CanonicalKey, w)
}
}
}