Files
logos-protocol/cpp
Dario Gabriel LipicarandClaude Opus 5 4a7e12d7ed docs(version): the obvious way to guard a conditional surface is wrong
Two corrections, both to claims this header makes about its own versioning.

1. It PRESCRIBED the buggy guard. The 0.5 note told codegen to write
   `LOGOS_PROTOCOL_VERSION_MINOR >= 5`, and two emitters duly do
   (logos-cpp-sdk's lidl_gen_cdylib.cpp and logos-plugin-qt's glue). At
   1.0.0 the MINOR resets to 0 and every such guard silently goes false.
   Nothing fails to build and nothing fails to load — the definitions and
   the calls disappear together — so the symptom is modules quietly losing
   teardown and grantability, with no diagnostic anywhere.

   The rule now sits above the version macros, with the expanded arithmetic
   spelled out and a note on why it must NOT hide behind a function-like
   macro: the generated sources are resolved by unifdef in the backends'
   ABI checks, and unifdef silently no-ops on what it cannot evaluate.
   logos-rust-sdk already compares the (major, minor) tuple.

2. It repeated the compatibility claim already corrected in
   logos_module_impl.h — that the teardown pair is safe because the glue is
   generated alongside the module. That does not follow, and the ABI has
   been broken twice on the strength of it. Being generated in the same
   build makes the two agree on the VERSION; it says nothing about which
   SYMBOLS a backend's emitter writes for that version. The wrong version
   of this reasoning living in two headers is how it survived the first
   correction.

Documentation only; no macro or value changes.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-21 16:07:29 -03:00
..