Skip to content

feat(recipes): curate category overrides (misc 28→6)#56

Merged
noahhyden merged 1 commit into
mainfrom
feat/curate-categories
Jul 20, 2026
Merged

feat(recipes): curate category overrides (misc 28→6)#56
noahhyden merged 1 commit into
mainfrom
feat/curate-categories

Conversation

@noahhyden

Copy link
Copy Markdown
Owner

Builds on #55. _categorize infers a category from a recipe's text, but the heuristic mislabels some tools or leaves them in misc:

  • a linter that says "many languages" → languages
  • a DigitalOcean CLI that mentions "Kubernetes clusters" → kubernetes
  • calculators fall through to misc

What

  • Author explicit category: for 38 recipes (36 via one reviewable _CATEGORY_OVERRIDES block in recipe_data.py; uv/tokei are hand-written, curated in their YAML). Stored value wins over inference.
  • misc drops 28 → 6 — the remaining 6 are genuinely bucket-less (calculators eva/fend/kalker, fastfetch, vdirsyncer, verilator).
  • Corrections include colima→containers, doctl→cloud, semgrep/checkov/subfinder→security, pipx/uv/virtualenv/hatch→packaging, linters (cppcheck/pylint/hlint/…)→text.

Generator

  • render() now emits category:/tags: when a row authors them — rows without still render byte-identically, so untouched files stay untouched.
  • New --rewrite mode re-renders TOOLS rows and overwrites only files that drifted (the safe backfill path); default still never clobbers existing files. Regeneration is idempotent.

Quality

  • +2 tests lock every curated recipe's category and assert it's authored (not coincidentally inferred, so the lock isn't vacuous).
  • Full suite 3530 passed; all 514 recipes lint-valid; ruff clean; live-verified category search through the MCP client.

🤖 Generated with Claude Code

`_categorize` infers a taxonomy bucket from a recipe's text, but the heuristic
mislabels some tools or leaves them in `misc`: a linter that says "many
languages" lands in `languages`, a DigitalOcean CLI that mentions "Kubernetes
clusters" lands in `kubernetes`, calculators fall through to `misc`.

Author explicit `category:` for 38 such recipes (36 via a single reviewable
`_CATEGORY_OVERRIDES` block in recipe_data.py, + uv/tokei hand-written). The
stored value wins over inference. Misc drops 28 -> 6, and the remaining 6 are
genuinely bucket-less (calculators eva/fend/kalker, fastfetch, vdirsyncer,
verilator).

Generator gains:
- `render()` emits `category:`/`tags:` when a row authors them (rows without
  still render byte-identically — untouched files stay untouched).
- `--rewrite` re-renders TOOLS rows and overwrites only files that drifted, the
  safe way to backfill a new field; default still never clobbers existing files.

+2 tests lock every curated recipe's category AND assert it's authored (not
coincidentally inferred). Full suite 3530 passed; all 514 recipes lint-valid;
ruff clean; regeneration idempotent.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@noahhyden
noahhyden merged commit f53f573 into main Jul 20, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant