|
| 1 | +@def rss_pubdate = Date(2026,1,4) |
| 2 | +@def rss = """Introducing SciML Health Bots: Lowering Barriers While Raising Standards""" |
| 3 | +@def published = " 4 January 2026 " |
| 4 | +@def title = "Introducing SciML Health Bots: Lowering Barriers While Raising Standards" |
| 5 | +@def authors = """<a href="https://github.com/ChrisRackauckas">Chris Rackauckas</a>""" |
| 6 | + |
| 7 | +# Introducing SciML Health Bots: Lowering Barriers While Raising Standards |
| 8 | + |
| 9 | +**How do you make contributing easier while demanding more from the code?** |
| 10 | + |
| 11 | +SciML has 200+ packages with stricter standards than most of the Julia ecosystem. We test for static compilability, type stability, and interface consistency. Many upstream packages don't—AD packages like Zygote and Enzyme frequently introduce regressions, and foundational packages like Distributions.jl don't test for `juliac --trim` compatibility or static interfaces. |
| 12 | + |
| 13 | +This means SciML is often the first to discover upstream bugs. We file issues, contribute fixes, and wait. But in the meantime, CI stays red. Maintainers have to remember "oh yeah, that's the Zygote issue." Contributors unfamiliar with the repo see red badges and don't know if their PR broke something or if it's a known issue. Merging requires manually checking logs to verify "the right test" is failing. This process is time-consuming and error-prone. |
| 14 | + |
| 15 | +We want to raise standards even higher: |
| 16 | + |
| 17 | +- Every SciML package compatible with `juliac --trim` |
| 18 | +- Well-defined interfaces with tested assumptions (no relying on 1-based indexing, proper number type compatibility, GPU support) |
| 19 | +- Explicit imports only—no `using` in package code |
| 20 | +- Pull the rest of the Julia ecosystem toward these stricter coding practices |
| 21 | + |
| 22 | +The question is: **how do we do this without sacrificing the ease of contributions SciML has always had for mathematicians and scientists?** How do we make contributing *even easier* while making code requirements *stricter*? |
| 23 | + |
| 24 | +Our answer: **AI agents that enforce the hard stuff, track upstream issues, keep CI green, and let humans focus on the science.** |
| 25 | + |
| 26 | +## The Key Insight |
| 27 | + |
| 28 | +Strictness and accessibility only conflict when *humans* enforce the rules. With bots: |
| 29 | + |
| 30 | +- Contributors don't memorize rules—bots explain violations |
| 31 | +- No tribal knowledge about "known failures"—red means your code, green means merge |
| 32 | +- Maintainers review architecture, not compliance |
| 33 | + |
| 34 | +## New Standards |
| 35 | + |
| 36 | +- **Always-green CI.** Green means merge. Red means your PR. No ambiguity. |
| 37 | +- **Trim compatibility.** Explicit imports, static dispatch, no runtime codegen. |
| 38 | +- **Static interfaces.** Type-stable APIs, consistent patterns. |
| 39 | +- **Performance is a bug.** Regressions tracked and fixed automatically. |
| 40 | + |
| 41 | +## Bot Types |
| 42 | + |
| 43 | +13 specialized agents run continuously across all SciML repositories: |
| 44 | + |
| 45 | +| Bot | Purpose | |
| 46 | +|-----|---------| |
| 47 | +| **CI Health Check** | Diagnose and fix CI failures, keep all repos green | |
| 48 | +| **Issue Solver** | Investigate bugs, prioritize `bug`-labeled issues | |
| 49 | +| **Dependency Update** | Handle upstream version bumps and breaking changes | |
| 50 | +| **Explicit Imports** | Add explicit imports for trim compatibility | |
| 51 | +| **Static Improvement** | Fix type instabilities and interface inconsistencies | |
| 52 | +| **Performance Check** | Detect regressions, track benchmarks | |
| 53 | +| **Deprecation Fix** | Update deprecated API usage | |
| 54 | +| **Interface Check** | Verify consistent APIs across packages | |
| 55 | +| **Docs Improvement** | Fix documentation issues | |
| 56 | +| **Version Bump** | Check for needed releases | |
| 57 | +| **Min Version Bump** | Update compat bounds | |
| 58 | +| **Precompilation** | Improve load times | |
| 59 | +| **Benchmark Check** | Monitor SciMLBenchmarks.jl | |
| 60 | + |
| 61 | +Up to 48 agents run concurrently. Control which types are active: |
| 62 | + |
| 63 | +```bash |
| 64 | +sciml-ctl tasks show # See enabled bots |
| 65 | +sciml-ctl tasks only ci_health_check # Focus on CI health |
| 66 | +sciml-agents list # See running agents |
| 67 | +``` |
| 68 | + |
| 69 | +## The Bug Fix Flow |
| 70 | + |
| 71 | +When CI Health Check detects a failure, it follows a resolution hierarchy: |
| 72 | + |
| 73 | +**1. Try to fix it directly:** |
| 74 | +- Cap a dependency version in `[compat]`? |
| 75 | +- Fix the code? |
| 76 | +- Make behavior conditional on Julia version? |
| 77 | +- Add a missing explicit import? |
| 78 | + |
| 79 | +**2. If it can't fix it, keep CI green anyway:** |
| 80 | +- Mark the failing test as `@test_broken` or skip conditionally |
| 81 | +- Open a `bug`-labeled issue with full diagnostics |
| 82 | +- PR merges, CI stays green |
| 83 | + |
| 84 | +**3. Issue Solver picks it up:** |
| 85 | +- Issue Solver prioritizes `bug`-labeled issues |
| 86 | +- It attempts deeper fixes the CI Health Check couldn't do |
| 87 | +- If solved, removes the `@test_broken` marker and closes the issue |
| 88 | + |
| 89 | +This creates a cycle: **CI stays green, but regressions are tracked as issues and continuously worked on.** Contributors never see mysterious red badges from problems that predate their PR. Maintainers see a clear issue queue of known problems being actively resolved. |
| 90 | + |
| 91 | +## For Contributors |
| 92 | + |
| 93 | +Submit your PR. If something's wrong, a bot explains what and suggests a fix. Green CI? Merge. You never see failures that aren't yours. |
| 94 | + |
| 95 | +## The Result |
| 96 | + |
| 97 | +Standards rise. Barriers fall. Contributors ship with confidence. Maintainers focus on code quality, not rule enforcement. |
| 98 | + |
| 99 | +--- |
| 100 | + |
| 101 | +*The bots are running now across SciML repositories. Questions? [GitHub Discussions](https://github.com/orgs/SciML/discussions) or [Julia Discourse](https://discourse.julialang.org/).* |
0 commit comments