Skip to content

v0.3.0 — Remove [validation] extra (libomp collision avoidance)

Latest

Choose a tag to compare

@jmcentire jmcentire released this 12 Apr 03:13
· 9 commits to main since this release

Breaking change

The [validation] optional extra is removed. Anyone installing transmogrifier[validation] will now get a pip error. Core transmogrifier functionality (register detection, rule-based rewriting, LLM-based translation via the anthropic/openai/gemini backends, MCP server, CLI) is unchanged and does not depend on any native libraries.

Why

The [validation] extra depended on sentence-transformers, which transitively pulls torch and scikit-learn. On macOS those two wheels ship mutually-incompatible libomp.dylib install names, and the OpenMP runtime aborts the Python process when both load into memory together. pip install 'transmogrifier[validation]' was unsafe on any fresh macOS machine.

The validator itself was a single-purpose optional feature — a >0.95 cosine-similarity check on embedding pairs to catch semantic drift during Level 3 LLM translation. Nothing else in transmogrifier depended on it, and no downstream tool (advocate, constrain, kindex, pact) imported it. The cost-benefit didn't support keeping it as a primary feature.

Migration

If you were using transmogrifier[validation]:

  1. Drop the extra. pip install transmogrifier gives you the core register-translation functionality. The Level 1 (system prompt injection) and Level 2 (rule-based rewriting) paths are unchanged.
  2. If you need validation, you have two options until the Voyage-based replacement ships:
    • Install sentence-transformers manually and carry the libomp risk yourself, then implement the two-line cosine-similarity check directly in your caller code.
    • Wait for transmogrifier[validation-voyage], which will provide the same semantic-drift check via Voyage AI's embeddings API (Anthropic's officially recommended embeddings provider) with no native dependencies. See NOTES.md in the repo for the implementation sketch.

What's unchanged

  • Register detection (transmog detect)
  • Rule-based rewriting (Level 1/2)
  • LLM-based translation via anthropic/openai/gemini backends (Level 3)
  • MCP server (transmog-mcp)
  • CLI (transmogrify)
  • Model profiles, calibration, task classifier, system prompts, kindex integration
  • All existing tests pass

This is a pre-1.0 minor version bump (0.2.0 → 0.3.0) because removing a public optional extra is a breaking change for pinned dependents per semver convention.