a
    ”œhj@
  ã                   @   sD   d Z ddlZej dd¡ ddlmZ dZdd„ Zedkr@eƒ  dS )	a0  One-shot reminder: run the Pinnacle line-age / fresh-feed test.

Scheduled for 2026-08-28 (about a month after the 2026-07-28 finding). Emails the
reminder using the existing daily_signals.send_email helper, then the Windows task
that fires it is a one-off, so nothing recurs.

WHY A SCHEDULED TASK AND NOT A CHAT REMINDER: Claude's own cron jobs are
session-only and expire after 7 days, so they cannot carry a month. This runs off
Task Scheduler on the box, which survives reboots and closed sessions.

Context lives in memory/project_pin_line_staleness.md.
é    NzE:\soccer\main)Ú
send_emailuú  
<h2>Reminder: test the Pinnacle line-age gate</h2>

<p>Set on 2026-07-28. Full context in
<code>memory/project_pin_line_staleness.md</code>.</p>

<h3>What was found</h3>
<ul>
  <li>Our "Pinnacle" is API-Football's relay, updating about every
      <b>5.8 hours</b>. Kalshi's own mid updates every ~2.3h.</li>
  <li>On 150 OOS forward-test bets, ROI decays monotonically with line age:
      0-1h <b>-5.5%</b>, 1-3h <b>-21.4%</b>, 3-6h <b>-45.5%</b>,
      6h+ <b>-48.7%</b>.</li>
  <li>Controlling for time-to-kickoff: fresh line <b>+3.0%</b> vs stale
      <b>-42.0%</b> (n=91).</li>
  <li>The 55 "censored" (freshest) bets carried <b>+40.6%, z=+2.14</b> â€” the
      only near-significant number in the forward test.</li>
</ul>

<h3>What to do now</h3>
<ol>
  <li>Re-run <code>python research\xlow_vs_line_age.py</code>. A month of extra
      bets should roughly double the sample. <b>Does the gradient hold?</b>
      That is the forward confirmation the original result needed.</li>
  <li>If it holds, wire the free fix: gate xlow so it will not fire when the
      Pinnacle line has not moved in ~1.3h, and log line age on every signal.</li>
  <li>Optionally add a real-time feed. Capture script is already written:
      <code>main/pin_fresh_capture.py</code> (needs <code>PINNAPI_KEY</code> in
      <code>.env</code>; free tier is 100 req/day, one call covers the whole
      slate). Analysis harness: <code>research/pin_fresh_vs_stale.py</code>.</li>
</ol>

<p><b>Calibrate expectations:</b> even the freshest watched bucket was only
+3.0%. A live feed plausibly turns this from losing into marginal, not into a
machine.</p>

<p><b>Note:</b> the API-Football plan expired 2026-08-07 â€” if odds went dark,
that is why, and the gradient test needs data from before then.</p>
c                   C   s   t dtƒ tdƒ d S )Nz8Soccer: test the Pinnacle line-age gate (set 2026-07-28)zreminder email sent)r   ÚBODYÚprint© r   r   ú(E:\soccer\main\reminder_line_age_test.pyÚmain;   s    
r   Ú__main__)	Ú__doc__ÚsysÚpathÚinsertZdaily_signalsr   r   r   Ú__name__r   r   r   r   Ú<module>   s   )