בס״ד

Fix MIS Earnings Penalty Bug

docs/HOW_TO/fix-mis-earnings-penalty-bug.md · last changed (pre-VM history) · rendered from GitHub master

Fix MIS Earnings Penalty Bug

Codified from Gmail draft 19dc11344cb608b1 · Apr 24 2026

Honest answer first

Open in CONTEXT.md as "Fix earnings penalty bug."
60–90 min depending on how cleanly the bug localizes.
Most likely culprit: edge case at market close on earnings day, or sign error in penalty application.

Step 1 — Reproduce the bug (15 min)

  1. Open MIS v7.1 sheet
  2. Find a recent earnings event where penalty applied incorrectly
  3. Document:
    - Ticker
    - Earnings date + time (BMO/AMC)
    - What the penalty SHOULD be (per rules)
    - What the penalty ACTUALLY was
    - Delta in $ or %
  4. Save screenshot to /audits/2026-04_mis-earnings-bug/

Step 2 — Find the logic (15 min)

Three places to check:

A) MIS sheet itself
- Find the named range for earnings adjuster
- Likely tab: Earnings_Adjuster or Adjustments
- Trace formula path

B) Apps Script
- Extensions → Apps Script
- Search for: earnings, penalty, EPS, adjustment
- Note any function names

C) Repo history

cd MIS
git log --oneline | grep -iE "(earnings|penalty|adjust)"

Find when this logic was last touched. Read commit messages for context.

Step 3 — Hypothesis check (most likely culprits, in probability order)

  1. DATE COMPARISON edge case
    - Earnings released after market close vs before next open
    - Timezone handling (UTC vs ET)
    - Test: simulate earnings at 4:00:01 PM ET — does it count as today or tomorrow?

  2. SIGN ERROR
    - Penalty being added when should be subtracted (or vice versa)
    - Test: stock that beat earnings — is penalty positive or zero?

  3. MAGNITUDE / UNITS
    - % vs basis points mix-up (100x error)
    - Decimal vs whole number (e.g., 0.05 vs 5)

  4. LOOKUP RETURNING WRONG ROW
    - Earnings calendar source returning wrong ticker
    - Date join failing silently

  5. THRESHOLD BOUNDARY
    - >= vs > comparison errors at exact threshold values

Step 4 — Debug in Apps Script (20 min)

  1. Open the offending function
  2. Add console.log() at every decision point:
    - Inputs received
    - Lookup results
    - Conditional branches taken
    - Final value before return
  3. Run with the test case from Step 1
  4. View → Logs (or Executions in newer UI)
  5. Trace where reality diverges from expected

Step 5 — Apply fix (10 min)

Make minimum-necessary code change. Add comment explaining the bug + fix:

// BUGFIX 2026-04-XX: handle earnings released after 4:00 PM ET
// Previous logic compared dates only, missing intra-day boundary

Step 6 — Regression test (15 min)

Test against 3 historical earnings events with known correct outputs:
- One BMO earnings (released before open)
- One AMC earnings (released after close)
- One that previously triggered the bug

All three should now produce correct penalty values.

Step 7 — Commit + deploy (10 min)

cd MIS
git add .
git commit -m "Fix earnings penalty bug — handle intra-day boundary correctly

- Issue: penalty mis-applied for earnings released within market hours
- Root cause: [whatever you found]
- Fix: [what you changed]
- Tested against: AAPL Q1, MSFT Q4, NVDA Q3"
git push

Verify next morning's MIS Morning Brief runs clean.

Step 8 — Update CONTEXT.md

Remove "Fix earnings penalty bug" from Project Status table.
Or move to "Recently Closed" if you track that.

Done state

Bug fixed. Regression test in place. MIS runs clean for next 5 trading days. CONTEXT.md updated.

Source trail · docs/HOW_TO/fix-mis-earnings-penalty-bug.md @ master · rendered 2026-07-02 7:23 PM EDT by scripts/build-docs.py · the .md in the repo is the truth; this page is the phone-readable view