build(deps): land #118 + #124 + #126 as one verified bump; fix avro's stryker blocker (#115) - #128
Merged
Merged
Conversation
Supersedes #118. Drop-in verified: action.yml inputs are byte-identical between v4.3.0 and v6.1.0 (only the node20 -> node24 runtime line differs); all 18 steps pass exactly {path, key, restore-keys}; @v6 resolves to v6.1.0, which adds graceful handling of read-only cache tokens (the accurate 'cache write denied' warning on fork PRs instead of the bogus 'another job may be creating this cache').
Supersedes #124. Benchmark-only dependency (never published downstream). 0.10.0 is dependency maintenance upstream (cats update, scala-collection-compat 2.13.0, Scala.js 1.18.2); our droste surface (Fix, scheme.{cata,ana,hylo}, Algebra/Coalgebra) compiles unchanged and all nine SchemesBench benchmarks execute on the new version.
Supersedes #126. No removed or renamed features reach this build: the setting keys used in build.sbt (strykerReporters, strykerExcludedMutations, strykerThresholdsBreak) are unchanged, the borrowed-tests wiring still resolves, and 1.x requires sbt >= 1.11.2 (we run 1.13.0). Verified with a schemes smoke run (48/58 killed, 0 NoCoverage) and a full avroIntegration run (481 killed / 51 survived / 58 known-macro NoCoverage, no crash). Decisive for issue #115: 1.1.1 fixes stryker4s' rollback invariant crash ('cases should be non-empty') that killed avro's mutation run on main — 0.20.4's mutant removal could empty a Term.Match by deleting its default Pat.Wildcard case; 1.1.1 filters it. Also refreshes the invocation-doctrine comment: the module-scoped <m>/stryker form works again since 0.20.4.
Addresses #115 blocker 1. The flow-typed 'val here = if index != null then index else ...' loses its narrowing the moment stryker4s' mutator rewrites the condition, so two mutants died as compile errors instead of being exercised (and on 0.20.4 that rollback crashed the whole run). Express the narrowing as a match on the null sentinel with an explicit JMap[String, Integer] type: a match has no condition to mutate, so the narrowing is structural rather than flow-based. (The ascribe + 'index.nn' spelling from the issue does not compile here — the guard already narrows, E216 fires, and -Werror rejects the warning.) Applied at both occurrences (totalNominalIndex and recordSlots); AvroCompileError mutants from AvroWalk go to zero.
CLAUDE.md said Scala 3.8.3 / sbt 1.12.9; the project builds Scala 3.9.0 (build.sbt scala3Version) on sbt 1.13.0 (project/build.properties). CONTRIBUTING.md's bootstrap list pointed Scala at build.properties and omitted the JDK 25 requirement for kyo + the docs site. The 'invoke as project <m>; stryker, NOT <m>/stryker' claim stopped being true in 0.20.4 (module-scoped task resolution was fixed upstream); state the history instead of forbidding the working form. The mutationAll alias also covers zio and kyo now, not just the original eight modules. quality-assurance.md's scoverage path follows the Scala version.
This was referenced Oct 2, 2026
Contributor
|
🚀 Cloudflare Pages preview for https://8b18e428.cats-eo-docs.pages.dev Branch alias: https://deps-cache-droste-stryker4s.cats-eo-docs.pages.dev Built from commit |
Contributor
Benchmark A/BAllocation (B/op) — authoritative
442 more benchmarks
Timing (ns/op) — directional only, same-VM but shared runner
base_sha: |
The cache bump landed as a hand-edit of the generated ci.yml (mirroring Dependabot's #118 diff), which githubWorkflowCheck rightly flags: ci.yml is generator-owned (CONTRIBUTING.md: never hand-edit it). This pairs the edit with its source of truth — UseRef.Public("actions", "cache", "v6") in the setup-java cache patch. githubWorkflowGenerate now emits zero workflow drift, so the committed ci.yml is exactly generated output, and githubWorkflowCheck passes.
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.
One combined PR carrying the three safe Dependabot bumps — each individually evaluated and verified — plus the source fix that makes
avro's mutation run scoreable again (issue #115), and a docs refresh. #125 (sbt 2.0.9) is declined and not included — details below.Superseded PRs
actions/cachev4 → v6 (18 sites, 6 workflows)action.ymlinputs byte-identical between v4.3.0 and v6.1.0 (onlynode20→node24differs);@v6resolves to v6.1.0, adding graceful read-only-cache-token handling on fork PRsdroste-core0.9.0-M3 → 0.10.0Fix,scheme.{cata,ana,hylo},Algebra/Coalgebra) compiles unmodified; all 9SchemesBenchbenchmarks execute on 0.10.0sbt-stryker4s0.20.4 → 1.1.1strykerReporters,strykerExcludedMutations,strykerThresholdsBreakunchanged; borrowed-tests wiring intact; needs sbt ≥ 1.11.2, we run 1.13.0). Fixes stryker4s' rollback-invariant crash (cases should be non-empty) that brokeavro's mutation runsbt-typelevel(ci-release / settings / site 0.8.7) has no sbt-2 cross-build at any version — typelevel/sbt-typelevel#899, itself blocked on Laika#774 and sbt-gpg. Everything else already cross-publishes_sbt2_3; a stripped probe showed the codebase itself is sbt-2-clean (full compile + rootsbt test786 examples, 0 failures, JDK 25). Revisit when #899 shipsAlso in here
AvroWalk's flow-typed null narrowing (val here = if index != null then index else …) collapses under stryker's condition mutator, killing two mutants as compile errors (and crashing 0.20.4's rollback). Rewritten as amatchon the null sentinel with an explicitJMap[String, Integer]type — structurally unmutatable narrowing. The issue'sindex.nnspelling does not compile here (E216 under-Werror). Applied at both occurrences (totalNominalIndex,recordSlots);AvroWalk'sCompileErrormutants go to zero. With build(deps): bump io.stryker-mutator:sbt-stryker4s from 0.20.4 to 1.1.1 #126 fixing blocker 2,project avroIntegration; strykerruns clean end-to-end: 481 killed / 51 survived / 58 known-macro NoCoverage.CLAUDE.md/CONTRIBUTING.mdversion pins corrected (Scala 3.9.0 perbuild.sbt'sscala3Version, sbt 1.13.0, JDK 25 required forkyo+ docs site); stryker invocation doctrine updated everywhere — the module-scoped<m>/strykerform works again since 0.20.4, so the docs state the history instead of forbidding a working form (CLAUDE.md,build.sbt,project/plugins.sbt,site/docs/quality-assurance.md).Verification
sbt compile— full root aggregate incl.kyo(JDK 25): greensbt avroIntegration/test— 235 passed / 0 failedsbt docs/mdoc— greenschemessmoke 48/58 killed, 0 NoCoverage; fullavroIntegrationrun, 768 mutants (171IgnoredviastrykerExcludedMutations), no crashSchemesBenchbenchmarks execute on droste 0.10.0scalafmtclean on every touched.scala/.sbt(pinned 3.11.1 engine via sbt)Fixes #115