Crucible2.5D · native laboratory notes

Crucible2.5D · Models, branches and their limits

What the current and archived implementations try to do, what changed, and which claims still need evidence.

Source audit dated 2026-09-19. This document checks the native source against its earlier descriptions and proposes recording cases. It does not certify an entire multiphysics engine. The starting native checkpoint for this pass is 8baca7b; the parallel recording pass is adding opt-in alternatives. Existing models remain available. Legacy1 and Legacy2 were inspected without modifying either checkout.

What the project is

Crucible is an experimental, interactive material laboratory built around several coupled GPU solvers. MPM handles deforming matter, SPH handles another family of fluids, an Eulerian grid carries air and scalar fields, and SDF geometry supplies boundaries and thermal properties. Constitutive models, field forces, procedural growth rules and visual treatments coexist deliberately. The interesting achievement is making their interactions inspectable and playable, while retaining alternate models for comparison.

Use Crucible as the product title; Crucible — a 2D material laboratory supplies the dimensional qualifier when useful. Historical noita_gish names identify earlier builds, not a second current project. There is no reason to explain shortcomings through a manual-code versus AI-code comparison. This is a record of hands-on systems work: implementing models, finding ownership and scale errors at interfaces, and deciding which approximations make useful interactive instruments.

Suggested public copy:

Heat a body until its shell changes, drag a magnetic field through a fluid, or let a living pattern reshape a soft material. Crucible is my experimental GPU material laboratory: several solvers, many material models, and a set of deliberately visible compromises. Alternate implementations stay available so I can compare the behavior I authored with the behavior a more constrained model produces.

Evidence and confidence

No single “percent physically correct” is defensible. A model can have the right force direction but the wrong spatial range, conserve a local quantity but lose it at the receiving grid, or produce plausible morphology without modeling biology. Record correctness by mechanism, conservation scope, time/space dependence, and validation case instead.

The older STATUS.html is an April snapshot. docs/evolution.html is valuable history, but some of its conclusions are stronger than the current code supports. In particular:

  1. Contact Heat v2 exchanges heat both ways; it is not an established exact global energy-conservation scheme.
  2. The anisotropic fracture implementation has a nonlocal term, but its authored length is proportional to grid spacing; resolution independence has not been demonstrated.
  3. Thermo Metal implements stress relaxation and heat-treatment memory, not a calibrated metallurgical annealing cycle.
  4. Culture “growth,” vitality recovery, and adding new matter are separate mechanisms. A visibly healing scar need not recover missing mass.
  5. The analytic blast front is coupled to a projected air solver; it is not a resolved compressible shock simulation.

1. Heating, phase change and thermal contact

What is actually there

shaders/physics/mpm_thermal.comp:31 advances a temperature Laplacian only across occupied MPM grid nodes. The coefficient is limited to 0.24 per neighbor direction. This prevents the particular explicit-stencil instability; when the requested diffusivity is too large, it also reduces the effective diffusion rate. Its u_physically_based_heat uniform no longer selects different MPM diffusion formulas. Both historical branches were algebraically the same apart from the missing stability clamp.

The heat-source position now includes the grid origin (mpm_thermal.comp:79). Both archived versions still use vec2(node) * u_dx, so a brush specified in world coordinates can heat an offset location. This is a concrete reason some early heating tests appeared ineffective. Legacy1 additionally retains the unclamped “non-physical” diffusion branch; Legacy2 has the common stable update. These archive differences were checked directly, not inferred from names.

The direct MPM heater blends toward its target by radial_weight * 0.1 per dispatch, without a dt factor (mpm_thermal.comp:83). More substeps therefore change its heating strength. Keep substeps fixed in a comparison. Prefer an air/SDF-mediated heater when recording indirect heating, and label a target-temperature brush as a controlled heat reservoir rather than a fixed-power heater.

Runtime finding: hiding a gizmo also disabled the heater

Measured during this recording pass: scene 121, Recording: Crust & Kiln Gallery, initially completed 240 frames with 8,483 MPM particles, no reported nonfinite values, and particle temperatures of only 297.75–299.83 K, despite the scene's configured 820 K heat source. The retained baseline evidence is portfolio-work/crucible-recording-20260919/captures/scene-121.log (F240 and Recording check entries).

