Skip to content

Rule catalog

qual defines 92 rule IDs in four families, and all 92 are implemented. The authoritative catalog definition is DESIGN.md section 7.

One implemented rule is opt-in: MLP225 has default_enabled: false and the capabilities cost-report + local-fork-overlay — its home is the cost command's fork fast-path section under a local-fork knowledge profile, and only an exact --select MLP225 evaluates it in check.

Rule selection controls diagnostics only. The StaticFacts v0 public semantic projection emitted by qual static-facts requests all facts in its contract independently of --select, --ignore, suppressions, confidence thresholds, and baselines. Renderer risk facts in that projection are static evidence, not new diagnostics and not permission to skip or fork rendering.

Columns:

  • Default severityerror / warning / info; what the rule reports unless configuration changes it.
  • Min confidence — the lowest confidence (certain / high / medium / low) at which the rule is allowed to fire. Individual diagnostics can carry a higher confidence than this floor, never a lower one.
  • Implemented IDs link to their full documentation, which is also available as qual explain <ID>.

MLC — lifecycle / correctness (31 implemented, 0 reserved)

ID Status Default severity Min confidence Summary Blocked on
MLC000 implemented error certain Python source cannot be parsed
MLC001 implemented warning certain Invalid or unknown inline suppression comment
MLC101 implemented error certain Scene.play requires at least one animation
MLC102 implemented error high Scene.play argument cannot be converted to an Animation
MLC103 implemented error certain Bound mobject method passed to Scene.play (pre-0.6 API)
MLC104 implemented error certain Literal non-positive run_time or wait duration
MLC105 implemented error high Updater callback cannot bind to Manim's positional invocation
MLC106 implemented error certain wait() combines stop_condition with frozen_frame=True
MLC107 implemented error high MoveToTarget without generate_target() on any path
MLC108 implemented warning high Two animations in one play write the same channel of the same mobject
MLC109 implemented error certain AnimationGroup / Succession constructed without animations
MLC110 implemented error certain Mobject.add(self) or a proven parent cycle
MLC111 implemented info medium Updater-bearing object is in neither the scene family nor an animation
MLC112 implemented warning high Default wait() freezes while a frame-varying one-argument updater is active
MLC113 implemented error certain Animation kwargs passed after a .animate method access
MLC114 implemented error high Unsupported .animate method chain containing an override animation
MLC115 implemented warning high Scene.remove(child) is undone by re-adding the surviving parent
MLC116 implemented info medium Later operations confuse post-Transform source/target identity with scene membership
MLC117 implemented warning high Mobject changed between .animate builder creation and play
MLC118 implemented info medium Normal animation targets a mobject with an active updater and the suspend/resume state divergence is provable
MLC119 implemented error high Scene.replace(old, new) with old definitely not in the scene
MLC120 implemented error high Restore without save_state() on any path
MLC121 implemented error high Scene.play / wait / pause called from a per-frame callback
MLC122 implemented error high ApplyMethod receives a method call result, not the bound method
MLC123 implemented error high ApplyFunction callback returns no mobject on some path
MLC124 implemented warning high .animate chains a method that does not mutate the target
MLC125 implemented warning high remove_updater callback identity matches no registered updater
MLC126 implemented error high Family child is not a Mobject, or not a VMobject in a VGroup
MLC127 implemented info certain Duplicate child passed twice in one add() / VGroup() / Group()
MLC128 implemented error high Scene subclass __init__ never calls super().__init__()
MLC129 implemented warning medium play(..., lag_ratio=...) does not stagger multiple animations

MLR — rendering / renderer compatibility (27 implemented, 0 reserved)

