You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
batch: nameless rows stay last on a Z-A name sort (df97919)
examples: the fallback example is ellipticine (9f519c0)
explain-ui: honest labels and notes, failure as one message, real-response tests (8ee2254)
explain-ui: the failure sentence is set in sentence case, not the uppercase caption style (6b8b2ad)
explain: a bracketed "n-O-(...)" pair names the parent's oxygen and carbon too; an element symbol never pairs across a bracket (ea26120)
explain: a bridge prefix is its own child of the root; census class PART_CONTAINS_PART (13cc4ef)
explain: a chained substituent's leading locant names the parent position (3f6c333)
explain: a chained substituent's locant names the atom its chain hangs on (ae117df)
explain: a fusion component's own numbers light only what the element and rings prove (44a3088)
explain: a glycosyl substituent's anomer mark lights its anomeric carbon (781c329)
explain: a leading locant before a chain of substituents names the atom it hangs on; the gate accepts a later chain member's atom (N-5a) (d76608c)
explain: a leading locant before an unbracketed chain names the parent position (4ce5a2f)
explain: a locant lights only atoms it can name; lit-atom gate (3c65925)
explain: a repeated suffix is labelled the way the name spells it (04303f2)
explain: a repeated suffix is labelled the way the name spells it (e3bf50c)
explain: a soft time limit inside node building propagates instead of becoming a defect message (3f5a8b9)
explain: a spiro skeleton OPSIN keeps no token of owns its tokens, and its second component's locants are primed (b143d22)
explain: an engine or drawing exception is one failure message, not a 500 (d83e420)
explain: every fusion component's numbers are proven or dark; a split-out number follows the token it was written for; the gate reads tokens, not wording (9d65478)
explain: final-review classes the gates were blind to (n-O- locants, functional-class words, false suffix lines, isotopic H, oxidation numbers) (b039bad)
explain: glossary states no false chemistry (7b801f8)
explain: oxalic keeps all four O, amino-acid esters keep alpha N/C, ring substituents keep their own locant (517d457)
explain: refuse a trace when any written token cannot be placed (5cf6467)
explain: root split gives the suffix only its own atoms (cc1afde)
explain: root split keeps side-chain groups and infix suffixes right (a59451e)
explain: root split takes suffix atoms from the group's own carbon (45b3555)
explain: spiro primes restart at each spiro system in the hydro gate (244a4a7)
explain: spiro primes stop at the bracket; census sees a wrong atom of the right part; position numbers before ring chains (c7b7356)
explain: the hydro gate reads OPSIN's primed numbering of later spiro components (2a070bf)
explain: trace the candidate parse OPSIN itself returns (the first built without a warning) (2abbf58)
the hero light no longer flashes black or overworks tablet GPUs (2650d77)
Refactoring
explain-ui: one hover-handler helper, one id map, one GET helper; comments state why, not history (e05c21b)
explain: drop dead parameters and an unused glossary helper (186e287)
explain: key glossary lines on OPSIN parse-tree kinds (c34afe5)
explain: one helper each for the hydro modifier, the oxy pair line, the generic token line and the guarded drawing; explain_molecule no longer draws OPSIN's molecule (8bbe19b)
explain: one home for bracket_end, locant-shape regexes and token walkers; census imports at module top (42c27a9)
explain: parse the traced SMILES once, build the part and ring tables once, skip the second parse when OPSIN's two SMILES agree (14c3e44)