The source explains the failure. src/main.cpp:398 initializes g_show_heat_gizmos to false. The legacy branch of the physics update (src/main.cpp:11374 in the current recording build) temporarily sets both MPM and SPH scene-heater radius and temperature to zero when that helper is hidden, restoring configured values after stepping. Hiding the visual helper therefore disables the physical source too, including a --no-ui capture. A correctly configured hot scene can consequently remain near ambient. That is a control-ownership error, not evidence that curing or thermal material response itself is broken.

The recording build now supplies opt-in independent scene-heater activation for the new presets, preserving legacy behavior by default. Under Appearance → Thermal capture & comparison, Scene heater enabled controls simulation and Draw heater gizmos controls drawing when Independent heater control (comparison) is selected.

Verified activation comparison: the independent route with gizmos hidden reached 297.92–631.97 K after 240 frames, with the same 8,483 MPM particles and no reported nonfinite values (captures-final/scene-121.log). The retained three-way comparison in control-validation/results.json reports identical particle count and temperature extrema for independent activation and legacy activation with the gizmos visible; legacy activation with them hidden stayed at 297.75–299.83 K. Those evidence paths are relative to portfolio-work/crucible-recording-20260919/. This verifies that the new recording route heats without its visual helper. Matching these reported extrema is not a claim of bitwise-identical simulation state, calibrated heat transfer, global energy conservation, or realistic crust fracture. A separate disabled-source test remains useful when extending the controls.

Contact Heat v2 uses fixed-point numerator and denominator grids and gathers a neighborhood mixture temperature (mpm_contact_mix.comp:39, sph_contact_mix.comp:36). Hot contributors can cool; cold contributors can warm. This removes the fundamental one-way maximum-temperature ratchet. The benefit is real, but the older “conserving mixture” label needs qualification: particles generally gather different normalized neighborhoods.

A simple analytical counterexample illustrates the missing proof. With equal capacities, temperature (1,0,0), and symmetric neighborhoods {1,2}, {1,2,3}, {2,3}, the local mean targets are (1/2,1/3,0). Their sum is 5/6, not 1. Relaxing each particle at the same rate therefore changes total heat. This is an illustrative discretization argument, not a measured error in a particular Crucible scene. An exact exchange route would transfer equal-and-opposite edge heat or use a conservative scatter/update/gather with explicitly matched capacities.

Other channels still exchange or remove heat: air coupling, the optional cold-contact quench channel, latent cooling, SDF heat loss, sources, and clamps. Turning v2 on does not establish conservation for that entire system. The water-quench channel and mixture exchange can both cool a body; show their switches independently if diagnosing rate differences.

One additional identity discrepancy needs a focused check: mpm_contact_mix.comp:33 says it skips rope segments but tests material id 51; MPMMaterial::ROPE_SEGMENT is 80 (mpm_solver.h:99) and 51 names SPH viscous goo. The impact depends on whether/how rope particles enter this dispatch. This audit records the mismatch without claiming it caused a recorded failure or silently changing the legacy route.

Phase change and glass

mpm_p2g.comp:1573 uses a temperature-driven phase fraction with rate-limited changes, subtracts dphi * latent_heat from temperature, blends elastic/volumetric stresses, and relaxes deformation memory toward an isotropic state. The latent parameter is used as a temperature change per phase increment; it is not by itself a fully unit-calibrated enthalpy law. Some deformation relaxation is per step rather than per second (rf = reset_fraction * 0.3), so timestep and substep studies matter.

The separate Glass material (mpm_p2g.comp:1295) deliberately retains a substantial hot stiffness floor and delays the full liquid-like blend. Pseudo-thickness/cohesion settings increase that support. Heating a Glass block can therefore make a soft solid rather than a visibly draining melt. This is not the same behavior as the generic Phase material. Record Glass and Phase side by side under the same heater, using a narrow bridge or overhang so even modest softening changes the silhouette. Filament Glass is a third, useful niche: stretch a hot neck and cool it to reveal history-dependent failure.

Current recording probe: scene 128 initially inherited a 650 K “hot glass” setting, below the active Glass branch's 720–980 K softening interval. Only the new recording specimen was changed to 1100 K; old presets and solver equations were left intact. The parallel pass observed melting/dripping in its 480-frame hot run, while the cold specimen slid away intact. Saved control-validation/results.json reports 2,088 particles and a maximum of 1076.54 K for the hot run; the parent run reported no nonfinite values. This shows why preset naming alone cannot establish that the selected constitutive regime was exercised. It demonstrates visible softening in this setup, not calibrated glass rheology, and the moving cold specimen is not a stationary geometric reference.

