the nightly runs the big C++ tests - ctest -L big after the AOT sweep on every Release cell; the two style_lint fixture tests that were red on master lint their fixtures again and run per PR as small - #3975
Conversation
There was a problem hiding this comment.
🟢 Approval recommended
The changes are cohesive and low-risk, and the updated skip/label logic matches the stated CI/test intent without introducing obvious behavioral regressions.
Pull request overview
This PR closes a CI coverage gap by actually executing the big-labelled C++ tests in nightly Release runs (after the full AOT sweep), and fixes utils/lint so the --lint-fixtures override truly forces linting of expectation/fixture files. It also reclassifies the two style_lint fixture tests as small so they run on every PR.
Changes:
- Run
ctest -L big -E memory_model_4gbin the nightly “Slow Release Tests” step for Release matrix cells. - Fix
utils/lintskipping logic so--lint-fixturesbypasses content-based skip reasons (includingexpect-style files). - Relabel the two
style_lintfixture tests frombigtosmall, and update the related checklist/docs accordingly.
File summaries
| File | Description |
|---|---|
.github/workflows/build.yml |
Adds nightly execution of big ctest label after the AOT sweep in Release cells. |
utils/lint/main.das |
Makes --lint-fixtures override content-based skip reasons so fixtures are actually linted. |
tests-cpp/big/style_lint/CMakeLists.txt |
Relabels fixture lint tests as small and wires them into the test-small aggregate target. |
tests-cpp/big/REVIEW.md |
Updates the “big tests” checklist language to reflect nightly/manual workflow coverage. |
skills/internal/writing_cpp_tests.md |
Updates guidance to reflect that big tests run on nightly/manual full-workflow runs, not per-PR. |
Review details
- Files reviewed: 5/5 changed files
- Comments generated: 0
- Review effort level: Lite
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
…e AOT sweep - ctest -L big on every Release cell, memory_model_4gb excluded: the standalone context, the nano context, concurrent init and the C API split init have always been built by the default target on every lane and never executed, since every per-PR ctest is -L small, so no lane linked and ran a generated context (v0.6.4-RC2 shipped a -ctx that did not link and never ran its initializers, issue #3967); memory_model_4gb allocates a real 4 GB chunk and stays local-only. Running the set showed the two style_lint fixture tests red on master: the lint CLI's content skip for an `expect` file fired before the --lint-fixtures override the comment beside it promised, so both fixtures were skipped and neither STYLE014 nor STYLE015 was ever printed - lint_file_skip_reason takes an expect_skips flag the CLI clears under --lint-fixtures, while a lint-skip-file directive keeps winning whatever the caller (tests/lint/test_stale_nolint.das pins that), and the two tests are labelled small since each is one sub-second lint of one fixture, so every per-PR ctest runs them. tests-cpp/big/REVIEW.md and the C++ test skill state the contract as it now is: per-PR CI runs -L small, -L big runs on the nightly and on a manual full-workflow run Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
deaedc4 to
25a716f
Compare
There was a problem hiding this comment.
🟢 Approval recommended
The changes are coherent and consistent across workflow, lint behavior, and documentation, and I didn’t find any correctness or integration issues in the updated call sites/targets.
Review details
- Files reviewed: 6/6 changed files
- Comments generated: 0 new
- Review effort level: Lite
Why. Every per-PR and nightly ctest in CI is
-L small, so the big-labelled C++ tests - a generated standalone context linked and run, the nano context, concurrent init, the C API split init - are built by the default target on every lane and executed on none. v0.6.4-RC2 shipped a-ctxwhose generated code did not link and, once linked, never ran its initializers (#3967);tests-cpp/big/standalone_ctxshows both, and no lane ran it.What changes.
ctest -L big -E memory_model_4gbafter the AOT sweep, on every Release cell the step already covers - Linux, macOS and Windows, sanitizer cells included. No extra build: the binaries are already in the default target.memory_model_4gballocates a real 4 GB chunk and stays local-only, as its CMakeLists says.style_lintfixture tests red on master: the lint CLI's content skip for anexpectfile fired before the--lint-fixturesoverride the comment beside it promised, so both fixtures were skipped and neither STYLE014 nor STYLE015 was ever printed.lint_file_skip_reasontakes anexpect_skipsflag (default true, so the MCP lint tool is unchanged) that the CLI clears under--lint-fixtures; a// lint-skip-filedirective keeps winning whatever the caller, whichtests/lint/test_stale_nolint.daspins.small: each is one sub-second lint of one fixture, so every per-PR ctest runs them and the lint fix has a per-PR row.tests-cpp/big/REVIEW.mdstates the contract as it now is: per-PR CI runs-L small, the nightly runs-L bigafter the merge.Observable behavior.
daslang utils/lint/main.das -- --lint-fixtures true <expect fixture>: skipped -> linted, findings printed. Without the flag anexpectfile is still skipped.Where to look.
.github/workflows/build.yml, the "Slow Release Tests" step - thectestline sits after thecase, so every arm, the 32-bit Windows one included, runs it;utils/lint/main.dasset_skip_reason, one condition.Validation, claims, ledger
Validation
ctest --test-dir build --build-config Release -L big -E memory_model_4gb --output-on-failure- 6 of 6 pass in 21 s (standalone_ctx, nano_ctx, concurrent_init, concurrent_init_dyn, capi_split_init, cpp_module_pull). Before the lint fix and relabel the same command was 6 of 8, the two style_lint tests failing on a skipped fixture.ctest -L small -R style_lint: 2 of 2 after the relabel;tests/lint/test_stale_nolint.das7 of 7, itslint-skip-filearm being the one a first cut of this fix broke on the modules lane.--lint-fixturesstill reports SKIP; with it, two STYLE014 findings.python3 ci/test_ci_matrix.py: 18 tests OK; the workflow parses.tests-cpp/big/REVIEW.mdtwice: the first round corrected the rationale (a manual full-workflow run can target a PR branch), the fresh cold read after it is all-OK, and it found the sentence inskills/internal/writing_cpp_tests.mdthat this change made false, fixed here.Lint candidate
CMakeLists.txtLABELSand fails abighit whose PR body names noctest -L bigrun;tests-cpp/REVIEW.dasalready parses those labels. Not written here.Claims - stated, not tested
casearms and env exports are unchanged, and the added line uses the samectest --test-dir build --build-configshape the RelWithDebInfo nightly already uses. A big test that fails under a sanitizer shows up on the first nightly, which is the point.-ctxcontext on that lane.Not done
tests-cpp/big/standalone_module_global(a required module owning initialized globals, linked and run) is a real gap beside master's emit-only test and is not added here.🤖 Generated with Claude Code