Maintenance Mainline
MoUI keeps a narrow default maintenance baseline so the framework can keep growing without turning every diagnostic route into daily release pressure.
| Tier | Canonical routes | Gate |
|---|---|---|
| Tier 1 | macOS Skia, Web wasm-gc WebGPU (Canvas2D fallback) |
Blocking: PR build/test, daily presentation, and release evidence |
| Tier 2 | Windows Skia, Linux Skia |
Blocking: L0-L2 and first frame; complete L3 may remain partial |
| Tier 3 | macOS WGPU (CoreText, Cosmic fallback), Windows WGPU (DirectWrite, Cosmic fallback), Linux WGPU (Fontconfig, Cosmic fallback), Android window-hosted Skia, iOS window-hosted Skia, HarmonyOS window-hosted Skia, macOS Sun, Windows Sun, Linux Sun, WeChat Skyline Canvas2D |
Non-blocking: scheduled/manual build, run, and evidence |
Tier, L0-L3 evidence, and product_class/ready are independent. Source: checks/platform-matrix.json; actual observations remain in checks/platforms/*.json.
Status Classes
mainline: covered by the defaultsh scripts/check.sh --profile dailypath. Mainline work must stay green before ordinary handoff.diagnostic: runnable, testable, and allowed to record observation, but not a default daily gate. Run the matching opt-in flag or focused command when the diagnostic route changes.pending: documented scaffold or capability note exists, but the route must not be described as ready until matching smoke has run.
Default Baseline
The default daily baseline covers:
moui/coreandmoui/viewsmoui/backendandmoui/backend/webmoui/render,moui_skia_renderer, andmoui_web_renderer- fallback-safe
moui_skiachecks - Showcase app/Web wasm-gc validation
- renderer/provider static checks and lightweight Web handoff validation
- maintenance baseline ratchets for oversized source files, source-level
pub(all)counts, and root facade type-forwarding counts - API surface package budgets plus semantic classification budgets for
core,views,runtime,backend, andrender
Complete platform runtime smoke is a release or matching-host gate, not a default daily gate. Daily checks do not require fresh matching-host promotion.
Engineering Baseline Ratchets
The maintenance baseline ratchets are implemented as the MoonBit tool at
tools/moui/validate_maintenance_baseline. They scan MoUI-owned MoonBit source
under moui/, examples/, and website/, excluding generated
pkg.generated.mbti files, vendored .mooncakes/ trees, build output, and
generated Unicode fixture tests. The default sh scripts/check.sh --profile daily path
runs the guard through node scripts/validate-maintenance-baseline.mjs; run
that wrapper directly when splitting files, shrinking pub(all), or reducing
root facade forwards, then ratchet the relevant budget downward in the same
change.
The guard tracks three budgets:
- oversized file ratchets for current hotspots such as
moui/core/unicode/grapheme_data.mbt,moui/runtime/view_tree.mbt,moui/views/form/form_validation_test.mbt,moui/backend/commonlifecycle/image tests, Skia renderer text/tests, and large example app files; - direct package source
pub(all)counts for core, views, host, render, mainline examples, Mo Workbench, PDF Workbench, and Website; - root facade
pub typeforwarding count inmoui/moui.mbt.
The API surface guard is separate from this maintenance baseline. It tracks
generated public API size, forbidden boundary tokens, and semantic API
classification budgets such as app_constructor, advanced_core_protocol,
runtime_diagnostic, host_contract, and renderer_contract. See
API surface and
API surface audit before expanding public API.
Application performance guardrails are also separate from source-size and API
ratchets. checks/performance-budgets.json owns the reviewed thresholds and
update policy; node scripts/validate-performance-budgets.mjs validates the
catalog in the PR profile, while the macOS benchmark job compares real Skia
Raster samples and uploads the ignored result artifact. Do not weaken a
threshold to accommodate an unexplained regression or compare artifacts from a
different runner.
Current max values intentionally match today's debt so unrelated changes do
not need to solve the whole backlog. When a refactor splits a file, moves
control-level entrypoints into views, shrinks public surface area, or removes
root facade forwards, lower the corresponding budget in the same commit.
The default wrapper runs the daily scope. The MoonBit tool also supports a
full-workspace hotspot scope:
moon run tools/moui/validate_maintenance_baseline --target native -- --scope full
The full scope keeps the daily budgets and additionally scans addon/tool
workspace roots such as moui_richtext, moui_skia, moui_sun, moui_theme,
moui_tests, moui_devtools, moui_webview, moui_agent*, and tools.
Known large files have explicit full-only temporary budgets so broad validation
can report hotspots without forcing every 2k-4k line diagnostic/test file into
the daily baseline or this refactor. Split those files in focused follow-up
changes and ratchet their full-only budgets down as each split lands.
Diagnostic Routes
Native WGPU is an experimental renderer diagnostic route. Its engineering
gate stays diagnostic — runnable, testable, allowed to record observation,
but not a default daily gate and carrying no product commitment. It
stays available through sh scripts/check.sh --profile full and focused
renderer/provider commands, but it is not the native mainline.
Design Systems is addon diagnostic coverage. moui_theme and
examples/design_systems remain important source-mapped preview/parity
surfaces, but they are not part of the core MoUI framework baseline. Run
sh scripts/check.sh --profile theme when changing moui_theme or
the Design Systems example.
Slow native example builds and matching-host platform runtime collection remain
opt-in through --profile full, real Skia smoke helpers, and direct
runtime logs.