---
name: update-salesforce-tech-validation
description: |
  Edit and run the SE Radar report in Salesforce to add columns, view SE notes, and manage technical validation data.

  Triggers when user mentions:
  - "update the SE radar report"
  - "add a column to the SE report"
  - "edit the vNotes report"
  - "run the SE radar report"
  - "update salesforce tech validation report"
---

## Overview

This skill automates editing and running the **SE Radar: SE vNotes and TVSs IC** report in Salesforce. It covers adding columns, re-running the report, and reading the results. More workflows (e.g., filtering, grouping, saving changes) will be added as needed.

## Prerequisites

- Chrome browser with an active Salesforce session (authenticated via Okta SSO at verkada.okta.com)
- Access to the SE Radar report

## Report URL

```
https://verkada.lightning.force.com/lightning/r/Report/00OUu000004gR9ZMAU/view
```

## Workflow: Add a Column and Re-Run

### Step 1: Open the Report

Navigate to the report URL. Wait for the page to load (look for "Total Records" and the report table). If Salesforce doesn't load via browser automation (SSO issues), ask the user to open it manually first.

### Step 2: Enter Edit Mode

1. Take a snapshot to find the **"Edit"** button inside the Report Viewer iframe
2. Click **"Edit"**
3. Wait for the Report Builder to load (look for "Fields" panel, "Undo"/"Redo" buttons, and "Run" button)

### Step 3: Add a Column

1. The **Fields** panel on the left contains a tree of all available fields grouped by object (e.g., "Opportunities", "SE Deal Management", "vNotes", "SE User")
2. Locate the desired field in the tree. If the list is long, use the **"Search Fields"** searchbox at the top of the panel
3. Click the field name to select it (it will show as `selected` in the accessibility tree)
4. The page will display: "1 selected. To add new fields as detail columns, press Enter"
5. Press **Enter** to add the field as a new column

After adding, the **Undo** button becomes enabled, confirming the change was registered. The preview area may show "To see the latest edits, refresh the preview."

### Step 4: Run the Report

1. Click the **"Run"** button (top of the report builder)
2. The page navigates back to the report view with the new column included
3. Wait for "Total Records" to appear confirming the data has loaded

### Step 5: Verify the New Column

Take a snapshot of the report view and confirm the new column header appears in the table.

## Known Columns in the Report

As of the initial skill creation, the report includes these columns:

| Column | Object |
|--------|--------|
| Opportunity ID | Opportunities |
| Opp Name And Link | Opportunities |
| Solutions Engineer: Full Name | Opportunities |
| VNote: VNote Name | vNotes |
| Technical Validation Stage | SE Deal Management |
| POC Documentation Link | SE Deal Management |
| POC Stage | SE Deal Management |
| Solutions Engineer: Team | SE User |
| SE Notes | Opportunities (added via this workflow) |

## Workflow: Find Blank SE Notes and Look Up from Notes Directory

After adding the SE Notes column and running the report, use this workflow to identify opportunities missing SE Notes and find the corresponding notes in the local notes repo.

### Step 1: Identify Blank SE Notes

1. Scroll through the full report to see all rows (Salesforce lazy-loads rows; click "Load more widgets" or scroll to the bottom of the iframe body)
2. For each row, check the SE Notes cell. Blank entries show as a single dash: `-`
3. Build a list of all opportunities with blank SE Notes, noting the opportunity name and the account name

### Step 2: Look Up SE Notes from Account Notes

For each account with a blank SE Notes entry:

1. **Find the account note file** in `/Users/connor.rhodes/code/notes/` (e.g., `San Antonio ISD.md`, `AR Dept of Transportation.md`)
2. **Find the relevant wip file**:
   - Account notes link to wip files under a `## WIP` section or similar
   - Look for a wip file that matches the specific opportunity (e.g., `wip/ardot phase 2.md`)
   - If no opportunity-specific wip file exists, use a **general expansion** wip file if one is linked (e.g., `wip/general saisd expansion.md` for any SAISD expansion opportunity)
3. **Extract the SE Note content**:
   - Open the wip file and look for a header matching `SE Notes` or `SE Note` (case insensitive, any header level)
   - Return the content under that header, but not the header itself
   - If no SE Notes header exists in the wip file, report that no SE note was found

