From 520e50ce62f067dff69f03760c8b12929df9b920 Mon Sep 17 00:00:00 2001 From: "sorokin.oleg.edu" Date: Thu, 24 Sep 2026 20:38:33 -0700 Subject: [PATCH] test(source): author explicit trace and reject actual typed case spellings --- .../src/language_ordinary_source8_tests.rs | 22 +++++++++++++++++-- ...8-compatibility-implementation-20260925.md | 13 +++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/crates/oa-core/src/language_ordinary_source8_tests.rs b/crates/oa-core/src/language_ordinary_source8_tests.rs index 83144657..106c749d 100644 --- a/crates/oa-core/src/language_ordinary_source8_tests.rs +++ b/crates/oa-core/src/language_ordinary_source8_tests.rs @@ -54,11 +54,27 @@ fn current_formatter_roundtrips_complete_ordinary_examples_and_history() { let input = example_bundle(); let before = input.clone(); let compiled = compile_bundle(&input, ProjectLimits::default()).unwrap(); - let example = compiled.decoded.project; + let mut example = compiled.decoded.project; assert!(example.elements.values().any(|e| e.layer() == Layer::Oa)); assert!(example.elements.values().any(|e| e.layer() == Layer::Sa)); assert!(!example.diagrams.is_empty()); - assert!(!example.traces.is_empty()); + // The published example has no traces: author an explicit participant link + // rather than assuming that the example already exercises this record class. + let trace_id = Id::from_u128(0x188b_0000_0000_0000_0000_0000_0000_0001); + let trace = Trace { + id: trace_id, + alias: "rescue_participant_trace".into(), + name: "Coordination participant realization".into(), + description: "Relates the operational coordination team to its selected system.".into(), + oa: Id::parse_str("00000000-0000-4000-8000-000000000102").unwrap(), + sa: Id::parse_str("00000000-0000-4000-8000-000000000301").unwrap(), + kind: TraceKind::Participant, + baseline: None, + }; + assert_eq!(example.elements[&trace.oa].kind(), Kind::Entity); + assert_eq!(example.elements[&trace.sa].kind(), Kind::System); + assert!(example.traces.insert(trace_id, trace.clone()).is_none()); + assert_eq!(example.traces[&trace_id], trace); let historical = crate::persistence::decode(include_bytes!("../tests/fixtures/v4-reviewed-prose.json")) .unwrap(); @@ -165,7 +181,9 @@ fn typed_analysis_future_headers_and_limits_still_refuse() { "sa_property", "oa_check", "sa_check", + "oa_analysis", "oa_case", + "sa_analysis", "sa_case", "oa_engineering_property", "sa_engineering_property", diff --git a/harness/ordinary-source8-compatibility-implementation-20260925.md b/harness/ordinary-source8-compatibility-implementation-20260925.md index b0004c28..c68a7bf5 100644 --- a/harness/ordinary-source8-compatibility-implementation-20260925.md +++ b/harness/ordinary-source8-compatibility-implementation-20260925.md @@ -51,3 +51,16 @@ single6 token, and expect only6->8 during migration. All exact file/comment/modu whole-model, caller ownership and recompilation assertions remain, as does the original test name. This is a static finding before execution, not a reported runtime failure; no other legacy evaluator or formatter is changed. + +## Focused fixture repair after initial execution + +Parent's focused run at 33b86a4d completed five tests and failed one: the example +bundle has no trace records, contrary to the new fixture's nonempty assertion. +The repair explicitly authors a Participant trace from fixed OA rescue-team UUID +102 to fixed SA system UUID301, checks endpoint kinds and the complete trace, +and includes it in the unchanged whole-model source/bundle roundtrip assertions. +Historical reviewed-prose trace/baseline coverage remains. Independent source +review also identified the actual short case spellings oa_analysis/sa_analysis; +both now appear in the ordinary refusal table alongside the invalid case aliases. +Production and the other evaluators are unchanged. These corrections are not a +runtime pass claim; the initial five-pass/one-failure record remains preserved. \ No newline at end of file