This document defines the comparison contract and CI gate behavior used by parity workflows.
Open XML SDK v3.4.1.data/corpus/sdk_seed/manifest.jsondata/corpus/parity_baseline/v3.4.1/parity_snapshot.jsondata/corpus/parity_baseline/v3.4.1/perf_budget.jsondata/corpus/parity_baseline/v3.4.1/waivers.jsonCurrent snapshots are produced by scripts/corpus/run_parity_snapshot.py and include:
duration_secondsvalidation_runschecks_collectedchecks_totalchecks_matchedchecks_mismatchedchecks_missing_filesmatch_rate_percentstrictinclude_mutation_expectationsskipped_mutation_expectationsmismatch_families[] with normalized tuple fields:iderror_typepartpathdescriptionfamily_key (id|error_type|part|path|description)countExpectations extracted from SDK tests are tagged in the manifest with scenario:
base: validation of an unmodified corpus filemutation: validation after test-time document mutations (add/remove/edit operations)Extractor normalization for parity fidelity:
OpenXmlValidator.Validate(package) assertions are mapped to file-level expectations.MaxNumberOfErrors tests) are tagged as mutation.Default parity snapshots run against base expectations only.
scripts/corpus/run_parity_snapshot.py excludes scenario == "mutation" unless --include-mutation-expectations is passed.skipped_mutation_expectations in the snapshot JSON.scripts/corpus/compare_to_baseline.py compares a current snapshot against baseline and enforces:
checks_mismatched delta)Family drift is keyed by family_key when present (falls back to description for older snapshots).
Default policy is strict no-drift:
--max-mismatch-growth 0--max-new-families 0--max-match-rate-drop 0.0--max-missing-files 0--require-same-strictchecks_total dropWorkflow: .github/workflows/parity-gate.yml
compare_to_baseline.py.check_perf_budget.py.Corpus source for gate:
data/corpus/sdk_seed/files/ if present.PARITY_CORPUS_ARCHIVE_URL.Archive requirement:
.tar.zst that extracts a top-level files/ directory.Performance budget is defined in data/corpus/parity_baseline/v3.4.1/perf_budget.json.
scripts/corpus/check_perf_budget.py validates:
max_duration_seconds)max_seconds_per_check)max_seconds_per_validation)min_checks_total)Default policy is fail-on-regression against these limits in PR CI.
Waivers are declared in data/corpus/parity_baseline/v3.4.1/waivers.json.
Required fields per waiver:
kind: one ofnew_mismatch_familymismatch_growthmatch_rate_dropmissing_filescheck_total_dropstrict_modeowner: accountable owner/teamreason: short rationaleexpires: ISO date YYYY-MM-DDtarget: required for new_mismatch_family (family description)Rules:
Example:
{
"waivers": [
{
"kind": "new_mismatch_family",
"target": "file_not_found",
"owner": "openxml-audit-maintainers",
"reason": "Temporary corpus mirror outage",
"expires": "2026-04-15"
}
]
}