FIBONACCI RING — MOIRE v3.0.0
================================

WHAT IT ADDS
------------
The v2 Fibonacci Ring remains the progression engine. Its persistent ring
state is still Ω, A, B; K is recovered from the Fibonacci pair. No octave or
recursion-depth counter has been introduced.

Moiré adds three layers:
1. ACTUAL FACES: finite, data-bearing encrypted cells containing the ring's
   observation history and sampled face manifests.
2. POTENTIAL FACES: the implicit unbounded address space N={0,1,2,...}. It is
   never enumerated. A finite public window is rendered from it.
3. MOIRE FIELD: two overlapping phi-derived phase lattices. Their carrier and
   difference envelope are written beside every public slot. Actual cells and
   decoy cells have identical fixed lengths.

ACTUAL SLOT LOCATIONS are selected by HMAC-SHA256 using a key derived from the
passphrase. The payload is encrypted using AES-256-GCM. The resolver containing
the salt/nonce/actual slot map is itself authenticated-encrypted. The public
KDF salt is not secret. The passphrase is never written to disk.

SECURITY BOUNDARY
-----------------
Moiré interference and a large potential address space are NOT encryption.
They are a concealment/observation layer. Confidentiality and tamper detection
come from AES-256-GCM; keyed placement comes from HMAC. This is not a claim of
information-theoretic secrecy, and the public metadata exposes occupied cell
count and public window size. Use a strong unique passphrase. Protect backups.

REQUIREMENTS
------------
Python 3.10+
  py -m pip install cryptography

BUILD / RUN (PowerShell)
------------------------
$env:FIB_MOIRE_PASSPHRASE = "use-a-long-unique-passphrase"
py -3.13 fibonacci_ring_moire_v3.py --steps 128 --samples 64 `
  --window 65536 --block-size 512 --mutations `
  --log-dir fibonacci_ring_moire_v3_run

If the encrypted payload needs more slots, increase --window. The window is a
finite rendered slice; the potential address domain remains implicit and
unbounded. Each public slot stores two uint16 Moire values and one fixed-size
cell. Actual and decoy cells are the same length.

RECOVER
-------
Set the same environment variable and run:
py -3.13 fibonacci_ring_moire_v3.py --recover `
  --log-dir fibonacci_ring_moire_v3_run

Recovered actual-face data is written to recovered_actual_faces.json.
A wrong passphrase, modified resolver, or modified surface will fail AES-GCM
authentication or structural checks.

FILES
-----
fibonacci_ring_finite_observatory_v2.py  preserved v2 engine
fibonacci_ring_moire_v3.py               Moire builder and resolver
moire_public.json                        public surface parameters
moire_surface.bin                       public Moire field and opaque cells
moire_kdf.json                           public KDF salt/parameters
moire_resolver.enc                       encrypted private address resolver
ring/                                    original append-only Fibonacci trace

DESIGN LIMITS
-------------
The public surface is a finite window, not an enumeration of the infinite
potential space. The phase field uses floating-point trigonometry for its
rendered uint16 intensities; the Fibonacci progression and topology f-vector
remain those of the v2 engine. Finite Moire observations cannot establish
security against every side channel. Do not reuse passwords or expose the
private resolver.
