orthonym.assembly.handlers.ring_ester#

Note

Internal API. Names and behaviour may change between releases.

a phase ring_ester handler — Tier-2 mid-tier direct-return.

Verbatim lift of composer.py:850-865 (inline dispatch branch). Body _assemble_ring_with_ester_prefixes at composer.py:3204-3455 (254 LOC) STAYS until Plan-03 commit 03-10 (composer.py thinning) per internal notes.

Predicate gates on: 1. principal_group == 'ester' 2. exocyclic_esters from rules.esters.detect_exocyclic_esters(features.mol) 3. not _is_complex_ring_system(features.mol)

ring_ester fires BEFORE polyfunctional + ester-family + Tier-A in the inline cascade order (composer.py:850), so no additional mutex is needed.

Byte-identical contract per internal notes (DECOMP-03): handler’s behavior on every canary fixture MUST equal the inline branch’s behavior bit-for-bit; verified by python scripts/verify_decomp_byte_identical.py –mode delta at the atomic commit gate.

IUPAC cite: (cyclic ester with exocyclic substituents).

References: - composer.py:850-865 (inline dispatch branch; REMOVED at this commit). - composer.py:3204-3455 (_assemble_ring_with_ester_prefixes body; STAYS

until 03-10 thinning).

  • composer.py:_is_complex_ring_system (mutex helper).

  • rules.esters.detect_exocyclic_esters (predicate helper).

  • internal notes-DECOMP.md row ‘ring_ester’ + Tier-2 row.

orthonym.assembly.handlers.ring_ester.name_ring_ester(features, mol=None, style='pin')#

Direct-return ring_ester handler.

Verbatim semantics of composer.py:850-865. Returns NamingResult(name=<stereo-injected name>, tree=None, atom_to_locant_hint=None) on success. Wraps the result in _inject_stereo_if_missing per the inline branch behavior at composer.py:865.