The appropriate research comparison is heat transport plus temperature-dependent constitutive change, as in Stomakhin et al., Augmented MPM for Phase-Change and Varied Materials. Crucible should not imply it reproduces that paper's solver or validation suite.

Recording and proposed alternatives

Best first scene: a hot SDF pan or cauldron over a modest fuel source, with a single large deformable sample above it. Show the temperature field briefly, then return to material appearance. A row of unlike samples gives a more informative comparison than uniformly igniting the entire room.

Initial indirect-heating failure in scene 129: the Fuel & Cauldron setup ran for 2,400 frames (20 simulated seconds) with 1,823 MPM particles and no reported nonfinite values. Its fuel bed rose from 690 K to a mean 818.39 K, but the wax and stretch ingredients fell from 300 K to means 291.24 K and 292.21 K. The saved portfolio-work/crucible-recording-20260919/control-validation/cauldron-2400.log records these batches separately. That initial fixture did not demonstrate successful indirect heating of the contents. Retain it as a coupling diagnostic: a hot-looking fuel bed alone is insufficient evidence.

Source findings exposed by the cauldron test

The current shader gives air-to-particle warming several gates (mpm_g2p.comp:1800): air must exceed ambient by 20 K and the particle by 2 K, then the transfer is multiplied by smoothstep(ambient+30, ambient+320, T_air) and smoothstep(8,120,T_air-T_particle). For ordinary full-thermal materials the coefficient is 0.24 per second before those factors. With a 300 K ambient, that means an air threshold of 320 K and a plume ramp from 330 to 620 K. Mildly warm air can therefore contribute almost no heating. The SDF contact path has its own positive-surplus gate and contact weight (mpm_g2p.comp:1816). These are implemented transfer rules; they are not evidence that any particular gate alone caused the measured failure.

Two other source issues deserve isolated numerical tests before material tuning is treated as a general repair:

Verified fixture-only improvement: the recording pass changed only scene 129 to a pot-wall radius of 0.06, fuel top at −0.90, air cooling 0.15, solid thermal capacity 1.0, solid diffusivity 0.012, and solid contact coefficient 0.03. The radius heater remains disabled. In control-validation/cauldron-compact-2400.log, the new fixture completes 2,400 frames with 2,607 MPM particles and no reported nonfinite values. Its fuel mean is 816.29 K; ingredients starting at 300 K reach 317.58 K (wax) and 318.37 K (stretch). Grid temperature probes below the vessel, at its wall and above it report 574.66 K, 484.12 K and 357.73 K, respectively. This demonstrates gentle heat delivery in the compact fixture, not calibrated melting or energy conservation. More fuel particles and several scene settings changed together, so it is not an isolated estimate of any one parameter's effect. Neither staging nor the new shared-face air/SDF route fixes the two particle-transfer issues above; no shader repair for them is included in this pass.

Separate three controls: simulation temperature, emission onset/palette, and exposure. Raising emission onset or lowering saturation can make hot air stop appearing golden without changing any physics. Faster cooling is a simulation edit and should use an explicitly identified reservoir/ambient route. A rainbow temperature diagnostic should have a legend and fixed range; automatic rescaling can conceal the fact that all samples have become nearly isothermal.

Additive reference candidates: a shared-face thermal-flux route for the air/SDF grid, an exponential reservoir-cooling route, and eventually a closed two-body heat-exchange benchmark with a displayed energy residual. The first two are being handled by the parallel implementation pass; their validation is reported separately. They do not turn the entire coupled engine into a conservative thermal solver.

2. Baking, crust and spontaneous cracking

Crust Dough is a useful authored constitutive model, not simply a color filter. Gas/expansion, curing, shell stiffness, target rest volume and tear state all change in mpm_p2g.comp:2418. Differential core expansion and shell contraction can drive failure without dragging. However:

The archived Crust Dough branch already has expansion and shell mismatch. Current Bake Profile v1 adds per-material differentiation, while Bake v2 changes the reference state for damage. Newer is therefore not simply “more detailed”: one change separates recipes, another removes a false source of cracks.

