{
	"version": "1.0",
	"description": "Crafted documents for the Open Meet Exchange conformance tests that need one, each a worked example with one named change. kind: registration, results, or card. expect: accept, reject, refuse-version, refuse-kind (no omx.kind, or an unknown one: refused before anything is created), older (409 after c30-first), equal (no change after c30-first), operator (Meet Operations asks the timer), or refuse-results (a results document Meet Operations refuses). Dedicated to the public domain under CC0 1.0.",
	"fixtures": [
		{
			"file": "c3-duplicate-ids.omx.json",
			"url": "https://2timer.app/omx/fixtures/c3-duplicate-ids.omx.json",
			"test": "OMX-C3",
			"kind": "registration",
			"expect": "reject",
			"summary": "Two athletes share the id a-1001.",
			"base": "xc-invitational.json"
		},
		{
			"file": "c4-unresolved-reference.omx.json",
			"url": "https://2timer.app/omx/fixtures/c4-unresolved-reference.omx.json",
			"test": "OMX-C4",
			"kind": "registration",
			"expect": "reject",
			"summary": "An entry's athlete_id names an athlete the document does not contain.",
			"base": "xc-invitational.json"
		},
		{
			"file": "c13-registration-writes-results.omx.json",
			"url": "https://2timer.app/omx/fixtures/c13-registration-writes-results.omx.json",
			"test": "OMX-C13",
			"kind": "registration",
			"expect": "operator",
			"summary": "A registration document's entry carries a result and a place, which only Meet Operations writes. Meet Operations reads the meet, ignores both fields, and tells the timer; a writer's checker reports them.",
			"base": "xc-invitational.json"
		},
		{
			"file": "c107-missing-kind.omx.json",
			"url": "https://2timer.app/omx/fixtures/c107-missing-kind.omx.json",
			"test": "OMX-C107",
			"kind": "registration",
			"expect": "refuse-kind",
			"summary": "The registration document has no omx.kind. It is refused, never guessed from its fields.",
			"base": "xc-invitational.json"
		},
		{
			"file": "c107-unknown-kind.omx.json",
			"url": "https://2timer.app/omx/fixtures/c107-unknown-kind.omx.json",
			"test": "OMX-C107",
			"kind": "results",
			"expect": "refuse-kind",
			"summary": "omx.kind is \"roster\", a kind this version does not define.",
			"base": "xc-invitational-returned.json"
		},
		{
			"file": "c108-entered-twice.omx.json",
			"url": "https://2timer.app/omx/fixtures/c108-entered-twice.omx.json",
			"test": "OMX-C108",
			"kind": "registration",
			"expect": "reject",
			"summary": "Maya Chen is entered twice in the Varsity Girls 5K, so a result could not be joined to one entry.",
			"base": "xc-invitational.json"
		},
		{
			"file": "c102-results-document.omx.json",
			"url": "https://2timer.app/omx/fixtures/c102-results-document.omx.json",
			"test": "OMX-C102",
			"kind": "results",
			"expect": "refuse-results",
			"summary": "The cross country results document, offered to Meet Operations as if it were a registration link. Meet Operations refuses it before creating anything.",
			"base": "xc-invitational-returned.json"
		},
		{
			"file": "c26-unknown-version.omx.json",
			"url": "https://2timer.app/omx/fixtures/c26-unknown-version.omx.json",
			"test": "OMX-C26",
			"kind": "results",
			"expect": "refuse-version",
			"summary": "omx.version is 9.0, a major no reader implements.",
			"base": "xc-invitational-returned.json"
		},
		{
			"file": "c27-invalid-mark.omx.json",
			"url": "https://2timer.app/omx/fixtures/c27-invalid-mark.omx.json",
			"test": "OMX-C27",
			"kind": "results",
			"expect": "reject",
			"summary": "An entry result has its value written as text, \"19:36.23\", not a number.",
			"base": "xc-invitational-returned.json"
		},
		{
			"file": "c110-unknown-unit.omx.json",
			"url": "https://2timer.app/omx/fixtures/c110-unknown-unit.omx.json",
			"test": "OMX-C110",
			"kind": "results",
			"expect": "accept",
			"summary": "A result in \"laps\", a unit a later minor version might add, with display \"12 laps\". Accepted; shown by its display and never compared.",
			"base": "xc-invitational-returned.json"
		},
		{
			"file": "c30-first.omx.json",
			"url": "https://2timer.app/omx/fixtures/c30-first.omx.json",
			"test": "OMX-C30",
			"kind": "results",
			"expect": "accept",
			"summary": "The first of three: updated_at 2026-10-03T14:41:52.418-04:00.",
			"base": "xc-invitational-returned.json"
		},
		{
			"file": "c30-older.omx.json",
			"url": "https://2timer.app/omx/fixtures/c30-older.omx.json",
			"test": "OMX-C30",
			"kind": "results",
			"expect": "older",
			"summary": "Sent after c30-first: updated_at is earlier, 2026-10-03T14:40:00.000-04:00.",
			"base": "xc-invitational-returned.json"
		},
		{
			"file": "c30-same-instant.omx.json",
			"url": "https://2timer.app/omx/fixtures/c30-same-instant.omx.json",
			"test": "OMX-C30",
			"kind": "results",
			"expect": "equal",
			"summary": "Sent after c30-first: the same instant written in UTC, 2026-10-03T18:41:52.418Z.",
			"base": "xc-invitational-returned.json"
		},
		{
			"file": "c42-unknown-fields.omx.json",
			"url": "https://2timer.app/omx/fixtures/c42-unknown-fields.omx.json",
			"test": "OMX-C42",
			"kind": "results",
			"expect": "accept",
			"summary": "An unknown optional field, a camelCase key, a $schema key, and a field prefixed with another product's name.",
			"base": "xc-invitational-returned.json"
		},
		{
			"file": "c43-nulls.omx.json",
			"url": "https://2timer.app/omx/fixtures/c43-nulls.omx.json",
			"test": "OMX-C43",
			"kind": "results",
			"expect": "accept",
			"summary": "An entry has \"lane\": null and a finisher has \"result\": null.",
			"base": "xc-invitational-returned.json"
		},
		{
			"file": "c53-unknown-draft.omx.json",
			"url": "https://2timer.app/omx/fixtures/c53-unknown-draft.omx.json",
			"test": "OMX-C53",
			"kind": "registration",
			"expect": "refuse-version",
			"summary": "omx.version is 0.9, the last draft. A 1.x reader refuses every draft number.",
			"base": "xc-invitational.json"
		},
		{
			"file": "c53-later-minor.omx.json",
			"url": "https://2timer.app/omx/fixtures/c53-later-minor.omx.json",
			"test": "OMX-C53",
			"kind": "registration",
			"expect": "accept",
			"summary": "omx.version is 1.7, a later minor of 1.0. A 1.0 reader reads it, since a minor only adds.",
			"base": "xc-invitational.json"
		},
		{
			"file": "c61-multi-off-table.omx.json",
			"url": "https://2timer.app/omx/fixtures/c61-multi-off-table.omx.json",
			"test": "OMX-C61",
			"kind": "registration",
			"expect": "operator",
			"summary": "A men's outdoor HEP. The standard table's men's heptathlon is indoor, so Meet Operations builds its components by its own rules or reports it; it never guesses them from the name.",
			"base": "tf-outdoor-dual.json"
		},
		{
			"file": "c88-bare-values.omx.json",
			"url": "https://2timer.app/omx/fixtures/c88-bare-values.omx.json",
			"test": "OMX-C88",
			"kind": "registration",
			"expect": "reject",
			"summary": "A sport, snowshoe, that this version does not define. A writer sends only defined values.",
			"base": "xc-invitational.json"
		},
		{
			"file": "c123-malformed-values.omx.json",
			"url": "https://2timer.app/omx/fixtures/c123-malformed-values.omx.json",
			"test": "OMX-C123",
			"kind": "registration",
			"expect": "operator",
			"summary": "Values a writer must format and a reader never fails over: an athlete's country JPN, a team code of 20 characters, and a destination token of 12 characters. Meet Operations reads the meet and warns about each; a writer's checker refuses them.",
			"base": "xc-invitational.json"
		},
		{
			"file": "c105-undefined-code.omx.json",
			"url": "https://2timer.app/omx/fixtures/c105-undefined-code.omx.json",
			"test": "OMX-C105",
			"kind": "registration",
			"expect": "operator",
			"summary": "An event whose code, SWIM, this version does not define. Meet Operations leaves that event out, tells the timer, and reads the rest of the meet; a writer's checker reports the code.",
			"base": "tf-outdoor-dual.json"
		},
		{
			"file": "c120-unknown-code.omx.json",
			"url": "https://2timer.app/omx/fixtures/c120-unknown-code.omx.json",
			"test": "OMX-C120",
			"kind": "results",
			"expect": "accept",
			"summary": "The Girls Long Jump as a later minor version might send a standing triple jump, code STJ, which this version does not define, with its places, team points, team score block, and a jumper with no valid mark (nr). A Publisher shows it by name and prints the nr as NR.",
			"base": "tf-outdoor-dual-returned.json"
		},
		{
			"file": "c84-final-not-run.omx.json",
			"url": "https://2timer.app/omx/fixtures/c84-final-not-run.omx.json",
			"test": "OMX-C84",
			"kind": "results",
			"expect": "accept",
			"summary": "Women's 60m prelims are official with places; the final is marked final: true but upcoming, with no entries. The event has no result yet.",
			"base": "tf-indoor-open-returned.json"
		},
		{
			"file": "c90-later-values.omx.json",
			"url": "https://2timer.app/omx/fixtures/c90-later-values.omx.json",
			"test": "OMX-C90",
			"kind": "results",
			"expect": "accept",
			"summary": "Values a later minor might define: round status \"provisional\" and timing \"laser\". Accepted, and the round is not shown official.",
			"base": "road-5k-returned.json"
		},
		{
			"file": "c91-second-timing-system.omx.json",
			"url": "https://2timer.app/omx/fixtures/c91-second-timing-system.omx.json",
			"test": "OMX-C91",
			"kind": "results",
			"expect": "accept",
			"summary": "The XC meet as a second Meet Operations product hands it off: the same Registration meet id in meet.external_ids, under a different generator.id and meet.id. Sent after the XC results example, a Publisher that is also Registration keeps both and replaces neither.",
			"base": "xc-invitational-returned.json"
		},
		{
			"file": "c111-partial.omx.json",
			"url": "https://2timer.app/omx/fixtures/c111-partial.omx.json",
			"test": "OMX-C111",
			"kind": "results",
			"expect": "accept",
			"summary": "Sent after c30-first: a partial document carrying the Varsity Girls 5K round whole, with its team score, after a correction to Emma Walsh's time (20:13.98). The Publisher replaces that round and its team score and keeps the other three events and everything else it holds.",
			"base": "xc-invitational-returned.json"
		},
		{
			"file": "c112-unknown-update.omx.json",
			"url": "https://2timer.app/omx/fixtures/c112-unknown-update.omx.json",
			"test": "OMX-C112",
			"kind": "results",
			"expect": "reject",
			"summary": "omx.update is \"delta\", a value this version does not define. A Publisher answers 422 and never reads it as full.",
			"base": "xc-invitational-returned.json"
		},
		{
			"file": "c113-cancelled-round.omx.json",
			"url": "https://2timer.app/omx/fixtures/c113-cancelled-round.omx.json",
			"test": "OMX-C113",
			"kind": "results",
			"expect": "accept",
			"summary": "Lightning ends the meet early: the JV Boys 5K is cancelled, its round listed with status cancelled and no entries.",
			"base": "xc-invitational-returned.json"
		},
		{
			"file": "c114-race-in-progress.omx.json",
			"url": "https://2timer.app/omx/fixtures/c114-race-in-progress.omx.json",
			"test": "OMX-C114",
			"kind": "results",
			"expect": "accept",
			"summary": "A partial document during the Monster Dash 5K: the round is started, Derek Shaw and Carla Mendez have finished with places so far, and Hana S. is still on the course with her 1-mile split.",
			"base": "road-5k-returned.json"
		},
		{
			"file": "c85-destination-card.omx-destination.json",
			"url": "https://2timer.app/omx/fixtures/c85-destination-card.omx-destination.json",
			"test": "OMX-C85",
			"kind": "card",
			"expect": "accept",
			"summary": "A destination card, as a Publisher shows it, asking for live results. Meet Operations adds it on paste."
		}
	]
}
