openxml-audit 0.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- openxml_audit-0.2.0/.github/FUNDING.yml +1 -0
- openxml_audit-0.2.0/.github/ISSUE_TEMPLATE/bug_report.yml +39 -0
- openxml_audit-0.2.0/.github/ISSUE_TEMPLATE/feature_request.yml +16 -0
- openxml_audit-0.2.0/.github/PULL_REQUEST_TEMPLATE.md +13 -0
- openxml_audit-0.2.0/.github/workflows/calibrate-parity.yml +112 -0
- openxml_audit-0.2.0/.github/workflows/odf-reference-calibration.yml +151 -0
- openxml_audit-0.2.0/.github/workflows/pages.yml +90 -0
- openxml_audit-0.2.0/.github/workflows/parity-gate.yml +147 -0
- openxml_audit-0.2.0/.github/workflows/release.yml +90 -0
- openxml_audit-0.2.0/.github/workflows/sdk-update.yml +79 -0
- openxml_audit-0.2.0/.github/workflows/validate-inputs.yml +153 -0
- openxml_audit-0.2.0/.gitignore +20 -0
- openxml_audit-0.2.0/CLAUDE.md +72 -0
- openxml_audit-0.2.0/CONTRIBUTING.md +46 -0
- openxml_audit-0.2.0/LICENSE +21 -0
- openxml_audit-0.2.0/PKG-INFO +435 -0
- openxml_audit-0.2.0/Presentation1.pptx +0 -0
- openxml_audit-0.2.0/README.md +380 -0
- openxml_audit-0.2.0/SPEC.md +278 -0
- openxml_audit-0.2.0/TASKS.md +229 -0
- openxml_audit-0.2.0/data/corpus/parity_baseline/v3.4.1/parity_snapshot.json +115 -0
- openxml_audit-0.2.0/data/corpus/parity_baseline/v3.4.1/perf_budget.json +9 -0
- openxml_audit-0.2.0/data/corpus/parity_baseline/v3.4.1/waivers.json +3 -0
- openxml_audit-0.2.0/data/corpus/sdk_seed/manifest.json +9865 -0
- openxml_audit-0.2.0/data/odf/reference_baseline/2026-03-09/drift_policy.json +14 -0
- openxml_audit-0.2.0/data/odf/reference_baseline/2026-03-09/drift_report.json +135 -0
- openxml_audit-0.2.0/data/odf/reference_baseline/2026-03-09/drift_summary.md +21 -0
- openxml_audit-0.2.0/data/odf/reference_baseline/2026-03-09/mismatch_report.json +2319 -0
- openxml_audit-0.2.0/data/odf/reference_baseline/2026-03-09/mismatch_summary.md +95 -0
- openxml_audit-0.2.0/data/odf/reference_baseline/2026-03-09/mismatch_triage.md +95 -0
- openxml_audit-0.2.0/data/odf/reference_baseline/2026-03-09/reference_runs.json +4858 -0
- openxml_audit-0.2.0/data/odf/reference_baseline/2026-03-09/waivers.json +3 -0
- openxml_audit-0.2.0/data/odf/reference_corpus/manifest.json +193 -0
- openxml_audit-0.2.0/data/openxml/.sdk_version +1 -0
- openxml_audit-0.2.0/data/openxml/namespaces.json +795 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas-microsoft-com_office_excel.json +1525 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas-microsoft-com_office_office.json +2234 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas-microsoft-com_office_powerpoint.json +27 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas-microsoft-com_office_word.json +365 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas-microsoft-com_vml.json +7004 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_ink_2010_main.json +617 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_2006_01_customui.json +21261 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_2006_activeX.json +196 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_2006_coverPageProps.json +108 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_2006_customDocumentInformationPanel.json +135 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_2006_metadata_contentType.json +111 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_2006_metadata_customXsn.json +79 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_2006_metadata_longProperties.json +42 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_2006_metadata_properties_metaAttributes.json +153 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_2009_07_customui.json +35279 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_2019_extlst.json +41 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_2020_mipLabelMetadata.json +210 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_drawing_2007_8_2_chart.json +474 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_drawing_2008_diagram.json +1125 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_drawing_2010_chartDrawing.json +406 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_drawing_2010_compatibility.json +38 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_drawing_2010_diagram.json +118 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_drawing_2010_main.json +3279 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_drawing_2010_picture.json +82 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_drawing_2010_slicer.json +80 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_drawing_2012_chart.json +2745 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_drawing_2012_chartStyle.json +7010 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_drawing_2012_main.json +337 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_drawing_2012_timeslicer.json +80 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_drawing_2013_main_command.json +5029 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_drawing_2014_chart.json +1058 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_drawing_2014_chart_ac.json +52 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_drawing_2014_chartex.json +6251 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_drawing_2014_main.json +171 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_drawing_2016_11_diagram.json +171 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_drawing_2016_11_main.json +26 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_drawing_2016_12_diagram.json +360 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_drawing_2016_SVG_main.json +27 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_drawing_2016_ink.json +75 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_drawing_2017_03_chart.json +60 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_drawing_2017_decorative.json +21 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_drawing_2017_model3d.json +1924 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_drawing_2018_animation.json +142 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_drawing_2018_animation_model3d.json +223 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_drawing_2018_hyperlinkcolor.json +57 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_drawing_2018_sketchyshapes.json +246 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_drawing_2020_classificationShape.json +59 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_drawing_2021_livefeed.json +281 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_drawing_2021_oembed.json +90 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_drawing_2021_scriptlink.json +74 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_drawing_2022_imageformula.json +21 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_excel_2006_main.json +544 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_excel_2010_spreadsheetDrawing.json +406 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_powerpoint_2010_main.json +2096 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_powerpoint_2012_main.json +447 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_powerpoint_2012_roamingSettings.json +54 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_powerpoint_2013_main_command.json +481 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_powerpoint_2015_main.json +21 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_powerpoint_2017_10_main.json +26 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_powerpoint_2017_3_main.json +153 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_powerpoint_2018_4_main.json +59 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_powerpoint_2018_8_main.json +880 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_powerpoint_2019_12_main.json +631 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_powerpoint_2019_9_main_command.json +141 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_powerpoint_2020_02_main.json +148 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_powerpoint_2021_06_main.json +631 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_powerpoint_2022_03_main.json +167 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_powerpoint_2022_08_main.json +556 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_powerpoint_2023_02_main.json +90 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_spreadsheetml_2009_9_main.json +5805 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_spreadsheetml_2010_11_ac.json +27 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_spreadsheetml_2010_11_main.json +3306 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_spreadsheetml_2011_1_ac.json +13 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_spreadsheetml_2014_11_main.json +191 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_spreadsheetml_2014_revision.json +5366 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_spreadsheetml_2015_02_main.json +3 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_spreadsheetml_2015_revision2.json +3 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_spreadsheetml_2016_01_main.json +3 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_spreadsheetml_2016_pivotdefaultlayout.json +33 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_spreadsheetml_2016_revision10.json +3 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_spreadsheetml_2016_revision3.json +3 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_spreadsheetml_2016_revision5.json +3 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_spreadsheetml_2016_revision6.json +3 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_spreadsheetml_2016_revision9.json +3 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_spreadsheetml_2017_dynamicarray.json +85 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_spreadsheetml_2017_revision16.json +3 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_spreadsheetml_2017_richdata.json +371 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_spreadsheetml_2017_richdata2.json +1602 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_spreadsheetml_2018_08_main.json +3 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_spreadsheetml_2018_calcfeatures.json +52 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_spreadsheetml_2018_threadedcomments.json +467 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_spreadsheetml_2019_extlinksprops.json +21 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_spreadsheetml_2019_namedsheetviews.json +884 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_spreadsheetml_2020_pivotNov2020.json +73 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_spreadsheetml_2020_richdatawebimage.json +178 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_spreadsheetml_2020_richvaluerefresh.json +64 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_spreadsheetml_2020_threadedcomments2.json +121 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_spreadsheetml_2021_extlinks2021.json +100 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_spreadsheetml_2022_featurepropertybag.json +1118 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_spreadsheetml_2022_pivotRichData.json +54 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_spreadsheetml_2022_pivotVersionInfo.json +100 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_spreadsheetml_2022_richvaluerel.json +100 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_spreadsheetml_2023_dataSourceVersioning.json +76 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_spreadsheetml_2023_externalCodeService.json +27 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_spreadsheetml_2023_msForms.json +159 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_spreadsheetml_2023_pivot2023Calculation.json +235 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_spreadsheetml_2024_pivotAutoRefresh.json +20 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_spreadsheetml_2024_pivotDynamicArrays.json +26 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_spreadsheetml_2024_workbookCompatibilityVersion.json +27 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_spreadsheetml_2025_externalCodeService2.json +27 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_spreadsheetml_2025_pivotDataSource.json +40 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_tasks_2019_documenttasks.json +667 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_thememl_2012_main.json +295 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_webextensions_taskpanes_2010_11.json +176 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_webextensions_webextension_2010_11.json +567 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_word_2006_wordml.json +1032 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_word_2010_wordml.json +6319 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_word_2010_wordprocessingCanvas.json +339 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_word_2010_wordprocessingDrawing.json +255 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_word_2010_wordprocessingGroup.json +732 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_word_2010_wordprocessingShape.json +1033 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_word_2012_wordml.json +634 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_word_2012_wordprocessingDrawing.json +36 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_word_2015_wordml_symex.json +60 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_word_2016_wordml_cid.json +102 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_word_2018_wordml.json +50 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_word_2018_wordml_cex.json +161 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_word_2020_oembed.json +43 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_word_2020_wordml_sdtdatahash.json +3 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_word_2023_wordml_word16du.json +3 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_microsoft_com_office_word_2024_wordml_sdtformatlock.json +3 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_openxmlformats_org_drawingml_2006_chart.json +15361 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_openxmlformats_org_drawingml_2006_chartDrawing.json +1753 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_openxmlformats_org_drawingml_2006_compatibility.json +36 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_openxmlformats_org_drawingml_2006_diagram.json +7608 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_openxmlformats_org_drawingml_2006_lockedCanvas.json +97 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_openxmlformats_org_drawingml_2006_main.json +30390 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_openxmlformats_org_drawingml_2006_picture.json +517 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_openxmlformats_org_drawingml_2006_spreadsheetDrawing.json +2201 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_openxmlformats_org_drawingml_2006_wordprocessingDrawing.json +1525 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_openxmlformats_org_officeDocument_2006_bibliography.json +2708 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_openxmlformats_org_officeDocument_2006_characteristics.json +122 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_openxmlformats_org_officeDocument_2006_custom-properties.json +361 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_openxmlformats_org_officeDocument_2006_customXml.json +104 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_openxmlformats_org_officeDocument_2006_docPropsVTypes.json +1316 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_openxmlformats_org_officeDocument_2006_extended-properties.json +775 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_openxmlformats_org_officeDocument_2006_math.json +11040 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_openxmlformats_org_officeDocument_2006_relationships.json +3 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_openxmlformats_org_presentationml_2006_main.json +15692 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_openxmlformats_org_schemaLibrary_2006_main.json +54 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_openxmlformats_org_spreadsheetml_2006_main.json +29150 -0
- openxml_audit-0.2.0/data/openxml/schemas/schemas_openxmlformats_org_wordprocessingml_2006_main.json +56249 -0
- openxml_audit-0.2.0/data/openxml/schemas/www_w3_org_2003_04_emma.json +2065 -0
- openxml_audit-0.2.0/data/openxml/schemas/www_w3_org_2003_InkML.json +2894 -0
- openxml_audit-0.2.0/data/openxml/schemas/www_w3_org_XML_1998_namespace.json +19 -0
- openxml_audit-0.2.0/data/openxml/schematrons.json +4864 -0
- openxml_audit-0.2.0/docs/odf_security_policy.md +74 -0
- openxml_audit-0.2.0/docs/odf_validation_contract.md +238 -0
- openxml_audit-0.2.0/docs/parity_contract.md +153 -0
- openxml_audit-0.2.0/inputs/README.md +7 -0
- openxml_audit-0.2.0/pyproject.toml +70 -0
- openxml_audit-0.2.0/scripts/benchmark_validation.py +92 -0
- openxml_audit-0.2.0/scripts/check_sdk_update.py +166 -0
- openxml_audit-0.2.0/scripts/compare_with_sdk.py +226 -0
- openxml_audit-0.2.0/scripts/compare_with_sdk_batch.py +332 -0
- openxml_audit-0.2.0/scripts/corpus/check_perf_budget.py +209 -0
- openxml_audit-0.2.0/scripts/corpus/compare_to_baseline.py +558 -0
- openxml_audit-0.2.0/scripts/corpus/extract_sdk_expectations.py +971 -0
- openxml_audit-0.2.0/scripts/corpus/import_sdk_assets.py +495 -0
- openxml_audit-0.2.0/scripts/corpus/run_parity_snapshot.py +413 -0
- openxml_audit-0.2.0/scripts/odf/benchmark_validation.py +115 -0
- openxml_audit-0.2.0/scripts/odf/bootstrap_reference_validators.py +488 -0
- openxml_audit-0.2.0/scripts/odf/build_mismatch_triage.py +237 -0
- openxml_audit-0.2.0/scripts/odf/check_reference_drift.py +783 -0
- openxml_audit-0.2.0/scripts/odf/compare_reference_results.py +489 -0
- openxml_audit-0.2.0/scripts/odf/run_reference_validators.py +702 -0
- openxml_audit-0.2.0/scripts/sdk_check/Program.cs +46 -0
- openxml_audit-0.2.0/scripts/sdk_check/sdk_check.csproj +11 -0
- openxml_audit-0.2.0/scripts/sdk_compare/OpenXmlSdkValidator.csproj +11 -0
- openxml_audit-0.2.0/scripts/sdk_compare/Program.cs +97 -0
- openxml_audit-0.2.0/scripts/sync_openxml_data.py +187 -0
- openxml_audit-0.2.0/scripts/update_from_sdk.py +193 -0
- openxml_audit-0.2.0/specs/001-exhaustive-schematron-validation.md +303 -0
- openxml_audit-0.2.0/specs/001-exhaustive-schematron-validation.tasks.md +214 -0
- openxml_audit-0.2.0/specs/002-sdk-parity-gap-closure.md +189 -0
- openxml_audit-0.2.0/specs/002-sdk-parity-gap-closure.tasks.md +54 -0
- openxml_audit-0.2.0/specs/003-odf-validation-foundation.md +182 -0
- openxml_audit-0.2.0/specs/003-odf-validation-foundation.tasks.md +59 -0
- openxml_audit-0.2.0/specs/004-odf-oasis-conformance-gap-closure.md +199 -0
- openxml_audit-0.2.0/specs/004-odf-oasis-conformance-gap-closure.tasks.md +66 -0
- openxml_audit-0.2.0/src/openxml_audit/__init__.py +87 -0
- openxml_audit-0.2.0/src/openxml_audit/binary.py +266 -0
- openxml_audit-0.2.0/src/openxml_audit/cli.py +478 -0
- openxml_audit-0.2.0/src/openxml_audit/codegen/__init__.py +45 -0
- openxml_audit-0.2.0/src/openxml_audit/codegen/constraint_bridge.py +487 -0
- openxml_audit-0.2.0/src/openxml_audit/codegen/schema_loader.py +391 -0
- openxml_audit-0.2.0/src/openxml_audit/codegen/schematron_bridge.py +432 -0
- openxml_audit-0.2.0/src/openxml_audit/codegen/schematron_loader.py +559 -0
- openxml_audit-0.2.0/src/openxml_audit/context.py +212 -0
- openxml_audit-0.2.0/src/openxml_audit/core/__init__.py +25 -0
- openxml_audit-0.2.0/src/openxml_audit/core/context.py +9 -0
- openxml_audit-0.2.0/src/openxml_audit/core/errors.py +19 -0
- openxml_audit-0.2.0/src/openxml_audit/core/package.py +141 -0
- openxml_audit-0.2.0/src/openxml_audit/errors.py +83 -0
- openxml_audit-0.2.0/src/openxml_audit/excel/__init__.py +7 -0
- openxml_audit-0.2.0/src/openxml_audit/excel/workbook.py +135 -0
- openxml_audit-0.2.0/src/openxml_audit/helpers.py +304 -0
- openxml_audit-0.2.0/src/openxml_audit/namespaces.py +188 -0
- openxml_audit-0.2.0/src/openxml_audit/odf/__init__.py +20 -0
- openxml_audit-0.2.0/src/openxml_audit/odf/_helpers.py +28 -0
- openxml_audit-0.2.0/src/openxml_audit/odf/package.py +318 -0
- openxml_audit-0.2.0/src/openxml_audit/odf/schema_core.py +259 -0
- openxml_audit-0.2.0/src/openxml_audit/odf/security.py +408 -0
- openxml_audit-0.2.0/src/openxml_audit/odf/semantic.py +481 -0
- openxml_audit-0.2.0/src/openxml_audit/odf/validator.py +415 -0
- openxml_audit-0.2.0/src/openxml_audit/package.py +243 -0
- openxml_audit-0.2.0/src/openxml_audit/parity_normalization.py +106 -0
- openxml_audit-0.2.0/src/openxml_audit/parts.py +227 -0
- openxml_audit-0.2.0/src/openxml_audit/pptx/__init__.py +35 -0
- openxml_audit-0.2.0/src/openxml_audit/pptx/masters.py +358 -0
- openxml_audit-0.2.0/src/openxml_audit/pptx/presentation.py +301 -0
- openxml_audit-0.2.0/src/openxml_audit/pptx/slides.py +280 -0
- openxml_audit-0.2.0/src/openxml_audit/pptx/themes.py +303 -0
- openxml_audit-0.2.0/src/openxml_audit/relationships.py +170 -0
- openxml_audit-0.2.0/src/openxml_audit/schema/__init__.py +71 -0
- openxml_audit-0.2.0/src/openxml_audit/schema/constraints.py +345 -0
- openxml_audit-0.2.0/src/openxml_audit/schema/particle.py +691 -0
- openxml_audit-0.2.0/src/openxml_audit/schema/types.py +486 -0
- openxml_audit-0.2.0/src/openxml_audit/schema/validator.py +408 -0
- openxml_audit-0.2.0/src/openxml_audit/semantic/__init__.py +58 -0
- openxml_audit-0.2.0/src/openxml_audit/semantic/attributes.py +401 -0
- openxml_audit-0.2.0/src/openxml_audit/semantic/constraints/__init__.py +29 -0
- openxml_audit-0.2.0/src/openxml_audit/semantic/constraints/compound.py +112 -0
- openxml_audit-0.2.0/src/openxml_audit/semantic/constraints/cross_part.py +287 -0
- openxml_audit-0.2.0/src/openxml_audit/semantic/constraints/equality.py +198 -0
- openxml_audit-0.2.0/src/openxml_audit/semantic/references.py +283 -0
- openxml_audit-0.2.0/src/openxml_audit/semantic/relationships.py +208 -0
- openxml_audit-0.2.0/src/openxml_audit/semantic/validator.py +271 -0
- openxml_audit-0.2.0/src/openxml_audit/validator.py +1577 -0
- openxml_audit-0.2.0/src/openxml_audit/word/__init__.py +7 -0
- openxml_audit-0.2.0/src/openxml_audit/word/document.py +88 -0
- openxml_audit-0.2.0/tests/__init__.py +1 -0
- openxml_audit-0.2.0/tests/conftest.py +548 -0
- openxml_audit-0.2.0/tests/fixture_loader.py +17 -0
- openxml_audit-0.2.0/tests/fixtures/binary/invalid.emf +1 -0
- openxml_audit-0.2.0/tests/fixtures/binary/invalid.jpg +1 -0
- openxml_audit-0.2.0/tests/fixtures/binary/invalid.ole +1 -0
- openxml_audit-0.2.0/tests/fixtures/binary/invalid.png +1 -0
- openxml_audit-0.2.0/tests/fixtures/binary/invalid.ttf +0 -0
- openxml_audit-0.2.0/tests/fixtures/binary/invalid.wmf +1 -0
- openxml_audit-0.2.0/tests/fixtures/binary/valid.emf +0 -0
- openxml_audit-0.2.0/tests/fixtures/binary/valid.jpg +0 -0
- openxml_audit-0.2.0/tests/fixtures/binary/valid.odttf +0 -0
- openxml_audit-0.2.0/tests/fixtures/binary/valid.ole +0 -0
- openxml_audit-0.2.0/tests/fixtures/binary/valid.png +0 -0
- openxml_audit-0.2.0/tests/fixtures/binary/valid.ttf +0 -0
- openxml_audit-0.2.0/tests/fixtures/binary/valid.wmf +0 -0
- openxml_audit-0.2.0/tests/fixtures/content_types/defaults.xml +5 -0
- openxml_audit-0.2.0/tests/fixtures/content_types/empty.xml +3 -0
- openxml_audit-0.2.0/tests/fixtures/content_types/override.xml +5 -0
- openxml_audit-0.2.0/tests/fixtures/cross_part/current.xml +2 -0
- openxml_audit-0.2.0/tests/fixtures/cross_part/current_with_items.xml +5 -0
- openxml_audit-0.2.0/tests/fixtures/cross_part/target.xml +5 -0
- openxml_audit-0.2.0/tests/fixtures/docx/minimal/[Content_Types].xml +6 -0
- openxml_audit-0.2.0/tests/fixtures/docx/minimal/_rels/.rels +4 -0
- openxml_audit-0.2.0/tests/fixtures/docx/minimal/word/document.xml +11 -0
- openxml_audit-0.2.0/tests/fixtures/docx/missing_body/[Content_Types].xml +6 -0
- openxml_audit-0.2.0/tests/fixtures/docx/missing_body/_rels/.rels +4 -0
- openxml_audit-0.2.0/tests/fixtures/docx/missing_body/word/document.xml +3 -0
- openxml_audit-0.2.0/tests/fixtures/docx/missing_styles_with_effects/[Content_Types].xml +12 -0
- openxml_audit-0.2.0/tests/fixtures/docx/missing_styles_with_effects/_rels/.rels +4 -0
- openxml_audit-0.2.0/tests/fixtures/docx/missing_styles_with_effects/word/_rels/document.xml.rels +9 -0
- openxml_audit-0.2.0/tests/fixtures/docx/missing_styles_with_effects/word/document.xml +4 -0
- openxml_audit-0.2.0/tests/fixtures/docx/missing_styles_with_effects/word/fontTable.xml +2 -0
- openxml_audit-0.2.0/tests/fixtures/docx/missing_styles_with_effects/word/numbering.xml +2 -0
- openxml_audit-0.2.0/tests/fixtures/docx/missing_styles_with_effects/word/settings.xml +2 -0
- openxml_audit-0.2.0/tests/fixtures/docx/missing_styles_with_effects/word/styles.xml +2 -0
- openxml_audit-0.2.0/tests/fixtures/docx/missing_styles_with_effects/word/theme/theme1.xml +2 -0
- openxml_audit-0.2.0/tests/fixtures/docx/missing_styles_with_effects/word/webSettings.xml +2 -0
- openxml_audit-0.2.0/tests/fixtures/integration/invalid_xml/content_types.xml +6 -0
- openxml_audit-0.2.0/tests/fixtures/integration/invalid_xml/invalid_presentation.xml +1 -0
- openxml_audit-0.2.0/tests/fixtures/integration/invalid_xml/rels.xml +4 -0
- openxml_audit-0.2.0/tests/fixtures/integration/missing_package_rels/content_types.xml +3 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/aux_declared_missing_styles/META-INF/manifest.xml +6 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/aux_declared_missing_styles/content.xml +11 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/aux_declared_missing_styles/mimetype +1 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/aux_invalid_styles_xml/META-INF/manifest.xml +6 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/aux_invalid_styles_xml/content.xml +11 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/aux_invalid_styles_xml/mimetype +1 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/aux_invalid_styles_xml/styles.xml +6 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/broken_content_xml/META-INF/manifest.xml +5 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/broken_content_xml/content.xml +8 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/broken_content_xml/mimetype +1 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/content_body_mismatch/META-INF/manifest.xml +5 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/content_body_mismatch/content.xml +8 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/content_body_mismatch/mimetype +1 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/content_root_mismatch/META-INF/manifest.xml +5 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/content_root_mismatch/content.xml +6 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/content_root_mismatch/mimetype +1 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/duplicate_manifest_entry/META-INF/manifest.xml +6 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/duplicate_manifest_entry/content.xml +2 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/duplicate_manifest_entry/mimetype +1 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/encrypted_checksum_partial/META-INF/manifest.xml +10 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/encrypted_checksum_partial/content.xml +7 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/encrypted_checksum_partial/mimetype +1 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/encrypted_missing_key_derivation/META-INF/manifest.xml +9 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/encrypted_missing_key_derivation/content.xml +7 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/encrypted_missing_key_derivation/mimetype +1 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/encrypted_root_entry_encrypted/META-INF/manifest.xml +10 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/encrypted_root_entry_encrypted/content.xml +7 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/encrypted_root_entry_encrypted/mimetype +1 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/invalid_mimetype/META-INF/manifest.xml +5 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/invalid_mimetype/content.xml +2 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/invalid_mimetype/mimetype +1 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/malformed_manifest/META-INF/manifest.xml +3 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/malformed_manifest/content.xml +2 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/malformed_manifest/mimetype +1 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/manifest_content_bad_media_type/META-INF/manifest.xml +5 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/manifest_content_bad_media_type/content.xml +11 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/manifest_content_bad_media_type/mimetype +1 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/manifest_missing_part/META-INF/manifest.xml +5 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/manifest_missing_part/mimetype +1 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/missing_content_xml/META-INF/manifest.xml +4 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/missing_content_xml/mimetype +1 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/missing_manifest/content.xml +2 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/missing_manifest/mimetype +1 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/missing_mimetype/META-INF/manifest.xml +5 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/missing_mimetype/content.xml +2 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/missing_root_entry/META-INF/manifest.xml +4 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/missing_root_entry/content.xml +2 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/missing_root_entry/mimetype +1 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/presentation_duplicate_page_names/META-INF/manifest.xml +5 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/presentation_duplicate_page_names/content.xml +12 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/presentation_duplicate_page_names/mimetype +1 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/presentation_master_page_missing_styles/META-INF/manifest.xml +5 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/presentation_master_page_missing_styles/content.xml +11 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/presentation_master_page_missing_styles/mimetype +1 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/presentation_master_page_unresolved/META-INF/manifest.xml +6 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/presentation_master_page_unresolved/content.xml +11 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/presentation_master_page_unresolved/mimetype +1 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/presentation_master_page_unresolved/styles.xml +9 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/root_mimetype_mismatch/META-INF/manifest.xml +5 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/root_mimetype_mismatch/content.xml +2 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/root_mimetype_mismatch/mimetype +1 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/signature_bad_media_type/META-INF/documentsignatures.xml +10 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/signature_bad_media_type/META-INF/manifest.xml +6 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/signature_bad_media_type/content.xml +7 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/signature_bad_media_type/mimetype +1 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/signature_bad_root/META-INF/documentsignatures.xml +2 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/signature_bad_root/META-INF/manifest.xml +6 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/signature_bad_root/content.xml +7 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/signature_bad_root/mimetype +1 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/signature_manifest_missing_xml/META-INF/manifest.xml +6 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/signature_manifest_missing_xml/content.xml +11 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/signature_manifest_missing_xml/mimetype +1 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/signature_missing_signedinfo/META-INF/documentsignatures.xml +8 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/signature_missing_signedinfo/META-INF/manifest.xml +6 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/signature_missing_signedinfo/content.xml +7 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/signature_missing_signedinfo/mimetype +1 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/spreadsheet_duplicate_table_names/META-INF/manifest.xml +5 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/spreadsheet_duplicate_table_names/content.xml +12 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/spreadsheet_duplicate_table_names/mimetype +1 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/text_style_reference_missing_styles/META-INF/manifest.xml +5 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/text_style_reference_missing_styles/content.xml +11 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/text_style_reference_missing_styles/mimetype +1 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/unlisted_xml_part/META-INF/manifest.xml +4 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/unlisted_xml_part/content.xml +2 -0
- openxml_audit-0.2.0/tests/fixtures/odf/invalid/unlisted_xml_part/mimetype +1 -0
- openxml_audit-0.2.0/tests/fixtures/odf/valid/encrypted_structural_odt/META-INF/manifest.xml +10 -0
- openxml_audit-0.2.0/tests/fixtures/odf/valid/encrypted_structural_odt/content.xml +7 -0
- openxml_audit-0.2.0/tests/fixtures/odf/valid/encrypted_structural_odt/mimetype +1 -0
- openxml_audit-0.2.0/tests/fixtures/odf/valid/encrypted_stub_odt/META-INF/manifest.xml +7 -0
- openxml_audit-0.2.0/tests/fixtures/odf/valid/encrypted_stub_odt/content.xml +11 -0
- openxml_audit-0.2.0/tests/fixtures/odf/valid/encrypted_stub_odt/mimetype +1 -0
- openxml_audit-0.2.0/tests/fixtures/odf/valid/minimal_odp/META-INF/manifest.xml +5 -0
- openxml_audit-0.2.0/tests/fixtures/odf/valid/minimal_odp/content.xml +11 -0
- openxml_audit-0.2.0/tests/fixtures/odf/valid/minimal_odp/mimetype +1 -0
- openxml_audit-0.2.0/tests/fixtures/odf/valid/minimal_ods/META-INF/manifest.xml +5 -0
- openxml_audit-0.2.0/tests/fixtures/odf/valid/minimal_ods/content.xml +11 -0
- openxml_audit-0.2.0/tests/fixtures/odf/valid/minimal_ods/mimetype +1 -0
- openxml_audit-0.2.0/tests/fixtures/odf/valid/minimal_odt/META-INF/manifest.xml +5 -0
- openxml_audit-0.2.0/tests/fixtures/odf/valid/minimal_odt/content.xml +11 -0
- openxml_audit-0.2.0/tests/fixtures/odf/valid/minimal_odt/mimetype +1 -0
- openxml_audit-0.2.0/tests/fixtures/odf/valid/minimal_odt_v12/META-INF/manifest.xml +5 -0
- openxml_audit-0.2.0/tests/fixtures/odf/valid/minimal_odt_v12/content.xml +11 -0
- openxml_audit-0.2.0/tests/fixtures/odf/valid/minimal_odt_v12/mimetype +1 -0
- openxml_audit-0.2.0/tests/fixtures/odf/valid/minimal_odt_v14/META-INF/manifest.xml +5 -0
- openxml_audit-0.2.0/tests/fixtures/odf/valid/minimal_odt_v14/content.xml +11 -0
- openxml_audit-0.2.0/tests/fixtures/odf/valid/minimal_odt_v14/mimetype +1 -0
- openxml_audit-0.2.0/tests/fixtures/odf/valid/minimal_odt_with_styles/META-INF/manifest.xml +6 -0
- openxml_audit-0.2.0/tests/fixtures/odf/valid/minimal_odt_with_styles/content.xml +11 -0
- openxml_audit-0.2.0/tests/fixtures/odf/valid/minimal_odt_with_styles/mimetype +1 -0
- openxml_audit-0.2.0/tests/fixtures/odf/valid/minimal_odt_with_styles/styles.xml +9 -0
- openxml_audit-0.2.0/tests/fixtures/odf/valid/presentation_master_page_resolved/META-INF/manifest.xml +6 -0
- openxml_audit-0.2.0/tests/fixtures/odf/valid/presentation_master_page_resolved/content.xml +11 -0
- openxml_audit-0.2.0/tests/fixtures/odf/valid/presentation_master_page_resolved/mimetype +1 -0
- openxml_audit-0.2.0/tests/fixtures/odf/valid/presentation_master_page_resolved/styles.xml +9 -0
- openxml_audit-0.2.0/tests/fixtures/odf/valid/signed_structural_odt/META-INF/documentsignatures.xml +11 -0
- openxml_audit-0.2.0/tests/fixtures/odf/valid/signed_structural_odt/META-INF/manifest.xml +6 -0
- openxml_audit-0.2.0/tests/fixtures/odf/valid/signed_structural_odt/content.xml +11 -0
- openxml_audit-0.2.0/tests/fixtures/odf/valid/signed_structural_odt/mimetype +1 -0
- openxml_audit-0.2.0/tests/fixtures/odf/valid/signed_stub_odt/META-INF/documentsignatures.xml +2 -0
- openxml_audit-0.2.0/tests/fixtures/odf/valid/signed_stub_odt/META-INF/manifest.xml +6 -0
- openxml_audit-0.2.0/tests/fixtures/odf/valid/signed_stub_odt/content.xml +11 -0
- openxml_audit-0.2.0/tests/fixtures/odf/valid/signed_stub_odt/mimetype +1 -0
- openxml_audit-0.2.0/tests/fixtures/odf/valid/text_style_reference_with_styles/META-INF/manifest.xml +6 -0
- openxml_audit-0.2.0/tests/fixtures/odf/valid/text_style_reference_with_styles/content.xml +11 -0
- openxml_audit-0.2.0/tests/fixtures/odf/valid/text_style_reference_with_styles/mimetype +1 -0
- openxml_audit-0.2.0/tests/fixtures/odf/valid/text_style_reference_with_styles/styles.xml +9 -0
- openxml_audit-0.2.0/tests/fixtures/pptx/minimal/[Content_Types].xml +10 -0
- openxml_audit-0.2.0/tests/fixtures/pptx/minimal/_rels/.rels +4 -0
- openxml_audit-0.2.0/tests/fixtures/pptx/minimal/ppt/_rels/presentation.xml.rels +6 -0
- openxml_audit-0.2.0/tests/fixtures/pptx/minimal/ppt/presentation.xml +13 -0
- openxml_audit-0.2.0/tests/fixtures/pptx/minimal/ppt/slideLayouts/_rels/slideLayout1.xml.rels +4 -0
- openxml_audit-0.2.0/tests/fixtures/pptx/minimal/ppt/slideLayouts/slideLayout1.xml +19 -0
- openxml_audit-0.2.0/tests/fixtures/pptx/minimal/ppt/slideMasters/_rels/slideMaster1.xml.rels +5 -0
- openxml_audit-0.2.0/tests/fixtures/pptx/minimal/ppt/slideMasters/slideMaster1.xml +21 -0
- openxml_audit-0.2.0/tests/fixtures/pptx/minimal/ppt/slides/_rels/slide1.xml.rels +4 -0
- openxml_audit-0.2.0/tests/fixtures/pptx/minimal/ppt/slides/slide1.xml +18 -0
- openxml_audit-0.2.0/tests/fixtures/pptx/minimal/ppt/theme/theme1.xml +53 -0
- openxml_audit-0.2.0/tests/fixtures/pptx/missing_presentation/[Content_Types].xml +5 -0
- openxml_audit-0.2.0/tests/fixtures/pptx/missing_presentation/_rels/.rels +3 -0
- openxml_audit-0.2.0/tests/fixtures/relationships/by_id.xml +5 -0
- openxml_audit-0.2.0/tests/fixtures/relationships/by_type.xml +6 -0
- openxml_audit-0.2.0/tests/fixtures/relationships/empty.xml +3 -0
- openxml_audit-0.2.0/tests/fixtures/relationships/iteration.xml +5 -0
- openxml_audit-0.2.0/tests/fixtures/relationships/resolve_target.xml +4 -0
- openxml_audit-0.2.0/tests/fixtures/relationships/two_rels.xml +5 -0
- openxml_audit-0.2.0/tests/fixtures/schema/supplemental_font.xml +2 -0
- openxml_audit-0.2.0/tests/fixtures/xlsx/minimal/[Content_Types].xml +7 -0
- openxml_audit-0.2.0/tests/fixtures/xlsx/minimal/_rels/.rels +4 -0
- openxml_audit-0.2.0/tests/fixtures/xlsx/minimal/xl/_rels/workbook.xml.rels +4 -0
- openxml_audit-0.2.0/tests/fixtures/xlsx/minimal/xl/workbook.xml +7 -0
- openxml_audit-0.2.0/tests/fixtures/xlsx/minimal/xl/worksheets/sheet1.xml +4 -0
- openxml_audit-0.2.0/tests/fixtures/xlsx/missing_shared_strings/[Content_Types].xml +9 -0
- openxml_audit-0.2.0/tests/fixtures/xlsx/missing_shared_strings/_rels/.rels +4 -0
- openxml_audit-0.2.0/tests/fixtures/xlsx/missing_shared_strings/xl/_rels/workbook.xml.rels +6 -0
- openxml_audit-0.2.0/tests/fixtures/xlsx/missing_shared_strings/xl/styles.xml +2 -0
- openxml_audit-0.2.0/tests/fixtures/xlsx/missing_shared_strings/xl/theme/theme1.xml +2 -0
- openxml_audit-0.2.0/tests/fixtures/xlsx/missing_shared_strings/xl/workbook.xml +6 -0
- openxml_audit-0.2.0/tests/fixtures/xlsx/missing_shared_strings/xl/worksheets/sheet1.xml +10 -0
- openxml_audit-0.2.0/tests/fixtures/xlsx/missing_sheet_rel/[Content_Types].xml +6 -0
- openxml_audit-0.2.0/tests/fixtures/xlsx/missing_sheet_rel/_rels/.rels +4 -0
- openxml_audit-0.2.0/tests/fixtures/xlsx/missing_sheet_rel/xl/workbook.xml +7 -0
- openxml_audit-0.2.0/tests/test_binary_validation.py +108 -0
- openxml_audit-0.2.0/tests/test_cli.py +175 -0
- openxml_audit-0.2.0/tests/test_cross_part_constraint.py +82 -0
- openxml_audit-0.2.0/tests/test_helpers.py +149 -0
- openxml_audit-0.2.0/tests/test_integration.py +256 -0
- openxml_audit-0.2.0/tests/test_odf_package.py +184 -0
- openxml_audit-0.2.0/tests/test_odf_reference_bootstrap.py +94 -0
- openxml_audit-0.2.0/tests/test_odf_reference_calibration.py +169 -0
- openxml_audit-0.2.0/tests/test_odf_reference_runner.py +135 -0
- openxml_audit-0.2.0/tests/test_odf_security.py +169 -0
- openxml_audit-0.2.0/tests/test_odf_semantic.py +97 -0
- openxml_audit-0.2.0/tests/test_odf_validator.py +505 -0
- openxml_audit-0.2.0/tests/test_package.py +157 -0
- openxml_audit-0.2.0/tests/test_relationships.py +165 -0
- openxml_audit-0.2.0/tests/test_schema_regressions.py +352 -0
- openxml_audit-0.2.0/tests/test_schema_types.py +283 -0
- openxml_audit-0.2.0/tests/test_schematron_coverage.py +374 -0
- openxml_audit-0.2.0/tests/test_semantic_regressions.py +92 -0
- openxml_audit-0.2.0/tests/test_validator.py +206 -0
- openxml_audit-0.2.0/tests/test_word_excel_integration.py +66 -0
- openxml_audit-0.2.0/winsemiusroundtrip.dotx +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
github: BramAlkema
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
name: Bug report
|
|
2
|
+
description: Report a validation issue or unexpected behavior
|
|
3
|
+
labels: [bug]
|
|
4
|
+
body:
|
|
5
|
+
- type: textarea
|
|
6
|
+
id: description
|
|
7
|
+
attributes:
|
|
8
|
+
label: Description
|
|
9
|
+
description: What happened vs what you expected
|
|
10
|
+
validations:
|
|
11
|
+
required: true
|
|
12
|
+
- type: textarea
|
|
13
|
+
id: reproduce
|
|
14
|
+
attributes:
|
|
15
|
+
label: Steps to reproduce
|
|
16
|
+
description: Command or code to reproduce the issue
|
|
17
|
+
render: bash
|
|
18
|
+
- type: input
|
|
19
|
+
id: version
|
|
20
|
+
attributes:
|
|
21
|
+
label: Version
|
|
22
|
+
description: "Output of: openxml-audit --version"
|
|
23
|
+
- type: input
|
|
24
|
+
id: python
|
|
25
|
+
attributes:
|
|
26
|
+
label: Python version
|
|
27
|
+
description: "Output of: python --version"
|
|
28
|
+
- type: dropdown
|
|
29
|
+
id: file-type
|
|
30
|
+
attributes:
|
|
31
|
+
label: File type
|
|
32
|
+
options:
|
|
33
|
+
- PPTX
|
|
34
|
+
- DOCX
|
|
35
|
+
- XLSX
|
|
36
|
+
- ODT
|
|
37
|
+
- ODS
|
|
38
|
+
- ODP
|
|
39
|
+
- Other
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
name: Feature request
|
|
2
|
+
description: Suggest a new validation rule or feature
|
|
3
|
+
labels: [enhancement]
|
|
4
|
+
body:
|
|
5
|
+
- type: textarea
|
|
6
|
+
id: description
|
|
7
|
+
attributes:
|
|
8
|
+
label: Description
|
|
9
|
+
description: What would you like added or changed?
|
|
10
|
+
validations:
|
|
11
|
+
required: true
|
|
12
|
+
- type: textarea
|
|
13
|
+
id: use-case
|
|
14
|
+
attributes:
|
|
15
|
+
label: Use case
|
|
16
|
+
description: Why is this needed? What problem does it solve?
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
name: Calibrate parity
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
inputs:
|
|
6
|
+
sdk_ref:
|
|
7
|
+
description: "Open XML SDK tag/branch to calibrate against"
|
|
8
|
+
required: true
|
|
9
|
+
default: "v3.4.1"
|
|
10
|
+
schedule:
|
|
11
|
+
- cron: "17 2 * * 1"
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
calibrate:
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
env:
|
|
17
|
+
SDK_REF: ${{ inputs.sdk_ref || 'v3.4.1' }}
|
|
18
|
+
SDK_REPO: https://github.com/dotnet/Open-XML-SDK.git
|
|
19
|
+
SDK_ROOT: /tmp/openxml-sdk-upstream
|
|
20
|
+
CORPUS_ROOT: /tmp/openxml-sdk-seed
|
|
21
|
+
RUNTIME_MANIFEST: /tmp/openxml-runtime-manifest.json
|
|
22
|
+
steps:
|
|
23
|
+
- name: Checkout
|
|
24
|
+
uses: actions/checkout@v4
|
|
25
|
+
|
|
26
|
+
- name: Set up Python
|
|
27
|
+
uses: actions/setup-python@v5
|
|
28
|
+
with:
|
|
29
|
+
python-version: "3.11"
|
|
30
|
+
|
|
31
|
+
- name: Set up .NET SDK
|
|
32
|
+
uses: actions/setup-dotnet@v4
|
|
33
|
+
with:
|
|
34
|
+
dotnet-version: "8.0.x"
|
|
35
|
+
|
|
36
|
+
- name: Install package
|
|
37
|
+
run: |
|
|
38
|
+
python -m pip install --upgrade pip
|
|
39
|
+
pip install -e .
|
|
40
|
+
|
|
41
|
+
- name: Fetch Open XML SDK
|
|
42
|
+
run: |
|
|
43
|
+
rm -rf "$SDK_ROOT"
|
|
44
|
+
git clone --depth 1 --branch "$SDK_REF" "$SDK_REPO" "$SDK_ROOT"
|
|
45
|
+
git -C "$SDK_ROOT" rev-parse HEAD | tee /tmp/openxml-sdk-commit.txt
|
|
46
|
+
printf '%s\n' "$SDK_REF" > /tmp/openxml-sdk-ref.txt
|
|
47
|
+
|
|
48
|
+
- name: Materialize SDK corpus (runtime only)
|
|
49
|
+
run: |
|
|
50
|
+
rm -rf "$CORPUS_ROOT"
|
|
51
|
+
python scripts/corpus/import_sdk_assets.py \
|
|
52
|
+
--sdk-root "$SDK_ROOT" \
|
|
53
|
+
--output-root "$CORPUS_ROOT"
|
|
54
|
+
|
|
55
|
+
- name: Build runtime manifest with extracted expectations
|
|
56
|
+
run: |
|
|
57
|
+
cp data/corpus/sdk_seed/manifest.json "$RUNTIME_MANIFEST"
|
|
58
|
+
python scripts/corpus/extract_sdk_expectations.py \
|
|
59
|
+
--sdk-root "$SDK_ROOT" \
|
|
60
|
+
--manifest "$RUNTIME_MANIFEST" \
|
|
61
|
+
--output "$RUNTIME_MANIFEST"
|
|
62
|
+
|
|
63
|
+
- name: Run parity snapshot
|
|
64
|
+
run: |
|
|
65
|
+
mkdir -p reports
|
|
66
|
+
python scripts/corpus/run_parity_snapshot.py \
|
|
67
|
+
--manifest "$RUNTIME_MANIFEST" \
|
|
68
|
+
--files-root "$CORPUS_ROOT/files" \
|
|
69
|
+
--output reports/parity_snapshot.json
|
|
70
|
+
|
|
71
|
+
- name: Upload parity artifacts
|
|
72
|
+
if: always()
|
|
73
|
+
uses: actions/upload-artifact@v4
|
|
74
|
+
with:
|
|
75
|
+
name: parity-calibration
|
|
76
|
+
path: |
|
|
77
|
+
reports/parity_snapshot.json
|
|
78
|
+
/tmp/openxml-runtime-manifest.json
|
|
79
|
+
|
|
80
|
+
- name: Workflow summary
|
|
81
|
+
if: always()
|
|
82
|
+
run: |
|
|
83
|
+
python - <<'PY'
|
|
84
|
+
import json
|
|
85
|
+
from pathlib import Path
|
|
86
|
+
|
|
87
|
+
report = Path("reports/parity_snapshot.json")
|
|
88
|
+
if not report.exists():
|
|
89
|
+
print("No parity snapshot produced.")
|
|
90
|
+
raise SystemExit(0)
|
|
91
|
+
|
|
92
|
+
data = json.loads(report.read_text(encoding="utf-8"))
|
|
93
|
+
lines = [
|
|
94
|
+
"# Parity Calibration Summary",
|
|
95
|
+
f"- SDK ref: {Path('/tmp/openxml-sdk-ref.txt').read_text(encoding='utf-8').strip()}",
|
|
96
|
+
f"- SDK commit: {Path('/tmp/openxml-sdk-commit.txt').read_text(encoding='utf-8').strip()}",
|
|
97
|
+
f"- Checks total: {data.get('checks_total', 0)}",
|
|
98
|
+
f"- Matched: {data.get('checks_matched', 0)}",
|
|
99
|
+
f"- Mismatched: {data.get('checks_mismatched', 0)}",
|
|
100
|
+
f"- Match rate: {data.get('match_rate_percent', 0)}%",
|
|
101
|
+
]
|
|
102
|
+
|
|
103
|
+
families = data.get("mismatch_families") or []
|
|
104
|
+
if families:
|
|
105
|
+
lines.append("")
|
|
106
|
+
lines.append("## Top mismatch families")
|
|
107
|
+
for row in families[:10]:
|
|
108
|
+
lines.append(f"- {row.get('count', 0)}x {row.get('description', '')}")
|
|
109
|
+
|
|
110
|
+
Path("/tmp/parity_summary.md").write_text("\n".join(lines), encoding="utf-8")
|
|
111
|
+
PY
|
|
112
|
+
cat /tmp/parity_summary.md >> "$GITHUB_STEP_SUMMARY"
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
name: ODF reference calibration
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
inputs:
|
|
6
|
+
odf_toolkit_ref:
|
|
7
|
+
description: "ODF Toolkit git ref to build."
|
|
8
|
+
required: false
|
|
9
|
+
default: "v0.13.0"
|
|
10
|
+
opf_ref:
|
|
11
|
+
description: "OPF validator git ref to build."
|
|
12
|
+
required: false
|
|
13
|
+
default: "v0.20-alpha-2"
|
|
14
|
+
schedule:
|
|
15
|
+
# Quarterly: 1st of Jan, Apr, Jul, Oct at 03:00 UTC
|
|
16
|
+
- cron: "0 3 1 1,4,7,10 *"
|
|
17
|
+
|
|
18
|
+
jobs:
|
|
19
|
+
odf-reference-drift:
|
|
20
|
+
runs-on: ubuntu-latest
|
|
21
|
+
env:
|
|
22
|
+
BASELINE_COMPARE: data/odf/reference_baseline/2026-03-09/mismatch_report.json
|
|
23
|
+
POLICY_FILE: data/odf/reference_baseline/2026-03-09/drift_policy.json
|
|
24
|
+
WAIVERS_FILE: data/odf/reference_baseline/2026-03-09/waivers.json
|
|
25
|
+
RUN_REPORT: reports/odf/reference_runs.json
|
|
26
|
+
COMPARE_REPORT: reports/odf/reference_compare.json
|
|
27
|
+
COMPARE_SUMMARY: reports/odf/reference_compare.md
|
|
28
|
+
TRIAGE_REPORT: reports/odf/mismatch_triage.md
|
|
29
|
+
DRIFT_REPORT: reports/odf/reference_drift.json
|
|
30
|
+
DRIFT_SUMMARY: /tmp/odf_reference_drift.md
|
|
31
|
+
ODF_TOOLKIT_REF: ${{ github.event.inputs.odf_toolkit_ref || 'v0.13.0' }}
|
|
32
|
+
OPF_REF: ${{ github.event.inputs.opf_ref || 'v0.20-alpha-2' }}
|
|
33
|
+
steps:
|
|
34
|
+
- name: Checkout
|
|
35
|
+
uses: actions/checkout@v4
|
|
36
|
+
|
|
37
|
+
- name: Set up Python
|
|
38
|
+
uses: actions/setup-python@v5
|
|
39
|
+
with:
|
|
40
|
+
python-version: "3.11"
|
|
41
|
+
|
|
42
|
+
- name: Set up Java
|
|
43
|
+
uses: actions/setup-java@v4
|
|
44
|
+
with:
|
|
45
|
+
distribution: temurin
|
|
46
|
+
java-version: "17"
|
|
47
|
+
|
|
48
|
+
- name: Install Maven
|
|
49
|
+
run: |
|
|
50
|
+
sudo apt-get update
|
|
51
|
+
sudo apt-get install -y maven
|
|
52
|
+
|
|
53
|
+
- name: Install package
|
|
54
|
+
run: |
|
|
55
|
+
python -m pip install --upgrade pip
|
|
56
|
+
pip install -e .
|
|
57
|
+
|
|
58
|
+
- name: Prepare reports directory
|
|
59
|
+
run: mkdir -p reports/odf
|
|
60
|
+
|
|
61
|
+
- name: Bootstrap reference validators
|
|
62
|
+
id: bootstrap
|
|
63
|
+
run: |
|
|
64
|
+
python scripts/odf/bootstrap_reference_validators.py \
|
|
65
|
+
--work-root /tmp/openxml_audit_odf_reference_tools \
|
|
66
|
+
--odf-toolkit-ref "$ODF_TOOLKIT_REF" \
|
|
67
|
+
--opf-ref "$OPF_REF" \
|
|
68
|
+
--output-json /tmp/odf_reference_tools.json
|
|
69
|
+
|
|
70
|
+
cp /tmp/odf_reference_tools.json reports/odf/reference_tooling.json
|
|
71
|
+
|
|
72
|
+
python - <<'PY'
|
|
73
|
+
import json
|
|
74
|
+
import os
|
|
75
|
+
from pathlib import Path
|
|
76
|
+
|
|
77
|
+
payload = json.loads(Path("/tmp/odf_reference_tools.json").read_text(encoding="utf-8"))
|
|
78
|
+
output_path = Path(os.environ["GITHUB_OUTPUT"])
|
|
79
|
+
with output_path.open("a", encoding="utf-8") as fh:
|
|
80
|
+
for key, value in {
|
|
81
|
+
"odf_toolkit_cmd": payload["odf_toolkit_cmd"],
|
|
82
|
+
"opf_cmd": payload["opf_cmd"],
|
|
83
|
+
"odf_toolkit_repo": payload["odf_toolkit"]["repo"],
|
|
84
|
+
"odf_toolkit_ref": payload["odf_toolkit"]["ref"],
|
|
85
|
+
"opf_repo": payload["opf"]["repo"],
|
|
86
|
+
"opf_ref": payload["opf"]["ref"],
|
|
87
|
+
}.items():
|
|
88
|
+
fh.write(f"{key}<<EOF\n{value}\nEOF\n")
|
|
89
|
+
PY
|
|
90
|
+
|
|
91
|
+
- name: Run ODF reference validators
|
|
92
|
+
run: |
|
|
93
|
+
python scripts/odf/run_reference_validators.py \
|
|
94
|
+
--corpus-manifest data/odf/reference_corpus/manifest.json \
|
|
95
|
+
--output "$RUN_REPORT" \
|
|
96
|
+
--odf-toolkit-cmd "${{ steps.bootstrap.outputs.odf_toolkit_cmd }}" \
|
|
97
|
+
--opf-cmd "${{ steps.bootstrap.outputs.opf_cmd }}"
|
|
98
|
+
|
|
99
|
+
- name: Compare reference results
|
|
100
|
+
run: |
|
|
101
|
+
python scripts/odf/compare_reference_results.py \
|
|
102
|
+
--input "$RUN_REPORT" \
|
|
103
|
+
--output "$COMPARE_REPORT" \
|
|
104
|
+
--summary "$COMPARE_SUMMARY"
|
|
105
|
+
|
|
106
|
+
- name: Build mismatch triage
|
|
107
|
+
run: |
|
|
108
|
+
python scripts/odf/build_mismatch_triage.py \
|
|
109
|
+
--compare "$COMPARE_REPORT" \
|
|
110
|
+
--runs "$RUN_REPORT" \
|
|
111
|
+
--output "$TRIAGE_REPORT"
|
|
112
|
+
|
|
113
|
+
- name: Enforce reference drift policy
|
|
114
|
+
run: |
|
|
115
|
+
python scripts/odf/check_reference_drift.py \
|
|
116
|
+
--baseline "$BASELINE_COMPARE" \
|
|
117
|
+
--current "$COMPARE_REPORT" \
|
|
118
|
+
--policy "$POLICY_FILE" \
|
|
119
|
+
--waivers "$WAIVERS_FILE" \
|
|
120
|
+
--output "$DRIFT_REPORT" \
|
|
121
|
+
--summary "$DRIFT_SUMMARY"
|
|
122
|
+
|
|
123
|
+
- name: Upload reports
|
|
124
|
+
if: always()
|
|
125
|
+
uses: actions/upload-artifact@v4
|
|
126
|
+
with:
|
|
127
|
+
name: odf-reference-calibration
|
|
128
|
+
path: reports/odf
|
|
129
|
+
|
|
130
|
+
- name: Workflow summary
|
|
131
|
+
if: always()
|
|
132
|
+
run: |
|
|
133
|
+
{
|
|
134
|
+
echo "# ODF Reference Calibration";
|
|
135
|
+
echo "- ODF Toolkit: ${{ steps.bootstrap.outputs.odf_toolkit_repo }} @ ${{ steps.bootstrap.outputs.odf_toolkit_ref }}";
|
|
136
|
+
echo "- OPF: ${{ steps.bootstrap.outputs.opf_repo }} @ ${{ steps.bootstrap.outputs.opf_ref }}";
|
|
137
|
+
echo "";
|
|
138
|
+
} >> "$GITHUB_STEP_SUMMARY"
|
|
139
|
+
|
|
140
|
+
if [ -f "$DRIFT_SUMMARY" ]; then
|
|
141
|
+
cat "$DRIFT_SUMMARY" >> "$GITHUB_STEP_SUMMARY"
|
|
142
|
+
else
|
|
143
|
+
echo "No ODF drift summary produced." >> "$GITHUB_STEP_SUMMARY"
|
|
144
|
+
fi
|
|
145
|
+
if [ -f "$TRIAGE_REPORT" ]; then
|
|
146
|
+
echo "" >> "$GITHUB_STEP_SUMMARY"
|
|
147
|
+
cat "$TRIAGE_REPORT" >> "$GITHUB_STEP_SUMMARY"
|
|
148
|
+
else
|
|
149
|
+
echo "" >> "$GITHUB_STEP_SUMMARY"
|
|
150
|
+
echo "No ODF mismatch triage report produced." >> "$GITHUB_STEP_SUMMARY"
|
|
151
|
+
fi
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
name: Deploy docs
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
paths:
|
|
8
|
+
- "docs/**"
|
|
9
|
+
- "README.md"
|
|
10
|
+
- ".github/workflows/pages.yml"
|
|
11
|
+
workflow_dispatch:
|
|
12
|
+
|
|
13
|
+
permissions:
|
|
14
|
+
contents: read
|
|
15
|
+
pages: write
|
|
16
|
+
id-token: write
|
|
17
|
+
|
|
18
|
+
concurrency:
|
|
19
|
+
group: pages
|
|
20
|
+
cancel-in-progress: true
|
|
21
|
+
|
|
22
|
+
jobs:
|
|
23
|
+
build:
|
|
24
|
+
runs-on: ubuntu-latest
|
|
25
|
+
steps:
|
|
26
|
+
- name: Checkout
|
|
27
|
+
uses: actions/checkout@v4
|
|
28
|
+
|
|
29
|
+
- name: Build site
|
|
30
|
+
run: |
|
|
31
|
+
mkdir -p _site
|
|
32
|
+
cp README.md _site/index.md
|
|
33
|
+
cp -r docs/* _site/
|
|
34
|
+
|
|
35
|
+
# Convert markdown to HTML with a minimal template
|
|
36
|
+
pip install markdown
|
|
37
|
+
python - <<'PY'
|
|
38
|
+
import markdown
|
|
39
|
+
from pathlib import Path
|
|
40
|
+
|
|
41
|
+
site = Path("_site")
|
|
42
|
+
template = """<!DOCTYPE html>
|
|
43
|
+
<html><head>
|
|
44
|
+
<meta charset="utf-8">
|
|
45
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
46
|
+
<title>{title} - openxml-audit</title>
|
|
47
|
+
<style>
|
|
48
|
+
body {{ max-width: 800px; margin: 40px auto; padding: 0 20px; font-family: -apple-system, sans-serif; line-height: 1.6; color: #333; }}
|
|
49
|
+
pre {{ background: #f5f5f5; padding: 16px; overflow-x: auto; border-radius: 4px; }}
|
|
50
|
+
code {{ background: #f5f5f5; padding: 2px 6px; border-radius: 3px; font-size: 0.9em; }}
|
|
51
|
+
pre code {{ background: none; padding: 0; }}
|
|
52
|
+
table {{ border-collapse: collapse; width: 100%; }}
|
|
53
|
+
th, td {{ border: 1px solid #ddd; padding: 8px; text-align: left; }}
|
|
54
|
+
th {{ background: #f5f5f5; }}
|
|
55
|
+
a {{ color: #0366d6; }}
|
|
56
|
+
nav {{ margin-bottom: 2em; padding-bottom: 1em; border-bottom: 1px solid #eee; }}
|
|
57
|
+
nav a {{ margin-right: 1em; }}
|
|
58
|
+
</style>
|
|
59
|
+
</head><body>
|
|
60
|
+
<nav><a href="./">Home</a><a href="./parity_contract.html">OOXML Parity</a><a href="./odf_validation_contract.html">ODF Contract</a><a href="./odf_security_policy.html">ODF Security</a></nav>
|
|
61
|
+
{content}
|
|
62
|
+
</body></html>"""
|
|
63
|
+
|
|
64
|
+
md = markdown.Markdown(extensions=["tables", "fenced_code"])
|
|
65
|
+
for f in site.glob("*.md"):
|
|
66
|
+
html = md.convert(f.read_text(encoding="utf-8"))
|
|
67
|
+
title = f.stem.replace("_", " ").title()
|
|
68
|
+
if f.name == "index.md":
|
|
69
|
+
title = "openxml-audit"
|
|
70
|
+
out = site / f"{f.stem}.html"
|
|
71
|
+
out.write_text(template.format(title=title, content=html), encoding="utf-8")
|
|
72
|
+
md.reset()
|
|
73
|
+
f.unlink()
|
|
74
|
+
PY
|
|
75
|
+
|
|
76
|
+
- name: Upload pages artifact
|
|
77
|
+
uses: actions/upload-pages-artifact@v3
|
|
78
|
+
with:
|
|
79
|
+
path: _site
|
|
80
|
+
|
|
81
|
+
deploy:
|
|
82
|
+
needs: build
|
|
83
|
+
runs-on: ubuntu-latest
|
|
84
|
+
environment:
|
|
85
|
+
name: github-pages
|
|
86
|
+
url: ${{ steps.deployment.outputs.page_url }}
|
|
87
|
+
steps:
|
|
88
|
+
- name: Deploy to GitHub Pages
|
|
89
|
+
id: deployment
|
|
90
|
+
uses: actions/deploy-pages@v4
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
name: Parity gate
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
paths:
|
|
6
|
+
- "src/**"
|
|
7
|
+
- "scripts/corpus/**"
|
|
8
|
+
- "data/corpus/**"
|
|
9
|
+
- ".github/workflows/parity-gate.yml"
|
|
10
|
+
push:
|
|
11
|
+
branches:
|
|
12
|
+
- main
|
|
13
|
+
paths:
|
|
14
|
+
- "src/**"
|
|
15
|
+
- "scripts/corpus/**"
|
|
16
|
+
- "data/corpus/**"
|
|
17
|
+
- ".github/workflows/parity-gate.yml"
|
|
18
|
+
workflow_dispatch:
|
|
19
|
+
inputs:
|
|
20
|
+
corpus_archive_url:
|
|
21
|
+
description: "Optional URL for parity corpus tar.zst (overrides repo variable)."
|
|
22
|
+
required: false
|
|
23
|
+
default: ""
|
|
24
|
+
|
|
25
|
+
jobs:
|
|
26
|
+
parity:
|
|
27
|
+
runs-on: ubuntu-latest
|
|
28
|
+
env:
|
|
29
|
+
SDK_REF: v3.4.1
|
|
30
|
+
SDK_REPO: https://github.com/dotnet/Open-XML-SDK.git
|
|
31
|
+
BASELINE_SNAPSHOT: data/corpus/parity_baseline/v3.4.1/parity_snapshot.json
|
|
32
|
+
WAIVERS_FILE: data/corpus/parity_baseline/v3.4.1/waivers.json
|
|
33
|
+
PERF_BUDGET_FILE: data/corpus/parity_baseline/v3.4.1/perf_budget.json
|
|
34
|
+
CURRENT_SNAPSHOT: reports/parity_current.json
|
|
35
|
+
COMPARE_REPORT: reports/parity_compare.json
|
|
36
|
+
SUMMARY_REPORT: /tmp/parity_compare.md
|
|
37
|
+
PERF_SUMMARY_REPORT: /tmp/parity_perf.md
|
|
38
|
+
CORPUS_ARCHIVE_URL: ${{ github.event.inputs.corpus_archive_url || vars.PARITY_CORPUS_ARCHIVE_URL }}
|
|
39
|
+
steps:
|
|
40
|
+
- name: Checkout
|
|
41
|
+
uses: actions/checkout@v4
|
|
42
|
+
|
|
43
|
+
- name: Set up Python
|
|
44
|
+
uses: actions/setup-python@v5
|
|
45
|
+
with:
|
|
46
|
+
python-version: "3.11"
|
|
47
|
+
|
|
48
|
+
- name: Install package
|
|
49
|
+
run: |
|
|
50
|
+
python -m pip install --upgrade pip
|
|
51
|
+
pip install -e .
|
|
52
|
+
|
|
53
|
+
- name: Prepare reports directory
|
|
54
|
+
run: mkdir -p reports
|
|
55
|
+
|
|
56
|
+
- name: Resolve corpus files root
|
|
57
|
+
id: corpus
|
|
58
|
+
run: |
|
|
59
|
+
set -euo pipefail
|
|
60
|
+
|
|
61
|
+
# 1. Local files checked into the repo
|
|
62
|
+
local_root="$GITHUB_WORKSPACE/data/corpus/sdk_seed/files"
|
|
63
|
+
if [ -d "$local_root" ]; then
|
|
64
|
+
echo "Using local corpus files at $local_root"
|
|
65
|
+
echo "files_root=$local_root" >> "$GITHUB_OUTPUT"
|
|
66
|
+
exit 0
|
|
67
|
+
fi
|
|
68
|
+
|
|
69
|
+
# 2. Pre-built archive from repo variable
|
|
70
|
+
if [ -n "${CORPUS_ARCHIVE_URL:-}" ]; then
|
|
71
|
+
work_root="/tmp/openxml-parity-corpus"
|
|
72
|
+
archive_path="/tmp/openxml-parity-corpus.tar.zst"
|
|
73
|
+
rm -rf "$work_root"
|
|
74
|
+
mkdir -p "$work_root"
|
|
75
|
+
echo "Downloading corpus archive from configured URL"
|
|
76
|
+
curl -fsSL "$CORPUS_ARCHIVE_URL" -o "$archive_path"
|
|
77
|
+
tar --zstd -xf "$archive_path" -C "$work_root"
|
|
78
|
+
files_root="$work_root/files"
|
|
79
|
+
if [ ! -d "$files_root" ]; then
|
|
80
|
+
echo "::error::Corpus archive does not contain expected 'files/' directory."
|
|
81
|
+
exit 2
|
|
82
|
+
fi
|
|
83
|
+
echo "files_root=$files_root" >> "$GITHUB_OUTPUT"
|
|
84
|
+
exit 0
|
|
85
|
+
fi
|
|
86
|
+
|
|
87
|
+
# 3. Build corpus from upstream SDK
|
|
88
|
+
echo "Building corpus from upstream SDK ($SDK_REF)"
|
|
89
|
+
sdk_root="/tmp/openxml-sdk-upstream"
|
|
90
|
+
corpus_root="/tmp/openxml-sdk-seed"
|
|
91
|
+
rm -rf "$sdk_root" "$corpus_root"
|
|
92
|
+
git clone --depth 1 --branch "$SDK_REF" "$SDK_REPO" "$sdk_root"
|
|
93
|
+
python scripts/corpus/import_sdk_assets.py \
|
|
94
|
+
--sdk-root "$sdk_root" \
|
|
95
|
+
--output-root "$corpus_root"
|
|
96
|
+
echo "files_root=$corpus_root/files" >> "$GITHUB_OUTPUT"
|
|
97
|
+
|
|
98
|
+
- name: Run parity snapshot
|
|
99
|
+
run: |
|
|
100
|
+
python scripts/corpus/run_parity_snapshot.py \
|
|
101
|
+
--manifest data/corpus/sdk_seed/manifest.json \
|
|
102
|
+
--files-root "${{ steps.corpus.outputs.files_root }}" \
|
|
103
|
+
--output "$CURRENT_SNAPSHOT"
|
|
104
|
+
|
|
105
|
+
- name: Compare against baseline
|
|
106
|
+
run: |
|
|
107
|
+
python scripts/corpus/compare_to_baseline.py \
|
|
108
|
+
--baseline "$BASELINE_SNAPSHOT" \
|
|
109
|
+
--current "$CURRENT_SNAPSHOT" \
|
|
110
|
+
--waivers "$WAIVERS_FILE" \
|
|
111
|
+
--output "$COMPARE_REPORT" \
|
|
112
|
+
--summary "$SUMMARY_REPORT" \
|
|
113
|
+
--max-mismatch-growth 0 \
|
|
114
|
+
--max-new-families 0 \
|
|
115
|
+
--max-match-rate-drop 0.0 \
|
|
116
|
+
--max-missing-files 0
|
|
117
|
+
|
|
118
|
+
- name: Enforce parity performance budget
|
|
119
|
+
run: |
|
|
120
|
+
python scripts/corpus/check_perf_budget.py \
|
|
121
|
+
--report "$CURRENT_SNAPSHOT" \
|
|
122
|
+
--budget "$PERF_BUDGET_FILE" \
|
|
123
|
+
--output reports/parity_perf.json \
|
|
124
|
+
--summary "$PERF_SUMMARY_REPORT"
|
|
125
|
+
|
|
126
|
+
- name: Upload parity reports
|
|
127
|
+
if: always()
|
|
128
|
+
uses: actions/upload-artifact@v4
|
|
129
|
+
with:
|
|
130
|
+
name: parity-gate-reports
|
|
131
|
+
path: reports
|
|
132
|
+
|
|
133
|
+
- name: Workflow summary
|
|
134
|
+
if: always()
|
|
135
|
+
run: |
|
|
136
|
+
if [ -f "$SUMMARY_REPORT" ]; then
|
|
137
|
+
cat "$SUMMARY_REPORT" >> "$GITHUB_STEP_SUMMARY"
|
|
138
|
+
else
|
|
139
|
+
echo "No parity summary produced." >> "$GITHUB_STEP_SUMMARY"
|
|
140
|
+
fi
|
|
141
|
+
if [ -f "$PERF_SUMMARY_REPORT" ]; then
|
|
142
|
+
echo "" >> "$GITHUB_STEP_SUMMARY"
|
|
143
|
+
cat "$PERF_SUMMARY_REPORT" >> "$GITHUB_STEP_SUMMARY"
|
|
144
|
+
else
|
|
145
|
+
echo "" >> "$GITHUB_STEP_SUMMARY"
|
|
146
|
+
echo "No parity performance summary produced." >> "$GITHUB_STEP_SUMMARY"
|
|
147
|
+
fi
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- "v*"
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: write
|
|
10
|
+
id-token: write
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
build:
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
steps:
|
|
16
|
+
- name: Checkout
|
|
17
|
+
uses: actions/checkout@v4
|
|
18
|
+
|
|
19
|
+
- name: Set up Python
|
|
20
|
+
uses: actions/setup-python@v5
|
|
21
|
+
with:
|
|
22
|
+
python-version: "3.11"
|
|
23
|
+
|
|
24
|
+
- name: Install build tools
|
|
25
|
+
run: pip install build
|
|
26
|
+
|
|
27
|
+
- name: Build package
|
|
28
|
+
run: python -m build
|
|
29
|
+
|
|
30
|
+
- name: Upload dist artifacts
|
|
31
|
+
uses: actions/upload-artifact@v4
|
|
32
|
+
with:
|
|
33
|
+
name: dist
|
|
34
|
+
path: dist/
|
|
35
|
+
|
|
36
|
+
publish-pypi:
|
|
37
|
+
needs: build
|
|
38
|
+
runs-on: ubuntu-latest
|
|
39
|
+
permissions:
|
|
40
|
+
id-token: write
|
|
41
|
+
steps:
|
|
42
|
+
- name: Download dist artifacts
|
|
43
|
+
uses: actions/download-artifact@v4
|
|
44
|
+
with:
|
|
45
|
+
name: dist
|
|
46
|
+
path: dist/
|
|
47
|
+
|
|
48
|
+
- name: Publish to PyPI
|
|
49
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
50
|
+
|
|
51
|
+
github-release:
|
|
52
|
+
needs: build
|
|
53
|
+
runs-on: ubuntu-latest
|
|
54
|
+
permissions:
|
|
55
|
+
contents: write
|
|
56
|
+
steps:
|
|
57
|
+
- name: Checkout
|
|
58
|
+
uses: actions/checkout@v4
|
|
59
|
+
with:
|
|
60
|
+
fetch-depth: 0
|
|
61
|
+
|
|
62
|
+
- name: Download dist artifacts
|
|
63
|
+
uses: actions/download-artifact@v4
|
|
64
|
+
with:
|
|
65
|
+
name: dist
|
|
66
|
+
path: dist/
|
|
67
|
+
|
|
68
|
+
- name: Generate changelog
|
|
69
|
+
id: changelog
|
|
70
|
+
run: |
|
|
71
|
+
# Get previous tag
|
|
72
|
+
prev_tag=$(git tag --sort=-v:refname | head -2 | tail -1)
|
|
73
|
+
if [ -z "$prev_tag" ]; then
|
|
74
|
+
echo "body=Initial release" >> "$GITHUB_OUTPUT"
|
|
75
|
+
else
|
|
76
|
+
changelog=$(git log --pretty=format:"- %s" "$prev_tag"..HEAD -- src/ scripts/ | head -50)
|
|
77
|
+
# Write multiline output
|
|
78
|
+
{
|
|
79
|
+
echo "body<<EOF"
|
|
80
|
+
echo "$changelog"
|
|
81
|
+
echo "EOF"
|
|
82
|
+
} >> "$GITHUB_OUTPUT"
|
|
83
|
+
fi
|
|
84
|
+
|
|
85
|
+
- name: Create GitHub Release
|
|
86
|
+
uses: softprops/action-gh-release@v2
|
|
87
|
+
with:
|
|
88
|
+
body: ${{ steps.changelog.outputs.body }}
|
|
89
|
+
files: dist/*
|
|
90
|
+
generate_release_notes: true
|