omena_testkit/
boundary.rs1use serde::Serialize;
2
3use crate::fixture::{
4 OmenaTestkitFixtureSeedCorpusReportV0, OmenaTestkitFixtureSeedV0,
5 summarize_omena_testkit_fixture_seed_corpus,
6};
7use crate::scenario::{
8 OmenaTestkitScenarioMacroReportV0, summarize_omena_testkit_scenario_macro_report,
9};
10use crate::snapshot::{
11 OmenaTestkitSnapshotGovernanceReportV0, summarize_omena_testkit_snapshot_governance_report,
12};
13
14#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
16#[serde(rename_all = "camelCase")]
17pub struct OmenaTestkitBoundarySummaryV0 {
18 pub schema_version: &'static str,
20 pub product: &'static str,
22 pub owner: &'static str,
24 pub fixture_grammar: &'static str,
26 pub all_fixture_seeds_parse: bool,
28 pub closed_gates: Vec<&'static str>,
30 pub fixture_seed_report: OmenaTestkitFixtureSeedCorpusReportV0,
32 pub scenario_macro_report: OmenaTestkitScenarioMacroReportV0,
34 pub snapshot_governance_report: OmenaTestkitSnapshotGovernanceReportV0,
36}
37
38const BOUNDARY_FIXTURE_SEEDS: &[OmenaTestkitFixtureSeedV0] = &[
39 OmenaTestkitFixtureSeedV0 {
40 label: "shared-style-fixture",
41 lane: "style-fixture",
42 raw: r#"--- file: src/Button.module.scss
43.button { color: red; }
44--- expect: product
45omena-parser.style-facts
46--- expect: assertion
47shared fixture parser preserves style source text for product consumers
48"#,
49 expected_products: &["omena-parser.style-facts"],
50 promotion_target: "omena-testkit/shared-fixture-parser",
51 },
52 OmenaTestkitFixtureSeedV0 {
53 label: "cross-language-fixture",
54 lane: "cross-language-fixture",
55 raw: r#"--- file: src/App.tsx
56import styles from "./Button.module.scss";
57styles.button;
58--- file: src/Button.module.scss
59.button { color: red; }
60--- expect: product
61omena-query.source-syntax-index
62--- expect: assertion
63shared fixture parser keeps source and style files in the same workspace fixture
64"#,
65 expected_products: &["omena-query.source-syntax-index"],
66 promotion_target: "omena-testkit/cross-language-fixture",
67 },
68 OmenaTestkitFixtureSeedV0 {
69 label: "marked-style-fixture",
70 lane: "marked-style-fixture",
71 raw: r#"//- src/Card.module.scss dialect:scss layer:style
72.card { color: /*|*/red; }
73--- expect: product
74omena-testkit.fixture-markers
75--- expect: assertion
76shared fixture parser strips marker text and reports clean-source offsets
77"#,
78 expected_products: &["omena-testkit.fixture-markers"],
79 promotion_target: "omena-testkit/fixture-markers",
80 },
81];
82
83pub fn summarize_omena_testkit_boundary() -> OmenaTestkitBoundarySummaryV0 {
85 let fixture_seed_report = summarize_omena_testkit_fixture_seed_corpus(BOUNDARY_FIXTURE_SEEDS);
86 let scenario_macro_report = summarize_omena_testkit_scenario_macro_report();
87 let snapshot_governance_report = summarize_omena_testkit_snapshot_governance_report();
88
89 OmenaTestkitBoundarySummaryV0 {
90 schema_version: "0",
91 product: "omena-testkit.boundary",
92 owner: "omena-css/testkit",
93 fixture_grammar: "omena-fixture-v0",
94 all_fixture_seeds_parse: fixture_seed_report.all_seeds_parse,
95 closed_gates: vec![
96 "sharedFixtureParserOwnedByOmenaTestkit",
97 "crossLanguageFixtureGrammar",
98 "fixtureHeaderMetadata",
99 "fixtureMarkerOffsets",
100 "boundaryScenarioMacro",
101 "transformExecuteScenarioMacro",
102 "lspScenarioMacro",
103 "shadowOmenaVerbIntrospection",
104 "scenarioMacroCallSiteEvidence",
105 "snapshotGovernanceGlobalDisableRejected",
106 "snapshotGovernanceUnreferencedReject",
107 "snapshotGovernanceHotAgeAudit",
108 "snapshotGovernanceKnownFailurePolicy",
109 "m4TestkitPromotionSubstrate",
110 ],
111 fixture_seed_report,
112 scenario_macro_report,
113 snapshot_governance_report,
114 }
115}
116
117#[cfg(test)]
118mod tests {
119 use super::*;
120
121 #[test]
122 fn boundary_declares_shared_fixture_parser() {
123 let summary = summarize_omena_testkit_boundary();
124
125 assert_eq!(summary.product, "omena-testkit.boundary");
126 assert_eq!(summary.fixture_grammar, "omena-fixture-v0");
127 assert!(summary.all_fixture_seeds_parse);
128 assert_eq!(summary.fixture_seed_report.fixture_count, 3);
129 assert_eq!(summary.fixture_seed_report.metadata_count, 2);
130 assert_eq!(summary.fixture_seed_report.marker_count, 1);
131 assert!(
132 summary
133 .closed_gates
134 .contains(&"sharedFixtureParserOwnedByOmenaTestkit")
135 );
136 assert!(
137 summary
138 .closed_gates
139 .contains(&"crossLanguageFixtureGrammar")
140 );
141 assert!(summary.closed_gates.contains(&"fixtureHeaderMetadata"));
142 assert!(summary.closed_gates.contains(&"fixtureMarkerOffsets"));
143 assert!(summary.closed_gates.contains(&"boundaryScenarioMacro"));
144 assert!(
145 summary
146 .closed_gates
147 .contains(&"transformExecuteScenarioMacro")
148 );
149 assert!(summary.closed_gates.contains(&"lspScenarioMacro"));
150 assert!(
151 summary
152 .closed_gates
153 .contains(&"shadowOmenaVerbIntrospection")
154 );
155 assert!(
156 summary
157 .closed_gates
158 .contains(&"scenarioMacroCallSiteEvidence")
159 );
160 assert!(
161 summary
162 .closed_gates
163 .contains(&"snapshotGovernanceGlobalDisableRejected")
164 );
165 assert!(
166 summary
167 .closed_gates
168 .contains(&"snapshotGovernanceUnreferencedReject")
169 );
170 assert!(
171 summary
172 .closed_gates
173 .contains(&"snapshotGovernanceHotAgeAudit")
174 );
175 assert!(
176 summary
177 .closed_gates
178 .contains(&"snapshotGovernanceKnownFailurePolicy")
179 );
180 assert!(summary.scenario_macro_report.all_scenario_macros_ready);
181 assert!(summary.scenario_macro_report.call_site_evidence_supported);
182 assert!(summary.scenario_macro_report.call_site_probe.present);
183 assert!(
184 summary
185 .scenario_macro_report
186 .call_site_probe
187 .file_suffix_matches
188 );
189 assert!(summary.scenario_macro_report.call_site_probe.line_non_zero);
190 assert!(
191 summary
192 .scenario_macro_report
193 .call_site_probe
194 .column_non_zero
195 );
196 assert_eq!(summary.scenario_macro_report.scenario_count, 4);
197 assert!(
198 summary
199 .scenario_macro_report
200 .supported_archetypes
201 .contains(&"lsp-scenario")
202 );
203 assert!(
204 summary
205 .scenario_macro_report
206 .supported_archetypes
207 .contains(&"shadow-omena-verb")
208 );
209 assert!(summary.snapshot_governance_report.global_disable_rejected);
210 assert!(summary.snapshot_governance_report.unreferenced_reject_ready);
211 assert!(
212 summary
213 .snapshot_governance_report
214 .hot_snapshot_age_audit_ready
215 );
216 assert!(
217 summary
218 .snapshot_governance_report
219 .known_failure_policy_ready
220 );
221 assert_eq!(
222 summary
223 .snapshot_governance_report
224 .rejected_unreferenced_count,
225 1
226 );
227 }
228}