The chart hid every series past rank 12 while the legend still listed
all of them, so the card claimed to show everything and drew a third of
it. Plot all series on load; the legend stays the way to hide the ones
you do not want, and hidden state still survives re-renders.
A single category could not describe tools that ship as a CLI, an editor
plugin and a desktop app at once, and 7 of the 40 entries were filed
under a surface they only partly match — cline is "an SDK, IDE extension
or CLI assistant" in one `extension` slot, Reasonix ships CLI, desktop
and VS Code under `cli`, warp is a terminal filed as `ide`.
Tags cover five facets: surface (at least one), model access, workflow,
integration, and origin (at most one). tagVocabulary in validate.go is
the single source of truth — the validator, its error messages, and the
dashboard's filter chips all derive from it, the last via a new facets
field in site/data.json.
The dashboard now filters on tags with multi-select chips grouped by
facet: OR within a facet, AND across facets, plus a clear-filters
control, and search matches tags as well as name and description. Only
tags some row actually carries get a chip, so chips and rows cannot
disagree. Tag pills are tinted per facet, replacing the category badge.
All 40 entries are tagged from each repo's own README, topics and docs;
CONTRIBUTING documents every tag and the evidence rule for applying one.
A leftover `category:` key now fails validation with a message naming
its replacement, rather than being silently ignored.
README.md and data/history.jsonl are the regenerated updater output.
The maintenance criterion was unfalsifiable, so entries went years
without a push before anyone noticed by hand. The updater already
fetches pushedAt; warn when it is older than 90 days, alongside the
existing rename and archival annotations. Archived repos keep their own
warning rather than getting two.
Quantify the criterion in the README and CONTRIBUTING: dropped after 6
months idle, flagged past 3, with removal still a human decision.
Also correct two CONTRIBUTING claims the code contradicts — duplicates
are rejected by CI rather than ignored at run time, and renames do carry
history over once canonicalKeyMigrations has the old key.
README.md and site/data.json were written with os.Create/os.WriteFile,
so a write that failed midway left the repo front page truncated, while
history.jsonl already used a temp-file-plus-rename. Extract that pattern
into atomicWriteFile and route all three writers through it.
Also sort snapshots by date when reading history.jsonl: delta windows
pick the newest snapshot inside the window by scan order, which silently
produces wrong deltas if a hand edit or a merge of two concurrent runs
interleaves lines.
Cover the README renderer, which had no test beyond sanitizeCell, and
name the generated paths as constants instead of repeating literals.
Coverage 65.1% -> 75.7%.
Adds deepseek-harness (top of the list by stars), grok-build,
openinterpreter, Codewhale, DeepSeek-Reasonix, openclaude, oh-my-pi,
open-code-review, prime-agent, jcode, DeepCode, freebuff, kimi-cli and
claurst, all meeting the inclusion criteria.
Drops bolt.new, plandex and trae-agent: no upstream push in 21, 11 and 7
months respectively.
Also points avante.nvim at its current canonical slug and maps the old
history key so its star history stays attached.
Live GitHub audit of all 29 tracked repos plus ~380 candidate slugs:
14 repos meeting the inclusion criteria are untracked (deepseek-harness
at 219.6k stars would rank first), 7 tracked repos have no push in over
three months, and data/agents.yml still carries the pre-rename
yetone/avante.nvim slug.
- notes for gpt-engineer, void, Roo-Code (archived upstream) — shown
as badges + italics on the dashboard; kept for historical value
- README Contributing now states inclusion criteria: must BE a coding
agent (not tooling for agents), ~10k+ stars, open source + maintained
- resolves ambiguity for community PRs proposing sub-bar repos