{"version":"1.1.0","parameters":[{"id":"conditions.milling_frequency","scope":"conditions","path":["parameters","milling_frequency"],"type":"quantity","label":"Milling frequency","description":"Oscillation frequency of the milling process; not rotational speed.","unit":"Hz","units":{"Hz":1,"kHz":1000},"example":{"value":30,"unit":"Hz"},"label_zh":"球磨频率","operators":["present","missing","equals","range"]},{"id":"conditions.milling_medium","scope":"conditions","path":["parameters","milling_medium"],"type":"text","label":"Milling medium","description":"Reported material of the milling balls or beads.","example":"zirconia","label_zh":"研磨介质","operators":["present","missing","equals","contains"]},{"id":"materials.supplier_batch","scope":"materials","path":["parameters","supplier_batch"],"type":"text","label":"Supplier batch","description":"Supplier batch identifier as reported for an input material.","example":"LOT-2026-01","label_zh":"供应商批号","operators":["present","missing","equals","contains"]},{"id":"conditions.milling_ball_diameter","scope":"conditions","path":["parameters","milling_ball_diameter"],"type":"quantity","label":"Milling ball diameter","label_zh":"研磨球直径","description":"Reported diameter of the milling balls; not vessel size.","unit":"mm","units":{"mm":1,"cm":10,"m":1000},"example":{"value":5,"unit":"mm"},"operators":["present","missing","equals","range"]}],"authoring":"Use parameters for all additional structured values. Use text for wording. Contributors may submit custom keys without registration; public structured filtering requires a reviewed field definition. Historical extension paths retain their original registered readers.","examples":{"upload":"/examples/parameter-upload.json","search":"/examples/parameter-query.json","guide":"/en/guides/retrieval#custom-parameters"},"storage":"Custom values remain in the original reaction JSONB and scoped object payloads. Registration does not add columns or copy historical data.","labels":"IDs and JSON paths are stable English codes. label is the English display name; label_zh is an optional reviewed Chinese translation. Uploading a key does not auto-register or translate it.","numeric_operators":{"equals":"Match an explicitly reported point value after unit conversion. Reported intervals, approximations and inequalities do not count as equal.","range":"Match reported points or intervals overlapping the requested closed interval; at least one bound is required. One bound gives an open-ended query. minimum=maximum tests interval containment, not exact reported equality."},"query":"parameter_filters uses registered IDs. Numeric bounds use the registered canonical unit or dimensionless scale. All clauses for the same scope/selector match one stage or one object; different groups combine with AND. Omitted conditions inherit; null clears.","coverage":"Queries use existing scientific facts matching the current searchable source document. Unparsed or stale facts are excluded, including from missing filters; parameter_coverage reports availability. Unknown units or incompatible values remain stored but do not satisfy typed filters.","registration":"Maintainers review an additive entry in backend/isynth_schema/parameter-registry.json, validate it with python -m isynth_schema.parameters, test queries and deploy. An existing ID keeps its meaning, scope, path, type and unit/scale conversions; breaking changes get a new ID/module version. This is a reviewed registry, not a public write endpoint.","performance":"The first implementation queries existing JSONB through indexed reaction/object links. It creates no per-parameter value copy or dedicated numerical index. High-volume parameters may later receive rebuildable indexes after profiling; query semantics stay unchanged.","unknown_parameters":"Unregistered values are preserved and returned in complete reaction records; structured parameter filters require registration. Acceptance of custom JSON does not establish scientific correctness."}