Recording: begin with one circle, one thick rectangle, and one notched/complex outline. Heat from below so the temperature gradient and asymmetrical expansion remain readable. Use a short close-up showing the sequence pale body → darker/stiffer shell → swelling core → damaged/opening region. If no opening occurs, record “shell formation and stress” rather than promising self-fracture. For the complex outline, ensure the scene author supplies an appropriate shell-seed map; joining several independently seeded pieces can introduce artificial internal crust seams.

Useful old route: a stylized expanding/breaking pastry is valid authored behavior. Keep it as “Legacy bake response” rather than describing every difference as a defect. A future moisture/drying field and free-surface shell update would be a new model, not a correction achieved by making the current crack coefficient larger.

3. Metal heating and cooling

mpm_p2g.comp:3562 stores harden, hot_memory, and crack. Above its authored hot threshold it grows heat memory and blends deformation toward the polar rotation. When cool, hardening rises toward that stored memory; higher hardening changes stiffness and lowers the crack threshold. Hardening is never reduced by reheating in this branch. The word anneal names stress relaxation of F, not recovery/recrystallization of a metal's internal structure. The same essential model appears in Legacy1 and Legacy2.

This can support a good heat-treatment memory demo: heat two supported strips, cool one quickly and one slowly, then apply the same displacement. It needs an unheated control and a numerical hardening readout because the authored stiffness range may look subtle. It cannot yet establish quantitative differences between annealing, tempering and quenching for a real alloy. Real heat-treatment behavior is material- and thermal-history-dependent; see NIST's heat treatment reference.

Proposed alternate route: name it “Recovery model (experimental).” Introduce a separate internal hardening variable that decays under a documented time-temperature recovery law, distinct from instantaneous elastic softening and from quench memory. Compare cold-worked, heated/held, and quenched strips. Without alloy calibration, call it a phenomenological recovery model; “theoretically correct annealing” would be too strong.

4. Magnetic families

Legacy field and the ring-like response

The legacy force is multiplied by several controls: external-drive gating, sharpness suppression, a wall gate, density damping and inward-force cancellation (mpm_g2p.comp:751, :777, :784, :802, :828). Each can be understandable alone, but their overlap can leave a narrow active region. A short cold-start Jacobi solve also cannot establish a global long-range field every frame. Increasing a surface-spike gain cannot repair missing field support.

The historical documentation gives specific truncation percentages and timing estimates. They were not rerun here and should remain historical diagnostics, not current measured specifications. The shader/solver architecture supports the qualitative diagnosis: local iterative propagation plus multiplicative suppression can make a moving magnet affect a ring instead of the whole body.

New Magnetic

The current New Magnetic route uses softened analytic 2D pole kernels for the external field, a finite-difference field-energy gradient, relaxed particle magnetization, and acceleration limits (new_magnetic_force.comp:302). It later regained a warm-started particle self-field; the header's “not ported in v1” paragraph describes the first version, not the current feature set (new_magnetic_field.h:95). Particle magnetization is still driven by the external field while the force sees the total field, deliberately avoiding a fully self-consistent feedback loop.

It also has a normal/surface proxy and imposed corrugation frequency (new_magnetic_force.comp:166, :178). This is a Rosensweig-inspired surface response, not a validated prediction of the instability threshold or wavelength. The proxy uses total MPM mass, so another MPM material touching ferrofluid can contaminate what it considers a free surface. A simple SDF container in air is the cleanest first recording.

For context, free-surface ferrofluid models couple the magnetic field in fluid and air to the interface; see Ferrofluids: Modeling, Numerical Analysis, and Scientific Computation. Crucible's imposed field and surface forcing are a practical reduced experiment, not a substitute for those coupled equations.

Fantasy

Fantasy adds latched activation, anti-reversal behavior and a cursor-centered vortex (fantasy_magnetic_force.comp:73). Its spectacle is intentional. Persistent filaments or orbital motion are useful demonstrations of field-controlled matter, but should not be evidence of physical ferrohydrodynamics. The old and new routes have different goals rather than a strict quality ordering.

Recording: a broad shallow basin with a flat free surface and ample headroom. Begin with no field, sweep a pole slowly, hold it stationary, then lift. Repeat the same motion in Legacy/New/Fantasy. Add a field overlay only briefly; its presence can otherwise hide the material silhouette. Separate attraction, holding, spikes, remanence and vortex motion into short clips.

5. Living materials: why the generations differ

These are procedural/artificial-life materials coupled to mechanics. They are not biological growth models. Lenia supplies a useful vocabulary for continuous cellular automata, but a CA field, a tissue constitutive law, and insertion of particles remain distinct components.

