MIxS v7.0.0 (2026-07-29) to v7.0.1 (2026-07-31)
Written by the mixs-diff-summary skill from schema_comparison_results.yaml,
then corrected by hand before publication.
A patch release with no vocabulary change at all. No slot, class, enum or
permissible value was added, removed or renamed; 347 classes and 1178 slots are
present in both, with the same names. No title, description, range, required
or multivalued changed, so there are no cosmetic mass-edits to group and
nothing for a consumer keyed on MIXS: identifiers or on titles to react to.
Everything in the release sits in two entries the counts flatten to almost nothing: one class definition change and 17 slot definition changes.
The ancient DNA extension becomes reachable
MixsCompliantData gained nine slots, going from 335 to 344:
ancient_data, mims_hostassociated_ancient_data,
mims_humanassociated_ancient_data, mims_humangut_ancient_data,
mims_humanoral_ancient_data, mims_humanskin_ancient_data,
mims_plantassociated_ancient_data, mims_sediment_ancient_data,
mims_soil_ancient_data.
The reason this shows as zero added slots is worth stating precisely, because it
is the whole shape of the fix. All nine slots were already defined in v7.0.0,
each with domain: MixsCompliantData, the matching ancient class as its range,
multivalued: true and inlined_as_list: true. The nine ancient classes were
also already there. The single thing missing was the slots' membership in
MixsCompliantData.slots, and in LinkML domain on a slot does not by itself
put that slot on the class. So v7.0.0 shipped every component of MInAS and no
place in a document to put an ancient DNA record.
Added by https://github.com/GenomicsStandardsConsortium/mixs/pull/1367 — Give the ancient DNA classes a way into a MIxS document.
Pattern changes: 17 slots, one bug, five families
Every one of the 17 slot changes is a pattern change and nothing else. All 17
have the same cause: alternation binds looser than the anchors, so in ^A|B$
only the first branch is anchored at the start and only the last at the end. Each
fix wraps the alternation in a group.
Grouped by the structured_pattern syntax they share, rather than one line per
slot:
| n | old syntax | new syntax | slots |
|---|---|---|---|
| 6 | ^{PMID}\|{DOI}\|{URL}$ |
^({PMID}\|{DOI}\|{URL})$ |
internal_standard, prev_pubs, samp_decont_pretreat, sip_method, sop_experimental, sop_lib_preparation |
| 5 | ^({termLabel} \[{termID}\])\|{integer}$ |
^(({termLabel} \[{termID}\])\|{integer})$ |
animal_intrusion, cult_result_org, microb_start_taxID, serovar_or_serotype, spikein_org |
| 4 | ^{text}\|({termLabel} \[{termID}\])$ |
^({text}\|({termLabel} \[{termID}\]))$ |
microb_cult_med, samp_stor_media, seq_meth, spikein_growth_med |
| 1 | ^{termLabel} {[termID]}\|{text}$ |
^({termLabel} \[{termID}\]\|{text})$ |
isotopolog_atom_pos |
| 1 | ^{float}-{float} {unit}\|{float} {unit}$ |
^({float}-{float} {unit}\|{float} {unit})$ |
gradient_pos_density |
Fixed by https://github.com/GenomicsStandardsConsortium/mixs/pull/1386 — Group the alternations so the anchors apply to the whole pattern, with example data and tests added in https://github.com/GenomicsStandardsConsortium/mixs/pull/1385 — Example data and tests for the reference patterns.
What the count of 17 overstates
Only 12 of the 17 change what validates. For the 4 free-text-or-ontology-term
slots and for isotopolog_atom_pos, one branch is {text}, which accepts
anything, so the grouping does not narrow them. The one difference is that a
value containing a newline matched the old pattern and does not match the new
one, since . does not cross a line break.
For the other 12, values that were accepted are now rejected. This applies to
the materialized schema, where structured_pattern is expanded into pattern.
It is not what the published JSON Schema enforces today; see the section below.
Witnesses were checked by running both regexes, using search semantics, the way
JSON Schema applies pattern:
| slots | accepted under v7.0.0, rejected under v7.0.1, materialized schema |
|---|---|
| the 6 reference slots | see doi:10.1038/nbt.1823 for details, PMID:12345 and more |
| the 5 organism slots | junk text 123, trailing 999, and also bare PMID:12345 or doi:10.1038/nbt.1823, which are not organisms at all |
gradient_pos_density |
prefix 1.5 g/mL |
The bare correct forms (doi:10.1038/nbt.1823, Escherichia coli
[NCBITaxon:562], 562, 1.5 g/mL) validated before and still do. Nothing
previously rejected is now accepted.
Which of these reach a consumer
All 17 changes are to structured_pattern, which becomes a pattern only in a
materialized build. The artifacts published at w3id.org are generated from the
un-materialized schema, so project/jsonschema/mixs.schema.json carries 4
distinct patterns, all from the 5 slots that also assert a literal pattern.
The other 306 structured patterns reach no consumer, which has been true since
v6.2.2 in December 2025.
For a slot carrying both, the literal pattern is what ships, and it was
already anchored per branch. prev_pubs publishes
^PMID:\d+$|^doi:10.\d{2,9}/.*$|^https?:...$, and
see doi:10.1038/nbt.1823 for details was rejected under v7.0.0 and is
rejected under v7.0.1. So on the published path these 12 are unchanged.
The tightening above is what the schema now means, and what the example data
under src/data/examples/ is validated against. Closing the gap between that
and what is published is
https://github.com/GenomicsStandardsConsortium/mixs/issues/1021.
What the count of 17 understates
This is a consistency repair, not a new rule. v7.0.0 already had 22 slots
carrying the correctly grouped ^({PMID}|{DOI}|{URL})$; the 6 changed here were
the stragglers still on the ungrouped form, and v7.0.1 brings the total to 28.
The same holds for the organism and free-text families. The convention was
already the majority; these slots were the exceptions.
isotopolog_atom_pos also had a placeholder that never resolved
Its syntax was ^{termLabel} {[termID]}|{text}$, using {[termID]} where every
other term uses \[{termID}\]. As a regex that reads as a literal brace, a
character class of the letters in termID, and a closing brace, so it never
matched an ontology identifier. No data was affected, because the {text}
branch accepted everything anyway. v7.0.1 replaces it with the standard form.
Doubled anchors: fixed in this window, invisible in this diff
https://github.com/GenomicsStandardsConsortium/mixs/pull/1382 — Remove the
doubled regex anchors, and test that they cannot come back merged in this window
and removed ^^...$$ from the literal pattern field of four slots, including
prev_pubs. It does not appear anywhere in this comparison, and that is correct:
the comparison records the materialized pattern, which comes from
structured_pattern and replaces whatever the literal pattern field said. The
doubled anchors were dead text that never reached a consumer. (An earlier
revision of this summary listed them as a change in the release; they are not
one.)
What this comparison covers
The new side is main at 574e69e, one commit before the release commit. The only
later change to src/mixs/schema/mixs.yaml is version: 7.0.0 to version:
7.0.1, so no term is affected, but the release's own version bump falls outside
the comparison. The only scalar difference recorded is the source_file path.
There are no rename candidates. The tool gained rename detection in https://github.com/GenomicsStandardsConsortium/mixs/pull/1368 — Detect renames in the comparison instead of leaving them to the summarizer, but with no names added and none removed there is nothing to pair up, so nothing here needs a maintainer to confirm.
The comparison emitted only classes and slots. Enums, prefixes and settings
are absent from the output rather than present and empty, so this summary makes
no claim about them.