question taxonomy
Every question has one home in the subject tree, plus only the extra concepts and facets that it genuinely assesses.
one path, a few facets
| level | what it means | example |
|---|---|---|
| subject | A broad branch of mathematics. | Calculus |
| unit | A coherent group within a subject. | Integral Calculus |
| topic | A specific leaf learning objective. | Area Between Curves |
| tag | How the question is approached or presented. | tag.task.proof |
Subjects and units are parents, not labels that authors attach directly to a question. A question chooses one primary topic and may choose additional assessed topics. The parent subject and unit are derived from those topic IDs.
the stored contract
Questions store stable IDs rather than labels. The catalog supplies the labels you see in the library, solve view, and future topic tree.
{
"schemaVersion": 1,
"primaryTopicId": "topic.area-between-curves",
"assessedTopicIds": [
"topic.area-between-curves",
"topic.definite-integrals"
],
"tagIds": []
}primary and assessed topics
The primary topic is the question's main intended learning objective. It determines where the question appears in the browse tree. Assessed topics are additional concepts that the question materially tests; the primary topic is always included in that list.
Do not list every prerequisite. A calculus question that uses ordinary arithmetic does not automatically assess arithmetic. This keeps one solved problem from lighting up half the tree.
tags are controlled filters
Tags are deliberately small and orthogonal to the subject tree. They can describe a task, a central technique, a meaningful representation, or a substantive context.
A tag is not a second topic. The question mode, source, and problem Elo already have their own fields, so tags such as mode.guided, source.contest, or elo.hard are not used. Representation and context are defined facets, but v1 does not yet contain active tags in those facets.
why the labels stay consistent
IDs are immutable; labels are curated display text. Labels and aliases are compared after Unicode normalization, trimming, whitespace collapsing, and locale-stable lowercasing. That means calculus andCalculus resolve to one catalog entry rather than becoming two filters.
Authors select from the catalog instead of typing free-form topics. If no existing topic fits, the question goes through taxonomy review so a new node can be defined once and reused.
when no topic fits
In a saved question draft, choose can't find a suitable topic? to propose a governed path. Reuse an existing subject and unit where possible, or propose the missing unit and subject as needed. Every request must end in a proposed topic and include a definition, rationale, examples, and non-examples. The builder shows normalized label and alias matches before the request can be saved.
existing subject → existing unit → proposed topic existing subject → proposed unit → proposed topic proposed subject → proposed unit → proposed topic
A new unsaved question must be saved first, so the request always has a real problem ID. Proposed labels remain in the request record and never become placeholder IDs in the question classification.
| request state | what it means |
|---|---|
| taxonomy request draft | The author may revise or withdraw it. |
| awaiting taxonomy review | The complete question is in review, but it has no canonical primary topic. |
| changes requested | Reviewer feedback returned the request and question to the author. |
| mapped to an existing topic | A reviewer atomically assigned a real active catalog topic. |
| accepted for catalog change | The proposal is valid, but no active topic exists yet. |
| rejected or withdrawn | The audit remains; revision, replacement, or canonical selection is explicit. |
Authors see the request state and user-visible history in the editor, preview, and question list. Reviewers use the taxonomy request queue to inspect the full question, proposed path, evidence, similar catalog entries, and history. Mapping preserves unrelated question content and always includes the primary topic among assessed topics.
a worked example
A question asking for the area enclosed by a parabola and a line belongs underCalculus → Integral Calculus → Area Between Curves, with Definite Integrals as an additional assessed topic when the question materially tests evaluation of the integral. The old strings calculus, integration, and area are not three peer tags.