Family Actual mechanism and likely weak point Worth keeping for
Early Euler bio/ash materials Several field-gated channels drive deformation and recovery. In the old ash branch, P2G and G2P both wrote regrowth state; the last writer could erase recovery. V2 gives G2P ownership and aligns the temperature window (mpm_g2p.comp:2264). A burn scar that changes mechanical state; a lesson in state ownership. It does not restore deleted particles.
Colony, spawn-first Core energy and a guide field gate insertion; insertion occurs as visible particle clusters (living_frontier_spawn.comp:48, living_colony.cpp). Growth can look quantized and rapidly consume budget. A deliberately cellular colony with a killable heart and resource dependence.
Colony, expand+fill Rest-volume expansion is primary, filling only thinning occupied regions. Sparse frontier drives can remain active, making the body keep inflating. Creeping foam, invasive growth, swelling around supports. Use finite recording duration and visible particle count.
Bloom, bounded Expansion approaches a target; insertion only repairs a hole with tissue on opposite sides (living_frontier_spawn.comp:55). It is intentionally easy to reach an almost inert endpoint. A breathing/expanding organism, elastic recovery and tear repair. Not an indefinitely exploring colony.
Automata Its field target is floored by occupancy, then boosted by ash (living_automata_field.comp:90). Insertion demands an empty cell surrounded by a ring of occupied cells (living_automata_ring_spawn.comp:44). Dense interiors resist field-created holes, and an outer growth edge rarely satisfies the ring test. A conservative tissue/ash comparison or local hole repair, not the best porous-growth hero.
Culture A more resolved pattern field pulls matter onto membrane ridges. Sculpt mode rearranges existing particles; Grow separately inserts near occupied membranes with a lifetime budget (living_culture_insert.comp:49). The strongest candidate for porous morphology, burning and recovery. Its behavior is explicitly authored and resource-free.

Culture vitality is asymmetric (living_culture_vitality.comp:55): cool living tissue heals automatically; dead tissue needs a diffused green-neighbor source. That is why a surviving green rim can reclaim a burnt patch instead of settling into grey. It also means starvation does not kill it. starve_rate and revive_threshold are currently unused in that shader (living_culture_vitality.comp:32); husk_eps is similarly vestigial. A tooltip promising those effects is misleading.

The revival field spreads living occupancy (living_culture_revive.comp:39). It is not supplied by dead matter itself. Completely burning every surviving seed is different from burning one patch. There is no new particle insertion in revival: a repaired color/vitality scar is not recreated mass. Culture's grow default is false, and its default lifetime insertion cap is 4000 particles (living_culture.h:34, :68). Once exhausted, it can recover vitality but will not endlessly replace removed tissue.

The maximum membrane acceleration in the vitality shader is 1.8 simulation units; default showcase gravity is intentionally reduced in existing scenes. A full-gravity puddle is therefore not surprising. “Climbing down a container” is also different from climbing up against gravity. The early Surface Creeper has explicit tangent/support forces (mpm_g2p.comp:2180) and may be the more appropriate old-model niche for the user's container-edge shot.

Recording: a small raised bowl or pedestal in the middle of a quiet scene, with broad open space around and below it. Shoot Culture sculpt, Culture grow, and a surface-following old material separately. Keep one control part green when testing regrowth. Show the field as an inset or brief diagnostic, not an overlay that conceals the material. Keep the low-gravity setting visible in the recording notes.

Proposed alternate route: a nutrient/reserve budget can make insertion and recovery debits explicit and allow regrowth after removal when reserves remain. This would recover Colony's useful resource/kill mechanics while retaining Culture's morphology. It is a new hybrid, not a small correctness patch or real metabolism.

6. Fire, confinement, explosions and rockets

Burn Front v2 removes the old unconditional temperature floor and uses cooling-sensitive self-heating, making extinguishing possible. It also adds per-particle ignition variation and a faster authored consumption rate (mpm_p2g.comp burning branches; controls in mpm_solver.h:168). A threshold floor can erase any cooling applied elsewhere, so the old inability to extinguish was structural. The new model still has authored temperatures and rates; a rougher front is not proof of chemical accuracy.

