Repository navigation
Releases: Steinbeck-Lab/Orthonym-Web
Releases · Steinbeck-Lab/Orthonym-Web
Release list
v0.5.0
0.5.0 (2026-10-11)
Features
- count page views with Matomo, cookieless and path only (4f33f99)
- count page views with Matomo, cookieless and path only (fcf65e7)
- guided issue dialog behind the Issues tab (8bcb2e2)
- guided issue dialog behind the Issues tab (6b6fc29)
- nightly engine watch (67558af)
- nightly engine watch (8c5319f)
- put the engine version in the report link (e7d736c)
- put the engine version in the report link (ce65f23)
- search and link-preview metadata (fa9a391)
- search and link-preview metadata (22c0aea)
- show the running engine version in the footer (8402e83)
- show the running engine version in the footer (0f20b7e)
- stamp the engine version on every result and the batch CSV (30cfd49)
- stamp the engine version on every result and the batch CSV (097e973)
- switch Matomo page counting on with the server's privacy settings (279bb26)
- switch Matomo page counting on with the server's privacy settings (8f4daf4)
Bug Fixes
- examples: replace ellipticine with a polycyclic cage as the fallback example (e8b4075)
- examples: replace ellipticine with a polycyclic cage as the fallback example (c3256f1)
- review findings on the search metadata (3f327e4)
Refactoring
- share one issue-link builder and one health answer (ab31228)
- simplify the engine chip (81d8fe1)
- simplify the engine chip (3beaba1)
Documentation
v0.4.2
0.4.2 (2026-10-03)
Bug Fixes
- explain: a faithful match is used even when the match cap is hit (dbd882d)
- explain: map SMILES-path parts through one faithful match (2d765b4)
- explain: the faithful match keeps stereo (16c7e0a)
- explain: the SMILES path keeps parts over symmetric atoms (eb44960)
- show cisplatin as a connected square-planar structure (5f98c0d)
- show cisplatin as a connected square-planar structure (5e382e9)
Refactoring
- explain: factor the SMILES-path remap into one function (cdcb050)
Documentation
v0.4.1
0.4.1 (2026-10-02)
Bug Fixes
- explain-ui: the nothing-lights note no longer says the part names no atom (32ea091)
- explain: a chain line is measured; a bracket keeps its own set word; a racemate mark is 'part of' on either side (ea56cf4)
- explain: a group's line names the bare group and counts the hydrogens its atoms carry (d22fd48)
- explain: a parent line claims a benzene ring, or the only core, only when it is one (69a077a)
- explain: E, Z and pseudoasymmetric marks stay absolute in a relative set; a charged atom lost its hydrogen to the ending (aae211f)
- explain: every hover line is true of the molecule on screen (170da8f)
- explain: hover lines for sets written beside their marks, lone anomeric atoms, thio sugars and hydrates (6423c12)
- explain: hydrogen-locant and anomer lines say what the lit atom really holds (a10f110)
- explain: spiro, isotope and stereo lines say what each kind of mark means (eec27e6)
- explain: the census reads every claim in a line; acid-addition parts and multiplied hydrates are not cores; a set word covers the whole name (7011c3c)
Refactoring
- census: name the set-word patterns and reuse the token bracket utilities (2a73924)
- census: one count-word table for the chain and parent checks (c0a9d39)
- explain: collect a name's stereo set words once and reuse them per mark (ffc0118)
- explain: create each parent node through one helper and restate its line from the node (e1294cb)
- explain: one anomer line helper for the two sugar sites (3392b22)
- explain: one hydrogen-count table with structured fields (f38ddd1)
- explain: share the atom degree, plain-atom and anomeric-neighbour helpers (5a84f9d)
- explain: tidy the stereo, part, modifier and spiro line builders (08a48f1)
Documentation
- CLAUDE.md records the hover-line check and the 698-name corpus (890b677)
v0.4.0
0.4.0 (2026-10-01)
Features
- explain-ui: node helpers and smallest-node hover map (b06aaa9)
- explain-ui: render the v2 node list (5167f5e)
- explain: build the flat node list; stereo by written scope, checked against real stereocentres (58965ee)
- explain: explain every name OPSIN can read, from one OPSIN trace (ef29535)
- explain: token ownership from OPSIN placement and written brackets; token-kind table (130eba9)
- explain: trace OPSIN once for atoms, written tokens and owners (5d7a10c)
- explain: v2 response with flat nodes, per-node honesty and span alignment (edad59a)
Bug Fixes
- about: the fallback example is galantamine, a real molecule (b42c267)
- about: the fallback example is galantamine, a real molecule (5fd244f)
- about: the refusal example is cisplatin (4f78e50)
- about: the refusal example is cisplatin (e3b95fc)
- 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: refuse traces OPSIN reordered (CAS index names); stale-fixture guard (00ed9f1)
- 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)
- explain: split root atoms from a Trace (dc9518f)
- explain: the test and census gate lives in app/explain_gate.py, apart from the builder it checks ([5377768](5377768b49fc61d2e56d3...
v0.3.0
0.3.0 (2026-09-29)
Features
- an issue tab with a buddy, Kekunyo, who also roams the About page (a6a2a74)
- Home assembles itself on a fresh arrival, led by a reading light (1c8f7e9)
- report SMILES on GitHub for results Orthonym could not name (0c7e8b7)
- report SMILES on GitHub, and four old bug fixes (00ae11c)
- the tier lamp says on hover how its name was made (5bd854b)
Bug Fixes
- a mismatched round trip demotes a verified status; lamps explain on hover (3ef4518)
- a round trip that does not match demotes a verified status (6def5f2)
- batch: a timeout keeps the parse error of an unreadable row (5f4e1ca)
- explain: an unnameable molecule's placeholder is not shown as a name (d9e4b38)
- Home and /explain say what a failed request means (717311a)
- tier labels match what the engine actually verified (e034f87)
- tier labels match what the engine actually verified (bd7402d)
Refactoring
- define each shared rule once (0cae84b)
- name the withheld abstain code withheld_unchecked (3f082fe)
- one demoted-label decision; TierLamp takes the row (97ecfaf)
- one test for the unchecked case, one branch for fallback (dedeb2a)
- tidy the Kekunyo code after review (63a27f0)
Documentation
- a reading light in the README header; partner logos in its footer (2b867ac)
- a two-line collaboration line at phone width (6b26a74)
- draw the README credit's cross in the site's crimson (197afb0)
- draw the Steinbeck logo 74/62 as tall, as the About page does (e046942)
- footer credit, then the partners, then the collaboration line (8bea168)
- give the README's page table real column headers (fe48a54)
- partner logos fit one row at phone width (e422a2d)
- README finish-review fixes (fdefa2a)
- README header reading light; partner logos in the footer (b5db27f)
- README says Orthonym Web; footer credit, partners, collaboration line (5ea9d22)
- redesign the README (45ea874)
- the best-effort tier says how the name was built (785a8de)
- the README header says Orthonym Web (e6fdd2a)
- the README leads with a graphical abstract and a live link (0a68a79)
- the README's painted cross repaints itself every 8 seconds (7098624)
v0.2.0
0.2.0 (2026-09-24)
⚠ BREAKING CHANGES
- refresh vendored Orthonym and adopt its new tier vocabulary
Features
- /api/iupac-to-smiles returns canonical SMILES, InChI, InChIKey and a molblock (2d7f384)
- /explain becomes one page, one voice, on a recomposed ground (cf67d97)
- /from-name puts the structure beside its identifiers, not above them (30e6715)
- /from-name renders two or more names as a table with CSV and SDF (828bc76)
- /from-name shows the full identifier set and stops wasting the page (412ed36)
- a flat pint mark, and a favicon drawn from it (b239a27)
- a floating label on /from-name, a genuinely bigger box, less duplicate copy (e7811b0)
- About becomes a needlework pattern chart, worked live (b9a3b97)
- add /api/explain-name endpoint, retire opsin_substituents (6e05ac1)
- add deterministic glossary for name parts (8275ae6)
- allow a deployment to gate the site behind Basic Auth (88a7db8)
- an info notch on /from-name explaining how OPSIN reads a name (a84e4be)
- an OPSIN-verify switch, default on, beside best-effort (22c8e68)
- an unverified name says which switch produced it (6f0c987)
- batch jobs with chunked tasks, progress and CSV download (7da5a1a)
- batch upload on Home, so the job layer has a user (9ae980d)
- bounded pooled conversion for many IUPAC names (e70c7db)
- build CSV and SDF downloads in the browser from rows in hand (01fd652)
- CDK draws every structure, with CIP stereo labels (c51f31e)
- Celery app with a pinned prefork pool and the JVM guards (8f45a47)
- Celery app with two queues and the JVM fork guards (9b475af)
- character spans into the IUPAC name for each part (4418313)
- chemical names and formulas are typeset the way IUPAC prints them (50d2b06)
- collect OPSIN name parts after buildFragment with locants (da3bae8)
- derive name spans by assigning raw tokens to decomposition parts (2dfc713)
- emit modifier segments and cover split_root degrade paths (d428185)
- emit per-atom pixel coordinates for highlighting (fc1f453)
- env-configurable settings with deployment profiles (4a0f29f)
- every button crimson, glossy, and carrying a real icon (a0e0c1a)
- explain each name token as its own hoverable part (9e2bd9e)
- fold a bis/tris-cloned block of parts back to one written slot (3f9e224)
- four pages open on bare ground, like Home (3fc4c4e)
- group explain segments by written occurrence, not by shared text (9cf0af6)
- Health Check becomes a status board on About, not a route of its own (12b065c)
- Home gains a Draw tab (c06c24e)
- Home overhaul — clay notch tabs, normal-scroll shell, richer results (3830235)
- hover the IUPAC name to explore the structure (31ae631)
- hover the name on the teaching page to see which atoms it describes (4f30d69)
- job cancellation, and an owner token for cancel and delete (1b07ddf)
- let a caller refuse OPSIN-unverified names (aa50a56)
- link the learning page from the navigation (5ef1ded)
- log why a name fell back, and pin atom-point distinctness (7cf5858)
- make a batch's misses visible, and give every tier a lamp (d55061e)
- make ExplainSegment recursive with ownership flag (d44fb03)
- map OPSIN atom ids to RDKit heavy-atom indices (3eb2b93)
- mark referential name parts as notation on /explain (c2da04d)
- mark referential name parts as notation on /explain (3e6502e)
- merge /structure and /teach into /explain, and strip the footer (7486bcb)
- move every OPSIN call onto workers, add per-IP caps (a1dae9a)
- name cache keyed on the Orthonym version (e910816)
- parse SDF, molfile, CSV and SMILES-list input (46d234e)
- populate name_range from proven character spans (37538f0)
- rebuild explain around OPSIN part tree, drop SMARTS rules (b29d98a)
- redesign /about as the round trip, drawn (15beb73)
- Redis and worker services, and a build that proves OPSIN works (1a03abc)
- Redis store owning every key and TTL (84143b4)
- refresh vendored Orthonym and adopt its new tier vocabulary (e08d721)
- sleeker /from-name — denser rows, smaller buttons, pastel downloads (4df9800)
- split OPSIN root part into parent and suffix by locant (9265401)
- teaching route with a drawing area that names what you draw (87d1a60)
- TechX card-bento redesign wearing ChemAudit chrome (ae10123)
- the /from-name table carries InChI and canonical SMILES too ([55ce771](55ce771...