# Fixed one-rune feedback hits a frequency barrier

**Result: the proposed fixed feedback cipher cannot produce a rune-frequency distribution resembling the solved LP1 benchmark, regardless of its unknown rune ordering. No new plaintext.** This is an exact empirical constraint on a specific family, not a proof that the text cannot be English or that all feedback ciphers fail.

The clearest number: with one common decoder of this kind across the eight substantial unsolved sections, **no output rune can occupy more than 5.53% of the scored positions**. In our solved LP1 benchmark, E occupies **12.67%**. Even the most favorable permitted reassignment leaves the output much more evenly distributed than that benchmark.

## The candidate and its predictions

Let `pi` assign the 29 ciphertext runes to the values 0–28 in an unknown, arbitrary order. Let `r` be one fixed plaintext rune value. The proposed decoder is:

```
p[i] = (pi[c[i]] - pi[c[i-1]] + r) mod 29
```

This extends Session 4's natural-order linear feedback by allowing an arbitrary permutation before taking the difference. One shared `pi` and `r` apply to all selected sections. The initial state is unspecified, so the first rune of each section is excluded from the frequency analysis. Punctuation, words and pages do not change the decoding rule.

Two useful consequences follow without knowing the key:

- Whenever the ciphertext repeats its previous rune, the decoded rune is `r`. A rare plaintext `r` therefore gives rare adjacent ciphertext repeats. Conversely, in this model, every occurrence of `r` after a section's first position produces such a repeat.
- The repeated six-rune ciphertext phrase must decode to the **same final five plaintext runes** at both locations. Its first plaintext rune must **differ**, because the preceding ciphertext runes are F and X. An injective `pi` cannot map those predecessors to the same value. Thus this model does not assume that the whole repeated phrase means the same thing twice.

Neither consequence establishes that Cicada used the model.

## Why an unknown-key search was unnecessary

The initial plan was to fit an unknown ordering and validate it on remaining sections. Before fitting, a frequency bound exposed a limitation that applies to every possible ordering. We therefore replaced the heuristic key search with this exact structural test. **No unknown key was fitted or recovered in this session.**

For any fixed previous ciphertext rune, the proposed decoder maps the 29 possible next runes one-to-one onto the plaintext alphabet. Consider a table whose rows are previous ciphertext runes and whose columns are next runes. Decoding can rearrange the counts within each row, but it cannot change those counts.

To give the candidate every advantage, allow each row to choose its own independent permutation. That is a much larger family than the single shared `pi` above. Keep only the required rule that all diagonal counts map to the same plaintext rune `r`.

The most concentrated possible output distribution in this relaxed family is obtained by:

1. Combining all diagonal counts into one output bin.
2. Sorting the 28 remaining counts in each row from largest to smallest.
3. Aligning the largest counts across all rows, then the second-largest counts, and so on.

The resulting histogram gives an exact maximum for the frequency of any single output rune, and an exact minimum for output entropy in the relaxed family. A shared-permutation difference cipher may be unable to attain this optimum; it cannot improve on it.

For completeness, the entropy claim follows from majorization: any selection of the largest `k` output bins can collect at most the sum of the largest `k` counts in each row. Aligned sorted rows attain those partial sums, and Shannon entropy is minimized by that most concentrated histogram. The shared diagonal bin is fixed throughout this comparison.

## Results on the established section split

Entropy is measured in bits per rune. Lower values indicate more uneven single-rune frequencies. These are **exact bounds on the empirical decoded histograms**, not estimated population entropies or significance tests.

| Scope | Scored positions | Adjacent repeats | Minimum possible output entropy | Maximum possible frequency of any output rune |
|---|---:|---:|---:|---:|
| First four sections: 0, 1, 2, 4 | 5,493 | 29 | 4.7284 | 6.44% |
| Remaining four: 5, 6, 7, 8 | 7,446 | 57 | 4.7604 | 6.18% |
| All eight, one shared mapping | 12,939 | 86 | 4.7894 | 5.53% |
| Solved LP1 benchmark | 1,958 | Not used for this comparison | **Observed: 4.2606** | **Observed E: 12.67%** |

