\newpage \begin{appendices} \section{Variable definitions and data lineage} \label{app:variables} \begin{table}[H] \centering\scriptsize \caption{Variable definitions and lineage} \begin{tabular}{p{3.4cm}p{8.2cm}p{3.2cm}} \toprule Variable & Definition & Source / step \\ \midrule $A_{i,q}$ & Earnings-release date: first \texttt{earnings\_events.event\_date} in $[E_q, F_q+10\,\mathrm{d}]$ & FinData Postgres extract (01a) \\ $F_{i,q}$, $V_{i,q}$ & SEC filing date; availability $=F+1$ day 00:00 ET & \texttt{/fundamentals} (02) \\ $S_{i,q}$ & $(X_q-\hat X_q)/\TA_{q-1}$, $X=$ operating income, $\hat X_q=X_{q-4}+\tfrac14\sum_{k=0}^{3}(X_{q-1-k}-X_{q-5-k})$ & 02, \texttt{labels.py} \\ $D_{i,q}$ & $\ind{S_{i,q}\le-0.005}$ & 02 \\ Secondary targets & net-income surprise; $\Delta$ROA$_{yoy}\le-0.01$; $(\mathit{CFO}_q-\mathit{CFO}_{q-4})/\TA\le-0.01$; current ratio $-10\%$ or coverage $<1$ from $\ge1$; $\abs{S}\ge0.005$; EPS $<$ estimate & 02 \\ Intraday families (per bar length $f\in\set{1,5,30}$ min) & $\RV=\sum_t r_t^2$; $\BPV=\tfrac{\pi}{2}\sum_t\abs{r_t}\abs{r_{t-1}}$; $\mathrm{RJ}=\max(0,\RV-\BPV)/\RV$; $\RS^-/\RV$; $\mathrm{SJV}=(\RS^+-\RS^-)/\RV$; realized skewness/kurtosis; $\max_t r_t^2/\RV$; AC(1); drift $=\log(C/O)$; opening/closing 30-min volume shares; volume Gini; down-bar volume share; present-bar share; $\RV$ share on SPY-down bars; $\hat\beta=\sum_t r_t\,r^{\mathrm{SPY}}_t/\sum_t (r^{\mathrm{SPY}}_t)^2$; vol-of-vol; $\overline{\RV}/\operatorname{Var}(r^{\mathrm{daily}})$ & 03, \texttt{features.py}, \texttt{samples.py} \\ Daily block & 20/60-day log returns, SD, Parkinson, skewness, kurtosis, overnight/intraday sums, volume ratios (20d, 5d vs 60d median), Amihud (60d), zero-return share, log dollar volume, max drawdown (60d), bars per day & 03 \\ Accounting block & gross/operating margin, NI/TA, CFO/TA, accruals, cash/TA, debt/TA, current ratio, capex/TA, R\&D/revenue, coverage, loss dummy, log assets, ROA, revenue growth, net issuance, log market cap, last surprise, mean of last four surprises, trailing adverse rate, information age & 02--04 \\ Returns & split- and dividend-adjusted close-to-close from raw bars and \texttt{corporate\_actions} (ex-date rule) & 03 \\ \bottomrule \end{tabular} \end{table} \section{Leakage battery} \label{app:leakage} Each guard is a unit test in \texttt{tests/}: (L1) future facts, (L2) fiscal-end joins, (L3) post-cutoff bars, (L4) test-period transforms, (L5) DST/timezone, (L6) identifier drift, (L7) splits/dividends, (L8) release-day bars, (L9) overlapping windows across splits, (L10) survivorship report, (L11) ingestion dates, (L12) randomised placebos. The live test \texttt{test\_asof\_equivalence} verifies that the local as-of join reproduces the API's \texttt{as\_of} output on random entities and instants. \section{Additional tables} \label{app:tables} \begin{table}[H]\centering\footnotesize \caption{Continuous target: ridge forecasts of the winsorised surprise (test period)} \input{tables/tab10b_continuous} \end{table} \begin{table}[H]\centering\footnotesize \caption{Transfer to held-out firms (20\% of firms never seen in training)} \input{tables/tab09b_firmholdout} \end{table} \begin{table}[H]\centering\footnotesize \caption{Announcement-window abnormal returns on the ex-ante signal} \input{tables/tab11b_car} \begin{minipage}{\textwidth}\vspace{0.3em}\footnotesize\emph{Notes.} CAR from $c+1$ to $A_q+1$, market-adjusted, winsorised 1/99\%; firm and sector$\times$quarter fixed effects; two-way clustered SEs. $^{*}$, $^{**}$, $^{***}$: 10, 5, 1\%.\end{minipage} \end{table} \section{Reproducibility} \label{app:repro} The pipeline (\texttt{scripts/00}--\texttt{09}) runs on the FinData storage node against the local API; manifests in \texttt{artifacts/manifests} pin dataset versions and hashes; the design freeze hash is recorded before the first model fit. Raw extracts are deleted after feature extraction and are reproducible from the pinned versions. \end{appendices}