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 |
| 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.