Dev log: Phase 18 to now
Phase 18, line shapes. Real spectral lines are not infinitely thin spikes. Atoms move around (Doppler) and get jostled by neighbours (pressure), so each line spreads into a bell shape called a Voigt profile. We added that, plus a zoom so you can actually look at one line up close. The useful trick here was a flux-closure check: whatever area the line has before broadening, it must still have after. That check caught two grid bugs that were completely invisible on screen.
Phase 19, optical depth. Up to here, every line was treated as if the light escaped freely. In a thick gas the strong lines saturate, so doubling the number of atoms stops doubling the brightness. That relationship is the curve of growth. Big lesson: classify which regime a line sits in by the physics, not by eyeballing the slope of the curve. Also, the wavelength window has to widen as the column gets thicker, otherwise you clip the wings you are trying to measure.
Phase 20, absorption. The mirror image of emission: shine a continuum through the gas and look at what is missing. The trap here was that 14 hydrogen lines land on only 6 distinct wavelengths, so matching a computed profile to its source line by wavelength alone silently pairs up the wrong ones. We key on the transition instead.
Phase 21, Hartree-Fock. The biggest chunk. Instead of a fitted screening formula, each electron now feels a potential built from all the others, solved over and over until it stops changing. This gets us sulfur and chlorine, which the old fitted model could not touch at all, and ions with no preset. Two things worth remembering: the solver’s own error bar was lying to us and needed re-deriving, and the thing that finally made convergence fast was not a clever algorithm but the right mixing constant.
Phase 22 and cleanup. Made features honest about what they apply to. The classical ghost and the force-law lab only make sense for one-electron atoms, so they now explain themselves instead of erroring on a screened atom. Fixed He+ breaking every API call, because the “+” was never URL-encoded. Unknown systems say so instead of spinning. Currently fixing hint text that escaped its panel on narrow screens.