Format reference
Acceptance criteria
What a criterion carries, the assay it names, the sampling plan and decision rule behind it, the result row that answers it, the disposition derived from that row, and the yield reported across a lot.
Definition
An acceptance criterion in WWD is the obligation a lot is released against. Every criterion MUST carry an immutable UUID, an optional human tag, a title, a target, a measurand, a statistic, a comparator, a limit or expected category, a method, a criticality and a provenance, and it MUST declare which causal axis it tests. The Core statistic vocabulary is closed to value, mean, median, sd, cv, proportion, count, min and max. The Core comparator vocabulary is closed to >=, <=, range, equals, negative and pass. Criticality is critical, major or minor. A criterion MAY carry a sampling plan and a decision rule of kind point_estimate, test, confidence_bound or tolerance_interval. A criterion names an assay method, and where that method is a term of the Core assay registry the registry fixes the quantities it measures and the conditions the criterion MUST state. Acceptance criteria belong to the design. Every measured result references exactly one criterion UUID, is stated in the unit the criterion names, and reports the statistic the criterion constrains. A consumer recomputes satisfaction from the measured value, the comparator and the limit, and MUST NOT rely on a recorded status. Lot disposition is derived from the recomputed verdicts, and a yield statement identifies the criterion it summarises.
A criterion is the obligation a supplier accepts and the rule a lot is released against.
It states one measurand, one statistic over that measurand, one comparator and one
limit, under a named method with stated conditions. A location requirement and a
dispersion requirement are separate linked criteria, so
median force >= 500 uN and cv <= 0.20 are two criteria
rather than one compound statistic.
Acceptance criteria belong to the design. Measured results belong to identified
realizations. A package with no measured results is as-designed; a package with one or
more is as-built in addition to carrying its unchanged design. Mode is derived as
as_built := measured_results is nonempty and a hand-authored mode flag is
refused. A library MUST NOT declare acceptance criteria, realizations or measured
results.
The parts of a criterion
What the specification requires and what it permits.
| Key | Status | Carries | Constraint |
|---|---|---|---|
| id | MUST | Immutable UUID, unique within the package. | It changes when measurand, target, statistic, comparator, limit, sampling population or decision rule changes materially, and a superseded identifier is not reused. |
| tag | MAY | Human-readable label such as AC-001. | Wording, tag and method metadata may be clarified without changing the identifier. |
| title | MUST | The name of the requirement. | Median twitch force, Alignment floor, Culture age at ship. |
| target | MUST | What the criterion applies to. | A component or region identifier, such as region/active. |
| measurand | MUST | The quantity and its unit. | On a registered property the unit is the registered canonical unit. |
| statistic | MUST | The sample statistic the limit constrains. | Closed to value, mean, median, sd, cv, proportion, count, min, max. |
| comparator | MUST | The relation between statistic and limit. | Closed to >=, <=, range, equals, negative, pass. |
| limit | MUST | The threshold, or the expected category. | A range limit is an object with low and high. A pass or negative comparator carries a method decision instead of a number. |
| method | MUST | The assay and its stated conditions. | A functional value without its assay method and conditions is invalid. |
| criticality | MUST | critical, major or minor. | Disposition policy identifies which levels govern pass, conditional release or rejection. |
| provenance | MUST | Where the target value came from. | Declared as for any other assertion in the package. |
| tests_axis | MUST | control or response. | A criterion on a control asks whether the protocol was executed as written. A criterion on a response asks whether the biology delivered. |
| sampling | MAY | The sampling plan. | Sample size n, sampling unit, source population or lot, selection method, stratification, replacement policy, destructiveness, independent_batches. |
| population | MAY | The elements the statistic is computed over. | States what it is a population of, and either that it includes every element or the inclusion rule that selects them. |
| decision_rule | MAY | How the comparison is decided. | point_estimate, test, confidence_bound or tolerance_interval. The default is point_estimate. |
Criteria are closed objects. A misspelled key is indistinguishable from an omitted one, so a
criterion carrying smapling in place of sampling states no sample
size. An unknown key inside a criterion, a sampling plan, a decision rule, a field, a
biological population, a realization or a measured result is reported as
K01_UNKNOWN_KEY.
A criterion identifier remains unchanged when wording, tag or method metadata is clarified without changing the acceptance proposition. It changes when measurand, target, statistic, comparator, limit, sampling population or decision rule changes materially, and a superseded identifier is not reused. Changing an acceptance limit is a semantic revision.
Statistical form
Statistic, comparator, limit, sample size, decision rule.
The statistic vocabulary is closed to value, mean, median, sd, cv, proportion, count, min, max. The comparator
vocabulary is closed to >=, <=, range, equals, negative, pass. A numeric comparator carries
dimensionally compatible limits. A range comparator declares inclusive or
exclusive endpoints. A negative comparator identifies what analyte, organism,
event or signal must be absent and by what detection method. A pass comparator
references a method with an explicit pass decision.
Where the measurand is a registered property, its unit is the registered canonical unit,
and a criterion stated in a unit that does not express its quantity kind is refused. A
proportion or yield limit lies within the closed interval [0, 1]. A limit on a non-negative
quantity is not negative. An order-parameter limit lies within [0, 1]. A range declares a
low bound not greater than its high bound, and a range of zero width is written with the
equals comparator instead.
| Kind | What it decides | Declares |
|---|---|---|
| point_estimate | The default rule. | Compares the declared sample statistic directly with the criterion limit. |
| test | A statistical test. | Declares null and alternative hypotheses, alpha, sidedness, and algorithm or standard. Also declares a sample size, without which it can be neither executed nor reproduced. |
| confidence_bound | A bound on a parameter. | Declares confidence level, sidedness, parameter and method. A confidence interval MUST NOT be labeled a tolerance interval. |
| tolerance_interval | An interval covering a stated share of the population. | Declares population coverage, confidence, sidedness and method. Also declares a sample size. A specification interval MUST NOT be labeled a confidence or tolerance interval. |
| Rule | Requirement | Reading |
|---|---|---|
| Sampling unit | A plan supporting mean, median, sd, cv, proportion or yield MUST declare its sampling unit from the Core vocabulary or a namespace-qualified term. | n = 6 is not a sample size until the document says six of what. Six constructs, six image fields of one construct and six electrodes of one well are three different experiments. |
| Independent batches | A plan SHOULD declare independent_batches: how many independently produced groups the units were drawn from. | Where a test or tolerance_interval rule is applied to units from a single batch, a consumer MUST report the pseudo-replication. |
| Shared specimens | A criterion referring to the same specimens as another MUST reference that criterion or a shared sampling plan. | Separate criteria MAY share specimens, method and raw data. |
| Standards | A plan based on ISO 2859, ISO 3951, ANSI/ASQ Z1.4 or another standard MUST identify the standard version and required parameters. | An AQL value MUST NOT be represented as a guaranteed lot defect fraction. |
| Execution | A criterion sampling plan MUST be executed as stated, and a result reporting fewer specimens than the plan requires MUST be refused. | A producer who measured fewer specimens amends the plan and records the amendment. |
| Observed size | A result reporting a distributional statistic MUST state n_observed. | Without it a reader cannot distinguish a median of one specimen from a median of a hundred. |
| Sufficiency | A sample size MUST be sufficient for the statistic it supports. | A standard deviation or coefficient of variation over a single specimen is zero by construction. |
| Attainability | A decision rule MUST be attainable at the sample size declared. | For a one-sided sign test the most extreme outcome has probability 2 to the power minus n under the null. At alpha 0.05 this requires at least five specimens, at 0.01 at least seven. |
| Location and dispersion | A location and dispersion requirement MUST be represented as separate linked criteria. | median force >= 500 uN and cv <= 0.20 are two criteria, not one compound statistic. A conjunction or disjunction of criteria MUST be explicit. |
The named assay
What a criterion method carries, and what the registry requires of a Core term.
A criterion names an assay method. A functional value without its assay method and
conditions is invalid, and the criterion identifies the environmental, culture,
stimulation, preload, timing and analysis conditions that materially affect the
measurement. WWD 0.1 publishes a Core assay registry at
registry/core-assays.json, normative for the terms it lists.
A registered assay term fixes the quantities it measures and the conditions that must be
stated for two results under it to be comparable, and it fixes whether it requires a
fixture and whether it requires a declared analysis population. A method identifier in the
wwd.assay: namespace that is not in the registry is refused. A producer
needing an assay the registry does not define namespaces it as an extension term or uses
an unqualified local identifier, which claims nothing and is checked against nothing. The
seven example packages use local identifiers such as WWD-TWITCH-001 and
WWD-MEA-001.
Where the method names a registered assay, every condition the assay requires is present in
the criterion conditions, the measurand is one of the quantities the assay measures, a
required fixture names a component of kind device, and a required analysis
population is declared. A population states what it is a population of and either that it
includes every element or the inclusion rule that selects them. An inclusion rule stated
only as a name is not a rule. A registry addition is additive; adding a required condition
to an existing term is a redefinition and requires a new term.
| Assay term | Measures | Quantity kind | Unit | Fixture | Population | Required conditions |
|---|---|---|---|---|---|---|
| wwd.assay:electrode_impedance_spectroscopy | wwd:electrode_impedance | impedance | kohm | required | required | frequency, electrolyte, amplitude |
| wwd.assay:flow_cytometry_purity | wwd:purity, wwd:viability | fraction | 1 | no | required | marker_panel, gating_strategy, instrument, isotype_control |
| wwd.assay:force_transducer | wwd:peak_twitch_force, wwd:tetanic_force, wwd:passive_tension | force | uN | required | no | temperature, stimulation_frequency, stimulation_pulse_width, preload, medium |
| wwd.assay:image_cell_density | wwd:seeding_density_areal, wwd:capillary_density | areal_density | cells/mm2, 1/mm2 | no | required | stain, objective, field_area, software |
| wwd.assay:mea_burst_analysis | wwd:burst_rate, wwd:network_burst_rate, wwd:network_burst_participation | event_rate, fraction | 1/min, 1 | required | required | temperature, medium, recording_duration, sampling_rate, filter_band, spike_threshold, burst_detector, burst_parameters |
| wwd.assay:mea_spike_rate | wwd:mean_firing_rate, wwd:active_electrode_fraction | frequency, fraction | Hz, 1 | required | required | temperature, medium, recording_duration, sampling_rate, filter_band, spike_threshold |
| wwd.assay:mycoplasma_pcr | wwd:mycoplasma | categorical | 1 | no | no | kit, target, positive_control |
| wwd.assay:optical_contraction_tracking | wwd:unloaded_shortening, wwd:contraction_frequency, wwd:spontaneous_beat_rate, wwd:time_to_peak_force, wwd:half_relaxation_time | ratio, frequency, signal_duration | 1, Hz, ms | no | no | temperature, frame_rate, medium, software |
| wwd.assay:pillar_deflection_force | wwd:peak_twitch_force, wwd:tetanic_force, wwd:passive_tension | force | uN | required | no | temperature, stimulation_frequency, stimulation_pulse_width, medium |
| wwd.assay:shear_rheometry | wwd:ecm_stiffness, wwd:substrate_modulus | modulus | kPa | no | no | temperature, matrix_concentration, strain_amplitude, frequency |
| wwd.assay:sterility_culture | wwd:microbial_growth | categorical | 1 | no | no | media, incubation_temperature, incubation_duration |
| wwd.assay:structure_tensor_alignment_2d | wwd:fiber_alignment, wwd:cell_alignment | order_parameter | 1 | no | no | stain, objective, measurement_plane, window_size, software |
| wwd.assay:viability_dye_exclusion | wwd:viability | fraction | 1 | no | required | dye, counting_method |
The result row
How a measurement is written into a package and linked to its criterion.
Every measured result has an identifier and references exactly one acceptance criterion UUID, which resolves within the package design context. A criterion may have zero, one or many measured results. Appending measured results does not mutate the criteria. A retest is a distinct result and does not erase the original. A result correction preserves revision history and provenance.
| Key | Carries | Constraint |
|---|---|---|
| id | Identifier for the result. | Every measured result MUST have one. |
| criterion | The criterion UUID this result answers. | Exactly one, resolving within the package design context. A dangling reference is a hard error. |
| status | pass, fail, marginal or not_evaluated. | A claim, not evidence. A consumer recomputes satisfaction and uses the recomputed result. |
| value and unit | The number and the unit it is stated in. | A result MUST be stated in the unit its criterion names. Where the units differ, the consumer refuses the comparison rather than converting. |
| statistic | The statistic reported. | It MUST be the statistic the criterion constrains. A median and a mean are different claims about the same specimens. |
| n_observed | The observed sample size. | Required for a distributional statistic, and checked against the plan. |
| provenance and causal_role | measured, and control or response. | A result MUST NOT copy a simulated value into the measured-results collection. |
| realization or specimens | What was observed. | The realization references the exact component design revision realized and declares its identifier scheme. |
| timestamp and observation_activity | When, and the activity that produced the number. | A result MUST identify both. |
| computed_by | Software, algorithm and standard or method. | Required where the result is a derived statistic. |
| raw_data | A link to the evidence. | Raw and processed data SHOULD be linked separately. |
| instrument | The apparatus reading the number. | Carried alongside the method fixture the criterion names. |
A criterion and the row that answers it
Taken from muscle-strip-asbuilt.wwd.
{
"id": "3f7c2a9e-51b4-4c1e-9a77-0d2f8e6b1c44",
"tag": "AC-001",
"title": "Median twitch force",
"target": "region/active",
"measurand": {
"quantity": "peak_twitch_force",
"unit": "uN"
},
"statistic": "median",
"comparator": ">=",
"limit": 500,
"criticality": "critical",
"tests_axis": "response",
"method": {
"id": "WWD-TWITCH-001",
"protocol_ref": "protocol/twitch.md",
"conditions": {
"temperature_c": 37,
"stimulus_hz": 1,
"preload_mn": 0.5
}
},
"sampling": {
"unit": "construct",
"n": 12,
"selection": "random",
"destructive": true
},
"decision_rule": {
"kind": "test",
"alpha": 0.05,
"sided": "one",
"note": "one-sided sign test, H0: median < 500 uN"
}
} A median over twelve randomly selected constructs, at or above 500 uN, decided by a one-sided sign test at alpha 0.05. The sampling unit is the construct and the test is destructive. Twelve specimens clear the attainability floor of five for that alpha.
{
"id": "mr-0001",
"criterion": "3f7c2a9e-51b4-4c1e-9a77-0d2f8e6b1c44",
"status": "pass",
"value": 612,
"unit": "uN",
"statistic": "median",
"n_observed": 12,
"provenance": "measured",
"causal_role": "response",
"observation_activity": "activity/twitch-assay",
"raw_data": "data/twitch.csv",
"instrument": {
"id": "inst-01",
"description": "TA.XTplusC, probe P/0.25S"
},
"computed_by": {
"software": "wwd-qc 0.4.1",
"algorithm": "numpy.median",
"decision": "scipy sign test, p=0.011 < alpha=0.05"
}
}
612 uN, the same statistic and the same unit as the criterion, over the twelve specimens
the plan required. The row also carries a timestamp. The recorded status is recomputed
from 612 uN against >= 500, so the pass is derived rather than trusted.
| Tag | Title | Requirement | Criticality | Axis | Observed | n | Status |
|---|---|---|---|---|---|---|---|
| AC-001 | Median twitch force | median >= 500 uN | critical | response | 612 uN | 12 | pass |
| AC-002 | Twitch force consistency | cv <= 0.2 1 | major | response | 0.14 1 | 12 | pass |
| AC-003 | Alignment floor | median >= 0.65 1 | major | response | 0.71 1 | 5 | pass |
| PC-001 | Gel stiffness compliance | value range 11.0 to 13.0 kPa | major | control | 12.4 kPa | - | pass |
Three criteria on the response axis and one on the control axis. PC-001 is a range on gel stiffness read by rheometry: it asks whether the protocol was executed as written, against a designed value of 12 kPa. The yield statement covers AC-001, with 12 of 12 units meeting it. Context carried alongside the results: wwd:donor_id, wwd:passage_number.
| Tag | Title | Requirement | Criticality | Axis | Observed | n | Status |
|---|---|---|---|---|---|---|---|
| NT-001 | Active electrode fraction | proportion >= 0.8 1 | critical | response | 0.87 1 | 60 | pass |
| NT-002 | Mean firing rate floor | median >= 0.1 Hz | critical | response | 3.1 Hz | 52 | pass |
| NT-003 | Network burst rate | median >= 0.0167 Hz | critical | response | 0.11 Hz | - | pass |
| NT-004 | Network burst participation | proportion >= 0.25 1 | critical | response | 0.62 1 | 60 | pass |
| NT-006 | Culture age at ship | value range 28 to 35 d | critical | control | 30 d | - | pass |
Five criteria, four on the response axis and one on the control axis. The yield covers NT-001, with 7 of 8 units meeting it. Context carried alongside: wwd:source_line, wwd:days_in_vitro.
Disposition
The vocabulary, and how a lot verdict is derived.
A recorded verdict is a claim. A consumer recomputes the satisfaction of every acceptance criterion from the measured value, the comparator and the limit, and does not rely on a recorded status. Where a recorded status disagrees with the recomputed verdict, the consumer reports the disagreement and uses the recomputed result. A result stated in a unit other than the one its criterion names is refused rather than converted.
Overall disposition is derived from criteria and results and is not stored as an independent fact. The rule is fixed by the specification and is not configurable by a producer. A producer MUST NOT claim all specifications passed when any governing criterion is failed or unevaluated unless the release policy explicitly permits and records the exception. Disposition policy identifies which criticality levels govern pass, conditional release or rejection.
| Value | Scope | Meaning |
|---|---|---|
| pass | result | The value satisfies the comparator against the limit. |
| fail | result | The value does not satisfy the comparator against the limit. |
| marginal | result | The result is recorded as borderline against its criterion. |
| not_evaluated | result | The criterion was not answered by this result. |
| pass | lot | Every governing criterion is answered and satisfied on the recomputed numbers. |
| conditional | lot | A failing non-critical criterion. The lot is released only where policy permits and records the exception. |
| fail | lot | A failing critical criterion fails the lot. |
| incomplete | lot | A critical criterion is unanswered. It MUST NOT be presented as a pass. |
| not_evaluated | lot | No results are present, so the package is as-designed rather than as-built. |
Yield
How many units met a named criterion.
A yield statement identifies the criterion it summarises and carries the number of units tested and the number meeting it. The fraction is units meeting over units tested. A yield MUST NOT claim that more units met a criterion than were tested and MUST NOT report a yield over zero units. Where a yield states both counts and a fraction, the fraction MUST agree with the counts. A yield MUST NOT be computed over fewer units than the plan requires, and MUST agree with the sample size reported by the corresponding measurement.
{
"criterion": "3f7c2a9e-51b4-4c1e-9a77-0d2f8e6b1c44",
"units_tested": 12,
"units_meeting": 12
} Twelve of twelve against AC-001. The counts are stated and the fraction is derived from them, so there is one number in the file rather than two that can drift apart.
What the validator refuses
Code, trigger, and the change the writer makes.
| Code | Severity | Trigger | Change |
|---|---|---|---|
| R01_NO_ID | ERROR | A criterion carries no immutable id, or two criteria share one. | Give each criterion a UUID unique within the package. |
| R01_NO_METHOD | ERROR | A criterion names no assay method. | Name the method. A force number without a test method is uncomparable between two suppliers. |
| R02_NO_MEASURAND | ERROR | The criterion states no measurand, or the measurand names no quantity. | State the quantity and its unit. The quantity decides which assay answers the criterion. |
| R02_NO_LIMIT | ERROR | A comparator other than pass or negative carries no limit. | State the threshold. A criterion with no threshold can never fail. |
| R02_BAD_LIMIT | ERROR | The limit is not a number, or a range limit is not an object carrying low and high. | Give a numeric threshold, or a range object with both bounds. |
| R02_BAD_STATISTIC | ERROR | statistic is outside the closed Core vocabulary. | Use one of value, mean, median, sd, cv, proportion, count, min, max. |
| R02_BAD_COMPARATOR | ERROR | comparator is outside the closed Core vocabulary. | Use one of >=, <=, range, equals, negative, pass. |
| R02_BAD_CRITICALITY | ERROR | criticality is outside the Core set. | Use critical, major or minor. |
| R03_BAD_DECISION_RULE | ERROR | decision_rule names a kind outside the Core set. | Use point_estimate, test, confidence_bound or tolerance_interval. |
| R03_NO_ALPHA | ERROR | A decision rule of kind test declares no alpha. | Declare the significance level. |
| R03_INTERVAL_CONFLATED | ERROR | A decision rule of one kind carries a label naming another. | A confidence interval is not a tolerance interval. Label the rule with its kind. |
| R03_CONVENIENCE_SAMPLE | ERROR | A test or tolerance_interval rule sits on a plan whose selection is convenience. | Use random, systematic or stratified selection, or downgrade the rule to point_estimate. |
| A8_CRITERION_NO_AXIS | ERROR | A criterion has no tests_axis key. | Add tests_axis: control or response. |
| A8_CRITERION_BAD_AXIS | ERROR | tests_axis holds a value other than control or response. | Set tests_axis to control or response. |
| U01_CRITERION_UNIT_MISMATCH | ERROR | A criterion on a registered property is stated in a unit other than the registered canonical unit. | Restate the criterion in the canonical unit. |
| U02_DIMENSION_MISMATCH | ERROR | The unit does not express the quantity kind, or a dimensionless statistic carries a dimensional unit. | Use a unit expressing the quantity kind. A coefficient of variation and a count take unit 1. |
| U03_IMPOSSIBLE_LIMIT | ERROR | A proportion limit outside [0, 1], a negative limit on a non-negative quantity, a negative cv limit, an order-parameter limit outside [0, 1], or a range low above its high. | State the limit within the range the statistic and the quantity admit. |
| U04_DEGENERATE_RANGE | ERROR | A range whose low and high are equal. | Use the equals comparator where exact equality is intended, or widen the range. |
| S01_IMPOSSIBLE_SAMPLE | ERROR | The plan states n = 0, or fewer specimens than the statistic requires. | Raise n. A standard deviation or cv over one specimen is zero by construction. |
| S02_UNATTAINABLE_POWER | ERROR | A one-sided test cannot reach the stated alpha at the stated n. | Raise n to the smallest size at which the rule can reject the null. |
| S03_RULE_WITHOUT_PLAN | ERROR | A test or tolerance_interval rule declares no sample size. | State sampling.n. |
| S04_NOT_EXECUTED | ERROR | A result reports zero specimens, fewer than the plan requires, or too few to define the statistic. | Measure the planned sample, or amend the plan and record the amendment. |
| S05_NO_SAMPLE_SIZE | ERROR | A result reports a distributional statistic and states no n_observed. | State n_observed. |
| S06_YIELD_UNDER_PLAN | ERROR | The yield reports fewer units tested than the plan requires, or disagrees with the corresponding measurement. | Compute the yield over the planned units and reconcile it with the result. |
| S07_NO_SAMPLING_UNIT | ERROR | A plan supporting a distributional statistic declares no sampling unit. | Declare sampling.unit, such as construct, well, electrode or image field. |
| S08_PSEUDOREPLICATION | ERROR | A test or tolerance_interval rule is applied to units drawn from a single batch. | Draw from independent batches, or declare independent_batches and downgrade the rule. |
| Y01_UNREGISTERED_ASSAY | ERROR | A method identifier in the wwd.assay: namespace is not in the Core assay registry. | Register the assay, namespace it as an extension, or use an unqualified local identifier. |
| Y02_ASSAY_CONDITION_MISSING | ERROR | A registered assay requires a condition the method does not state. | Add the condition to method.conditions. |
| Y03_POPULATION_UNDECLARED | ERROR | The assay or the measurand requires a stated analysis population and none is declared. | Declare population with the rule selecting the elements the statistic is computed over. |
| Y04_ASSAY_WRONG_MEASURAND | ERROR | The named assay does not measure the criterion measurand. | Name an assay that measures the quantity, or change the measurand. |
| Y05_NO_FIXTURE | ERROR | A registered assay requires a fixture and the method names none. | Name a component of kind device. |
| Y06_FIXTURE_NOT_A_DEVICE | ERROR | The named fixture is not a component of kind device in this package. | Carry the instrument as a device component and point the fixture at it. |
| Y07_POPULATION_NO_RULE | ERROR | A declared population does not say what it is a population of, or states neither completeness nor an inclusion rule. | State of, and either all: true or the inclusion rule. |
| R04_DANGLING_CRITERION | ERROR | A measured result references a criterion that does not exist. | Point the result at an existing criterion UUID. |
| R05_NO_OBSERVATION | ERROR | A result identifies no observation activity, or a design with criteria carries no measured results. | Add observation_activity, or record the measurements. |
| R05_RESULTS_INVALID | ERROR | The results document, measured_results or a row within it is the wrong shape. | Carry measured_results as an array of objects, each with at least an id, a criterion and a value. |
| R07_CRITICAL_UNEVALUATED | WARNING | A critical criterion has no measured result. | Measure it, or expect an incomplete disposition. |
| M01_RESULT_UNIT_MISMATCH | ERROR | The result unit differs from the criterion unit. | Restate the result in the unit the criterion names. The validator does not convert. |
| M02_STATISTIC_MISMATCH | ERROR | The result reports a statistic other than the one the criterion constrains. | Report the statistic the criterion names. |
| M03_VERDICT_CONTRADICTED | ERROR | The recorded status disagrees with the value, comparator and limit. | Correct the status or the value. The recomputed verdict is used either way. |
| M04_IMPOSSIBLE_YIELD | ERROR | The yield claims more units meeting than tested, or reports zero units tested. | Correct the counts, or omit the yield. |
| M05_YIELD_NO_CRITERION | ERROR | The yield statement names no criterion. | Name the criterion the yield summarises. |
| M05_YIELD_DANGLING | ERROR | The yield names a criterion not in the package. | Point the yield at an existing criterion. |
| M06_YIELD_FRACTION_DISAGREES | ERROR | A stated fraction disagrees with the counts. | State the counts and let the fraction be derived. |
| R06_AUTHORED_MODE_FLAG | ERROR | The package carries a hand-written as-built flag. | Remove it. Mode is derived as measured_results is nonempty. |
| F09_SIMULATED_AS_MEASURED | ERROR | A result with provenance simulated sits in measured_results. | Move the value to a simulation result linked to its run. |
The test suite carries vectors for these paths, among them
invalid-criterion-no-axis.wwd, invalid-criterion-no-method.wwd,
invalid-criterion-wrong-unit.wwd, invalid-impossible-sample.wwd,
invalid-impossible-yield.wwd, invalid-result-unit-mismatch.wwd,
invalid-unit-not-canonical.wwd and
invalid-convenience-sample-with-test.wwd.
Questions
What must an acceptance criterion carry?
An immutable UUID, an optional human tag, a title, a target, a measurand, a statistic, a comparator, a limit or expected category, a method, a criticality and a provenance. It MUST also declare tests_axis, control or response. A criterion MAY carry a sampling plan and a decision rule. The reference validator reports a criterion with no id as R01_NO_ID, no measurand as R02_NO_MEASURAND, no limit as R02_NO_LIMIT and no method as R01_NO_METHOD.
Why does a criterion name an assay rather than a bare number?
The specification states that a functional value without its assay method and conditions is invalid, and that a criterion MUST identify the environmental, culture, stimulation, preload, timing and analysis conditions that materially affect the measurement. Where the method names a Core assay term, the registry fixes the quantities that assay measures and the conditions that MUST be stated for two results under it to be comparable. A force from pillar deflection is the deflection multiplied by the post bending stiffness, so the registry entry marks the fixture as required.
What statistics and comparators does Core allow?
The statistic vocabulary is closed to value, mean, median, sd, cv, proportion, count, min and max. The comparator vocabulary is closed to >=, <=, range, equals, negative and pass. A numeric comparator carries dimensionally compatible limits. A range comparator declares inclusive or exclusive endpoints and a low bound not greater than its high bound. A negative comparator identifies what must be absent and by what detection method. A pass comparator references a method with an explicit pass decision.
How does a measured result link back to its criterion?
Every measured result carries an identifier and references exactly one acceptance criterion UUID, which MUST resolve within the package design context. A dangling criterion reference is a hard error, reported as R04_DANGLING_CRITERION. The result states status, value, statistic, unit, observed sample size, uncertainty where available, the realization or specimens observed, a timestamp and an observation activity. A derived statistic identifies software, algorithm and standard or method.
What are the disposition values?
A measured result identifies status as pass, fail, marginal or not_evaluated. Lot disposition is derived from the recomputed verdicts: a failing critical criterion fails the lot, a failing non-critical criterion yields a conditional disposition, and an unanswered critical criterion yields an incomplete disposition, which MUST NOT be presented as a pass. The disposition rule is fixed by the specification and is not configurable by a producer.
How is yield computed across a lot?
A yield statement carries units_tested, units_meeting and the criterion it summarises. It MUST NOT claim that more units met a criterion than were tested and MUST NOT report a yield over zero units. Where it states both counts and a fraction, the fraction MUST agree with the counts. A yield MUST NOT be computed over fewer units than the plan requires and MUST agree with the sample size reported by the corresponding measurement. In muscle-strip-asbuilt.wwd the yield is 12 of 12 units against criterion AC-001; in neurontile-asbuilt.wwd it is 7 of 8 against NT-001.
Can a criterion be unsatisfiable?
The specification refuses several forms. A criterion on a registered property MUST use the registered canonical unit, and a criterion stated in a unit that does not express its quantity kind MUST be refused. A proportion or yield limit MUST lie within [0, 1]. A limit on a non-negative quantity MUST NOT be negative. A range whose bounds are equal demands exact equality and is refused in favour of the equals comparator. A one-sided sign test at alpha 0.05 requires at least five specimens and at 0.01 at least seven, because the most extreme possible outcome occurs with probability 2 to the power minus n under the null.
Where do criteria and results live in a package?
Acceptance criteria belong to the design and sit in acceptance_criteria in design.json. Measured results belong to identified realizations and sit in measured_results in results.json, alongside the realization, the context block, the yield statement and the provenance graph. Appending measured results MUST NOT mutate acceptance criteria. Mode is derived as as_built := measured_results is nonempty and MUST NOT be authored as a flag.
Continue
Related pages.
- Causal roles. control, response, context and derived, and the axis a criterion tests.
- Property fields. Scalar-or-field slots, the five Core backings and the common field contract.
- The WWD file format. Container, manifest, design and results documents.
- The Core registries. Property terms, assay terms and closed vocabularies.
- Seven example packages, each read field by field.
- The reference validator. Every diagnostic code and how to run it.
- The WWD 0.1 draft specification. All normative sections with anchors.