# SKU Matrix — Handoff to Next Session

**Status:** DRAFT built, flagged as data-quality suspect by user. **Do not trust any cell until validated.**

---

## What exists right now

- **`variant_key.csv`** — `/sessions/great-hopeful-clarke/mnt/uploads/variant_key.csv` (175 rows, Square export)
  Schema: `variant_id, sku, product_title, option_value, inv_row, inv_col, seed_oz, bogo, ptype`
  The key already has `inv_row` (mix name) and `inv_col` (spreadsheet column letter) pre-mapped to the legacy inventory matrix `2026 Q1-Q2 Inventory - batch 26002.pdf`.

- **`SKU-Matrix-DRAFT.xlsx`** — `/sessions/great-hopeful-clarke/mnt/scripts 2026/SKU-Matrix-DRAFT.xlsx`
  5 sheets: README, SKU Matrix, Multi-SKU Cells, Unmapped, Key (raw).

- **`build_sku_matrix.py`** — `/sessions/great-hopeful-clarke/build_sku_matrix.py` (not in the mounted folder; regenerate from this doc if lost).

- **Original inventory PDF** — `/sessions/great-hopeful-clarke/mnt/uploads/2026 Q1-Q2 Inventory - batch 26002.pdf` — the matrix being flipped from qty → SKU.

---

## How the matrix was built (process, so you can redo it)

1. Load `variant_key.csv`.
2. Group variants by `(inv_row, inv_col)`. Drop rows where `inv_row == 'UNMAPPED'` or `inv_col == ''` into an "Unmapped" bucket.
3. Row order is hand-fixed from the PDF (22 rows; see `matrix_rows` list in the build script).
4. Column mapping (derived empirically by cross-checking `inv_col` letters vs `ptype`):
   - B → 1lb XXL Shaker
   - C → 3oz Messenger
   - D → 2oz Shaker 2.0
   - E → 1oz SHAKE (EMPTY — no variants in the key reference E)
   - F → 1lb Bag
   - G → 8oz Bag
   - H → 4oz Bag
   - I → 1oz Bag (labeled "1oz SEEDS" on the inventory sheet)
5. Cells with multiple SKUs were joined with ` | ` and highlighted yellow. Nothing was dropped or deduped — the collisions were intentionally preserved for review.
6. Global font Arial, header row dark blue, freeze pane at B2, column widths set for readability.

**Totals after build:** 101 cells filled across 22×8 grid, 34 cells multi-SKU (99 rows in the Multi-SKU sheet), 9 unmapped variants, 1 row empty (Asclepias speciousa).

---

## The data quality problem (this is the real work)

**User's report:** "SQ2683376-SF-XXL is Bay XXL shaker yet there are like 6 SKUs listed for this product. Be suspect of all data until validated."

Concrete example — the `BAY AREA Native Wildflower Mix` row currently looks like:

| Col | Pack Size | SKU(s) in cell |
|---|---|---|
| B | 1lb XXL | `SQ2683376-SF-XXL` ✓ clean |
| C | 3oz | `SQ0086315-SF \| SQ6041501 \| SQ1390251` — **mixed**: one real 3oz Messenger + two "Bee Love Shaker Kit (for two)" Valentine color variants that shouldn't be here |
| D | 2oz | `SQ0788663 \| SQ2810480` — **mixed**: one real 2oz Shaker 2.0 + one BOGO (`2x Native Wildflower Shaker 2.0 BOGO`) |
| F | 1lb | `SQ6691060-sf-1lb` ✓ |
| G | 8oz | `SQ5472774-sf-8oz` ✓ |
| H | 4oz | `SQ7667509-SF-4oz` ✓ |
| I | 1oz SEEDS | `SQ8428324 \| SQ9083456` — **mixed**: old SKU + new "California Bay Area Native Wildflower Seed Mix" SKU |

**Patterns causing the bloat in multi-SKU cells:**