Fire v3's oxygen pass consumes oxygen according to hot smoke as an activity proxy, replenishes it according to outside reachability, and produces smolder fuel (euler_oxygen.comp:51). It is not a stoichiometric reaction network. The airtight module identifies enclosed regions on a coarse grid and evolves a pressure-like scalar with source/hold/vent rules (euler_airtight_update.comp:61). A gap smaller than a coarse cell may not behave like a resolved leak. A sealed/open vessel comparison is excellent, but use apertures visibly larger than a coarse cell and show the cavity diagnostic.

The legacy blast deposits several independently tuned channels. Sedov Front instead ties an analytic two-dimensional radius and several output effects to an energy parameter (shock_front.cpp; shock_front_particles.comp:76). It gives a much clearer traveling-event model. However, its impulse test uses a radial annulus and a short SDF occlusion scan; the air solver still uses pressure projection. The aftermath's wall-aware flow does not establish a physically reflected/diffracted shock front. Practical Animation of Compressible Flow for Shock Waves describes the genuinely compressible simulation problem that is outside this implementation's scope.

The particle guard remembers one last front id, not a per-particle set of all fronts (shock_front_particles.comp:68). Static radial crossings are naturally one-shot, but strong motion/re-entry plus overlapping fronts deserves a dedicated test before claiming “at most once for every front” without qualification.

Rockets have an explicit thrust increment and a separately authored air plume (src/main.cpp:2761, :2948). This is a sandbox propulsion behavior driven by pressure/nozzle state, not a mass-flow nozzle/exhaust momentum solve. It is still a good interactive result. Describe the scene as propulsion, venting and impact in a destructible test range, not a validated engine model.

Why explosions look alike: the same smoke/heat/compositing stack can dominate different underlying impulses, while high ambient warmth and low emission onset erase distinctions. Record one event in a clean scene, allow its plume to clear, and compare pressure, impulse and aftermath separately. Do not make all three more visible merely by raising all gains.

Recording: a long open range, one thin destructible obstacle, a sealed chamber, and a chamber with a large visible vent. Use the same authored projectile or charge where possible. Do not begin with every effect enabled. A quiet pre-shot frame and a readable slow-motion front are more informative than a golden screen.

7. Tearing, anisotropic damage and solver coupling

Crucible has a genuine nonlocal damage path inspired by Wolper et al., AnisoMPM: positive-stress driving, a structural tensor, damage history and a regularization term (mpm_p2g.comp:527; mpm_damage_scatter.comp; mpm_damage_gather.comp). The retained author implementation is the appropriate reference. Only ORTHO_TEAR, BRITTLE and TOUGH are enrolled (mpm_solver.cpp:68); selecting the model does not upgrade every baking, glass or composite branch.

Isotropic versus anisotropic mode is the clean comparison: same body, same resolution, same stretch, rotate the fibers. Legacy versus AnisoMPM also changes the damage law and residual response, so it is not a directionality-only control.

Two important qualifications correct the older documentation:

Preserving the fiber term while degrading parts of the matrix can make tears visibly stringier. However, thermal state, fracture length, particle spacing, contact, and post-damage compression treatment still influence the result. A clean build and a correct local formula do not establish a calibrated fracture toughness.

For SPH/MPM contact, read the existing full-contact-reaction audit. It carefully distinguishes the old penalty-only reaction, the newer complete local contact ledger, and receiver losses. Its 783 GPU assertions are retained prior measurements from 2026-09-13, not tests rerun here. SDF obstacles remain kinematic; particles do not dynamically move the cauldron itself.

Recording: three independent notched strips, two pinning/drag anchors, a dark quiet background, identical loading. Compare fiber angles and display damage briefly. Keep the load slow enough that the comparison concerns damage direction rather than wildly different inertial motion. A fluid jet pushing an MPM body is a separate useful coupling shot.

8. Ranked recording slate

Reliability below means source-supported setup confidence, not a claim that a new recording was captured in this audit. Every proposed scene still needs a short live dress rehearsal.

