The assurance record
Free foreverIn short: the assurance record is the document the specification describes, attached to a result. It shows how the result was produced, so it can be checked now or in ten years.
The metadata that must accompany a result for it to be considered conformant: molecule type and marker, collection time and preservation, filter type, replicate structure, assay coverage, control results, thresholds applied, and pipeline and reference database versions. Planned: bait panel identity and version (hybridization capture).
- STATUS
- Draft
- VERSION
- 0.1
- UPDATED
- September 2026
- LICENSE
- CC BY 4.0
Check a record against this specification → /specification/validator
Who supplies each field. Fields in sections 4.1 through 4.4 — sample, collection, preservation and laboratory — are declared by the submitting party at the point of upload. Fields in 4.5 through 4.9 — analysis, controls, thresholds, sensitivity and provenance — are either declared or generated by Common Measure during processing, and the specification states which for each field.
01 · SCOPE
What the record is, and is not
An assurance record describes one sample analyzed with one assay. It records what was done, what was controlled for, and which decisions were applied to turn sequence into a name. It does not contain the sequence data itself, and it does not contain an interpretation of what the result means.
It is not a quality mark. A conformant record can describe a badly collected sample held four hours before preservation with no field blank. What conformance guarantees is that a reader can see that, rather than having to ask.
Every field below exists because its absence makes a specific comparison impossible. Where we could not defend a field on that basis, we left it out.
02 · REQUIREMENT LEVELS
Two levels, and no SHOULD
The key words MUST, MUST NOT and MAY are used as defined in RFC 2119 and RFC 8174. SHOULD is not used. A field that a record ought to carry is either mandatory or it is advice, and advice is what produced the present situation.
Required
MUST
The field is present in every conformant record, carrying a value of the stated type. Nine fields sit here alone and admit no substitute: the two coordinates, collection time, assay type, marker, pipeline version, reference database version, record hash and specification version. A record without those describes nothing.
Required, or declared
MUST, or `not recorded`
The field is present in every conformant record, carrying either a value or the literal string `not recorded`. Sixteen fields sit here. Answering is mandatory; having the answer is not. A declared gap is conformant, appears in the completeness score, and tells a reader exactly what they cannot conclude.
Sixteen fields that were previously optional or conditional are now mandatory with a permitted declared unknown. Nothing has been made harder to supply. What has changed is that a reader can now tell the difference between a value that was measured, one that was not, and a record that never addressed the question at all.
03 · NORMATIVE REFERENCES
What this specification adopts rather than restates
Where a published standard already covers a step, we adopt it by reference. This specification covers only what no published standard currently covers.
| Reference | Title | How it is used here |
|---|---|---|
| ISO 17805:2026 | Water quality — Environmental DNA sampling and preservation from water | Adopted by reference for collection and preservation from water. This specification does not restate it and does not compete with it. |
| ISO/IEC 17025:2017 | General requirements for the competence of testing and calibration laboratories | Referenced for laboratory competence. Conformance to this specification is not a substitute for accreditation and does not imply it. |
| ISO 8601-1:2019 | Date and time representations | Normative for every timestamp. A time without a UTC offset is ambiguous and is rejected. |
| WGS 84 (EPSG:4326) | World Geodetic System 1984 | Normative for coordinates. Decimal degrees, no other datum. |
| RFC 2119 / RFC 8174 | Key words for use in RFCs to indicate requirement levels | MUST, MUST NOT, SHOULD and MAY are used in this specification with the meanings given there. |
| JSON Schema draft 2020-12 | JSON Schema core and validation vocabularies | The machine-readable form of this specification is expressed as a draft 2020-12 schema. |
04 · FIELDS
The record, in nine groups
Field names are given exactly as they appear in a record. The machine-readable form is published at /schema/assurance-record-0.1.schema.json and is generated from the same source as this page, so the two cannot drift apart.
01Record identity
What the record is, which sample it describes, and who produced it. Without these four, a result cannot be traced to a physical object or to the party responsible for it.
| Field | Type or values | Requirement | Supplied by | What it records | Why it matters |
|---|---|---|---|---|---|
| standardVersion | string | required | Submitter | The version of the Common Measure specification this record was produced under. | Without it, a reader cannot tell which rules the record was written to satisfy. |
| sampleId | string | required | Submitter | Identifier for the physical sample, unique within the submitting organization. | Nothing in the record can be traced back to a physical sample without it. |
| siteId | string | required | Submitter | Identifier for the location sampled, stable across visits. | Repeat visits to the same place cannot be grouped without a stable site identifier. |
| laboratoryId | string | required | Submitter | Identifier for the laboratory that processed the sample. | Agreement between laboratories cannot be measured if the laboratory is not recorded. |
02Location and access
Where the sample was taken, how precisely that is stated, and whether the location may be republished. Generalized coordinates are legitimate; undeclared generalization is not.
| Field | Type or values | Requirement | Supplied by | What it records | Why it matters |
|---|---|---|---|---|---|
| decimalLatitude | number (-90 to 90) | required | Submitter | Latitude of the collection point in decimal degrees, WGS 84. | A result without a location cannot be compared with any other result. |
| decimalLongitude | number (-180 to 180) | required | Submitter | Longitude of the collection point in decimal degrees, WGS 84. | A result without a location cannot be compared with any other result. |
| coordinateUncertaintyMeters | number (≥ 0) | requiredor not recorded | Submitter | Radius in meters within which the true collection point falls. | A reader cannot tell whether the coordinates are exact or generalized. |
| coordinatePrecisionReduced | boolean | required | Submitter | Whether the coordinates have been deliberately generalized before publication. | Generalized coordinates read as exact ones unless the reduction is declared. |
| accessConstraint | open · restricted · embargoed | required | Submitter | The access condition attached to the record. | A downstream publisher cannot honor a restriction that was never stated. |
| sensitivityReason | string | requiredor not recorded | Submitter | Why access is constrained or coordinates were generalized. | A restriction without a stated reason cannot be reviewed or lifted later. |
| depthMeters | number | requiredor not recorded | Submitter | Depth below the surface at which the sample was taken, in meters. | Depth changes what is present, so samples at different depths are not interchangeable. |
03Collection
When and how the sample was taken, from what substrate, and what was captured. Sampling and preservation from water are specified by ISO 17805:2026, which this specification adopts by reference; the fields here record what was done so that a reader can tell.
| Field | Type or values | Requirement | Supplied by | What it records | Why it matters |
|---|---|---|---|---|---|
| collectionDateTime | string, ISO 8601 | required | Submitter | Date and time of collection, ISO 8601 with a UTC offset. | A timestamp without an offset is ambiguous and cannot be compared across sites. |
| collectionMethod | string | required | Submitter | The collection procedure used, named or referenced. | Two samples taken different ways are not comparable unless both methods are stated. |
| substrateType | water · sediment · soil · air · surface swab · other | required | Submitter | The material sampled. | Detection means something different in each substrate, so the substrate governs interpretation. |
| sampleVolumeLiters | number (≥ 0) | requiredor not recorded | Submitter | Volume of water collected or filtered, in liters. | Concentration cannot be derived without it. |
| sampleMassGrams | number (≥ 0) | requiredor not recorded | Submitter | Mass of sediment, soil or other solid substrate collected, in grams. | Yield per unit mass cannot be compared between samples without it. |
| filtrationUsed | boolean | required | Submitter | Whether the sample was filtered before preservation. | Filtration determines what fraction of the material was retained for analysis. |
| filterPoreSizeMicrons | number (≥ 0) | requiredor not recorded | Submitter | Nominal pore size of the filter used, in microns. | Pore size sets what is captured, so results from different pore sizes are not directly comparable. |
| filterMaterial | string | requiredor not recorded | Submitter | The filter membrane material. | Membrane material affects capture and extraction yield. |
04Preservation and transport
Environmental DNA degrades from the moment of collection. Two fields record the interval and the method, because a negative result from a sample preserved four hours late is not the same negative result.
| Field | Type or values | Requirement | Supplied by | What it records | Why it matters |
|---|---|---|---|---|---|
| preservationMethod | ethanol · buffer · freezing · desiccation · none · other | required | Submitter | How the sample was preserved after collection. | Preservation determines how much of the material survives to be analyzed. |
| minutesToPreservation | whole number | requiredor not recorded | Submitter | Elapsed minutes between collection and preservation. | Elapsed time before preservation determines what survives to be analyzed, and any claim about how recently an organism was present depends on it. |
05Replicate structure and field controls
Whether the sample stands alone or belongs to a group, and whether contamination during collection can be ruled out. A blank that was run but not reported tells a reader nothing.
| Field | Type or values | Requirement | Supplied by | What it records | Why it matters |
|---|---|---|---|---|---|
| replicateType | none · technical · field · temporal | required | Submitter | The kind of replication this sample belongs to. | Replicates counted as independent samples overstate the evidence. |
| replicateGroupId | string | requiredor not recorded | Submitter | Identifier shared by all members of a replicate group. | Replicates cannot be grouped, and so cannot be treated as replicates, without it. |
| fieldBlankIncluded | boolean | required | Submitter | Whether a field blank was carried and processed alongside the sample. | Contamination during collection cannot be ruled out without a field blank. |
| fieldBlankResult | clean · detection · not evaluated | requiredor not recorded | Submitter | The outcome of the field blank. | A blank that was run but not reported tells a reader nothing. |
06Extraction
How DNA was recovered from the sample, and whether inhibition was checked. Inhibition produces false negatives that look identical to absence.
| Field | Type or values | Requirement | Supplied by | What it records | Why it matters |
|---|---|---|---|---|---|
| extractionKit | string | required | Submitter | The extraction chemistry or kit used, named with version where applicable. | Extraction yield differs by chemistry, so the kit is part of the method. |
| elutionVolumeMicroliters | number (≥ 0) | requiredor not recorded | Submitter | Final elution volume of the extract, in microliters. | Concentration figures cannot be reconciled between laboratories without it. |
| inhibitionTested | boolean | required | Submitter | Whether the extract was assessed for PCR inhibition. | An inhibited reaction can look exactly like an absence. |
| inhibitionResult | none detected · inhibition detected · not evaluated | requiredor not recorded | Submitter | The outcome of the inhibition assessment. | A test that was run but not reported cannot be used by a reader. |
07Assay and sequencing
What was looked for and with what. Two laboratories using different primer sets on the same water are not running the same test, and the record has to say so.
| Field | Type or values | Requirement | Supplied by | What it records | Why it matters |
|---|---|---|---|---|---|
| assayType | metabarcoding · qPCR · dPCR · targeted sequencing · other | required | Submitter | The analytical approach applied to the extract. | The assay determines which quality thresholds apply and how a detection should be read. |
| markerLocus | string | required | Submitter | The genetic marker or target locus. | Different markers see different parts of the community. |
| primerSet | string | required | Submitter | The named primer set used, with the reference that defines it. | Primer choice sets what can be detected at all. |
| sequencingPlatform | string | requiredor not recorded | Submitter | The sequencing instrument or platform used. | Error profiles differ by platform and affect what passes a threshold. |
| technicalReplicateCount | whole number | required | Submitter | Number of technical replicates run on the extract. | A single replicate means amplification failure cannot be distinguished from absence. |
08Laboratory controls and detection limits
The controls that were run and the limits that apply. A non-detection cannot be interpreted at all unless the limit of detection is stated.
| Field | Type or values | Requirement | Supplied by | What it records | Why it matters |
|---|---|---|---|---|---|
| noTemplateControlResult | clean · detection · not evaluated | required | Submitter | The outcome of the no-template control. | Laboratory contamination cannot be excluded without it. |
| positiveControlResult | amplified · failed · not run | required | Submitter | The outcome of the positive control. | A failed assay and a true absence look the same without a positive control. |
| limitOfDetection | number (≥ 0) | requiredor not recorded | Submitter | The lowest quantity reliably detected by the assay, in copies per reaction. | A non-detection cannot be interpreted without a limit of detection. |
| limitOfQuantitation | number (≥ 0) | requiredor not recorded | Submitter | The lowest quantity reliably quantified by the assay, in copies per reaction. | Quantities reported below it cannot be relied upon. |
| minimumReadCount | whole number | requiredor not recorded | Submitter | Minimum read count required for a sequence to be reported as detected. | Metabarcoding detections are not comparable unless the read threshold is stated. |
| minimumPositiveReplicates | whole number | requiredor not recorded | Submitter | Number of positive replicates required to call a detection. | A detection call rule that is not stated cannot be reproduced. |
09Interpretation and record provenance
The reference database, thresholds and pipeline that turned sequence into a name, and the fixed point that lets a reader confirm the record has not changed since it was issued.
| Field | Type or values | Requirement | Supplied by | What it records | Why it matters |
|---|---|---|---|---|---|
| referenceDatabase | string | required | Common Measure | The reference database used to assign identity to sequences. | The same sequence gets different names from different databases. |
| referenceDatabaseVersion | string | required | Common Measure | The exact version or release date of the reference database used. | Without the reference database version, this result cannot be reinterpreted when the database is updated, which means it cannot be compared with a result produced at a different time. |
| identityThresholdPercent | number (0 to 100) | required | Common Measure | Percent identity required for a sequence match to be accepted. | The same data produces different species lists at different thresholds. |
| pipelineVersion | string | required | Common Measure | The bioinformatics pipeline and version applied to the raw data. | Pipeline version changes the output from identical input. |
| detectionThreshold | string | required | Either | The rule applied to call a detection, expressed reproducibly. | Two laboratories applying different rules to the same data disagree for no biological reason. |
| recordCreatedDateTime | string, ISO 8601 | required | Common Measure | When this assurance record was created, ISO 8601 with a UTC offset. | Revisions cannot be ordered without a creation time. |
| recordHash | string | required | Common Measure | Hash of the record content, for tamper evidence. | A record that can be altered silently cannot be audited. |
05 · CONDITIONAL RULES
When a declared gap costs the reader something
Seven rules apply. They no longer decide whether a field appears. Every field appears. They mark the places where answering not recorded removes something specific from the record, given what the record already says about itself. The validator names the consequence in each case; conformance is unaffected.
water-volume
substrateType is water, which makes a declared gap in sampleVolumeLiters costly: concentration cannot be derived without it.
replicate-group
replicateType is not none, which makes a declared gap in replicateGroupId costly: replicates cannot be grouped without it.
field-blank-result
fieldBlankIncluded is true, which makes a declared gap in fieldBlankResult costly: a blank that was run but not reported tells a reader nothing.
metabarcoding-reads
assayType is metabarcoding, which makes a declared gap in minimumReadCount costly: detections are not comparable unless the read threshold is stated.
pcr-replicates
assayType is qPCR or dPCR, which makes a declared gap in minimumPositiveReplicates costly: a detection call rule that is not stated cannot be reproduced.
filtration-fields
filtrationUsed is true, which makes a declared gap in filterPoreSizeMicrons and filterMaterial costly: pore size and membrane material determine what was captured.
sensitivity-reason
Access is constrained or coordinates were generalized, which makes a declared gap in sensitivityReason costly: a restriction without a stated reason cannot be reviewed or lifted later.
06 · CONFORMANCE
What a record must satisfy to be conformant
C01
Every field is present and non-null
All 47 fields appear in a conformant record. A field present with a null value, or absent altogether, is a failure. There is no partial conformance and no conformance score.
C02
A gap is declared, never left silent
Sixteen fields accept the literal string `not recorded` in place of a value. The other nine do not. A record that says `not recorded` is conformant and is counted as incomplete, which is a different statement and a more useful one than saying nothing.
C03
Conditional rules govern interpretation, not conformance
The seven rules no longer decide whether a field must appear — every field must. They mark where a declared gap costs the reader something specific, such as pore size once filtration is declared, and the validator says so.
C04
Every value is of the stated type and within the stated set or range
Enumerated fields take one of the listed values. Where no listed value fits a substrate or method, use `other` and tell us what we are missing.
C05
Timestamps carry a UTC offset and coordinates are WGS 84 decimal degrees
A local time without an offset cannot be compared across sites, and coordinates in another datum cannot be compared at all.
C06
Additional fields are permitted
A record may carry fields beyond this specification without losing conformance. Nothing here is a ceiling.
C07
Conformance is a statement about the record, not about the result
A conformant record can describe a poorly collected sample. What conformance guarantees is that a reader can see that for themselves.
Conformance is self-declared and independently checkable. Anyone can run the check themselves, on their own machine, free (at launch, with an email-verified account): the validator runs entirely in the browser and sends nothing anywhere.
07 · WORKED EXAMPLES
Three conformant records
Each of these validates cleanly against version 0.1. They are also published as a single file at /schema/assurance-record-0.1.example.json.
Freshwater, metabarcoding, water filtered on site
A river sample with a field blank, three technical replicates and a stated read threshold. This is the shape most metabarcoding work takes.
{
"standardVersion": "0.1",
"sampleId": "CM-FW-2026-0417-003",
"siteId": "UPPER-IOWA-RM-14",
"laboratoryId": "LAB-0042",
"decimalLatitude": 43.3781,
"decimalLongitude": -91.7942,
"coordinateUncertaintyMeters": 10,
"coordinatePrecisionReduced": false,
"accessConstraint": "open",
"sensitivityReason": "not recorded",
"depthMeters": 0.3,
"collectionDateTime": "2026-04-17T09:12:00-05:00",
"collectionMethod": "Grab sample at 0.3 m, filtered on site",
"substrateType": "water",
"sampleVolumeLiters": 2,
"sampleMassGrams": "not recorded",
"filtrationUsed": true,
"filterPoreSizeMicrons": 0.45,
"filterMaterial": "Mixed cellulose ester",
"preservationMethod": "buffer",
"minutesToPreservation": 8,
"replicateType": "field",
"replicateGroupId": "UPPER-IOWA-RM-14-20260417",
"fieldBlankIncluded": true,
"fieldBlankResult": "clean",
"extractionKit": "Silica column extraction kit, v3",
"elutionVolumeMicroliters": 100,
"inhibitionTested": true,
"inhibitionResult": "none detected",
"assayType": "metabarcoding",
"markerLocus": "12S rRNA",
"primerSet": "MiFish-U",
"sequencingPlatform": "Short-read sequencer, 2 x 150 bp",
"technicalReplicateCount": 3,
"noTemplateControlResult": "clean",
"positiveControlResult": "amplified",
"limitOfDetection": "not recorded",
"limitOfQuantitation": "not recorded",
"minimumReadCount": 10,
"minimumPositiveReplicates": "not recorded",
"referenceDatabase": "MitoFish",
"referenceDatabaseVersion": "2026-02-01",
"identityThresholdPercent": 97,
"pipelineVersion": "cm-pipeline 1.4.2",
"detectionThreshold": "At least 10 reads in at least 2 of 3 technical replicates",
"recordCreatedDateTime": "2026-05-02T14:40:00-05:00",
"recordHash": "sha256:9f2c1c0e7f2a4b1d8c5a3e6b0d47f9128a5c4e3b2f1a0d9c8b7a6e5d4c3b2a19"
}Marine sediment, targeted qPCR
A sediment sample reported by mass rather than volume, with a limit of detection and a positive replicate rule in place of a read count. Volume, filter and read-count fields are present and declared `not recorded`.
{
"standardVersion": "0.1",
"sampleId": "CM-MS-2026-0523-011",
"siteId": "GULF-SHELF-ST-08",
"laboratoryId": "LAB-0117",
"decimalLatitude": 28.4102,
"decimalLongitude": -89.1547,
"coordinateUncertaintyMeters": 25,
"coordinatePrecisionReduced": false,
"accessConstraint": "embargoed",
"sensitivityReason": "Survey locations are commercially confidential until the contract closes",
"depthMeters": 84,
"collectionDateTime": "2026-05-23T06:45:00-05:00",
"collectionMethod": "Box core, top 2 cm subsampled",
"substrateType": "sediment",
"sampleVolumeLiters": "not recorded",
"sampleMassGrams": 12.5,
"filtrationUsed": false,
"filterPoreSizeMicrons": "not recorded",
"filterMaterial": "not recorded",
"preservationMethod": "freezing",
"minutesToPreservation": 22,
"replicateType": "technical",
"replicateGroupId": "GULF-SHELF-ST-08-CORE-2",
"fieldBlankIncluded": true,
"fieldBlankResult": "clean",
"extractionKit": "Soil and sediment extraction kit, v2",
"elutionVolumeMicroliters": 75,
"inhibitionTested": true,
"inhibitionResult": "inhibition detected",
"assayType": "qPCR",
"markerLocus": "COI",
"primerSet": "Species-specific assay, published 2024",
"sequencingPlatform": "not recorded",
"technicalReplicateCount": 6,
"noTemplateControlResult": "clean",
"positiveControlResult": "amplified",
"limitOfDetection": 4.2,
"limitOfQuantitation": 12,
"minimumReadCount": "not recorded",
"minimumPositiveReplicates": 2,
"referenceDatabase": "Curated in-house assay reference",
"referenceDatabaseVersion": "2026-04-15",
"identityThresholdPercent": 100,
"pipelineVersion": "cm-pipeline 1.4.2",
"detectionThreshold": "At least 2 of 6 replicates above the limit of detection",
"recordCreatedDateTime": "2026-06-01T11:05:00-05:00",
"recordHash": "sha256:4b8e2d6a1c7f0935e8d2b4a6c1f3e5079d2c4b6a8e0f1d3c5b7a9e1f3d5c7b90"
}Terrestrial soil, generalized coordinates
A soil sample whose location has been deliberately coarsened, so the sensitivity reason carries a real value. Fields that do not apply to a dry soil core, such as filter pore size, are declared `not recorded` rather than omitted.
{
"standardVersion": "0.1",
"sampleId": "CM-TS-2026-0711-027",
"siteId": "NORTH-WOODS-PLOT-12",
"laboratoryId": "LAB-0042",
"decimalLatitude": 46.812,
"decimalLongitude": -90.71,
"coordinateUncertaintyMeters": 1000,
"coordinatePrecisionReduced": true,
"accessConstraint": "restricted",
"sensitivityReason": "Coordinates generalized to 1 km at the request of the landholder",
"depthMeters": 0.05,
"collectionDateTime": "2026-07-11T08:20:00-05:00",
"collectionMethod": "Composite of five soil cores to 5 cm within a 10 m plot",
"substrateType": "soil",
"sampleVolumeLiters": "not recorded",
"sampleMassGrams": 250,
"filtrationUsed": false,
"filterPoreSizeMicrons": "not recorded",
"filterMaterial": "not recorded",
"preservationMethod": "desiccation",
"minutesToPreservation": 15,
"replicateType": "none",
"replicateGroupId": "not recorded",
"fieldBlankIncluded": false,
"fieldBlankResult": "not evaluated",
"extractionKit": "Soil and sediment extraction kit, v2",
"elutionVolumeMicroliters": 100,
"inhibitionTested": true,
"inhibitionResult": "none detected",
"assayType": "metabarcoding",
"markerLocus": "ITS2",
"primerSet": "ITS86F / ITS4",
"sequencingPlatform": "Short-read sequencer, 2 x 300 bp",
"technicalReplicateCount": 3,
"noTemplateControlResult": "clean",
"positiveControlResult": "amplified",
"limitOfDetection": "not recorded",
"limitOfQuantitation": "not recorded",
"minimumReadCount": 20,
"minimumPositiveReplicates": "not recorded",
"referenceDatabase": "UNITE",
"referenceDatabaseVersion": "2026-03-10",
"identityThresholdPercent": 98,
"pipelineVersion": "cm-pipeline 1.4.2",
"detectionThreshold": "At least 20 reads in at least 2 of 3 technical replicates",
"recordCreatedDateTime": "2026-07-20T16:02:00-05:00",
"recordHash": "sha256:1d3f5b7a9c0e2f4a6b8d0c2e4f6a8b0d2c4e6f8a0b2d4c6e8f0a2b4d6c8e0f21"
}08 · OPEN QUESTIONS
What we have not settled
These are unresolved in version 0.1. Each is a place where we would rather hear from a laboratory, a program or a regulator before deciding.
Quantitative reporting is under-specified
The record was drafted with metabarcoding foremost. It does not yet carry reaction conditions, standard curve performance or copy-number estimates, which MIQE expects and which most United States invasive species monitoring depends on. This is the largest known gap and the priority for version 0.2.
Should the reference database be a version string or a resolvable snapshot?
A version string is easy to supply and hard to verify years later. A content hash or an archived snapshot is verifiable and much harder to produce. We have not decided, and we would rather hear from laboratories before we do.
How should a record represent multiple markers from one sample?
Version 0.1 assumes one assay per record, so a sample run with three markers becomes three records sharing a sample identifier. That is workable and inelegant. A nested form has been proposed.
Who computes the record hash, and over what?
A hash is only useful if two parties compute the same value from the same record. The canonicalization rules are not yet written down.
Should detection thresholds be constrained, or only declared?
This specification currently requires that a threshold be stated, not that it take any particular value. Whether the science committee should ever narrow that is a governance question, not a technical one.
Should replicate allocation be captured explicitly?
Version 0.1 records `technicalReplicateCount`. Recent work suggests that is insufficient — ten PCR replicates from one field sample and one replicate from each of ten samples produce similar richness and describe different spatial realities. Version 0.2 is likely to require `fieldSampleCount`, `pcrReplicatesPerFieldSample` and `replicatePooling`, the last distinguishing replicates pooled before sequencing from those sequenced independently. At least one commercial laboratory information system already tracks all three, which suggests the burden is low. We would like to hear from anyone for whom it is not.
Should the declared-unknown pattern be universal?
Sixteen fields accept `not recorded`; nine do not, on the argument that a record without coordinates, a collection time, an assay, a marker, a pipeline version, a reference database version, a hash or a specification version describes nothing at all. That line is a judgment, not a derivation. A reader could reasonably argue that a submitter with no usable coordinates should be able to say so and still file a record, rather than file nothing. We have drawn the line where we have and we would rather be argued out of it in public.
Should `not recorded` split into three?
`not recorded` currently flattens three different situations: never captured, where the measurement was possible and nobody made it; not applicable, where the field cannot apply, such as pore size on an unfiltered sediment core; and withheld, where the value exists but cannot be released. A reader can act on those differently, and collapsing them loses information the submitter already has. Splitting them costs every implementer a migration. We have not decided.
Closed in this revision
Resolved
How can a field be mandatory when many submitters cannot supply it?
`minutesToPreservation` was the case that forced this. The interval between collection and preservation governs what survives to be analyzed, so the field belongs in every record — but a great deal of legacy and field-collected material simply does not have it, and mandating it would have made honest records non-conformant. Permitting an explicit `not recorded` resolves this. The question is mandatory and "we do not have it" is an acceptable answer, which is not the same as leaving the field out and letting a reader guess whether it was fast, slow, or never considered.