Metron — Engineering Intel (full portal)
Live Next.js App Router site: Metron — Engineering Intel at https://latc.lenovo.com/metron.
Base path is always /metron (pages, assets, APIs). Auth.js credentials login at /metron/login.
Per-page extract / edit / filter recipes (verified): ops.md · API field shapes: reference.md
Auth & secrets
| Mode |
Access |
| Guest |
Most SSR pages readable; most Program tab GETs work; Roadmap + export blocked |
| Signed in |
Edit controls; Roadmap; Team details refresh; CTOO mutations |
Agent credentials (local only — never paste into chat/commits):
C:\Users\mfink\.cursor\secrets\metron.env
METRON_BASE=https://latc.lenovo.com
METRON_COOKIE=... (includes __Secure-authjs.session-token)
- optional
METRON_EMAIL / METRON_PASSWORD for re-login via Downloads/metron-explore/metron_login.py
Probe:
curl.exe -s -H "Cookie: <METRON_COOKIE>" -H "Accept: application/json" `
"https://latc.lenovo.com/metron/api/auth/session"
Expect user.email + role (e.g. manager). Session expiry ~30 days from login. On 401 for roadmap, re-login and refresh cookie.
Mutations: never POST/PATCH/DELETE unless the user explicitly asks. Confirm the intended edit first.
Architecture (important)
Two data patterns coexist:
- SSR / RSC — Overview, Jira Cadence, AI ROI, Contributors, Activity, Sync Jobs, CTOO (read), Program By Initiative / much of Blockers. Data is embedded in the HTML/
text/x-component flight. Changing filters often does a soft navigation with query params (no JSON API).
- Client JSON APIs — Program interactive tabs (
/metron/api/program/*), Team rollups (/metron/api/team/*), CTOO writes (/metron/api/program/atp...).
Prefer JSON APIs when they exist. For SSR-only pages, use authenticated Playwright or fetch the HTML/RSC page with the session cookie and parse visible text — do not invent endpoints that 404.
Sidebar (global)
| Label |
Route |
Primary data mode |
| Overview |
/metron/dashboard |
SSR + ?range= |
| Team Dashboard |
/metron/dashboard/team |
SSR org + client /api/team/* |
| Program |
/metron/dashboard/program |
Client Program APIs (+ SSR for RBS) |
| Jira Cadence |
/metron/dashboard/jira-cadence |
SSR + ?range= |
| CTOO Partnerships |
/metron/dashboard/ctoo-ecosystem-partnerships |
SSR read; ATP write API |
| AI ROI |
/metron/dashboard/ai-adoption |
SSR + ?range= |
| Contributors |
/metron/dashboard/contributors |
SSR + ?range= / ?manager= |
| Activity Feed |
/metron/dashboard/activity |
SSR (client filter) |
| Sync Jobs |
/metron/dashboard/sync-jobs |
SSR |
Dark mode: sidebar footer (localStorage key metron-theme). Signed-in users see Sign out.
Overview — /metron/dashboard
Title: Executive Summary
Greeting: “Welcome back, {name}. Showing {range}.”
| Control |
Behavior |
| This week / This month / Last 3M / Last 6M / Custom |
Navigates ?range=week|month|3m|6m (Custom date UI) |
KPIs (buttons): Active Users (avg/period) · AI Adoption (score/100) · AI Spend (USD total)
Chart: Active Users Trend for selected range.
No dedicated public JSON API — re-fetch the page with the desired range query.
Team Dashboard — /metron/dashboard/team
Subtitle: Org chart · team & individual work rollups · Jira Projects & Pillars · Confluence activity
UI sections
- Organization — expandable tree (default root e.g. Tolga Kurtoglu); pick a manager node
- Manager view — Direct reports vs Whole team counts; Cadence %
- Range: Week · Month · Quarter · Half · Year · All (client state; refreshes APIs with
period=)
- Team Calorie + Manager Calorie Benchmark (percentile vs other teams)
- Jira Update Compliance · Team Jira Summary
- Projects (Initiatives) · Pillars (Components)
- Jira · Team Ticket Activity · Confluence Activity
- Team Roster
Client APIs
| Endpoint |
Query |
Returns |
GET /metron/api/team/details |
emails= (comma list) + period=Week|Month|Quarter|… |
{ total, byStatus, byProject, byPillar, trend, trendUnit, tickets, confluence, calorie } |
GET /metron/api/team/compliance |
period= optional |
Map email → { updates, lastUpdate, daysSince, status } where status ∈ compliant/lapsed/… |
byStatus keys: todo, prog, done. Calorie object includes benchmark, teamBenchmark, byPerson, etc.
Org tree + roster identity data are SSR; changing period/emails triggers the JSON calls above.
Program — /metron/dashboard/program
Title: LATC Pillar Dependency Map — FY26
Sources: FY26 Roadmap · LATC Resource Registry
KPI strip: Pillars · Work Items · Mapped Dependencies · Critical Blockers · High-Risk Gaps
In-page tabs (tab ids)
| UI |
id |
Guest |
Notes |
| Executive Summary |
summary |
Yes |
Findings cards; edit when signed in |
| Pillar Dependency DAG |
dag |
Yes |
SVG pillar graph |
| Critical Delivery Chains |
chains |
Yes |
Live Jira step health |
| Item-Level Dependencies |
deps |
Yes |
Table + CSV export |
| Schedule Risks |
risks |
Yes |
Inversions / late prereqs / overlaps + staffing |
| Active Blockers |
blockers |
Yes |
Jira blocked + manual; badge count |
| Resources |
resources |
Yes |
Roster; open-gap badge; inline edit when signed in |
| By Initiative |
rbs |
Yes |
Live Jira INIT→epic→task RBS (SSR; ~55 initiatives) |
| Teams & Capacity |
teams |
Yes |
Per-pillar FTE need/gap |
| Roadmap |
roadmap |
Auth |
FY26 Gantt; guest → login |
Many tabs: ↓ Export CSV → /metron/api/program/export?tab=<id> (auth). Known good tabs: deps, resources, roadmap, risks. chains may 400.
Roadmap (auth)
- FY26 months
1..12 = Apr’26 → Mar’27
- Pillar codes:
infra, models, dcm, ro, runtime, eval
- Fields: name, priority P0–P3, status, start/end month, resources, fte, has_gap, gap_note, blocked, dependencies[], notes, jira_url
- PATCH
/metron/api/program/roadmap/{item_id} requires the full row (partial body can coerce numbers to NaN and 500)
Program JSON APIs
Prefix: https://latc.lenovo.com/metron/api/program/
| Path |
Auth |
Shape |
findings |
Guest GET |
Finding[] |
chains |
Guest GET |
Chain[] |
item-deps |
Guest GET |
Dep[] (~39) |
schedule-risks |
Guest GET |
{ conflicts, staffing_gaps, summary } |
resources |
Guest GET |
Roster[] (~300+) |
team-meta |
Guest GET |
Pillar capacity[] |
manual-blockers / blocker-annotations |
Guest GET |
overlays |
manual-risks / risk-annotations |
Guest GET |
overlays |
roadmap |
Auth |
RoadmapItem[] (~151) |
export?tab= |
Auth |
CSV |
atp / atp/projects |
Auth write |
CTOO (see below) |
Field-level shapes: reference.md.
Jira Cadence — /metron/dashboard/jira-cadence
How regularly people keep Jira updated, rolled up by manager org.
- Range pills →
?range= (same vocabulary as Overview)
- Compliance target chips: Weekly / Bi-weekly / Monthly
- KPIs: Org compliance %, People tracked, Lapsed (no update in 7d), No updates in range
- Weekly Update Activity chart (distinct updaters / ISO week; from Jira changelog)
- Table Compliance by Manager Org: Manager, Org size, Compliance, Lapsed, None
- Table People — Update Cadence: Person, Updates, Active wks, Last, Status
SSR-only for agents (no dedicated cadence JSON API discovered).
CTOO Partnerships — /metron/dashboard/ctoo-ecosystem-partnerships
Component: AtpView. Live from Jira LATC · atp-ep (partner = Epic, project = Story).
- Region filters: All · ROW · PRC (client filter; PRC preference key
atp-partnerships:prc)
- Categories: Startups · Academia · Industry · Internal
- KPIs: Partners, Projects, On track, In pilot, Need attention, Kept warm, Complete
- Partner cards with project rows + status chips: on-track, at-risk, blocked, pilot, warm, new, done
- Signed-in: + Add project →
POST /metron/api/program/atp/projects (form includes Jira key placeholder LATC-0000)
- Bare
GET /metron/api/program/atp may 404; read path is SSR data prop, writes go through ATP API
AI ROI — /metron/dashboard/ai-adoption
Subtitle: Token burn → code output · {range}
- Range pills →
?range=
- Score card: AI Adoption Score + Adoption rate / Accept rate / AI code ratio
- Spend: team total, LATC-ROW vs LATC-PRC, per active user, AI requests, active users
- Trends: Adoption Score + Team spend (ROW vs PRC)
- Adoption Funnel: engineers tracked → AI-active (≥1 Cursor request/week) → AI-attributed MRs → AI CI pass rate
- Tables: AI weeks vs non-AI weeks metrics; per-person (AI requests, accepted lines, AI code %, accept rate, MRs, commits, spend, efficiency)
SSR-only for agents.
Contributors — /metron/dashboard/contributors
Sortable leaderboard for selected range.
- Range pills →
?range=
- Org
<select> → ?manager=en%3A{name} (e.g. en%3Aanwar+ghuloum)
- Columns: Person, MRs, Commits, Reviews, AI Requests, Accept Rate, Issues, Doc Edits (plus GitLab/Cursor/Jira/Confluence group headers)
- Click column headers to sort
SSR-only for agents.
Activity Feed — /metron/dashboard/activity
Live GitLab / Jira / Confluence activity (UI copy: refresh ~5 minutes).
- Filters (client): All · GitLab · Confluence · Jira
- Grouped buckets: Today / Yesterday / This week / Older
- Load 40 more events
- Event types include issue updated, page edited, etc.
SSR seed + client filtering; no dedicated /api/activity JSON route found.
Sync Jobs — /metron/dashboard/sync-jobs
Ingest pipeline history — last 200 runs.
- KPIs: Total runs, Success rate, Errors, Last run
- Source Status cards — observed sources include: calorie, Confluence, Cursor, Cursor (team 2), GitLab LATC, Jira, Jira (instance 2), Jira activity (+ instance 2), …
- Run History table: Source, Status, Started, Duration, Rows, Watermark, Error
SSR-only.
How the agent should operate
- Identify the page from the sidebar table; Program work is only under
/dashboard/program.
- Roadmap / export / ATP writes / Team details refresh: require session cookie.
- Read data:
- Program / Team → JSON APIs above
- Everything else → open page (Playwright or HTML fetch) with cookie; use
?range= / ?manager= where documented
- Metron month index on Roadmap:
1=Apr’26 … 12=Mar’27.
- Roadmap PATCH: send full item row, not a partial patch.
- PII: Team, Contributors, Cadence, Resources, Activity embed names/emails — treat as internal.
- Offline twin: personal
roadmap-dashboard-html skill ≈ Program tabs only; Metron is the live hosted system.
- For concrete curl/Playwright/PATCH payloads, follow ops.md. Re-verify with
Downloads/metron-explore/verify_ops.py when the site changes.
- Executive Summary weekly cards: never PATCH placeholder/template text. Enforce the quality gates in ops.md § Weekly Executive Summary refresh (skip empty next-week shells, fix Jira-key strip artifacts, reject
Impact: None/TBD). Prefer weekly_exec_summary_refresh.py (gated) or a human rewrite via patch_weekly_readable.py.
Quick verification
curl -s -H "Cookie: $METRON_COOKIE" "$BASE/metron/api/auth/session"
curl -s -H "Cookie: $METRON_COOKIE" "$BASE/metron/api/program/roadmap" | head
curl -s -H "Cookie: $METRON_COOKIE" "$BASE/metron/api/team/compliance?period=Month" | head
curl -sI "$BASE/metron/dashboard?range=week"
Exploration artifacts (screenshots, DOM dumps, API probes): Downloads/metron-explore/full-explore/.
1---2name: metron-program-dashboard3description: Navigate and operate the live Metron Engineering Intel portal at https://latc.lenovo.com/metron — all sidebar pages (Overview, Team, Program, Jira Cadence, CTOO Partnerships, AI ROI, Contributors, Activity, Sync Jobs) plus Program Roadmap / FY26 pillar dependency tabs. Includes Confluence→Metron weekly Exec Summary refresh with quality gates (skip empty templates, fix strip artifacts, reject TBD impacts). Use when the user mentions Metron, LATC Engineering Intel, Program Roadmap, Team Calorie, Jira Cadence, CTOO/ATP partnerships, AI ROI/adoption, Contributors leaderboard, Activity Feed, Sync Jobs, or latc.lenovo.com/metron.4---56# Metron — Engineering Intel (full portal)78Live Next.js App Router site: **Metron — Engineering Intel** at `https://latc.lenovo.com/metron`.910Base path is always `/metron` (pages, assets, APIs). Auth.js credentials login at `/metron/login`.1112**Per-page extract / edit / filter recipes (verified):** [ops.md](ops.md) · **API field shapes:** [reference.md](reference.md)1314## Auth & secrets1516| Mode | Access |17|---|---|18| **Guest** | Most SSR pages readable; most Program tab GETs work; **Roadmap + export** blocked |19| **Signed in** | Edit controls; Roadmap; Team details refresh; CTOO mutations |2021Agent credentials (local only — never paste into chat/commits):2223`C:\Users\mfink\.cursor\secrets\metron.env`2425- `METRON_BASE=https://latc.lenovo.com`26- `METRON_COOKIE=...` (includes `__Secure-authjs.session-token`)27- optional `METRON_EMAIL` / `METRON_PASSWORD` for re-login via `Downloads/metron-explore/metron_login.py`2829Probe:3031```powershell32curl.exe -s -H "Cookie: <METRON_COOKIE>" -H "Accept: application/json" `33 "https://latc.lenovo.com/metron/api/auth/session"34```3536Expect `user.email` + `role` (e.g. `manager`). Session expiry ~30 days from login. On 401 for roadmap, re-login and refresh cookie.3738**Mutations:** never POST/PATCH/DELETE unless the user explicitly asks. Confirm the intended edit first.3940## Architecture (important)4142Two data patterns coexist:43441. **SSR / RSC** — Overview, Jira Cadence, AI ROI, Contributors, Activity, Sync Jobs, CTOO (read), Program **By Initiative** / much of Blockers. Data is embedded in the HTML/`text/x-component` flight. Changing filters often does a **soft navigation with query params** (no JSON API).452. **Client JSON APIs** — Program interactive tabs (`/metron/api/program/*`), Team rollups (`/metron/api/team/*`), CTOO writes (`/metron/api/program/atp...`).4647Prefer JSON APIs when they exist. For SSR-only pages, use authenticated Playwright or fetch the HTML/RSC page with the session cookie and parse visible text — do not invent endpoints that 404.4849## Sidebar (global)5051| Label | Route | Primary data mode |52|---|---|---|53| Overview | `/metron/dashboard` | SSR + `?range=` |54| Team Dashboard | `/metron/dashboard/team` | SSR org + client `/api/team/*` |55| **Program** | `/metron/dashboard/program` | Client Program APIs (+ SSR for RBS) |56| Jira Cadence | `/metron/dashboard/jira-cadence` | SSR + `?range=` |57| CTOO Partnerships | `/metron/dashboard/ctoo-ecosystem-partnerships` | SSR read; ATP write API |58| AI ROI | `/metron/dashboard/ai-adoption` | SSR + `?range=` |59| Contributors | `/metron/dashboard/contributors` | SSR + `?range=` / `?manager=` |60| Activity Feed | `/metron/dashboard/activity` | SSR (client filter) |61| Sync Jobs | `/metron/dashboard/sync-jobs` | SSR |6263Dark mode: sidebar footer (`localStorage` key `metron-theme`). Signed-in users see **Sign out**.6465---6667## Overview — `/metron/dashboard`6869**Title:** Executive Summary 70**Greeting:** “Welcome back, {name}. Showing {range}.”7172| Control | Behavior |73|---|---|74| This week / This month / Last 3M / Last 6M / Custom | Navigates `?range=week\|month\|3m\|6m` (Custom date UI) |7576**KPIs (buttons):** Active Users (avg/period) · AI Adoption (score/100) · AI Spend (USD total) 77**Chart:** Active Users Trend for selected range.7879No dedicated public JSON API — re-fetch the page with the desired `range` query.8081---8283## Team Dashboard — `/metron/dashboard/team`8485**Subtitle:** Org chart · team & individual work rollups · Jira Projects & Pillars · Confluence activity8687### UI sections88- **Organization** — expandable tree (default root e.g. Tolga Kurtoglu); pick a manager node89- **Manager view** — Direct reports vs Whole team counts; Cadence %90- **Range:** Week · Month · Quarter · Half · Year · All (client state; refreshes APIs with `period=`)91- **Team Calorie** + **Manager Calorie Benchmark** (percentile vs other teams)92- **Jira Update Compliance** · **Team Jira Summary**93- **Projects (Initiatives)** · **Pillars (Components)**94- **Jira · Team Ticket Activity** · **Confluence Activity**95- **Team Roster**9697### Client APIs9899| Endpoint | Query | Returns |100|---|---|---|101| `GET /metron/api/team/details` | `emails=` (comma list) + `period=Week\|Month\|Quarter\|…` | `{ total, byStatus, byProject, byPillar, trend, trendUnit, tickets, confluence, calorie }` |102| `GET /metron/api/team/compliance` | `period=` optional | Map `email → { updates, lastUpdate, daysSince, status }` where status ∈ compliant/lapsed/… |103104`byStatus` keys: `todo`, `prog`, `done`. Calorie object includes `benchmark`, `teamBenchmark`, `byPerson`, etc.105106Org tree + roster identity data are SSR; changing period/emails triggers the JSON calls above.107108---109110## Program — `/metron/dashboard/program`111112**Title:** LATC Pillar Dependency Map — FY26 113**Sources:** FY26 Roadmap · LATC Resource Registry 114**KPI strip:** Pillars · Work Items · Mapped Dependencies · Critical Blockers · High-Risk Gaps115116### In-page tabs (`tab` ids)117118| UI | id | Guest | Notes |119|---|---|---|---|120| Executive Summary | `summary` | Yes | Findings cards; edit when signed in |121| Pillar Dependency DAG | `dag` | Yes | SVG pillar graph |122| Critical Delivery Chains | `chains` | Yes | Live Jira step health |123| Item-Level Dependencies | `deps` | Yes | Table + CSV export |124| Schedule Risks | `risks` | Yes | Inversions / late prereqs / overlaps + staffing |125| Active Blockers | `blockers` | Yes | Jira blocked + manual; badge count |126| Resources | `resources` | Yes | Roster; open-gap badge; inline edit when signed in |127| By Initiative | `rbs` | Yes | Live Jira INIT→epic→task RBS (SSR; ~55 initiatives) |128| Teams & Capacity | `teams` | Yes | Per-pillar FTE need/gap |129| **Roadmap** | `roadmap` | **Auth** | FY26 Gantt; guest → login |130131Many tabs: **↓ Export CSV** → `/metron/api/program/export?tab=<id>` (auth). Known good tabs: `deps`, `resources`, `roadmap`, `risks`. `chains` may 400.132133### Roadmap (auth)134135- FY26 months `1..12` = Apr’26 → Mar’27136- Pillar codes: `infra`, `models`, `dcm`, `ro`, `runtime`, `eval`137- Fields: name, priority P0–P3, status, start/end month, resources, fte, has_gap, gap_note, blocked, dependencies[], notes, jira_url138- **PATCH** `/metron/api/program/roadmap/{item_id}` requires the **full row** (partial body can coerce numbers to `NaN` and 500)139140### Program JSON APIs141142Prefix: `https://latc.lenovo.com/metron/api/program/`143144| Path | Auth | Shape |145|---|---|---|146| `findings` | Guest GET | Finding[] |147| `chains` | Guest GET | Chain[] |148| `item-deps` | Guest GET | Dep[] (~39) |149| `schedule-risks` | Guest GET | `{ conflicts, staffing_gaps, summary }` |150| `resources` | Guest GET | Roster[] (~300+) |151| `team-meta` | Guest GET | Pillar capacity[] |152| `manual-blockers` / `blocker-annotations` | Guest GET | overlays |153| `manual-risks` / `risk-annotations` | Guest GET | overlays |154| `roadmap` | **Auth** | RoadmapItem[] (~151) |155| `export?tab=` | **Auth** | CSV |156| `atp` / `atp/projects` | Auth write | CTOO (see below) |157158Field-level shapes: [reference.md](reference.md).159160---161162## Jira Cadence — `/metron/dashboard/jira-cadence`163164How regularly people keep Jira updated, rolled up by manager org.165166- Range pills → `?range=` (same vocabulary as Overview)167- Compliance target chips: Weekly / Bi-weekly / Monthly168- KPIs: Org compliance %, People tracked, Lapsed (no update in 7d), No updates in range169- **Weekly Update Activity** chart (distinct updaters / ISO week; from Jira changelog)170- Table **Compliance by Manager Org**: Manager, Org size, Compliance, Lapsed, None171- Table **People — Update Cadence**: Person, Updates, Active wks, Last, Status172173SSR-only for agents (no dedicated cadence JSON API discovered).174175---176177## CTOO Partnerships — `/metron/dashboard/ctoo-ecosystem-partnerships`178179Component: `AtpView`. Live from Jira **LATC · atp-ep** (partner = Epic, project = Story).180181- Region filters: All · ROW · PRC (client filter; PRC preference key `atp-partnerships:prc`)182- Categories: Startups · Academia · Industry · Internal183- KPIs: Partners, Projects, On track, In pilot, Need attention, Kept warm, Complete184- Partner cards with project rows + status chips: on-track, at-risk, blocked, pilot, warm, new, done185- Signed-in: **+ Add project** → `POST /metron/api/program/atp/projects` (form includes Jira key placeholder `LATC-0000`)186- Bare `GET /metron/api/program/atp` may 404; **read path is SSR `data` prop**, writes go through ATP API187188---189190## AI ROI — `/metron/dashboard/ai-adoption`191192**Subtitle:** Token burn → code output · {range}193194- Range pills → `?range=`195- Score card: AI Adoption Score + Adoption rate / Accept rate / AI code ratio196- Spend: team total, LATC-ROW vs LATC-PRC, per active user, AI requests, active users197- Trends: Adoption Score + Team spend (ROW vs PRC)198- **Adoption Funnel:** engineers tracked → AI-active (≥1 Cursor request/week) → AI-attributed MRs → AI CI pass rate199- Tables: AI weeks vs non-AI weeks metrics; per-person (AI requests, accepted lines, AI code %, accept rate, MRs, commits, spend, efficiency)200201SSR-only for agents.202203---204205## Contributors — `/metron/dashboard/contributors`206207Sortable leaderboard for selected range.208209- Range pills → `?range=`210- Org `<select>` → `?manager=en%3A{name}` (e.g. `en%3Aanwar+ghuloum`)211- Columns: Person, MRs, Commits, Reviews, AI Requests, Accept Rate, Issues, Doc Edits (plus GitLab/Cursor/Jira/Confluence group headers)212- Click column headers to sort213214SSR-only for agents.215216---217218## Activity Feed — `/metron/dashboard/activity`219220Live GitLab / Jira / Confluence activity (UI copy: refresh ~5 minutes).221222- Filters (client): All · GitLab · Confluence · Jira223- Grouped buckets: Today / Yesterday / This week / Older224- **Load 40 more events**225- Event types include issue updated, page edited, etc.226227SSR seed + client filtering; no dedicated `/api/activity` JSON route found.228229---230231## Sync Jobs — `/metron/dashboard/sync-jobs`232233Ingest pipeline history — last 200 runs.234235- KPIs: Total runs, Success rate, Errors, Last run236- **Source Status** cards — observed sources include: calorie, Confluence, Cursor, Cursor (team 2), GitLab LATC, Jira, Jira (instance 2), Jira activity (+ instance 2), …237- **Run History** table: Source, Status, Started, Duration, Rows, Watermark, Error238239SSR-only.240241---242243## How the agent should operate2442451. **Identify the page** from the sidebar table; Program work is only under `/dashboard/program`.2462. **Roadmap / export / ATP writes / Team details refresh:** require session cookie.2473. **Read data:**248 - Program / Team → JSON APIs above249 - Everything else → open page (Playwright or HTML fetch) with cookie; use `?range=` / `?manager=` where documented2504. **Metron month index** on Roadmap: `1=Apr’26 … 12=Mar’27`.2515. **Roadmap PATCH:** send full item row, not a partial patch.2526. **PII:** Team, Contributors, Cadence, Resources, Activity embed names/emails — treat as internal.2537. Offline twin: personal `roadmap-dashboard-html` skill ≈ Program tabs only; Metron is the live hosted system.2548. For concrete curl/Playwright/PATCH payloads, follow [ops.md](ops.md). Re-verify with `Downloads/metron-explore/verify_ops.py` when the site changes.2559. **Executive Summary weekly cards:** never PATCH placeholder/template text. Enforce the quality gates in [ops.md](ops.md) § Weekly Executive Summary refresh (skip empty next-week shells, fix Jira-key strip artifacts, reject `Impact: None/TBD`). Prefer `weekly_exec_summary_refresh.py` (gated) or a human rewrite via `patch_weekly_readable.py`.256257## Quick verification258259```bash260curl -s -H "Cookie: $METRON_COOKIE" "$BASE/metron/api/auth/session"261curl -s -H "Cookie: $METRON_COOKIE" "$BASE/metron/api/program/roadmap" | head262curl -s -H "Cookie: $METRON_COOKIE" "$BASE/metron/api/team/compliance?period=Month" | head263curl -sI "$BASE/metron/dashboard?range=week"264```265266Exploration artifacts (screenshots, DOM dumps, API probes): `Downloads/metron-explore/full-explore/`.