# Local J-lens experiment plan

Recorded 2026-09-07 before any model inference or evaluation results. This is a deliberately constructed convenience sample, not a benchmark of general reasoning. Portfolio and editorial drafts are read-only.

## Questions and hypotheses

H1 (readout): at a development-selected block and token position, the rank of the implicit source country is lower under J-lens than ordinary logit lens and the actual next-token distribution. Primary comparison: paired difference in log10 rank (logit minus J), summarized per country. Also report full rank trajectories and top-100 counts. This cannot establish information inaccessible to a human reading the prompt: the city already implies its country. We test incremental visibility in a vocabulary readout, not predictive uplift for a human or agent.

H2 (intervention): exchanging source-country and target-country coordinates in the span of their J-lens directions increases the log likelihood of the predicted target currency relative to the correct currency, more than magnitude/location-matched random and unrelated concept perturbations. Primary continuous outcome: change in full canonical currency continuation log odds. Behavioral outcome: fraction of greedy continuations beginning with a target currency answer. Report both all cases and baseline-correct cases. A specific effect demonstrates causal manipulability, not complete recovery of the original computation or necessity.

H3 (optional): fresh, unled explanation runs mention the country implicated by intervention. Attempt only if readout and intervention give interpretable effects. These are new generated self-reports with original prompt and answer, no original KV cache, never transcripts of internal computation.

## Data and split

One task family: city -> implicit country -> currency. Raw text completion matches the reference walkthrough: `Fact: The currency used in the country containing {city} is the`. Canonical continuations include nationality where conventional (e.g. `Japanese yen`). Country strings must not be in the prompt or canonical currency string as an exact whole word; demonyms and a direct city-currency association remain confounds. An eight-case development set uses distinct countries. Evaluation comprises 32 cases (16 countries, two cities each), with no development cities or countries. Boot-shaped Italy is a separate upstream showcase only. All cases and targets are written before running development. Country-to-target mapping is a fixed cycle; target currency differs from source. Do not remove baseline failures. Tokenization exclusions are mechanical, recorded, and counted.

Country probes use exactly the tokenizer encoding of a leading space plus country name. If this is multiple tokens, record it and exclude that case from the single-token readout/swap analysis rather than select a substring. Full currency continuation likelihood sums conditional log probabilities of every token (no length normalization); report paired changes so constant target/source length biases cancel. Greedy outputs are independently retained and scored against prespecified currency names/codes within the first clause (before newline, period, or semicolon). Ambiguous, incoherent, wrong, and truncated outputs are retained. Output naming a country is measured separately from probe invisibility; no claim of an unspoken intermediate for those cases.

## Development and freezing

First verify correctness, then test eight development cases. Candidate blocks are 9, 13, 17, 21 (zero-based post-block residual, 28 total); readout positions -2 and -1. Choose readout cell maximizing mean paired log-rank improvement on development, tie favoring earlier block then -2. Intervention candidates: same four blocks; either last two prompt positions or all prompt positions; strengths 1, 2, 4. Coordinates c=pinv(V)h; delta=alpha V(swap(c)-c). V columns are raw effective directions J^T diag(final-RMSNorm-weight) W_U[token], not assumed orthogonal and not individually unit normalized. This explicitly accounts for Qwen's learned RMSNorm scale. Use float64 CPU to compute the small pseudoinverse and float32 MPS for applying it; model weights and residuals remain bfloat16. Candidate selection uses mean development target-vs-source log-odds gain subject to mean actual perturbation/residual norm <=0.5; ties choose smaller strength then earlier block. Run greedy outputs for the selected condition and matched controls. If the selected condition mainly breaks output, report it and stop enlargement or freeze an explicitly documented revised development rule. Save all development outcomes. Freeze selections and hashes in config/frozen.json before evaluation.

## Conditions and execution

Unchanged baseline; registered no-op alpha=0; targeted swap; unrelated `table`/`chair` coordinate swap rescaled per position to the targeted delta norm; three Gaussian random directions (seeds 101,202,303) matched per position to the same norm; negative-strength targeted change as a directional specificity check. No prompt edit is included. Generation is deterministic greedy, seed 20260907, max 12 tokens. Independent repeats check reproducibility on a small fixed subset; repeats are not independent cases.

Intervene during prefill only at frozen absolute positions, never at new generated tokens. For uncached full-sequence recomputation, reapply at those original prompt positions on every step; for cached execution apply once to prefill and preserve downstream cache effects. Never reuse a cache across cases or conditions. Save actual hook positions, norm, coefficient and numeric checks, input/output IDs and text, scores, settings, timing, memory, failures. Append one JSON record per condition with resumable IDs. Save unfiltered full vocabulary readouts in compressed arrays; display filtering never affects ranks.

## Correctness and feasibility gates

Require nonzero meaningful passing tests: independent lens arithmetic matches reference; recorder baseline/no-op invariance; post-block capture equals the next block input and final norm input; explicit prompt-position checks under cached and uncached decoding; cache reset invariance; nonorthogonal swap swaps least-squares coordinates and preserves orthogonal complement; double full-strength swap restores input before quantization. Compare CPU/MPS same-weight same-input bf16 outputs and float32 small operator controls. Investigate discrepancies before interpretation. Pseudoinverse explicitly runs on CPU, no implicit MPS fallback. Applying a fitted lens requires no differentiation. Do not fit a lens unless artifacts fail compatibility.

Start with one showcase, then eight development cases. Enlarge only if runtime and memory are viable; adequate baseline capability is >=6/8 development cases. Evaluation baseline <75% triggers a capability limitation, not selective removal. If insufficient, report a pilot or justified model change with a new freeze; never reinterpret instrumentation failure as scientific null evidence.

## Statistics and stopping

Use 16 source-country clusters for evaluation intervals because two cities share a country/direction/target; average random repeats within each case. Bootstrap country means (10,000 resamples, seed 20260907), paired conditions. Report counts/denominators for all fractions and baseline-correct subsets; intervals describe this convenience sample only. No general population claim; shared prompt template adds dependence unaddressed by country clustering. Report medians and distributions, not selected examples alone. Success/failure examples selected by a declared rule (largest target gain, median gain, lowest gain); show all cases in a saved-data viewer if useful. Technical failure, low baseline ability, absent specificity, severe damage, or intervals spanning zero make the corresponding hypothesis inconclusive/unsupported in this setting. H3 optional only after core evidence works. No second family until then.