### Step 3: Present Results to the User

Group results by account. For each opportunity:
- If an SE note was found, show the opportunity name and the SE note content (header omitted)
- If no SE note was found, say so

Note: Multiple opportunities for the same account can share the same general expansion SE note. This is expected behavior (e.g., all SAISD expansion opps use `wip/general saisd expansion.md`).

## Workflow: Paste SE Notes into vNotes for Blank Opportunities

After identifying blank SE Notes from the report, use this workflow to paste the note content into each opportunity's vNote.

### Step 1: Open the Opportunity Page

Navigate to the opportunity URL (e.g., `https://verkada.lightning.force.com/lightning/r/Opportunity/<Opp ID>/view`). Wait for the page to load (look for "Show more actions").

### Step 2: Navigate to SE Validation

1. Click **"Show more actions"** (the triangle/dropdown menu button near the top of the page)
2. Click **"SE Validation"** from the dropdown
3. Wait for the SE Deal Management page to load (look for "Technical Validation Stage")

### Step 3: Check for Existing SE Note

Scroll to the bottom of the SE Validation page. If an SE note already exists there (shows a date, user name, and technical validation content), **skip this opportunity**. The report may show a blank SE Notes field even when a vNote already exists on the SE Deal record.

### Step 4: Open the vNotes Editor

1. Click the **"vNotes"** button in the utility bar at the bottom of the page
2. Wait for the vNotes dialog to open (look for "Notes" heading and "Add Note" button)
3. The SE Deal record is already linked in the "Linked Records" section at the top of the dialog because we opened vNotes from the SE Validation page. Do NOT use "Link More Records".

### Step 5: Paste the SE Note Content

1. The text editor is a **Quill rich text editor** (`contenteditable` div with `aria-label="Compose text"`). It is NOT the "Add Tags" text input below it.
2. Click on the editor area (the large compose text field above the toolbar)
3. Use `type_text` to enter the SE note content
4. **Formatting caveat**: The Quill editor auto-converts `- ` prefixed lines into bulleted list items. The first `- ` line in each group gets converted, but subsequent lines may retain a duplicate `-` prefix. To minimize this, type content without leading `- ` characters and use the toolbar "Bulleted list" button instead. Alternatively, accept the minor formatting quirk since the content is still readable.

### Step 6: Save the Note

Click **"Add Note"** to save. There is no separate save button. The note is persisted when you click Add Note.

### Step 7: Move to Next Opportunity

Close the vNotes dialog (click the X or minimize), navigate to the next opportunity, and repeat.

## Tips for Batch Processing

- **Keep the report tab open separately**: Use one tab (e.g., tab 3) for navigating to opportunities and another tab (e.g., tab 4) for the SE Radar report. This prevents losing the SE Notes column when navigating away and back.
- **The SE Notes column must be added fresh each time**: The column addition is a "Run" not a "Save" change, so it resets every time you navigate away. If you need to re-check the report, re-add the column first.
- **Pre-read all wip files before starting**: Before navigating to the first opportunity, read all the wip files you'll need. This avoids context-switching between Salesforce and the notes directory mid-batch.
- **Check for wip file existence first**: Before navigating to an opportunity, verify the corresponding wip file exists. If no wip file is found for an opportunity, skip it and note it for the user to handle manually.
- **Tab management**: Salesforce opens new pages in the same tab by default. Use `new_page` with `background: true` when you need to open something without losing your working tab.

## Common Gotchas

