Entropy compression with the opportunistic semantic redundancy filter
(#544) pinned OFF. The regular path uses the shared embedding engine
whenever it happens to be loaded, so its output depends on runtime state.
Benchmarks and the scorecard (#211) need run-to-run and machine-to-machine
reproducibility, so they must go through this entry point.
Task-conditioned entropy compression: lines that would normally be dropped
for low entropy are kept if they contain task-relevant keywords. This is
the Information Bottleneck proxy: we compress away only what is neither
surprising (high H) nor task-relevant (mentions goal concepts).
Falls back to pure entropy when task_keywords is empty.
entropy_compress_to_density with structure for source files (ext):
definition and import lines are kept first, then lines that carry an
identifier or literal not yet in the view, then the highest-entropy rest.
Dropped runs become [lean-ctx: omitted N lines] markers, so the result
never passes for complete source.
Like entropy_compress_adaptive but overrides the file-adaptive BPE-entropy
threshold (e.g. from the aggressiveness knob) while keeping the file-adaptive
jaccard. Pure function of its inputs (#498). Higher bpe_entropy drops more
low-information lines.
Normalized Shannon entropy: H(X) / log₂(n) where n = number of unique symbols.
Returns a value in [0, 1] where 0 = perfectly predictable, 1 = maximum entropy.
This makes thresholds comparable across different alphabet sizes.