Repository navigation
Releases
Releases · emcd/python-classcore
v1.15
classcore v1.15 (2026-10-16)
Enhancements
- Export the reference attribute-name calculator publicly from
classcore.standard.nominawith a configurable package prefix:
downstream packages constructAttrnameCalculator( package_name = ... )to generate and detect grammar-conformant internal names
under their own prefix, sharing classcore's vocabulary by
construction instead of mirroring it. The grammar containers stay
private; detection consults reserved framework vocabulary.
v1.14
classcore v1.14 (2026-10-15)
Enhancements
- Expose the class-level mutability exemption sets publicly from
classcore.standard.nomina:abc_class_mutables(stdlib ABC
machinery) andtyping_class_mutables(stdlib typing machinery,
including the CPython 3.15__typing_is_deprecated_inherited_runtime_protocol__
dunder). Downstream packages share these sets by reference instead of
carrying copies which can drift, as Frigid's did on Python 3.15. The
canonical home remainsclasscore.standard.__; the nomina aliases
are identically the same objects.
v1.13
classcore v1.13 (2026-10-15)
Enhancements
- Add attribute explanations:
explain_attributein
classcore.standard.explanationsreturns the decision trace for one
attribute of one target — active behaviors per evaluated level and, for
each operation, a verdict carrying its decision under precedence
semantics: permission by inapplicability, omni, names, predicate, or
regex, or prohibition. Decision payloads are typed per decision class,
explanation records are immutable with immutable nested collections,
and framework-owned and stdlib-machinery attributes are marked
internal. - Attribute internal marking now follows metaclass-carried
contributions: the attribute namer'sis_internal_namedetector
marks framework names (grammar-constrained static stems and both
digest-mangled forms), the abstract-base wiring marks stdlib ABC
machinery names only where that machinery operates, and downstream
class_factorynamers contribute their own detectors, so
explain_attributereports downstream framework attributes
truthfully.is_internal_nametakes the target and consults the
metaclass chain; lookalike names that fail the detector grammar stay
unmarked, and the public_dynadoc_fragments_declaration
convention is never marked.
Repairs
- Fix construction of function-local dataclass classes. Classes derived
from the dataclass base classes (DataclassObject,
DataclassObjectMutable,DataclassProtocol, and
DataclassProtocolMutable) failed withTypeErrorwhen defined
inside a function body, because the construction marker could not be
recognized during dataclass slot reproduction. - Permit CPython 3.15+ typing machinery dunder on immutable classes.
typingsets__typing_is_deprecated_inherited_runtime_protocol__
during class decoration and in theruntime_checkabledecorator; the
class-level immutability behavior now exempts it, and the protocol
member snapshot excludes it from__protocol_attrs__.
v1.12
classcore v1.12 (2026-08-15)
Enhancements
- Add abstract base class support:
AbstractClassmetaclass and
AbstractObjectbase class combine standard behaviors with
abc.ABCMetamachinery (abstract method enforcement, virtual subclass
registration), and mix with external ABC-based classes without
metaclass conflicts. Re-parentProtocolClassunderAbstractClass,
unifying the standard metaclass taxonomy underClass. - Improve API documentation for class construction and initialization
signatures, including parameter descriptions and the metaclass
delegation contract.
Repairs
- Establish proper inheritance hierarchies for standard metaclasses.
Dataclassnow inherits fromClass,DataclassMutablefrom
Dataclass,ProtocolDataclassfromProtocolClass, and
ProtocolDataclassMutablefromProtocolDataclass. This eliminates
metaclass conflicts when inheriting from classes backed by different
metaclasses in the same family. - Fix
typing.runtime_checkablesupport for classcore protocol classes.
@runtime_checkablecan now be applied via thedecorators=
metaclass argument or directly after class creation.
isinstance()structural subtyping works correctly with
@runtime_checkableclasscore protocols. - Fix runtime protocol recognition for subclasses of classcore protocol
base classes. Previously,typing_extensions.Protocol.__init_subclass__
set_is_protocol = Falseon these subclasses due to an identity check
that did not recognize classcore's own protocol base classes. Subclasses
are now properly detected via structural analysis.
v1.11
classcore v1.11 (2026-07-20)
Enhancements
- Export
ClassDecorator,ClassDecorators,ClassDecoratorFactory, andModuleReclassifiertype aliases for downstream consumption.
v1.10
classcore v1.10 (2025-09-25)
Enhancements
- Expose exception mutability constants and public identifier utility function for downstream reuse.
Repairs
- Fix additional PyPy compatibility issues with exception and ABC cache attribute mutations.
v1.9
classcore v1.9 (2025-09-24)
Repairs
- Fix PyPy compatibility with super() calls in slotted dataclasses.
v1.8
Classcore v1.8 (2025-07-23)
Enhancements
- Standard: Modules: Allow certain modules to be excluded from reclassification.
Also, implement cycle detection.
Repairs
- Standard: Modules: Reclassify modules with proper depth-first traversal.
v1.7
Classcore v1.7 (2025-07-08)
Enhancements
- Standard: Add
ignore_init_argumentsdecorator argument and
instances_ignore_init_argumentsclass argument to support cases, such as
inheritance fromurllib.parse.ParseResultwhich inherits fromtupleand
overrides__new__instead of__init__. In such cases,__new__
processes the instance production arguments rather than__init__. However,
the standard Python behavior is to present the arguments to both__new__
and__init__, which is problematic since we always provide an__init__
head.
v1.6.1
Classcore v1.6.1 (2025-07-02)
Repairs
- Fix deprecation warnings from finalize_module by refactoring to use private _reclassify_module implementation.