# Voynich Research Program — Action Plan v1

**Purpose.** Convert the current STA + harmonic/Hodge framework into a clean, testable, reproducible research program. Tone: rigorous and falsifiable; no extraordinary claims without extraordinary evidence.

## 1. Scope & Working Hypotheses

- **H0 — null:** Voynich text has no globally consistent decipherment key; observed regularities arise from layout/production constraints.
- **H1 — structure:** The script exhibits reproducible, language-like structure, including Currier A/B, positional effects, and token distributions that survive holdout tests.
- **H2 — periodicity candidate:** A layout-conditioned periodic signal near period ~17 exists in position-based sequences and is statistically significant under pre-registered controls.
- **H3 — semantic alignment:** If any key exists, it must generalize across sections and align with illustration semantics; e.g. zodiac month labels should occur only on zodiac pages.

## 2. Data Assets

- **Images:** Yale/Beinecke MS 408 IIIF, used only for visual alignment checks.
- **Transcriptions:** EVA/Takahashi, v101; canonicalized to IVTFF-like lines.
- **Tokenization:** EVA grapheme longest-match tokenizer.
- **STA mapping:** Two-character family+member encoding, CSV-driven.
- **Metadata:** Currier A/B labels, scribal hands, section boundaries, folio ids.

### Provenance & integrity

Maintain a manifest with SHA256 for every corpus file and log all normalization edits, including IVTFF normalization, line merges, and line splits.

## 3. CLI Surface

- `voytool ingest` — fetch or load standard EVA/v101 sources.
- `voytool normalize --map eva_to_sta.csv` — EVA→STA pass; emits JSONL with `{folio, line_id, raw, sta}`.
- `voytool stats` — token/family/bigram frequencies, position stats, word-length histograms.
- `voytool spectral` — build positional series and run DFT/Lomb–Scargle; exports power spectra and bootstrap CIs.
- `voytool decode` — apply substitution tables from CSV using longest-match grapheme tokenizer.
- `voytool evaluate` — score candidate decodings with BPT, English-likeness heuristics, dictionary hits, perplexity deltas, and section-coverage uniformity.
- `voytool concord` — KWIC around STA/EVA tokens.

Engineering defaults:

- Deterministic RNG seeds.
- One chart per figure.
- Every script emits CSV/JSON plus PNG where applicable; never plot-only output.

## 4. Experimental Phases

### Phase 0 — Setup & sanity

- Rebuild corpora.
- Verify counts against published baselines: tokens, words, lines per folio.
- Unit-test tokenizer grapheme boundaries and STA mapping.

### Phase 1 — Substitution scaffolding

- Implement longest-match grapheme tokenizer.
- Define substitution CSV schema, unidirectional, with optional bigram/trigram entries.
- Score candidates on held-out folios using BPT, word-shape conformity, function-word frequency, bigram KL divergence against English, and coverage uniformity across sections.
- Reject mappings that require per-section patches to work.

### Phase 2 — Structural decoding

- Add position-conditioned rules: line-initial gallows, word-final variants, etc.
- Incorporate Currier A/B priors.
- Fit separate parameters and test cross-transfer.
- Run ablations: remove each rule family and measure Δ in BPT/error rates.

### Phase 3 — Semantics via images

- Use IIIF-assisted visual checks.
- Zodiac folios must contain correct month labels if any mapping claims month names.
- Herbal pages should penalize month-like strings and reward consistent plant-label placements only where expected.
- Align text bands to illustration regions and record false-positive rates.

### Phase 4 — Robustness & replication

- Train/test splits by scribal hand and section.
- Produce independent replication pack with scripts and a tiny corpus.

## 5. Periodicity / Spectral Test

### Series to analyze

Per folio and concatenated:

- tokens per line
- grapheme family of first/last token per line
- gallows presence index
- line-initial/final markers
- interword lengths

### Methods

- DFT and Lomb–Scargle for periods 2–64.
- Report peak power at candidate periods.
- Block bootstrap respecting within-folio autocorrelation.
- 95% CI for power near period 17.
- Effect size: power ratio at period 17 vs. median neighborhood `k±2`.

### Controls

- **Line shuffle within folio:** spike persists → pass.
- **Random spacer insertion:** spike near 17 persists with reduced power → conditional pass.
- **Reflow / randomized line breaks:** spike disappears → expected fail.
- **Rotation / page-order randomization:** invariant to order → pass.
- **Transliteration swap EVA vs. STA:** quantify sensitivity.
- **Architecture swap baseline transformer vs. framework features:** invariant should weaken under baseline.

## 6. Success Criteria

### No-key baseline

Reproducible structure without coherent plaintext implies H0 is not falsified.

### If claiming a key

A key claim requires all of the following:

1. One rule set decodes all sections consistently.
2. Output exhibits grammar/vocabulary consistent with a historical language.
3. Independent teams replicate on fresh folios.
4. Peer-reviewed publication endures critique.

Auxiliary metrics:

- cross-section BPT reduction
- STA→model perplexity Δ
- month-label accuracy on zodiac pages
- false-positive penalties elsewhere

## 7. Reproducibility Checklist

- Exact Python/package environment.
- RNG seeds.
- SHA256 manifest for corpora and outputs.
- Command logs for every figure/table.
- Small toy dataset with expected hashes.

## 8. Risks & Mitigations

- **Overfitting to Currier A/B:** enforce cross-section validation.
- **Tokenizer bias:** compare EVA vs. STA pipelines and publish failures.
- **Layout artifacts:** rely on reflow controls and report deltas.
- **Ambiguous success metrics:** pre-register thresholds and publish negatives.

## 9. Outreach Pack

- 2-page technical appendix in PDF/Markdown.
- Cover email templates in English and French requesting expert review.
- Minimal GitHub repo with CI running `stats`, `spectral`, and a projector sanity check.

## 10. Immediate Deliverables

- Export technical appendix to PDF.
- Create GitHub-ready skeleton: README, scripts, CI, sample data.
- Run `spectral` on EVA/STA sample and ship CSV + plots.
- Package zip with CLI, sample data, and example outputs.

## Governance

Keep this file as the plan of record. Update version and manifest whenever thresholds, procedures, or source corpora change.

## Important separation note

Simple substitution-decoder demos are allowed only as negative controls or scaffolding. They must not be presented as decipherment evidence unless they satisfy the success criteria above.
