fix: restore cross-platform batch crop workflows - #51
Merged
Conversation
There was a problem hiding this comment.
Pull request overview
Restores cross-platform robustness for Batch Crop duplication and native file-dialog filter handling, adds a diagnostic ZIP-to-text fallback path, and expands CI to validate across an oldest/latest MATLAB matrix with improved, evidence-oriented job summaries.
Changes:
- Normalizes Batch Crop’s parallel state collections to column shape before duplicate insertion to prevent dimension mismatches.
- Normalizes native dialog filter tables to legacy char-cell format and adds a plain-text diagnostic fallback when ZIP export fails.
- Reworks CI into a per-platform/per-release matrix and replaces per-profile summaries with a single platform-level summary (with regression tests).
Reviewed changes
Copilot reviewed 37 out of 39 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| tests/specs/system/repository/TestArchitectureSpec.m | Updates workflow contract assertions for new CI matrix + summary flow. |
| tests/specs/system/build/TestCatalogSpec.m | Adds regression ensuring actionable diagnostics appear in generated JUnit. |
| tests/specs/framework/app/SessionDiagnosticBundleSpec.m | Adds coverage for ZIP failure → text fallback behavior and sanitization expectations. |
| tests/specs/framework/app/AppSdkSpec.m | Adds regression for native dialog filter normalization output type. |
| tests/specs/apps/labkit_core/figure_studio/workbench/FigureStudioWorkflowSpec.m | Adapts Figure Studio export workflow test to filter-driven output selection; adds SVG export coverage. |
| tests/specs/apps/labkit_core/figure_studio/resultFiles/FigureStudioResultSpec.m | Improves failure diagnostics for canvas-bound checks. |
| tests/specs/apps/image_measurement/batch_crop/sourceFiles/BatchCropSourceSpec.m | Adds regression for row-shaped state duplication alignment. |
| tests/+labkittest/run.m | Records diagnostics for JUnit output and enriches failure/error payloads. |
| site/history/records/2026/07/LK-20260729-cross-version-dialog-and-duplicate-repair.html | Generated history record for this change set. |
| site/history/records/2026/07/LK-20260726-actionable-session-diagnostics.html | Updates generated navigation links to include the new record. |
| site/history/index.html | Updates generated timeline ordering to include the new record. |
| site/framework/index.html | Updates generated framework history links to include the new record. |
| site/framework/guides/runtime.html | Updates generated runtime guide with dialog-filter normalization + text fallback behavior. |
| site/framework/app-sdk-api.html | Updates generated history links to include the new record. |
| site/development/maintain-and-release/testing.html | Updates generated testing doc to describe oldest/latest CI matrix and job summaries. |
| site/apps/labkit-core/figure-studio.html | Updates generated Figure Studio doc for pre-R2025a export behavior and history. |
| site/apps/image-measurement/batch-crop.html | Updates generated Batch Crop doc for row/column state duplication alignment and history. |
| docs/history/records/2026/07/LK-20260729-cross-version-dialog-and-duplicate-repair.md | Adds authored history record documenting rationale, scope, and evidence. |
| docs/framework/guides/runtime.md | Documents dialog filter normalization and diagnostic text fallback behavior. |
| docs/development/maintain-and-release/testing.md | Updates CI evidence + matrix documentation (floor/latest, runner pinning, and summaries). |
| docs/apps/labkit-core/figure-studio/README.md | Documents pre-R2025a export backend behavior for Figure Studio. |
| docs/apps/image-measurement/batch-crop/README.md | Documents duplicate alignment behavior for row/column file-list state. |
| buildfile.m | Adds Build Tool task descriptions to improve build results readability. |
| apps/labkit_core/figure_studio/+figure_studio/definition.m | Bumps Figure Studio app version/date metadata. |
| apps/labkit_core/figure_studio/+figure_studio/+resultFiles/exportGraphic.m | Switches export backend based on MATLAB release (print vs exportgraphics). |
| apps/labkit_core/figure_studio/+figure_studio/+resultFiles/applyFigureStyle.m | Improves export-canvas convergence and post-fit text overflow correction. |
| apps/image_measurement/batch_crop/+batch_crop/definition.m | Bumps Batch Crop app version/date metadata. |
| apps/image_measurement/batch_crop/+batch_crop/+sourceFiles/duplicateCurrent.m | Normalizes parallel collections to column shape before duplicate insertion. |
| +labkit/+app/version.m | Bumps LabKit App SDK facade version metadata. |
| +labkit/+app/+internal/SessionDiagnostics.m | Adds SessionDiagnostics text-fallback exporter using in-memory snapshot. |
| +labkit/+app/+internal/SessionDiagnosticBundle.m | Adds writeFallback implementation and fallback snapshot validation/formatting. |
| +labkit/+app/+internal/RuntimeKernel.m | Routes diagnostic export failures to text fallback and alerts when applicable. |
| +labkit/+app/+internal/@MatlabPlatformAdapter/MatlabPlatformAdapter.m | Normalizes dialog filters before calling uigetfile/uiputfile. |
| .github/workflows/ci.yml | Replaces single-release CI with platform/release matrix, adds Xvfb, and platform-level summary + artifacts. |
| .github/scripts/test_summarize_junit.py | Adds regression tests for the new platform-level CI summary script. |
| .github/scripts/summarize_junit.py | Refactors to a platform-level summary combining headless/gui/isolated outcomes. |
| .agents/dos-and-donts.md | Captures newly reinforced operational lessons (dialog filters, shape normalization, CI floor/runner pairing). |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Comment on lines
+302
to
+304
| separator = string(newline) + string(newline); | ||
| detail = strjoin(reports, separator); | ||
| firstLine = extractBefore(detail + string(newline), string(newline)); |
Comment on lines
+58
to
+62
| - os: ubuntu-22.04 | ||
| id: linux | ||
| label: Linux | ||
| release: R2022b | ||
| claim: Supported MATLAB floor on the pinned Linux runner and legacy graphics/export paths |
Pluze
marked this pull request as ready for review
July 29, 2026 21:09
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Goal and scope
matlab-actions/setup-matlab.User-visible behavior
Validation
docs/development/maintain-and-release/testing.md.Commands and results:
Manual / native behavior not verified:
Documentation and boundaries
docs/history/records/**/*.mdrecord were updated where required.+labkitchanges, if any, are domain-neutral and app-facing.Delivery state
CI / review links:
3693003c.Data hygiene
Unverified behavior