Skip to content

Decision graph

Every question is fixed-key (DESIGN D1): its wording and option list are frozen in questions.py and pinned in questions.lock.json; the variable content (the column, the site, the candidate term, the sibling AVUs) lives in the state. That is what lets one question accumulate a batch prior, an L1 temperature and an L2 head across every column and dataset. Open candidate sets are asked as one yes/no per candidate under one key and ranked by p_true, which also removes AnyJev's 26-option cap.

Step Question Kind Decides
Plan (the reasoning model) planner which ontologies are in play, which columns to annotate, what to search; hints only
Q1 column.annotate noul should this column be annotated at all (identifiers are a rule, never a model call)
Q2 column.aspect choice, K=8 taxon, environment, method, measurement, unit, data_type, location, other
Q3 column.ontology / column.ontology_fits choice K=12, or its noul twin on the gateway which registry ontology to search; masked by aspect and plan
S candidates code OLS search, prefix filter, dedup, cap
Q4 term.fits noul per candidate is this candidate the right term at the right specificity (one key for column, site, unit and taxon scopes)
Q7 avu.value_kind choice, K=4 term label, site code, column name, or top data value (after deterministic pre-rules)
Q8 avu.keep noul keep this AVU given its siblings
H human pick MRTR the curator's choice is authoritative and becomes a label
W write code one DuckLake snapshot per run and path

The registry, the aspects and the value kinds are in mesa_anyjev.registry; the ontology registry is the ten ontologies allowed by the neon-avu-eval prompt plus TAXRANK and GENEPIO (every prefix with at least five valid evaluation AVUs, DESIGN D7).