ID Status Default severity Min confidence Summary Blocked on
MLR101 implemented error high Create/Write-style animations require a vectorized (VMobject) target
MLR102 implemented warning high Bare .animate without a method call is played; the animation changes nothing
MLR103 implemented error high Python escape in a non-raw Tex/MathTex literal corrupts a TeX command
MLR104 implemented error high Literal asset path does not resolve in the render search path
MLR105 implemented error high MarkupText literal contains provably invalid Pango markup
MLR106 implemented error high Literal NaN/inf flows into mobject geometry
MLR107 implemented warning high API/mobject is unsupported under a renderer this run targets
MLR108 implemented warning high Object treated as still visible after a renderer-divergent remove_fixed_* call
MLR109 implemented warning medium Updater read-after-write ordering makes a one-frame lag definite
MLR110 implemented error high Literal TeX has a definite brace/environment imbalance
MLR111 implemented warning high Scene updater mutates a mobject; the change may escape Cairo's moving scope
MLR112 implemented warning high Raw .points access assumes one renderer's fixed points-per-curve layout
MLR113 implemented info high Transform source and target are the same object
MLR114 implemented error high Literal points array is not N x 3
MLR115 implemented error certain Literal font_size is zero or negative
MLR116 implemented error high add_line_to/close_path on a provably empty path raises at render time
MLR117 implemented error high register_font() context manager is called without with
MLR118 implemented warning high Project SVG uses unsupported text/image/filter/mask/clipPath or an unresolved href
MLR119 implemented error high MovingCameraScene is incompatible with the OpenGL renderer this run targets
MLR120 implemented warning high focal_distance camera setter has no effect under the OpenGL renderer
MLR121 implemented warning high shift(OUT)/set_z has no effect in a 2D Cairo scene; use set_z_index
MLR122 implemented warning high bring_to_front is defeated by a lower z_index
MLR123 implemented error high OpenGL-only mesh mobject is added to a scene under a Cairo-target profile
MLR124 implemented warning high Text() literal contains Pango markup that plain Text renders verbatim
MLR125 implemented info high Bare Mobject() leaf added to the scene displays nothing
MLR126 implemented error high Literal opacity outside [0, 1] or negative stroke width
MLR127 implemented warning high Literal by-tex key cannot occur in the MathTex literal

MLP — performance (27 implemented, 0 reserved)

ID Status Default severity Min confidence Summary Blocked on
MLP201 implemented warning high Expensive Text/TeX/SVG/Surface construction inside a per-frame callback
MLP202 implemented warning high copy/become/align of a confirmed-large mobject inside a per-frame callback
MLP203 implemented info high Family-walk query of a confirmed-large mobject inside a per-frame callback
MLP204 implemented warning high Scene graph grows with a fresh mobject every frame inside an updater
MLP205 implemented warning high wait(frozen_frame=False) re-renders provably identical frames
MLP206 implemented warning certain Literal play duration shorter than one frame is clamped
MLP207 implemented info medium Transform whose confirmed family size or curve insertion is large at begin
MLP208 implemented info high Transform of a large Text/MathTex family (copy + align + per-glyph interpolation)
MLP209 implemented info medium Animated or updater-bearing object early in Cairo's display order re-rasterizes a large static suffix
MLP210 implemented info medium Fixed-count loop issues many short sequential plays
MLP211 implemented info medium Large per-frame allocation inside a per-frame callback
MLP212 implemented info medium Long animation of a full-screen translucent object or layer
MLP213 implemented info medium Calibrated workload / renderer mismatch (e.g. a large Cairo 3D Surface)
MLP214 implemented info high Serial distinct TeX compile keys the local fork could precompile in parallel
MLP215 implemented warning high Provably no-op updater widens dynamic waits or the play moving scope
MLP216 implemented info medium always_redraw rebuilds identical curated topology every frame
MLP217 implemented warning high Frame-varying use_svg_cache=True key in a hot callback grows the process-global cache every frame
MLP218 implemented info high Provably frame-invariant updater is the only reason a wait renders dynamically
MLP219 implemented info medium Updater's estimated lifetime spans many subsequent plays
MLP220 implemented warning high TracedPath without dissipating_time accumulates over a long span
MLP221 implemented warning high Literal t_range/x_range step proves an excessive sample count
MLP222 implemented warning high ImageMobject re-rasterized every frame inside Cairo's moving suffix
MLP223 implemented info high Fully transparent stroke keeps a positive width that is processed every frame
MLP224 implemented info high point_from_proportion on a confirmed-long path inside a per-frame callback
MLP225 implemented (opt-in) info high Cost-report-only explanation of features that block local-fork fast paths
MLP226 implemented warning high Frame-varying Text/TeX cache key inside a per-frame callback
MLP227 implemented warning high always_update_mobjects=True dynamicizes a provably static wait

MLD — determinism / portability (7 implemented, 0 reserved)

ID Status Default severity Min confidence Summary Blocked on
MLD301 implemented warning high Updater applies a fixed per-frame step without dt scaling (FPS-dependent motion)
MLD302 implemented warning medium Unseeded global random state read inside a frame callback
MLD303 implemented warning high Literal asset path syntax does not match the profile platform
MLD304 implemented warning medium Renderer-divergent membership effect reached without a guard in a multi-renderer run
MLD305 implemented warning high Asset path matches an existing file only case-insensitively on a case-sensitive target platform
MLD306 implemented info high Literal font is not in the profile's allowed-fonts list
MLD307 implemented warning medium Wall-clock, filesystem, or network call inside a frame callback