TARGETED PRIOR-ART AND DATA AUDIT — corrected M002, 2026-10-26

Conclusion
The construction is an established sparse-deck/GAK subfamily. I did not find
the exact corrected conditional exclusion of a full83-cycle base plus one
fixed off-top exception, with arbitrary independent starting decks and no
ordinary alphabet-size bound, in the inspected snapshots. This is a bounded
literature statement, not a first-discovery claim. Discord discussions and
unindexed/private work were not searched. No external contact was made.

Exact source snapshots
Lymm37/eye-messages wiki:546aa0466db896b6e71925eb64149b34f33107da
  https://github.com/Lymm37/eye-messages/wiki
mvelzel/eye-vibe:0ba8ca9ed4660d74f68abafa3e4743935222e885
  https://github.com/mvelzel/eye-vibe
Lymm code checkout:184bea7e633e8cddd46ad56fa51bc9969d5c0da8
SirCapybar/NoitaEyeGlyphResearch:cea1f8438ad790976b50a776e5362b21ea7bdce7
  https://github.com/SirCapybar/NoitaEyeGlyphResearch

Search scope and reproducibility
audit_sources.py searched768 .md/.py/.txt files in the two prior-art snapshot
trees, excluding .git. Exact regexes and all124 matching lines are preserved in
provenance_checks.json/search_matches.json. Terms include off-top, hidden swap,
one/single exception, fixed pair,83-cycle/full-cycle, rank0, common base,
return gap and consecutive return. The review also follows the related source
implementations and published comparison construction, not just keyword hits.

Closest prior work (paths relative to prior_art_sources/)
1. lymm-wiki/Deck-Cipher.md:3–15.
   General deck definition: distinct output source positions give immediate
   reversibility, and plaintext permutations may be close to a shared base.
   Initial-order normalization assumes one common initial deck up to card
   relabeling. It does not justify identifying independently chosen starts.
   The broad GAK/deck hypothesis is not excluded by this project's M002 result.
   https://github.com/Lymm37/eye-messages/wiki/Deck-Cipher

2. eye-vibe/src/eye_mystery/sparse_deck.py:1–7,59–117;
   eye-vibe/src/eye_mystery/deck_base_generic.py:152–200.
   The generic construction applies a base, swaps the selected rank with0,
   then applies a fixed non-top swap assigned to that rank. M002 is a strict
   subfamily: rank0's hidden rule is(u,v), every other hidden rule is identity.
   Since swap(0,0) is identity, rank0 is the exceptional off-top-only action.
   The rank-specific hidden rules are already known; our family is not new.
   https://github.com/mvelzel/eye-vibe/blob/0ba8ca9ed4660d74f68abafa3e4743935222e885/src/eye_mystery/deck_base_generic.py

3. eye-vibe/docs/research-log.md:77–149;
   scripts/search_hidden_swap_decks.py; scripts/optimize_sparse_deck.py.
   Prior work scans finite affine/physical base dictionaries with formulaic
   hidden swaps, and performs coordinate descent over3321 hidden swaps at a
   chosen rank. One/five active-rule planted controls succeed for a particular
   base;26-rule control fails. The text explicitly limits this calibrated
   heuristic to that neighborhood. This is not exhaustive unknown-initial-key
   rejection of the current M002 subfamily.
   https://github.com/mvelzel/eye-vibe/blob/0ba8ca9ed4660d74f68abafa3e4743935222e885/docs/research-log.md

4. eye-vibe/docs/research-log.md:151–181;
   scripts/solve_common_base_swap.py:2–7,20–37,177 onward.
   Initial-deck and arbitrary-base annealers are described as heuristic.
   Exact common-base/top-swap Z3 runs time out; UNKNOWN is not exclusion.
   This solver omits the exceptional off-top action and imposes a bounded
   alphabet. Its chosen30/18 action windows also precede this project's D003
   incoming-state correction. These prior outcomes do not certify M002 UNSAT.

5. eye-vibe/docs/research-log.md:724–784;
   scripts/solve_sparse_crib_z3.py.
   Exact prefix-crib tests fix additional plaintext and selected base models.
   They produce some UNSAT cases and larger hidden-swap SAT witnesses. Neither
   result settles all plaintext under our corrected alignment-only hypothesis.

6. eye-vibe/src/eye_mystery/arbitrary_state_sparse_gak.py:1–6,93 onward.
   General independent-start GAK recovery is already implemented, with a fixed
   permutation per given plaintext symbol. This is broader than M002 and is
   not claimed excluded. The word 'sparse' in the filename describes a partial
   permutation encoding; it does not imply the one-exception restriction.

Boundary correction is not a new invariant
Lymm's Proof-that-GAK-has-perfect-isomorphism.md explicitly includes equality
with the incoming visible state. The Analytical Overview also explains why
four repeated plaintext letters can yield a five-observation isomorph. Our
D003 correction is an application of that established fact. The eye-vibe
search_sparse_deck.py:103–132 comparison function uses the full30/18 actions;
we must not describe its negative results as equivalent to the corrected
29/29/17 model. See T003-E008 for precise source citations and the counterexample.

Data reparse
The canonical messages.json agrees at every one of1036 positions with both:
  prior_art_sources/lymm-wiki/Data.md (ASCII code point minus32);
  data/capybar-repo/NoitaEyeGlyphResearchLib/data.csv (each three base5 digits).
The second parse uses no original canonicalization script. Critical starts,
gap8/9 endpoints and corrected alignment boundaries are separately recorded in
provenance_checks.json. A one-symbol in-memory mutation is detected.
Canonical SHA256:
ab6c4765c09ccd6dce4aeeba26fb391e5966a3bfe5587c0bf10649ba03a3d849

The two archived representations may share a common upstream transcription;
this does not replace a fresh extraction or visual check in the game itself.
