The hardware and bandwidth for this mirror is donated by METANET, the Webhosting and Full Service-Cloud Provider.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]metanet.ch.
PedonRecord
class, the registry and classify_all(). The full suite
still runs wherever NOT_CRAN is "true"
(devtools and the GitHub checks).NOT_CRAN is
"true". The vignettes shipped with the package and on the
website are built with every chunk run; the CRAN check rebuilds them
without running the code.classify_hierarchical()) whose first level has no class
that passes but some left undecided for lack of data now names them, in
the order of the key, as the FAO-Unesco legends already did:
"[Undecided in the South African soil classification (1991): Inanda ([Ia]), Arcadia (Ar), or not classified]".
The levels stay empty, rsg_or_order is NA and
provisional_because lists the candidates, so the app’s card
shows the name instead of “Not classified”. The name stays
NA (“Not classified”) only when every class of the first
level fails. The two warnings that contradicted each other (“No class of
the forms key passed, so the profile is not classified” and
“Provisional: 2 class(es) tested before the assigned one could not be
decided”) are replaced by one that says the key cannot decide between
the candidates. Of the national keys, only the South African key of 1991
and the CPCS 1967 have no residual class at their first level, so only
they reach this case; the CSSC, ASC, NZSC, HSCS, SCSJ, CSCJ, the Russian
key of 2008, KA5 and CST 2001 end their first level with a residual
class, the RP 2008 names its undecided references already, and the
FAO-Unesco legends of 1988 and 1974 keep their own wording. Under the
South African key, 18 of the 44 canonical profiles that gave no name now
name their candidate forms (Hugo’s decision, 2026-11-11).thresholds.yaml vertic_pi_clay,
readings.yaml). The canonical Ferralsol (and the
Latossolo), whose A is strong granular with 50 % clay, read as humic A
over a red apedal B and key to Inanda, decided
("Inanda, [Ia]1100 Himeville, clay"), instead of no name;
the Nitossolo keys to Shortlands with its family undecided
("Shortlands, [Sdx110], clay"), and the Nitisol loses
Arcadia from its candidates (Hugo’s decision, 2026-11-11).make_ferralsol_canonical()
(and make_latossolo_canonical(), built from it) now has
weatherable_minerals_pct (2, 2, 1, 1, 1) and
water_dispersible_clay_pct (20, 12, 4, 0, 0), values a
Latossolo has, which the ferralic B of the FAO-Unesco legend of 1988
asks for. The legend of 1988 keys it to Haplic Ferralsols (Podzols left
undecided before it) instead of undecided between six groups; the legend
of 1974 decides the oxic B of its units and keys it to Humic Ferralsols
(organic matter 1.42 % weighted over 100 cm, at least 1.35 %), instead
of Orthic Ferralsols with Humic undecided. No other key changes for
these two profiles (Hugo’s decision, 2026-11-11).No classification changes; every profile keys as in 0.9.400.
NOT_CRAN unset)
are skipped on CRAN: 164 tests in 84 files. One test per classification
system still runs there: the new
test-v09401-cran-core-keys.R classifies one example through
each of the SiBCS key and the twelve national keys that had none on CRAN
(NZSC, HSCS, SCSJ, CSCJ, CPCS, the Russian 2008 key, RP 2008, KA5, the
South African 1991 key, CST 2001, FAO 1988 and FAO 1974); WRB 2022,
USDA, CSSC and ASC keep their own fixture tests. The CRAN-mode test run
goes from 42 s to 33 s on this Mac (elapsed, the tests and the loading
of each file). With NOT_CRAN=true every test runs, as
before.classify_with_uncertainty() draws 5 perturbations instead
of 50. The examples that reach the network
(read_wosis_profiles_graphql(),
read_wosis_layers_graphql() and the USDA axis of
coverage_report()) run only in an interactive session with
a connection.switch() calls name
their first argument EXPR, as an alternative named
E partially matched it; head() and
modifyList() are called as utils::head() and
utils::modifyList().NEWS-archive.md in the source repository, which is not part
of the package.The classifiers do less repeated work; no name, code, qualifier, trace, evidence, warning or other part of a result changes.
load_rules()
reads the YAML files of a system once per session, and
resolve_wrb_qualifiers() its qualifier lists
(qualifiers.yaml) likewise; before, every classification
read them again (and looked for them on disk). A rule set is an R list,
so a caller that changes its copy does not change the cache.classify_wrb2022(), classify_usda(),
classify_sibcs(), the national keys (through
classify_hierarchical()), run_taxonomic_key(),
run_taxa_list(), resolve_wrb_qualifiers() and
the family functions open a memo for the length of their call. Inside
it, the diagnostics that the keys call again and again are computed once
per pedon, arguments and soilKey.* options: the twelve USDA
orders (each order calls every order before it, so a USDA classification
called gelisol_usda() 512 times),
cryic_conditions(), spodic(),
albic(), .argic_impl(), mollic(),
ferralic(), the WRB limiting layers
(.wrb_limiting_layers(), read by many qualifiers) and the
diagnostics they rest on, and the SiBCS B horizons and attributes that
its levels call several times. The memo keeps a copy of the horizon
table and the site each pedon had: a pedon whose horizons or site are
replaced or changed in place inside the call starts afresh, and the memo
is dropped when the call returns, so a pedon modified after a
classification is read anew by the next one. A diagnostic called on its
own is not memoised. Each call still gets a new
DiagnosticResult (a copy, with the results nested in its
evidence copied too), as the keys change some results they receive, and
the warnings and messages of the first call are given again at each
later one..desg_master(), the older notation, the
declared designation_system) is kept in a bounded session
cache, each entry checked against the designations and the notation it
was read with.classify_with_uncertainty() perturbs
each column in a plain vector written back once, with the same random
draws in the same order, instead of writing each cell into the horizon
table.All in R/memo.R, except the perturbation.
coverage_report() follows a memoised diagnostic to its
.<name>_uncached() computation, so the coverage it
reports is unchanged.
The results were compared before and after, the whole result object
of each classification (with its trace, evidence, warnings and messages)
serialised: 29,738 results, 0 differences: the 44 canonical profiles
under every key (with the WRB specifiers and the USDA and SiBCS
families, 880), every example of every key (1,252),
classify_with_uncertainty() on five profiles under three
systems (15), the 974 ISIS reference profiles under the 17 keys (16,558)
and 649 AfSP profiles under the 17 keys (11,033). The memo has its own
tests (test-v09400-memo.R): a pedon modified after a
classification, or whose declared notation changes, is classified as a
new one.
CPU time per profile (this Mac, the same load for both):
| 0.9.399 | 0.9.400 | |
|---|---|---|
| WRB 2022, the 31 canonical WRB profiles | 0.118 s | 0.052 s |
| USDA, the same | 0.468 s | 0.036 s |
| SiBCS, the same | 0.088 s | 0.027 s |
classify_with_uncertainty(), Ferralsol, n = 10 |
24.7 s | 13.9 s |
| the 17 keys on the 974 ISIS profiles (first version of the memo) | 3,216 s | 1,943 s |
| the test suite as CRAN runs it (sum over the tests) | 51.4 s | 43.1 s |
The national keys gain less: their own readers do most of their work.
load_afsp_pedons() now reads the site fields of AfSP by
the words of its dictionary
(AfSP012Qry_DictioClassValues.dbf, when it is in
afsp_dir; without it ParMat and LndForm are not read):
Drain into drainage_class (excessively,
somewhat excessively, well, moderately well, imperfectly, poorly, very
poorly drained).ParMat into parent_material, the words of
the code composed with those of its ancestors (“volcanic rocks, acid”;
“clayey, fluvial, calcareous”; an ancestor whose words the next one
repeats is left out, so MA1 is “acid metamorphic rocks, quartzite”). The
codes of the unconsolidated deposits that the dictionary does not list
(Uload_afsp_pedons() returns), 2 (A,
U000).LndForm into landform, only the forms that
say something of the origin of the material: depression (LD),
low-gradient footslope (LF) and valley floor (LV). The general relief
classes (level, sloping and steep land, plain, plateau, dissected plain,
hill, mountain, escarpment zone, valley) are not read: 295 of the 2739
profiles with a WRB 2006 group and a landform recorded.Two regular expressions that read the parent material are fixed:
R/diagnostics-ka5-horizons.R): “ton” matched inside
limestone, sandstone, siltstone, ironstone and plutonic rocks. The clay
and clay-marl stone is now read by whole words (Ton, Tonstein,
Tonschiefer, Geschiebemergel, clay, claystone, marl, shale, pelite). On
the AfSP profiles below it no longer matches 42 parent materials
(plutonic rocks, sandstone, limestone, ironstone) and changes no KA5
name.R/diagnostics-scsj.R,
R/diagnostics-nzsc-groups.R,
R/diagnostics-nzsc-subgroups-zlme.R): a pyroclastic breccia
or another consolidated pyroclastic rock is rock, not ejecta or tephra.
On AfSP this changes 2 SCSJ names (Allophanic Andosols to Calcareous
Eutrosols), the same 2 CSCJ names (which share the SCSJ reader) and 1
NZSC name (Typic Tephric Recent to Weathered Orthic Recent Soils).The 926 example and canonical profiles of the package (the 31 canonical WRB profiles, the examples of every national key and the 503 FAO examples) keep their names under KA5, SCSJ and NZSC.
Measured on AfSP (offline; the 1149 profiles of 0.9.397: all 649 South African profiles with a WRB 2006 group and 500 others from 31 countries, seed 397), 0.9.397 against 0.9.399, names changed per key. The field that drives each change was found by removing the drainage, the parent material or the landform from the new profiles one at a time; the landform drives none.
| Key | Names changed | Of them South African | What drives it |
|---|---|---|---|
| WRB 2022 | 2 | 0 | parent material (the Fluvic qualifier) |
| SiBCS | 34 | 21 | drainage (23 to Gleissolos, 9 gleissolicos) |
| USDA | 0 | 0 | |
| FAO 1988 | 51 | 4 | parent material (the lists of groups left undecided) |
| FAO 1974 | 64 | 15 | drainage 33, parent material 22, the two together 9 |
| CPCS 1967 | 7 | 0 | parent material (5 to alluvial or volcanic apport soils) |
| RP 2008 | 26 | 5 | drainage 24, parent material 2 |
| CSSC | 0 | 0 | |
| ASC | 39 | 8 | drainage: 22 to Hydrosols, 17 Podosols (13 aquic or semiaquic, 4 aeric) |
| NZSC | 4 | 3 | parent material 3, drainage 1 |
| SCSJ 2017 | 27 | 1 | parent material (23 to Fluvic soils or Andosols) |
| CSCJ 2011 | 24 | 1 | parent material (19 to Lowland soils or Andosols) |
| CST 2001 | 45 | 26 | drainage 43 (26 Gleyosols no longer read so), parent material 2 |
| Russia 2008 | 2 | 0 | parent material |
| KA5 | 1 | 1 | drainage |
| HSCS 2024 | 17 | 0 | parent material |
| ZA 1991 | 0 | 0 |
Agreement with the AfSP labels at the level of the reference group (major soil group for FAO; the AfSP label codes read by the unit and group codes of the edition), the same 1149 profiles, Wilson 95 % intervals:
| Key | Labels | Agree before | Agree after | Decided before | Decided after | Agree among decided, before | after |
|---|---|---|---|---|---|---|---|
| WRB 2022 RSG vs WRB06rg | 1149 | 333, 29.0 % (26.4-31.7) | 333, 29.0 % (26.4-31.7) | 1149 | 1149 | 29.0 % | 29.0 % |
| FAO 1988 group vs FAO88 | 1145 | 210, 18.3 % (16.2-20.7) | 210, 18.3 % (16.2-20.7) | 477 (41.7 %) | 477 (41.7 %) | 44.0 % (39.6-48.5) | 44.0 % (39.6-48.5) |
| FAO 1974 group vs FAO74 | 404 | 102, 25.2 % (21.3-29.7) | 102, 25.2 % (21.3-29.7) | 239 (59.2 %) | 240 (59.4 %) | 42.7 % (36.6-49.0) | 42.5 % (36.4-48.8) |
No WRB reference group changes. The FAO 1988 grouping changes on 2 profiles (labelled Vertisols and Cambisols: Fluvisols to Regosols), the FAO 1974 grouping on 3 (unlabelled: Fluvisols to Regosols; labelled Podzols: none to Cambisols; labelled Cambisols: Fluvisols to Regosols); none agrees before or after.
The systems added since the last published app (Germany KA5, South Africa 1991, China CST 2001, the FAO-Unesco legends of 1988 and 1974) were already offered on the Classify and Pedon tabs; four gaps are closed.
.fao_phase_lines()), in the session’s language.also_when of
inst/rules/fao1988/crosswalk.yaml) are translated in a new
file, inst/i18n/fao_crosswalk_pt.yaml. Class names stay as
the books print them. In English every line is the one of before, byte
for byte; the words now come from
inst/i18n/report_translations.yaml (22 new keys in each
language).system.yaml gains a field citation_short
(authors, year, title, publisher, no editorial notes); the Thanks card
falls back to the full citation, then to the name, and the
report keeps the full citation.name_pt of
phases.yaml, both editions) and of the crosswalk
conditions; “[parte dos …]” for the 1974 classes that only partly go to
a 1988 class; no “chaveado” in the Portuguese texts of the
crosswalk.test-app-national-systems.R now checks that every national
system of the registry has its examples on the Pedon tab and that a
sample of them (first, middle, last) loads and keys to its class with
the registry’s classifier; new tests cover the FAO phases on the card,
the Portuguese notes, and the Thanks card in both languages.Every classification is unchanged.
Three confusions of the AfSP benchmark of 0.9.394 were examined and
decided by Hugo (2026-11-10). The decisions are recorded in
inst/rules/za1991/readings.yaml.
vertic_pi_clay in
thresholds.yaml, flagged as a stand-in (all 71 vertic A of
the land type survey have 30 % clay or more; van Huyssteen 2020).
Elsewhere Q17 stands, and a plasticity index recorded decides as before.
Without the structure gate the melanic A of the 35 melanic-form examples
became undecided; with it the examples are unchanged.Mottling, 99 South African layers,
none in the 5 Bainsvlei profiles), and the loader did not read it. A new
horizon attribute, mottles_present (logical), holds it:
TRUE with no amount or colour leaves the soft plinthic B,
the low-chroma mottles of the signs of wetness and the signs of wetness
of a soft carbonate horizon (FC 15) undecided, and then only the amount
of the mottles (redoximorphic_features_pct) decides:
plinthite or ferric nodules recorded, even as 0, do not stand in for it.
FALSE or not recorded, no mottles. The key is not changed;
Bainsvlei stays unreached from the AfSP data.load_afsp_pedons() now reads: Mottling into
mottles_present; ClyMinera into
clay_mineralogy (montmorillonitic and SM as smectite,
kaolinitic, illitic, vermiculitic, interstratified; chloritic,
sesquioxidic, allophane, KA/IL and gibbsite have no
clay_mineralogy word and are read as not recorded, with a
provenance note); and Sticknss into stickiness
(sticky as moderately sticky). Each code read goes to the provenance.
ClyMinera is an estimate (a dominant clay mineral given to the layer),
not a measurement: it is recorded with the provenance
inferred_prior (confidence 0.5), so the evidence grade of a
result on such a profile drops to C, as for the other estimated values;
the names are not changed by it (383 of the 1149 profiles below carry
it). The site fields Drain, ParMat and
LndForm are not read in this version.
inst/schemas/horizon-attributes.yaml,
inst/schemas/pedon-schema.json and
inst/ATTRIBUTES.md carry the new attribute.
Measured on AfSP (offline; 1149 profiles: all 649 South African profiles with a WRB 2006 group and 500 others from 31 countries, sampled with seed 397), classified with the 17 keys before and after: names change only in three keys.
| Key | Names changed | Of them South African | Cause |
|---|---|---|---|
| FAO 1974 | 9 | 8 | clay mineralogy (Chromic Cambisols and Orthic Solonchaks to Orthic Luvisols 2 each, Haplic to Luvic Phaeozems 2, Chromic to Eutric Cambisols 1, Eutric Cambisols to Orthic Luvisols 1, an undecided profile to Eutric Nitosols 1) |
| RP 2008 | 12 | 7 | clay mineralogy (fersialsol insature to non rattache 8, to brunisol dystrique or eutrique 3; non rattache to brunisol dystrique 1) |
| ZA 1991 | 13 | 6 | B1s 9, mottles present 4 |
WRB 2022, SiBCS, USDA, FAO 1988, CPCS, CSSC, ASC, NZSC, SCSJ, CSCJ,
CST, the Russian, KA5 and HSCS keys give the same names. Recorded as an
estimate, the clay mineralogy changes the same names (the FAO 1974
Luvisols included): the provenance lowers the evidence grade, it does
not change a test. The soft carbonate horizon and the rule on plinthite
with mottles present change no name on these profiles. The AfSP
benchmark row of the suite (benchmark_afsp() on
load_afsp_sample()) reads a snapshot built by the loader of
v0.9.77, so the loader change does not reach it.
The AfSP run of the South African benchmark (641 scored) with the profiles of the new loader:
A second offline benchmark of the FAO-Unesco legends,
inst/benchmarks/fao_wosis.R, compares both editions with
the FAO-Unesco names of ISRIC’s WoSIS profiles (fields
faoMajorGroup, faoSoilUnit,
faoPublicationYear): a label of 1974 with
classify_fao(edition = "1974"), a label of the year 1997
(ISRIC’s reprint of the Revised Legend, read as fao1988, Hugo’s decision
Q1) with classify_fao(). Like the ISIS benchmark it
downloads nothing: it reads a cache folder saved by the user
(listing.rds, the profile records;
raw/<profileId>.rds, the layers of each profile;
optionally manifest.csv) from its first argument, the
option soilKey.wosis_fao_cache,
SOILKEY_WOSIS_FAO_CACHE or the user cache folder. Run with
no cache found it says so and exits cleanly; a cache path given
explicitly that does not exist stops with an error. WoSIS data are not
shipped; the report cites them as ISRIC asks
(wosis_citation(), Batjes, Calisto and de Sousa 2024) with
the date of the download.
The layers of the cache are read exactly as the live reader reads
them: the conversion step of read_wosis_layers_graphql()
(depth order, the shift of an organic surface to 0 cm, units,
provenance, the most restrictive licence of the layers) is now an
internal function, .wosis_layers_to_horizons(), which the
live reader calls after its download. The live path is unchanged: on
synthetic replies and on 300 saved profiles its output is byte-identical
before and after.
How the labels are scored (Hugo’s decisions of 2026-11-10). A label
“.fao_match_label() in the
edition of its year, exact names only; a label of another year is
counted and not scored. A unit that is no unit of its edition (the
national adaptations: “Chromic Regosol” of 1974, “Plinthic Calcisol” of
1997) is scored at grouping level only and listed as an unmatched unit
(Q3). WoSIS codes every Kastanozem of 1974 “KS” and every Solonchak
“SC”, the codes of 1988, under names that are valid 1974 names: they are
read by name as K and Z and scored with the rest of 1974. Profiles of
the dataset WD-ISIS are left out, since the ISIS benchmark scores them
(Q7). All licences are scored, with the figures on the CC BY profiles
beside them (Q4). The Legend of 1974 is also given for Mexico and for
the rest. The headline gives four figures together (Q6): agreement over
all labels (a fall-through counts as a disagreement), coverage (soilKey
names a grouping), agreement among the covered labels, and “not
contradicted”: the grouping agrees, or the label’s grouping is one
soilKey left undecided, the candidates of a fall-through or a grouping
tested before a provisional class. Beside it, a shuffled-label baseline
(the same rate with the labels permuted within the subset, 200
permutations, fixed seed, the caller’s random numbers untouched), and
the agreement among firm classifications (covered and not
provisional).
The sample was drawn proportionally with a minimum of one profile per stratum (edition x country x group code), which over-represents the small strata: in 1988 the 996 strata that owe their one profile to the minimum make 33 % of the sample but 12 % of the profiles with layers. The benchmark reads the design back from the cache and weighs each profile N_h / n_h; the weighted figures are the headline, with Wilson intervals on Kish’s effective sample size (an approximation), and the unweighted figures beside them.
The run of 2026-11-10 on 6,000 WoSIS profiles with layers, 3,000 per edition (38,695 profiles carry an FAO-Unesco label, 33,203 with layers; no profile of the sample had more than 40 layers), read with the 15 properties of soilKey’s WoSIS map that the keys use (pH KCl, P retention and the 1500 kPa water content added to the first download; no profile of the sample has the last); 139 WD-ISIS profiles left out, 5,861 scored. Weighted (unweighted in brackets):
Most disagreements are fall-throughs: WoSIS serves no base saturation, Munsell colour, Fe and Al fractions or gypsum, often no horizon designation and no carbonate, so most tests stay undecided as Hugo’s rule asks and the soil names its candidates (the Gypsisols are a candidate in 2,300 of the 2,629 revised fall-throughs). But where soilKey names a grouping it is more often wrong than right: 196 of the 296 covered revised labels and 471 of the 765 covered labels of 1974 disagree. In 1988 the wrong ones are mostly Cambisols for Vertisols (24), Chernozems (20), Phaeozems (16), Calcisols and Fluvisols (12 each), and Regosols for Leptosols (11); in 1974 Regosols for Rendzinas (55), Phaeozems (46) and Lithosols (43), Phaeozems for Rendzinas (41), and Luvisols for Xerosols (35) and Acrisols (29). Almost all covered classifications are provisional (a grouping tested before them was left undecided); among the firm ones the revised groupings agree for about 60 %, while 1974 has too few (13) to say. Every classification is unchanged.
Since 0.9.240, 0.9.250 and 0.9.256 the WRB, SiBCS, FAO-Unesco and
Chinese diagnostics read the older notation of the horizon designations
(in use until about 1990: the A2 is the eluvial horizon, the E of today;
the B3 the transition to the C, the BC of today; the “(B)” the B
incipiente, the Bi of today) when a profile shows a mark of it (a B
followed by a number, an A or a C followed by two figures, a “(B)”, “ir”
in a B, “pl” in a B or C). The reading took no account of a notation
declared in site$designation_system, so a profile declared
in the FAO notation of 2006, which writes “B1, B2, B3” for three parts
of a B, had its A2 read as E and its B3 as BC, and “(Bw)R” read as
“BiwR”. Found while building the FAO-Unesco module.
As Hugo decided (Q1 to Q9, 2026-11-10), a declared notation now
decides before the marks (.desg_declared_notation(),
R/utils-wrb-ch3-v09220.R):
asc with or
without an edition, as asc4 or asc2021, and
its aliases: A1, A2, A3, B1, B21, B3), the French CPCS of 1967
(cpcs, cpcs1967, french,
fr), the FAO-Unesco Legend of 1974 and the FAO Guidelines
of 1977 (fao1974, fao1977, the only older ones
among the FAO values), the USDA Soil Survey Manual of 1951 and its
supplement of 1962 (usda1951, ssm1951,
usda1962, ssm1962,
soilsurveymanual1951, soilsurveymanual1962)
and the Brazilian notation in use until 1988 (br_pre1988).
The USDA of 1975 and the Soviet notation of 1977 are not old here;fao, fao2006, wrb and its
editions, usda, kst, sibcs (the
notation of Santos et al., 2015), the CSSC, NZSC, SCSJ and CSCJ values,
and the South African, German, Russian and French notations as their own
readers recognise them (so “zambia”, “satellite” or “dbg-wrb” are not
taken for a notation). In a present notation a “(B)” loses its
parentheses and keeps its letters (“(Bw)R” is read “BwR”, “(B)km”
“Bkm”), where the older or undeclared notation reads it “Bi” as
before;NA,
none, SA …), nz_legacy or a value
soilKey does not know, the marks decide as before;
PedonRecord$validate() notes a value it does not know.
Declared values are compared lower-cased, accents folded and all but
letters and digits dropped, a value that is not UTF-8 read as
CP1252.The site reaches every reader as an explicit argument:
.desg_master(), .desg_old_notation() and
.h_master() take site, and so do the helpers
that received only the horizons (the FAO readers of the master, the
solum, the buried horizons, the rock structure and the texture, the WRB
plough, subsurface, cemented and secondary carbonate and gypsum readers,
the SiBCS readers of the B in the first 100 cm, the abrupt textural
change, the histic and organic layers and the textural ratio, the
Chinese horizon kind). The readers that read one designation at a time
now read it with the notation of its whole profile: the cemented layers
of the WRB qualifiers (each part of “Bt/Cr” read with the parts of the
profile) and the plough designation of the Brunic qualifier.
The NSD reader (read_nsd_pedons()) now declares
designation_system = "nz_legacy" (it declared
"nzsc"): the National Soils Database surveys are written in
the New Zealand notation, many of them in its older form (A11, A12, B21,
B22, B3 beside Bw). Every reader that compares the notation reads
nz_legacy (or “NZ legacy”, compared as a key) as it read
nzsc: the NZSC, SCSJ, CSSC, ASC and FAO 1988 notation
tests, the frozen-layer pattern and the CPCS, which reads the f of a New
Zealand B as iron, not frozen. The older-notation reading is judged from
each profile’s own marks. The ASC key also reads asc with
an edition (asc3, asc2021) as its notation.
The ISIS reader keeps fao2006 (Q6).
inst/schemas/site-attributes.yaml lists the values the code
compares (fao, fao2006, wrb and
its editions, usda, sibcs,
fao1977, usda1951, ssm1951,
usda1962, br_pre1988, nz_legacy)
and inst/ATTRIBUTES.md is regenerated.
Measured on 2026-11-10, before and after:
make_*_example()
choice and near miss, the FAO 1988 and 1974 examples, the ZA forms and
the 225 KA5 subtypes) under 17 keys, 22,134 names identical.fao2006): readings change in 8
profiles (present-notation designations such as “Ah, B1, B2, B3, B4”,
“A1, A2, BA, Bt1, Bt2, B3” no longer read as the older notation, “(Bw)R”
read “BwR”); names change for 3: SiBCS on 2 (CL006 Argissolos
Bruno-Acinzentados to Neossolos Fluvicos, GH008 Cambissolos Haplicos to
Neossolos Regoliticos) and the candidates of 1 undecided FAO 1988
profile. WRB, USDA and FAO 1974 unchanged, so the ISIS benchmarks of
0.9.392 are unchanged.asc): readings change in 437
(an Australian A2 read as E, a B3 as BC, where the profile has no other
mark); names change on 306 profiles: the FAO 1988 candidates of 300
undecided profiles (299 stay undecided with another list, 1 becomes not
classified), SiBCS on 10 (mostly Neossolos Regoliticos to Argissolos, 2
to Espodossolos) and WRB on 4. The ASC key does not read these
designations, so the NatSoil benchmark is unchanged.asc): readings change
in 34; names change on 20 profiles (22 names): the FAO 1988 candidates
of 18 undecided profiles, WRB on 2 (a Cambic qualifier gained) and SiBCS
on 2. The SALI benchmark (ASC key) is unchanged.nz_legacy): no reading
changes, and all 1,330 profiles give the same names under the 17 keys as
before (22,610 names; the 183 profiles with no horizons stop with the
same error before and after).Four readings examined on the AfSP benchmark of 0.9.393 and decided
by Hugo (2026-11-10). They are recorded in
inst/rules/za1991/readings.yaml; the 73 form examples, the
404 family examples and the special cases (555 runs) keep their names
and provisional status.
B1: a B at the surface needs more than 100 mm.
The reading D7 (a red or yellow-brown apedal or neocarbonate surface
layer with under 0.3 % organic carbon directly over hard rock, a
lithocutanic B or a dorbank is that B, the profile truncated) now holds
only when the layer is more than 100 mm thick
(surface_b_thick in thresholds.yaml, flagged).
A thinner layer is not read as a B at the surface, so a thin carbon-poor
topsoil on hard rock is tested as a topsoil and keys to Mispah, as the
surveyors wrote it. The limit is over 100 mm while the lithosol rule of
the general rules takes an orthic A under 100 mm, so a topsoil of
exactly 100 mm is neither a lithosol nor read as a B. A layer whose
thickness is not recorded (top or bottom missing) leaves the reading
undecided, the orthic A or the B; no AfSP profile is affected. On AfSP,
D7 fired on 6 profiles: the 5 labelled Mispah (A of 50-100 mm, read as
Clovelly) and one labelled Hutton (300 mm, red), which keeps its Hutton.
Of the 5, one is now Mispah and 4 stop with Mispah among the forms left
undecided (their A stays undecided as organic O or melanic A; examined
apart, for Hugo).
C1: cutans not recorded leave the pedocutanic B undecided. When clay films are not recorded, soilKey’s argic horizon stood in for the cutans both ways; but the pedocutanic B asks for prominent cutans, not a clay increase, so argic not holding refused the B. Now, in the pedocutanic test only, argic not holding leaves the cutans undecided; argic holding still stands in, flagged. The other refusals of the cutans reader (no peds, carbonate neoformations, a layer outside the zone of the clay maximum of an argic horizon) stand. The shared reader of cutans used by the other national systems is unchanged. On AfSP (no layer records clay films), the 5 Bonheim keyed as Inhoek now stop with Bonheim among the candidates; one Rensburg keyed as Willowbrook stops too, and 11 Swartland and Valsrivier profiles that stopped now have their label among the candidates.
A1: the humic A of 1977 in the benchmark (the key
unchanged). The thin humic A came with the second edition; the
humic A of 1977 had to be thicker than 450 mm. The AfSP report gives a
second figure, flagged, beside the main one: for labels from a survey
before 1991 or written as a 1977 binomial (a label with neither is not
read so), soilKey’s humic form with a humic A of 450 mm or less is
scored as its orthic counterpart (Inanda as Hutton, Magwa as Clovelly,
Kranskop as Griffin, Sweetwater as Oakleaf, Nomanci as Glenrosa;
internal .za_humic_1977() in
R/za-benchmark.R). Lusiki is left out: it has no single
orthic counterpart (Valsrivier or Swartland by what lies below the
pedocutanic B). The organic carbon is not corrected: AfSP gives no
method for the South African SOTER profiles, their values read as
reported by the laboratory, and the same institute’s WISE profiles are
coded Walkley-Black.
M1: no dry colour and a moist value over 3 is not
melanic. The melanic A needs a dry value and chroma of 3 or
less. A layer with no dry colour was left undecided for the melanic
colour (default 9), even with a light moist colour; but the dry value is
never darker than the moist, so a moist value over 3 now refuses the
colour, flagged (dry_value_from_moist). A moist value of 3
or less stays undecided, as before. The 200 mm window of the organic O
below a description that ends in rock is not changed (O1 not adopted).
Two older tests that exercised default 9 on a layer of moist value 4 or
5 now give that layer a moist value of 3. On AfSP, 30 profiles that
stopped are now decided: 16 agree (Clovelly 8, Mispah 5, Griffin, Hutton
and Katspruit 1 each) and 14 do not, where the B or the material below
is not recognised from the data (Avalon as Clovelly 5 and as Pinedene 1,
Kroonstad as Klapmuts 2, Westleigh 2, Clovelly as Hutton, Glenrosa as
Hutton, Longlands as Pinedene and Valsrivier as Katspruit 1
each).
The AfSP run of 2026-11-10 (641 scored), with all four readings:
A new script, inst/benchmarks/za1991_afsp.R, compares
classify_za1991() with the local classification of the
South African profiles of the Africa Soil Profiles database (AfSP 1.2,
ISRIC; field LocalCls of
AfSP012Qry_Profiles.dbf). The script is offline: it reads
the AfSP DBF files from the directory given as its first argument, the
option soilKey.afsp_dir or the environment variable
SOILKEY_AFSP_DIR, stops (from R) or exits cleanly (as a
script) when there is none, and downloads nothing. AfSP is CC BY-NC; no
profile or label of it is shipped with soilKey, and the tests use
synthetic labels and profiles only. Every classification is
unchanged.
The labels are read by a new internal reader,
.za_match_label() in R/za-benchmark.R, as Hugo
decided (2026-11-10):
"<Form> <Series>"
(with or without a comma after the form) is a label of 1977 and is
scored at the form level as its 1991 namesake;
"<Form> Form, <Family> Family" is a label of
1991; a form named alone is reported apart. The report gives the
agreement overall and by era, and notes that some forms were redefined
in 1991.inst/rules/za1991/key.yaml and the family to a
family name of that form in families.yaml (case ignored).
The script’s explicit list of misspellings (Avanlon, Houhoek, Houwbroek
and Kraanskop, with or without a comma) is tried only when a label is
not read as it stands, and such matches are flagged; anything else is
unmatched, never guessed.forms:<code> entries of
provisional_because).The run of 2026-11-10 on AfSP 1.2: 659 South African profiles, 646
labelled, all 646 read (4 by the listed misspellings), 641 scored (5
labelled profiles have no WRB 2006 group and are not built by
load_afsp_pedons()). 624 are binomials of 1977, 13 labels
of 1991 and 4 forms named alone; 108 of the binomials were surveyed in
1991 or later, and all 13 labels in the 1991 shape come from surveys
before 1991 (converted to the 1991 system later, by the compilers).
The main loss is the profiles that stop: most AfSP descriptions do not record what the key needs to separate the forms (the matrix colour of the lower B, cutans, slickensides, signs of wetness). Among the decided disagreements, the most frequent are a humic A where the label has an orthic A (Hutton to Inanda 8, Clovelly to Magwa 6, Griffin to Kranskop 6), Oakleaf read as Hutton (6), Bonheim keyed as Inhoek (5; in 4 of them Bonheim, tested before, was left undecided), and a thin, carbon-poor A on hard rock read as a truncated profile, Mispah to Clovelly (5).
Twelfth and last part of the FAO-Unesco soil legend. A new script,
inst/benchmarks/fao_isis.R, compares both editions with the
FAO-Unesco names ISRIC gave its reference profiles (ISIS, field
faoClassifications): the label of 1974 with
classify_fao(edition = "1974"), the label of the Revised
Legend (stored under the year of the ISRIC reprint, 1997) with
classify_fao(). As Hugo decided (Q27), it is offline and
does not change the ISIS reader: it reads a saved cache of ISIS profiles
from its first argument, the option soilKey.isis_cache,
SOILKEY_ISIS_CACHE or the user cache folder, downloads
nothing, and run as a script with no cache found says so and exits
cleanly. ISIS data are not shipped. WoSIS is left for later, with Hugo’s
go.
The labels are read by a new internal reader,
.fao_match_label() in R/fao-benchmark.R: the
edition from the publication year (1974 to fao1974; 1988, 1990 and 1997
to fao1988), the group word singular or plural, the 1974 Nitosols and
the 1988 Nitisols read in the other edition too (flagged), ISRIC’s
third-level subunit (“Ferri-”, “Orthi-”) cut off and reported apart (the
legend defines no third level, so it is never scored), the words after
the group matched to the phases of the edition, exact names only; a
variants list, empty today, is tried only on a label that is not read.
Every one of the 1,515 labels of the cache of 2026-10-29 (803 of 1974,
712 revised, on 814 profiles) is read as it stands, with its grouping
and unit; 593 revised labels carry a subunit, 212 labels a phase.
The run of 2026-11-09 on that cache, before Hugo’s decisions below (13 labels on 7 profiles with no horizons in the record are not scored):
The fall-throughs are the main loss: most profiles that stop do so
because a measurement the key needs is not in the record, most often the
gypsum content (the Gypsisols are a candidate in 271 of the 353 revised
fall-throughs; the gypsiric and gypsic tests of the Regosols, Fluvisols
and Arenosols of 1974 likewise), the pyrophosphate and oxalate Al and Fe
of the spodic B, the clay skins and the electrical conductivity.
Following Hugo’s rule, a measurement not recorded leaves its test
undecided and the soil names its candidates instead of a guess. The weak
spots the plan expected show in the confusion tables: Vertisols keyed as
Cambisols (13 of the 1974 labels, 17 of the revised ones), Andosols as
Cambisols (20 and 15), and Ferralsols as Acrisols or Cambisols (24 and
20). The report gives the agreement by edition and level with Wilson
intervals, the provisional, stand-in and fall-through counts, the
candidates left undecided, the phases and the confusion of the
groupings. soilKey’s readings of this part (the edition from the
publication year, the reading of labels, what counts in the benchmark,
and that a phase soilKey finds but a label omits is reported, not
counted as an error) are in
inst/rules/fao1988/readings.yaml and
data-raw/fao_readings.yaml, confirmed by Hugo (2026-11-10);
the vignette on cross-system classification gains a section on the two
editions. Every classification is unchanged (the fixtures of the other
systems byte-identical).
Fixed on the review (2026-11-10). The firm agreement counts only the labels soilKey classifies (it counted the fall-throughs as firm), and the provisional and stand-in columns of the agreement table say so; a profile that could not be run no longer drops an element of the results list. The crosswalk of 0.9.391: the Lithosols, Rendzinas and Rankers as units are renamed (p. 117 prints “formerly”), the Vertisols and Histosols groups the same (no group comment on pp. 118 and 126), the Calcic Cambisols split, the Dystric Podzoluvisols amended (the gleyic comment runs onto their row, p. 123), the Rhodic Nitisols new with no comment printed (bracketed, and an alternative of the Eutric and Dystric Nitosols), the Luvic Calcisols an alternative of the Calcic Luvisols (keyed before the Luvisols, p. 119); a condition may be given per target, so a Eutric Fluvisol of 1988 shows only the fluvic clause of the Gleysols of 1974, and a 1988 unit shows the alternatives that name its unit, else those of the group rows (a Calcaric Cambisol no longer shows the Haplic Xerosols). Hugo confirmed these readings (2026-11-10). The tests read the benchmark script from the installed package (so they run under R CMD check), run it end to end on a small synthetic cache, and check the edition line on constructed results instead of classifying every example.
Decided by Hugo (2026-11-10), on the causes the benchmark showed. The
ISIS reader reads the profile’s large cracking and, without a cracking
record, gilgai as cracks of 1 cm or more (the lower limit of the medium
surface cracks, 1-2 cm, of the FAO field guidelines’ classes that ISIS’s
own cracksSurface uses); small cracking stays 0.5 cm, since a small
crack may be a fine one. With neither gypsum nor an ECe recorded, an
upper bound of the ECe below 2 dS/m (the reader derives it from the EC
1:2.5) reads as no gypsum, flagged, the rule already used for an ECe
below 2; this serves the gypsic horizon of both editions. Andic
properties with Alox + 1/2 Feox of 2 % or more and a bulk density of 0.9
or less and no P retention measured are undecided, not absent; the rule
that undecided andic properties are absent unless volcanic material is
recorded applies only when fewer criteria are met (the amorphous complex
of 1974 has no such rule and was not changed). The oxic B of 1974 keeps
Q13: clay films recorded as few still count as evidence of illuviation,
a known cause of Ferralsols keyed as Acrisols or Luvisols in the
benchmark. The other consumers of the ISIS reader are unchanged: the CST
2001 and KA5 ISIS benchmarks give the same scores before and after, and
on the 38 ISIS profiles whose cracks change, the WRB and USDA results of
benchmark_isis() are the same (both ask 0.5 cm). No result
of make_fao_example() changes, and every other
classification is unchanged (the fixtures of the other systems
byte-identical).
The benchmark after these decisions, same cache:
Eleventh part of the FAO-Unesco soil legend.
inst/rules/fao1988/crosswalk.yaml holds the correspondence
of Appendix 4 of the Revised Legend (“Main changes in the revised
legend”, pp. 113-126) between the 26 major soil groups and 106 soil
units of the Legend of 1974 and the 28 major soil groupings and 153 soil
units of 1988. Every 1974 group and unit has one row: the 1988 class or
classes it goes to, or none where it is deleted, with its relation (same
name, renamed, amended, renamed and amended, merged, split, deleted),
the printed page and the comment of the appendix in soilKey’s words. The
1988 classes with no 1974 class are listed as new: the 6 new groupings
beside the Leptosols, which take the Lithosols, Rendzinas and Rankers,
and 59 units. Appendix 4 prints only the 1988 names; the 1974 class of
each row is read from the 1974 list by its name or by the “formerly” the
appendix prints. Codes only: the names are read from the rule files of
each edition.
As Hugo decided (Q8), the three changes the appendix does not flag are added in brackets: Calcaric Gleysols (Gc) to Calcic Gleysols (GLk) is a change of definition, the Plinthic Luvisols (Lp) are deleted with no 1988 row, and the Thionic Histosols (HSt) are new. Where a group comment of the appendix sends part of a 1974 group elsewhere, soilKey adds bracketed alternatives with their condition: the Luvisol units to the Lixisols and the Acrisol units to the Alisols by the CEC of the argic B, the Calcic Cambisols to the Calcisols or Gypsisols, the Calcic Kastanozems to the Gypsic Kastanozems, the plinthic units to the Plinthosols, and the units of the deleted Xerosols and Yermosols by their names. One-to-many rows stay one-to-many (Pellic and Chromic Vertisols to the four Vertisol units, Eutric and Dystric Histosols to the Folic, Terric and Fibric ones).
fao_crosswalk() (exported) returns the table, one row
per 1974 class, or with from = "1988" the 1974 classes
behind a 1988 code. print() of a result of either edition,
the HTML and PDF reports and the Pro app add one line with the other
edition: a Lixisol of 1988 is new in 1988, some Orthic, Chromic, Calcic
and Vertic Luvisols of 1974 when their argic B has a CEC below 24
cmol(+)/kg clay; an Orthic Luvisol of 1974 is a Haplic Luvisol of 1988
(renamed and amended, p. 122), or a Haplic Lixisol. The line is a note:
the table never classifies, each edition is keyed by its own text, and
every classification is unchanged (the fixtures of the other systems
byte-identical; no FAO result changes, the line is computed when
printed). soilKey’s readings of this part (the 1974 side of each row,
two comments printed between rows, the alternatives read from the group
comments, the targets of the Xerosol and Yermosol units, two slips of
the layout on pp. 115 and 124) are in
inst/rules/fao1988/readings.yaml and
data-raw/fao_readings.yaml. Decided by Hugo (2026-11-10):
all of them are confirmed as proposed.
Tenth part of the FAO-Unesco soil legend, the fourth of the Legend of
1974. classify_fao(edition = "1974") now gives the 12
phases of pp. 5-7 in $phases, beside the soil unit: stony,
lithic, petric, petrocalcic, petrogypsic, petroferric, phreatic,
fragipan, duripan, saline, sodic and cerrado (the list of p. 5 prints
“stony lithic” without a comma: two phases). Phases subdivide the units
by what matters for the use of the land and are not diagnostic for the
units (p. 5), so the unit, the group and the key trace are exactly those
of 0.9.389. Each phase is three-valued, in the same form as the phases
of 1988: status is present, absent, undecided, or not shown
where the text excludes the unit, with criterion, the page,
the criterion in soilKey’s words, the fallbacks used and what would
decide an undecided phase. Two more rows give the classes of the map
symbol (pp. 4-5): the texture class of the upper 30 cm with the classes
of 1974 (1 coarse, below 18 % clay and above 65 % sand; 2 medium; 3
fine, above 35 % clay) and the slope class (a up to 8 %, b to 30 %, c
above 30 %). The phases, their pages, criteria, numbers and Portuguese
names are in inst/rules/fao1974/phases.yaml, read by
R/fao-phases.R.
The numbers are the printed ones. Lithic: continuous coherent hard
rock within 50 cm. Petric: 40 % or more coarse fragments by volume,
oxidic concretions, hardened plinthite or ironstone included, 25 cm
thick, the top within 100 cm, not continuously cemented. Petrocalcic and
petrogypsic: the cemented calcic or gypsic horizon of Soil Taxonomy, or
a pan recorded as calcrete or gypcrete, the top within 100 cm.
Petroferric, fragipan and duripan: the upper level within 100 cm, read
by the readers of the same phases of 1988. Phreatic: a water table
between 3 and 5 m. Saline: an ECe above 4 mmhos/cm in some horizon
within 100 cm. Sodic: more than 6 % exchangeable sodium within 100 cm.
Stony: the record of fragments or outcrops that make mechanised
equipment impracticable (rudic_recorded, the same condition
as the rudic phase of 1988). Cerrado: the vegetation recorded at the
site. The “not shown for” rules are applied as printed: no lithic phase
for the Lithosols, no saline phase for the Solonchaks, no sodic phase
for the Solonetz; when such a group is only a candidate, a phase whose
criterion is met is undecided.
Hugo’s decisions of 2026-11-08 are applied: the phases are a separate
list per edition, three-valued, with the “not shown for” rules, and the
cerrado phase is read from the recorded vegetation (Q25); the texture
and slope classes of the map symbol are given when the data allow (Q3);
the field-only phases (stony, cerrado) are absent when not recorded,
with no substitute threshold (default 16); the pans of Soil Taxonomy
read soilKey’s USDA predicates, the WRB horizons only as stand-ins,
flagged (default 17). soilKey’s readings of this part (the stony phase
on the rudic record, the petric phase as the skeletic reader at 100 cm,
the petrocalcic and petrogypsic horizons of the shared reader, the 3 to
5 m of the phreatic phase with both ends included and no morphology
test, no unit-level exclusion) are in
inst/rules/fao1974/readings.yaml and
data-raw/fao_readings.yaml for his word.
print() and the HTML and PDF reports show the phases of
1974 as they show those of 1988. The reader of the “not shown for” rules
takes the length of the group code (two letters in 1988, one in 1974);
every result of 1988, its phases included, is unchanged, and every other
classification is unchanged (the fixtures of the other systems
byte-identical).
Decided by Hugo on the review (2026-11-10). The stony phase is read
on the rudic record (rudic_recorded), as proposed.
Ninth part of the FAO-Unesco soil legend, the third of the Legend of
1974 (Soil Map of the World, Vol. I, Unesco Paris). The legend of 1974
is now registered as fao1974 (aliases fao74,
fao_unesco_1974; experimental and opt-in; order 17 in the
registry, namespace fao74).
classify_fao(pedon, edition = "1974") keys it, and
classify_fao1974() is its thin wrapper in the registry, as
Hugo decided (Q1); fao stays the Revised Legend (Q2). The
key of pp. 43-53 is read in its own order, not that of the list of
pp. 12-13: Histosols, Lithosols, Vertisols, Fluvisols, Solonchaks,
Gleysols, Andosols, Arenosols, Regosols, Rankers, Rendzinas, Podzols,
Ferralsols, Planosols, Solonetz, Greyzems, Chernozems, Kastanozems,
Phaeozems, Podzoluvisols, Xerosols, Yermosols, Nitosols, Acrisols,
Luvisols and Cambisols. Under its group a soil keys to the first of the
106 soil units whose gate passes, the last unit of each group being the
key’s “Other …” residual (Orthic, Eutric, Haplic, Chromic, Vitric or
Cambic as printed); the Lithosols, Rankers and Rendzinas are single
units, so their result has one level. The groups are in
inst/rules/fao1974/key.yaml, the units in
inst/rules/fao1974/units/, each with its code and name as
printed, soilKey’s Portuguese gloss, its page and its gate in soilKey’s
words.
The gates read the diagnostic horizons (0.9.387) and properties
(0.9.388) of 1974. A new file, R/key-fao74.R, holds the
predicates that combine them where a gate reads more than one in one
place, or reads a window, a B or a record the diagnostics do not read:
the H horizon of the Histosols, the rock within 10 cm of the Lithosols,
the clay mixed over 20 cm, cracks and gilgai of the Vertisols, “no
diagnostic horizons other than”, the material of the Andosols to 35 cm,
the coarse texture, albic material and B features of the Arenosols, the
thickness of the umbric A of the Rankers and Humic Cambisols, the
calcareous material under the mollic A of the Rendzinas, the uppermost
diagnostic B, the albic E over a slowly permeable horizon of the
Planosols, the chroma of the mollic A to 15 cm, the 125, 90 or 75 cm of
the calcic and gypsic horizons by texture, the shallower of a calcic and
a gypsic horizon of the Xerosols and Yermosols, the tongues or nodules
of the Podzoluvisols, the clay distribution of the Nitosols, and the
unit gates of the windows, the B horizons, the Podzols, the Ferralsols
and the Planosols. No predicate of 1988 is redefined; the shared readers
run on the 1974 context.
Hugo’s decisions of 2026-11-08 are applied: the key governs where the
definitions differ (Q6: a mollic A with bleached coatings and
hydromorphic properties keys as a Mollic Gleysol, the Acrisols read the
base saturation in some part of the B, the Mollic and Humic Andosols ask
no smeary consistence, the Nitosols do not exclude an albic E); there is
no residual group after the Cambisols (Q5): a soil that no gate takes is
[Not classified in the FAO-Unesco Legend (1974)], and one
with gates undecided names them as candidates; a diagnostic with no
depth in the key is read within 125 cm (Q10); the regime of the Xerosols
and Yermosols is the one recorded, and the shallower of a calcic and a
gypsic horizon decides (Q26); calcareous between 20 and 50 cm is an
alternative of the Calcic Cambisols (default 15). Where the 1974 text
repeats a rule Hugo decided for 1988 (the uppermost diagnostic B decides
at the key, the Kastanozems as the exact complement of the Chernozems,
the thin H horizon over rock, the Rendzic calcareous rock, volcanic
glass not recorded as none, the B of the unit gates, the colours of a
red, yellow or brown B, the slowly permeable horizon), the same reading
is used and recorded for his word. soilKey’s readings of this part
(among them: “coarse texture” as the coarse class of p. 5 to 100 cm,
albic material from the surface to 50 cm, the B characteristics of the
Arenosols as the features their units name, the single-unit groups with
one level) are in inst/rules/fao1974/readings.yaml and
data-raw/fao_readings.yaml.
make_fao_example(code, edition = "1974") gives one
synthetic profile per group (26, each keying to its own group without an
undecided gate) and per unit (106, each keying to its own unit), with
near misses that cross one printed number: 26 at group level (a rock at
11 cm, a calcic horizon at 91 cm in a medium texture, a base saturation
of 45 % in the lower B) and 52 for the unit gates with a printed number
(permafrost at 201 cm, a pH of 5.5 between 20 and 50 cm, 1.64 me per 100
g clay for the Acric Ferralsols, a base saturation of 50 % in the B to
100 cm for the Humic Ferralsols, a sandy loam to 100 cm for the Ochric
Andosols). The edition pairs of plan section 11 are tested: a Lixisol of
1988 is an Orthic Luvisol of 1974, a Calcisol a Calcic Cambisol or, in
an aridic regime, a Calcic Xerosol, gleyic properties at 70 cm make a
Gleyic Luvisol of 1988 and an Orthic Luvisol of 1974, and a Nitisol of
1988 with a mollic A is a Luvic Phaeozem of 1974. The app lists the
Legend of 1974 among the national systems with the 26 examples; the i18n
catalogues name the system and its edition in English and Portuguese.
The thresholds table is shipped as
inst/rules/fao1974/thresholds.yaml with a new
unit_key block, and the list of the 26 groups and 106 units
as data-raw/fao1974_units.csv. Every result of 1988 is
unchanged (the 296 examples of make_fao_example(), with
their phases and traces), and every other classification is unchanged
(the fixtures of the other systems byte-identical).
The review (2026-11-09) fixed these defects: the lime waiver of the mollic A of 1974 (more than 40 % finely divided lime waives the limits of the dry value, 74 p. 24) now waives its dry contrast with the C too, so a light calcareous A over a chalky C is a Rendzina; the Humic Ferralsols and Ochric Andosols have near misses; and the tests build a cambic B over an argillic B (a Cambisol, not a Luvisol) and a Vertisol whose clay mixed over 20 cm passes where 18 cm would fail.
Decided by Hugo on the review (2026-11-10). The albic E and albic material of 1974 ask a chroma below 2.5 at the middle values (a moist value of 4 or 5, a dry value of 5 or 6; 3 over a red parent material), the limit the 5YR clause of p. 27 presupposes, flagged; the reading “as printed” of 0.9.387 and 0.9.388 is superseded. In 1974 an E with none of the kinds p. 27 names below it (a spodic, argillic or natric B, a fragipan, an impervious layer) is albic material, not an albic E, so a white sand keys to the Albic Arenosols and a wet A / Eg / Cg to the Gleysols whatever the letter of the E; 1988 is unchanged. The coarse texture of the Arenosols is read to 100 cm or to the rock where it is shallower. The Nitosols lack the ferric properties as printed, the CEC by NH4Cl below 24 me per 100 g clay included, flagged. “At less than” is strict for the Thionic Fluvisols (125 cm) and for the Gypsic and Calcic Xerosols and Yermosols (125, 90 or 75 cm); their examples sit at 124 and 89 cm, the near misses at 125 and 90. An aridic regime not recorded stays undecided, so a soil keyed after the Xerosols and Yermosols is provisional until the regime is recorded. The uppermost B decides at the key only, as in 1988: the Luvic units accept any argillic B. soilKey’s other readings of this part are accepted (the single-unit groups with one level, albic material from the surface to 50 cm, the Kastanozems as the complement of the Chernozems, the uppermost B at the key, the slowly permeable horizon of the Planosols, the vitric material of the Andosols). The lime waiver of the mollic A, which waives the limits of the dry value, now waives the dry contrast with the C in 1988 too (the same words, p. 26): a correction to 0.9.382, which applies to the umbric A as well; none of the 296 examples of 1988 changes.
Eighth part of the FAO-Unesco soil legend, the second of the Legend
of 1974. R/diagnostics-fao74.R now also reads the
diagnostic properties of pp. 27-32 and the terms the 1974 key uses
without a definition section, as 28 internal predicates returning a
DiagnosticResult that passes, fails or stays undecided,
with the layers, the per-layer answers, what would decide it, the
fallbacks used and any stand-in:
abrupt_textural_change_fao74(),
albic_material_fao74(), aridic_regime_fao74(),
amorphous_complex_fao74(),
ferralic_properties_fao74(),
ferric_properties_fao74(), gilgai_fao74(),
high_om_b_fao74() (with kind = "acrisol"),
high_salinity_fao74(),
hydromorphic_properties_fao74(),
interfingering_fao74(), permafrost_fao74(),
plinthite_fao74(), slickensides_fao74(),
smeary_fao74(), soft_powdery_lime_fao74(),
sulfidic_materials_fao74(),
takyric_features_fao74(),
thin_iron_pan_fao74(), tonguing_fao74(),
vertic_properties_fao74(),
weatherable_minerals_fao74(),
recent_alluvial_deposits_fao74(),
calcareous_fao74(), bleached_coatings_fao74(),
heavy_clay_fao74(),
exchangeable_sodium_fao74() and
acric_cec_fao74(). A property with no printed depth is read
within 125 cm (Q10). Nothing is registered or classified yet.
The numbers are the printed ones. The abrupt textural change sits at the base of an A or E and asks the clay to double within 8 cm, or, from 20 % clay, 20 points more with double the clay somewhere in the horizon below. The exchange complex dominated by amorphous material asks a bulk density below 0.85 and one of its other marks (Q20). The ferralic and ferric properties read a CEC by NH4Cl below 24 me per 100 g clay in the cambic B, right below the A or in the argillic B. The B of high organic matter asks 1.35 % organic matter over 100 cm (1.5 % in the upper B of the Acrisols). High salinity is an ECe above 15 within 125, 90 or 75 cm by the texture of the upper 30 cm, or above 4 within 25 cm at a pH above 8.5. The hydromorphic properties are the test of the text (Q22): groundwater reaching the surface with its capillary fringe, a histic H, neutral or bluish hues, or the colours of reduction in five branches for soils with a spodic B, a mollic A, an argillic B under the plough layer, an oxic B, and other soils, within 50 cm or the depth the caller gives. The recent alluvial deposits ask 0.35 % organic matter to 125 cm, an irregular decrease, stratification or sulfidic materials. Sulfidic materials ask 0.75 % sulfur and no jarosite; vertic properties ask cracks of 1 cm within 50 cm of the top of the B. The Acric CEC is 1.5 me per 100 g clay or less, the sodium of the Solodic Planosols more than 6 %, and the heavy clay 60 % clay (soilKey’s number, flagged).
Where Appendix 4 of 1988 calls a property unchanged (interfingering,
permafrost, plinthite, slickensides, smeary consistence, soft powdery
lime, tonguing, weatherable minerals), the reader of 1988 runs on the
1974 context, where the argillic and cambic B are those of 1974;
calcareous and soft powdery lime read the numbers of 1988, flagged
(Q23). Those 1988 readers were moved into named functions with no
change: every _fao88 result is the same. Where the 1974
answer stays undecided, a USDA reader of soilKey stands in, then a WRB
one, marked as a stand-in (the amorphous complex, high salinity, the
hydromorphic properties, sulfidic materials, takyric features).
soilKey’s readings of this part (among them: the 8 cm of the abrupt
change as an abrupt or clear boundary, the albic colours as printed, the
branches of the hydromorphic test, sulfidic materials absent where
sulfur is measured nowhere and no marine setting is recorded) are in
data-raw/fao_readings.yaml for his word. Every
classification is unchanged (the fixtures of the other systems and the
1988 examples byte-identical).
Decided by Hugo on the review (2026-11-09). soilKey’s readings of
this part are accepted. The ferralic properties read “respectively”:
kind = "cambisol" the cambic B,
kind = "arenosol" the horizon right below the A. In the
hydromorphic properties an undecided spodic, argillic or oxic B is read
both ways, as the mollic A already was: a layer is decided where the
readings agree, else it stays undecided (the designation fallback is
dropped). The sulfidic criterion of the recent alluvial deposits stays
absent, flagged, where sulfur is measured nowhere and no marine, tidal
or brackish setting is recorded. The review also fixed these defects: in
4.2 the shift to 75 cm when a calcic horizon intervenes belongs to the
chroma 1 branch only; a hue nearest to 2.5Y starts at 1.25Y; an iron pan
not named thin or placic asks the 40 mm limit; and the 8 cm of the
abrupt textural change cites the boundary classes of the 1967
Guidelines.
Seventh part of the FAO-Unesco soil legend, the first of the Legend
of 1974 (Soil Map of the World, Vol. I, Unesco Paris). A new file,
R/diagnostics-fao74.R, reads the H horizon of the master
horizons (p. 21) and the 13 diagnostic horizons of pp. 24-27 as internal
predicates, each returning a DiagnosticResult that passes,
fails or stays undecided, with the layers, what would decide it, the
fallbacks used and any stand-in: h_horizon_fao74(),
histic_h_fao74() (with base = "eutric" or
"dystric"), mollic_a_fao74(),
umbric_a_fao74(), ochric_a_fao74() (with
grade = "very_weak" or "weak") and
ochric_grade_fao74(), argillic_b_fao74(),
natric_b_fao74(), cambic_b_fao74(),
spodic_b_fao74(), oxic_b_fao74(),
calcic_fao74(), gypsic_fao74(),
sulfuric_fao74() and albic_e_fao74(). Depths
are read from the soil surface, horizons buried under 50 cm of new
material are not diagnostic (p. 32), and a horizon with no printed depth
is read within 125 cm (Q10). Nothing is registered or classified
yet.
The 1974 text writes organic matter, read as organic carbon x 1.724, flagged (Q11). The H horizon has 20 % organic matter without clay to 30 % at 60 % clay and is saturated; the histic H is more than 20 cm of it, or a thin surface or plough layer that, mixed to 25 cm, holds 14 to 28 % organic matter. The mollic and umbric A ask 1 % organic matter (4 % with the lime waiver) and have no strongly humic waiver of the colour contrast; the umbric A drops the consistence rule where the A never dries and excludes plaggen layers. The ochric A has two grades for the Yermosols and Xerosols: very weak below a line of organic matter in the upper 40 cm that falls from 1 % at a sand/clay ratio of 1 to 0.5 % at 13 (1.2 and 0.6 % in 18 cm over a shallow pan), and weak otherwise. The argillic B asks the clay increase of 3 points, a ratio of 1.2 or 8 points within 30 cm and, unlike the 1988 argic B, evidence of illuviation (clay skins, oriented clay or clay bridges; a Bt designation counts, flagged, Q13), with one tenth of the overlying horizons, 7.5 cm (15 cm in sand) or 15 cm of lamellae, and no texture limit. The natric B adds columnar structure and more than 15 % sodium. The cambic B asks a CEC above 16 me per 100 g clay or weatherable minerals, an alteration (colour, clay, carbonates or the colours of reduction) and a base at 25 cm, with no minimum thickness. The oxic B asks 30 cm, an NH4Cl retention of 10 or an ECEC below 10 and a CEC of 16 me per 100 g clay or less, more than 15 % clay, only traces of primary minerals and rock structure below 5 %. The sulfuric horizon asks jarosite mottles beside a pH below 3.5 (Q18).
Where Appendix 4 of 1988 calls a horizon unchanged (the albic E it
calls amended), the readers of 1988 are shared through the edition of
the profile context and branch only where the printed text differs
(histic H, mollic, umbric and ochric A, spodic B below 12.5 cm and below
an Ap, gypsic more than 15 cm, albic E without a chroma limit at the
middle values); every _fao88 result is unchanged. Where a
1974 horizon stays undecided, the USDA reader of soilKey stands in, then
the WRB one, marked as a stand-in. soilKey’s readings of this part
(among them: the saturation of the H horizon, the weak ochric A as every
other ochric A, fine clay compared only when recorded, sand and loamy
sand as coarser than very fine sand, “traces” of primary minerals as 3 %
or less, no thickness for the sulfuric horizon, and the stand-ins) are
in data-raw/fao_readings.yaml for his word. Every
classification is unchanged (the fixtures of the other systems and the
1988 examples byte-identical).
Decided by Hugo on the review (2026-11-09). soilKey’s readings of this part are accepted. The weak ochric A is every ochric A that is not very weak, and a rock or pan shallower than 18 cm reads the 18 cm limits, flagged. The spodic B is read below the deeper of 12.5 cm and the base of an Ap, and a layer reaching below that depth counts by its part below. The review also fixed these defects: the histic H of 1974 is built from the saturated H horizon (a well-drained O no longer passes), with its thin surface and plough layer paths kept; the swelling 2:1 clays of the argillic B take the evidence of pressure, a third more fine clay or 8 points more fine clay as alternatives; where only the natric exclusion of the argillic B is undecided, the USDA and then the WRB natric horizon decide that exclusion alone, keeping the 1974 layers; a stand-in that passes keeps only its layers within the upper limit and not buried; and a cambic B with a CEC by NH4Cl of 16 or less leaves that criterion undecided.
Sixth part of the FAO-Unesco soil legend (the Revised Legend of 1988,
read in the ISRIC reprint of 1997). classify_fao() now
gives the 16 phases of chapter VIII (pp. 67-71) in $phases,
beside the soil unit: anthraquic, duripan, fragipan, gelundic, gilgai,
inundic, lithic, petroferric, phreatic, placic, rudic, salic, skeletic,
sodic, takyric and yermic. Phases are features of the land that may
limit its use; they cut across the units and never define one (p. 67),
so the unit, the grouping and the key trace are exactly those of
0.9.385. Each phase is three-valued: status is present,
absent, undecided, or not shown where the text excludes the unit, with
criterion (the test alone), the page, the criterion in
soilKey’s words, the fallbacks used and, for an undecided phase, the
attributes that would decide it. Two more rows give the classes of the
map symbol (Appendix 2, p. 107): the texture class of the upper 30 cm (1
coarse, 2 medium, 3 fine, read by the reader of 0.9.381) and the slope
class (a up to 8 %, b to 30 %, c above 30 %, from
slope_pct). The phases, their pages, criteria, numbers and
Portuguese names are in inst/rules/fao1988/phases.yaml,
read by a new file, R/fao-phases.R; the numbers are those
of the phases block of the thresholds table.
The numbers are the printed ones. Lithic: continuous hard rock within
50 cm (continuous_hard_rock_fao88()). Salic: an ECe above 4
dS/m in a layer within 100 cm. Sodic: more than 6 % exchangeable sodium
within 100 cm. Skeletic: 40 % or more coarse fragments by volume, 25 cm
thick, the top within 50 cm, not continuously cemented. Inundic: more
than 10 days of surface water in the growing period. Phreatic: a water
table within 500 cm with no gleyic properties. Anthraquic: stagnic
properties within 50 cm under long continued irrigation, read from the
site’s flood irrigation, years under rice or a land use naming rice or
paddy. Yermic: less than 0.6 % organic carbon in the surface 18 cm mixed
(0.20 % when coarser than sandy loam, waived when the salic criterion is
met) and one of the six desert features. The duripan, fragipan,
petroferric and placic phases are a layer within 100 cm read by
soilKey’s USDA predicates (Soil Taxonomy 1975, p. 67), by the kind of
pan recorded in the field, or by the designations qm and x in the FAO
notation, flagged; the WRB petroduric, fragic and petroplinthic horizons
stand in only where the attributes of the USDA predicate are not
recorded, flagged. The “not shown for” rules are applied: no salic phase
for the Solonchaks and the Salic Fluvisols, no sodic phase for the
Solonetz and the Sodic Solonchaks, no phreatic phase for the Fluvisols
and Gleysols; when such a unit is only a candidate, a phase whose
criterion is met is undecided.
Hugo’s decisions of 2026-11-08 are applied: the phases are a separate
list per edition, three-valued, with the “not shown for” rules, and the
phreatic phase is a water table within 500 cm without gleyic properties
outside the Fluvisols and Gleysols (Q25); the texture and slope classes
of the map symbol are given when the data allow (Q3); field-only phases
(gelundic, gilgai, rudic, takyric, the desert features) are absent when
not recorded, with no substitute threshold (default 16); the four pans
of Soil Taxonomy read the USDA predicates, the WRB horizons only as
stand-ins, flagged (default 17). The readings of this part are in
inst/rules/fao1988/readings.yaml and
data-raw/fao_readings.yaml. print() shows the
phases present, those undecided, those not shown and the map symbol; the
HTML and PDF reports add a section “Phases and map symbol” (English and
Portuguese). Every other classification is unchanged (the fixtures of
the other systems byte-identical), and the unit and grouping of every
example of make_fao_example() (296 profiles, near misses
included) are those of 0.9.385.
Decided by Hugo on the review (2026-11-09). soilKey’s readings of
this part are accepted, with these changes. A moist rupture resistance
of firm or more (the layers of fragipan_usda()) is a sign
of a fragipan only, flagged and undecided, unless a second sign holds in
the layer: very or extremely firm with a massive structure, or a bulk
density of 1.65 g/cm3 or more (the number of soilKey’s WRB fragic
horizon; the text has none); a designation with x (E/Bx too) or a
recorded fragipan is one by itself. The petroferric phase needs iron: 50
% plinthite or more, a recorded ironstone or ferricrete, or a
designation with m and v, c or s; a layer cemented by carbonates, gypsum
or silica is not petroferric. The salic phase is not shown for the Salic
Fluvisols either (the printed reason of p. 69). Heavy textured, for the
takyric phase, is the fine class of the upper 30 cm (p. 107). A layer
whose coarse fragments are not recorded is not skeletic, flagged. A rice
land use alone makes the irrigation of the anthraquic phase, flagged,
unless the site records no irrigation. The lithic phase stays shown for
the Leptosols. The review also fixed these defects: the USDA pan layers
count only when the predicate passes (a firm layer too thin for a
fragipan is none); a NASIS fragipan without its depth is undecided; a
recorded “not irrigated” decides before the land use; the yermic carbon
that fails is undecided while the salic criterion is, and its blown sand
is a sand sheet or cover sand, not a dune, shifting sand or a negation;
classify_fao(gapfill = TRUE) gap-fills once, so the key and
the phases read the same pedon; a phase left open by a candidate unit
names it (major_groups:SC) in missing, with a
note; a pan undecided by a short description carries no “absent” flag;
the slope class is given for a pedon without horizons; and a phase that
fails to read records the error as a flag.
Fifth part of the FAO-Unesco soil legend (the Revised Legend of 1988,
read in the ISRIC reprint of 1997). fao1988 now has its
second level, the 153 soil units of the key (chapter X, pp. 75-89),
registered as units after the major soil groupings.
classify_fao() keys a soil to its grouping and then, under
it, to the first unit whose gate passes, in the key’s order, not the
order of the lists (which start with the Eutric or Haplic unit):
name is the unit as printed (“Chromic Luvisols”),
rsg_or_order the grouping, and levels has one
row per level with its code, name, page and soilKey’s Portuguese gloss.
The last unit of each grouping is the key’s “Other …” residual: Haplic
in 17 groupings, Eutric in 9, and the Terric Histosols and Urbic
Anthrosols, whose descriptions are shown as information and not tested
(default 9). A unit the data leave undecided before the one assigned
makes the unit provisional, listed as units:<code> in
provisional_because with the grouping still decided. The
units are in inst/rules/fao1988/units/, one file per
grouping, each with its code, name, gloss, page, gate and a summary of
the gate in soilKey’s words; their numbers are in the
unit_key block of the thresholds table.
Most unit gates read the diagnostics of 0.9.382 and 0.9.383 directly:
permafrost within 200 cm, gleyic properties within 100 cm, stagnic
properties within 50 cm, plinthite, calcic and gypsic horizons within
125 cm, a sulfuric horizon or sulfidic material, the mollic, umbric and
ochric A, the eutric and dystric histic H, the argic B, calcareous or
gypsiferous from 20 to 50 cm, sodic, salic, andic, vertic and ferric
properties, tonguing, strongly humic, the petrocalcic and petrogypsic
horizons within 100 cm. A new file, R/key-fao-units.R,
holds the predicates of the gates that read more than one diagnostic in
one place or a record the diagnostics do not read: the drainage and
fibres of the Folic and Fibric Histosols, deep cultivation and man-made
sediments of the Aric and Cumulic Anthrosols, the rock within 10 cm and
the calcareous material under the mollic A of the Lithic and Rendzic
Leptosols, the base saturation of a window or of a B, the smeary
consistence and texture of the Vitric Andosols, the thick albic E, clay
increase, colour below the A and cambic alteration of the Arenosols, the
ignition, Fe/C ratio and thin albic E of the Podzols, the plinthite
horizon of the Dystric Plinthosols, the geric and ferralic properties
inside a B, the rubbed colours of the Rhodic, Xanthic and Chromic units,
and the slowly permeable horizon of the Dystric Planosols.
Hugo’s decisions of 2026-11-08 are applied: the key governs where
chapter VI differs (Q6), the two passages in italics of this part are
applied as printed (soft powdery lime in the Calcic Solonetz, p. 83; “in
at least some part of the B” in the Humic Cambisols, p. 89; Q4), and the
Gypsiric Regosols keep the key’s name with Gypsic Regosols, the name of
the lists, as an alias (Q7). Every name of the final list resolves to
exactly one unit. make_fao_example(code) now takes a unit
code too: 153 synthetic profiles, each keying to its own unit without an
undecided grouping or unit before it, and 87 near misses, one for each
unit gate with a printed number, each crossing that number (a rock at 11
cm, a calcic horizon at 126 cm, a base saturation of 50 % from 20 to 50
cm, a rubbed chroma of 4 at 7.5YR) and keying to another unit. The i18n
catalogues name the level in English and Portuguese (“Soil unit”,
“Unidade de solo”); the app keeps its 28 examples, one per grouping. The
grouping of the 56 examples of 0.9.384 is unchanged, and every other
classification is unchanged (the fixtures of the other systems
byte-identical).
Decided by Hugo on the review (2026-11-09). soilKey’s readings of
this part are accepted, with these changes. The fimic A itself
(fimic_a_fao88()) now needs a sign of manuring: citric P2O5
above 250 mg/kg, a manuring term (plaggen, hortic, manure, compost,
midden, kitchen garden) in the layer origin, anthropic material,
designation or the site’s land use, or the WRB plaggic or hortic
horizon, always tried; artefacts neither make nor exclude it, so fills,
wastes and man-made sediments stay Anthrosols and key to the Cumulic or
Urbic units, and the unit-level guard of the first draft is gone. A
Rhodic B whose dry value is not recorded is undecided. A smeary
consistence not recorded leaves the Vitric Andosols undecided unless the
texture is coarser than silt loam. A calcareous rock under the mollic A
(CaCO3 measured, or limestone, chalk, marble or dolomite recorded) makes
a Rendzic Leptosol. The colour of a red, yellow or brown B is read in
every layer of it. The Fibric Histosols are very poorly drained or
recorded undrained, not artificially drained; a drainage range that
spans the limit, or no drainage record, leaves the Folic and Fibric
units undecided. The other readings are accepted as proposed: a depth
missing from a unit gate is read within 125 cm, “fibre content dominant”
is the fibric material of Soil Taxonomy, the Cumulic sediments are sandy
loam or finer, silt loam or finer excludes loam, the Luvic Arenosols
compare a layer with any layer above it, the carbon enrichment of a
Podzol B is the h of its designation, the plinthite horizon is the upper
run of the gate, “the B” is the upper diagnostic B of the grouping’s
kind, and the slowly permeable horizon is the layer below the E with the
adjoining layers of its master horizon. The review also fixed these
defects: one vocabulary of the anthropic record now serves the
Anthrosols gate, the fimic A and the Cumulic unit (plain “irrigation
sediment”, “irragric”, “terric”, a raised surface or a positive silting
test alone were not read; “mine” is read as a word, not inside
“mineral”); a drainage range is read by both ends, with the codes VP, P,
W and Portuguese terms; an undecided B above a sure one decides where
their answers differ; free iron and carbon both 0 fail the Ferric
Podzols; and the Gelic Leptosols have a near miss at 201 cm on a deep
Leptosol with less than 20 % fine earth (87 near misses).
Fourth part of the FAO-Unesco soil legend (the Revised Legend of
1988, read in the ISRIC reprint of 1997). The legend is now registered
as fao1988 (aliases fao, fao88,
revised_legend; experimental and opt-in; order 16 in the
registry, namespace fao88), with one level for now, the
major soil groupings. classify_fao(pedon, edition = "1988")
is the user function of the module and classify_fao1988()
its thin wrapper in the registry, as Hugo decided (Q1);
edition = "1974" stops with a message until the Legend of
1974 is keyed in a later part. The key of chapter X (pp. 75-89) is read
in its own order, not that of the lists: Histosols, Anthrosols,
Leptosols, Vertisols, Fluvisols, Solonchaks, Gleysols, Andosols,
Arenosols, Regosols, Podzols, Plinthosols, Ferralsols, Planosols,
Solonetz, Greyzems, Chernozems, Kastanozems, Phaeozems, Podzoluvisols,
Gypsisols, Calcisols, Nitisols, Alisols, Acrisols, Luvisols, Lixisols
and Cambisols. The gates read the 16 diagnostic horizons (0.9.382) and
the 27 diagnostic properties (0.9.383); R/key-fao.R adds
the predicates that combine them where a gate reads more than one in one
place: the organic layers of the Histosols, the record of a profound
human modification, the rock, highly calcareous or cemented layer or the
fine earth of the Leptosols, the clay, cracks and slickensides of the
Vertisols, “no diagnostic horizons other than”, the coarse texture and
coarse fragments of the Arenosols, the plinthite under an albic E or a
stagnic horizon, the E over a slowly permeable horizon, the chroma of
the mollic A to 15 cm, the uncoated grains of the Greyzems, the base
saturation to 125 cm, the tongues or nodules of the Podzoluvisols, the
clay distribution and boundaries of the Nitisols, and the CEC and base
saturation of the argic B.
The tests are three-valued: an undecided gate before the one that
passes makes the result provisional. The key governs where the
descriptions of chapter VI differ (Q6), and the passage in italics of
the Regosols gate in the 1997 text (lacking soft powdery lime) is
applied as printed (Q4). There is no residual grouping after the
Cambisols (Q5): a soil that no gate takes is
[Not classified in the FAO-Unesco Revised Legend (1988)],
with the 28 failed gates in the warnings, and one that no gate takes
while some stay undecided names them as the candidates, in brackets. The
names are as printed, with soilKey’s Portuguese gloss in
levels$name_pt and the page of the key in
levels$page. make_fao_example(code) gives one
synthetic profile per grouping (28, each keying to its own grouping
without an undecided gate) and, with near_miss = TRUE, the
same profile with one printed number of its gate crossed (28, each
keying elsewhere). The app lists the Revised Legend among the national
systems with the 28 examples; the i18n catalogues name the system, its
edition and the level in English and Portuguese. The thresholds table is
shipped as inst/rules/fao1988/thresholds.yaml, the readings
of the 1988 edition as inst/rules/fao1988/readings.yaml,
and the list of the 28 groupings and 153 units as
data-raw/fao1988_units.csv. Every other classification is
unchanged (the fixtures of the other systems byte-identical).
Decided by Hugo on the review (2026-11-09). soilKey’s readings of
this part are accepted, with these changes. The uppermost diagnostic B
within 125 cm decides at the key (p. 42): the gate of a grouping defined
by an argic, natric, cambic, spodic or ferralic B passes only when its B
is the uppermost one, undecided when an undecided B lies above it
(upper_b_fao88()), so an argic B over a ferralic B is no
Ferralsol and a cambic B over an argic B no Luvisol. The CEC of the
argic B is read per layer (ch. VI p. 52): 24 cmol(+)/kg clay or more in
every layer for the Alisols and Luvisols, below 24 in at least one for
the Acrisols and Lixisols. An organic layer on rock or fragmental
material makes a Histosol when more than 20 cm thick (the histic H
minimum), and a bulk density not measured is read as 0.1 or more,
flagged. The deep path of the Plinthosols needs gleyic or stagnic
properties in a horizon above the plinthite within 100 cm (ch. VI
p. 60), not in the plinthite itself. The 35 cm of andic properties are
measured from the mineral soil surface, flagged when an O or H is
skipped. The Kastanozems are the exact complement of the Chernozems: a
chroma above 2 in any layer of the upper 15 cm of the A. The boundaries
of the Nitisols are tested at the A-to-B transition only. A crack with
its depth but not its width leaves the Vertisols undecided. The review
also fixed the plinthite runs (read layer by layer), the cracks (width
and depth of the same record), the missing attributes of the Planosols
trace, the NT example (pressure faces, which the nitic properties read)
and the near-miss tests (every gate evaluated directly).
Third part of the FAO-Unesco soil legend (the Revised Legend of 1988,
read in the ISRIC reprint of 1997). A new file,
R/diagnostics-fao88-properties.R, reads the 27 diagnostic
properties of chapter V (pp. 34-41) as internal predicates, each
returning a DiagnosticResult that passes, fails or stays
undecided, with the layers, the per-layer answers, what would decide it
and the fallbacks used: abrupt_textural_change_fao88(),
andic_properties_fao88(), calcareous_fao88(),
calcaric_fao88(),
continuous_hard_rock_fao88(),
ferralic_properties_fao88(),
ferric_properties_fao88(),
fluvic_properties_fao88(),
geric_properties_fao88(),
gleyic_properties_fao88(),
stagnic_properties_fao88(),
gypsiferous_fao88(), interfingering_fao88(),
nitic_properties_fao88(),
organic_soil_materials_fao88(),
permafrost_fao88(), plinthite_fao88(),
salic_properties_fao88(),
slickensides_fao88(), smeary_fao88(),
sodic_properties_fao88(),
soft_powdery_lime_fao88(),
strongly_humic_fao88(),
sulfidic_materials_fao88(), tonguing_fao88()
(albic or Chernozem tongues), vertic_properties_fao88() and
weatherable_minerals_fao88(). A property with no depth in
the key is read in the layers starting within 125 cm (p. 42);
max_top_cm reads “within X cm” and window_cm
“throughout X-Y cm”, as the key will ask. Nothing is registered or
classified yet.
The numbers are the printed ones. The abrupt textural change doubles the clay below 20 % or adds 20 points from 20 %, over an abrupt or clear boundary. The andic properties read their three items, with the volcanic glass sliding from 30 % at 0.4 % Alox + 1/2 Feox to 5 % at 2.0 %. Calcareous is more than 2 % CaCO3 or strong effervescence, calcaric calcareous throughout 20-50 cm. The ferralic properties ask a CEC below 24 cmol(+)/kg clay or 4 per kg soil in the cambic B or right below the A; the geric properties 1.5 cmol(+)/kg clay of bases and KCl acidity, or a delta pH of +0.1. The salic properties ask an ECe above 15 dS/m within 30 cm, or above 4 at a pH (1:1) above 8.5; the sodic properties 15 % sodium or 50 % sodium and magnesium; the sulfidic materials 0.75 % sulfur with less than three times as much CaCO3 and a pH above 3.5; strongly humic more than 1.4 % organic carbon over 100 cm. The fluvic properties read organic carbon above 0.20 % to 125 cm or irregular with depth, or stratification in a quarter of the soil, on sediments where their origin is recorded. Gleyic properties are two of three signs (reduction, groundwater whose capillary fringe reaches the surface, gley colours in more than 95 % of the matrix); stagnic properties are reduction with the mottling pattern within 50 cm. The ferric properties, soft powdery lime, tonguing, interfingering, nitic and vertic properties, permafrost, plinthite, slickensides and smeary consistence read the field record; what an unrecorded observation means for each (absent or undecided) is listed below and in the readings.
Hugo’s decisions of 2026-11-08 are applied: the colour pattern stands in for a reduction test that is not recorded, flagged, and the chroma increasing with depth supports the stagnic properties without being required (Q21); “many” coarse mottles are 15 % and more than 20 mm (Q22); and the defaults on the abrupt textural change, fluvic, nitic and vertic properties. The andic properties of p. 34 move to this file, and item 7 of the ferralic B reads them as before (absent, flagged, unless volcanic material is recorded). They also decide now whether a mantle of 35 to 50 cm buries the horizons below it (p. 42), which was left undecided in 0.9.382.
Decided by Hugo on the review (2026-11-09). A boundary over less than
5 cm is one recorded abrupt or clear (abrupta, clara), read by one
shared reader for the abrupt textural change and item 6 of the argic B;
not recorded, it is absent, flagged, in both, and an argic B that fails
on it keeps the flag. The abrupt textural change also compares a layer
starting less than 5 cm below the upper one, across a thin transitional
layer. Without CaCO3, strong effervescence makes a layer calcareous and
a water pH below 6.5 makes it not calcareous, flagged (both recorded:
undecided, flagged); anything else leaves it undecided. An increase of
organic carbon of more than 0.2 points is an irregular decrease for the
fluvic properties. The three reduction tests are read as an OR, a
negative one alone does not refute, and the gley colour confirms
reduction but never refutes it, never in an E. Below a buried horizon
only the properties bound to a horizon (ferralic, ferric, nitic,
tonguing, interfingering) are removed. The frozen suffix f and the
plinthite suffix v are read only in the notation that writes them (z for
frozen in the Canadian one); elsewhere they leave the test undecided.
Fe-Mn nodules alone, carbonate coatings named without an amount, a
sulfur lower bound against CaCO3 and Chernozem tongues without a width
are undecided; skeletans not recorded are absent; any recorded
slickensides that are not none count. A petrocalcic pan is never
continuous hard rock, strongly humic passes when the carbon described
already exceeds the 100 cm mean, the Podzol ignition route shows stagnic
as well as gleyic properties, and the oxalate iron of the nitic
properties is compared as Fe (0.2 % Fe2O3 = 0.14 % Fe). The readings are
in data-raw/fao_readings.yaml. Every classification is
unchanged (the fixtures of the other systems byte-identical).
Second part of the FAO-Unesco soil legend (the Revised Legend of
1988, read in the ISRIC reprint of 1997). A new file,
R/diagnostics-fao88-horizons.R, reads the 16 diagnostic
horizons of chapter IV (pp. 25-33) as internal predicates, each
returning a DiagnosticResult that passes, fails or stays
undecided, with the layers, what would decide it, the fallbacks used and
any stand-in: histic_h_fao88() (with
base = "eutric" or "dystric"),
mollic_a_fao88(), fimic_a_fao88(),
umbric_a_fao88(), ochric_a_fao88(),
argic_b_fao88(), natric_b_fao88(),
cambic_b_fao88(), spodic_b_fao88(),
ferralic_b_fao88(), calcic_fao88(),
petrocalcic_fao88(), gypsic_fao88(),
petrogypsic_fao88(), sulfuric_fao88() and
albic_e_fao88(). They build on the readers of 0.9.381:
depths from the soil surface, H and O included; horizons buried under 50
cm of new material are not diagnostic; the subsurface horizons have
their upper limit within 125 cm (p. 42, argument
max_top_cm). Nothing is registered or classified yet.
The numbers are the printed ones. The histic H is more than 20 cm of organic soil material within 40 cm, or a thin surface layer or a plough layer that, mixed to 25 cm, has at least 8 + 8 x clay / 60 % organic carbon. The mollic and umbric A mix their upper 18 cm and ask a moist chroma and value below 3.5, a dry value below 5.5, a value one unit darker than the C (waived when strongly humic), 0.6 % organic carbon (2.5 % with more than 40 % lime), a base saturation of 50 % or more (the umbric A less), and a thickness of 10 cm on rock or a cemented pan, else 18 cm and a third of a solum under 75 cm, or more than 25 cm. The argic B asks sandy loam or finer with 8 % clay, the increase of 3 points, a ratio of 1.2 or 8 points (breaks at 15 and 40 %) within 30 cm with clay skins and 15 cm without, one tenth of the overlying horizons and 7.5 cm (lamellae 15 cm), and without clay skins a coarser horizon of 18 cm above it (5 cm over an abrupt transition); it is not ferralic and not natric. The natric B adds columnar or prismatic structure and more than 15 % exchangeable sodium in its upper 40 cm. The ferralic B asks a CEC of 16 or an ECEC of 12 cmol(+)/kg clay or less, 30 cm, under 10 % weatherable minerals and water-dispersible clay, a silt/clay ratio of 0.2 or less, no andic properties and under 5 % rock structure. The spodic B reads the pyrophosphate chemistry of Soil Taxonomy 1975 with its index of accumulation of 65. The calcic, gypsic and sulfuric horizons ask 15 cm; the petrocalcic and petrogypsic horizons have no minimum thickness.
Hugo’s decisions of 2026-11-08 are applied: a recorded Bt designation
counts as the clay-skin observation, flagged, and “few” clay films are 1
% (Q13); the citric P2O5 of the mollic and umbric A decides when
measured, else the anthropic layers it targets do, absent if not
recorded (Q14); the eutric and dystric histic H by pH (1:5) 5.5, and
organic soil materials undecided between the saturated limit and 20 %
unless the drainage is recorded (Q15); the ferralic B asks 8 % clay and
reads the 20-200 um weatherable minerals, flagged (Q16); without the
1975 spodic chemistry, spodic_horizon_usda() and then the
WRB spodic() stand in, flagged (Q17); the sulfuric horizon
does not ask for jarosite (Q18). soilKey’s own readings of this part
(among them: the mixing of the mollic A, the layers that can hold a B,
carbonate and gypsum read as absent from the pH, the HCl reaction or the
ECe when not measured, volcanic glass read as none unless volcanic
material is recorded, and the albic E read on its moist colour when no
dry colour is recorded) are in data-raw/fao_readings.yaml
for his word. Every classification is unchanged (the fixtures of the
other systems byte-identical).
Decided by Hugo on the review (2026-11-09). soilKey’s readings of this part are accepted, with these changes. The spodic B is ruled out without its chemistry only by free carbonate or a water pH of 7 or more; a designation without h or s no longer rules it out, the older suffix ir counts as an illuvial sign, and the stand-ins now decide only the chemistry and are recorded only when they decide. An albic E without a dry colour takes the moist value + 1 as its dry value, flagged; an undesignated layer is read as albic only below a surface layer and above a B or C. Andic properties left undecided are absent, flagged, unless volcanic material is recorded. The thickness of the mollic A and its solum are both measured from the mineral surface. Moderately well drained leaves the saturation of organic materials undecided. The review also fixed these defects: an A layer straddling 18 cm is now read on its own values; the lime waiver of the mollic A is an alternative to the printed colour, with 2.5 % organic carbon on its branch only, and undecided when CaCO3 is not known; a plough layer may be an Hp or Op; lamellae count only when recorded above 0; argic item 6 is undecided when a clay on the way up is missing; an A no more than a third of an open solum fails; “closer to 2 than to 3” is a chroma below 2.5; the petrocalcic and petrogypsic horizons read their cementing agent (km, ym) from the designation; and the Bt of an E&Bt counts as a clay-skin observation.
First part of the FAO-Unesco soil legend in its two editions, the Revised Legend of 1988 (World Soil Resources Report 60, read in the ISRIC reprint of 1997) and the Legend of 1974 (Soil Map of the World, Vol. I). Both will be one module with an edition switch, registered as two systems in a later part; nothing is registered or classified yet.
New horizon attributes, from the plan’s list as Hugo decided (Q19,
2026-11-08): p2o5_citric_mg_kg,
extractable_acidity_ph82_cmol, cec_ph82_cmol,
al_dcb_pct, exch_acidity_kcl_cmol,
ph_h2o_1to1, ph_h2o_1to5,
rock_structure_pct, smeary_consistence,
bleached_ped_coatings, ignition_redder,
spodic_pellets, skeletans_pct,
skeletan_thickness_mm,
carbonate_coatings_faces_pct,
nodule_size_max_cm, dta_low_endotherm, the
rubbed moist colour (munsell_hue_rubbed,
munsell_value_rubbed, munsell_chroma_rubbed),
pitted_quartz_pct, palygorskite_pct and
aeolian_crack_infill. New site attributes:
flooding_days_growing_period, rudic_recorded
and reference_fao74. Each names the criterion it serves,
with its page, and its fallback when not recorded.
inst/ATTRIBUTES.md and
inst/schemas/pedon-schema.json are regenerated.
A new file, R/fao-readers.R, holds the internal readers
the diagnostics of both editions will share, all three-valued, each
saying what it read, what would decide it and the fallbacks it used:
depths from the literal soil surface, H and O horizons included (Q9);
windows read “throughout” or “in some part”, and “within X cm” by the
top of the feature; thickness-weighted means and the mixed surface, with
the depth below a shallow soil counted as zero where the strongly humic
test of 1988 says so; organic matter as organic carbon x 1.724, flagged
(Q11); pH at 1:1 and 1:5, the CEC per kg clay by NH4OAc or NH4Cl, the
effective CEC of each edition and the base saturation, each flagged
where the method differs (Q12); the three texture classes of the map
symbol in each edition, the class of the upper 30 cm and the 1974 depth
of 125, 90 or 75 cm by that class (Q10), sandy loam or finer and the
texture groups of tonguing; the solum, buried horizons under 50 cm of
new material (35 cm over an andic mantle in 1988); the clay increase in
three bands with its numbers as arguments, equal to the USDA branch of
test_clay_increase_argic() on a grid of clay contents,
within a vertical distance and undecided across a lithological
discontinuity; the hue rank and hue comparisons; the rubbed colour, the
moist colour standing in, flagged (Q24); and the fallbacks of smeary
consistence, the ignition test, rock structure and palygorskite.
The numbers of both editions, with their pages, are in
data-raw/fao_thresholds_1988.yaml and
data-raw/fao_thresholds_1974.yaml, and the readings in
data-raw/fao_readings.yaml (Hugo’s decisions of 2026-11-08
and 2026-11-09, his word on every reading of this part); the later parts
move them to the rule folders. No text of the books is shipped. Every
classification is unchanged (the fixtures of the other systems
byte-identical). # soilKey 0.9.380 (2026-11-08)
Ninth part of the German soil systematics of the KA5 (Bodenkundliche
Kartieranleitung, 5th ed., 2005; system id ka5). A profile
that declares the FAO notation in site$designation_system
(as isis_profile_to_pedon() does) was read on the data
alone: its FAO letters were thrown away, so an E was often read as an
Ah, a Bt or a Bw as a loose C, and the class tests of the Ah/C-Böden and
the Braunerden stayed undecided. A new file, R/ka5-fao.R,
keeps the letters where an FAO letter and a KA5 symbol mean the same
(the KA5 prints no correlation of horizon symbols; the pairs are read
from the two definitions, KA5 pp. 92-105 and WRB 2022 Annex 3,
pp. 225-228). Each FAO designation bounds the KA5 horizons its row may
be: an E is an eluvial A (Al, Ael, Ae, Ahe), an A an A that is not
eluvial, a Bt a horizon with a Bt part, a Bw one with a Bv part, a Bs or
Bh one with a Bs or Bh part, a plain B a B, P or T, a C a C, an R a
solid rock (mC), an O an L, Of or Oh; the redox letters open the S and G
horizons (g both, by the water regime the KA5 asks; l and r the G).
Where a field descriptor is not recorded, a letter states what its
definition names: t the clay coatings of the Bt, w the browning of the
Bv, p the tillage of the Ap, k the secondary carbonate, g and l redox
mottling present with its share open. Measured data come first and
decide against a letter: recorded clay films, the clay difference,
Munsell colours.
Within the family the order of tests decides three-valued. When the
data leave one horizon undecided, it is the letter’s own translation (Bt
for Bt, Bv for Bw) and the open question is one the letter answers, the
FAO designation reads it, as a KA5 designation would be read; such a row
has a lower grade of evidence, listed in
provisional_because as horizons:<code>.
The letter does not answer whether water is groundwater or perched water
(Q13), the organic band of Q10 (H or Aa), or the origin of carbonate
measured in a B: those rows stay undecided. A finer horizon the letter
does not name (an Axp for an FAO Ap) stays undecided beside it. The
letter and the data are in conflict, and the row undecided with a note,
when no horizon of the family holds on the measured data (an FAO Bt with
few clay films, an FAO E not lighter than its Bt), or when a horizon
outside the family holds on the measured data first (an FAO C browner
than the C below, an FAO Bw with the coatings and clay of a Bt, an FAO
Bt with a measured Sd or Go, an FAO A over a measured Ah-Bv); the redox
translations the data rule out are dropped from the candidates. Numbered
sub-horizons with the same defining letter are one horizon (Bt1/Btg2,
Bw1/Bwg2): each Bt sub-horizon must show the clay enrichment on its own
clay against the eluvial horizon above, a Bw1 is compared with the
horizon under the Bw, an E looks for its Bt under its sub-horizons and
an EB. The A1, A2 and B3 of the 1977 numbering get no FAO reading. Rows
with no designation, profiles that do not declare the FAO notation and
profiles in the KA5 notation are read as before. Hugo confirmed the
readings (readings.yaml); the reading of the 1977 numbering
is soilKey’s, for him to confirm.
On the ISIS profiles from Germany
(inst/benchmarks/ka5_isis.R, which now also counts a level
as provisional when a horizon rests on a lower grade of evidence): class
2 of 16 (12.5 %, 3.5-36.0) becomes 4 of 16 (25.0 %, 10.2-49.5) and type
1 of 15 (6.7 %, 1.2-29.8) becomes 3 of 15 (20.0 %, 7.0-45.2); one class
and one type are firm, the rest provisional. Profiles that stop at the
division fall from 13 to 9 of the 16 labelled; DE007 (Parabraunerde) and
DE011 (Braunerde) now key to their type. DE002 (a Pseudogley in its
label) keys as a Normparabraunerde, its S class now closed by the
measured rust; DE009 (Rosterde) as a Normbraunerde. The nine that still
stop do so on what the data do not say: groundwater or perched water
(DE003, DE006, DE019), bioturbation for an Axh (DE013, DE014, Q17), the
origin of the carbonate measured in the Bt (DE015, DE016), a clay
difference under the Bt minimum (DE012), the Bg of DE008. One
expectation of test-v09361-ka5-data-key.R changes: an FAO
Ap in a profile declared fao2006 is now read Ap, not Ah. Every other KA5
test and every classification of the other systems is unchanged
(byte-identical).
Decided by Hugo on the review (2026-11-08 and 2026-11-09). soilKey’s readings of this part are accepted, with these choices: rock is an R designation, or 90 % bedrock or more with a hard rupture resistance recorded (bedrock alone is not rock); free iron below 0.5 % reads as not turning redder on ignition, 0.5 % or more leaves the test undecided; the texture of the upper 30 cm under an organic surface starts at the first mineral horizon, flagged; the strongly humic mean of a soil shallower than 50 cm over rock is divided by 100 cm, flagged; and a horizon without a designation between the last A, E or B and the first C leaves the solum undecided. A window is read only where the depths fill it: a gap or a layer without depths leaves it undecided, overlapping layers are flagged, and “within X cm” fails only when the description goes below X or reaches rock at X. A vector answer with an undecided element now names what would decide it, buried horizons are read after a figure (Bt2b), a rock layer has full rock structure, and a base saturation computed over another CEC method carries both flags.
Eighth part of the German soil systematics of the KA5 (Bodenkundliche
Kartieranleitung, 5th ed., 2005; system id ka5). A new
file, inst/rules/ka5/legacy_names.yaml, maps older German
soil names to KA5 codes, for benchmarks only: the second names of the
DBG systematics of 1998 (Schwarzerde, Kalkschwarzerde, Braunauenboden,
Auenregosol, Tiefumbruchboden and others), Haftnässepseudogley (the
KA5’s own word for the Haftpseudogley, p. 313), the older names the KA5
prints beside its own (Rosterde, Borowina, Latosole, the Marschen
subtypes such as Typische Kalkmarsch), and Chernozem. Every row names
its source and page and resolves to a class, type or subtype of the key.
A name the KA5 prints under two types (Typische Seemarsch,
Übergangsbrackmarsch) is read at the class M; Amphigley, printed for two
classes (pp. 229, 245), is excluded. Three leading modifiers are read:
Acker- (the variety v, p. 267), Typischer (the Norm subtype of a type
name, pp. 191, 238, 250-253; the KA5’s own exceptions, Typische
Kleimarsch and Typische Flussmarsch, are rows of their own) and Primärer
(dropped before a Pseudogley only). A name of exactly two type names
joined by a hyphen is read with the older names put in; one the key does
not print is the type of its last part (p. 191).
A new internal matcher, .ka5_match_label(), reads a
label against the names of the key (21 classes, 54 types with a name,
223 subtypes; soilKey’s bracketed codes left out) and the legacy file:
exact names only, with case, umlaut spelling, the sharp s and the
spacing around a hyphen alike. A name with brackets (but the modifier
“(Acker)”), a slash, a comma, a full stop or a digit, two names joined
by a space and names of three or more parts are not read. There is no
generic tolerance of misspellings; a name not read is NA, never a guess.
In a label of several parts the deepest part wins when the others are
its ancestors, else their common ancestor. A new script,
inst/benchmarks/ka5_isis.R, keys the 24 ISIS profiles from
Germany with classify_ka5() and scores them at the class,
the type and, where both sides give one, the subtype, with Wilson 95 %
intervals. It downloads nothing: it reads the saved ISIS profiles from
its first argument, SOILKEY_ISIS_CACHE or
tools::R_user_dir("soilKey", "cache")/isis/profiles.rds,
and stops if there is none. Its explicit variant list reads two names of
the labels with no printed source, flagged: a soil like a Schwarzerde as
the class T only (DE008), and a Braunerde of low base content as the
type BB with the variety dy noted (DE011). ISIS data are not
shipped.
First run (soilKey 0.9.379): all 16 local names are read (one at
class level, nine at type level, six at subtype level); 8 profiles have
no local name and 6 have no horizons. Class 2 of 16 (12.5 %, 3.5-36.0),
type 1 of 15 (6.7 %, 1.2-29.8), subtype 0 of the 1 profile where both
sides give one. The low figures come from how far soilKey keys, not from
disagreements: on the data route 13 of the 16 labelled profiles stop at
the division, the class test of the Ah/C-Böden undecided in 11 of them
and that of the Braunerden in 8, because the FAO-style E and Bt horizons
are mostly left unread or read as Ah or lC. Only DE001 (Parabraunerde,
keyed Normparabraunerde), DE005 (Nassgley, keyed Normgley: the class
agrees) and DE004 reach a type. DE004 is a Gley-Podsol in its label and
a Luvisol in ISIS’s WRB; soilKey keys it as a Normgley. The label is
kept and scored as printed, a disagreement. Hugo’s decisions on the
readings of this part are in readings.yaml. Every
classification is unchanged (the fixtures of the other systems
byte-identical).
Eighth part of the Chinese Soil Taxonomy (2001, English edition;
system id cst2001). A new script,
inst/benchmarks/cst2001_isis.R, keys the 51 ISIS reference
profiles from China (CN001-CN051) with classify_cst2001()
and scores them against the CST name of their local classification. It
downloads nothing: it reads a saved list of raw ISIS profiles from its
first argument, the environment variable SOILKEY_ISIS_CACHE
or tools::R_user_dir("soilKey", "cache")/isis/profiles.rds,
and stops if there is none. The markdown report goes where the second
argument says; ISIS data are not shipped.
The labels carry the genetic name of the profile (the Genetic Soil
Classification of China) beside the CST one. A new internal matcher,
.cst_match_label(), finds the CST part and its taxon at any
level among the 779 names of the key (14 orders, 39 suborders, 138
groups, 588 subgroups; soilKey’s bracketed residuals left out): exact
names only, singular and plural, case and hyphenation alike, and the
book’s aliases. There is no generic tolerance of misspellings. The
script adds an explicit, documented list of the two known slips of the
labels, tried only when no part matches exactly and flagged in the
report: Acidi-Undic for Acidi-Udic Cambosols (CN008), and the order name
Isohumisols of the 1991 and 1995 proposals, read as Isohumosols (CN049,
scored at the order). 50 labels match: 48 at group level, one at
subgroup level (CN014, Panic Sali-Orthic Aridosols) and one at order
level (CN049); CN043 gives the genetic name only. Each level is scored
on the labels that reach it, with a Wilson 95 % interval; a profile
keyed to a bracketed residual (CN020, [E2] [Other Ferralosols]) counts
as a disagreement and is reported apart.
First run (soilKey 0.9.378): order 26 of 50 (52.0 %, 38.5-65.2), suborder 22 of 49 (44.9 %, 31.9-58.7), group 14 of 49 (28.6 %, 17.8-42.4), the one subgroup label not reached. The Ferralosols agree 7 of 7, the Argosols 6 of 7 and the Primosols 3 of 3; the four Anthrosols and the two Aridosols are missed (keyed as Ferrosols, Argosols, Cambosols or Primosols), three of the five Isohumosols go to the Primosols, three of the seven Ferrosols to the Ferralosols, and the Cambosols agree 5 of 13. Most names are provisional: at the order 46 of the 51 profiles have a class tested before theirs that could not be decided, and 48 at the group (the book’s own provisional marks are not counted). Most of these are the Halosols (H), undecided in 27 of the 46, and the Andosols (D), undecided in 24. The labels were given by ISSAS, probably on the Chinese edition, so the group is the fair target and differences below it are not errors by themselves. The genetic names have no automatic crosswalk to the 2001 system and are not scored; WoSIS was not queried (no national classification field is known in its schema). Every classification is unchanged (the fixtures of the other systems byte-identical).
Two order-level fixes of the Chinese Soil Taxonomy (2001; system id
cst2001), decided by Hugo on 2026-11-08.
Gley colours without a ferrous-iron test or Eh gave the gleyic
features provisionally (Q11) in any layer but an E or albic one, so a
humus-grey A horizon (10YR 4/2, 4/1, 5/1) of a well-drained profile
keyed as Gleyosols. A recorded drainage class of well drained or better,
with no saturation regime recorded, now rules the colour-only reading
out in every layer without redox features of its own, as it already did
for the low chroma of the redoxic features. Moderately well drained does
not. Redox features are read per layer: mottles (a mottle recorded as
none, absent, nil, - or 0 is none), redox concentrations, nodules, or a
g or r suffix of the designation (Bg, Cr). A positive test or rH 19 or
less still gives the features in any layer. With no drainage class
recorded, such an A stays provisional Gleyosols with the alternative in
$candidates. The drainage reader now also takes
“excessively well drained” and “somewhat excessively well drained” (the
ISIS wordings) as well drained or better, reads hyphens and underscores
as spaces (“Well-drained”), and takes the worst class of a range (“well
drained to moderately well drained” is not well drained); it serves the
saturation regimes, the redoxic features and the Foli- groups too. A
mottle recorded as none no longer counts as a redox sign beside a
shallow water table, nor as a mottle in item 3 of the redoxic
features.
Item 2b of the argic horizon (p. 36) asks more total clay and more fine clay than the eluvial horizon; soilKey read the fine clay only at 60 % clay or more. Now, in the lower bands, the fine clay is compared with the eluvial layers the total clay increases over: if every one with fine clay measured has as much or more, item 2b fails; if the fine clay is not measured in both layers (in one or neither), the total-clay increase passes provisionally. The whole key is then run again with that increase failing, no gate switched off: the first level whose class differs names the fine clay as what would confirm it, even when it was assigned firmly (an argic layer can block an earlier class, the Spodosols for instance), and the class of that run is the alternative (a 1.2 times increase with no clay films: Argosols, provisional, with Cambosols as the alternative). The clay-pan and secondary clayification keep the total clay alone. Clay films and the thin section remain alternatives to the increase, as printed, and the fine-clay ratio a third higher stays a “normally”. The alkalic horizon reads the same items, so it follows the argic horizon; its evidence grade, read on its own items, is unaffected. A block of alternatives in the key (any_of) is now provisional only when every alternative that passed is.
Names are unchanged except the H2.2 example, a well-drained Halosol that was Gleyic on colours alone and is now Typic Aqui-Orthic Halosols. The suborder examples G2, H1, K1 and K2, whose argic or alkalic horizon rests on item 2b, now record their fine clay, so they and the group and subgroup examples built on them (the Alkalic Halosols, the Argi- and Argic Ferrosols, the Argic Aridosols) keep their names, not provisionally. On the 51 ISIS profiles from China no name changes; seven Argosols, Ferrosols and Isohumosols with an argic horizon by the clay increase alone now carry the fine-clay warning and an alternative. Every other classification is unchanged (the fixtures of the other systems byte-identical).
Seventh part of the Chinese Soil Taxonomy (2001, English edition;
system id cst2001). classify_cst2001() now
keys a pedon of orders H to N (Halosols, Gleyosols, Isohumosols,
Ferrosols, Argosols, Cambosols, Primosols) below its group to the 412
subgroups of key 5.2 (pp. 108-180), in the book’s order, in
inst/rules/cst2001/subgroups/{H..N}.yaml, with the page,
the name as printed (the canonical spelling of Q2, the other printed
forms and the singular as aliases), the adjective and soilKey’s
Portuguese gloss. Every group of the book now has its subgroups: the 588
names of Appendix 1 each resolve to one row, and the note that the name
stops at the group is gone (soilKey’s bracketed residuals keep theirs).
J1.2.1, K1.1.1 and M3.5.1 carry the book’s own provisional mark.
New presets in presets.yaml, with their criteria in
R/key-cst-subgroups-hn.R: the albic horizon, or a glossic
horizon or glossic evidence, anywhere, within a depth, below the mollic
epipedon or above the argic horizon; the calcic horizon alone, with soft
powdery lime, or with the hypercalcic horizon and the calcipan, with its
upper boundary within or between depths; Eutric and pH 7.0 as the
converse tests, Leachic as a share of the window, the ferric property
throughout the argic horizon or claypan or the B, and Dystric throughout
the claypan or the argic horizon; a property in some subhorizon of the B
(allitic, alic, ferric, spodic evidence); features in a share of the
window (Phosphic) or in every layer of it (Epigleyic); salic evidence
with its duration; para-alkalic evidence; gleyic evidence of perched
water (Stagnic); a hue in a subhorizon of the upper half of the B
(Xanthic of M5.4.4); Permic. Written directly: the kind of the histic
epipedon (Fibric, Sapric), the window below the top of the claypan
(L1.1.2), the Fe-Mn nodules of an indurated subhorizon (Concretic),
cinders over 0-25 cm (Cinderic), carbon over 0-20 cm (Grayic), vertic
evidence within 25 cm (Verti-lithic), and the torrential and marine salt
profiles of the Halosols (Dilluvic, Marinic). The presets of 0.9.375 and
the subgroups of orders A to G are unchanged. A new site attribute,
salic_months_per_year, gives the months a year with salic
evidence the Parasalic subgroups of M2.2 and M3.3 ask for; not recorded,
the evidence observed passes provisionally (Q15).
make_cst2001_example() gives one profile per subgroup of
orders H to N, each keying to its own subgroup, not provisionally (588
subgroup examples in all); the suborder and group examples keep their
order, suborder and group and now reach a subgroup. Every other
classification is unchanged (the fixtures of the other systems
byte-identical).
Decided by Hugo on the review (2026-11-08). The nine defects of the
review are fixed: shajiang in a run (and the M2.2 group key), a B
subhorizon or the whole B measured within 125 cm of the mineral soil
surface, the upper half of the B of M5.4.4 capped at 125 cm, Dilluvic
with a layer not measured or a description ending above 200 cm, Marinic
with the carbonate not measured, and a Lithic contact or a horizon with
its upper boundary within a depth (gypsic horizon, salipan, alkalic
evidence, argic, sulfuric and plinthic horizons) are undecided when the
description stops above the depth asked, not on rock or a contact, as
the feature windows already were (the Lithic rows of orders A to G too);
phosphic evidence of N4.7.1 reads the mineral soil surface
(phosphic_property_cst(datum =)); M1.6.2 takes a calcic
horizon starting at 100 cm; Verti-lithic reads a half-open window.
Alkalic evidence is now read on its printed items (p. 39): the weakly
developed structure of the alkalic horizon and an ESP of 5 or more
within 40 cm in a subsurface layer, without the argic items. With a
short paddy history the anthrostagnic evidence passes its regime item on
the paddy record, and the saturation axis reads the anthrostagnic regime
from paddy records only when the history is not recorded or longer than
half of the years. The lithologic characters of sandy deposits are read
from the mineral soil surface, litter left out. The argillans of a
claypan (item 4) qualify the first mineral layer, so a claypan can be
exposed (L4.3.1). With these readings every subgroup is reachable and
has an example. soilKey’s other readings of this part are accepted, with
these choices: Stagnic undecided under a flooded record, Recalcaric
undecided when the description ends above 100 cm, Concretic indurated
only (indurated or extremely hard) below the base of the albic run, and
M5.4.4 a run whose top lies in the upper half of the B. A class assigned
on a provisional reading now names what would confirm it (a ferrous-iron
test, a deeper description, the extent of the contact, the months with
salic evidence, the duration of the cracks).
Sixth part of the Chinese Soil Taxonomy (2001, English edition;
system id cst2001). The registry now names the level
subgroups, and classify_cst2001() keys a pedon of orders A
to G (Histosols, Anthrosols, Spodosols, Andosols, Ferralosols,
Vertosols, Aridosols) below its group to the 176 subgroups of key 5.2
(pp. 76-108), in the book’s order, one file per order in
inst/rules/cst2001/subgroups/ keyed by group, with the
page, the name as printed (the canonical spelling of Q2, the other
printed forms and the singular as aliases), the adjective and soilKey’s
Portuguese gloss in levels$name_pt. Typic, the residual of
each list, passes by default. [A1.3.x] Lithic
Hemi-Permagelic Histosols, listed in Appendix 1 but not in the key, is
keyed at its Appendix position with the test of A1.2.3 (Q3), and the
result notes it. C1.1.1 and D1.1.1 carry the book’s own provisional
mark. The groups of orders H to N stop at the group, with a note, until
their subgroups follow in the next part.
The same adjective carries different depths, thicknesses and extents
in different groups, so each subgroup row calls a preset of the new
inst/rules/cst2001/presets.yaml with the numbers printed
for it (Lithic, Mottlic, Gleyic, Parasalic, Sodic, Sulfic, Dystric,
Eutrophic, Trunic, Xanthic, Dark, Takyric, the cracks of the Aridic and
Ustic subgroups …). load_rules() expands the calls into
ordinary blocks when the rules are loaded
(R/rule-presets.R), so the rule engine does not change; a
complex subgroup (Calcari-mottlic, Aridi-trunic, Gypsi-panic,
Sodi-takyric) is both of its parts and is keyed before them, as printed.
.validate_rules() reports a preset called with an unknown
parameter or without a required one. The criteria the subgroup keys
define are written in R/key-cst-subgroups.R: a lithic
contact within or between depths (with the fragments and plane-extent
alternatives of the later orders), a feature in a run of layers, in
layers totalling a thickness or anywhere in a window, the Buric and
Terric mineral layers and the tier kinds of the Histosols, a lithic
contact within the control section, the carbonate pattern of
anthro-recalcification, the soluble salts of the Parasalic
Siltigi-Orthic Anthrosols, base saturation or pH in a window, base
saturation in a share of it, hues in a run, a share or the upper part of
the B, the order’s horizon at the surface, the dark mixed surface of the
Aridosols and an argic horizon with lime infiltrates. Every test is
three-valued as before: an undecided subgroup before the assigned one
makes the name provisional, and a subgroup assigned on a provisional
reading (gley colours without a test, a window cut by the base of the
description) comes with the alternative the key would reach.
make_cst2001_example() takes a subgroup code of orders A
to G as well and gives one profile per subgroup (176), each keying to
its own subgroup, not provisionally; the suborder and group examples
keep their order, suborder and group. The readings of this part,
soilKey’s own for Hugo’s word, are in
inst/rules/cst2001/readings.yaml. Every other
classification is unchanged (the fixtures of the other systems
byte-identical).
Decided by Hugo on the review (2026-11-07): a window that runs below the base of the description is undecided there unless the description ends on rock or a contact; the thickness not described joins the upper bound only, so a feature already found above is a firm pass and otherwise the subgroup is undecided and the name provisional (Mottlic, Endogleyic, Gleyic, Sulfic, Parasalic, Sodic, Paracalcic, Paragypsic, Calcic, Shajiang, and the tiers of the Histosols). soilKey’s other readings of this part accepted as proposed. Trunic: a recorded A, AB, AC or E at the mineral soil surface fails before anything else, and the anthropic truncation flag is read only when the first layer has no designation; BA and B/A count as a B; the ferralic horizon is tested on the first layer whatever its designation. Where a subgroup names the gypsic horizon alone (G2.1.7, G2.2.3, G2.2.5) a hypergypsic horizon does not count. The preset expander also expands a preset written directly as a mapping and reports a call with extra keys. New aliases Fe-leachic-Gleyi-Stagnic Anthrosols (p. 83) and Gypsi-Panic Sali-Orthic Aridosols (p. 105). Gypsic evidence left open by an undescribed layer below now names the gypsum to measure.
Fifth part of the Chinese Soil Taxonomy (2001, English edition;
system id cst2001). The registry now names the level
groups, and classify_cst2001() keys a pedon below its
suborder to the 138 groups of key 5.2 (pp. 75-176), in the book’s order,
one file per order in inst/rules/cst2001/groups/ keyed by
suborder, with the page, the name as printed (the canonical spelling of
Q2, the other printed forms as aliases) and soilKey’s Portuguese gloss
in levels$name_pt. Where the book prints no residual,
soilKey’s [A1.4] [Other Permagelic Histosols] and
[A2.5] [Other Orthic Histosols] close the list (Q4); the
result notes that the name stops there, as it now also does for
[E2] [Other Ferralosols], which has no groups. C1.1 and
C2.1, all the Spodosols, carry the book’s own provisional mark. The
groups read the horizons, characteristics and regimes of the earlier
parts and the criteria the group keys define, written in
R/key-cst-groups.R: the Foli- groups and the kind that
predominates in the surface tier of the Histosols, the grey
iron-percoleached subhorizon and the iron accumulation of the Stagnic
Anthrosols, the hydromorphic cumulic epipedon, the rhodic and xanthic
colours of the Ferralosols by the thickness of the window, the udic
regime bordering on the perudic one, a calcic horizon starting between
50 and 125 cm, the thickness of the mollic epipedon, an albic horizon
above the claypan, folic histic evidence, shajiang, the takyric surface
of the Halosols, coral sands within 100 cm, carbonate rocks or coral
sands in more than half of the horizons, and a property in some
subhorizon of the B or throughout it (allitic, highly weathered, alic,
acid). Every test is three-valued as before: an undecided group before
the assigned one makes the name provisional, and a group assigned on a
provisional reading comes with the alternative the key would reach. A
residual group named for a regime that the soil does not have (the Udi-
groups; the Aqui-Orthic Halosols, named for the aquic regime) keeps its
class, with a note.
make_cst2001_example() takes a group code as well and
gives one profile per group (140, the two bracketed residuals included),
each keying to its own group, not provisionally; the 39 suborder
examples still key to their suborder, now with a group (a few were given
the measurements their group asks for, so that it is decided). The
readings of this part, soilKey’s own for Hugo’s word, are in
inst/rules/cst2001/readings.yaml. Every other
classification is unchanged (the fixtures of the other systems
byte-identical).
Decided by Hugo on the review (2026-11-07): soilKey’s readings of
this part accepted as proposed (J3.1 and M4.2 included). B1.2 reads the
grey colour alone (moist chroma 2 or less, as printed), with no test of
the iron. The Foli- groups take a well-drained record for the days of
saturation only as a stand-in, flagged in the trace and named in a
warning. Where a group names the calcic horizon alone (F1.1, F3.2, G1.1,
J2.4, L2.2) a hypercalcic horizon does not count. H1.1 reads the depth
of the polygonal cracks (cracks_depth_cm, 1-4 cm) first,
the crust thickness standing in, flagged. Fixed on the review: the depth
below the base of the description is undecided in the colour shares of
the Ferralosols and the coral share of M5.2, and a share that passes
only on the part described passes provisionally, with the alternative;
the thickness of the mollic epipedon (J2.3) is undecided while a layer
below it may still belong to it; layer_run_cst() takes
grade = "at_least_evidence", so gleyic evidence counts in
M4.2.
Fourth part of the Chinese Soil Taxonomy (2001, English edition). The
system is registered as cst2001 (aliases cst,
china, chinese; experimental and opt-in; order
15 in the registry, after the German KA5 and South Africa planned at 13
and 14), with the levels orders and suborders for now.
classify_cst2001() keys a pedon to the 14 orders of key 5.1
(pp. 72-75) and the 39 suborders of key 5.2, in the book’s order, on the
33 diagnostic horizons (0.9.371), the 25 diagnostic characteristics
(0.9.372) and the regimes (0.9.370), plus the criteria the key defines
where it uses them (the share of the upper 60 cm with andic property,
the organic soil materials of the Histosols, an argic horizon above the
spodic one, the base saturation window of the Isohumosols, the claypan
with illuviation argillans, the humic spodic subhorizons, the texture of
the Vitric Andosols, the crack days of the Ustic Vertosols, the low n
value or clay of the Cambosols, irrigation and anthro-silting within 50
cm). Three-valued: an undecided class before the assigned one makes the
name provisional; a class assigned on a reading the book leaves open
(gley colours without a test, cracks for their duration) carries a
warning. soilKey’s residual [E2] [Other Ferralosols] closes
the suborders of the Ferralosols, and E1 takes the udic or perudic
regime (Q4). Names in English as printed, with soilKey’s Portuguese
gloss in levels$name_pt; the book’s own provisional marks
are read from book_provisional (none falls on an order or
suborder). A residual named for the udic regime reached under another
recorded regime keeps its class, with a note. The approximate
equivalents of each order in US Soil Taxonomy (1999) and the WRB (1998),
Tables 4.2 and 4.3, are a note in the result, the report and the app
(inst/rules/cst2001/correlation.yaml; Q1), never a class.
The horizon panel of identify_horizons(pedon, "cst2001") is
in the trace (phase horizons).
make_cst2001_example() gives one profile per suborder
(39, each keying to its own suborder, not provisionally) and, with
near_miss = TRUE, fourteen near misses, one per order. The
app lists China among the national systems with the 39 examples;
data-raw/cst2001_taxa.csv holds the 779 names of Appendix 1
in the canonical spelling of Q2 (with soilKey’s [E2]), the
other printed forms as aliases. A recorded drainage class of well
drained or better now rules out the saturation regimes of the CST
(stagnic, anthrostagnic, aquic, peraquic). The readings of this part are
in inst/rules/cst2001/readings.yaml. Every other
classification is unchanged (the fixtures of the other systems
byte-identical).
Decided by Hugo on the review (2026-11-06): soilKey’s readings of
this part accepted, with these changes. The spodic materials by colour
alone only directly below an albic horizon or an E layer, elsewhere with
a sign (cementation, cracked coatings, Alo + 1/2 Feo 0.50 % with half or
less above, ODOE); measured oxalate without a sign gives spodic evidence
at most, no data leaves a red B undecided (red Ferralosols, Ferrosols
and Argosols no longer key as Spodosols). The base saturation of the
Isohumosols below the description is read as saturated under a
calcareous lowest horizon, otherwise the window stops at the base of the
description and the class is provisional. Runs of gleyic and redoxic
features skip rock and organic layers. The permafrost of the Cambosols
(M 4), the contacts of the Vertosols (F 2) and the anthroturbic layer
(N1) are read from the mineral soil surface
(datum = "mineral" of permafrost_layer_cst(),
lithic_contact_cst(),
paralithic_contact_cst(),
anthroturbic_layer_cst()). The anthrostagnic epipedon and
the agric horizon on a plain A are ruled out when an item fails, instead
of undecided. M 3 keeps the printed clay under 80 g/kg and reads an
unmeasured n value under 0.7 in a layer not saturated. The Vitric
Andosols take sand, loamy sand and sandy loam only. Histosol item b is
literal. A recorded non-volcanic parent material rules out the andic
property; pH(H2O) under 5.5 or a perudic regime rules out the salic
horizon where salts are not measured; under an aridic regime a crust not
recorded leaves the aridic epipedon undecided. A class assigned on a
provisional reading (gley colours without a test, Q11) comes with the
class the key would reach without it, in candidates (kind
“alternative”), a warning, the trace and the printed result, never as
the class.
Third part of the Chinese Soil Taxonomy (2001, English edition;
system id cst2001, registered in a later part). The 25
diagnostic characteristics of the book (pp. 43-64) read on the data
(R/diagnostics-cst-properties.R), three-valued, with the
layers, the missing attributes and the fallbacks used: organic soil
materials with their five kinds (fibric, hemic, sapric, folic, mattic)
and the control section and tiers of the Histosols; the seven lithologic
characters within 125 cm (lithologic_characters_cst(kind =)
and lc_<kind>_cst()); lithic and paralithic contacts;
anthro-silting materials; vertic features and vertic evidence; the
anthroturbic layer; gleyic features and gleyic evidence (gley colours
without a ferrous-iron test or Eh met provisionally, Q11); redoxic
features; the permafrost layer; frost-thawic features; the n value; the
isohumic property (Rh 0.4 or less, the printed “4” read as 0.4, Q9; the
book’s default bulk densities where none was measured, flagged, Q10);
the humic, andic, ferric (every layer of the B, Q23), allitic (the Ki of
the sulfuric attack flagged, Q16), alic, phosphic, sodic and calcaric
properties with their evidences; base saturation (eutric, dystric,
eutrophic, dystrophic in a window); sulfidic materials (no number in the
book: the WRB number and stand-ins, always with a lower grade). The two
regimes are the readers of 0.9.370. Layer characteristics take the
grades of the horizons (full, evidence, at least evidence) and join the
horizon panel (characteristics,
characteristic_evidences,
characteristic_stand_ins); the sulfuric horizon now reads
the sulfidic materials under its base. Numbers in
inst/rules/cst2001/thresholds.yaml with their pages; Hugo’s
decisions as applied and soilKey’s own readings of this part, for his
word, in inst/rules/cst2001/readings.yaml. Fixtures of the
differences from the WRB 2022 (sodic ESP 30, the isohumic ratio, the
Chinese gley colours, alic pH(KCl) 4.0, andic of KST 1996, ferric). No
new attribute. Every other classification is unchanged (the fixtures of
the other systems byte-identical).
Decided by Hugo on the review (2026-11-06): rock layers carry no soil colour; carbonate rocks by rock nouns only, undecided where the rock is not named; the 60 cm Histosol tier needs fibric moss materials; frozen designations read after a discontinuity numeral, and frozen ground not recorded is absent where the description reaches the depth asked (only a frigid or warmer regime rules permafrost out); the scaly structure in an A or B only; provisional gleyic features marked in the panel, and gley colours alone not read in an E or albic layer without redox features or a saturation regime; the allitic fine-earth ratio (the sulfuric Ki) ORed with the clay ratio; redoxic item 3 without a carbon exclusion, false under a well-drained record; northern red earths by a red earth or red clay parent material; the calcaric property on measured CaCO3, else effervescence, else pH under 6.5 non-calcaric; the isohumic depths scaled to the contact; the sulfuric horizon’s lower grade only on the WRB stand-ins; the phosphic pattern with no reversal over 10 %; the sandy carbon as a weighted mean; every purplish layer with fragments under 4 cm.
Second part of the Chinese Soil Taxonomy (2001, English edition;
system id cst2001, registered in a later part). The 33
diagnostic horizons of the book (pp. 20-43), each read layer by layer on
the data (R/diagnostics-cst-horizons.R,
R/diagnostics-cst-anthropic.R): a grade per layer, full,
evidence (the book’s weaker grade, for the 15 horizons that have one),
none or undecided; readers
<horizon>_cst(pedon, grade = "full" | "evidence" | "at_least_evidence", top_max)
for the key, phos_agric_horizon_cst() for the phos-agric
kind of the agric horizon and
argic_horizon_cst(natro = TRUE) for the natro-argic horizon
of the Aridosols. A WRB or USDA diagnostic of soilKey stands in only
where a CST descriptor is missing, flagged with a lower grade.
.cst_identify() gives the horizon panel (the horizons,
evidences, kinds and stand-ins of each layer);
identify_horizons(pedon, "cst2001") reaches it once the
system is registered. The numbers are in
inst/rules/cst2001/thresholds.yaml with their pages;
soilKey’s readings of this part, for Hugo’s word, in
inst/rules/cst2001/readings.yaml. Fixtures of the
differences from the WRB 2022: the argic clay increase (+3 / x1.2 / +8 /
fine clay +8), plinthite 10 %, the alkalic horizon at ESP 30 and pH 9.0,
the salic horizon on salts or the 1:1 EC. Every other classification is
unchanged (the fixtures of the other systems byte-identical).
First part of the Chinese Soil Taxonomy (2001, English edition;
system id cst2001, registered in a later part). New horizon
attributes (36, section “Chinese system (CST 2001)”, among them
fine_clay_pct, clay_films_thickness_mm,
reduced_matrix_pct, ferricyanide_test,
eh_mv, p_olsen_mg_kg,
ec_1to1_dS_m, shajiang_pct,
pyroclastic_fragments_pct) and site attributes (14:
aridity_index, aridity_index_max_month,
climatic_moisture_regime, udic_perudic_border,
mean_summer_soil_temp_C, summer_saturated,
cracks_open_days, irrigated and others), each
with its fallback. soil_moisture_regime takes stagnic,
anthrostagnic and peraquic, which the USDA key reads as aquic;
soil_temperature_regime takes permagelic, read by the USDA
key as gelic. The shared readers (R/cst-readers.R: units,
clay activity, free iron, texture and particle-size classes, hue ranks,
the mixed surface, windows and shares, storage with the book’s default
bulk densities, the arid region) and the regime readers
(R/cst-regimes.R, each regime with its source in the trace)
read the numbers of inst/rules/cst2001/thresholds.yaml. The
moisture regime is read on two axes, climatic (aridic, ustic, udic,
perudic) and saturation (stagnic, anthrostagnic, aquic, peraquic), so a
paddy recorded udic is anthrostagnic and a value on one axis says
nothing of the other; permafrost within 50 cm gives the permagelic
regime ahead of an estimate from the air; Cr is a paralithic contact
only with a contact recorded or an FAO, WRB or USDA notation declared
(otherwise the redox r of the Chinese field notation); an O horizon
without a measured bulk density takes the range 0.1-0.4 Mg/m3, so a
storage is a range. Hugo’s decisions of 2026-11-04 and 2026-11-05 are in
inst/rules/cst2001/readings.yaml. Every other
classification is unchanged (the fixtures of the other systems
byte-identical).
classify_ka5() now keys the fifth and sixth levels of
the German systematics (section 5.7.1.4, pp. 263-282), an additive level
after the subtype (Hugo’s decision Q1): the 38 variety codes of Tab. 49
by the 22 criteria of Tab. 46, offered where Tab. 50 marks the subtype,
plus the six of its note 1 (og, c, z, k, v, ku) everywhere except where
the subtype’s own formula writes the feature; the subvarieties as a
digit on the letter (s and g flach 2 or tief 4, p schwach 2, mäßig 3 or
stark 4; the base-saturation class BS1-BS5 of Tab. 48 on the potential
or effective CEC is reported in the trace). Tab. 50 is in
inst/rules/ka5/varieties.yaml with its pages, all 223
subtype rows read from the page images (the terrestrial rows of
pp. 274-279 for the first time), with the codes, criteria, thresholds,
subvariety classes, symbol rules I-VII and the printed examples. Each
criterion is read on the horizons, three-valued: on the notation by the
symbols written (Aeh, Ahe, Sew, rGo, eGo, zAh, oAh, Bms, Gkso, Cbtv,
Ctv, Akh, Ap, the base-saturation marks), on the data by the record
(base saturation, colours, organic substance, carbonate, EC, jarosite,
cementation, clay films and bands, erosion degree, rewetting, land use);
the humus forms only as recorded. A variety the data leave open is not
named: it is listed as undecided in trace$varieties and one
warning, the result not provisional (p. 263). The result gains rows of
level variety (the code with its digit, the word of the
name, the gloss, the full symbol in a symbol column), the
full name in name (“podsolige pseudovergleyte
Normbraunerde”, “(Acker)Gley”) and the symbol in
trace$variety$symbol (p2.s2BBn,
vGGn); the development depth of Tab. 47 is reported in the
trace. The further subtypes of the type that pass join as a combination
(Q21; Tab. 46 no. 17, rules II-IV: PP-GG-BB
Podsol-Gley-Braunerde, BB-GGe, GGh-GGc
(Humus)Kalkgley); the overlays of Tab. 46 no. 18 stay out of the levels
and the name, reported in the trace
(trace$variety$overlay); r and e stand before the letter
they qualify (BB-rGG, r.gLFn,
LF-eBB). An Aeh, Ahe, Akh or Aka takes a subtype formula’s
plain Ah slot, so a podzolic or cultotrophic topsoil keeps the Norm
subtype. make_ka5_example(variety = ...) gives a profile
for each of the 38 codes; every printed example of pp. 268-272 reads
back to its name from its symbol. The levels above the variety of every
KA5 example are unchanged; their names gain the varieties their data
carry (the default Bv and Tv colours of the examples are no longer
iron-rich or reddish; the podzolic B of the subtype examples keeps its
colour, so their data twins key as before, and is read as reddish). New
horizon attribute schwertmannite_present (the variety sf).
soilKey’s readings are in readings.yaml. Every other
classification is unchanged.
Decided by Hugo on the review (2026-11-07): the name carries the
varieties, the overlays do not (the decision of 0.9.364 stands); open
varieties stay out of provisional_because; rt is read on
the type’s own B or T horizon (Bv, Bs, Tv, Bt); a feature the subtype’s
formula already writes is not named (an optional (e) counts as written;
no note-1 c on the Kalkpaternia, Pararendzina, Rendzina and
Kalktschernosem); on the notation route the carbonate data stand in for
the prefix e only on rows with no symbol, and a Tschernosem’s carbonate
is not geogenic by default; an Ae under an Ahe is stark podsolig; rule
IV allows a hydromorphic type last (BB-LL-SS); a rewetting not recorded
is absent; the base-saturation class goes to the trace only; a and g on
the same deep aGo name a only; no anthropic-truncation stand-in for e;
eu, m and dy are open where no horizon outside the C reaches into 2 to
< 5 dm, and the O/C soils read their O horizon; the relict r
qualifies a g or s only when that one is named, otherwise the type
(rMCn); b on the data needs a brown colour; the aG of the variety a lies
strictly deeper than 8 dm, and a description ending above it leaves a
open; sf accepts schwertmannite.
classify_ka5() now keys the subtypes of the
semiterrestrial, subhydric and Moore types from the type texts
(pp. 238-262): 85 subtypes (A 12, G 40, M 15, Ü 3, I 3, H 4, K 7 and the
unit KV-KM; the Nassstrand and the four subhydric types of class J have
none), in inst/rules/ka5/subtypes/{A,G,M,UE,I,J,H,K}.yaml,
with the order and fallback of Q21: the Auenböden by their aGo at 4 to
< 8 dm (Gley-X) or their aG at 8 dm or deeper (the Norm, an aG under
the description allowed); the Gley transitions of the terrestrial and
Auen types (the Gr typically 8 to 13 dm, not required), the Hang- and
Quellen- subtypes by the prefix s or q (on the data by
groundwater_source, the slope for the s), the Oxigley by
the oxygen-rich groundwater or no Gr in a profile described to 13 dm
(Q16), the Moorgley with no Norm subtype; the Marschen, the Strand and
the Watt by their tidal prefixes tm, tb, tp; the Niedermoor and Hochmoor
by the pH of their peat where measured; the Erd- and Mulmmoore by their
suffixes, with the transitional unit KV-KM. Two open subtypes of Q22, in
brackets: “[Übergangsmoorgley]” and “[vermulmtes Erdhochmoor]”. The
Rohmarsch keeps Q20: a Go-Ah is a Rohmarsch unless the site is embanked
or not tidally flooded.
The overlays (Tab. 46 no. 18) are reported in
trace$overlay and the warnings, as varieties that change
neither the levels nor the name: a mineral cover on a Moor keeps the
Moor (Q7), named as substrate only under 2 dm, “flacher Gley über
Niedermoor” (GG\HN) at 2 to < 3 dm and “Gley über
Niedermoor” (GG/HN) at 3 to < 4 dm, the cover keyed as
the mineral soil it would be; a fersiallitic or ferrallitic palaeosol
under the soil is named “… über Fersiallit / Ferrallit” (Q19); a buried
soil (fossil horizons of a layer II or deeper) is keyed alone from its
own top and named by the thickness of the soil above, under 3 dm
“flach”, 3 to < 7 dm, the Organomarsch over a Podsol by its own steps
(1.5 and 3 dm, p. 254). make_ka5_example(subtype = ...)
gives a profile for each of the 85 subtypes and the two open ones, with
a data twin (63 key on the data alone); the wet type examples key to
their Norm subtype and keep their types. The Paternia gate now leaves a
Paternia-Vega (an aM under the ilC) to the Vega, and the Auenböden take
an S under an aM anywhere above it (the Pseudogley-Vega). soilKey’s
readings are in readings.yaml. Every other classification
is unchanged.
After the review (Hugo, 2026-11-06): the readings accepted; only an aM (prefix a) beginning above 8 dm takes a profile out of the Paternia, aM bands in the ilC keeping it; the Gley-Rambla, Gley-Paternia and Gley-Kalkpaternia allow their aG under the description; the Wechselgley takes no q; a Moorgley whose peat is of no known kind leaves the subtype undecided, and the Hang-, Quellen- and Hochmoorgley are tested before the Niedermoorgley; the Normhochmoor and the Hochmoor gate read the pH in the hH(w); on the data route a horizon among a row’s candidates, or one the data key does not build (Gso, Hvm, an unrecorded secondary carbonate, a layer II, an A or M part), leaves a subtype undecided rather than failed; a Moor under a cover of less than 4 dm reads its type from the top of the peat (Ah/Go over an nHv: GG/KV).
The bleached and podzolic horizons on the data (Hugo, 2026-11-06): the order of tests on the data reads a pale first row over a pale Ae over a Bh or Bs as an Ahe; a B with the Cp/Fep of a Bh or Bs is no Bt when no clay coatings are recorded; illuvial humus (the Ah’s humus minimum under a pale horizon without it) or oxalate Fe and Al accumulated under a pale horizon leave the Bt and the podzolic B both undecided; under a podzolic B a clay increase with no clay coatings recorded is no Bt, and the eluvial Al of a Parabraunerde under a podzolic B is read; a G with a podzolic B part is a Bhs-Go, not an Ah-Go. On the data the Podsol-Gley twin now keys PP-GG (it read Ah/Al/Bt-Go before), the Podsol-Braunerde PP-BB (was a Parabraunerde), the Braunerde-Podsol BB-PP (was LL-PP), the Plaggenesch-Podsol a Podsol (was a Parabraunerde); LL-PP, GG-PP and YK-PP keep their subtypes with fewer candidates. The types of the type examples and of the notation route are unchanged.
classify_ka5() now keys the subtypes (Subtypen) of the
terrestrial types from the type texts (pp. 202-237): 138 subtypes of the
13 terrestrial classes (F 2, O 3, R 27, T 11, D 8, B 10, L 15, P 11, C
6, S 27, X 4, Y 14; the palaeosols VV and VW have none), in
inst/rules/ka5/subtypes/, and the registry lists the level
subtypes. Each subtype is its printed formula or formulas,
matched on the horizons with the sequence engine, its depth windows read
from the GOF (the Gley-X subtypes by the first G at 4 to < 8 dm, the
Pseudogley-X by the first S, the Podsol-X and X-Podsol by the bottom of
the podzol B, the humic and anthropogenic parts by 4 dm …) and its
numbers (the base-saturation marks of the Ah/C-Boeden on the subtype
scale, the clay band of the Parabraunerde-Braunerde, the Fahlerde’s clay
difference in the LF-X subtypes, Cp/Fep, the slope of the
Hangpseudogley, the Terra material …), with the limits in
thresholds.yaml. Following Hugo’s decisions: inside a type
the transitional subtypes come first in printed order, then the
deviation subtypes, the Norm subtype last as the fallback, and every
subtype that passes is listed in trace$subtypes_passing
(Q21); the Treposol has no Norm subtype, and the Rigosol and Treposol
take an open subtype for the type still recognisable under the R,
written in brackets (“[BB-YY]”, “[Treposol aus Braunerde]”, Q22). A
subtype the data leave open makes the result provisional, with the
others as candidates; the Fahlerde-X subtypes and the
Parabraunerde-Braunerde hold on the designation, provisionally, when
their clay is not measured (C13).
make_ka5_example(subtype = ...) gives one profile per
subtype in the KA5 notation and its data twin (51 of the 138 key on the
data alone); the 56 type examples keep their types and key to their Norm
subtype. The Pseudogley gate now takes the Scw and Scd of the
Kalkpseudogley, and the Ranker gate a thin loose layer over solid rock
under 3 dm. The readings are in readings.yaml. Every other
classification is unchanged.
classify_ka5() keys a profile to the divisions
(Abteilungen), classes (Klassen) and types (Typen) of the German soil
systematics by Tab. 51 of the Bodenkundliche Kartieranleitung
(pp. 283-288): the Moore, the subhydric, semiterrestrial and terrestrial
soils, 21 classes and 56 types, read on the horizons of
identify_horizons(pedon, "ka5") (the KA5 notation, else the
order of tests on the data). The system is registered as
ka5 (aliases germany,
kartieranleitung, bodensystematik),
experimental and opt-in. Following Hugo’s decisions: Tab. 51 with the
numbers of the type texts (Q6) and two rules of the figures (Q5), the
Moor under a cover of less than 4 dm (Q7), the last symbol carrying the
horizon (Q8), the rock of the Ah/C-Boeden (Q15, Q18), a thick Ah without
Axh undecided (Q17), the upper soil over a palaeosol (Q19), the Rigosol
and Treposol by the record (Q23). A gate the data leave open makes the
name provisional; the Fahlerde on its designation without the clay (C13)
and the Rigosol without the kind of cultivation are listed as
provisional too. The names are as printed (German), with English and
Portuguese glosses in the rules; the horizon panel is in
trace$horizon_panel, the figures’ consistency flags in
trace$figures. make_ka5_example() gives one
profile per type in the KA5 notation, its near miss and its data twin
(51 of the 56 key on the data alone; the Knick-, Dwog- and
Haftnaessemarsch and the palaeosols need the notation). The Pro app
offers the 56 examples. The subtypes, overlays and varieties come next.
Every other classification is unchanged.
The KA5 horizons read on the recorded data, used by nothing yet:
.ka5_identify() (the identification
identify_horizons(pedon, "ka5") will reach once the system
is registered) reads every layer by soilKey’s fixed order of tests
(Hugo’s decision Q9: F, H and O, Y, R, E, M, G, S, A, B with T and P, C,
then the prefixes and suffixes and the transitions Bv-Sw, Sw-Bv, Bv-Go,
Go-Bv, Ah-Bv, Ah-Go). Every test is three-valued: an undecided one gives
candidates and the attributes that would decide them. A layer written in
the KA5 notation keeps its horizon and the data’s reading goes to the
evidence. The readers (R/ka5-readers.R): the depth datum
GOF (p. 79), organic substance with the 15 to < 17.4 % band (Q10),
the Ah minimum with the silt of other fractions (Q11), the Munsell pages
(Q12), the area classes and field codes, the carbonate of the rock
(Q15), the clay differences of the Bt and the Fahlerde. The numbers are
in inst/rules/ka5/thresholds.yaml with their pages;
soilKey’s new readings, for Hugo to confirm, in
readings.yaml. Every classification is unchanged.
The first piece of the German soil systematics of the Bodenkundliche Kartieranleitung, 5th edition (Ad-hoc-AG Boden 2005), used by nothing yet: the notation reader, its catalogue, the formula dialect of the types and subtypes, and the new attributes. Every classification is unchanged (the fixtures of the other systems byte-identical).
inst/rules/ka5/horizons.yaml: the 15 masters, 23 prefixes,
the suffixes with their meaning by host (a, f, k, m, t, v, w), the
base-saturation marks, the joiners, Tab. 12 of the permitted
combinations, the 166 symbols 5.6.3.3 defines (checked on the page
images) and the transitions it names, the KA6 symbols with a one-to-one
reading, the field codes that are not horizons and the collisions with
the other notations.R/designation-ka5.R): the
last part carries the horizon (Ah-Bv is a Bv, fAh°Sd an Sd in a buried
Ah), lower case before the master is a prefix and after it a suffix,
Roman numerals, sub-horizon digits, letters in parentheses as sets of
readings (B(h)s), the typing slips IC, AI and the degree sign typed o. A
profile is in the KA5 notation when declared (ka5, ka4, ka3,
kartieranleitung, bodensystematik, agboden, dbg; ka6 through its
one-to-one symbols) or recognised by one strong sign or two likely ones,
with no symbol only the FAO, USDA, Canadian, RP, CPCS or Russian
notation writes; a mixed profile is undecided; never by the country
(Hugo’s decisions Q2, Q3, Q4, Q8)..ka5_parse_formula()) read into the sequence engine’s
formula object, with no unknown token; the strings, transcribed from the
page images, are in
tests/testthat/fixtures/ka5-formulas.tsv.bleached_pct, reduction_colours_pct,
rh_value, air_capacity_pct,
total_porosity_pct, sand_ffs_pct,
carbonate_whole_soil_pct, the KA5 field codes
humus_class_ka5, carbonate_class_ka5,
texture_class_ka5, colour_ka5,
hydromorphic_features_ka5 …) and 13 site properties
(particle_size_scheme, embanked, the
groundwater levels of Tab. 59, reductgas_source,
deep_cultivation_kind …); the field codes are read into
them by their class ranges..ka5_horizon_frame()): the last part carries the horizon
and the whole symbol is the engine’s token, so Bv-Ah over Ah stays two
horizons; Ap takes a plain Ah; the buried soil of II...
runs from the first fossil row of a layer II; a geogenic prefix written
in front (a, tb, tm, tp, e, z, s, q, o) holds for the whole horizon, f
and r only for their part. Before the engine reads the table, a KA5
formula’s own hook (prepare_table, which no other system
carries) lets a master written without suffix (C, G, aG, O) or a slot
with commas take a run of rows (Ah/Bv/Cv/Cn is Ah/Bv/C, p. 199), and
merges a transitional row into its neighbour with the same carrying code
unless the formula names the transition (Al+Bt into the Bt, Go-Bv into
the Bv).inst/rules/ka5/readings.yaml: the
strong signs exactly as his card lists them (Btv is none); the Canadian
j forms (Btj, Aej) and Ck and Oe written as designations veto the KA5;
IIIC is II and lC with no layer II above it; the degree sign typed o
only in a KA5 profile.classify_za1991() now keys the second and last level of
the South African soil classification of 1991: the 404 families of the
73 forms, by the 19 family criteria. The name follows the identification
of the book (Q23): the form, the family code and name, and the USDA
texture class of the A when its clay, silt and sand are recorded
("Hutton, Hu1200 Kelvin, sandy loam"; the sand grade with
sand_grade). Every other classification is unchanged (the
fixtures of the other systems byte-identical).
inst/rules/za1991/families.yaml, written by
data-raw/za1991_families.R): codes of the form and the four
printed digits, names as printed, the slips of the key pages read as in
the plan (Plooysburg 1000 and 2000, the 1110 headers, the Shortlands
3000 families on the B1, the signs of wetness of the soft carbonate
horizon). The first family whose classes all hold is the family; a
criterion undecided for lack of data leaves the result provisional, with
the families still possible and soilKey’s partial code, an x for each
undecided digit ("Hutton, [Hux200]").R/families-za.R),
each read once on the horizon its family names, as the form key
identified it (the B1 of Q20, the A, the E, the upper G, the upper C,
the layer under the placic pan or the podzol B, the profile within 1500
mm): the base status of the B1 (S-value x 100 / clay %), the luvic B1
(Q21), hard lithocutanic B and saprolite (Q19), calcareous (Q22), the
colours (Q9-Q12), podzolic character (Q13), the humic A, fibrous O,
lamellae, structure, black cutans, ortstein, the consistence of the C
and the material under the O. qualifiers$za_family lists
every criterion read: its class, the layers, the stand-ins and the
attributes missing.make_za1991_example(form, family = "Hu1200") gives a
profile of any of the 404 families, by the data and by the
notation.readings.yaml: an organic O of unrecorded lower limit no
longer stops the key; the absence of wetness or carbonates is undecided
on a description that stops above 1500 mm or has nothing under the A; a
pale soft carbonate horizon shows signs of wetness only by its mottles
or a gley hue; hardness follows the USDA rupture resistance (dry hard,
moist very firm, moderately cemented or more); the 500 mm under the
organic O is the book’s (K 17); one pair of brackets around a partial
code, and none when no class of a digit holds; a redder E is grey;
Dundee reads its wetness from the alluvium down; a calcareous part
anywhere in the B makes the calcareous Shortlands families; a fibrous O
needs one run of 200 mm; the B1 is the upper layer of the first B; on a
B of several colours FC 5 takes the larger share of dark or red; the
other readings of this part confirmed.The South African soil classification of 1991 joins the registry as
za1991 (aliases za, sat,
sat1991, south_africa), experimental and
opt-in: classify_za1991() keys a profile to its soil form,
make_za1991_example() gives one synthetic profile per form,
and identify_horizons(pedon, "za1991") reads every layer as
one of the 30 diagnostic horizons and materials. Every other
classification is unchanged (the fixtures of the other systems
byte-identical).
inst/rules/za1991/key.yaml, written by
data-raw/za1991_key.R) in the order of van Huyssteen
(2020), each a sequence of diagnostic horizons and materials with the
horizons that would make it another form (Q3: Hutton over hard rock is
Hutton, over a soft plinthic B Bainsvlei); Lichtenburg keyed, always
provisional (Q1); no form gives the nearest forms, an orthic A under 100
mm over nothing the land class rock and lithosols (Q2).readings.yaml: the saprolite of Swartland, Houwhoek and
Groenkop may lie within 500 mm under the B, below unconsolidated
material; the match is one pass over the horizons, however many are
undecided; a topsoil of several layers is a vertic, melanic or humic A
when that covers half of it or its upper 200 mm, for every completion of
its undecided layers; a topsoil over a recent deposit is part of the
deposit; a red over a yellow-brown apedal layer is one horizon unless
each is 20 cm or more; a B reaching 1500 mm reads the layer described
below it; registry order 14.The third part of the South African soil classification of 1991:
three-valued tests on the recorded data for the other seventeen
diagnostic horizons and materials, the position pass and the
identification of every layer
(R/diagnostics-za-horizons.R). Nothing is classified yet;
every other classification is unchanged (the fixtures of the other
systems byte-identical).
thresholds.yaml..za_identify(), the identification of
the registry namespace za for
identify_horizons() (registered with the system in the next
part): the notation where a layer is named, else the data, with the
stand-ins and fallbacks in the trace.readings.yaml: the B horizons by position (an
apedal or structured B only under a topsoil, an E or the same B; under a
podzol or pedocutanic B such a layer is unconsolidated material); the E
with less clay than the layer below or at most 2 points over the one
above, only under an orthic A or an E, and a grey eluvial layer never a
G; a grey pedocutanic B is the G only with one more sign of wetness; a
B1 soft plinthic only with grey of its own or as many mottles as the
layer below; organic carbon on the oxalate route of the podzol B;
saprolite under the topsoil or an E is the lithocutanic B; a red or
yellow apedal surface layer with under 0.3 % organic carbon over rock, a
lithocutanic B or a dorbank is that B; a surface layer designated C is a
topsoil.The second part of the South African soil classification of 1991:
three-valued tests on the recorded data for the five topsoil horizons
and the eight apedal and structured B horizons
(R/diagnostics-za-horizons.R). Nothing is classified yet;
every other classification is unchanged (the fixtures of the other
systems byte-identical).
inst/rules/za1991/thresholds.yaml:
every number with its source and a stand_in flag; the WRB
and soilKey stand-ins are flagged in every answer that reads them
(“stand_in:readings.yaml records them.The first part of the South African soil classification of 1991 (Soil Classification Working Group, 1991; the “Blue Book”, read from its open pages, SASRI 1999 and van Huyssteen 2020, without the book): the catalogue of its 30 diagnostic horizons and materials, the reader of their names, and the attributes the later parts read. Nothing is classified yet; every other classification is unchanged (the fixtures of the other systems byte-identical).
inst/rules/za1991/horizons.yaml): the 5 topsoil horizons
(organic O, humic A, vertic A, melanic A, orthic A) and the 25 subsoil
horizons and materials, each with its printed name, soilKey’s English
gloss, a token in capitals (OA, RAB, SPL …), what the preface says of it
in 1977, and its pages; the names of 1977 the preface changed; the other
words for the hard and carbonate horizons (calcrete, ferricrete, ouklip,
silcrete); the hints of the FAO letters.R/designation-za.R; Hugo’s
decision Q5). A new horizon attribute diagnostic_za holds
the name as surveys write it (“red apedal B”, “Soft plinthic B horizon”,
“B2 soft carbonate”, “none”), in any case and with or without “horizon”,
or soilKey’s token (RAB); E and G alone are the E and G horizons. A 1977
name is read as its 1991 equivalent, flagged (ferrihumic B: podzol B;
gleycutanic B: G horizon or unspecified material with signs of wetness
by the horizon above; calcareous apedal or neocutanic B: neocarbonate
B). A negated name (not red apedal B, E horizon absent) is not read; a
non-diagnostic one (saprolite (non-diagnostic)) records no diagnostic
horizon; one written with doubt (E?, possibly red apedal B) stays a
candidate; calcrete is read by its adjective. The same names written
inside designation (“Ap orthic A”, “B1 red apedal”) are
read when site$designation_system declares the notation
(za, za1991, sat,
sat1991, south africa …; SA and
RSA declare nothing), when the profile records a name in
diagnostic_za, or when a designation holds a name only this
system writes; never from the country, never when the site declares
another notation. FAO and USDA letters are hints only (Bt: pedocutanic,
prismacutanic, red structured or neocutanic B; Cr: saprolite, the wet
materials, G or lithocutanic B); a word (Clay, Hutton) gives none.diagnostic_za, plasticity_index,
liquid_limit_method, bedrock_pct,
coatings_hue_moist, coatings_chroma_moist,
coatings_continuity, recent_deposit,
cross_bedding and sand_grade; on the site
reference_za_form, reference_za_family,
reference_za_raw and reference_za_edition
(benchmarks only).Hugo decided the nine readings of this part with the fixes of its
review: soilKey’s two-letter short forms (ot, re, ye …) are not read
until checked on a survey sheet; calcrete by its adjective (alone
undecided between the soft and the hardpan carbonate horizon); Cr hints
at the saprolite, the wet materials, the G horizon and the lithocutanic
B; the other six (recognition by name, the gleycutanic B by position,
Afrikaans names, words of no diagnostic horizon, the master letter, the
declared values) as recommended.
inst/rules/za1991/readings.yaml records them with the four
decisions of 2026-11-04 this part applies.
The annexes of the RP 2008 that correlate it with other systems, and the labels of the RP of 1995, are shipped as data (Hugo’s decision Q1): codes and names as the book prints them, with the page, its doubts (“?”) kept as a flag and its slips noted; no sentence of the book. They are notes for display and benchmarks: no classifier reads them, and every classification is unchanged (the fixtures of all systems byte-identical).
inst/rules/rp2008/crosswalk_wrb2006.yaml). The 110
references with their WRB 2006 name (the brunisols eutriques in two rows
by their saturation, the lithosols stricts in a row of their own), the
12 reference horizons beside a WRB 2006 diagnostic horizon or FAO
letter, the qualifiers (65 rows for the 64 of the book: the row of the
calcium chapter, p. 380, holds for that chapter only) and the 15 “faux
amis”. The WRB is the 2006 edition the book cites, not soilKey’s WRB
2022.crosswalk_cpcs_horizons.yaml). The table row for row,
exported as data; the notation reader keeps its own copy in
horizons.yaml for the hints of Q9, and a test keeps the two
equal. BTfe, FSj and the Ha under the A1 are flagged as slips.crosswalk_cpcs_classes.yaml). Each row keyed by the
cpcs1967 code of its category (class, subclass, group or
subgroup), its RP entries resolved to reference codes or groups, with
their qualifiers, the double attachments and the “???” of the categories
with no equivalent; the 14 categories the book calls new.legacy_rp1995.yaml). The 13 references removed in 2008 and
the names of 2008 the book gives for such solums.rp2008_crosswalk() returns each table as a data frame;
rp2008_from_label() reads labels of French datasets (a
reference, a type, a double, a label of 1995) as the references of 2008,
for benchmarks.Hugo confirmed the readings of this release, with the points of its
review: all the tables of Annex 5 shipped; the table of Annex 6 as data
beside the reader’s copy, FE, OX and F of row B intertropical and BTfe,
FSj and the Ha under the A1 flagged as slips; a CPCS result shown the
row of the most specific category of its chain; the entries of Annex 7
that name no reference read through their chapter (fersialsols calcaires
and saturés as the carbonatés and calciques, luvisols-rédoxisols as the
double of any luvisol reference); the brunisols oligo-saturés read as
dystriques, the histosols recouverts and the humiferous andosols of 1995
as any reference of their group. Entries of readings.yaml
record them.
humus_form_rp() attaches the épisolum of a profile
to a humus form of Annex 1 of the RP 2008 (pp. 327-355), and
classify_rp2008() reports it beside the name: the new field
$humus_form (one row: the form, its name, type, group, the
route, the candidates, the recorded form and any conflict, the
qualifiers) and $trace$humus_form (the whole reading). The
“à