Skip to content

Fix all failing CI on main: concurrency smoke, MEX parity, example_dock shading, wiki links#175

Merged
HanSur94 merged 2 commits into
mainfrom
claude/bold-zhukovsky-0108e4
Jun 2, 2026
Merged

Fix all failing CI on main: concurrency smoke, MEX parity, example_dock shading, wiki links#175
HanSur94 merged 2 commits into
mainfrom
claude/bold-zhukovsky-0108e4

Conversation

@HanSur94

@HanSur94 HanSur94 commented Jun 1, 2026

Copy link
Copy Markdown
Owner

What

All three workflows that were red on main are fixed. Diagnosed by a fan-out of agents (one per failing workflow, each adversarially verified), then every fix was re-verified locally in MATLAB R2025b.

Workflow (was failing) Root cause Fix
Tests — Concurrency Smoke (ubuntu, macOS) install() only builds MEX inside the needs_build() gate, which probes the committed binary_search_mex. lockfile_mex is the one MEX not committed, so a clean checkout never compiled it and TestConcurrencyIntegration failed. install.m: best-effort ensure-block that compiles lockfile_mex independent of the gate (honours FASTSENSE_SKIP_BUILD, no-ops when present, try/catch → pure-MATLAB sidecar fallback).
Tests — Octave parity + TestMexParity The minmax tail-anchor (commit 31d04b7f) made minmax_core emit 2*nb+1 points; the parity reference oracles still expected 2*nb. Update both oracles (tests/test_mex_parity.m + tests/suite/TestMexParity.m) to mirror the shipped MEX/fallback. The class-suite copy was a latent failure on macOS/Windows MATLAB.
Example Smokeexample_dock Same tail-anchor: the two shaded-region boundaries downsample to different lengths when one is a constant baseline (addFill), so patch() got mismatched XData/YData ("Vectors must be the same length"). libs/FastSense/FastSense.m: each boundary keeps its own downsampled X (xd/xd2); shared cache trimmed to a common length in render and updateShadings.
Wiki Link Check 5 Wiki-Browser pages used bare extensionless links [Event Viewer](Event-Viewer); lychee resolves relative links as file paths and 404s (16 errors). Append .md to every bare target. In-app WikiBrowser strips trailing .md, so navigation is unaffected.

Note: the Tests/parity and Example-Smoke failures are two consumers of the same regression (31d04b7f's tail-anchor).

Verification (MATLAB R2025b, this branch)

  • test_mex_parityPASS (incl. minmax_core_mex parity, the exact assertion that was red)
  • TestMexParity9/9 pass (incl. testMinmaxCoreParity)
  • example_dock → renders all 5 tabs / ~21M pts, incl. the formerly-failing "Power Systems" tile
  • install() → runs clean; guard confirmed reachable on a clean checkout
  • mh_style / mh_lint / mh_metric --ci → clean on all changed files; checkcode adds no new issues
  • Wiki: all 24 link targets now resolve to existing .md files; #refresh-paths anchor left intact

🤖 Generated with Claude Code

…tch, wiki links

Three independent workflows were red on main; all are addressed here.

Tests / Concurrency Smoke (ubuntu-latest, macos-14):
install() only compiled MEX inside the needs_build() gate, which probes the
committed binary_search_mex. lockfile_mex is the one MEX deliberately NOT
committed, so on a clean checkout the gate returned false and
build_concurrency_mex() never ran, leaving TestConcurrencyIntegration without
lockfile_mex. Add a best-effort ensure-block to install.m: honours
FASTSENSE_SKIP_BUILD, no-ops when lockfile_mex already resolves, and is wrapped
in try/catch so a missing C compiler degrades to FileLock's pure-MATLAB sidecar.

Tests / Octave parity (test_mex_parity) and TestMexParity:
the minmax tail-anchor (commit 31d04b7) makes minmax_core emit 2*nb+1 points,
but the parity reference oracles still expected exactly 2*nb. Update both the
flat test and the class-suite oracle to mirror minmax_core_mex.c /
minmax_downsample.m (the latent class-suite copy would have failed on
macOS/Windows MATLAB).

Example Smoke / example_dock:
the same tail-anchor makes the two shaded-region boundaries downsample to
different lengths when one boundary is a constant baseline (addFill), so
patch() received mismatched XData/YData ("Vectors must be the same length").
Keep each boundary's own downsampled X (xd/xd2) and trim the shared cache to a
common length in FastSense.render and updateShadings.

Wiki Link Check:
5 Wiki-Browser pages used bare extensionless links ([Event Viewer](Event-Viewer));
lychee resolves relative links as file paths and cannot find them. Append .md to
every bare target. The in-app WikiBrowser strips a trailing .md, so navigation is
unaffected, and the GitHub-hosted wiki renders the links correctly.

Verified in MATLAB R2025b: test_mex_parity PASS, TestMexParity 9/9,
example_dock renders all 5 tabs, install() runs clean, and
mh_style/mh_lint/mh_metric --ci are clean on the changed files.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@codecov

codecov Bot commented Jun 1, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

…rage)

Add two regression tests to TestAddShaded exercising all three code paths the
shading fix changed:
- testShadedPatchEqualLengthCacheBranch: n>20000 hits render()'s cache branch,
  then a zoom exercises updateShadings().
- testShadedPatchEqualLengthMidBranch: 5000<n<=20000 hits render()'s mid-size
  branch.

A monotonic upper curve + constant fill baseline deterministically makes the
two boundaries downsample to different lengths (minmax tail-anchor), so each
test would have thrown "Vectors must be the same length." on the pre-fix code
and now asserts equal-length patch XData/YData. Covers the 15 lines flagged by
codecov/patch. Lives in TestAddShaded (A-D shard) to stay clear of the flaky
TestTagPerfRegression perf gate in the Q-Z shard.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@HanSur94

HanSur94 commented Jun 1, 2026

Copy link
Copy Markdown
Owner Author

Patch coverage addressed in b4f953f. Added two regression tests to TestAddShaded that execute all 15 previously-uncovered lines: render()'s cache branch (n>20000) and mid-size branch (5000<n≤20000), plus updateShadings() via a zoom. A monotonic upper curve over a constant fill baseline makes the two boundaries downsample to different lengths (the minmax tail-anchor), so each test would have thrown "Vectors must be the same length." on the pre-fix code. Codecov re-evaluates on the new commit.

ℹ️ The MATLAB Tests (Q-Z) red on the prior commit was TestTagPerfRegression/testSensorTagGetxyGate — a relative-timing perf gate (overhead_pct <= 5) in SensorThreshold, untouched by this PR and historically flaky on shared CI runners. The fresh run should clear it.

@HanSur94 HanSur94 merged commit b8197bf into main Jun 2, 2026
23 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant