{
 "meta": {
  "schemaVersion": "showcase-metrics@v1",
  "generatedAt": "2026-10-26",
  "pvizSchema": "pviz-llm-bundle@v1.3"
 },
 "blocks": [
  {
   "id": "callout-addendum",
   "type": "callout",
   "tone": "warning",
   "title": "Addendum: re-examined with the reference analyzer and slicer",
   "text": "This page re-examines the May showcase with the PViz reference analyzer and slicer, which are not yet enabled in the hosted product. The original report, metrics and fifteen slice files are unchanged. The exact May source could not be recovered; this addendum uses the nearest upstream commit."
  },
  {
   "id": "q",
   "type": "narrative",
   "title": "1. Original research question",
   "markdown": "How does slicing turn one large analysis bundle into focused, much smaller views of a very large repository?"
  },
  {
   "id": "orig",
   "type": "narrative",
   "title": "2. Original analyzer and evidence",
   "markdown": "A bundle of schema v1.1 for VSCode (10,311 nodes; 70.2 MB readable, 22.7 MB compressed) and slices produced with the slicer of that time, published with a report and a metrics file."
  },
  {
   "id": "src",
   "type": "narrative",
   "title": "3. Source revision",
   "markdown": "The May slices list every analyzed file with its line count. No upstream commit matches all of them; the nearest, `e78dfbd537bc` (2026-04-28), differs in 55 of 10,311 files. On that commit today's legacy analyzer finds 10,318 files, 148 cycle groups with a largest of 204, and `lifecycle.ts` with 2,653 importers, essentially the May figures (143 groups, largest 204)."
  },
  {
   "id": "cfg",
   "type": "narrative",
   "title": "4. Reference analyzer and configuration",
   "markdown": "Reference analyzer (preview: not enabled in the hosted product), release-candidate image revision `08823e7d7662`, run offline on the recovered source with the product's own analysis call. Full repository, no scoping. The reference run took 74 minutes with a peak of 4.8 GB of memory (legacy: 47 minutes, 1.3 GB). The repository has 2,301,203 source lines by the product's own estimate."
  },
  {
   "id": "table-structure",
   "type": "table",
   "title": "5. Structure: May, legacy and reference",
   "columns": [
    "Measure",
    "May 2026 (published)",
    "Legacy, nearest commit",
    "Reference, nearest commit"
   ],
   "rows": [
    [
     "Files",
     10311,
     10318,
     10318
    ],
    [
     "Cycle groups (more than one file)",
     143,
     148,
     148
    ],
    [
     "Largest cycle groups (files)",
     204,
     "204, 90, 55",
     "204, 90, 55"
    ],
    [
     "Most-imported file",
     "lifecycle.ts (2,653)",
     "lifecycle.ts (2,653)",
     "lifecycle.ts (2,653)"
    ],
    [
     "Relationship records",
     null,
     "92,374",
     "112,111"
    ],
    [
     "Bundle size readable / compressed (MB)",
     "70.2 / 22.7",
     "88.1 / 41.8",
     "259.8 / 141.7"
    ]
   ],
   "caption": "The May figure for the most-imported file is quoted from the original hub table."
  },
  {
   "id": "table-new",
   "type": "table",
   "title": "5b. What the reference analyzer adds",
   "columns": [
    "Measure",
    "Value"
   ],
   "rows": [
    [
     "Call sites analyzed / resolved inside the repository",
     "488,728 / 145,829 (30%)"
    ],
    [
     "Distinct caller → callee pairs",
     "102,971"
    ],
    [
     "Most widely called symbol",
     "Disposable._register (from 1,474 files)"
    ],
    [
     "Frameworks with an exact detection",
     "clap, electron, express, react, tokio"
    ],
    [
     "Frameworks detected only ambiguously (mostly Copilot test-fixture projects)",
     "angular, junit5, nestjs, nextjs, svelte, vite"
    ],
    [
     "Command entries / UI components",
     "30 / 418"
    ],
    [
     "Zones",
     2416
    ],
    [
     "Dead-module candidates / duplicate groups",
     "1,813 / 200"
    ]
   ]
  },
  {
   "id": "table-slices",
   "type": "table",
   "title": "5c. The same slices then and now (bytes, readable / compressed)",
   "columns": [
    "Slice",
    "May 2026",
    "Legacy slicer, now",
    "Reference slicer, now",
    "Seconds (legacy / reference)"
   ],
   "rows": [
    [
     "scc-summary",
     "12,660 / 9,785",
     "11,530 / 8,655",
     "13,696 / 10,409",
     "1.8 / 3.6"
    ],
    [
     "hub-summary",
     "48,908 / 28,825",
     "61,607 / 33,619",
     "93,415 / 52,631",
     "3.8 / 6.1"
    ],
    [
     "blast-radius",
     "411,103 / 323,447",
     "607,045 / 465,228",
     "664,948 / 509,773",
     "2.4 / 4.5"
    ],
    [
     "framework-summary (reference only)",
     "n/a",
     "n/a",
     "24,498 / 15,453",
     "- / 3.5"
    ]
   ],
   "caption": "Blast radius: `src/vs/base/common/processes.ts`, incoming, depth 4, at most 500 nodes and 2,000 edges, as in May."
  },
  {
   "id": "diff",
   "type": "narrative",
   "title": "6. Material differences",
   "markdown": "**The module structure is the same.** Both analyzers produce the same cycle groups and hubs as May. The reference analyzer's additional TypeScript relations (constructions, extends, implements) do not change them.\n\n**The bundle is much larger.** The reference bundle is 141.7 MB compressed, about 37.1 million tokens by the product's estimate. Slicing matters more, not less: the blast-radius slice reaches 500 files (truncated: true) in a file of 498 KB.\n\n**Calls add a second view of impact.** `processes.ts` is imported by 19 files, and the import-based blast radius from it reaches the 500-file cap. Resolved calls into its functions (2 of them) come from 5 of those importers. Call resolution is incomplete (30% of call sites), so this narrows where to look first rather than proving the other importers unaffected."
  },
  {
   "id": "table-findings",
   "type": "table",
   "title": "7. Findings retained, revised and new",
   "columns": [
    "Original finding",
    "Status",
    "Addendum"
   ],
   "rows": [
    [
     "A single bundle can be sliced into focused views each a small fraction of its size",
     "Retained",
     "Reproduced with both slicers; the reference bundle is about 37.1 million tokens, so slices are the only practical way to give an LLM part of it."
    ],
    [
     "Cyclic risk concentrates in a few large components",
     "Retained",
     "Essentially the same groups: 148 cycle groups, largest 204 files, in the chat, notebook and terminal contributions."
    ],
    [
     "Incoming hubs are foundational platform APIs (lifecycle, uri, event, nls, instantiation)",
     "Retained",
     "Same ranking. The call graph confirms it: `Disposable._register` in `lifecycle.ts` is called from 1,474 files."
    ],
    [
     "(new) Calls and frameworks",
     "New",
     "145,829 resolved call sites; Electron, clap and Tokio entry points, 30 command entries and 418 UI components."
    ],
    [
     "(new) Framework detections need their status read",
     "New",
     "Detections found only ambiguously (angular, junit5, nestjs, nextjs, svelte, vite), mostly in Copilot's test-fixture projects, are marked as such by the analyzer; only clap, electron, express, react, tokio are exact."
    ]
   ]
  },
  {
   "id": "ev",
   "type": "narrative",
   "title": "8. Supporting evidence",
   "markdown": "The commit recovery log, both run records, the structure and call facts and all regenerated slices (readable and compressed, both slicers) are in the download below. The full bundles are retained in the validation evidence and not published because of their size."
  },
  {
   "id": "lim",
   "type": "narrative",
   "title": "9. Limitations and comparability",
   "markdown": "The source is the nearest commit, not the May source (55 files differ). The reference analysis needs about 4.8 GB of memory and over an hour for a repository of this size. A repository of 2,301,203 source lines is above the proposed one-million-line analysis cap, if that cap is activated. Call resolution covers 30% of call sites."
  },
  {
   "id": "concl",
   "type": "narrative",
   "title": "10. Updated conclusion",
   "markdown": "The May showcase's structural findings hold on the nearest recoverable source with both current analyzers. The reference analyzer adds a call graph and framework entries that make impact questions answerable by calls as well as imports, at the cost of a bundle several times larger and a long, memory-heavy analysis. That strengthens the case the showcase made for slicing."
  }
 ]
}