# profilefix-no-short-no-counter-v1 This candidate composes two causal Profilefix ablations: 1. `profilefix-no-short-v1`: genuine short emissions are disabled while the original short selector and length-bucket RNG draws are still consumed. 2. `profilefix-no-counter-v1`: rows assigned to `prefix_cumulative_counter` are causally replaced. Relative to `profilefix-no-short-v1`, it changes only counter-assigned rows. Every emitted array is full-length (4096). For each such row, the generator: 1. calls and discards the complete original counter builder on Profilefix's main RNG stream; 2. samples a replacement family from the normalized fourteen-family UID131 composition on a deterministic tagged `SeedSequence` substream; 3. builds a full-length replacement and applies UID131's ordinary measurement artifact path and original seasonal bank on that side stream. The 2.5% counter selector mass is not renormalized. Consequently all selector draws, all main-stream builder/artifact draws, and every non-counter row remain byte-identical to `profilefix-no-short-v1` into later chunks. A thread-local seasonal-bank selector confines UID131's original bank to replacement calls, without mutating the Profilefix bank observed by non-counter rows or concurrent generator threads. Its thread-local subclass initializes `uid131 = False` for each thread and uses direct attribute reads accepted by the campaign inventory scanner. The extra discarded build adds a small amount of CPU work on about 2.5% of rows. This is intentional: causal identity is more important at the screening stage than optimizing away unmeasured work. ## Causal validation The identity test wraps `profilefix-no-short-v1`'s counter builder with a sentinel while still consuming its original draws. Across 193 rows and four chunks, every non-counter row is byte-identical and every tagged counter row is replaced. A separate test proves replacement-stream determinism and another checks the replacement seasonal path against exact UID131. A two-thread coordination test proves that enabling the UID131 bank in one thread cannot leak into either another worker or the main thread. From `/root/91`: ```bash PYTHONPATH=cascade cascade/.venv/bin/pytest -q \ champion/candidate/profilefix-no-short-no-counter-v1/tests cascade/.venv/bin/ruff check \ champion/candidate/profilefix-no-short-no-counter-v1 PYTHONPATH=cascade cascade/.venv/bin/python -m cascade.miner.cli verify \ champion/candidate/profilefix-no-short-no-counter-v1 \ --chain-toml cascade/chain.toml PYTHONPATH=cascade:champion/harness cascade/.venv/bin/python \ -m champion.generic_screen_v040_v1 inventory-candidate \ --workspace /root/91 \ --source-path champion/candidate/profilefix-no-short-no-counter-v1 ``` Current result: 21 tests pass, Ruff passes, Cascade verify accepts the deterministic seed-0 corpus, and the generic-screen campaign inventory accepts the complete source tree. Status: **prepared-unscored**. Promotion requires source-disjoint public heat and then a full paired GPU duel against exact UID131.