Skip to content

Releases: Steinbeck-Lab/Orthonym-Web

v0.5.0

Choose a tag to compare

@Kohulan Kohulan released this 11 Oct 07:02
f5592b0

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

  • cite the Orthonym paper on ChemRxiv (a686ba6)
  • cite the Orthonym paper on ChemRxiv (331f1fb)
  • Privacy v6 and Terms for Ketcher 3.18 (f6fafee)

v0.4.2

Choose a tag to compare

@Kohulan Kohulan released this 06 Oct 12:39
10b4f79

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

  • describe the SMILES-path remap and the new census numbers (8a5ac35)
  • the SMILES-path match also keeps stereo (bb54a00)

v0.4.1

Choose a tag to compare

@Kohulan Kohulan released this 02 Oct 06:11
1348d3b

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

Choose a tag to compare

@Kohulan Kohulan released this 01 Oct 09:06
6c40284

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...
Read more

v0.3.0

Choose a tag to compare

@Kohulan Kohulan released this 29 Sep 09:21
3141b47

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

Choose a tag to compare

@Kohulan Kohulan released this 24 Sep 12:02
55b5b1d

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...
Read more