Skip to main content

omena_testkit/
boundary.rs

1use 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/// Boundary summary for the shared Rust testkit substrate.
15#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
16#[serde(rename_all = "camelCase")]
17pub struct OmenaTestkitBoundarySummaryV0 {
18    /// Schema version.
19    pub schema_version: &'static str,
20    /// Product surface name.
21    pub product: &'static str,
22    /// Owning omena-css layer.
23    pub owner: &'static str,
24    /// Fixture grammar owned by this crate.
25    pub fixture_grammar: &'static str,
26    /// Whether every boundary seed parses with the shared grammar.
27    pub all_fixture_seeds_parse: bool,
28    /// Named evidence gates closed by this crate.
29    pub closed_gates: Vec<&'static str>,
30    /// Boundary seed corpus report.
31    pub fixture_seed_report: OmenaTestkitFixtureSeedCorpusReportV0,
32    /// Boundary and transform-execution scenario macro substrate report.
33    pub scenario_macro_report: OmenaTestkitScenarioMacroReportV0,
34    /// Snapshot governance seed-policy report.
35    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
83/// Summarize the shared Rust testkit boundary.
84pub 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}