From d2103b6d337c3135820a7afd955b1de5029b2c20 Mon Sep 17 00:00:00 2001 From: Wolfgang Schoenberger <221313372+wolfiesch@users.noreply.github.com> Date: Sat, 9 May 2026 08:54:09 -0700 Subject: [PATCH] test: pin marker-mutated button control UI evidence --- Plans/ooxml-current-evidence-bundle.json | 36 +++++++++++++++++++ ...real-world-excel-fidelity-gap-discovery.md | 12 +++---- scripts/audit_ooxml_completion_claim.py | 4 ++- 3 files changed, 45 insertions(+), 7 deletions(-) diff --git a/Plans/ooxml-current-evidence-bundle.json b/Plans/ooxml-current-evidence-bundle.json index a0316316..a44dec68 100644 --- a/Plans/ooxml-current-evidence-bundle.json +++ b/Plans/ooxml-current-evidence-bundle.json @@ -308,6 +308,42 @@ {"path": "probes.embedded_control_openability.passed_fixtures", "equals": ["real-excel-control-props-basic.xlsx"]} ] }, + { + "name": "excel_ui_interaction_marker_button_control_click", + "path": "/tmp/wolfxl-ui-interaction-marker-button-control-20260509/interactive-probe-report.json", + "producer": "uv run --no-sync python scripts/run_ooxml_interactive_probe.py tests/fixtures/external_oracle --output-dir /tmp/wolfxl-ui-interaction-marker-button-control-20260509 --probe-kind excel_ui_interaction --probe embedded_control_openability --mutation marker_cell --fixture umya-control-props-basic.xlsx --timeout 120 > /tmp/wolfxl-ui-interaction-marker-button-control-20260509.stdout.json", + "expect": [ + {"path": "completed", "equals": true}, + {"path": "probe_kind", "equals": "excel_ui_interaction"}, + {"path": "mutation", "equals": "marker_cell"}, + {"path": "result_count", "equals": 1}, + {"path": "failure_count", "equals": 0}, + {"path": "results.0.fixture", "equals": "umya-control-props-basic.xlsx"}, + {"path": "results.0.probe", "equals": "embedded_control_openability"}, + {"path": "results.0.probe_kind", "equals": "excel_ui_interaction"}, + {"path": "results.0.mutation", "equals": "marker_cell"}, + {"path": "results.0.status", "equals": "passed"}, + {"path": "results.0.ui_actions", "contains": "clicked Excel embedded/control object"}, + {"path": "results.0.ui_actions", "contains": "clicked Excel embedded/control object: Button 1"}, + {"path": "results.0.ui_actions", "contains": "saved active workbook"} + ] + }, + { + "name": "excel_ui_interaction_marker_button_control_evidence", + "path": "/tmp/wolfxl-ui-interaction-evidence-marker-button-control-20260509.json", + "producer": "uv run --no-sync python scripts/audit_ooxml_interactive_evidence.py tests/fixtures/external_oracle --probe-kind excel_ui_interaction --probe embedded_control_openability --report /tmp/wolfxl-ui-interaction-marker-button-control-20260509/interactive-probe-report.json --strict > /tmp/wolfxl-ui-interaction-evidence-marker-button-control-20260509.json", + "expect": [ + {"path": "ready", "equals": true}, + {"path": "probe_kind", "equals": "excel_ui_interaction"}, + {"path": "required_probes", "equals": ["embedded_control_openability"]}, + {"path": "fixture_count", "equals": 22}, + {"path": "report_count", "equals": 1}, + {"path": "incomplete_report_count", "equals": 0}, + {"path": "probes.embedded_control_openability.status", "equals": "clear"}, + {"path": "probes.embedded_control_openability.probe_kind", "equals": "excel_ui_interaction"}, + {"path": "probes.embedded_control_openability.passed_fixtures", "equals": ["umya-control-props-basic.xlsx"]} + ] + }, { "name": "excel_render_full_pack_report", "path": "/tmp/wolfxl-render-excel-full-pack.json", diff --git a/Plans/real-world-excel-fidelity-gap-discovery.md b/Plans/real-world-excel-fidelity-gap-discovery.md index 933bf077..0d0fa979 100644 --- a/Plans/real-world-excel-fidelity-gap-discovery.md +++ b/Plans/real-world-excel-fidelity-gap-discovery.md @@ -24,10 +24,10 @@ renumbered, orphaned, or left pointing at the wrong part. | Gap radar | `scripts/audit_ooxml_gap_radar.py` inventories unknown package part families, relationship types, content types, hidden `ext uri` payloads inside known XML parts, and expected app-unsupported features such as PowerView. The current pinned pack is clear across all package unknown buckets. The recursive SynthGL fixture tree is also clear after classifying Python-in-Excel, sheet metadata, dynamic-array metadata, hidden-fill, and current chart extension URIs. A 61-workbook umya-spreadsheet issue corpus is now also clear after classifying sensitivity-label metadata, JavaScript API project payloads, WMF thumbnails, non-numbered theme parts, x14 data-validation extensions, drawing hidden-effect extensions, and chart pivot-option extensions. The 71-workbook SynthGL Codex Spark archive is clear at `/tmp/wolfxl-gap-radar-synthgl-codex-spark-archive-71-classified-20260508.json` after classifying named sheet views, chartEx relationships, and modern worksheet/pivot extension URIs. The 28-readable-workbook SynthGL real-world-ingestion corpus is clear at `/tmp/wolfxl-gap-radar-synthgl-real-world-ingestion-20260509.json` after classifying Excel `[trash]/0000.dat` package debris. The 16-workbook SynthGL CDS case-study corpus is clear at `/tmp/wolfxl-gap-radar-synthgl-cds-case-study-20260509.json`. The 52-readable-workbook Calamine reader corpus is clear at `/tmp/wolfxl-gap-radar-calamine-tests-20260508.json` with 3 explicit invalid or unsupported source skips. Fresh local-app side probes are also clear for Spreadsheet Peek example XLSX files at `/tmp/wolfxl-gap-radar-spreadsheet-peek-examples-20260509.json`, ticker-to-GL Strongbox caches at `/tmp/wolfxl-gap-radar-ticker-to-gl-20260509.json`, and 10 SynthGL docs QoE databooks at `/tmp/wolfxl-gap-radar-synthgl-docs-examples-excel-20260509.json` | The currently pinned corpus, 32-file live SynthGL fixture tree, 61-file umya issue corpus, 71-file SynthGL archive, 28-readable-file SynthGL real-world-ingestion corpus, 16-file SynthGL CDS case-study corpus, 52-readable-file Calamine reader corpus, 3 Spreadsheet Peek examples, 5 ticker-to-GL Strongbox files, and 10 SynthGL docs QoE databooks have no unclassified package-level or extension-URI surface according to the repo's known-surface allowlists | It only proves the currently scanned corpora are classified. A new real-world workbook can still introduce a new known-looking part with novel semantics or a future extension URI that must be triaged | | Corpus diversity audit | `scripts/audit_ooxml_corpus_buckets.py` inventories workbook provenance and feature buckets across fixture directories or ad hoc workbook drops, including optional observed buckets for Python-in-Excel and sheet metadata. `scripts/audit_ooxml_corpus_portfolio.py` now aggregates those bucket reports into a portfolio-level diversity gate | Current external-oracle run is `ready=true` over 22 workbooks with no missing buckets across Excel-authored, external-tool, macro/VBA, PowerPivot, slicer/timeline, embedded/control, external-link, chart, CF, table/validation, drawing/comment/media, and workbook-global coverage. Recursive SynthGL bucket audit sees 32 Excel-authored workbooks, including 1 Python-in-Excel workbook and 2 sheet-metadata workbooks. The umya-spreadsheet issue corpus adds 63 workbooks with 53 Excel-authored, 9 external-tool-authored, 2 macro/VBA, 2 external-link, 6 chart, 21 drawing/comment/media, 21 embedded/control, and 2 sheet-metadata examples, but no PowerPivot or slicer/timeline examples. The SynthGL real-world-ingestion corpus adds 28 readable Excel-authored workbooks with 28 CF-extension/workbook-global examples, 12 drawing/media and embedded/control examples, 10 table/validation examples, 2 external-link examples, and 1 sheet-metadata example. The SynthGL CDS case-study corpus adds 16 Excel-authored workbooks with 1 chart workbook, 16 CF-extension/workbook-global examples, 2 drawing/media and embedded/control examples, 2 sheet-metadata examples, and 2 table/validation examples. The Calamine reader corpus adds 52 readable workbooks with external-tool, macro/VBA, external-link, chart, table/validation, drawing/media, embedded/control, and workbook-global examples, but no PowerPivot or slicer/timeline examples. The ExcelBench core, external-validated, and curated real-world manifest corpora add 34 readable workbooks, 308 default mutation results with 0 failures, 27 Excel-authored examples, 15 external-tool-authored examples, 2 chart examples, and 8 table/validation examples, with no new unknown OOXML surfaces; the curated manifest also records two intentionally missing placeholders as skipped discovery rows. The SynthGL docs QoE databooks add 10 readable Excel-authored examples with 4 external-link workbooks, 1 chart workbook, 6 table/validation examples, 4 Python-in-Excel metadata examples, and 9 sheet-metadata examples. Latest portfolio report `/tmp/wolfxl-corpus-portfolio-buckets-with-synthgl-docs-examples-20260509.json` is `ready=true` across 19 source reports, 280 unique readable workbooks, and all required diversity buckets: 247 Excel-authored, 41 external-tool-authored, 5 macro/VBA, 2 PowerPivot/data-model, 7 slicer/timeline, 15 external-link, 19 chart, and 53 table/validation examples | It proves bucket diversity, not behavioral preservation by itself. The portfolio is broader than any single corpus, but it is still curated and not random/customer-scale. It should be paired with mutation, render, app-smoke, and gap-radar gates | | App open/save smoke | `scripts/run_ooxml_app_smoke.py` opens fixture packs through LibreOffice headless or Microsoft Excel, verifies the generated file is an OOXML ZIP, and now rejects false positives where Excel leaves an unrelated active workbook such as `Book1` or `missing value`. It accepts `--mutation` so intentionally edited workbooks can be app-smoked too | Existing app reports contribute to the all-evidence gate with source and intentional app-open coverage for every current surface. The hardened Excel app-open coverage gate `/tmp/wolfxl-coverage-excel-app-open-full-pack-with-cf-verified.json` is also `ready=true` over 22 fixtures using source, marker-cell, and add-conditional-formatting full-pack Microsoft Excel reports with 0 failures. The external-link retarget Excel app-open report `/tmp/wolfxl-app-smoke-excel-retarget-external-links.json` is green over all 22 fixtures, including the three external-link-bearing retarget cases | The active app-smoke pack is not a rendered comparison and does not prove every real-world workbook class. The hardened gate prevented false positives while exposing the now-fixed conditional-formatting styles-order/prefix bug | -| Interactive evidence audit | `scripts/audit_ooxml_interactive_evidence.py` inventories high-risk Excel behaviors that package/render/app-open checks cannot fully prove: slicer state, timeline state, pivot refresh/filter state, external-link update prompts, expected unsupported-content prompts, macro project presence, and embedded-control openability. `scripts/run_ooxml_interactive_probe.py` implements Microsoft Excel probes for all current classes as `ooxml_state_presence` checks: Excel opens/saves the workbook and the relevant OOXML state remains present. It also has a separate `--probe-kind excel_ui_interaction` mode for targeted UI actions where the local Excel UI can expose them; external-link UI probes can either temporarily force Excel's update-link prompt setting or use the current setting unchanged, and the PowerView prompt probe opens the workbook read-only without saving unsupported content. | Current strict state-presence run over the 22-fixture external-oracle pack with all six original probe reports is green: `/tmp/wolfxl-interactive-evidence-external-oracle-all-20260508.json` reports `ready=true`. UI-interaction artifacts are green for macro security prompt handling (`/tmp/wolfxl-ui-interaction-macro-20260508/interactive-probe-report.json`, clicked `Disable Macros`), pivot refresh (`/tmp/wolfxl-ui-interaction-pivot-20260508/interactive-probe-report.json`, executed Excel `refresh all`), embedded list-box click persistence (`/tmp/wolfxl-ui-interaction-control-click-20260508/interactive-probe-report.json`, clicked `List Box 1`, saved, and verified `ctrlProp1.xml` changed from `sel=0` to `sel=2`), adjacent issue-corpus list-box click persistence (`/tmp/wolfxl-ui-interaction-umya-listbox-control-20260508/interactive-probe-report.json`, clicked `List Box 1` in `issue_208.xlsx`, saved, and verified persisted control state changed), stateless button-control click persistence (`/tmp/wolfxl-ui-interaction-button-control-20260508/interactive-probe-report.json`, clicked `Button 1`, saved, and verified the button control parts remained present), table-slicer all-item-click persistence (`/tmp/wolfxl-ui-interaction-slicer-all-items-20260508/interactive-probe-report.json`, selected `REGION`, clicked the first visible item in both `REGION` and `YEAR`, saved, and verified `Table1` persisted `EAST` and `2014` filters), pivot-chart slicer click persistence (`/tmp/wolfxl-ui-interaction-pivot-chart-slicer-extra-20260508/interactive-probe-report.json`, selected `REGION`, clicked the first visible item in both `REGION` and `YEAR`, saved, and verified slicer state changed), external-tool pivot-slicer click persistence (`/tmp/wolfxl-ui-interaction-excelize-pivot-slicer-20260508/interactive-probe-report.json`, selected `Month`, clicked the first visible item in both `Month` and `Region`, saved, and verified slicer state changed), shared pivot-slicer cache persistence (`/tmp/wolfxl-ui-interaction-shared-slicer-cache-20260508/interactive-probe-report.json`, selected `SALES MONTH`, clicked one item, saved, and verified the slicer-cache item state changed), marker-cell-mutated shared pivot-slicer cache persistence (`/tmp/wolfxl-ui-interaction-marker-shared-slicer-cache-20260509/interactive-probe-report.json`, selected `SALES MONTH`, clicked one item, saved, and verified the slicer-cache item state changed after a WolfXL marker-cell save), timeline month-click persistence (`/tmp/wolfxl-ui-interaction-timeline-click-20260508/interactive-probe-report.json`, selected `ORDER DATE`, clicked `May`, saved, and verified the persisted timeline selection changed to May 2012), marker-cell-mutated timeline month-click persistence (`/tmp/wolfxl-ui-interaction-marker-timeline-click-20260509/interactive-probe-report.json`, selected `ORDER DATE`, clicked `May`, saved, and verified the persisted timeline selection changed after a WolfXL marker-cell save), forced external-link prompt handling (`/tmp/wolfxl-ui-interaction-external-link-review-fix-20260508/interactive-probe-report.json`, temporarily enabled Excel's update-link prompt setting, clicked `Don't Update`, and restored the prior setting), current-setting external-link prompt handling (`/tmp/wolfxl-ui-interaction-external-link-current-prompt-20260508/interactive-probe-report.json`, left Excel's prompt setting unchanged, clicked `Don't Update`, and verified the external-link parts remained present), marker-cell-mutated current-setting external-link prompt handling (`/tmp/wolfxl-ui-interaction-marker-external-link-current-prompt-20260509/interactive-probe-report.json`, left Excel's prompt setting unchanged by the probe and verified the external-link parts remained present after a WolfXL marker-cell save), marker-cell-mutated embedded list-box click persistence (`/tmp/wolfxl-ui-interaction-marker-control-click-20260509/interactive-probe-report.json`, clicked `List Box 1`, saved, and verified embedded/control parts remained present after a WolfXL marker-cell save), adjacent issue-corpus current-setting external-link prompt handling (`/tmp/wolfxl-ui-interaction-umya-external-link-current-prompt-20260508/interactive-probe-report.json`, opened `issue_297.xlsx`, left Excel's prompt setting unchanged, and clicked `Don't Update`), and Contoso PowerPivot/PowerView unsupported-content prompt handling (`/tmp/wolfxl-ui-interaction-powerview-open-readonly-20260509/interactive-probe-report.json`, clicked `Open as Read-Only` and verified the PowerView marker remained present) | This prevents app-open smoke or package-presence checks from being mistaken for interactive behavior proof. The UI-interaction mode is partial: two embedded list-box clicks, one stateless button-control click, marker-cell-mutated embedded-control click persistence, table-slicer item clicks, Microsoft-authored pivot-chart slicer item clicks, external-tool-authored pivot-slicer item clicks, source and marker-cell-mutated shared pivot-slicer cache clicks, source and marker-cell-mutated timeline date-range clicks, forced, source current-setting, marker-cell-mutated current-setting, and adjacent issue-corpus current-setting external-link prompt paths, and one expected PowerView unsupported-content prompt now have real-Excel proof; broader control/slicer/timeline/prompt variants remain open | +| Interactive evidence audit | `scripts/audit_ooxml_interactive_evidence.py` inventories high-risk Excel behaviors that package/render/app-open checks cannot fully prove: slicer state, timeline state, pivot refresh/filter state, external-link update prompts, expected unsupported-content prompts, macro project presence, and embedded-control openability. `scripts/run_ooxml_interactive_probe.py` implements Microsoft Excel probes for all current classes as `ooxml_state_presence` checks: Excel opens/saves the workbook and the relevant OOXML state remains present. It also has a separate `--probe-kind excel_ui_interaction` mode for targeted UI actions where the local Excel UI can expose them; external-link UI probes can either temporarily force Excel's update-link prompt setting or use the current setting unchanged, and the PowerView prompt probe opens the workbook read-only without saving unsupported content. | Current strict state-presence run over the 22-fixture external-oracle pack with all six original probe reports is green: `/tmp/wolfxl-interactive-evidence-external-oracle-all-20260508.json` reports `ready=true`. UI-interaction artifacts are green for macro security prompt handling (`/tmp/wolfxl-ui-interaction-macro-20260508/interactive-probe-report.json`, clicked `Disable Macros`), pivot refresh (`/tmp/wolfxl-ui-interaction-pivot-20260508/interactive-probe-report.json`, executed Excel `refresh all`), embedded list-box click persistence (`/tmp/wolfxl-ui-interaction-control-click-20260508/interactive-probe-report.json`, clicked `List Box 1`, saved, and verified `ctrlProp1.xml` changed from `sel=0` to `sel=2`), adjacent issue-corpus list-box click persistence (`/tmp/wolfxl-ui-interaction-umya-listbox-control-20260508/interactive-probe-report.json`, clicked `List Box 1` in `issue_208.xlsx`, saved, and verified persisted control state changed), stateless button-control click persistence (`/tmp/wolfxl-ui-interaction-button-control-20260508/interactive-probe-report.json`, clicked `Button 1`, saved, and verified the button control parts remained present), table-slicer all-item-click persistence (`/tmp/wolfxl-ui-interaction-slicer-all-items-20260508/interactive-probe-report.json`, selected `REGION`, clicked the first visible item in both `REGION` and `YEAR`, saved, and verified `Table1` persisted `EAST` and `2014` filters), pivot-chart slicer click persistence (`/tmp/wolfxl-ui-interaction-pivot-chart-slicer-extra-20260508/interactive-probe-report.json`, selected `REGION`, clicked the first visible item in both `REGION` and `YEAR`, saved, and verified slicer state changed), external-tool pivot-slicer click persistence (`/tmp/wolfxl-ui-interaction-excelize-pivot-slicer-20260508/interactive-probe-report.json`, selected `Month`, clicked the first visible item in both `Month` and `Region`, saved, and verified slicer state changed), shared pivot-slicer cache persistence (`/tmp/wolfxl-ui-interaction-shared-slicer-cache-20260508/interactive-probe-report.json`, selected `SALES MONTH`, clicked one item, saved, and verified the slicer-cache item state changed), marker-cell-mutated shared pivot-slicer cache persistence (`/tmp/wolfxl-ui-interaction-marker-shared-slicer-cache-20260509/interactive-probe-report.json`, selected `SALES MONTH`, clicked one item, saved, and verified the slicer-cache item state changed after a WolfXL marker-cell save), timeline month-click persistence (`/tmp/wolfxl-ui-interaction-timeline-click-20260508/interactive-probe-report.json`, selected `ORDER DATE`, clicked `May`, saved, and verified the persisted timeline selection changed to May 2012), marker-cell-mutated timeline month-click persistence (`/tmp/wolfxl-ui-interaction-marker-timeline-click-20260509/interactive-probe-report.json`, selected `ORDER DATE`, clicked `May`, saved, and verified the persisted timeline selection changed after a WolfXL marker-cell save), forced external-link prompt handling (`/tmp/wolfxl-ui-interaction-external-link-review-fix-20260508/interactive-probe-report.json`, temporarily enabled Excel's update-link prompt setting, clicked `Don't Update`, and restored the prior setting), current-setting external-link prompt handling (`/tmp/wolfxl-ui-interaction-external-link-current-prompt-20260508/interactive-probe-report.json`, left Excel's prompt setting unchanged, clicked `Don't Update`, and verified the external-link parts remained present), marker-cell-mutated current-setting external-link prompt handling (`/tmp/wolfxl-ui-interaction-marker-external-link-current-prompt-20260509/interactive-probe-report.json`, left Excel's prompt setting unchanged by the probe and verified the external-link parts remained present after a WolfXL marker-cell save), marker-cell-mutated embedded list-box click persistence (`/tmp/wolfxl-ui-interaction-marker-control-click-20260509/interactive-probe-report.json`, clicked `List Box 1`, saved, and verified embedded/control parts remained present after a WolfXL marker-cell save), marker-cell-mutated stateless button-control click persistence (`/tmp/wolfxl-ui-interaction-marker-button-control-20260509/interactive-probe-report.json`, clicked `Button 1`, saved, and verified the button control parts remained present after a WolfXL marker-cell save), adjacent issue-corpus current-setting external-link prompt handling (`/tmp/wolfxl-ui-interaction-umya-external-link-current-prompt-20260508/interactive-probe-report.json`, opened `issue_297.xlsx`, left Excel's prompt setting unchanged, and clicked `Don't Update`), and Contoso PowerPivot/PowerView unsupported-content prompt handling (`/tmp/wolfxl-ui-interaction-powerview-open-readonly-20260509/interactive-probe-report.json`, clicked `Open as Read-Only` and verified the PowerView marker remained present) | This prevents app-open smoke or package-presence checks from being mistaken for interactive behavior proof. The UI-interaction mode is partial: two embedded list-box clicks, one source stateless button-control click, marker-cell-mutated list-box and stateless button-control click persistence, table-slicer item clicks, Microsoft-authored pivot-chart slicer item clicks, external-tool-authored pivot-slicer item clicks, source and marker-cell-mutated shared pivot-slicer cache clicks, source and marker-cell-mutated timeline date-range clicks, forced, source current-setting, marker-cell-mutated current-setting, and adjacent issue-corpus current-setting external-link prompt paths, and one expected PowerView unsupported-content prompt now have real-Excel proof; broader control/slicer/timeline/prompt variants remain open | | Render comparison smoke | `scripts/run_ooxml_render_compare.py` no-op modify-saves each fixture with WolfXL, exports the original and saved workbook to PDF through LibreOffice or Microsoft Excel, rasterizes pages with `pdftoppm`, and compares page images with ImageMagick RMSE. It records `render_engine`; `scripts/audit_ooxml_fidelity_coverage.py --require-render-engine excel` can reject LibreOffice reports when the desired proof is specifically Microsoft Excel-rendered output. Intentional mutations are render-smoked instead of pixel-compared against the original workbook, because their visual output is expected to change | Existing LibreOffice render reports contribute no-op and intentional render evidence to the all-evidence gate. The Excel renderer now stages files inside Excel's sandbox container to avoid macOS `Grant File Access` prompts. Latest Excel no-op render report `/tmp/wolfxl-render-excel-full-pack.json`: `render_engine=excel`, 22 workbooks, 0 failures, max RMSE 0.0. Latest Excel intentional marker-cell render report `/tmp/wolfxl-render-excel-intentional-marker-full-pack.json`: 22 workbooks, 0 failures. Latest marker-cell render-delta audit `/tmp/wolfxl-marker-cell-render-delta-20260509.json`: `ready=true`, 19 changed, 3 sampled pages unchanged, 0 failures, 0 inconclusive. Latest Excel style-cell render report `/tmp/wolfxl-render-excel-intentional-style-cell-full-pack-20260509.json`: 22 workbooks, 0 failures. Latest style-cell render-delta audit `/tmp/wolfxl-style-cell-render-delta-20260509.json`: `ready=true`, 19 changed, 3 sampled pages unchanged, 0 failures, 0 inconclusive. Latest Excel insert-tail-row render report `/tmp/wolfxl-render-excel-intentional-insert-tail-row-full-pack-20260509.json`: 22 workbooks, 0 failures. Latest insert-tail-row render-delta audit `/tmp/wolfxl-insert-tail-row-render-delta-20260509.json`: `ready=true`, 21 changed, 1 sampled page unchanged, 0 failures, 0 inconclusive. Latest Excel insert-tail-column render report `/tmp/wolfxl-render-excel-intentional-insert-tail-col-full-pack-20260509.json`: 22 workbooks, 0 failures. Latest insert-tail-column render-delta audit `/tmp/wolfxl-insert-tail-col-render-delta-20260509.json`: `ready=true`, 19 changed, 3 sampled pages unchanged, 0 failures, 0 inconclusive. Latest Excel delete-marker-tail-column render report `/tmp/wolfxl-render-excel-intentional-delete-marker-tail-col-full-pack-20260509.json`: 22 workbooks, 0 failures. Latest delete-marker-tail-column render-delta audit `/tmp/wolfxl-delete-marker-tail-col-render-delta-20260509.json`: `ready=true`, 3 changed, 19 sampled pages unchanged, 0 failures, 0 inconclusive. Latest Excel delete-marker-tail-row render report `/tmp/wolfxl-render-excel-intentional-delete-marker-tail-row-full-pack-20260509.json`: 22 workbooks, 0 failures. Latest delete-marker-tail-row render-delta audit `/tmp/wolfxl-delete-marker-tail-row-render-delta-20260509.json`: `ready=true`, 1 changed, 21 sampled pages unchanged, 0 failures, 0 inconclusive; the changed case is the chart-heavy fixture where deleting a tail row intentionally adjusts a drawing anchor. Latest Excel structural intentional copy-first-sheet render report `/tmp/wolfxl-render-excel-intentional-copy-sheet-full-pack.json`: 22 workbooks, 0 failures. Latest Excel structural intentional rename-first-sheet render report `/tmp/wolfxl-render-excel-intentional-rename-first-sheet-defined-name-fixed-20260508.json`: 22 workbooks, 0 failures after fixing existing worksheet formulas, chart ``, chart ``, workbook ``, and pivot-cache `` rewrites. Latest rename-sheet render-equivalence audit `/tmp/wolfxl-rename-sheet-render-equivalence-first-last-pages-20260509.json`: `ready=true`, 22 passed, 0 failures, 0 inconclusive, using first-and-last page sampling where needed. Latest Excel structural intentional move-formula-range render report `/tmp/wolfxl-render-excel-intentional-move-formula-range-full-pack.json`: 22 workbooks, 0 failures. Latest move-formula-range render-delta audit `/tmp/wolfxl-move-formula-range-render-delta-20260509.json`: `ready=true`, 19 changed, 3 sampled pages unchanged, 0 failures, 0 inconclusive, proving this mutation is not a visually neutral equivalence case. Latest Excel add-data-validation render report `/tmp/wolfxl-render-excel-intentional-add-data-validation-full-pack.json`: 22 workbooks, 0 failures. Latest add-data-validation render-equivalence audit `/tmp/wolfxl-add-data-validation-render-equivalence-20260509.json`: `ready=true`, 22 passed, 0 failures, 0 inconclusive, proving this visually neutral edit does not change sampled Excel-rendered pages. Latest Excel add-conditional-formatting render report `/tmp/wolfxl-render-excel-intentional-add-conditional-formatting-full-pack-fixed.json`: 22 workbooks, 0 failures. Latest add-conditional-formatting render-equivalence audit `/tmp/wolfxl-add-conditional-formatting-render-equivalence-20260509.json`: `ready=true`, 22 passed, 0 failures, 0 inconclusive, max RMSE 0.0. Latest Excel add-remove-chart render report `/tmp/wolfxl-render-excel-intentional-add-remove-chart-20260508.json`: 22 workbooks, 0 failures. Latest add-remove-chart render-equivalence audit `/tmp/wolfxl-add-remove-chart-render-equivalence-20260509.json`: `ready=true`, 22 passed, 0 failures, 0 inconclusive. Latest Excel copy-remove-sheet render report `/tmp/wolfxl-render-excel-intentional-copy-remove-sheet-full-pack-20260509.json`: 22 workbooks, 0 failures. Latest copy-remove-sheet render-equivalence audit `/tmp/wolfxl-copy-remove-sheet-render-equivalence-20260509.json`: `ready=true`, 22 passed, 0 failures, 0 inconclusive. Latest shared pivot-slicer sidecar copy-remove-sheet render report `/tmp/wolfxl-render-excel-slicer-shared-two-pivots-copy-remove-sheet-20260509.json`: 1 workbook, 0 failures. Latest shared pivot-slicer sidecar copy-remove-sheet equivalence audit `/tmp/wolfxl-slicer-shared-two-pivots-copy-remove-sheet-render-equivalence-20260509.json`: `ready=true`, 1 passed, 0 failures, 0 inconclusive, max RMSE 0.0. Latest shared pivot-slicer sidecar rename-sheet render report `/tmp/wolfxl-render-excel-slicer-shared-two-pivots-rename-sheet-20260509.json`: 1 workbook, 0 failures. Latest shared pivot-slicer sidecar rename-sheet equivalence audit `/tmp/wolfxl-slicer-shared-two-pivots-rename-sheet-render-equivalence-20260509.json`: `ready=true`, 1 passed, 0 failures, 0 inconclusive, max RMSE 0.0. Latest shared pivot-slicer sidecar delete-first-row render-delta audit `/tmp/wolfxl-slicer-shared-two-pivots-delete-first-row-render-delta-20260509.json`: `ready=true`, 1 changed, 0 unchanged, 0 failures, 0 inconclusive. Latest shared pivot-slicer sidecar delete-first-column render-delta audit `/tmp/wolfxl-slicer-shared-two-pivots-delete-first-col-render-delta-20260509.json`: `ready=true`, 1 changed, 0 unchanged, 0 failures, 0 inconclusive. Latest Excel external-link retarget render report `/tmp/wolfxl-render-excel-retarget-external-links-first-last-pages-20260509.json`: 22 workbooks, 0 failures. Latest external-link retarget render-equivalence audit `/tmp/wolfxl-retarget-external-links-render-equivalence-first-last-pages-20260509.json`: `ready=true`, 22 passed, 0 failures, 0 inconclusive, after fixing linked-workbook formula-token rewrites so the synthetic cached-value case renders `99` instead of `#REF!`. Latest Excel delete-first-row/column render report `/tmp/wolfxl-render-excel-intentional-delete-first-axis-20260508.json`: 44 results, 0 failures. Latest delete-first-row render-delta audit `/tmp/wolfxl-delete-first-row-render-delta-20260509.json`: `ready=true`, 21 changed, 1 sampled page unchanged, 0 failures, 0 inconclusive. Latest delete-first-column render-delta audit `/tmp/wolfxl-delete-first-col-render-delta-20260509.json`: `ready=true`, 21 changed, 1 sampled page unchanged, 0 failures, 0 inconclusive. Latest recursive SynthGL no-op report `/tmp/wolfxl-render-excel-synthgl-recursive-byte-identical-20260508/render-compare-report.json`: `render_engine=excel`, 32 workbooks, 0 failures, with every no-op output byte-identical to source. Latest engine-specific coverage report `/tmp/wolfxl-coverage-excel-render-full-pack-with-rename-sheet-defined-name-20260508.json`: `ready=true`, 10 Excel render reports, 0 unclear surfaces | No-op render comparisons are pixel equality checks when bytes differ; byte-identical no-op outputs are stronger package-level evidence and avoid renderer nondeterminism. The rename-sheet slice has feature-specific before/after pixel-equivalence proof, copy-first-sheet has copied-page equivalence proof, external-link retargeting has before/after Excel pixel-equivalence proof for the sampled pages, add-data-validation, add-conditional-formatting, add-remove-chart, and copy-remove-sheet have before/after Excel pixel-equivalence proof for the full pinned pack, shared pivot-slicer copy-remove-sheet and rename-sheet have sidecar before/after Excel pixel-equivalence proof, shared pivot-slicer first row/column deletion has sidecar expected visual-delta proof, and marker-cell, style-cell, insert-tail-row/column, delete-marker-tail-row/column, move-formula-range, plus first row/column deletion now have expected visual-delta proof instead of being misclassified as visually neutral. Other intentional mutation runs remain renderability checks, not proof that every intentional edit's visual result is semantically perfect. The engine-specific gate prevents LibreOffice pixels from being mistaken for Excel pixels. This is full-pack no-op plus marker-cell/style-cell/insert-tail-row-column/delete-marker-tail-row-column visual-delta, copy-first-sheet, rename-first-sheet, move-formula-range, delete-first-row/column structural, add-data-validation, add-conditional-formatting render-equivalence, add-remove-chart render-equivalence, copy-remove-sheet render-equivalence, shared pivot-slicer sidecar copy-remove-sheet and rename-sheet render-equivalence, shared pivot-slicer sidecar delete-first-row/column render-delta evidence, and retarget-external-links Excel-render evidence, plus recursive SynthGL no-op byte-identical evidence; it is not exhaustive intentional-edit visual equivalence | | Broader real-file corpus sweep | `scripts/run_ooxml_fidelity_mutations.py --recursive` can now walk nested workbook trees without flattening them first. Latest live SynthGL sweep covered `/Users/wolfgangschoenberger/Projects/SynthGL/tests/app/fixtures` recursively; latest archive sweep covered `/Users/wolfgangschoenberger/Projects/SynthGL/data/archives/codex_spark_excel_copies_dedup_20260214_030712/files` | 32 live SynthGL workbooks pass no-op, marker-cell, style-cell, rename-first-sheet, and move-formula-range audits in one 160-result sweep with 0 failures. A newer richer SynthGL sweep at `/tmp/wolfxl-ooxml-fidelity-mutations-synthgl-richer-fixed-20260508.json` covers add-data-validation, add-conditional-formatting, copy-first-sheet, delete-first-row, delete-first-col, and add-remove-chart across the same 32 workbooks: 192 results, 0 failures. The focused worksheet-formula rename fix was rechecked against `/Users/wolfgangschoenberger/Projects/SynthGL/tests/app/fixtures` for 32 rename-first-sheet results and 0 failures, and the adjacent umya-spreadsheet issue-corpus rename sweep now passes 63 results with 0 failures at `/tmp/wolfxl-ooxml-fidelity-mutations-umya-rename-after-macro-sidecar-20260508.json` after the macro-sidecar preservation fix. The richer sweep exposed and then verified the fix for copied-sheet hyperlink attribute escaping on `ingestion/time_series/omb_historical_budget_2026.xlsx`. The matching recursive no-op render-equivalence run over the same 32 workbooks is green because each WolfXL no-op output is byte-for-byte identical to its source. The 71-workbook SynthGL archive quick sweep originally reported 16 failures in `/tmp/wolfxl-ooxml-fidelity-mutations-synthgl-codex-spark-archive-71-quick-20260508/report.json`; re-auditing those before/after pairs after suppressing exact source-preexisting XML/reference defects yields `/tmp/wolfxl-ooxml-fidelity-mutations-synthgl-codex-spark-archive-71-quick-reaudit-20260508.json` with 142 passed results and 0 failures. The suppressed defects were stale workbook defined names and malformed pivot style XML already present in the source files. The SynthGL real-world-ingestion mixed-validity corpus adds `/tmp/wolfxl-ooxml-fidelity-mutations-synthgl-real-world-ingestion-quick-20260509.json` with 135 rows, 0 failures, 84 source-valid passes or expected-drift passes, and 51 explicit invalid-source skips, plus `/tmp/wolfxl-ooxml-fidelity-mutations-synthgl-real-world-ingestion-structural-20260509.json` with 225 rows, 0 failures, 140 source-valid passes or expected-drift passes, and 85 explicit invalid-source skips. The SynthGL CDS case-study corpus adds `/tmp/wolfxl-ooxml-fidelity-mutations-synthgl-cds-case-study-quick-20260509.json` with 48 rows, 0 failures, 46 passed, and 2 expected-drift passes, plus `/tmp/wolfxl-ooxml-fidelity-mutations-synthgl-cds-case-study-structural-20260509.json` with 80 rows, 0 failures, 13 passed, and 67 expected-drift passes. The Calamine reader corpus adds `/tmp/wolfxl-ooxml-fidelity-mutations-calamine-tests-fixed-20260508/report.json` with 495 default mutation rows, 0 failures, 416 passed, 52 expected style/theme drift passes, and 27 explicit invalid-source skips | This is broader than the pinned oracle pack and now includes richer feature-aware mutations plus archived, ingestion-real-file, CDS case-study, and Calamine reader-corpus pressure tests, but still not a full real-world Excel corpus; additional non-SynthGL real-file sources remain open | -| Current evidence bundle | `Plans/ooxml-current-evidence-bundle.json` plus `scripts/audit_ooxml_evidence_bundle.py --strict` pins the current generated report artifacts, records each producer command, and verifies expected readiness/counts across all-evidence coverage, interactive evidence, aggregated Excel UI-interaction evidence, Excel-render full-pack no-op and intentional evidence, feature-specific render-equivalence and render-delta evidence, hardened Excel app-open evidence, corpus diversity, gap radar, recursive SynthGL side evidence, umya issue-corpus side evidence, umya `tests/result_files` macro-sidecar mutation evidence, the umya issue-corpus rename rerun, public Microsoft sample evidence, the Contoso PowerPivot plus shared-slicer sidecar evidence, sidecar corpus-bucket reports, marker-cell-mutated timeline, external-link prompt, embedded-control, and shared-slicer UI-interaction side evidence, shared-slicer rename/copy-remove-sheet render-equivalence and delete-axis render-delta side evidence, PowerView read-only prompt side evidence, SynthGL real-world-ingestion side evidence, SynthGL CDS case-study side evidence, Calamine reader-corpus side evidence, ILPA reporting-template side evidence including current retarget app-open/render equivalence, WBD wDesk side evidence, BF30 public-download side evidence, blind-holdout side evidence, rescue-download side evidence, SEC/EDGAR side evidence, Iran OSINT side evidence, ExcelBench core, external-validated, and curated real-world manifest side evidence, and the aggregate corpus-portfolio diversity gate | Latest bundle audit `/tmp/wolfxl-current-evidence-bundle-audit-marker-control-ui-20260509.json`: `ready=true`, 179 reports, 179 producer commands, 0 issues | This prevents stale or origin-unclear `/tmp` report references from silently supporting completion claims. It still verifies generated artifacts, not a permanent corpus expansion by itself | +| Current evidence bundle | `Plans/ooxml-current-evidence-bundle.json` plus `scripts/audit_ooxml_evidence_bundle.py --strict` pins the current generated report artifacts, records each producer command, and verifies expected readiness/counts across all-evidence coverage, interactive evidence, aggregated Excel UI-interaction evidence, Excel-render full-pack no-op and intentional evidence, feature-specific render-equivalence and render-delta evidence, hardened Excel app-open evidence, corpus diversity, gap radar, recursive SynthGL side evidence, umya issue-corpus side evidence, umya `tests/result_files` macro-sidecar mutation evidence, the umya issue-corpus rename rerun, public Microsoft sample evidence, the Contoso PowerPivot plus shared-slicer sidecar evidence, sidecar corpus-bucket reports, marker-cell-mutated timeline, external-link prompt, embedded-control, button-control, and shared-slicer UI-interaction side evidence, shared-slicer rename/copy-remove-sheet render-equivalence and delete-axis render-delta side evidence, PowerView read-only prompt side evidence, SynthGL real-world-ingestion side evidence, SynthGL CDS case-study side evidence, Calamine reader-corpus side evidence, ILPA reporting-template side evidence including current retarget app-open/render equivalence, WBD wDesk side evidence, BF30 public-download side evidence, blind-holdout side evidence, rescue-download side evidence, SEC/EDGAR side evidence, Iran OSINT side evidence, ExcelBench core, external-validated, and curated real-world manifest side evidence, and the aggregate corpus-portfolio diversity gate | Latest bundle audit `/tmp/wolfxl-current-evidence-bundle-audit-marker-button-control-ui-20260509.json`: `ready=true`, 181 reports, 181 producer commands, 0 issues | This prevents stale or origin-unclear `/tmp` report references from silently supporting completion claims. It still verifies generated artifacts, not a permanent corpus expansion by itself | ## Latest sidecar corpus update @@ -496,11 +496,11 @@ Prompt-to-artifact checklist: | Calamine issue-corpus exploratory sweep | `scripts/audit_ooxml_corpus_buckets.py /Users/wolfgangschoenberger/Projects/calamine/tests --recursive --json`; `scripts/audit_ooxml_gap_radar.py /Users/wolfgangschoenberger/Projects/calamine/tests --recursive --json`; `scripts/run_ooxml_fidelity_mutations.py /Users/wolfgangschoenberger/Projects/calamine/tests --recursive --output-dir /tmp/wolfxl-ooxml-fidelity-mutations-calamine-quick-skip-invalid-20260508 --mutation no_op --mutation marker_cell --skip-invalid-source`; `scripts/run_ooxml_fidelity_mutations.py /Users/wolfgangschoenberger/Projects/calamine/tests --recursive --output-dir /tmp/wolfxl-ooxml-fidelity-mutations-calamine-structural-skip-invalid-20260508 --mutation style_cell --mutation copy_first_sheet --mutation rename_first_sheet --mutation move_formula_range --mutation add_data_validation --skip-invalid-source`; `scripts/run_ooxml_fidelity_mutations.py /Users/wolfgangschoenberger/Projects/calamine/tests --recursive --output-dir /tmp/wolfxl-ooxml-fidelity-mutations-calamine-tests-fixed-20260508 --skip-invalid-source` | Latest bucket run audits 52 readable workbooks and explicitly skips 3 invalid or unsupported inputs: one bad CRC workbook, one backslash-path unsafe package, and one encrypted/non-ZIP workbook. Bucket coverage is intentionally not ready because PowerPivot and slicer/timeline are absent. Latest gap radar audits 52 readable workbooks, skips the same 3 invalid inputs, and is clear for unknown part families, relationship types, content types, and extension URIs after classifying macOS `.DS_Store` package noise and case-variant `xl/SharedStrings.xml` as known package surface. The quick mutation sweep now produces 110 results, 0 failures, 104 passed mutations, and 6 explicit `skipped_source_invalid` results for the invalid/encrypted/unsafe source inputs. The richer structural/feature sweep now produces 275 results, 0 failures, 102 passed mutations, 158 expected-drift passes, and 15 explicit `skipped_source_invalid` results for the same invalid/encrypted/unsafe source inputs, after closing the real reader gaps for OPC case-variant part names (`xl/SharedStrings.xml`) and namespace-prefix variants on relationship IDs (`relationships:id`). The pinned default mutation sweep produces 495 rows, 0 failures, 416 passed mutations, 52 expected style/theme drift passes, and 27 explicit invalid-source skips | Useful broader-corpus pressure test and now pinned in the evidence bundle. It exposed audit-tool robustness gaps plus two real reader fidelity gaps, now fixed so exploratory corpora produce machine-readable skipped/unknown reports and valid case-variant or namespace-prefix workbooks load correctly. It is a clean mutation pressure test over source-valid files, but not a complete gate because the corpus still includes intentionally malformed fixtures and lacks key BI/slicer buckets | | Broader recursive coverage audit | `scripts/audit_ooxml_fidelity_coverage.py /Users/wolfgangschoenberger/Projects/SynthGL/tests/app/fixtures --recursive --report /tmp/wolfxl-ooxml-fidelity-mutations-synthgl-python-metadata-final/report.json --report /tmp/wolfxl-ooxml-fidelity-mutations-synthgl-richer-fixed-20260508.json` plus `scripts/audit_ooxml_corpus_buckets.py ... --recursive --json` | Latest coverage run `/tmp/wolfxl-coverage-synthgl-recursive-richer-20260508.json`: 32 fixtures, recursive true, 2 mutation reports, all source classes inferred as real Excel, richer structural/feature mutation evidence attached to present live-corpus surfaces, Python metadata clear on 1 fixture, sheet metadata clear on 2 fixtures. Latest corpus-bucket run: 32 Excel-authored workbooks, missing external-link, external-tool-authored, macro/VBA, PowerPivot, and slicer/timeline buckets | Good check that broad live fixtures are not silently excluded; proves the SynthGL tree is useful side evidence but not a replacement for the pinned external-oracle pack | | Excel-rendered output evidence | `scripts/run_ooxml_render_compare.py ... --render-engine excel` plus `scripts/audit_ooxml_fidelity_coverage.py ... --require-render --require-render-engine excel` | Latest raw Excel-render reports: `/tmp/wolfxl-render-excel-full-pack.json` has 22 no-op results and 0 failures; `/tmp/wolfxl-render-excel-intentional-marker-full-pack.json` has 22 marker-cell mutation results and 0 failures; `/tmp/wolfxl-marker-cell-render-delta-20260509.json` adds before/after Excel visual-delta evidence for marker-cell with `ready=True`, 19 changed, 3 sampled pages unchanged, 0 failures, and 0 inconclusive; `/tmp/wolfxl-render-excel-intentional-style-cell-full-pack-20260509.json` has 22 style-cell mutation results and 0 failures; `/tmp/wolfxl-style-cell-render-delta-20260509.json` adds before/after Excel visual-delta evidence for style-cell with `ready=True`, 19 changed, 3 sampled pages unchanged, 0 failures, and 0 inconclusive; `/tmp/wolfxl-render-excel-intentional-insert-tail-row-full-pack-20260509.json` has 22 insert-tail-row mutation results and 0 failures; `/tmp/wolfxl-insert-tail-row-render-delta-20260509.json` adds before/after Excel visual-delta evidence for insert-tail-row with `ready=True`, 21 changed, 1 sampled page unchanged, 0 failures, and 0 inconclusive; `/tmp/wolfxl-render-excel-intentional-insert-tail-col-full-pack-20260509.json` has 22 insert-tail-column mutation results and 0 failures; `/tmp/wolfxl-insert-tail-col-render-delta-20260509.json` adds before/after Excel visual-delta evidence for insert-tail-column with `ready=True`, 19 changed, 3 sampled pages unchanged, 0 failures, and 0 inconclusive; `/tmp/wolfxl-render-excel-intentional-delete-marker-tail-col-full-pack-20260509.json` has 22 delete-marker-tail-column mutation results and 0 failures; `/tmp/wolfxl-delete-marker-tail-col-render-delta-20260509.json` adds before/after Excel visual-delta evidence for delete-marker-tail-column with `ready=True`, 3 changed, 19 sampled pages unchanged, 0 failures, and 0 inconclusive; `/tmp/wolfxl-render-excel-intentional-delete-marker-tail-row-full-pack-20260509.json` has 22 delete-marker-tail-row mutation results and 0 failures; `/tmp/wolfxl-delete-marker-tail-row-render-delta-20260509.json` adds before/after Excel visual-delta evidence for delete-marker-tail-row with `ready=True`, 1 changed, 21 sampled pages unchanged, 0 failures, and 0 inconclusive; `/tmp/wolfxl-render-excel-intentional-copy-sheet-full-pack.json` has 22 copy-first-sheet structural mutation results and 0 failures; `/tmp/wolfxl-render-excel-intentional-rename-first-sheet-defined-name-fixed-20260508.json` has 22 rename-first-sheet structural mutation results and 0 failures; `/tmp/wolfxl-rename-sheet-render-equivalence-first-last-pages-20260509.json` adds before/after Excel pixel equivalence for rename-first-sheet with `ready=True`, 22 passed, 0 failures, and 0 inconclusive; `/tmp/wolfxl-render-excel-intentional-move-formula-range-full-pack.json` has 22 move-formula-range structural mutation results and 0 failures; `/tmp/wolfxl-move-formula-range-render-delta-20260509.json` adds before/after Excel pixel delta evidence for move-formula-range with `ready=True`, 19 changed, 3 sampled pages unchanged, 0 failures, and 0 inconclusive; `/tmp/wolfxl-render-excel-intentional-move-marker-range-full-pack-20260509.json` has 22 move-marker-range structural mutation results and 0 failures; `/tmp/wolfxl-move-marker-range-render-delta-20260509.json` adds before/after Excel visual-delta evidence for move-marker-range with `ready=True`, 21 changed, 1 sampled page unchanged, 0 failures, and 0 inconclusive; `/tmp/wolfxl-render-excel-intentional-delete-first-axis-20260508.json` has 44 delete-first-row/column structural mutation results and 0 failures; `/tmp/wolfxl-delete-first-row-render-delta-20260509.json` and `/tmp/wolfxl-delete-first-col-render-delta-20260509.json` add before/after Excel pixel delta evidence for first row/column deletion with `ready=True`, 21 changed, 1 sampled page unchanged, 0 failures, and 0 inconclusive each; `/tmp/wolfxl-render-excel-intentional-add-data-validation-full-pack.json` has 22 add-data-validation feature-add results and 0 failures; `/tmp/wolfxl-render-excel-intentional-add-conditional-formatting-full-pack-fixed.json` has 22 add-conditional-formatting feature-add results and 0 failures; `/tmp/wolfxl-add-conditional-formatting-render-equivalence-20260509.json` adds before/after Excel pixel equivalence for add-conditional-formatting with `ready=True`, 22 passed, 0 failures, and 0 inconclusive; `/tmp/wolfxl-render-excel-intentional-add-remove-chart-20260508.json` has 22 add-remove-chart feature-add/remove results and 0 failures; `/tmp/wolfxl-add-remove-chart-render-equivalence-20260509.json` adds before/after Excel pixel equivalence for add-remove-chart with `ready=True`, 22 passed, 0 failures, and 0 inconclusive; `/tmp/wolfxl-render-excel-intentional-copy-remove-sheet-full-pack-20260509.json` has 22 copy-remove-sheet results and 0 failures; `/tmp/wolfxl-copy-remove-sheet-render-equivalence-20260509.json` adds before/after Excel pixel equivalence for copy-remove-sheet with `ready=True`, 22 passed, 0 failures, and 0 inconclusive; `/tmp/wolfxl-render-excel-retarget-external-links-first-last-pages-20260509.json` has 22 external-link retarget results and 0 failures; `/tmp/wolfxl-retarget-external-links-render-equivalence-first-last-pages-20260509.json` adds before/after Excel pixel equivalence for external-link retarget with `ready=True`, 22 passed, 0 failures, and 0 inconclusive. Latest coverage report `/tmp/wolfxl-coverage-excel-render-full-pack-with-rename-sheet-defined-name-20260508.json`: `ready=True`, 22 fixtures audited, 10 Excel render reports, 0 unclear surfaces. The producer stages files in Excel's sandbox container to avoid macOS `Grant File Access` prompts | Covered as full-pack no-op plus marker-cell, style-cell, insert-tail-row/column, move-marker-range, and delete-marker-tail-row/column intentional edits with expected visual-delta evidence, copy-first-sheet structural intentional, rename-first-sheet structural intentional and render-equivalent, move-formula-range structural intentional with expected visual-delta evidence, delete-first-row/column structural intentional with expected visual-delta evidence, add-data-validation, add-conditional-formatting render-equivalence, add-remove-chart render-equivalence, copy-remove-sheet render-equivalence, and retarget-external-links Excel-rendered and render-equivalent evidence across the current surface matrix; still not exhaustive feature-specific intentional-edit visual equivalence | -| Interactive behavior evidence | `scripts/audit_ooxml_interactive_evidence.py tests/fixtures/external_oracle --recursive --strict --report /tmp/wolfxl-interactive-probes-pivot-one-clean-20260508/interactive-probe-report.json --report /tmp/wolfxl-interactive-probes-slicer-one-clean-20260508/interactive-probe-report.json --report /tmp/wolfxl-interactive-probes-timeline-one-clean-20260508/interactive-probe-report.json --report /tmp/wolfxl-interactive-probes-external-link-one-clean-20260508/interactive-probe-report.json --report /tmp/wolfxl-interactive-probes-embedded-one-clean-20260508/interactive-probe-report.json --report /tmp/wolfxl-interactive-probes-macro-clean-rerun-20260508/interactive-probe-report.json`; `scripts/audit_ooxml_interactive_evidence.py tests/fixtures/external_oracle --probe-kind excel_ui_interaction ...`; plus `scripts/run_ooxml_interactive_probe.py --probe-kind excel_ui_interaction` for targeted UI-interaction reports | Latest state-presence run `/tmp/wolfxl-interactive-evidence-external-oracle-all-20260508.json`: `ready=True`; all six original `ooxml_state_presence` probe classes clear with `incomplete_report_count=0`. Latest aggregated UI-interaction run `/tmp/wolfxl-ui-interaction-evidence-external-oracle-20260509.json`: `ready=True`, 22 fixtures, 10 reports, all six original `excel_ui_interaction` probe classes clear. Latest source sidecar UI-interaction run `/tmp/wolfxl-ui-interaction-evidence-shared-slicer-cache-sidecar-20260509.json`: `ready=True`, scoped to `slicer_selection_state` on the shared-slicer/two-pivots workbook. Latest marker-cell sidecar UI-interaction run `/tmp/wolfxl-ui-interaction-evidence-marker-shared-slicer-cache-20260509.json`: `ready=True`, scoped to `slicer_selection_state` after a WolfXL marker-cell modify-save on the shared-slicer/two-pivots workbook. Latest marker-cell embedded-control sidecar UI-interaction run `/tmp/wolfxl-ui-interaction-evidence-marker-control-click-20260509.json`: `ready=True`, scoped to `embedded_control_openability` after a WolfXL marker-cell modify-save on the real Excel control workbook. Latest marker-cell external-link prompt sidecar UI-interaction run `/tmp/wolfxl-ui-interaction-evidence-marker-external-link-current-prompt-20260509.json`: `ready=True`, scoped to `external_link_update_prompt` after a WolfXL marker-cell modify-save on the real Excel external-link workbook. Latest PowerView prompt sidecar UI-interaction run `/tmp/wolfxl-ui-interaction-evidence-powerview-open-readonly-20260509.json`: `ready=True`, scoped to `unsupported_content_prompt` on the Contoso PowerPivot workbook. Latest UI-interaction reports: macro `Disable Macros` button click clear at `/tmp/wolfxl-ui-interaction-macro-20260508/interactive-probe-report.json`; pivot `refresh all` command clear at `/tmp/wolfxl-ui-interaction-pivot-20260508/interactive-probe-report.json`; embedded list-box click persistence clear at `/tmp/wolfxl-ui-interaction-control-click-20260508/interactive-probe-report.json` with `List Box 1` clicked, workbook saved, and `ctrlProp1.xml` rewritten from `sel=0` to `sel=2`; adjacent issue-corpus list-box click persistence clear at `/tmp/wolfxl-ui-interaction-umya-listbox-control-20260508/interactive-probe-report.json` with `List Box 1` clicked, workbook saved, and control state changed; stateless button-control click persistence clear at `/tmp/wolfxl-ui-interaction-button-control-20260508/interactive-probe-report.json` with `Button 1` clicked, workbook saved, and control parts preserved; table-slicer all-item-click persistence clear at `/tmp/wolfxl-ui-interaction-slicer-all-items-20260508/interactive-probe-report.json` with `REGION` selected, both `REGION` and `YEAR` clicked, workbook saved, and `table1.xml` rewritten with `EAST` and `2014` filters; pivot-chart slicer click persistence clear at `/tmp/wolfxl-ui-interaction-pivot-chart-slicer-extra-20260508/interactive-probe-report.json` with `REGION` selected, both `REGION` and `YEAR` clicked, workbook saved, and slicer state changed; external-tool pivot-slicer click persistence clear at `/tmp/wolfxl-ui-interaction-excelize-pivot-slicer-20260508/interactive-probe-report.json` with `Month` selected, both `Month` and `Region` clicked, workbook saved, and slicer state changed; shared pivot-slicer cache persistence clear at `/tmp/wolfxl-ui-interaction-shared-slicer-cache-20260508/interactive-probe-report.json` with `SALES MONTH` selected, one item clicked, workbook saved, and the slicer-cache item state rewritten; marker-cell-mutated shared pivot-slicer cache persistence clear at `/tmp/wolfxl-ui-interaction-marker-shared-slicer-cache-20260509/interactive-probe-report.json` with `SALES MONTH` selected, one item clicked, workbook saved, and the slicer-cache item state rewritten after a WolfXL marker-cell save; timeline month-click persistence clear at `/tmp/wolfxl-ui-interaction-timeline-click-20260508/interactive-probe-report.json` with `ORDER DATE` selected, May clicked, and `timelineCache1.xml` rewritten from Q1 2012 to May 2012; marker-cell-mutated timeline month-click persistence clear at `/tmp/wolfxl-ui-interaction-marker-timeline-click-20260509/interactive-probe-report.json` with `ORDER DATE` selected, May clicked, workbook saved, and the persisted timeline selection changed after a WolfXL marker-cell save; forced external-link prompt handling clear at `/tmp/wolfxl-ui-interaction-external-link-review-fix-20260508/interactive-probe-report.json` with Excel's update-link prompt temporarily forced, `Don't Update` clicked, and the prior setting restored; current-setting external-link prompt handling clear at `/tmp/wolfxl-ui-interaction-external-link-current-prompt-20260508/interactive-probe-report.json` with the existing prompt setting left unchanged and `Don't Update` clicked; marker-cell-mutated current-setting external-link prompt handling clear at `/tmp/wolfxl-ui-interaction-marker-external-link-current-prompt-20260509/interactive-probe-report.json` with the existing prompt setting left unchanged by the probe and external-link parts preserved after a WolfXL marker-cell save; adjacent issue-corpus current-setting external-link prompt handling clear at `/tmp/wolfxl-ui-interaction-umya-external-link-current-prompt-20260508/interactive-probe-report.json` with `issue_297.xlsx`, existing prompt setting left unchanged, and `Don't Update` clicked; PowerView unsupported-content prompt handling clear at `/tmp/wolfxl-ui-interaction-powerview-open-readonly-20260509/interactive-probe-report.json` with `Open as Read-Only` clicked and the known PowerView marker verified | Covered for current Excel openability/state-presence probes plus eighteen targeted UI-interaction paths. Two embedded list-box clicks, one stateless button-control click, marker-cell-mutated embedded-control click persistence, table-slicer item clicks, Microsoft-authored pivot-chart slicer item clicks, external-tool-authored pivot-slicer item clicks, source and marker-cell-mutated shared pivot-slicer cache clicks, source and marker-cell-mutated timeline date-range clicks, forced, source current-setting, marker-cell-mutated current-setting, and adjacent issue-corpus current-setting external-link prompt paths, and one expected PowerView unsupported-content prompt now have real-Excel proof. Broader control/slicer/timeline/prompt variants remain open | +| Interactive behavior evidence | `scripts/audit_ooxml_interactive_evidence.py tests/fixtures/external_oracle --recursive --strict --report /tmp/wolfxl-interactive-probes-pivot-one-clean-20260508/interactive-probe-report.json --report /tmp/wolfxl-interactive-probes-slicer-one-clean-20260508/interactive-probe-report.json --report /tmp/wolfxl-interactive-probes-timeline-one-clean-20260508/interactive-probe-report.json --report /tmp/wolfxl-interactive-probes-external-link-one-clean-20260508/interactive-probe-report.json --report /tmp/wolfxl-interactive-probes-embedded-one-clean-20260508/interactive-probe-report.json --report /tmp/wolfxl-interactive-probes-macro-clean-rerun-20260508/interactive-probe-report.json`; `scripts/audit_ooxml_interactive_evidence.py tests/fixtures/external_oracle --probe-kind excel_ui_interaction ...`; plus `scripts/run_ooxml_interactive_probe.py --probe-kind excel_ui_interaction` for targeted UI-interaction reports | Latest state-presence run `/tmp/wolfxl-interactive-evidence-external-oracle-all-20260508.json`: `ready=True`; all six original `ooxml_state_presence` probe classes clear with `incomplete_report_count=0`. Latest aggregated UI-interaction run `/tmp/wolfxl-ui-interaction-evidence-external-oracle-20260509.json`: `ready=True`, 22 fixtures, 10 reports, all six original `excel_ui_interaction` probe classes clear. Latest source sidecar UI-interaction run `/tmp/wolfxl-ui-interaction-evidence-shared-slicer-cache-sidecar-20260509.json`: `ready=True`, scoped to `slicer_selection_state` on the shared-slicer/two-pivots workbook. Latest marker-cell sidecar UI-interaction run `/tmp/wolfxl-ui-interaction-evidence-marker-shared-slicer-cache-20260509.json`: `ready=True`, scoped to `slicer_selection_state` after a WolfXL marker-cell modify-save on the shared-slicer/two-pivots workbook. Latest marker-cell embedded-control sidecar UI-interaction run `/tmp/wolfxl-ui-interaction-evidence-marker-control-click-20260509.json`: `ready=True`, scoped to `embedded_control_openability` after a WolfXL marker-cell modify-save on the real Excel control workbook. Latest marker-cell button-control sidecar UI-interaction run `/tmp/wolfxl-ui-interaction-evidence-marker-button-control-20260509.json`: `ready=True`, scoped to `embedded_control_openability` after a WolfXL marker-cell modify-save on the umya button-control workbook. Latest marker-cell external-link prompt sidecar UI-interaction run `/tmp/wolfxl-ui-interaction-evidence-marker-external-link-current-prompt-20260509.json`: `ready=True`, scoped to `external_link_update_prompt` after a WolfXL marker-cell modify-save on the real Excel external-link workbook. Latest PowerView prompt sidecar UI-interaction run `/tmp/wolfxl-ui-interaction-evidence-powerview-open-readonly-20260509.json`: `ready=True`, scoped to `unsupported_content_prompt` on the Contoso PowerPivot workbook. Latest UI-interaction reports: macro `Disable Macros` button click clear at `/tmp/wolfxl-ui-interaction-macro-20260508/interactive-probe-report.json`; pivot `refresh all` command clear at `/tmp/wolfxl-ui-interaction-pivot-20260508/interactive-probe-report.json`; embedded list-box click persistence clear at `/tmp/wolfxl-ui-interaction-control-click-20260508/interactive-probe-report.json` with `List Box 1` clicked, workbook saved, and `ctrlProp1.xml` rewritten from `sel=0` to `sel=2`; adjacent issue-corpus list-box click persistence clear at `/tmp/wolfxl-ui-interaction-umya-listbox-control-20260508/interactive-probe-report.json` with `List Box 1` clicked, workbook saved, and control state changed; stateless button-control click persistence clear at `/tmp/wolfxl-ui-interaction-button-control-20260508/interactive-probe-report.json` with `Button 1` clicked, workbook saved, and control parts preserved; table-slicer all-item-click persistence clear at `/tmp/wolfxl-ui-interaction-slicer-all-items-20260508/interactive-probe-report.json` with `REGION` selected, both `REGION` and `YEAR` clicked, workbook saved, and `table1.xml` rewritten with `EAST` and `2014` filters; pivot-chart slicer click persistence clear at `/tmp/wolfxl-ui-interaction-pivot-chart-slicer-extra-20260508/interactive-probe-report.json` with `REGION` selected, both `REGION` and `YEAR` clicked, workbook saved, and slicer state changed; external-tool pivot-slicer click persistence clear at `/tmp/wolfxl-ui-interaction-excelize-pivot-slicer-20260508/interactive-probe-report.json` with `Month` selected, both `Month` and `Region` clicked, workbook saved, and slicer state changed; shared pivot-slicer cache persistence clear at `/tmp/wolfxl-ui-interaction-shared-slicer-cache-20260508/interactive-probe-report.json` with `SALES MONTH` selected, one item clicked, workbook saved, and the slicer-cache item state rewritten; marker-cell-mutated shared pivot-slicer cache persistence clear at `/tmp/wolfxl-ui-interaction-marker-shared-slicer-cache-20260509/interactive-probe-report.json` with `SALES MONTH` selected, one item clicked, workbook saved, and the slicer-cache item state rewritten after a WolfXL marker-cell save; timeline month-click persistence clear at `/tmp/wolfxl-ui-interaction-timeline-click-20260508/interactive-probe-report.json` with `ORDER DATE` selected, May clicked, and `timelineCache1.xml` rewritten from Q1 2012 to May 2012; marker-cell-mutated timeline month-click persistence clear at `/tmp/wolfxl-ui-interaction-marker-timeline-click-20260509/interactive-probe-report.json` with `ORDER DATE` selected, May clicked, workbook saved, and the persisted timeline selection changed after a WolfXL marker-cell save; forced external-link prompt handling clear at `/tmp/wolfxl-ui-interaction-external-link-review-fix-20260508/interactive-probe-report.json` with Excel's update-link prompt temporarily forced, `Don't Update` clicked, and the prior setting restored; current-setting external-link prompt handling clear at `/tmp/wolfxl-ui-interaction-external-link-current-prompt-20260508/interactive-probe-report.json` with the existing prompt setting left unchanged and `Don't Update` clicked; marker-cell-mutated current-setting external-link prompt handling clear at `/tmp/wolfxl-ui-interaction-marker-external-link-current-prompt-20260509/interactive-probe-report.json` with the existing prompt setting left unchanged by the probe and external-link parts preserved after a WolfXL marker-cell save; marker-cell-mutated stateless button-control click persistence clear at `/tmp/wolfxl-ui-interaction-marker-button-control-20260509/interactive-probe-report.json` with `Button 1` clicked, workbook saved, and button control parts preserved after a WolfXL marker-cell save; adjacent issue-corpus current-setting external-link prompt handling clear at `/tmp/wolfxl-ui-interaction-umya-external-link-current-prompt-20260508/interactive-probe-report.json` with `issue_297.xlsx`, existing prompt setting left unchanged, and `Don't Update` clicked; PowerView unsupported-content prompt handling clear at `/tmp/wolfxl-ui-interaction-powerview-open-readonly-20260509/interactive-probe-report.json` with `Open as Read-Only` clicked and the known PowerView marker verified | Covered for current Excel openability/state-presence probes plus nineteen targeted UI-interaction paths. Two embedded list-box clicks, source and marker-cell-mutated stateless button-control clicks, marker-cell-mutated list-box click persistence, table-slicer item clicks, Microsoft-authored pivot-chart slicer item clicks, external-tool-authored pivot-slicer item clicks, source and marker-cell-mutated shared pivot-slicer cache clicks, source and marker-cell-mutated timeline date-range clicks, forced, source current-setting, marker-cell-mutated current-setting, and adjacent issue-corpus current-setting external-link prompt paths, and one expected PowerView unsupported-content prompt now have real-Excel proof. Broader control/slicer/timeline/prompt variants remain open | | Whole-pack preservation under common edits | `tests/test_external_oracle_preservation.py` | `198 passed` after the latest changes | Strong pinned-pack regression gate | | Combined all-evidence gate | `scripts/audit_ooxml_fidelity_coverage.py --strict --require-render --require-intentional-render --require-app --require-intentional-app` | Latest regenerated report `/tmp/wolfxl-coverage-all-evidence-current-code-plus-excel-powerpivot.json`: `ready=True`, 22 fixtures, 13 surfaces, 5 mutation reports, 6 render reports, 9 app reports; external-link relationship edges now accept `retarget_external_links` as a structural mutation and clear on three retargeted external-link fixtures with intentional Microsoft Excel app-open evidence | Strong current-state gate | -| Evidence bundle freshness | `scripts/audit_ooxml_evidence_bundle.py Plans/ooxml-current-evidence-bundle.json --strict` | Latest run `/tmp/wolfxl-current-evidence-bundle-audit-marker-control-ui-20260509.json`: `ready=True`, 179 report artifacts verified, 179 producer commands recorded, 0 issues | Stronger provenance over the current generated evidence set; still dependent on generated reports being refreshed when fixtures or gates change | -| Completion claim guard | `scripts/audit_ooxml_completion_claim.py Plans/ooxml-current-evidence-bundle.json --strict-current-evidence` | Latest run `/tmp/wolfxl-completion-current-marker-control-ui-20260509.json`: `current_supported_claim_ready=True`, `exhaustive_claim_ready=False`, `missing_requirement_count=4`, and current bundle ready with 179 pinned reports | Prevents the supported current claim from being silently upgraded into the exhaustive "no real-world Excel fidelity gaps" claim | +| Evidence bundle freshness | `scripts/audit_ooxml_evidence_bundle.py Plans/ooxml-current-evidence-bundle.json --strict` | Latest run `/tmp/wolfxl-current-evidence-bundle-audit-marker-button-control-ui-20260509.json`: `ready=True`, 181 report artifacts verified, 181 producer commands recorded, 0 issues | Stronger provenance over the current generated evidence set; still dependent on generated reports being refreshed when fixtures or gates change | +| Completion claim guard | `scripts/audit_ooxml_completion_claim.py Plans/ooxml-current-evidence-bundle.json --strict-current-evidence` | Latest run `/tmp/wolfxl-completion-current-marker-button-control-ui-20260509.json`: `current_supported_claim_ready=True`, `exhaustive_claim_ready=False`, `missing_requirement_count=4`, and current bundle ready with 181 pinned reports | Prevents the supported current claim from being silently upgraded into the exhaustive "no real-world Excel fidelity gaps" claim | Current conclusion: @@ -532,7 +532,7 @@ Next evidence slices before declaring a higher-confidence "no known gaps": relationship-preserving edits. 3. Continue expanding click-level interactive UI automation beyond the current `ooxml_state_presence` probes. Macro prompt handling, pivot refresh, - two embedded list-box clicks, one stateless button-control click, + two embedded list-box clicks, source and marker-cell-mutated stateless button-control clicks, table-slicer item clicks, source and marker-cell-mutated shared pivot-slicer cache clicks, Microsoft-authored pivot-chart slicer item clicks, external-tool-authored pivot-slicer item clicks, source and marker-cell-mutated diff --git a/scripts/audit_ooxml_completion_claim.py b/scripts/audit_ooxml_completion_claim.py index e13c197c..4209d108 100644 --- a/scripts/audit_ooxml_completion_claim.py +++ b/scripts/audit_ooxml_completion_claim.py @@ -47,6 +47,7 @@ "excel_ui_interaction_marker_timeline_evidence", "excel_ui_interaction_marker_external_link_current_prompt_evidence", "excel_ui_interaction_marker_control_evidence", + "excel_ui_interaction_marker_button_control_evidence", "external_oracle_corpus_diversity", "corpus_portfolio_diversity", "external_oracle_gap_radar", @@ -112,7 +113,8 @@ "Targeted UI-interaction evidence exists, including marker-cell " "mutated shared pivot-slicer cache and timeline clicks plus a " "marker-cell mutated current-setting external-link prompt path " - "and marker-cell mutated embedded-control click persistence, but " + "and marker-cell mutated list-box and button-control click " + "persistence, but " "broader slicer, timeline, embedded-control, and prompt variants " "remain unexhausted." ),