Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
6d02597
Correct en-GB-oxendict spellings in code symbols and prose
leynos Aug 28, 2026
f692353
Document installer dependency module layout
leynos Sep 4, 2026
c9639a2
Document 0.3.0 API migration
leynos Sep 4, 2026
9222b5e
Fix lint-hardening review findings
leynos Sep 4, 2026
37d230f
Regenerate lockfile after rebase
leynos Sep 4, 2026
bfa2899
Parameterize executable permission tests
leynos Sep 4, 2026
06faa31
Pin SARIF wire keys and harden PATH discovery
leynos Sep 5, 2026
f1994ff
Ignore agent memory scratch directory
leynos Sep 8, 2026
284371b
Complete spelling migration contracts (#397-401)
Sep 26, 2026
82d1633
Preserve deliberate spelling contract terms
Sep 27, 2026
5538276
Document changed lint callbacks (#398)
Sep 27, 2026
3c2b61d
Bound compile-contract tests for CI (#401)
Sep 27, 2026
f51112c
Complete spelling review coverage
Sep 27, 2026
16e118b
Improve installer PATH diagnostics
Sep 27, 2026
87f3839
Consolidate PATH scan tests
Sep 27, 2026
7a52fe2
Refine spelling, tracing, and test helpers
Oct 14, 2026
05a4a47
Address PR #363 review findings
Oct 15, 2026
4fef0a4
Simplify tracing test structure
Oct 15, 2026
a1fcacc
Refresh lockfile and gate Unix tracing probe
Oct 15, 2026
233f60f
Test installer tracing through the real CLI (#363)
Oct 15, 2026
98ffa18
Clarify compile-contract test inventory
Oct 15, 2026
ac625ae
Reduce coverage build disk usage
Oct 15, 2026
8de12b2
Document PATH scan helper results
Oct 15, 2026
97750e5
Bound coverage profiles during nextest
Oct 15, 2026
d4571f2
Harden dependency checks and compile-contract tests
Oct 16, 2026
f3a457b
Resolve installer maintainability findings
Oct 16, 2026
01f4b86
Split source-policy cloning from `Clone::clone`
Oct 16, 2026
dfbdc29
Harden installer and compile-contract checks
Oct 17, 2026
9eb7a5c
Fix Windows PATH scan fixture
Oct 17, 2026
3eec56d
Harden installer validation and gate contracts
Oct 17, 2026
0aaedc0
Consolidate installer query failure tests
Oct 17, 2026
ff994df
Document touched Rust functions (#398)
Oct 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
76 changes: 45 additions & 31 deletions .config/nextest.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,11 @@ default-filter = "not (binary(behaviour_toolchain) | binary(behaviour_cli) | kin
# cancels the run and discards the log that would have named the test.
slow-timeout = { period = "300s", terminate-after = 1, grace-period = "5s" }
# The whole run's budget. It sits above the largest per-test allowance below,
# so a test may spend its budget in full. It also leaves fifteen minutes beyond
# the prior whole-run timeout, which stopped a nearly complete suite.
# so a test may spend its budget in full. The previous 75-minute run reached
# 1,840 of 1,842 tests before the nested SARIF API contract was still compiling.
# Ten more minutes give that remaining trybuild work room to finish.
# See "Test timeouts: four tiers, outermost last" in the developers' guide.
global-timeout = "60m"
global-timeout = "85m"

# CI profile — run the full suite including slow installer tests.
[profile.ci]
Expand All @@ -31,7 +32,7 @@ default-filter = "not kind(example)"
# budgets that govern CI belong where a reader of this profile finds
# them.
slow-timeout = { period = "300s", terminate-after = 1, grace-period = "5s" }
global-timeout = "60m"
global-timeout = "85m"

[[profile.ci.overrides]]
# The toolchain auto-install behavioural tests may download and install a
Expand All @@ -42,41 +43,48 @@ test-group = "serial-toolchain-installs"

[[profile.ci.overrides]]
# Dylint UI harnesses build lint libraries; the default profile gives them
# the same allowance below. `trybuild` compile-contract binaries belong
# here too: they invoke a nested cargo build, so they cost what a build
# costs rather than what a test costs. `whitaker-installer`'s binary is
# the same allowance below. Compile-contract tests use the dedicated
# 45-minute override below.
# `whitaker-installer`'s binary is
# named `ui` but its test is not, so the `(binary(ui) & test(=ui))`
# clause does not reach it; it measured 235 s and timed out at 300 s on
# the Windows lane under the base allowance. A full workspace run also
# reached 9m56 in the trybuild harness while compiler admission queued.
# Keep that nested build bounded while leaving room to finish under contention.
filter = "test(driver::ui::) | test(tests::ui::) | test(ui::ui) | test(sha2_0_11_pre_migration_patterns_fail_to_compile) | test(trybuild_fixtures_compile_without_diagnostics) | (binary(ui) & test(=ui))"
filter = "test(driver::ui::) | test(tests::ui::) | test(ui::ui) | (binary(ui) & test(=ui))"
slow-timeout = { period = "20m", terminate-after = 1, grace-period = "5s" }
test-group = "serial-dylint-ui"

[[profile.ci.overrides]]
# The macro crate's trybuild contract builds fixture crates too, so it needs a
# build-sized timeout and the same serial target-directory protection.
filter = "test(fixture_expansion_lint_attribute_contract)"
slow-timeout = { period = "20m", terminate-after = 1, grace-period = "5s" }
# Every discovered trybuild test builds fixtures through nested Cargo. Keep
# them under one build-sized allowance and avoid retries that repeat the work.
filter = "test(dependency_check_result_contract_is_public) | test(fixture_expansion_lint_attribute_contract) | test(normalize_settings_is_public_and_the_legacy_name_stays_removed) | test(renamed_common_apis_are_public_and_legacy_names_stay_removed) | test(renamed_sarif_api_is_public_and_legacy_names_stay_removed) | test(sha2_0_11_pre_migration_patterns_fail_to_compile) | test(trybuild_fixtures_compile_without_diagnostics)"
slow-timeout = { period = "45m", terminate-after = 1, grace-period = "5s" }
test-group = "serial-dylint-ui"
retries = 0
Comment thread
coderabbitai[bot] marked this conversation as resolved.

[[profile.ci.overrides]]
# The parser-pin cases run nested Cargo checks in isolated workspaces and need
# the longer allowance while compiler admission queues.
# The parser-pin fixtures run nested Cargo builds with isolated targets. Their
# longer allowance reflects a full interval spent queued for compiler slots.
filter = "binary(build_script_integration)"
slow-timeout = { period = "30m", terminate-after = 1, grace-period = "5s" }
test-group = "serial-build-script-integration"
slow-timeout = { period = "45m", terminate-after = 1, grace-period = "5s" }
test-group = "serial-nested-cargo-builds"

[[profile.ci.overrides]]
# This feature-disabled build also uses a fresh target directory; allow it to
# finish after nested Cargo waits for shared compiler admission.
filter = "binary(no_default_features_build)"
slow-timeout = { period = "20m", terminate-after = 1, grace-period = "5s" }
test-group = "serial-nested-cargo-builds"

# Serialise dylint UI tests that build lint libraries and use
# Serialize dylint UI tests that build lint libraries and use
# `#[serial]`. nextest runs each test in its own process, so the
# `serial_test` crate's in-process mutex has no effect. A test-group
# with max-threads = 1 prevents concurrent lint-library builds from
# racing on the shared target directory.
[test-groups]
serial-dylint-ui = { max-threads = 1 }
serial-toolchain-installs = { max-threads = 1 }
serial-build-script-integration = { max-threads = 1 }
serial-nested-cargo-builds = { max-threads = 1 }

[[profile.default.overrides]]
# Include crate-local UI entrypoints that wrap dylint UI fixtures.
Expand Down Expand Up @@ -110,29 +118,35 @@ serial-build-script-integration = { max-threads = 1 }
# dev-dependency proc-macro hangs during cargo's dev-dependency resolution on
# Windows CI regardless of whether any example source uses rstest, so all
# Dylint example compilation for that crate is compiled away on Windows.
# The trybuild harness reached 9m56 in a full run while compiler admission
# queued, so allow 20 minutes for the complete serial UI group.
filter = "test(driver::ui::) | test(tests::ui::) | test(ui::ui) | test(sha2_0_11_pre_migration_patterns_fail_to_compile) | test(example_compiles_without_diagnostics) | test(example_harness_collects_call_site_evidence) | test(trybuild_fixtures_compile_without_diagnostics) | test(ui::example_compiles_under_test_harness) | test(ui::hand_written_test_companion_does_not_exempt_parent_function) | test(ui::rstest_unwrap_outside_tests_still_fails_in_non_harness_code) | test(ui::rstest_empty_companion_does_not_exempt_parent_function) | test(ui::aliased_test_crate_non_companion_does_not_exempt_parent_function) | (binary(ui) & test(=ui))"
# The installer UI case measured 235 s and timed out at the 300 s base
# allowance on Windows. Allow nested UI builds to finish while keeping a cap.
filter = "test(driver::ui::) | test(tests::ui::) | test(ui::ui) | test(example_compiles_without_diagnostics) | test(example_harness_collects_call_site_evidence) | test(ui::example_compiles_under_test_harness) | test(ui::hand_written_test_companion_does_not_exempt_parent_function) | test(ui::rstest_unwrap_outside_tests_still_fails_in_non_harness_code) | test(ui::rstest_empty_companion_does_not_exempt_parent_function) | test(ui::aliased_test_crate_non_companion_does_not_exempt_parent_function) | (binary(ui) & test(=ui))"
test-group = "serial-dylint-ui"
retries = { backoff = "exponential", count = 2, delay = "5s" }
slow-timeout = { period = "20m", terminate-after = 1, grace-period = "5s" }

[[profile.default.overrides]]
# The macro crate's trybuild contract builds fixture crates too, so it needs a
# build-sized timeout and the same serial target-directory protection.
filter = "test(fixture_expansion_lint_attribute_contract)"
slow-timeout = { period = "20m", terminate-after = 1, grace-period = "5s" }
# Every discovered trybuild test builds fixtures through nested Cargo. Keep
# them under one build-sized allowance and avoid retries that repeat the work.
filter = "test(dependency_check_result_contract_is_public) | test(fixture_expansion_lint_attribute_contract) | test(normalize_settings_is_public_and_the_legacy_name_stays_removed) | test(renamed_common_apis_are_public_and_legacy_names_stay_removed) | test(renamed_sarif_api_is_public_and_legacy_names_stay_removed) | test(sha2_0_11_pre_migration_patterns_fail_to_compile) | test(trybuild_fixtures_compile_without_diagnostics)"
slow-timeout = { period = "45m", terminate-after = 1, grace-period = "5s" }
test-group = "serial-dylint-ui"
retries = 0

[[profile.default.overrides]]
# These parser-pin integration cases run nested Cargo checks in isolated
# workspaces; a cold build may queue behind other admitted compiler work.
# These parser-pin and no-default-feature cases run nested Cargo builds in
# isolated targets; a cold build may queue behind admitted compiler work.
filter = "binary(build_script_integration)"
slow-timeout = { period = "30m", terminate-after = 1, grace-period = "5s" }
test-group = "serial-build-script-integration"
slow-timeout = { period = "45m", terminate-after = 1, grace-period = "5s" }
test-group = "serial-nested-cargo-builds"

[[profile.default.overrides]]
filter = "binary(no_default_features_build)"
slow-timeout = { period = "20m", terminate-after = 1, grace-period = "5s" }
test-group = "serial-nested-cargo-builds"

[[profile.default.overrides]]
# Serialise ignored exclusion integration tests when they are explicitly run.
# Serialize ignored exclusion integration tests when they are explicitly run.
# They build and stage the lint library before invoking `cargo dylint`, so they
# share the same target-directory race risk as the UI harnesses above.
filter = "binary(integration_exclusion)"
Expand Down
7 changes: 4 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -69,11 +69,11 @@ jobs:
coverage-check:
if: github.event_name == 'pull_request'
runs-on: ubicloud-standard-2-ubuntu-2404
# Above the 60 m nextest global timeout plus a cold build and the work
# Above the 85 m nextest global timeout plus a cold build and the work
# either side of the suite. A ceiling merely above the suite's budget
# cancels the job before nextest can report the overrun, and a
# cancellation discards the log that would have explained it.
timeout-minutes: 100
timeout-minutes: 120
defaults:
run:
shell: bash
Expand Down Expand Up @@ -505,7 +505,8 @@ jobs:
# when the `ci` profile is selected, so the named toolchain and UI
# tests were bounded; what nothing bounded was every other test, the
# `ci` profile having declared no base `slow-timeout` of its own.
timeout-minutes: 100
# The 120 m job ceiling includes the 85 m suite budget and cold setup.
timeout-minutes: 120
env:
# `windows-latest` is a 4 vCPU GitHub-hosted shape, so it does not share
# the Ubicloud constant used by the Linux lanes.
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/coverage-main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -74,9 +74,9 @@ jobs:
# admits `main` alone; the codescene environment contract holds it to
# this job.
environment: codescene
# Above the 60 m nextest global timeout plus a cold build and the work
# Above the 85 m nextest global timeout plus a cold build and the work
# either side of the suite; kept in step with ci.yml's coverage lane.
timeout-minutes: 100
timeout-minutes: 120
defaults:
run:
shell: bash
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -24,3 +24,6 @@ htmlcov/
*.swp
*.swo
*~

# Session scratch produced by local agent tooling.
.memories/
1 change: 1 addition & 0 deletions .markdownlint-cli2.jsonc
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
".vtcode/**",
".terraform/**",
".uv-cache/**",
".memories/**",
"memories/**",
"CRUSH.md"
]
Expand Down
69 changes: 69 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ toml = "1.1.2"
metrics = "0.24.2"
metrics-util = "0.20.1"
tracing = { version = "0.1.44", default-features = false, features = ["attributes", "std"] }
tracing-subscriber = "0.3.20"
thiserror = "2"
trybuild = "1.0.116"
log = "0.4.28"
Expand Down Expand Up @@ -117,6 +118,7 @@ rstest = { workspace = true }
rstest-bdd = { workspace = true }
rstest-bdd-macros = { workspace = true }
dylint_testing = { workspace = true }
whitaker_test_macros = { workspace = true }

[lints.clippy]
pedantic = { level = "warn", priority = -1 }
Expand Down
Loading
Loading