# Research log — WP 27 (chronological, 2026-10-27) All times local. Code revision in each run manifest (`git_revision`). Entries record every change made between the pre-analysis plan and the confirmatory runs, so that nothing is revised silently. | # | When | Phase | Change | Why | Consequence for pre-registration | |---|---|---|---|---|---| | 1 | 18:30 | 2 | Engine written: integer-cent accounting, price–time LOB, latency heap, fees, halts, margin, event log, replay | — | — | | 2 | 18:50 | 2 | Market-maker rule replaced (A–S formula in ticks² produced negative reservation prices → MM dumped inventory) by a bounded inventory-skew rule targeting the endowment | engine smoke run: price fell 30 % below value | baseline only | | 3 | 19:05 | 2 | Reservation accounting: limit bids reserve notional + worst-case fee + 1 c/lot; market buys priced lot-by-lot on the total fee; releases equal cash charged | property test found reserved cash 6 c above cash | — | | 4 | 19:20 | 3 | Calibration sweep (36 cells × 10 seeds): baseline = fundamentalist aggressiveness 20, trend + leveraged 10 %, noise market-order rate 0.6, MM size 20 | stylized facts: ACF₁ ≈ 0, kurtosis > 10, Σ ACF|r| ≈ 2.7, spread ≈ 24 bp, tracking error ≈ 1 % | baseline frozen | | 5 | 19:40 | 2 | Periodic call auction added (robustness) with market orders as IOC and a ±2 % collar | first version let band-edge market orders set the clearing price | robustness arm only | | 6 | 20:10 | 4 | OpenAI adapter verified live (gpt-5.4-nano); `max_output_tokens` raised 400 → 1200 because reasoning tokens count against it | smoke test truncated JSON | — | | 7 | 20:30 | 5 | LLM decisions batched into 4 stagger slots; parallel run workers | one decision per tick made API runs 10× slower | none (same decision count) | | 8 | 20:45 | 1→2 | **Fundamental timing restructured**: the upcoming dividend's deviation is latent during the period; PV = μ/r + x/(1+r−ρ); public filter updated by news; private signals are about the latent deviation | methodologist audit + classical runs: dividends revealed x exactly, so V^pub ≡ V, news and private signals were redundant (H1 unidentified) | this *is* the pre-registered economy; no confirmatory run had been analysed | | 9 | 21:05 | 1→2 | Shocks applied after the dividend step (a t = 300 jump was paid out at once); shock size 40 c → 10 c (+2.2 % of V) | public value jumped at the shock; 40 c was +9 % with the corrected PV | thresholds unchanged | | 10 | 21:10 | 1→2 | LLM slots inherit the replaced slot's information set (`llm.informed_share: null`); within-tick shuffle moved to its own RNG stream | methodologist audit: treatment bundled information; activations diverged across arms | matched-pair CRN now exact for every non-replaced agent | | 11 | 21:12 | — | First git commit; pilot and confirmatory designs launched on the frozen revision | manifests now carry `git_revision` | **freeze** | | 12 | — | 5 | Pilot (3 seeds × {5, 25, 50 %}, gpt-5.4-nano) runs concurrently with the confirmatory design on the same revision; pilot seeds (1–3) are never pooled with confirmatory seeds (201–207) | time budget | the pilot's role is reduced to cost/validity/variance reporting; the seed count (7) was fixed by the USD cap, not by the pilot variance | | 13 | 22:05 | 6 | **Override bug**: `deep_update` merged leaf dictionaries, so `provider_mix: {openai: 1.0}` on the baseline `{mock: 1.0}` became a 50/50 mock/OpenAI mixture in every live cell (caught by a co-author reading run manifests). Leaf dicts now replace; regression test added; all live and classical designs discarded and relaunched on commit c1fdf6c | half of the "LLM" slots were the mock rule | **new freeze** (c1fdf6c); nothing from the discarded runs is used | | 14 | 22:40 | 6 | Orphaned pool workers from killed designs had kept writing runs after the directories were purged, and the resumable runner reused them (manifests with providers [mock, openai]); all workers killed, every run whose manifest hash differs from its cell's configuration deleted (3 pilot, 7 confirmatory), runner now resumes only on an identical `config_hash` (commit 74b1f46) | co-author audit of manifests | clean runs (6 pilot, 20 confirmatory) kept; discarded runs cost ≈ 12 USD of API calls that are reported in the cost accounting but never analysed | Known deviations from `docs/identification.md` / `docs/protocol.md` (written before items 8–12): - Noisy dividends (`jump_prob = 1`) were proposed to make V^pub ≠ V; item 8 achieves this through the timing of information instead (no jumps in the baseline). - The `mini-only at 25 %` cell needed for the model-mix decomposition was not run (≈ 8.5 USD): the two-model arm is compared with the single-model diverse-prompt arm only, and this limitation is stated in the paper. - Anthropic cells: the key provided on 2026-10-27 is rejected (HTTP 401). The adapter is implemented and dry-run tested with the mock provider; Claude cells are not part of the reported results.