# HOLDINGS Sunday Paste-Block — CORRECTED for actual sheet schema

> **Supersedes:** `outputs/2026-05-14_16-34_action_holdings-clean-paste-block.md` (iPhone session, schema-assumed)
> **Generated:** Thu May 14 2026 · 4:55 PM EDT
> **Verified against:** live MIS code at `MIS/MIS-v1-script/emailDailySnapshot.js:4552-4610` (`misBuildHoldingsFromTradeLogImported_`)
> **Cherry-pick parent:** `e99492c` (iPhone session) — keep that doc as historical, paste from THIS one.

---

## What changed vs. the iPhone session paste-block

| The iPhone session said | Actual reality |
|---|---|
| Target sheet ID: `1cosuFrU_EJRAprVMm-FEpmddSUTVQWhlI0tHpS1w2S4` | **Wrong.** That's an archive snapshot. Live sheet is `1HEmRevZZZmpXEnjkkwxIw0VetEjFVe5ZxVYzu4hgo2c` (title: `MIS_PRIMARY_2026-05`, modified 5/14 3:15 PM, the one your auto-emails fire from). |
| Target tab: `HOLDINGS_CLEAN` | **Wrong.** Per code line 4621: `Trade_Log_Imported is preferred source. Falls back to HOLDINGS_CLEAN only if missing/empty.` `HOLDINGS_CLEAN` is legacy. Paste into `Trade_Log_Imported`. |
| Column schema: `Ticker \| Qty \| AvgCost \| Account` (4 cols) | **Wrong.** Per code line 4559: `Trade_Log_Imported cols: Ticker | Account | Quantity | Avg_Cost | Entry_Date | Total_Invested | Source | Notes` (8 cols). Order also different — `Account` is col 2, not col 4. |

The iPhone session flagged this risk in the doc itself ("verify column schema before paste"). Verification done.

---

## ROWS TO PASTE — `Trade_Log_Imported` tab (24 rows + header, 8 cols)

