| name | curate-category |
| description | Use when an editor owns a category and wants to edit its definition, litmus, axis weights, scoring recipe, or curate (add/remove/reorder) its product roster in os-ai-map. |
Curate a Category
A category editor owns one file: sources/categories/<slug>.yaml. It holds the
category's definition, litmus test, axis weights, scoring recipe, and the ordered
product roster (the array order is the display order).
Steps
- Open
sources/categories/<slug>.yaml.
- Edit any of:
display_name, strapline, weights.{adopt,cap},
scoring_recipe, comments, and the products: roster. The name field is the
slug; do not rename it after creation. To regroup or reorder categories across
arcs, edit sources/taxonomy.yaml: that is the only place arc grouping and
cross-category display order live (a category file no longer carries arc or order).
- To add a product, it must already have a
sources/products/<slug>.yaml and a
sources/scores/<slug>.yaml (use the add-product skill first), then append its slug
to products:. A product slug may appear in exactly one category roster.
- Reorder by moving slugs within
products:.
- Validate:
uv run python -m build.validate: must print 0 error(s).
- Rebuild + preview:
uv run python -m build.serialize && uv run python build/render.py,
then uv run marimo export html notebooks/ai-stack-map.py -o /tmp/preview.html.
Preview only: do not commit build/notebook_data.json or notebooks/ai-stack-map.py
(a bot regenerates them on merge; CI blocks PRs that hand-edit them).
- Open a PR. Do not deploy UDMs or publish. That is a maintainer step (see
docs/runbooks/).
Boundaries
- Read-only on the warehouse. No MCP, no uploads.
- The
strapline is the only hand-authored caption in the notebook — every number
(header counts, verdict badges, openness-mix chips) is computed at render time and
auto-syncs. After adding/removing products, re-check that the strapline's claim still
matches the category's current openness mix and standout verdict; it does not update
itself and silently goes stale (e.g. "split down the middle" once the mix shifts to
mostly-open).
- One product, one category: validation enforces it. If you want a product moved,
remove its slug from the old roster and add it to yours in the same PR.
- Adding a brand-new category also requires adding its slug to an arc in
sources/taxonomy.yaml, or validate fails with
"must appear in exactly one taxonomy arc".