The LP1 benchmark pools the same five solved groups used in our established language model, excluding the first rune of each group to match the transition scope. It is a reference sample, not an assertion that every English passage must have exactly these frequencies.

The pooled bound is tighter because a shared mapping has to handle the combined transition counts. If keys differ between sections, the pooled bound does not apply in that form. Per-section bounds are retained in the results; they do not uniformly exclude the benchmark, particularly for short sections.

The familiar training/evaluation split is retained for separate checks. These sections have appeared in earlier investigations, and the diagnostic was selected after inspecting the transition structure. This is **not a fresh blind validation or a preregistered statistical result**. No evaluation scores were used to fit or change a key, because there was no key fit.

## Verification and the limit of the conclusion

Two constructed fixed-key examples use random rune orderings. They cycle solved rune streams to match the eight observed section lengths, then encrypt and decrypt them with the stated key. The bound correctly permits their recovered plaintext distributions.

| Constructed control | Actual plaintext entropy | Bound permits entropy down to | Ciphertext adjacent repeats | Known-key recovery |
|---|---:|---:|---:|---|
| Cycled LP1 rune stream, `r = EA` | 4.2458 | 4.2273 | 65 | Exact |
| Cycled solved LP2 page 57, `r = F` | 4.0754 | 4.0695 | 408 | Exact |

These are encoder/decoder and bound checks. They do **not** demonstrate unknown-key recovery. Cycling known text also makes them deliberately constructed examples, not additional natural-language evidence. The different repeat counts reflect the selected rune's frequency in each control.

Two small three-symbol tables were checked exhaustively: all 216 independent row permutations and all eight assignments with a common diagonal output. In both cases, exhaustive minimum entropy agrees with the sorting formula. An additional six-rune fixture verifies the predicted matching five-rune suffix and differing first plaintext rune.

A final control deliberately changes the permutation of nonzero offsets at **every position**, while keeping zero as the repeat instruction. It recovers the same LP1-based plaintext exactly and has the same 65 adjacent repeats. Its ciphertext gives a fixed-row lower bound of **4.7878 bits**, even though its recovered plaintext has entropy **4.2458 bits**.

That is not a contradiction: the changing-key decoder is outside the fixed-row family. It is a concrete demonstration that this audit **cannot rule out extra state, changing keys or feedback in general**. We have not shown that this changing-key control explains the observed repeated phrase or that its keys can be recovered.

## What this changes

The arbitrary rune ordering does not rescue this fixed one-rune feedback model as a direct route to plaintext with frequencies like the solved LP sample. Searching millions of such orderings would not overcome the exact bound.

This does not mathematically prohibit an unusually balanced English passage, another language, an intermediate encoding, different section keys, inserted nulls or a larger alphabet. Those would require additional evidence and different assumptions. The test does not identify any such alternative.

A useful next bounded question is whether allowing a short position-dependent cycle in the decoder changes the constraint enough to merit key recovery. That would concern the decoding map itself; the earlier negative search for periodic locations of rare doubles does not answer it. Any such follow-up needs controls for the rapidly shrinking counts per context. No position-cycle search was run here.

## Reproduction and evidence

Run `python -B keyed_difference_audit.py` with Python and NumPy beside the existing `word_core.py`, `lp_core.py` and transcription files. The script records transition matrices, relaxed optimal histograms, separate section results, all control keys and hashes. No network calls or key-search optimizer are used.

- [Reproducible audit](/files/keyed_difference_audit.py)
- [Complete results and controls](/files/keyed_difference_results.json)
- [Image confirmation of the repeated phrase](/sessions/32.html)
- [Earlier linear feedback tests](/sessions/4.html)
- [Earlier transition-prediction comparison](/sessions/26.html)
- [Inventory-controlled repeat shortage](/sessions/29.html)