**Sheet:** [MIS_PRIMARY_2026-05](https://docs.google.com/spreadsheets/d/1HEmRevZZZmpXEnjkkwxIw0VetEjFVe5ZxVYzu4hgo2c/edit) → `Trade_Log_Imported` tab.

**Procedure:**
1. Open the sheet (link above)
2. Click `Trade_Log_Imported` tab
3. Select cell A1
4. Replace the entire tab (preserve header in row 1, replace rows 2+) OR append below existing rows — your call. Cleanest = replace.
5. Paste the block below (it's tab-separated, paste should auto-split into columns)

```
Ticker	Account	Quantity	Avg_Cost	Entry_Date	Total_Invested	Source	Notes
SPY	Fidelity Invest n Save 0600	10.000	647.63		6476.30	screenshot 5/14	largest position 47.75% of acct
META	Fidelity Invest n Save 0600	10.351	573.26		5933.31	screenshot 5/14	CORRECTED qty (was 8.25 in MIS)
ASML	Fidelity Invest n Save 0600	4.007	1309.89		5249.74	screenshot 5/14	best % winner +21.06%
ABBV	Fidelity Invest n Save 0600	17.000	208.75		3548.75	Fidelity confirmation 5/13	NEW — bought 5/13 at 3:48 PM
COST	Fidelity Invest n Save 0600	2.003	903.28		1809.27	screenshot 5/14	NEW — MIS recommended ADD oops
KO	Fidelity Invest n Save 0600	6.086	68.43		416.46	screenshot 5/14	NEW — MIS recommended ADD oops
ORCL	Fidelity Invest n Save 0600	0.847	301.07		255.01	screenshot 5/14	NEW — the −35% loser lot (visible to REDUCE/EXIT logic when wired)
GOOG	Fidelity Invest n Save 0600	0.087	319.77		27.82	screenshot 5/14	sliver
SPY	Fidelity Joint Brok 5692	0.954	682.69		651.29	screenshot 5/14	different lot from main Invest n Save
LLY	Fidelity Joint Brok 5692	0.781	967.57		755.67	screenshot 5/14	
EQIX	Fidelity Joint Brok 5692	0.406	984.51		399.71	screenshot 5/14	
AAPL	Fidelity Joint Brok 5692	1.338	277.56		371.38	screenshot 5/14	
AMZN	Fidelity Joint Brok 5692	1.190	210.46		250.45	screenshot 5/14	
META	Fidelity Joint Brok 5692	0.455	666.20		303.12	screenshot 5/14	NEW — MIS lost this lot Mon→Thu
ORCL	Fidelity Joint Brok 5692	1.267	205.72		260.65	screenshot 5/14	matches MIS current lot
SCHG	Fidelity Joint Brok 5692	6.169	32.42		200.00	screenshot 5/14	NEW — verify in Tickers universe
SCHZ	Fidelity Joint Brok 5692	21.376	23.39		500.00	screenshot 5/14	NEW — bond ETF, verify Tickers
SGOV	Fidelity Joint Brok 5692	3.000	100.57		301.71	screenshot 5/14	NEW — T-bill ETF, verify Tickers
BA	Schwab ZT Acct	2.000	238.85		477.70	screenshot 5/14	NEW — was Mon ADD, now down −3.84%
UNG	Schwab ZT Acct	24.000	11.07		265.68	screenshot 5/14	NEW — Mon ADD, +0.86%
SLV	Schwab ZT Acct	7.000	76.70		536.90	screenshot 5/14	NEW — Mon ADD, −1.77%
ABNB	Schwab SWPF	1.000	141.83		141.83	screenshot 5/14	NEW — Mon ADD, bought near top −5.47%
AFRM	Schwab 898	15.000	50.78		761.70	MIS Mon brief	already in MIS, keep
DAL	Schwab 898	3.000	63.76		191.28	MIS Mon brief	already in MIS, keep
```

**24 rows + 1 header = 25 rows total.** 13 new positions, 11 corrections/updates, plus 2 already-correct rows kept for completeness.

`Entry_Date` left blank for snapshot data — only ABBV has a known buy date (5/13). The column accepts blanks; downstream code doesn't depend on it for the basic holdings build.

---

## After paste — sanity check

1. From MIS Apps Script editor, run `misBuildHoldingsFromTradeLogImported_` once manually. Look at the execution log. Should return 24 rows.
2. OR trigger a manual Morning Brief from the script editor. The `--- 💼 YOUR HOLDINGS (live) ---` section should now show 24 rows.
3. Verify these specific positions appear (the ones that were missing):
   - **ABBV** at $208.75 (#2 by $ value, $3548 cost)
   - **COST** at $903.28
   - **KO** at $68.43
   - **ORCL** lot at $301.07 with PnL −35%
   - **META** Joint lot at $666.20 with PnL −7.18%
   - All 3 Schwab ZT positions (BA / UNG / SLV)
   - ABNB at $141.83

If any are missing, the tickers may not be in the `Tickers` tab universe — the code looks up live prices from `Tickers` → `Live_Price` column. Without a Tickers row, `currentPrice = NaN` and the row is flagged `MISSING_PRICE` (still shown, just no live valuation).

**To add a ticker to Tickers universe:** open Tickers tab, append a row with the symbol + `Include = Y`. The Live_Price formula auto-fills from GoogleFinance/Yahoo per existing pattern.

---

## What this does NOT fix (still parked, code work needed)

1. **PORTFOLIO_OVERLAP gate (issue #6)** — without it, MIS will still recommend ADD on tickers Sam now holds (you'd still see COST/KO in ADD list even though they're in Trade_Log_Imported). Code change required in resolver logic.

2. **REDUCE / EXIT graduation (issue #7)** — without it, the −35% ORCL lot is now visible but no SELL signal fires. Code change required.

3. **Schwab API re-auth (issue #8)** — manual paste bridges this for now, but live price discrepancies between paste cost-basis snapshot and real-time will accumulate. Sam-hands action.

4. **META lot reconciliation (issue #9)** — paste FIXES this immediately by providing both 10.351 + 0.455 rows. After Sunday paste, MIS will see correct 10.806 total.

So this paste closes #9 mechanically and unblocks #5/#6/#7 by providing the correct data substrate. #8 still requires Sam-hands.

---

## Source trail
- This file: `outputs/2026-05-14_16-55_action_holdings-paste-block-CORRECTED.md`
- Supersedes (older): `outputs/2026-05-14_16-34_action_holdings-clean-paste-block.md`
- Code verified: `MIS/MIS-v1-script/emailDailySnapshot.js` lines 4552-4610 (Trade_Log_Imported schema), 4616-4666 (HOLDINGS_CLEAN fallback schema for reference)
- Live sheet: `1HEmRevZZZmpXEnjkkwxIw0VetEjFVe5ZxVYzu4hgo2c`
- Original screenshots: Sam's chat with cloud Claude session, 5/14 ~4:00 PM ET (not in repo)
- Related GitHub issues: #5 (umbrella) · #6 (PORTFOLIO_OVERLAP) · #7 (REDUCE/EXIT) · #9 (META lot)
- Author: Claude Code (Windows session) · 2026-05-14 4:55 PM EDT