Priority Shot Visual interest Setup confidence Honest caption and decisive check
1 Ferrofluid basin, slow pole sweep and stationary hold High Higher with New Magnetic + SDF basin “Field-driven matter.” Confirm the body follows and remains held; show spikes as authored surface response.
2 One heated row: dough, clay, glass, metal High Medium “One heat source, different material histories.” Keep sizes/heater exposure comparable; use field legend.
3 Crust Dough circle/notched body on a pan High Medium “A stiffening shell around an expanding interior.” Verify an opening before labeling self-cracking.
4 Culture on a central pedestal, local burn and return High Medium at reduced gravity “Pattern-driven tissue and a returning vitality front.” State sculpt/grow and the insertion cap.
5 Isotropic/anisotropic notched-strip comparison High Medium “Fiber direction changes damage.” Same loading, enrolled material, matched resolution.
6 Sealed vessel versus open vent High Medium “Confinement changes the release.” Show coarse cavity reachability; separate smoke appearance from pressure.
7 Quiet rocket range and one impact High Medium “Authored propulsion and material response.” Keep plume exposure restrained, clear between shots.
8 Indirect cauldron heating High Medium “Fuel → air/solid → contents.” Verify the contents warm without direct brush intersection.
9 Glass bridge softening beside Phase melt Medium–high Medium “Different ways to lose solid memory.” Record before/after silhouette, not just glow.
10 Mixed-material stack/burger under a platen, then warming High Lower until contact tuning “Interfaces decide the result.” Use separate heating and compression clips; don't promise real food chemistry.
11 Thermo Metal hot/held/cooled strips Medium Lower for dramatic appearance “Heat-treatment memory.” Compare load response/readout; avoid an annealing claim.
12 Legacy Colony core removal / Bloom bounded recovery Medium Medium “Different rules make different organisms.” A useful old model earns its place through a distinct mechanic.

Additional compact shots worth trying: magnetic remanence after the pole is removed; an insulating versus conducting pan; a cold-water quench split screen; a fiber direction wheel; a field overlay dissolving into the final shaded material. These reveal why the system exists without requiring a new solver.

9. What a “fixed mode” should mean

Use Model comparison as the public label and put Legacy / Alternative (experimental) inside it. “Fixed” should name a specific repaired invariant, not claim the whole alternate route is theoretically correct.

Alternate Constraint it can improve What it still does not prove
Shared-face air/SDF thermal exchange Opposite sides use the same conductance and equal/opposite heat before other channels Conservation of particles, sources, boundaries or the entire multiphysics step
Exponential thermal reservoir Well-defined per-second cooling/heating without smoke-dependent hold Closed-system energy conservation; the reservoir intentionally adds/removes heat
Complete local contact ledger Accounts for the local contact velocity-change terms Exact global momentum after delayed, clipped grid delivery
World-space fracture length Separates authored crack scale from grid spacing Converged toughness or crack speed without resolution tests
Thermal recovery internal variable Distinguishes reversible softening, stress relaxation and permanent history Metallurgical accuracy without an alloy/time-temperature calibration
Nutrient-budget living route Makes insertion/recovery costs and replenishment explicit Biological realism; the morphology is still artificial life
Conservative enthalpy/contact route Makes heat capacity and phase energy auditable A correct interface and material law merely from passing a two-body heat test

Keep the legacy defaults, serialize the selected route in the scene, and compare from the same reset. Changing formulas halfway through a heavily damaged/hardened state confounds the result. A useful experimental clip includes the good case first, a short diagnostic, and one clear limitation. There is no need to make every material universally reliable before the portfolio can honestly show its potential.

10. Minimal validation before publishing captions

  1. Scene repeatability: reset, fixed timestep/substeps, fixed material count, same action; save exact settings with the recording.
  2. Thermal control: no-source equal-temperature state should remain equal; a closed two-body contact test should report total heat drift; a cooling reservoir should follow its stated time constant.
  3. Material visibility: record temperature and relevant internal state together once, so a weak color change is not mistaken for no simulation change.
  4. Fracture: confirm enrolled material, compare identical loads, hold world-space regularization length while changing resolution; do not use an unrun convergence claim.
  5. Living: distinguish rearranged area, particle count, vitality and deleted matter. Test partial burn and complete burn separately.
  6. Magnetics: compare zero field, stationary field and moving field; inspect without the holding spring to distinguish magnetic force from cursor control.
  7. Blast/cavity: test one isolated event first; check wall occlusion and gap resolution; don't infer reflected shock physics from the pressure-projected aftermath.

This audit inspected the listed mechanisms and their histories, and incorporates the saved heater activation comparison and hot-glass recording probe above. It did not run every material or reproduce every numerical claim in the older documentation. Unreviewed mechanisms—especially electrostatic subfamilies, triboelectric placeholders, detailed 2.5D carving, and every custom composite recipe—remain a follow-up, not silently certified coverage.