▮ DFV TERMINAL
10Y 2Y CPI FEDFUNDS VIX SPX
--:--:-- UTC

Public Tracker v0.7d

tracker_v07d · ID 1Vx4NQF2Y17vXTgRJFEbYduJXQAf4OQcR_nVdg9PeKMU · Effort to rehab: medium

Tabs
16
Formulas
89,191
Error cells
8
External URLs
7

Purpose

Per-ticker tracking surface (the most-used screen in the SuperSpy DFV stack). User pastes a Universe sheet URL into start!B6; tracker chains IMPORTRANGE through Universe -> Insider Buying -> Metrics, then layers Yahoo Finance fundamentals via IMPORTJSON, insider activity, and daily/weekly/dollar movers across d/w/$/$+/custom/DASH/industry tabs.

Infrastructure shape

Three-tier: (1) start tab is the user setup wizard accepting Universe URL; named ranges universe/insiderBuying/metricsSheet auto-resolve. (2) setup tab (5711x124) is the staging chokepoint - 5 IMPORTRANGE formulas pull all upstream data. (3) Display tabs (d/w/$/$+/custom/DASH/industry) read setup via VLOOKUP/QUERY and decorate with ~26k HYPERLINK builders to external sites. Fundamentals layer is 62,195 IMPORTJSON calls hitting Yahoo query1 quoteSummary endpoint via admin!AQ3 base URL. 29 named ranges, 0 charts, 0 filter views (1 in setup), 8 hard error cells, 87,916 ISBLANK-gated empty formulas. No Apps Script (the IMPORTJSON function implies a custom Apps Script that the inventory didn't capture; 89k formulas without scripts beyond it).

Tabs (16)

TabStatusPurposeNotes
start working Setup wizard - user pastes Universe URL in B6, B7/B8 auto-resolve from named ranges 8 formulas, all alive logic; depends on Universe IMPORTRANGE being authorized
DASH partial Macro/markets/indices dashboard with multi-portfolio side-by-side views 26 formulas; pulls B1:AB from Metrics sheet via DASH!B1 IMPORTRANGE; HYPERLINK columns to WhaleWisdom/SeekingAlpha alive; visible #REF! values in B3/C3/D3 confirm Metrics IMPORTRANGE not authorized
d partial Daily movers (>=10% in a day) sortable view 4977 formulas; structure sound, all blanks gated on Universe authorization; HYPERLINK decorations alive
w partial Weekly movers (>=10% in a week) Same shape as d; depends on setup data
$ partial Insider buying tracker against Universe Same shape as d; depends on Insider Buying sheet IMPORTRANGE
d (old) broken Legacy daily movers tab Hidden, 306 formulas - cruft, drop in rehab
w (old) broken Legacy weekly movers Hidden, 4216 formulas - cruft
$ (old) broken Legacy insider tab Hidden, 1008 formulas - cruft
$+ broken Enhanced insider buys with per-ticker Yahoo fundamentals overlay 20,608 formulas, 19,569 are Yahoo IMPORTJSON. CH4 #ERROR is the canonical break. Entire tab non-functional until Yahoo replacement
custom broken User-configurable per-ticker view with full Yahoo fundamentals fan-out 47,644 formulas (largest tab), 42,614 IMPORTJSON. Same Yahoo dependency
industry partial Sector/industry/sub-industry navigator 370 formulas, 5 hard-broken (#N/A on MATCH/SORT/FILTER cascading from missing Universe data); will heal with data
toDo working Author's planned-improvements list 0 formulas; informational
setup broken Data staging - 5 IMPORTRANGE chokepoints feed everything else 60 formulas; B3/B5/R5/AG5/AR5 are the master IMPORTRANGE bases. AR5 pulls from Metrics yahoo!B2:AD5050
send partial Outbound formatting/staging tab (likely for export) Only 3 formulas; minimal surface
admin partial Configuration: data source URLs, menu options, auth state 11 formulas, 2 hard-broken (BE3/BF3 cascade from industry). AQ3='https://query1.finance.yahoo.com/v10/finance/quoteSummary/' is the dead Yahoo base. AR3 holds the modules query string
notes working Free-form user notes 0 formulas

External dependencies

URL / endpointStatusPurposeReplacement
https://query1.finance.yahoo.com/v10/finance/quoteSummary/ ✗ dead All ~62k fundamentals lookups (EBITDA, EPS, sharesOutstanding, EV, dividendYield, totalCash/Debt, 52w, bookValue, etc.) via IMPORTJSON VPS endpoint backed by secfsdstools flattening SEC EDGAR XBRL into a master!fundamentals tab; rewrite IMPORTJSON cells to VLOOKUP
https://stockcharts.com/h-sc/ui?s= ✓ alive Per-ticker chart hyperlinks (16,102 occurrences) keep as-is
http://openinsider.com/search?q= ✓ alive Per-ticker insider transaction page hyperlinks (7,264) keep hyperlinks; structured data via VPS/OpenInsider scraper feeding master!insider
https://seekingalpha.com/symbol/ ✓ alive News/profile hyperlinks (621) keep as-is
https://whalewisdom.com/stock/ ✓ alive Institutional holder hyperlinks (620) keep as-is
https://www.sec.gov/edgar/search/?r=el#/entityName= ✓ alive EDGAR filing search hyperlinks (610) keep as-is
https://www.google.com/search?q= ✓ alive Google search hyperlinks (610) keep as-is
https://finance.yahoo.com/quote/ ✗ dead Yahoo profile page hyperlink (610) - HTTP 500 on landing swap to https://stockanalysis.com/stocks/ or https://finviz.com/quote.ashx?t=

Cross-sheet IMPORTRANGE dependencies (out)

FromTarget sheetRangePurpose
? ? Authorize Universe IMPORTRANGE
? ? Authorize Insider Buying IMPORTRANGE
? ? Authorize Metrics IMPORTRANGE
? ? Macro dashboard data
? ? Master ticker metadata pull
? ? Secondary ticker metadata
? ? Tag/sector data
? ? Insider transactions
? ? Bulk fundamentals mirror
? ? Setup-link autopopulation
? ? Tags list for filters
? ? Inventory probe reports 0 IMPORTRANGE edges because all targets are named ranges (universe/insiderBuying/metricsSheet) not literal sheet IDs

Broken cells — root cause analysis

Total error cells: 8

Root causeCountExample addresses
Yahoo IMPORTJSON returns ERROR (query1 quoteSummary requires crumb+cookie auth since mid-2023) 1 $+!CH4
MATCH against industry!A8:A which is empty until Universe IMPORTRANGE authorized 4 industry!AE2, industry!M3, industry!B7, industry!C363
TRANSPOSE/SPLIT against industry!B2:AL6 empty (cascade from same root) 2 admin!BE3, admin!BF3
SORT/FILTER on setup!$DG$5:$DQ empty (cascade) 1 industry!C369
_silent_iceberg: ~62k formula-bearing-but-empty IMPORTJSON cells in $+ and custom that will fail the moment tickers populate 62195 $+!CH4, custom!*

Rehab strategy

Keep Tracker v0.7d as the user-facing surface; replace plumbing with one VPS-backed master sheet. Steps: (1) build dfv-master sheet with tabs prices/fundamentals/insider/dash/universe fed by VPS Python service (secfsdstools for SEC fundamentals matching the 13 Yahoo JSON paths in admin!AR3, OpenInsider scraper for insider, FRED/fiscaldata for macro). (2) Repoint universe/insiderBuying/metricsSheet/pricesLink named ranges to the same master sheet ID - collapses 3 IMPORTRANGE auth grants into 1. (3) Mass find/replace the ~62k IMPORTJSON cells in $+ and custom to VLOOKUP/INDEX-MATCH against master!fundamentals - drops Yahoo dependency entirely. (4) Delete the three (old) hidden tabs. (5) Pre-populate industry!A8:A with canonical sector enum to heal the 5 cascading #N/A errors. (6) Keep all HYPERLINK columns as-is (all destinations alive except finance.yahoo.com - swap to stockanalysis.com). No script rewrites, no chart rebuilds (zero charts), no schema redesign.

Named ranges

29 named ranges, all structurally intact. Critical ones: universe/insiderBuying/metricsSheet/pricesLink (4 IMPORTRANGE entry points - rehab repoints these to a single master sheet); SubmitButton/masterFilter/masterNoError/queryFilters1/queryFilters2/sortColumn1/sortColumn2/ascendingDescending/YearsToAnalyze (UI controls on admin tab); tagsList/setupLabels/subIndustry/portLabels (label/lookup data); customSheetName/customFilter/customNoError plus tab-prefixed siblings ('d'!customFilter, 'w'!customFilter, '$'!customFilter) for the per-tab custom view system. No broken refs. Drop nothing.

Questions for you

  1. Confirm the source-of-truth Universe sheet ID. The AW5 sample value points to '1vsb2UfsqPXSfXzH1j-qnK8sDaW37kdKd097MiC7m1PM' (which url_probe lists under universe_v07d). Is that the canonical Universe to wire up, or is there a newer one?
  2. For the Yahoo IMPORTJSON replacement - prefer option 1 (mass-rewrite to VLOOKUP against pre-flattened master tab) or option 2 (keep IMPORTJSON shape but write an Apps Script wrapper hitting VPS REST API)? Option 1 is cleaner; option 2 preserves the original 62k formulas verbatim if you want minimal sheet-side diffs.
  3. Drop the (old) tabs entirely, or preserve them for archaeology / historical reference?
  4. The custom Apps Script function IMPORTJSON() isn't visible in the inventory - was the script payload captured separately, or is that a TODO before rehab?
Full markdown analysis (click to expand)

Public Tracker v0.7d — Analysis

Sheet: Copy of Public Tracker - v0.7d ID: 1Vx4NQF2Y17vXTgRJFEbYduJXQAf4OQcR_nVdg9PeKMU Author: u/TheSuperSpy Tabs: 16 | Total formulas: 89,191 | Unique: 65,527 Hard error cells: 8 (everything else is ISBLANK-gated empty)

Purpose

Per-ticker tracking surface that sits on top of the SuperSpy stack. The user pastes a Universe sheet URL into start!B6, and the tracker pulls everything else (Insider Buying sheet, Metrics sheet) by chained IMPORTRANGE. Layers Yahoo Finance fundamentals (via IMPORTJSON), insider activity, daily/weekly/dollar movers, sector/industry breakdowns, and a custom user-configurable view on top. This was the most-used surface in the 2021-era DFV community stack — the screen people actually opened every day.

Infrastructure shape

  • Entry point: start!B6 accepts the Universe sheet URL. start!B7/B8 autopopulate the Insider Buying and Metrics sheet links from named ranges insiderBuying and metricsSheet (which themselves IMPORTRANGE from Universe admin!AA3 / admin!M3).
  • Data fan-in: setup tab (5,711 rows × 124 cols) is the chokepoint. Five IMPORTRANGE formulas (setup!B3, B5, R5, AG5, AR5) pull Universe metadata, insider buys, and Metrics data into a single staging table.
  • Data fan-out: d, w, $, $+, custom, DASH, industry all read from setup via VLOOKUP / QUERY against setup!$B$5:$DA and setup!$B$5:$DF ranges.
  • Fundamentals: 62,195 IMPORTJSON calls, all hitting admin!AQ3 & ticker & admin!AR3, which resolves to https://query1.finance.yahoo.com/v10/finance/quoteSummary/{TICKER}?modules=financialData,balanceSheetHistoryQuarterly,.... 13 unique JSON path patterns extracting EBITDA, shares outstanding, EPS, book value, total cash/debt, 52-week high/low, etc. Concentrated in $+ (19,569 calls) and custom (42,614 calls).
  • External link decoration: ~26k HYPERLINK formulas to StockCharts, OpenInsider, SeekingAlpha, WhaleWisdom, EDGAR, Google search, Yahoo profile pages — pure URL builders, not data fetches.
  • Formula scaffolding: 88,900 ISBLANK guards, 15,500 INDIRECT/ADDRESS/ROW/MATCH navigation — typical defensive sheet engineering.
  • No native IMPORTRANGE edges out per the inventory probe (0 cross-sheet edges found at parse time), but runtime edges absolutely exist to Universe / Insider Buying / Metrics; the inventory missed them because they reference named ranges, not literal sheet IDs. See setup!B3, setup!AG5, setup!AR5, admin!E4, admin!W28, DASH!B1, start!D6:D8.

What works

  • All HYPERLINK plumbing (~26k cells) — StockCharts (alive), OpenInsider (alive), SeekingAlpha (alive), WhaleWisdom (alive), SEC EDGAR (alive), Google (alive). These light up the moment Universe setup!B5 IMPORTRANGE returns tickers.
  • The start setup wizard logic and named-range plumbing (29 named ranges) is intact and well-engineered.
  • VLOOKUP / SORT / QUERY routing from setup into d / w / $ / DASH is structurally sound.
  • The industry sector/sub-industry navigator (small target — 370 formulas, only 5 hard-broken).
  • toDo and notes tabs (informational only).

What's broken (specific cells)

Hard errors (8 total): - $+!CH4#ERROR! from the master Yahoo IMPORTJSON for sharesOutstanding/totalRevenue/52w/EBITDA/EV/dividendYield/totalCash/totalDebt/EPS/bookValue. This is the canonical broken cell — the row 4 template the entire $+ tab inherits. - industry!AE2, industry!M3#N/A from MATCH on labels ("Communication Svcs", "auto components") that don't exist in the current Universe-fed industry!A8:A because the Universe IMPORTRANGE hasn't been authorized in this copy. - industry!B7#N/A from MATCH(B3, sortColumn2, 0) (cascade). - industry!C363, industry!C369#N/A from SORT(FILTER(setup!$DG$5:$DQ, subIndustry = ...)) (cascade). - admin!BE3, admin!BF3#N/A from TRANSPOSE/SPLIT against industry!B2:AL6 which is empty until Universe is wired.

Silent breakage (the iceberg): Per compact.json, 87,916 cells are formula-bearing but empty-valued. Of these: - ~62k are Yahoo IMPORTJSON calls that will return errors or empties the moment a ticker arrives, because query1.finance.yahoo.com/v10/finance/quoteSummary requires a crumb + cookie auth pair as of mid-2023. The URL probe confirms query2.finance.yahoo.com/v6/finance/quoteSummary returns 404 and finance.yahoo.com/quote returns 500. - ~25k are setup-fed VLOOKUPs / sorts / per-row decorators that are blank only because the Universe IMPORTRANGE upstream is unauthorized in this fresh copy (gated by setup!C1, D1, AG1 boolean toggles).

Hidden legacy tabs: d (old), w (old), $ (old) — kept hidden, ~5,500 dead formulas. Cruft.

External dependencies

URL Alive Occurrences Replacement
query1.finance.yahoo.com/v10/finance/quoteSummary/ (via admin!AQ3) DEAD (auth-gated since 2023) 62,195 VPS endpoint backed by secfsdstools (SEC fundamentals)
stockcharts.com/h-sc/ui?s= alive 16,102 keep
openinsider.com/search?q= alive 7,264 keep (also feed structured data via VPS/OpenInsider)
seekingalpha.com/symbol/ alive 621 keep
whalewisdom.com/stock/ alive 620 keep
sec.gov/edgar/search/?r=el#/entityName= alive 610 keep
google.com/search?q= alive 610 keep
finance.yahoo.com/quote/ (HYPERLINK only — humans) dead landing (HTTP 500), link target only 610 swap to finviz or stockanalysis.com

No leaked credentials in this sheet. The apikey=L1TT... in the URL probe belongs to social_tracker, not Tracker v0.7d. Clean.

Cross-sheet dependencies

Tracker v0.7d depends on three other sheets, dynamically resolved: - Universe (user-pasted into start!B6, e.g. 1vsb2UfsqPXSfXzH1j-qnK8sDaW37kdKd097MiC7m1PM per the AW5 sample value) — supplies tickers, tags, sub-industry, sector, manual notes. - Insider Buying (auto-resolved from Universe admin!AA3) — supplies universeBuys!C4:M insider transactions. - Metrics (auto-resolved from Universe admin!M3) — supplies yahoo!B2:AD5050 (per-ticker fundamentals scrape) and DASH!B1:AB (market dashboard data).

The metricsSheet IMPORTRANGE pulls from a yahoo! tab — meaning Tracker doesn't call Yahoo directly for every ticker; the bulk of fundamentals are mirrored via the Metrics sheet, with IMPORTJSON only on per-row $+ / custom expansion. Metrics sheet is therefore the keystone — fix that one, and Tracker mostly heals.

No outbound IMPORTRANGE edges to other DFV-stack sheets beyond Universe / Insider Buying / Metrics.

Rehab strategy

Goal: keep Tracker v0.7d as the user-facing portfolio surface; replace its data plumbing with a single VPS-backed master sheet so the user only authorizes one IMPORTRANGE.

  1. Stand up dfv-master sheet fed by VPS Python service. Tabs: prices (FRED + market data), fundamentals (secfsdstools quarterly/annual XBRL → flattened metrics matching the 13 Yahoo paths in admin!AR3), insider (OpenInsider), dash (Treasury fiscaldata + FRED macro), universe (curated ticker list).
  2. Repoint named ranges in Tracker: change universe, insiderBuying, metricsSheet to all reference the same master sheet ID. Keeps the existing start!B6:B8 UX but collapses three IMPORTRANGE auth grants into one.
  3. Replace the Yahoo IMPORTJSON layer in $+ and custom tabs. Two options:
  4. (low effort) Pre-flatten all needed metrics into master!fundamentals columns and rewrite the ~62k IMPORTJSON cells to plain VLOOKUP / INDEX-MATCH against that range. Drops the IMPORTJSON dependency entirely.
  5. (higher effort) Stand up an internal IMPORTJSON-compatible Apps Script wrapper hitting the VPS REST API. Preserves formula shape but reintroduces script complexity. Recommend option 1 — VPS already produces flat tables; sheet-side becomes simple lookups.
  6. Drop the (old) tabs entirely. Cruft, hidden, no value.
  7. Keep all HYPERLINK columns as-is. Decorative and all alive.
  8. Patch industry cascading errors by ensuring Universe pre-populates industry!A8:A with the canonical sector list (or rebuild as a static enum on the master sheet).

Effort rating

Medium. The bulk-formula horror (89k cells) is misleading — most of it is mechanical decoration that survives a clean Universe authorization and a Metrics sheet swap. Actual rewrite scope: - ~62k IMPORTJSON cells in $+ and custom → mass find/replace to VLOOKUP against a fixed master range. - 5 IMPORTRANGE bases in setup → repoint to single master sheet. - 8 hard-broken cells → trivially heal once data flows. - One Apps Script IMPORTJSON() custom function may need to be removed/replaced if option 1 is chosen.

No script rewrites, no schema redesign, no chart rebuilds (sheet has 0 charts). One competent half-day plus a Metrics-sheet rebuild.

Raw analysis.json
{
  "broken_cells_summary": {
    "by_tab": {
      "$+": 1,
      "admin": 2,
      "industry": 5
    },
    "root_causes": [
      {
        "cause": "Yahoo IMPORTJSON returns ERROR (query1 quoteSummary requires crumb+cookie auth since mid-2023)",
        "count": 1,
        "example_addrs": [
          "$+!CH4"
        ]
      },
      {
        "cause": "MATCH against industry!A8:A which is empty until Universe IMPORTRANGE authorized",
        "count": 4,
        "example_addrs": [
          "industry!AE2",
          "industry!M3",
          "industry!B7",
          "industry!C363"
        ]
      },
      {
        "cause": "TRANSPOSE/SPLIT against industry!B2:AL6 empty (cascade from same root)",
        "count": 2,
        "example_addrs": [
          "admin!BE3",
          "admin!BF3"
        ]
      },
      {
        "cause": "SORT/FILTER on setup!$DG$5:$DQ empty (cascade)",
        "count": 1,
        "example_addrs": [
          "industry!C369"
        ]
      },
      {
        "cause": "_silent_iceberg: ~62k formula-bearing-but-empty IMPORTJSON cells in $+ and custom that will fail the moment tickers populate",
        "count": 62195,
        "example_addrs": [
          "$+!CH4",
          "custom!*"
        ]
      }
    ],
    "total": 8
  },
  "effort_rating": "medium",
  "external_dependencies": [
    {
      "alive": false,
      "purpose": "All ~62k fundamentals lookups (EBITDA, EPS, sharesOutstanding, EV, dividendYield, totalCash/Debt, 52w, bookValue, etc.) via IMPORTJSON",
      "replacement": "VPS endpoint backed by secfsdstools flattening SEC EDGAR XBRL into a master!fundamentals tab; rewrite IMPORTJSON cells to VLOOKUP",
      "url": "https://query1.finance.yahoo.com/v10/finance/quoteSummary/"
    },
    {
      "alive": true,
      "purpose": "Per-ticker chart hyperlinks (16,102 occurrences)",
      "replacement": "keep as-is",
      "url": "https://stockcharts.com/h-sc/ui?s="
    },
    {
      "alive": true,
      "purpose": "Per-ticker insider transaction page hyperlinks (7,264)",
      "replacement": "keep hyperlinks; structured data via VPS/OpenInsider scraper feeding master!insider",
      "url": "http://openinsider.com/search?q="
    },
    {
      "alive": true,
      "purpose": "News/profile hyperlinks (621)",
      "replacement": "keep as-is",
      "url": "https://seekingalpha.com/symbol/"
    },
    {
      "alive": true,
      "purpose": "Institutional holder hyperlinks (620)",
      "replacement": "keep as-is",
      "url": "https://whalewisdom.com/stock/"
    },
    {
      "alive": true,
      "purpose": "EDGAR filing search hyperlinks (610)",
      "replacement": "keep as-is",
      "url": "https://www.sec.gov/edgar/search/?r=el#/entityName="
    },
    {
      "alive": true,
      "purpose": "Google search hyperlinks (610)",
      "replacement": "keep as-is",
      "url": "https://www.google.com/search?q="
    },
    {
      "alive": false,
      "purpose": "Yahoo profile page hyperlink (610) - HTTP 500 on landing",
      "replacement": "swap to https://stockanalysis.com/stocks/ or https://finviz.com/quote.ashx?t=",
      "url": "https://finance.yahoo.com/quote/"
    }
  ],
  "importrange_edges_out": [
    {
      "purpose": "Authorize Universe IMPORTRANGE",
      "source_cell": "start!D6",
      "target": "Universe sheet (user-pasted)"
    },
    {
      "purpose": "Authorize Insider Buying IMPORTRANGE",
      "source_cell": "start!D7",
      "target": "Insider Buying sheet (auto-resolved)"
    },
    {
      "purpose": "Authorize Metrics IMPORTRANGE",
      "source_cell": "start!D8",
      "target": "Metrics sheet (auto-resolved)"
    },
    {
      "purpose": "Macro dashboard data",
      "source_cell": "DASH!B1",
      "target": "Metrics!DASH!B1:AB"
    },
    {
      "purpose": "Master ticker metadata pull",
      "source_cell": "setup!B3",
      "target": "Universe!universe!A4:AE"
    },
    {
      "purpose": "Secondary ticker metadata",
      "source_cell": "setup!B5",
      "target": "Universe!universe!A4:AE"
    },
    {
      "purpose": "Tag/sector data",
      "source_cell": "setup!R5",
      "target": "Universe!universe!AF4:AT"
    },
    {
      "purpose": "Insider transactions",
      "source_cell": "setup!AG5",
      "target": "Insider Buying!universeBuys!C4:M"
    },
    {
      "purpose": "Bulk fundamentals mirror",
      "source_cell": "setup!AR5",
      "target": "Metrics!yahoo!B2:AD5050"
    },
    {
      "purpose": "Setup-link autopopulation",
      "source_cell": "admin!E4",
      "target": "Universe!start!B7:F"
    },
    {
      "purpose": "Tags list for filters",
      "source_cell": "admin!W28",
      "target": "Universe!tagsList"
    },
    {
      "purpose": "Inventory probe reports 0 IMPORTRANGE edges because all targets are named ranges (universe/insiderBuying/metricsSheet) not literal sheet IDs",
      "source_cell": "_inventory_note",
      "target": "_inventory_note"
    }
  ],
  "infrastructure_shape": "Three-tier: (1) start tab is the user setup wizard accepting Universe URL; named ranges universe/insiderBuying/metricsSheet auto-resolve. (2) setup tab (5711x124) is the staging chokepoint - 5 IMPORTRANGE formulas pull all upstream data. (3) Display tabs (d/w/$/$+/custom/DASH/industry) read setup via VLOOKUP/QUERY and decorate with ~26k HYPERLINK builders to external sites. Fundamentals layer is 62,195 IMPORTJSON calls hitting Yahoo query1 quoteSummary endpoint via admin!AQ3 base URL. 29 named ranges, 0 charts, 0 filter views (1 in setup), 8 hard error cells, 87,916 ISBLANK-gated empty formulas. No Apps Script (the IMPORTJSON function implies a custom Apps Script that the inventory didn\u0027t capture; 89k formulas without scripts beyond it).",
  "name": "Public Tracker v0.7d",
  "named_ranges_assessment": "29 named ranges, all structurally intact. Critical ones: universe/insiderBuying/metricsSheet/pricesLink (4 IMPORTRANGE entry points - rehab repoints these to a single master sheet); SubmitButton/masterFilter/masterNoError/queryFilters1/queryFilters2/sortColumn1/sortColumn2/ascendingDescending/YearsToAnalyze (UI controls on admin tab); tagsList/setupLabels/subIndustry/portLabels (label/lookup data); customSheetName/customFilter/customNoError plus tab-prefixed siblings (\u0027d\u0027!customFilter, \u0027w\u0027!customFilter, \u0027$\u0027!customFilter) for the per-tab custom view system. No broken refs. Drop nothing.",
  "purpose": "Per-ticker tracking surface (the most-used screen in the SuperSpy DFV stack). User pastes a Universe sheet URL into start!B6; tracker chains IMPORTRANGE through Universe -\u003e Insider Buying -\u003e Metrics, then layers Yahoo Finance fundamentals via IMPORTJSON, insider activity, and daily/weekly/dollar movers across d/w/$/$+/custom/DASH/industry tabs.",
  "questions_for_brad": [
    "Confirm the source-of-truth Universe sheet ID. The AW5 sample value points to \u00271vsb2UfsqPXSfXzH1j-qnK8sDaW37kdKd097MiC7m1PM\u0027 (which url_probe lists under universe_v07d). Is that the canonical Universe to wire up, or is there a newer one?",
    "For the Yahoo IMPORTJSON replacement - prefer option 1 (mass-rewrite to VLOOKUP against pre-flattened master tab) or option 2 (keep IMPORTJSON shape but write an Apps Script wrapper hitting VPS REST API)? Option 1 is cleaner; option 2 preserves the original 62k formulas verbatim if you want minimal sheet-side diffs.",
    "Drop the (old) tabs entirely, or preserve them for archaeology / historical reference?",
    "The custom Apps Script function IMPORTJSON() isn\u0027t visible in the inventory - was the script payload captured separately, or is that a TODO before rehab?"
  ],
  "rehab_strategy": "Keep Tracker v0.7d as the user-facing surface; replace plumbing with one VPS-backed master sheet. Steps: (1) build dfv-master sheet with tabs prices/fundamentals/insider/dash/universe fed by VPS Python service (secfsdstools for SEC fundamentals matching the 13 Yahoo JSON paths in admin!AR3, OpenInsider scraper for insider, FRED/fiscaldata for macro). (2) Repoint universe/insiderBuying/metricsSheet/pricesLink named ranges to the same master sheet ID - collapses 3 IMPORTRANGE auth grants into 1. (3) Mass find/replace the ~62k IMPORTJSON cells in $+ and custom to VLOOKUP/INDEX-MATCH against master!fundamentals - drops Yahoo dependency entirely. (4) Delete the three (old) hidden tabs. (5) Pre-populate industry!A8:A with canonical sector enum to heal the 5 cascading #N/A errors. (6) Keep all HYPERLINK columns as-is (all destinations alive except finance.yahoo.com - swap to stockanalysis.com). No script rewrites, no chart rebuilds (zero charts), no schema redesign.",
  "slug": "tracker_v07d",
  "tabs": [
    {
      "name": "start",
      "notes": "8 formulas, all alive logic; depends on Universe IMPORTRANGE being authorized",
      "purpose": "Setup wizard - user pastes Universe URL in B6, B7/B8 auto-resolve from named ranges",
      "status": "working"
    },
    {
      "name": "DASH",
      "notes": "26 formulas; pulls B1:AB from Metrics sheet via DASH!B1 IMPORTRANGE; HYPERLINK columns to WhaleWisdom/SeekingAlpha alive; visible #REF! values in B3/C3/D3 confirm Metrics IMPORTRANGE not authorized",
      "purpose": "Macro/markets/indices dashboard with multi-portfolio side-by-side views",
      "status": "partial"
    },
    {
      "name": "d",
      "notes": "4977 formulas; structure sound, all blanks gated on Universe authorization; HYPERLINK decorations alive",
      "purpose": "Daily movers (\u003e=10% in a day) sortable view",
      "status": "partial"
    },
    {
      "name": "w",
      "notes": "Same shape as d; depends on setup data",
      "purpose": "Weekly movers (\u003e=10% in a week)",
      "status": "partial"
    },
    {
      "name": "$",
      "notes": "Same shape as d; depends on Insider Buying sheet IMPORTRANGE",
      "purpose": "Insider buying tracker against Universe",
      "status": "partial"
    },
    {
      "name": "d (old)",
      "notes": "Hidden, 306 formulas - cruft, drop in rehab",
      "purpose": "Legacy daily movers tab",
      "status": "broken"
    },
    {
      "name": "w (old)",
      "notes": "Hidden, 4216 formulas - cruft",
      "purpose": "Legacy weekly movers",
      "status": "broken"
    },
    {
      "name": "$ (old)",
      "notes": "Hidden, 1008 formulas - cruft",
      "purpose": "Legacy insider tab",
      "status": "broken"
    },
    {
      "name": "$+",
      "notes": "20,608 formulas, 19,569 are Yahoo IMPORTJSON. CH4 #ERROR is the canonical break. Entire tab non-functional until Yahoo replacement",
      "purpose": "Enhanced insider buys with per-ticker Yahoo fundamentals overlay",
      "status": "broken"
    },
    {
      "name": "custom",
      "notes": "47,644 formulas (largest tab), 42,614 IMPORTJSON. Same Yahoo dependency",
      "purpose": "User-configurable per-ticker view with full Yahoo fundamentals fan-out",
      "status": "broken"
    },
    {
      "name": "industry",
      "notes": "370 formulas, 5 hard-broken (#N/A on MATCH/SORT/FILTER cascading from missing Universe data); will heal with data",
      "purpose": "Sector/industry/sub-industry navigator",
      "status": "partial"
    },
    {
      "name": "toDo",
      "notes": "0 formulas; informational",
      "purpose": "Author\u0027s planned-improvements list",
      "status": "working"
    },
    {
      "name": "setup",
      "notes": "60 formulas; B3/B5/R5/AG5/AR5 are the master IMPORTRANGE bases. AR5 pulls from Metrics yahoo!B2:AD5050",
      "purpose": "Data staging - 5 IMPORTRANGE chokepoints feed everything else",
      "status": "broken"
    },
    {
      "name": "send",
      "notes": "Only 3 formulas; minimal surface",
      "purpose": "Outbound formatting/staging tab (likely for export)",
      "status": "partial"
    },
    {
      "name": "admin",
      "notes": "11 formulas, 2 hard-broken (BE3/BF3 cascade from industry). AQ3=\u0027https://query1.finance.yahoo.com/v10/finance/quoteSummary/\u0027 is the dead Yahoo base. AR3 holds the modules query string",
      "purpose": "Configuration: data source URLs, menu options, auth state",
      "status": "partial"
    },
    {
      "name": "notes",
      "notes": "0 formulas",
      "purpose": "Free-form user notes",
      "status": "working"
    }
  ]
}