1. **BOGO variants** — the key has a `bogo` column (`yes`/`no`). My build script ignored it. These should probably be filtered out of the matrix entirely (they're a promo wrapper, not a stock SKU).
2. **Gift / Valentine / Bee Love kits** — `Bee Love Shaker Kit (for two)`, `2x BOGO`, etc. are bundled products that happen to use a 3oz Messenger carrier but are NOT "a Bay Area 3oz". They need their own row/section or to be excluded.
3. **Old SKU + new SKU pairs** — e.g. `SQ2427440` + `SQ2427440-PNW-1oz` for Pacific Northwest 1oz. Need a rule: "prefer suffixed", "prefer shortest", or "drop whichever is legacy".
4. **Hipster line collisions** — `Lil' hipster` and `Bay Area Hipster` are UNMAPPED; need their own row OR to be tagged as a product family.
5. **Column E is empty** — `1oz SHAKE` category has zero variants in the key. Either that column is dead, or SKUs need to be added to the key.
6. **`Asclepias speciousa`, `California Retail` rows** — no key entries at all. Either new products not yet in key, or legacy rows to drop.

---

## Next-session first moves

1. **Do not trust the current matrix.** Treat `SKU-Matrix-DRAFT.xlsx` as a visual diff tool, not ground truth.
2. **Get a decision rule from Shalaco** for each pattern above (BOGO filter, gift-kit exclusion, old/new dedup rule).
3. **Rebuild the matrix** with those rules — start by filtering the key:
   ```python
   # likely filters to apply before pivoting
   key = [r for r in rows if r['bogo'] == 'no']
   key = [r for r in key if 'Bee Love' not in r['product_title']]
   key = [r for r in key if 'BOGO' not in r['product_title']]
   # plus a primary-SKU picker per (inv_row, inv_col)
   ```
4. **Validate spot-check**: pick 5 known-correct (mix, size) combos from Shalaco's head and confirm the cell matches. If any don't, the key itself is wrong and needs a Square re-export or a manual fix.
5. **Flag to team** only after validation. The current draft is linked in `#fullfilment` as a Slack draft (not sent) — do not send until the matrix is validated.

---

## Related context the next session should know

- **Labor Room / Batch Tracker work** — separate but adjacent. Batches DB in Notion (id `33bd0a3b53838062becefee3e0f99c6e`, ds `33bd0a3b-5383-801d-9d16-000baa9695ab`) has simplified Status: `Assembly → Fulfillment → Done`. Team dashboard is the `Engineering(Assembly & Fullfilment)` Notion page (`335d0a3b538380bf8b43e146b0d068b2`). Master Batches DB: `9dd52f4d179d4210a3f98a652c33b197` (ds `7bee6c73-2b48-482d-92c4-fe5158482c53`). Linked DB views are added manually in Notion UI — MCP can't create cross-page linked embeds.
- **Clockify** is the canonical time tracker (never Notion). Batch # goes in the description string.
- **CLAUDE.md Rule 0** — "don't trash Notion." Additive edits only, `update_content` never `replace_content`, always fetch first.
- **Kota still needs to be put on purchasing ASAP** — surfaced but not actioned.
- **Slack #fullfilment draft** — `Hi team, we made a SKU matrix...` sitting as a saved draft in channel `C090NJQMY1L`. DO NOT SEND until data is validated.

---

## File references

| File | Path |
|---|---|
| Variant key (source) | `/sessions/great-hopeful-clarke/mnt/uploads/variant_key.csv` |
| Original inventory PDF | `/sessions/great-hopeful-clarke/mnt/uploads/2026 Q1-Q2 Inventory - batch 26002.pdf` |
| **Final SKU matrix (DRAFT, suspect)** | `/sessions/great-hopeful-clarke/mnt/scripts 2026/SKU-Matrix-DRAFT.xlsx` |
| Build script | `/sessions/great-hopeful-clarke/build_sku_matrix.py` |
| Labor Room MVP preview | `/sessions/great-hopeful-clarke/mnt/scripts 2026/Labor-Room-MVP-Preview.md` |
| Prior session transcript | `/sessions/great-hopeful-clarke/mnt/.claude/projects/-sessions-great-hopeful-clarke/3485ab9f-ebf2-4f5b-a791-bfa0b285af16.jsonl` |