- **Salesforce loads in an iframe**: The report content lives inside an iframe called "Report Viewer" (view mode) or "Report Builder" (edit mode). Snapshots and interactions must target elements within this iframe.
- **Ephemeral UIDs**: Salesforce Lightning re-renders frequently. Element UIDs change between snapshots. Always take a fresh snapshot before clicking.
- **Progressive loading**: The report builder shows "Previewing a limited number of records" while loading. Use `wait_for` with text like "Columns" or "Run" before interacting.
- **Lazy-loaded rows**: The report view only renders ~12 rows initially. Scroll the iframe body or click "Load more widgets" to see the rest.
- **SSO session expiry**: If the session has expired, the page will redirect to Okta login. Ask the user to re-authenticate manually.
- **Field tree is large**: The Opportunities object alone has 400+ fields. Use the "Search Fields" searchbox to find specific fields quickly rather than scrolling.
- **"Run" vs "Save"**: Clicking "Run" re-runs the report with the new columns but does not persist the change to the report definition. Use "Save" if the column should be permanent.
- **General expansion wip files**: When no opportunity-specific wip file exists, check for a general expansion wip file linked from the account note. This is the catch-all SE note for all expansion opportunities under that account.
- **Wip files may not exist on disk**: Some wip files linked from account notes may have been deleted or never created. Check for the file before trying to read it.
- **SE Note may exist on SE Deal even when report shows blank**: The SE Notes column in the report (Opportunity field) can be blank even when a vNote already exists on the related SE Deal Management record. Always scroll to the bottom of the SE Validation page and check for an existing note before pasting a new one. If one exists, skip that opportunity.
- **vNotes editor is a Quill rich text editor, not a plain textbox**: The compose text area is a `contenteditable` div with `aria-label="Compose text"`, not the "Add Tags" input below it. Be careful to click and type into the correct element.
- **Quill editor div doesn't render until activated**: The `.ql-editor` div inside the Quill editor is not present in the DOM until you click the placeholder text ("Type a note and link it to any Salesforce record!"). You must click the placeholder first, then focus the `.ql-editor` via JavaScript, then type. If you try to type directly without this sequence, the text may not appear.
- **Quill auto-formats dashes into bullet lists**: Lines starting with `- ` get auto-converted to bulleted list items by the Quill editor. The first line in a group converts cleanly, but subsequent lines may end up with a duplicate `-` prefix in the list item text. Accept this minor formatting quirk or use the toolbar "Bulleted list" button instead of typing `- `.
- **SE Deal is auto-linked in vNotes when opened from SE Validation**: When you open the vNotes editor from the SE Validation page, the SE Deal record is already linked. Do NOT manually link additional records via "Link More Records" unless specifically asked.
- **"Show more actions" is the triangle menu**: The SE Validation link is hidden under the dropdown menu button labeled "Show more actions" at the top of the opportunity page, not visible as a direct link on the page layout.
- **SE Validation page MUST be loaded before opening vNotes**: The vNotes editor does not function correctly if you try to open it directly or from the wrong page context. Always navigate to the SE Validation page first (via Show more actions > SE Validation), then click vNotes from the utility bar. The SE Deal auto-linking depends on this page context.
- **Opportunity 15-char IDs vs 18-char case-sensitive IDs**: When navigating directly to an opportunity URL, use the 15-character ID (e.g., `006Uu00000Nvbs3`). The 18-character case-sensitive version (e.g., `006Uu00000Nvbs3AAD`) may cause a "Record ID is malformed" error. The 15-char version always works.
- **Multiple opportunities can share the same SE note**: Several opportunities under the same account can use a single general expansion wip file (e.g., SAISD Po36887, SAISD SPOT Exchange, and SAISD Sam Houston all use `wip/general saisd expansion.md`). Paste the same note content to each one individually.
- **SE Deal records can be assigned to different SEs**: The SE Deal Management record linked to an opportunity may not be assigned to you. Check the "Solutions Engineer" field on the SE Validation page. You can still paste notes regardless of who is assigned.
- **Closed Lost / Closed Canceled / Closed Won opps still need notes**: The report includes closed opportunities. Follow the same workflow for all of them. Many closed opps have blank SE Notes.
- **Scroll to bottom of SE Validation page to check for existing notes**: After the page loads, scroll to the very bottom. If a vNote already exists, you'll see a date, user photo/name, and the note content. If nothing is there besides the Related Opportunities table, it's safe to add a new note.
- **"Add Note" confirms with a toast notification**: After clicking "Add Note", wait for a toast notification saying "Note added successfully" before moving on. This confirms the note was persisted.
- **Report stays open in its own tab**: The SE Radar report tab (tab 4) should stay open throughout the batch process. Only use the working tab (tab 3) for navigating to opportunities, SE Validation pages, and vNotes editing.
- **Opportunity Short Description can differ from the wip file name**: Match opportunities to wip files by account name and keyword, not by exact name match. For example, "TX-Municipality-Austin (Elk Electric, Inc.) - vStore" maps to `wip/city of austin general expansion.md`.
