diff --git a/.github/workflows/devtools-provenance.yml b/.github/workflows/devtools-provenance.yml new file mode 100644 index 00000000..b369b26f --- /dev/null +++ b/.github/workflows/devtools-provenance.yml @@ -0,0 +1,71 @@ +name: DevTools Provenance (Gate 1) + +# Source-mapping (provenance / W4) analysis layer: pure net10.0, no desktop required, so it runs on a +# hosted runner. Builds the library + analyzer, runs the grader/aggregator/Gate-1 unit tests and the +# standing Gate-1 check over the committed reference corpus, re-derives the published census rates, and +# enforces the public-repo scrub. Fresh live-app collection (packaged/trimmed, real-app corpus) is a +# separate heavy gate that needs an interactive desktop and is not run here. + +on: + push: + branches: [ "winui-devex" ] + paths: + - "src/winapp-devtools/**" + - ".github/workflows/devtools-provenance.yml" + pull_request: + branches: [ "winui-devex", "main" ] + paths: + - "src/winapp-devtools/**" + - ".github/workflows/devtools-provenance.yml" + workflow_dispatch: + +permissions: + contents: read + +jobs: + provenance: + runs-on: windows-latest + defaults: + run: + shell: pwsh + steps: + - name: Checkout + uses: actions/checkout@v5 + + - name: Install .NET + uses: actions/setup-dotnet@v5 + with: + dotnet-version: 10.0.x + + # Public-repo hard gate: fail fast on any forbidden internal token before doing anything else. + - name: Scrub scan (public-repo forbidden tokens) + run: ./src/winapp-devtools/scripts/scrub-scan.ps1 + + - name: Build (Release, warnings-as-errors) + run: dotnet build src/winapp-devtools/devtools.slnx -c Release + + # Unit tests + the standing Gate-1 check (0% false-confident, Release floors) over the reference corpus. + - name: Unit tests + Gate-1 standing check + run: > + dotnet run --project src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/WinApp.DevTools.Provenance.Tests.csproj + -c Release -- + --report-trx --report-trx-filename provenance.trx + --results-directory artifacts/test-results + + # Re-derive the published census rates from the committed corpus and gate on the verdict + # (--strict makes CONDITIONAL/INCONCLUSIVE non-zero too; a KILL is always non-zero). + - name: Census analyze + Gate-1 verdict + run: > + dotnet run --project src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Census/WinApp.DevTools.Provenance.Census.csproj + -c Release -- + analyze src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Fixtures/census + --out artifacts/census --strict + + - name: Upload results + if: always() + uses: actions/upload-artifact@v4 + with: + name: provenance-census + path: | + artifacts/test-results/** + artifacts/census/** diff --git a/specs/winapp-devtools-provenance.md b/specs/winapp-devtools-provenance.md index 98a525a4..09c9042a 100644 --- a/specs/winapp-devtools-provenance.md +++ b/specs/winapp-devtools-provenance.md @@ -1,6 +1,10 @@ # Spec: provenance — confidence-graded source mapping & the census (W4) > **Status:** 🟡 Draft v0.1 — best-effort, **honestly graded**, and gated by a pre-build reality census. +> **Implementation:** the pure-logic **analysis layer landed** — grader, census analysis + Gate-1 +> evaluator, unit tests, and the standing Gate-1 check ship in `src/winapp-devtools/` (see §8). Live +> collection + the live `Source.resolve`/`census` commands are deferred (heavy gate — need the running-app +> daemon and the W3 read floor). > **Branch:** `winui-devex` · **Owner:** (you) · **Workstream:** W4 > **Related:** `winapp-devtools-protocol.md` (the `Source` family + `SourceKind` / `Confidence` enums) · > `winapp-devtools-read.md` (the guaranteed floor this annotates) · `winapp-devtools-hot-reload.md` @@ -147,6 +151,26 @@ prohibited; the census is a pre-build funding gate; persist (W5) is confidence-g anything that *depends* on provenance. 4. **Persist integration.** Expose the confidence W5 needs; enforce the persist threshold. +### Implementation status + +The **analysis layer** for phases 1–3 has landed as pure `net10.0` (CI-runnable, no desktop) under +`src/winapp-devtools/`: + +- **Grade (phase 1).** `SourceProvenanceGrader` implements the §4 honesty model; fixture unit tests + cover every §4 case including the two **false-confident-prohibition** cases. The grader never emits + `exact` unless the origin is authored markup **with** a resolved line. +- **Census analysis + Gate 1 (phases 2–3, analysis half).** `CensusTsvReader` → `CensusAggregator` + (counts by `SourceKind`) → `Gate1Evaluator` (§5 kill-criteria) → `CensusReport` (md + json). A + console analyzer (`analyze `) and a scrubbed orchestration harness (`census/Run-Census.ps1`) + drive it. Published rates from the committed **reference corpus** live in `census/results/`; a + standing Gate-1 MSTest check + the `devtools-provenance.yml` workflow enforce **0 false-confident** + on every run. + +**Deferred (heavy gate / needs other workstreams):** live `Source.resolve`/`census` commands wired +into the running-app daemon; **fresh** collection (injecting the read component; packaged/trimmed +configs; a real-app corpus per **Q-CENSUS-CORPUS**) — needs an interactive desktop; W5 persist +integration (phase 4). + ## Appendix — where W4 sits ```mermaid diff --git a/src/winapp-devtools/.gitignore b/src/winapp-devtools/.gitignore new file mode 100644 index 00000000..94fac1b1 --- /dev/null +++ b/src/winapp-devtools/.gitignore @@ -0,0 +1,2 @@ +# CI / local scratch output (published rates live in census/results, which IS committed) +artifacts/ diff --git a/src/winapp-devtools/Directory.Build.props b/src/winapp-devtools/Directory.Build.props new file mode 100644 index 00000000..b61ccf58 --- /dev/null +++ b/src/winapp-devtools/Directory.Build.props @@ -0,0 +1,27 @@ + + + + + + net10.0 + enable + enable + latest + true + Recommended + Copyright (C) Microsoft Corporation and Contributors + Microsoft Corporation + en-US + + + + true + + + diff --git a/src/winapp-devtools/README.md b/src/winapp-devtools/README.md new file mode 100644 index 00000000..b7f71882 --- /dev/null +++ b/src/winapp-devtools/README.md @@ -0,0 +1,24 @@ +# winapp devtools + +Home for the **DevTools** workstreams — the CLI-driven capabilities for inspecting and editing running +Windows app UIs. Each workstream has a spec under `specs/winapp-devtools-*.md`. + +## What's here + +| Area | Workstream | Status | +|---|---|---| +| `provenance/` + `census/` | **W4 — source mapping / provenance** ("which line of source produced this live element?") | analysis layer landed (pure `net10.0`, CI-runnable) | + +See `provenance/` for the confidence-graded source-mapping logic and `census/README.md` for the Gate-1 +resolution census. Everything here is pure `net10.0` (no WinUI / no `-windows` TFM) so it builds and +tests on a hosted runner without a desktop; the live-app collection half is a documented heavy gate. + +## Build & test + +```powershell +dotnet build src/winapp-devtools/devtools.slnx -c Release +dotnet test src/winapp-devtools/devtools.slnx +``` + +The `devtools-provenance.yml` workflow builds Release, runs the unit tests + the standing Gate-1 check, +re-derives the published census rates, and enforces the public-repo scrub (`scripts/scrub-scan.ps1`). diff --git a/src/winapp-devtools/census/README.md b/src/winapp-devtools/census/README.md new file mode 100644 index 00000000..acb82301 --- /dev/null +++ b/src/winapp-devtools/census/README.md @@ -0,0 +1,70 @@ +# Source-resolution census (Gate 1) + +The **census** measures how often source mapping *actually* resolves a live element to its authored +source across build configs — the cheapest way to falsify the provenance plan **before** anything is +funded on top of it. See `specs/winapp-devtools-provenance.md` (§5) for the kill-criteria. + +## Two halves: collect vs. analyze + +The census is deliberately split so the measurement half runs anywhere: + +| Half | What it does | Where it runs | +|---|---|---| +| **Collect** | Launch a target app in a given config, enumerate its live element tree, and write one TSV row per element (`handle, type, name, file, line, col`). | **Heavy gate** — needs an interactive desktop and the running-app read component (owned by the "reading the UI" workstream; not in this repo yet). | +| **Analyze** | Grade every row (`SourceKind` + `Confidence` + `ReasonCode`), aggregate by `SourceKind`, apply the Gate-1 kill-criteria, and emit the report + verdict. | **Pure `net10.0`** — hosted CI, no desktop. This is the single source of truth for grading and the verdict. | + +Only **analyze** is exercised on CI. It runs over a committed **reference corpus** of scrub-clean TSVs +collected from the proof-of-concept, so we publish real rates without a desktop. + +## Run the analysis (no desktop required) + +```powershell +# Grade + aggregate + Gate-1 verdict over a directory of census TSVs, writing md + json: +dotnet run --project ../provenance/WinApp.DevTools.Provenance.Census/WinApp.DevTools.Provenance.Census.csproj -- ` + analyze ../provenance/WinApp.DevTools.Provenance.Tests/Fixtures/census --out results + +# Exit codes: 0 = GO, 2 = KILL. With --strict, CONDITIONAL/INCONCLUSIVE are non-zero (3) too. +``` + +`results/census-latest.md` / `.json` are the committed baseline (regenerated by CI). The +orchestration harness `Run-Census.ps1 -AnalyzeOnly` wraps the same call. + +## Collect fresh data (heavy gate) + +`Run-Census.ps1` also carries the config matrix (Debug / Release / packaged / trimmed) and a **gated +`-Collector` seam**. Fresh collection is a documented heavy-gate step: it needs an interactive desktop +and the read component to enumerate a running app. Point the harness at that collector when it lands: + +```powershell +./Run-Census.ps1 -Collector -Configs Debug,Release +``` + +Until then, collection is out of scope for CI and the reference corpus stands in for the local run. + +## Gate-1 kill-criteria (spec §5) + +| Metric | Floor / rule | +|---|---| +| source-backed elements resolved in **Release** | **≥ 70%** | +| templated/generated resolved to template in Release | **≥ 40%** | +| **false-confident** (`exact`/`high` that was wrong) | **0% — any hit is an automatic KILL** | + +The false-confident audit is computed **independently of the grader** (it re-checks each confident row +against whether the file is authored markup), so a grader regression that starts over-trusting +framework/template/runtime rows is caught rather than hidden. This runs as a standing MSTest check and +in the `devtools-provenance.yml` workflow on every change. + +## Reference corpus baseline + +From the committed corpus, the non-stripping Release-family config resolves **100%** of source-backed +elements, maps **58.3%** of templated/generated elements to their template/style, with **0** +false-confident → **GO** (Debug identical; the line-info-stripped config drops authored+line to 0% as +expected, which is why it is diagnostic-only and never the Gate-1 arbiter). + +## Open question — Q-CENSUS-CORPUS + +The committed TSVs are a **single-app** reference corpus — enough to exercise the analysis and lock the +baseline, **not** a representative measurement of the ecosystem. What real apps (number + mix: +first-party, community, templated-heavy, `x:Bind`-heavy, packaged, trimmed) should constitute the +standing corpus is **open** and tracked as `Q-CENSUS-CORPUS` in the spec. Producing those numbers is +part of the heavy-gate collection follow-up. diff --git a/src/winapp-devtools/census/Run-Census.ps1 b/src/winapp-devtools/census/Run-Census.ps1 new file mode 100644 index 00000000..6db4cebf --- /dev/null +++ b/src/winapp-devtools/census/Run-Census.ps1 @@ -0,0 +1,124 @@ +<# +.SYNOPSIS + Source-resolution census (Gate 1) harness. Orchestrates the census across a build-config matrix and + hands the collected per-element data to the tested analysis layer, which grades every element, + aggregates by SourceKind, and returns a GO / CONDITIONAL / KILL / INCONCLUSIVE verdict. + +.DESCRIPTION + Productization deliberately splits "collect" from "analyze": + + * ANALYZE (this harness drives it; pure, CI-runnable) — the winapp-provenance-census tool reads a + directory of census TSVs (handle, type, name, file, line, col), applies the source-provenance + grader (spec section 4) and the Gate-1 kill-criteria (spec section 5), and writes + results/census-latest.md + results/census-latest.json. + + * COLLECT (heavy gate; NOT in this repo) — producing a fresh TSV means launching a real app and + reading its live UI element tree with the required runtime component. That collector is owned by + the "reading the UI" workstream, needs an interactive desktop, and is supplied to this harness + through the -Collector seam. Until it lands, run the harness in -AnalyzeOnly mode over an + existing corpus of TSVs (e.g. the committed reference corpus under results/). + + This keeps the honesty model and the verdict in one tested place (the analyzer) instead of a script. + +.PARAMETER Pages + Fixture page labels that make up one census sweep (used only when collecting). + +.PARAMETER Configs + Build-config labels to sweep. The analyzer judges Gate-1 on the non-stripping Release config; + 'release-nolineinfo' is the diagnostic line-info-stripped probe (never the arbiter). 'packaged' and + 'trimmed' are defined for the full matrix but need desktop/packaged collection. + +.PARAMETER TsvDir + Directory the census TSVs are read from (defaults to ResultsDir). + +.PARAMETER ResultsDir + Directory the published report (census-latest.md/json) is written to. + +.PARAMETER Collector + Heavy-gate seam: a script block invoked as & $Collector $configLabel $page $outTsv to collect one + TSV from a running app via the required runtime component. Omit to run analyze-only. + +.PARAMETER FixtureProject + Optional path to an app project to build per config before collecting (owned by the reading-the-UI + workstream; not required for analyze-only runs). + +.PARAMETER AnalyzeOnly + Skip collection entirely and (re)analyze the TSVs already in TsvDir. This is the CI / no-desktop path. + +.EXAMPLE + # No-desktop: re-analyze the committed reference corpus and refresh the published rates. + pwsh src/winapp-devtools/census/Run-Census.ps1 -AnalyzeOnly ` + -TsvDir src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Fixtures/census + +.EXAMPLE + # Heavy gate (desktop): collect fresh TSVs with an operator-supplied collector, then analyze. + pwsh src/winapp-devtools/census/Run-Census.ps1 -Collector $myCollector -FixtureProject path/to/app +#> +[CmdletBinding()] +param( + [string[]]$Pages = @('SmokePage', 'Repeater', 'Items', 'UcHost', 'XBindFn'), + [string[]]$Configs = @('debug', 'release', 'release-nolineinfo'), + [string]$TsvDir, + [string]$ResultsDir, + [scriptblock]$Collector, + [string]$FixtureProject, + [switch]$AnalyzeOnly +) + +$ErrorActionPreference = 'Stop' +$root = $PSScriptRoot +$ResultsDir = if ($ResultsDir) { $ResultsDir } else { Join-Path $root 'results' } +$TsvDir = if ($TsvDir) { $TsvDir } else { $ResultsDir } +$analyzerProj = Join-Path $root '..\provenance\WinApp.DevTools.Provenance.Census\WinApp.DevTools.Provenance.Census.csproj' + +New-Item -ItemType Directory -Force $ResultsDir | Out-Null + +# Build-config matrix. release-nolineinfo forces XAML line-info off (DisableXbfLineInfo is a public, +# supported switch) so we can measure the worst-case "line-info stripped" behaviour. +$configMap = @{ + 'debug' = @{ Configuration = 'Debug'; Props = @() } + 'release' = @{ Configuration = 'Release'; Props = @() } + 'release-nolineinfo' = @{ Configuration = 'Release'; Props = @('-p:DisableXbfLineInfo=true') } + 'packaged' = @{ Configuration = 'Release'; Props = @() } + 'trimmed' = @{ Configuration = 'Release'; Props = @('-p:PublishTrimmed=true') } +} + +function Build-Fixture([string]$label) { + if (-not $FixtureProject) { return } + $c = $configMap[$label] + if (-not $c) { throw "unknown config label '$label'" } + Write-Host "==> building fixture [$label] ($($c.Configuration)) $($c.Props -join ' ')" -ForegroundColor Cyan + $buildArgs = @('build', $FixtureProject, '-c', $c.Configuration, '--nologo') + $c.Props + & dotnet @buildArgs 2>&1 | Select-Object -Last 3 | ForEach-Object { Write-Host " $_" -ForegroundColor DarkGray } + if ($LASTEXITCODE -ne 0) { throw "fixture build failed for $label" } +} + +# ---------------- collect (heavy gate; only when a collector is supplied) ---------------- +if (-not $AnalyzeOnly -and $Collector) { + foreach ($label in $Configs) { + Build-Fixture $label + foreach ($page in $Pages) { + $outTsv = Join-Path $TsvDir "$label-$page.tsv" + Write-Host "==> collecting [$label/$page] -> $(Split-Path $outTsv -Leaf)" -ForegroundColor Cyan + & $Collector $label $page $outTsv + if ($LASTEXITCODE -ne 0) { Write-Host " collector failed for $label/$page" -ForegroundColor Red } + } + } +} +elseif (-not $AnalyzeOnly) { + Write-Host "==> no -Collector supplied; running analyze-only over existing TSVs in $TsvDir" -ForegroundColor Yellow + Write-Host " (fresh collection is a heavy gate: it needs a desktop + the reading-the-UI collector)" -ForegroundColor DarkGray +} + +# ---------------- analyze (pure; delegates grading + verdict to the tested library) ---------------- +if (-not (Get-ChildItem -Path $TsvDir -Filter *.tsv -ErrorAction SilentlyContinue)) { + throw "no census TSVs found in $TsvDir - collect some (heavy gate) or point -TsvDir at a corpus (e.g. the reference corpus)." +} + +Write-Host "==> analyzing census TSVs in $TsvDir" -ForegroundColor Cyan +& dotnet run --project $analyzerProj -c Release -- analyze $TsvDir --out $ResultsDir +$verdictExit = $LASTEXITCODE + +Write-Host "" +Write-Host "report: $(Join-Path $ResultsDir 'census-latest.md')" -ForegroundColor Cyan +exit $verdictExit diff --git a/src/winapp-devtools/census/results/census-latest.json b/src/winapp-devtools/census/results/census-latest.json new file mode 100644 index 00000000..a73fb0b6 --- /dev/null +++ b/src/winapp-devtools/census/results/census-latest.json @@ -0,0 +1,95 @@ +{ + "generatedUtc": "2026-07-12T05:54:56.9085810+00:00", + "pages": [ + "Items", + "Repeater", + "SmokePage", + "UcHost", + "XBindFn" + ], + "gate1": { + "verdict": "Go", + "evaluatedConfig": "release", + "sourceBackedResolvedPct": 100, + "templatedToTemplatePct": 58.3, + "falseConfidentTotal": 0, + "thresholds": { + "sourceBackedFloorPct": 70, + "templatedFloorPct": 40 + }, + "reasons": [ + "GO: source-backed resolved 100% ≥ 70% and templated-to-template 58.3% ≥ 40% in 'release', 0 false-confident." + ] + }, + "configs": { + "debug": { + "total": 580, + "stripsLineInfo": false, + "releaseFamily": false, + "sourceKind": { + "source-backed": 160, + "template-generated": 29, + "style-generated": 216, + "binding-generated": 0, + "runtime-only": 175, + "resource-origin": 0, + "ambiguous": 0, + "unreachable": 0 + }, + "sourceBackedTotal": 160, + "sourceBackedResolved": 160, + "sourceBackedResolvedPct": 100, + "templatedResolved": 245, + "generatedTotal": 420, + "templatedToTemplatePct": 58.3, + "falseConfident": 0, + "falseConfidentPct": 0 + }, + "release": { + "total": 580, + "stripsLineInfo": false, + "releaseFamily": true, + "sourceKind": { + "source-backed": 160, + "template-generated": 29, + "style-generated": 216, + "binding-generated": 0, + "runtime-only": 175, + "resource-origin": 0, + "ambiguous": 0, + "unreachable": 0 + }, + "sourceBackedTotal": 160, + "sourceBackedResolved": 160, + "sourceBackedResolvedPct": 100, + "templatedResolved": 245, + "generatedTotal": 420, + "templatedToTemplatePct": 58.3, + "falseConfident": 0, + "falseConfidentPct": 0 + }, + "release-nolineinfo": { + "total": 580, + "stripsLineInfo": true, + "releaseFamily": true, + "sourceKind": { + "source-backed": 160, + "template-generated": 29, + "style-generated": 216, + "binding-generated": 0, + "runtime-only": 175, + "resource-origin": 0, + "ambiguous": 0, + "unreachable": 0 + }, + "sourceBackedTotal": 160, + "sourceBackedResolved": 0, + "sourceBackedResolvedPct": 0, + "templatedResolved": 245, + "generatedTotal": 420, + "templatedToTemplatePct": 58.3, + "falseConfident": 0, + "falseConfidentPct": 0 + } + } +} \ No newline at end of file diff --git a/src/winapp-devtools/census/results/census-latest.md b/src/winapp-devtools/census/results/census-latest.md new file mode 100644 index 00000000..e1ba2f5d --- /dev/null +++ b/src/winapp-devtools/census/results/census-latest.md @@ -0,0 +1,44 @@ +# Source-resolution census (Gate 1) + +_Generated 2026-07-12 05:54:56Z · pages: Items, Repeater, SmokePage, UcHost, XBindFn_ + +**Verdict: GO** — GO: source-backed resolved 100% ≥ 70% and templated-to-template 58.3% ≥ 40% in 'release', 0 false-confident. + +## Gate-1 metrics + +| Config | Total | Source-backed→line % | Templated→template % | False-confident % | +|---|--:|--:|--:|--:| +| debug | 580 | 100 | 58.3 | 0 | +| release | 580 | 100 | 58.3 | 0 | +| release-nolineinfo | 580 | 0 | 58.3 | 0 | + +## Elements by SourceKind + +| Config | Total | source-backed | template-generated | style-generated | binding-generated | runtime-only | resource-origin | ambiguous | unreachable | +|---|--:|--:|--:|--:|--:|--:|--:|--:|--:| +| debug | 580 | 160 | 29 | 216 | 0 | 175 | 0 | 0 | 0 | +| release | 580 | 160 | 29 | 216 | 0 | 175 | 0 | 0 | 0 | +| release-nolineinfo | 580 | 160 | 29 | 216 | 0 | 175 | 0 | 0 | 0 | + +Grades come from the source-provenance grader (spec §4): **source-backed** = the app's own authored page/UserControl markup (the only kind allowed an exact line); **template/style-generated** = mapped to a control-template or theme/style definition, never the page; **runtime-only** = no markup provenance. *Source-backed→line %* is the select-to-source floor; *Templated→template %* is the fraction of generated elements that still map to a template/style source; *False-confident %* must be 0. + +## Per page × config (raw) + +| Config | Page | OK | Elements | TSV | +|---|---|:--:|--:|---| +| debug | Items | ✅ | 247 | debug-Items.tsv | +| debug | Repeater | ✅ | 129 | debug-Repeater.tsv | +| debug | SmokePage | ✅ | 100 | debug-SmokePage.tsv | +| debug | UcHost | ✅ | 71 | debug-UcHost.tsv | +| debug | XBindFn | ✅ | 33 | debug-XBindFn.tsv | +| release | Items | ✅ | 247 | release-Items.tsv | +| release | Repeater | ✅ | 129 | release-Repeater.tsv | +| release | SmokePage | ✅ | 100 | release-SmokePage.tsv | +| release | UcHost | ✅ | 71 | release-UcHost.tsv | +| release | XBindFn | ✅ | 33 | release-XBindFn.tsv | +| release-nolineinfo | Items | ✅ | 247 | release-nolineinfo-Items.tsv | +| release-nolineinfo | Repeater | ✅ | 129 | release-nolineinfo-Repeater.tsv | +| release-nolineinfo | SmokePage | ✅ | 100 | release-nolineinfo-SmokePage.tsv | +| release-nolineinfo | UcHost | ✅ | 71 | release-nolineinfo-UcHost.tsv | +| release-nolineinfo | XBindFn | ✅ | 33 | release-nolineinfo-XBindFn.tsv | + diff --git a/src/winapp-devtools/devtools.slnx b/src/winapp-devtools/devtools.slnx new file mode 100644 index 00000000..3b5e1d6a --- /dev/null +++ b/src/winapp-devtools/devtools.slnx @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Census/Program.cs b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Census/Program.cs new file mode 100644 index 00000000..868c704b --- /dev/null +++ b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Census/Program.cs @@ -0,0 +1,169 @@ +using System.Globalization; +using WinApp.DevTools.Provenance; +using WinApp.DevTools.Provenance.Census; + +namespace WinApp.DevTools.Provenance.CensusCli; + +/// +/// Thin CLI over the provenance analysis library. It never touches a live app: it reads a directory +/// of already-collected census TSVs, grades + aggregates them, evaluates the Gate-1 criteria, and +/// writes the Markdown + JSON report. The exit code reflects the verdict so CI and the harness can +/// gate on it. +/// +internal static class Program +{ + private const int ExitUsage = 64; + private const int ExitKill = 2; + private const int ExitInconclusive = 3; + + private static int Main(string[] args) + { + if (args.Length == 0 || IsHelp(args[0])) + { + PrintUsage(Console.Out); + return args.Length == 0 ? ExitUsage : 0; + } + + if (!string.Equals(args[0], "analyze", StringComparison.OrdinalIgnoreCase)) + { + Console.Error.WriteLine($"Unknown command '{args[0]}'."); + PrintUsage(Console.Error); + return ExitUsage; + } + + try + { + return RunAnalyze(args[1..]); + } + catch (Exception ex) when (ex is DirectoryNotFoundException or FileNotFoundException or ArgumentException) + { + Console.Error.WriteLine($"error: {ex.Message}"); + return ExitUsage; + } + } + + private static int RunAnalyze(string[] args) + { + string? tsvDir = null; + string? outDir = null; + string? mdPath = null; + string? jsonPath = null; + bool quiet = false; + bool strict = false; + + for (int i = 0; i < args.Length; i++) + { + string arg = args[i]; + switch (arg) + { + case "--out": + outDir = RequireValue(args, ref i, arg); + break; + case "--md": + mdPath = RequireValue(args, ref i, arg); + break; + case "--json": + jsonPath = RequireValue(args, ref i, arg); + break; + case "--quiet": + quiet = true; + break; + case "--strict": + strict = true; + break; + default: + if (arg.StartsWith('-')) + { + throw new ArgumentException($"unknown option '{arg}'"); + } + + tsvDir ??= arg; + break; + } + } + + if (tsvDir is null) + { + throw new ArgumentException("missing argument"); + } + + IReadOnlyList files = CensusTsvReader.ReadDirectory(tsvDir); + if (files.Count == 0) + { + throw new ArgumentException($"no .tsv files found in '{tsvDir}'"); + } + + CensusResult census = new CensusAggregator().Aggregate(files); + Gate1Report gate = Gate1Evaluator.Evaluate(census); + + string markdown = CensusReport.ToMarkdown(census, gate); + string json = CensusReport.ToJson(census, gate); + + if (outDir is not null) + { + Directory.CreateDirectory(outDir); + mdPath ??= Path.Combine(outDir, "census-latest.md"); + jsonPath ??= Path.Combine(outDir, "census-latest.json"); + } + + if (mdPath is not null) + { + File.WriteAllText(mdPath, markdown); + } + + if (jsonPath is not null) + { + File.WriteAllText(jsonPath, json); + } + + if (!quiet) + { + Console.Out.Write(markdown); + } + + Console.Error.WriteLine( + $"verdict={gate.Verdict.ToString().ToUpperInvariant()} " + + $"config={gate.EvaluatedConfigLabel ?? "-"} " + + $"sourceBacked={gate.SourceBackedResolvedPct.ToString("0.#", CultureInfo.InvariantCulture)}% " + + $"templated={gate.TemplatedToTemplatePct.ToString("0.#", CultureInfo.InvariantCulture)}% " + + $"falseConfident={gate.FalseConfidentTotal}"); + + return gate.Verdict switch + { + Gate1Verdict.Kill => ExitKill, + Gate1Verdict.Inconclusive => strict ? ExitInconclusive : 0, + Gate1Verdict.Conditional => strict ? ExitInconclusive : 0, + _ => 0, + }; + } + + private static string RequireValue(string[] args, ref int i, string option) + { + if (i + 1 >= args.Length) + { + throw new ArgumentException($"option '{option}' requires a value"); + } + + return args[++i]; + } + + private static bool IsHelp(string arg) => + arg is "-h" or "--help" or "help" or "/?"; + + private static void PrintUsage(TextWriter writer) + { + writer.WriteLine("winapp-provenance-census — analyze source-resolution census TSVs (Gate 1)"); + writer.WriteLine(); + writer.WriteLine("Usage:"); + writer.WriteLine(" winapp-provenance-census analyze [options]"); + writer.WriteLine(); + writer.WriteLine("Options:"); + writer.WriteLine(" --out Write census-latest.md and census-latest.json into ."); + writer.WriteLine(" --md Write the Markdown report to ."); + writer.WriteLine(" --json Write the JSON report to ."); + writer.WriteLine(" --quiet Do not print the Markdown report to stdout."); + writer.WriteLine(" --strict Exit non-zero on CONDITIONAL/INCONCLUSIVE as well as KILL."); + writer.WriteLine(); + writer.WriteLine("Exit codes: 0 = GO/CONDITIONAL/INCONCLUSIVE (unless --strict), 2 = KILL, 3 = strict non-GO, 64 = usage."); + } +} diff --git a/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Census/WinApp.DevTools.Provenance.Census.csproj b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Census/WinApp.DevTools.Provenance.Census.csproj new file mode 100644 index 00000000..ea702c7a --- /dev/null +++ b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Census/WinApp.DevTools.Provenance.Census.csproj @@ -0,0 +1,14 @@ + + + + Exe + WinApp.DevTools.Provenance.Census + winapp-provenance-census + Thin CLI over the provenance library: analyzes a directory of source-resolution census TSVs and emits the aggregate report + Gate-1 verdict. Used by the collection harness and to (re)generate published rates. + + + + + + + diff --git a/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/CensusAggregatorTests.cs b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/CensusAggregatorTests.cs new file mode 100644 index 00000000..2c909c46 --- /dev/null +++ b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/CensusAggregatorTests.cs @@ -0,0 +1,108 @@ +using WinApp.DevTools.Provenance.Census; + +namespace WinApp.DevTools.Provenance.Tests; + +/// +/// Tests for : per- counting over the real +/// reference corpus, and the independent false-confident audit (which must catch a mislabelled +/// confident grade even when the grader itself is wrong). +/// +[TestClass] +public sealed class CensusAggregatorTests +{ + private static CensusResult AggregateCorpus() + { + IReadOnlyList files = CensusTsvReader.ReadDirectory(Fixtures.CensusDir); + return new CensusAggregator().Aggregate(files); + } + + [TestMethod] + public void Release_counts_by_source_kind_match_the_baseline() + { + ConfigCensus release = AggregateCorpus().ForLabel("release")!; + + Assert.AreEqual(580, release.Total); + Assert.AreEqual(160, release.Count(SourceKind.SourceBacked)); + Assert.AreEqual(29, release.Count(SourceKind.TemplateGenerated)); + Assert.AreEqual(216, release.Count(SourceKind.StyleGenerated)); + Assert.AreEqual(175, release.Count(SourceKind.RuntimeOnly)); + } + + [TestMethod] + public void Release_source_backed_fully_resolves_and_templated_is_58pct() + { + ConfigCensus release = AggregateCorpus().ForLabel("release")!; + + Assert.AreEqual(160, release.SourceBackedTotal); + Assert.AreEqual(160, release.SourceBackedResolved); + Assert.AreEqual(100d, release.SourceBackedResolvedPct, 0.01); + + Assert.AreEqual(245, release.TemplatedResolved); + Assert.AreEqual(420, release.GeneratedTotal); + Assert.AreEqual(58.3d, release.TemplatedToTemplatePct, 0.05); + + Assert.AreEqual(0, release.FalseConfident); + } + + [TestMethod] + public void ReleaseNoLineInfo_drops_source_backed_resolution_to_zero() + { + ConfigCensus stripped = AggregateCorpus().ForLabel("release-nolineinfo")!; + + Assert.AreEqual(160, stripped.SourceBackedTotal); + Assert.AreEqual(0, stripped.SourceBackedResolved); + Assert.AreEqual(0d, stripped.SourceBackedResolvedPct, 0.01); + Assert.AreEqual(0, stripped.FalseConfident, "no line still means no false confidence"); + } + + [TestMethod] + public void Every_config_has_zero_false_confident() + { + foreach (ConfigCensus c in AggregateCorpus().Configs) + { + Assert.AreEqual(0, c.FalseConfident, $"config '{c.Config.Label}' must have 0 false-confident"); + } + } + + [TestMethod] + public void Audit_catches_a_confident_grade_on_a_framework_row() + { + // A broken grader that stamps everything Exact must still be caught by the aggregator's + // independent audit, because the underlying rows are framework/runtime, not authored markup. + GradedSource brokenGrade = new() + { + SourceKind = SourceKind.SourceBacked, + Confidence = Confidence.Exact, + Uri = "ms-appx:///SmokePage.xaml", + Line = 1, + }; + + CensusAggregator aggregator = new(new StubGrader(brokenGrade)); + IReadOnlyList files = CensusTsvReader.ReadDirectory(Fixtures.CensusDir); + + CensusResult result = aggregator.Aggregate(files); + ConfigCensus release = result.ForLabel("release")!; + + // 245 framework + 175 runtime-only rows are not authored markup -> all false-confident. + Assert.AreEqual(420, release.FalseConfident); + Assert.IsTrue(release.FalseConfidentPct > 0); + } + + [TestMethod] + public void IsFalseConfident_predicate_is_independent_of_the_grade_kind() + { + GradedSource confident = new() { SourceKind = SourceKind.SourceBacked, Confidence = Confidence.Exact }; + GradedSource low = new() { SourceKind = SourceKind.TemplateGenerated, Confidence = Confidence.Low }; + + // Confident on authored markup: fine. + Assert.IsFalse(CensusAggregator.IsFalseConfident(Row("ms-appx:///Page.xaml"), confident)); + // Confident on a framework row: false-confident. + Assert.IsTrue(CensusAggregator.IsFalseConfident(Row("ms-appx:///Microsoft.UI.Xaml/Themes/generic.xaml"), confident)); + // Confident on an empty (runtime) row: false-confident. + Assert.IsTrue(CensusAggregator.IsFalseConfident(Row(""), confident)); + // Not confident: never false-confident regardless of origin. + Assert.IsFalse(CensusAggregator.IsFalseConfident(Row(""), low)); + } + + private static TapElement Row(string file) => new(1, "T", "", file, 0, 0); +} diff --git a/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/CensusReaderTests.cs b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/CensusReaderTests.cs new file mode 100644 index 00000000..8cd92f0f --- /dev/null +++ b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/CensusReaderTests.cs @@ -0,0 +1,63 @@ +using WinApp.DevTools.Provenance.Census; + +namespace WinApp.DevTools.Provenance.Tests; + +/// Tests for — config/page name splitting and row parsing. +[TestClass] +public sealed class CensusReaderTests +{ + [TestMethod] + [DataRow("release-nolineinfo-SmokePage", "release-nolineinfo", "SmokePage")] + [DataRow("release-SmokePage", "release", "SmokePage")] + [DataRow("debug-UcHost", "debug", "UcHost")] + [DataRow("packaged-Items", "packaged", "Items")] + [DataRow("trimmed-XBindFn", "trimmed", "XBindFn")] + public void SplitConfigAndPage_uses_longest_known_prefix(string stem, string expectedConfig, string expectedPage) + { + (CensusConfig config, string page) = CensusTsvReader.SplitConfigAndPage(stem); + + Assert.AreEqual(expectedConfig, config.Label); + Assert.AreEqual(expectedPage, page); + } + + [TestMethod] + public void SplitConfigAndPage_release_nolineinfo_is_not_mistaken_for_release() + { + (CensusConfig config, _) = CensusTsvReader.SplitConfigAndPage("release-nolineinfo-Items"); + + Assert.AreEqual("release-nolineinfo", config.Label); + Assert.IsTrue(config.StripsLineInfo, "the stripped probe must keep its strips-line-info flag"); + } + + [TestMethod] + public void SplitConfigAndPage_unknown_prefix_yields_neutral_config() + { + (CensusConfig config, string page) = CensusTsvReader.SplitConfigAndPage("custom-MyPage"); + + Assert.AreEqual("custom", config.Label); + Assert.AreEqual("MyPage", page); + Assert.IsFalse(config.IsReleaseFamily); + } + + [TestMethod] + public void ReadDirectory_reads_the_reference_corpus() + { + IReadOnlyList files = CensusTsvReader.ReadDirectory(Fixtures.CensusDir); + + Assert.AreEqual(Fixtures.ExpectedTsvCount, files.Count); + Assert.IsTrue(files.All(f => f.Elements.Count > 0), "every corpus TSV should have rows"); + } + + [TestMethod] + public void ReadFile_parses_rows_and_skips_the_header() + { + string path = Path.Combine(Fixtures.CensusDir, "debug-SmokePage.tsv"); + + CensusTsvFile file = CensusTsvReader.ReadFile(path); + + Assert.AreEqual("debug", file.Config.Label); + Assert.AreEqual("SmokePage", file.Page); + Assert.AreEqual(100, file.Elements.Count, "debug-SmokePage has 100 element rows (header excluded)"); + Assert.IsTrue(file.Elements.All(e => e.Type.Length > 0)); + } +} diff --git a/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Fixtures.cs b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Fixtures.cs new file mode 100644 index 00000000..fdeea5df --- /dev/null +++ b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Fixtures.cs @@ -0,0 +1,12 @@ +namespace WinApp.DevTools.Provenance.Tests; + +/// Locates the committed reference-corpus TSVs copied next to the test binaries. +internal static class Fixtures +{ + /// Absolute path to the census reference-corpus directory. + public static string CensusDir { get; } = + Path.Combine(AppContext.BaseDirectory, "Fixtures", "census"); + + /// The number of TSVs expected in the reference corpus. + public const int ExpectedTsvCount = 15; +} diff --git a/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Fixtures/census/debug-Items.tsv b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Fixtures/census/debug-Items.tsv new file mode 100644 index 00000000..269fab7b --- /dev/null +++ b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Fixtures/census/debug-Items.tsv @@ -0,0 +1,248 @@ +handle type name file line col +2401279070616 Microsoft.UI.Xaml.Controls.Border VerticalPanningThumb ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2539935550008 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 44 58 +2539935550440 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 44 58 +2539935550872 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 44 58 +2539935551736 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 44 58 +2539935553464 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 25 30 +2539935562248 Microsoft.UI.Xaml.Controls.Frame RootFrame ms-appx:///MainWindow.xaml 32 54 +2539936344368 Microsoft.UI.Xaml.Hosting.DesktopWindowXamlSource 0 0 +2539937466120 Microsoft.UI.Xaml.Controls.ScrollContentPresenter 0 0 +2539937467848 Microsoft.UI.Xaml.Controls.ScrollContentPresenter ScrollContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2539937468424 Microsoft.UI.Xaml.Controls.ScrollContentPresenter 0 0 +2539937479576 Microsoft.UI.Xaml.WindowChrome 0 0 +2540049816184 SmokeFixture.ItemsPage ms-appx:///ItemsPage.xaml 10 5 +2540050025096 Microsoft.UI.Xaml.Controls.Border 0 0 +2540050027912 Microsoft.UI.Xaml.Controls.Border 0 0 +2540050869224 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540050869832 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540050870440 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540050871088 Microsoft.UI.Xaml.Controls.TitleBar AppTitleBar ms-appx:///MainWindow.xaml 21 59 +2540050871656 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540050872264 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540050872872 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540050874088 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540050874696 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540050875304 Microsoft.UI.Xaml.WindowChrome 0 0 +2540050875912 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540050876520 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540050885352 Microsoft.UI.Xaml.Controls.ContentControl MwSlot ms-appx:///SecondWindow.xaml 36 13 +2540050889752 Microsoft.UI.Xaml.Controls.Grid ms-appx:///SecondWindow.xaml 12 24 +2540050890152 Microsoft.UI.Xaml.PopupRoot 0 0 +2540050932200 Microsoft.UI.Xaml.Internal.RootScrollViewer 0 0 +2540051032888 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton VerticalSmallDecrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540051035960 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton HorizontalSmallDecrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540051036472 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton HorizontalLargeIncrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540051038520 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton HorizontalLargeDecrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540051039032 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton VerticalLargeDecrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540051039544 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton VerticalLargeIncrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540051040056 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton VerticalSmallIncrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540051046712 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton HorizontalSmallIncrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540051080168 Microsoft.UI.Xaml.Controls.ItemsStackPanel ms-resource:///Files/Microsoft.UI.Xaml;component/themes/generic.xaml 0 0 +2540051887752 Microsoft.UI.Xaml.Controls.Grid ms-appx:///MainWindow.xaml 15 6 +2540051888152 Microsoft.UI.Xaml.PopupRoot 0 0 +2540052495968 Microsoft.UI.Xaml.Hosting.DesktopWindowXamlSource 0 0 +2540052544536 Microsoft.UI.Xaml.Controls.TextBlock ClickReadout ms-appx:///ItemsPage.xaml 35 13 +2540052546296 Microsoft.UI.Xaml.Controls.Border HorizontalPanningThumb ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540052551224 Microsoft.UI.Xaml.Controls.TextBlock HeaderText ms-appx:///ItemsPage.xaml 30 13 +2540053121896 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 49 29 +2540054536792 Microsoft.UI.Xaml.Controls.Primitives.Thumb HorizontalThumb ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540054537240 Microsoft.UI.Xaml.Controls.Primitives.Thumb VerticalThumb ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540054668792 Microsoft.UI.Xaml.Controls.Primitives.ScrollBar HorizontalScrollBar ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540054678072 Microsoft.UI.Xaml.Controls.Primitives.ScrollBar VerticalScrollBar ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540054766488 Microsoft.UI.Xaml.Controls.ContentPresenter ClientAreaPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/themeresources.xbf 0 0 +2540054766856 Microsoft.UI.Xaml.Controls.ContentPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/generic.xaml 0 0 +2540054770904 Microsoft.UI.Xaml.Controls.Image 0 0 +2540054812184 Microsoft.UI.Xaml.Controls.ContentControl 0 0 +2540054813384 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540054814584 Microsoft.UI.Xaml.Controls.ContentControl 0 0 +2540054816184 Microsoft.UI.Xaml.Controls.Grid PART_LayoutRoot ms-appx:///Microsoft.UI.Xaml/Themes/generic.xaml 0 0 +2540054817784 Microsoft.UI.Xaml.Controls.Grid 0 0 +2540054981824 Microsoft.UI.Xaml.Controls.ImageIcon 0 0 +2540055203912 Microsoft.UI.Xaml.Controls.ItemsPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/generic.xaml 0 0 +2540055206184 Microsoft.UI.Xaml.Controls.ScrollViewer ScrollViewer ms-resource:///Files/Microsoft.UI.Xaml;component/themes/generic.xaml 0 0 +2540055301656 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540055302856 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540055308200 Microsoft.UI.Xaml.Controls.ContentPresenter ClientAreaPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/themeresources.xbf 0 0 +2540055312248 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540056889992 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +2540056890696 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +2540056891400 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +2540056892104 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +2540056895624 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +2540056903368 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +2540056904072 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +2540056904776 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +2540056905480 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +2540056997912 Microsoft.UI.Xaml.Controls.ListView ItemList ms-appx:///ItemsPage.xaml 40 13 +2540057189656 Microsoft.UI.Xaml.Internal.RootScrollViewer 0 0 +2540057192616 Microsoft.UI.Xaml.Controls.TextBlock PART_TitleText ms-appx:///Microsoft.UI.Xaml/Themes/generic.xaml 0 0 +2540057193320 Microsoft.UI.Xaml.Controls.Border Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540057194024 Microsoft.UI.Xaml.Controls.Viewbox PART_Icon ms-appx:///Microsoft.UI.Xaml/Themes/generic.xaml 0 0 +2540057194728 Microsoft.UI.Xaml.Controls.TextBlock SecondWindowLabel ms-appx:///SecondWindow.xaml 24 13 +2540057195432 Microsoft.UI.Xaml.Controls.Border ms-resource:///Files/Microsoft.UI.Xaml;component/themes/generic.xaml 0 0 +2540057196136 Microsoft.UI.Xaml.Controls.Border ScrollBarSeparator ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540057199304 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 45 63 +2540057200008 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2540125293960 Microsoft.UI.Xaml.Shapes.Rectangle HorizontalTrackRect ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540125296536 Microsoft.UI.Xaml.Controls.ContentPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/generic.xaml 0 0 +2540125296904 Microsoft.UI.Xaml.Shapes.Rectangle VerticalTrackRect ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540125297640 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540125323096 Microsoft.UI.Xaml.Controls.Grid VerticalRoot ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540125323896 Microsoft.UI.Xaml.Controls.Grid Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540125326296 Microsoft.UI.Xaml.Controls.Grid HorizontalRoot ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540125327496 Microsoft.UI.Xaml.Controls.Grid VerticalPanningRoot ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540125330296 Microsoft.UI.Xaml.Controls.Grid HorizontalPanningRoot ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540125462600 Microsoft.UI.Xaml.Controls.Grid Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540125528936 Microsoft.UI.Xaml.Controls.Grid Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540125530136 Microsoft.UI.Xaml.Controls.Grid Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540125534936 Microsoft.UI.Xaml.Controls.Grid Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540125586248 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 49 29 +2540125586728 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 49 29 +2540125587208 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 49 29 +2540125587688 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 49 29 +2540125588648 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 49 29 +2540125589128 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 49 29 +2540125589608 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 49 29 +2540125592008 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 49 29 +2540125592488 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 49 29 +2540125592968 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 49 29 +2540125673480 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 45 63 +2540125673832 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2540125674184 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2540125674536 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 45 63 +2540125674888 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2540125675240 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 45 63 +2540125675592 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2540125675944 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2540125676296 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 45 63 +2540125676648 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2540125677000 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 45 63 +2540125677352 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2540125677704 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 45 63 +2540125678056 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2540125678408 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 45 63 +2540125678760 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 45 63 +2540125706312 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540125708520 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540125710360 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540125712568 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540125712936 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540125714408 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540125715144 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540125718088 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540125719192 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540125721032 Microsoft.UI.Xaml.Shapes.Rectangle ThumbVisual ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540126122248 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 44 58 +2540126122680 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 44 58 +2540126123544 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 44 58 +2540126123976 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 44 58 +2540126124408 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 44 58 +2540126124840 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 44 58 +2540126125272 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 44 58 +2540126125704 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 44 58 +2540126126136 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 44 58 +2540126126568 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 44 58 +2540126127000 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 44 58 +2540126127432 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 44 58 +2540126127864 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 44 58 +2540126128296 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 44 58 +2540126128728 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 44 58 +2540126129160 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 44 58 +2540126129592 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 44 58 +2540127752936 Microsoft.UI.Xaml.Controls.Border 0 0 +2540127753640 Microsoft.UI.Xaml.Controls.Border 0 0 +2540128445752 Microsoft.UI.Xaml.Controls.Border 0 0 +2540128452792 Microsoft.UI.Xaml.Controls.Border 0 0 +2540128453496 Microsoft.UI.Xaml.Controls.Border 0 0 +2540128454552 Microsoft.UI.Xaml.Controls.Border 0 0 +2540129081160 Microsoft.UI.Xaml.Controls.FontIcon Arrow ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540129093672 Microsoft.UI.Xaml.Controls.FontIcon Arrow ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540129913336 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 45 63 +2540129915096 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 45 63 +2540129915800 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 45 63 +2540129916152 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 45 63 +2540129923192 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2540129923896 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2540129927064 Microsoft.UI.Xaml.Controls.Border 0 0 +2540132008920 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +2540132011736 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +2540132012440 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +2540132014552 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +2540132015960 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +2540132017368 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +2540132018072 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +2540132020184 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +2540132102840 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540132103448 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540132104056 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540132104664 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540132105272 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540132105880 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540132108920 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540132109528 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540132110136 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540132112568 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540132116824 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540132606328 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 49 29 +2540132606808 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 49 29 +2540132607768 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 49 29 +2540132608248 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 49 29 +2540132608728 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 49 29 +2540132609208 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 49 29 +2540132609688 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 49 29 +2540132611608 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 49 29 +2540132612088 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 49 29 +2540132613528 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 49 29 +2540133024104 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540133024472 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540133026312 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540133026680 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540133027784 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540133028152 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540133029992 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540133031832 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540133033304 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540133039560 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540133198072 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2540133199128 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 45 63 +2540133200888 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2540133201944 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2540133202648 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 45 63 +2540133205816 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 45 63 +2540133206872 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2540133208280 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2540133209336 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 45 63 +2540133210392 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2540133210744 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 45 63 +2540133212152 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 45 63 +2540135003032 Microsoft.UI.Xaml.Controls.Grid 0 0 +2540135005832 Microsoft.UI.Xaml.Controls.Grid 0 0 +2540135009432 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2540136522824 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +2540136523528 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +2540136527048 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +2540136527752 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +2540138222104 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2540138224216 Microsoft.UI.Xaml.Controls.Border 0 0 +2540138225624 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2540138227736 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2540138228440 Microsoft.UI.Xaml.Controls.Border 0 0 +2540138229144 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 45 63 +2540138233016 Microsoft.UI.Xaml.Controls.Border 0 0 +2540138233368 Microsoft.UI.Xaml.Controls.Border 0 0 +2540138233720 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 45 63 +2540138234776 Microsoft.UI.Xaml.Controls.Border 0 0 +2540138235480 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2540138236184 Microsoft.UI.Xaml.Controls.Border 0 0 +2540139035592 Microsoft.UI.Xaml.Controls.Border 0 0 +2540139037352 Microsoft.UI.Xaml.Controls.Border 0 0 +2540139037704 Microsoft.UI.Xaml.Controls.Border 0 0 +2540139038056 Microsoft.UI.Xaml.Controls.Border 0 0 +2540139039464 Microsoft.UI.Xaml.Controls.Border 0 0 +2540139041576 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2540139045096 Microsoft.UI.Xaml.Controls.Border 0 0 +2540139048264 Microsoft.UI.Xaml.Controls.Border 0 0 +2540139048616 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2540139048968 Microsoft.UI.Xaml.Controls.Border 0 0 +2540139049320 Microsoft.UI.Xaml.Controls.Border 0 0 diff --git a/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Fixtures/census/debug-Repeater.tsv b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Fixtures/census/debug-Repeater.tsv new file mode 100644 index 00000000..dbd8e15d --- /dev/null +++ b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Fixtures/census/debug-Repeater.tsv @@ -0,0 +1,130 @@ +handle type name file line col +1745965448104 Microsoft.UI.Xaml.Controls.Border 0 0 +1745965999272 Microsoft.UI.Xaml.PopupRoot 0 0 +1745965999672 Microsoft.UI.Xaml.Controls.ContentControl MwSlot ms-appx:///SecondWindow.xaml 36 13 +1745966000472 Microsoft.UI.Xaml.Controls.Grid ms-appx:///SecondWindow.xaml 12 24 +1745966516984 Microsoft.UI.Xaml.Internal.RootScrollViewer 0 0 +1745966520536 Microsoft.UI.Xaml.Controls.ScrollContentPresenter 0 0 +1745966564800 Microsoft.UI.Xaml.Controls.TitleBar AppTitleBar ms-appx:///MainWindow.xaml 21 59 +1745966576952 Microsoft.UI.Xaml.Controls.ScrollViewer ItemScroller ms-appx:///RepeaterPage.xaml 48 13 +1745966696136 Microsoft.UI.Xaml.Controls.Frame RootFrame ms-appx:///MainWindow.xaml 32 54 +1745967254648 SmokeFixture.RepeaterPage ms-appx:///RepeaterPage.xaml 10 5 +1745967349720 Microsoft.UI.Xaml.Controls.Grid ms-appx:///MainWindow.xaml 15 6 +1745967350520 Microsoft.UI.Xaml.PopupRoot 0 0 +1745967760936 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +1745967764104 Microsoft.UI.Xaml.Controls.TextBlock ClickReadout ms-appx:///RepeaterPage.xaml 43 13 +1745967767624 Microsoft.UI.Xaml.Controls.TextBlock HeaderText ms-appx:///RepeaterPage.xaml 38 13 +1745968739704 Microsoft.UI.Xaml.Controls.ScrollContentPresenter ScrollContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1745970740232 Microsoft.UI.Xaml.Controls.Border ScrollBarSeparator ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1745970740936 Microsoft.UI.Xaml.Controls.Border HorizontalPanningThumb ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1745970741288 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///RepeaterPage.xaml 56 67 +1745970741640 Microsoft.UI.Xaml.Controls.Viewbox PART_Icon ms-appx:///Microsoft.UI.Xaml/Themes/generic.xaml 0 0 +1745970741992 Microsoft.UI.Xaml.Controls.TextBlock SecondWindowLabel ms-appx:///SecondWindow.xaml 24 13 +1745970743752 Microsoft.UI.Xaml.Controls.Border Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1745970745160 Microsoft.UI.Xaml.Controls.TextBlock PART_TitleText ms-appx:///Microsoft.UI.Xaml/Themes/generic.xaml 0 0 +1745970745512 Microsoft.UI.Xaml.Controls.Border VerticalPanningThumb ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1745970746568 Microsoft.UI.Xaml.Controls.Border 0 0 +1745970756808 Microsoft.UI.Xaml.Internal.RootScrollViewer 0 0 +1745970758296 Microsoft.UI.Xaml.Controls.ScrollContentPresenter 0 0 +1745971755384 Microsoft.UI.Xaml.Controls.Primitives.ScrollBar HorizontalScrollBar ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1745971761880 Microsoft.UI.Xaml.Controls.Primitives.ScrollBar VerticalScrollBar ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1745972249208 Microsoft.UI.Xaml.Controls.Primitives.Thumb VerticalThumb ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1745972251896 Microsoft.UI.Xaml.Controls.Primitives.Thumb HorizontalThumb ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1745972264000 Microsoft.UI.Xaml.Hosting.DesktopWindowXamlSource 0 0 +1745972316424 Microsoft.UI.Xaml.Controls.ItemsRepeater ItemRepeater ms-appx:///RepeaterPage.xaml 51 17 +1745972318168 Microsoft.UI.Xaml.WindowChrome 0 0 +1745972412472 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///RepeaterPage.xaml 55 62 +1745972412904 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///RepeaterPage.xaml 55 62 +1745972414200 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///RepeaterPage.xaml 55 62 +1745972414632 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///RepeaterPage.xaml 55 62 +1745972415064 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///RepeaterPage.xaml 55 62 +1745972415496 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///RepeaterPage.xaml 55 62 +1745972415928 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///RepeaterPage.xaml 33 30 +1745972535272 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1745972536072 Microsoft.UI.Xaml.Controls.Grid Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1745972536472 Microsoft.UI.Xaml.Controls.Grid Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1745972539672 Microsoft.UI.Xaml.Controls.Grid Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1745972541672 Microsoft.UI.Xaml.Controls.Grid Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1746024766264 Microsoft.UI.Xaml.Controls.Button ms-appx:///RepeaterPage.xaml 60 33 +1746024767224 Microsoft.UI.Xaml.Controls.Button ms-appx:///RepeaterPage.xaml 60 33 +1746024768184 Microsoft.UI.Xaml.Controls.Button ms-appx:///RepeaterPage.xaml 60 33 +1746024769624 Microsoft.UI.Xaml.Controls.Button ms-appx:///RepeaterPage.xaml 60 33 +1746024770104 Microsoft.UI.Xaml.Controls.Button ms-appx:///RepeaterPage.xaml 60 33 +1746024771544 Microsoft.UI.Xaml.Controls.Button ms-appx:///RepeaterPage.xaml 60 33 +1746024800152 Microsoft.UI.Xaml.Controls.ContentPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/generic.xaml 0 0 +1746024800888 Microsoft.UI.Xaml.Controls.Image 0 0 +1746024804568 Microsoft.UI.Xaml.Controls.ContentPresenter ClientAreaPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/themeresources.xbf 0 0 +1746024908744 Microsoft.UI.Xaml.Controls.Grid 0 0 +1746024911144 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1746024911944 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1746024913144 Microsoft.UI.Xaml.Controls.Grid PART_LayoutRoot ms-appx:///Microsoft.UI.Xaml/Themes/generic.xaml 0 0 +1746024960704 Microsoft.UI.Xaml.Controls.ImageIcon 0 0 +1746025329608 Microsoft.UI.Xaml.Shapes.Rectangle HorizontalTrackRect ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1746025331080 Microsoft.UI.Xaml.Shapes.Rectangle VerticalTrackRect ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1746025353224 Microsoft.UI.Xaml.Controls.Grid VerticalRoot ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1746025353624 Microsoft.UI.Xaml.Controls.Grid HorizontalRoot ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1746025355624 Microsoft.UI.Xaml.Controls.Grid HorizontalPanningRoot ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1746025356424 Microsoft.UI.Xaml.Controls.Grid Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1746025356824 Microsoft.UI.Xaml.Controls.Grid VerticalPanningRoot ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1746025369464 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton VerticalSmallIncrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1746025370488 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton HorizontalLargeIncrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1746025371000 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton VerticalSmallDecrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1746025373560 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton VerticalLargeDecrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1746025374584 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton VerticalLargeIncrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1746025378168 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton HorizontalLargeDecrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1746025378680 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton HorizontalSmallIncrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1746025383288 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton HorizontalSmallDecrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1746025567464 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1746025572616 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1746025573352 Microsoft.UI.Xaml.Controls.ContentPresenter ClientAreaPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/themeresources.xbf 0 0 +1746025575192 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1746025575928 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1746025577032 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1746025579976 Microsoft.UI.Xaml.Controls.ContentPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/generic.xaml 0 0 +1746025580712 Microsoft.UI.Xaml.Shapes.Rectangle ThumbVisual ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1746025581448 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1746025582552 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1746025582920 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1746025648120 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +1746025649176 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +1746025649528 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///RepeaterPage.xaml 56 67 +1746025649880 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +1746025650232 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///RepeaterPage.xaml 56 67 +1746025650584 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +1746025653752 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///RepeaterPage.xaml 56 67 +1746025654104 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +1746025654456 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///RepeaterPage.xaml 56 67 +1746025654808 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///RepeaterPage.xaml 56 67 +1746026186312 Microsoft.UI.Xaml.Controls.Button ms-appx:///RepeaterPage.xaml 60 33 +1746026187752 Microsoft.UI.Xaml.Controls.Button ms-appx:///RepeaterPage.xaml 60 33 +1746026189672 Microsoft.UI.Xaml.Controls.Button ms-appx:///RepeaterPage.xaml 60 33 +1746026190632 Microsoft.UI.Xaml.Controls.Button ms-appx:///RepeaterPage.xaml 60 33 +1746026191112 Microsoft.UI.Xaml.Controls.Button ms-appx:///RepeaterPage.xaml 60 33 +1746026225736 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +1746026233128 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///RepeaterPage.xaml 56 67 +1746027607192 Microsoft.UI.Xaml.Controls.Border 0 0 +1746027610712 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +1746027611064 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +1746028160376 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///RepeaterPage.xaml 55 62 +1746028160808 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///RepeaterPage.xaml 55 62 +1746028161240 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///RepeaterPage.xaml 55 62 +1746028161672 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///RepeaterPage.xaml 55 62 +1746028162536 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///RepeaterPage.xaml 55 62 +1746028636088 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +1746028637496 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///RepeaterPage.xaml 56 67 +1746028642776 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///RepeaterPage.xaml 56 67 +1746028648408 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///RepeaterPage.xaml 56 67 +1746028649816 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///RepeaterPage.xaml 56 67 +1746028650520 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +1746028650872 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +1746028651928 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +1746030981144 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1746030985192 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1746030993656 Microsoft.UI.Xaml.Controls.FontIcon Arrow ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1746030994024 Microsoft.UI.Xaml.Controls.FontIcon Arrow ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1746030994760 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1746034782440 Microsoft.UI.Xaml.Controls.Grid 0 0 +1746034790440 Microsoft.UI.Xaml.Controls.Grid 0 0 +1746034792840 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1885434995568 Microsoft.UI.Xaml.Hosting.DesktopWindowXamlSource 0 0 +1885436243800 Microsoft.UI.Xaml.WindowChrome 0 0 diff --git a/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Fixtures/census/debug-SmokePage.tsv b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Fixtures/census/debug-SmokePage.tsv new file mode 100644 index 00000000..4f287f9f --- /dev/null +++ b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Fixtures/census/debug-SmokePage.tsv @@ -0,0 +1,101 @@ +handle type name file line col +2203956998792 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2342571242200 Microsoft.UI.Xaml.Controls.Frame RootFrame ms-appx:///MainWindow.xaml 32 54 +2342614861984 Microsoft.UI.Xaml.Hosting.DesktopWindowXamlSource 0 0 +2342615191608 Microsoft.UI.Xaml.Controls.ContentControl MwSlot ms-appx:///SecondWindow.xaml 36 13 +2342615570952 Microsoft.UI.Xaml.WindowChrome 0 0 +2342617719928 SmokeFixture.SmokePage ms-appx:///SmokePage.xaml 10 5 +2342729142232 Microsoft.UI.Xaml.Controls.Border Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2342729144344 Microsoft.UI.Xaml.Controls.Border 0 0 +2342729463608 Microsoft.UI.Xaml.WindowChrome 0 0 +2342729466080 Microsoft.UI.Xaml.Controls.TitleBar AppTitleBar ms-appx:///MainWindow.xaml 21 59 +2342730213848 Microsoft.UI.Xaml.PopupRoot 0 0 +2342730219048 Microsoft.UI.Xaml.PopupRoot 0 0 +2342730331592 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton HorizontalSmallIncrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2342730332616 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton VerticalSmallDecrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2342730333128 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton VerticalLargeDecrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2342730334664 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton VerticalLargeIncrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2342730335688 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton HorizontalLargeDecrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2342730336200 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton VerticalSmallIncrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2342730336712 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton HorizontalSmallDecrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2342730342856 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton HorizontalLargeIncrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2342730524536 Microsoft.UI.Xaml.Internal.RootScrollViewer 0 0 +2342730526024 Microsoft.UI.Xaml.Controls.ScrollContentPresenter 0 0 +2342731166328 Microsoft.UI.Xaml.Controls.Grid ms-appx:///SmokePage.xaml 14 28 +2342731169528 Microsoft.UI.Xaml.Controls.Grid ms-appx:///MainWindow.xaml 15 6 +2342731567560 Microsoft.UI.Xaml.Controls.Button GoButton ms-appx:///SmokePage.xaml 64 17 +2342731578920 Microsoft.UI.Xaml.Controls.Border AttachedProbe ms-appx:///SmokePage.xaml 48 17 +2342731579624 Microsoft.UI.Xaml.Controls.TextBlock BoundText ms-appx:///SmokePage.xaml 38 17 +2342731579976 Microsoft.UI.Xaml.Controls.Border BorderElement ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2342731582792 Microsoft.UI.Xaml.Controls.TextBlock PlaceholderTextContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2342731585608 Microsoft.UI.Xaml.Controls.TextBlock Title ms-appx:///SmokePage.xaml 31 17 +2342734628952 Microsoft.UI.Xaml.Controls.Primitives.Thumb HorizontalThumb ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2342734629400 Microsoft.UI.Xaml.Controls.Primitives.Thumb VerticalThumb ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2342736094960 Microsoft.UI.Xaml.Hosting.DesktopWindowXamlSource 0 0 +2342736157544 Microsoft.UI.Xaml.Controls.ScrollViewer Scroller ms-appx:///SmokePage.xaml 13 56 +2342736228200 Microsoft.UI.Xaml.Controls.Primitives.ScrollBar VerticalScrollBar ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2342736230984 Microsoft.UI.Xaml.Controls.Primitives.ScrollBar HorizontalScrollBar ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2342736238408 Microsoft.UI.Xaml.Controls.Primitives.ScrollBar HorizontalScrollBar ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2342736241192 Microsoft.UI.Xaml.Controls.Primitives.ScrollBar VerticalScrollBar ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2342736284312 Microsoft.UI.Xaml.Controls.TextBox ScratchInput ms-appx:///SmokePage.xaml 56 17 +2342736309384 Microsoft.UI.Xaml.Controls.ItemsRepeater Repeater ms-appx:///SmokePage.xaml 70 17 +2342736376904 Microsoft.UI.Xaml.Controls.Border Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2342736379368 Microsoft.UI.Xaml.Controls.TextBlock SecondWindowLabel ms-appx:///SecondWindow.xaml 24 13 +2342736380424 Microsoft.UI.Xaml.Controls.TextBlock PART_TitleText ms-appx:///Microsoft.UI.Xaml/Themes/generic.xaml 0 0 +2342736380776 Microsoft.UI.Xaml.Controls.Border ScrollBarSeparator ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2342736381480 Microsoft.UI.Xaml.Controls.Viewbox PART_Icon ms-appx:///Microsoft.UI.Xaml/Themes/generic.xaml 0 0 +2342736382888 Microsoft.UI.Xaml.Controls.Border 0 0 +2342736384296 Microsoft.UI.Xaml.Controls.Border HorizontalPanningThumb ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2342736384648 Microsoft.UI.Xaml.Controls.Border VerticalPanningThumb ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2342736447248 Microsoft.UI.Xaml.Controls.ImageIcon 0 0 +2342736529656 Microsoft.UI.Xaml.Controls.ScrollContentPresenter ScrollContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2342736530808 Microsoft.UI.Xaml.Controls.ScrollContentPresenter ScrollContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2342736531960 Microsoft.UI.Xaml.Controls.ScrollContentPresenter 0 0 +2342736533752 Microsoft.UI.Xaml.Internal.RootScrollViewer 0 0 +2342736582760 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2342736583160 Microsoft.UI.Xaml.Controls.Grid ms-appx:///SecondWindow.xaml 12 24 +2342736583560 Microsoft.UI.Xaml.Controls.Grid PART_LayoutRoot ms-appx:///Microsoft.UI.Xaml/Themes/generic.xaml 0 0 +2342736583960 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2342736587960 Microsoft.UI.Xaml.Controls.Grid 0 0 +2342807578344 Microsoft.UI.Xaml.Controls.ContentPresenter ClientAreaPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/themeresources.xbf 0 0 +2342807579080 Microsoft.UI.Xaml.Controls.Image 0 0 +2342807583128 Microsoft.UI.Xaml.Controls.ContentPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/generic.xaml 0 0 +2342808169720 Microsoft.UI.Xaml.Shapes.Rectangle VerticalTrackRect ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2342808171192 Microsoft.UI.Xaml.Shapes.Rectangle HorizontalTrackRect ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2342808193960 Microsoft.UI.Xaml.Controls.Grid VerticalRoot ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2342808194760 Microsoft.UI.Xaml.Controls.Grid HorizontalRoot ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2342808195560 Microsoft.UI.Xaml.Controls.Grid VerticalPanningRoot ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2342808196760 Microsoft.UI.Xaml.Controls.Grid HorizontalPanningRoot ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2342808200360 Microsoft.UI.Xaml.Controls.Grid Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2342808448328 Microsoft.UI.Xaml.Controls.Grid Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2342808449128 Microsoft.UI.Xaml.Controls.Grid Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2342808452328 Microsoft.UI.Xaml.Controls.Grid Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2342808454728 Microsoft.UI.Xaml.Controls.Grid Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2342808535944 Microsoft.UI.Xaml.Controls.Button DeleteButton ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2342808544616 Microsoft.UI.Xaml.Controls.ContentPresenter ClientAreaPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/themeresources.xbf 0 0 +2342808546456 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2342808555656 Microsoft.UI.Xaml.Controls.ContentPresenter DescriptionPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2342808556024 Microsoft.UI.Xaml.Controls.ContentPresenter HeaderContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2342808557128 Microsoft.UI.Xaml.Controls.ContentPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/generic.xaml 0 0 +2342808559704 Microsoft.UI.Xaml.Internal.TextBoxView 0 0 +2342808615032 Microsoft.UI.Xaml.Controls.ScrollViewer ContentElement ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2342808644344 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2342808647144 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2342808648344 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2342808675864 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///SmokePage.xaml 75 29 +2342808676216 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///SmokePage.xaml 75 29 +2342808678328 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2342808680792 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///SmokePage.xaml 75 29 +2342808681848 Microsoft.UI.Xaml.Controls.Border ScrollBarSeparator ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2342808682552 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///SmokePage.xaml 75 29 +2342812856392 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2342812857448 Microsoft.UI.Xaml.Controls.Border 0 0 +2342812861320 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2342813099080 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2342813101080 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2342813101480 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2342813103880 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2342813107480 Microsoft.UI.Xaml.Controls.Grid 0 0 +2342813109080 Microsoft.UI.Xaml.Controls.Grid 0 0 +2342813428424 Microsoft.UI.Xaml.Controls.FontIcon Arrow ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2342813431368 Microsoft.UI.Xaml.Controls.FontIcon Arrow ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 diff --git a/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Fixtures/census/debug-UcHost.tsv b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Fixtures/census/debug-UcHost.tsv new file mode 100644 index 00000000..0904a8ce --- /dev/null +++ b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Fixtures/census/debug-UcHost.tsv @@ -0,0 +1,72 @@ +handle type name file line col +2269890243992 Microsoft.UI.Xaml.Controls.Primitives.ScrollBar HorizontalScrollBar ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2269890247704 Microsoft.UI.Xaml.Controls.Primitives.ScrollBar VerticalScrollBar ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2269890253272 Microsoft.UI.Xaml.Controls.Primitives.ScrollBar HorizontalScrollBar ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2269890254200 Microsoft.UI.Xaml.Controls.Primitives.ScrollBar VerticalScrollBar ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2269890274624 Microsoft.UI.Xaml.Controls.ImageIcon 0 0 +2269890477592 Microsoft.UI.Xaml.Controls.ScrollViewer ContentElement ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2269890480840 Microsoft.UI.Xaml.Internal.TextBoxView 0 0 +2269890484152 Microsoft.UI.Xaml.Internal.TextBoxView 0 0 +2269890484888 Microsoft.UI.Xaml.Controls.ContentPresenter DescriptionPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2269890486728 Microsoft.UI.Xaml.Controls.ContentPresenter HeaderContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2269890524488 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2269890526088 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2269890531288 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2269890646376 Microsoft.UI.Xaml.Controls.Button DeleteButton ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2269890658072 Microsoft.UI.Xaml.Controls.ContentPresenter DescriptionPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2269890659176 Microsoft.UI.Xaml.Controls.ContentPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/generic.xaml 0 0 +2269890662856 Microsoft.UI.Xaml.Controls.ContentPresenter HeaderContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2269890663592 Microsoft.UI.Xaml.Controls.ContentPresenter ClientAreaPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/themeresources.xbf 0 0 +2269894361128 Microsoft.UI.Xaml.Controls.Border ms-appx:///CardControl.xaml 21 9 +2269894366056 Microsoft.UI.Xaml.Controls.Border 0 0 +2269894533448 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2269894535048 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2269894535448 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2269894535848 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2269894536248 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2269894536648 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2409272277120 Microsoft.UI.Xaml.Hosting.DesktopWindowXamlSource 0 0 +2409272327912 Microsoft.UI.Xaml.Controls.Frame RootFrame ms-appx:///MainWindow.xaml 32 54 +2409272471192 Microsoft.UI.Xaml.WindowChrome 0 0 +2409388696504 Microsoft.UI.Xaml.Controls.ContentPresenter ClientAreaPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/themeresources.xbf 0 0 +2409388696872 Microsoft.UI.Xaml.Controls.Image 0 0 +2409388699080 Microsoft.UI.Xaml.Controls.ContentPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/generic.xaml 0 0 +2409388727416 Microsoft.UI.Xaml.Controls.ScrollContentPresenter ScrollContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2409388766832 SmokeFixture.CardControl HostedCard ms-appx:///UcHostPage.xaml 25 47 +2409388768376 SmokeFixture.UcHostPage ms-appx:///UcHostPage.xaml 9 5 +2409388980680 Microsoft.UI.Xaml.Controls.Border 0 0 +2409389729208 Microsoft.UI.Xaml.Controls.ContentControl MwSlot ms-appx:///SecondWindow.xaml 36 13 +2409389730408 Microsoft.UI.Xaml.PopupRoot 0 0 +2409389731208 Microsoft.UI.Xaml.PopupRoot 0 0 +2409389820456 Microsoft.UI.Xaml.Controls.ScrollContentPresenter 0 0 +2409390004344 Microsoft.UI.Xaml.Internal.RootScrollViewer 0 0 +2409390111992 Microsoft.UI.Xaml.WindowChrome 0 0 +2409390115072 Microsoft.UI.Xaml.Controls.TitleBar AppTitleBar ms-appx:///MainWindow.xaml 21 59 +2409390681368 Microsoft.UI.Xaml.Controls.Grid ms-appx:///MainWindow.xaml 15 6 +2409391491648 Microsoft.UI.Xaml.Hosting.DesktopWindowXamlSource 0 0 +2409391526952 Microsoft.UI.Xaml.Controls.Button DeleteButton ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2409391544744 Microsoft.UI.Xaml.Controls.Border 0 0 +2409394235416 Microsoft.UI.Xaml.Controls.ScrollContentPresenter 0 0 +2409395433416 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///UcHostPage.xaml 18 30 +2409395557160 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2409395558760 Microsoft.UI.Xaml.Controls.Grid PART_LayoutRoot ms-appx:///Microsoft.UI.Xaml/Themes/generic.xaml 0 0 +2409395559160 Microsoft.UI.Xaml.Controls.Grid 0 0 +2409395561960 Microsoft.UI.Xaml.Controls.Grid ms-appx:///SecondWindow.xaml 12 24 +2409395843736 Microsoft.UI.Xaml.Controls.TextBox PageBox ms-appx:///UcHostPage.xaml 23 13 +2409395844296 Microsoft.UI.Xaml.Controls.TextBox CardBox ms-appx:///CardControl.xaml 26 13 +2409396001848 Microsoft.UI.Xaml.Controls.ScrollContentPresenter ScrollContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2409396085480 Microsoft.UI.Xaml.Internal.RootScrollViewer 0 0 +2409396104344 Microsoft.UI.Xaml.Controls.Border BorderElement ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2409396104696 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2409396105400 Microsoft.UI.Xaml.Controls.TextBlock PlaceholderTextContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2409396105752 Microsoft.UI.Xaml.Controls.Border ScrollBarSeparator ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2409396106104 Microsoft.UI.Xaml.Controls.Border BorderElement ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2409396106808 Microsoft.UI.Xaml.Controls.TextBlock PlaceholderTextContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2409396107512 Microsoft.UI.Xaml.Controls.Border Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2409396108920 Microsoft.UI.Xaml.Controls.Viewbox PART_Icon ms-appx:///Microsoft.UI.Xaml/Themes/generic.xaml 0 0 +2409396109272 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2409396109976 Microsoft.UI.Xaml.Controls.Border ScrollBarSeparator ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2409396111032 Microsoft.UI.Xaml.Controls.Border Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2409396111736 Microsoft.UI.Xaml.Controls.TextBlock SecondWindowLabel ms-appx:///SecondWindow.xaml 24 13 +2409396112088 Microsoft.UI.Xaml.Controls.TextBlock PART_TitleText ms-appx:///Microsoft.UI.Xaml/Themes/generic.xaml 0 0 +2409396112472 Microsoft.UI.Xaml.Controls.ScrollViewer ContentElement ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 diff --git a/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Fixtures/census/debug-XBindFn.tsv b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Fixtures/census/debug-XBindFn.tsv new file mode 100644 index 00000000..d396808b --- /dev/null +++ b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Fixtures/census/debug-XBindFn.tsv @@ -0,0 +1,34 @@ +handle type name file line col +2301284987168 Microsoft.UI.Xaml.Hosting.DesktopWindowXamlSource 0 0 +2301285116008 Microsoft.UI.Xaml.Controls.Frame RootFrame ms-appx:///MainWindow.xaml 32 54 +2301286576456 Microsoft.UI.Xaml.WindowChrome 0 0 +2301287688056 SmokeFixture.XBindFnPage ms-appx:///XBindFnPage.xaml 9 5 +2301287698984 Microsoft.UI.Xaml.Controls.StackPanel RootPanel ms-appx:///XBindFnPage.xaml 24 9 +2301287779000 Microsoft.UI.Xaml.Controls.Border 0 0 +2301402106696 Microsoft.UI.Xaml.Controls.Grid PART_LayoutRoot ms-appx:///Microsoft.UI.Xaml/Themes/generic.xaml 0 0 +2301402108296 Microsoft.UI.Xaml.PopupRoot 0 0 +2301402109496 Microsoft.UI.Xaml.Controls.Grid ms-appx:///SecondWindow.xaml 12 24 +2301402220160 Microsoft.UI.Xaml.Controls.TitleBar AppTitleBar ms-appx:///MainWindow.xaml 21 59 +2301402339864 Microsoft.UI.Xaml.Internal.RootScrollViewer 0 0 +2301402346040 Microsoft.UI.Xaml.Controls.ScrollContentPresenter 0 0 +2301402347192 Microsoft.UI.Xaml.Controls.ScrollContentPresenter 0 0 +2301403112968 Microsoft.UI.Xaml.Controls.ContentControl MwSlot ms-appx:///SecondWindow.xaml 36 13 +2301403117368 Microsoft.UI.Xaml.PopupRoot 0 0 +2301403120568 Microsoft.UI.Xaml.Controls.Grid ms-appx:///MainWindow.xaml 15 6 +2301403628776 Microsoft.UI.Xaml.Controls.TextBlock GreetOut ms-appx:///XBindFnPage.xaml 27 13 +2301403630184 Microsoft.UI.Xaml.Controls.TextBlock Marker ms-appx:///XBindFnPage.xaml 32 13 +2301403630888 Microsoft.UI.Xaml.Controls.Border 0 0 +2301403635464 Microsoft.UI.Xaml.Controls.Border 0 0 +2301404219368 Microsoft.UI.Xaml.WindowChrome 0 0 +2301408053232 Microsoft.UI.Xaml.Hosting.DesktopWindowXamlSource 0 0 +2301408169400 Microsoft.UI.Xaml.Internal.RootScrollViewer 0 0 +2301408188072 Microsoft.UI.Xaml.Controls.TextBlock SecondWindowLabel ms-appx:///SecondWindow.xaml 24 13 +2301408189128 Microsoft.UI.Xaml.Controls.Viewbox PART_Icon ms-appx:///Microsoft.UI.Xaml/Themes/generic.xaml 0 0 +2301408193000 Microsoft.UI.Xaml.Controls.TextBlock PART_TitleText ms-appx:///Microsoft.UI.Xaml/Themes/generic.xaml 0 0 +2301408289480 Microsoft.UI.Xaml.Controls.ContentPresenter ClientAreaPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/themeresources.xbf 0 0 +2301408295368 Microsoft.UI.Xaml.Controls.ContentPresenter ClientAreaPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/themeresources.xbf 0 0 +2301408295736 Microsoft.UI.Xaml.Controls.Image 0 0 +2301408296472 Microsoft.UI.Xaml.Controls.ContentPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/generic.xaml 0 0 +2301408469352 Microsoft.UI.Xaml.Controls.Grid 0 0 +2301408478944 Microsoft.UI.Xaml.Controls.ImageIcon 0 0 +2301408628184 Microsoft.UI.Xaml.Controls.ContentPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/generic.xaml 0 0 diff --git a/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Fixtures/census/release-Items.tsv b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Fixtures/census/release-Items.tsv new file mode 100644 index 00000000..380236a0 --- /dev/null +++ b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Fixtures/census/release-Items.tsv @@ -0,0 +1,248 @@ +handle type name file line col +2418067553672 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 44 58 +2419352690496 Microsoft.UI.Xaml.Hosting.DesktopWindowXamlSource 0 0 +2419353025752 Microsoft.UI.Xaml.Controls.ContentPresenter ClientAreaPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/themeresources.xbf 0 0 +2419353275304 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +2419355755288 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 49 29 +2419355757688 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 49 29 +2419355758168 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 49 29 +2419355758648 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 49 29 +2419355759608 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 49 29 +2419355760088 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 49 29 +2419355775592 Microsoft.UI.Xaml.Controls.Grid PART_LayoutRoot ms-appx:///Microsoft.UI.Xaml/Themes/generic.xaml 0 0 +2419355776392 Microsoft.UI.Xaml.Controls.Grid 0 0 +2419355776792 Microsoft.UI.Xaml.Controls.ContentControl 0 0 +2419355778792 Microsoft.UI.Xaml.Controls.ContentControl 0 0 +2419355779592 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419355786552 Microsoft.UI.Xaml.Controls.ScrollContentPresenter ScrollContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419355997928 Microsoft.UI.Xaml.Controls.ScrollContentPresenter 0 0 +2419441456376 Microsoft.UI.Xaml.WindowChrome 0 0 +2419441639256 Microsoft.UI.Xaml.Controls.Frame RootFrame ms-appx:///MainWindow.xaml 32 54 +2419442092008 Microsoft.UI.Xaml.Controls.Border 0 0 +2419442095176 Microsoft.UI.Xaml.Controls.Border VerticalPanningThumb ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419442747016 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 44 58 +2419442957400 Microsoft.UI.Xaml.Controls.ItemsStackPanel ms-resource:///Files/Microsoft.UI.Xaml;component/themes/generic.xaml 0 0 +2419442977272 Microsoft.UI.Xaml.PopupRoot 0 0 +2419442978072 Microsoft.UI.Xaml.Controls.Grid ms-appx:///SecondWindow.xaml 12 24 +2419442980072 Microsoft.UI.Xaml.Controls.ContentControl MwSlot ms-appx:///SecondWindow.xaml 36 13 +2419443196712 Microsoft.UI.Xaml.Internal.RootScrollViewer 0 0 +2419443205648 Microsoft.UI.Xaml.Controls.TitleBar AppTitleBar ms-appx:///MainWindow.xaml 21 59 +2419443299640 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 44 58 +2419443355128 Microsoft.UI.Xaml.Controls.ListView ItemList ms-appx:///ItemsPage.xaml 40 13 +2419443422680 Microsoft.UI.Xaml.Controls.Primitives.Thumb HorizontalThumb ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419443427160 Microsoft.UI.Xaml.Controls.Primitives.Thumb VerticalThumb ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419443888184 Microsoft.UI.Xaml.WindowChrome 0 0 +2419443888792 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 44 58 +2419444001592 Microsoft.UI.Xaml.Controls.Grid ms-appx:///MainWindow.xaml 15 6 +2419444001992 Microsoft.UI.Xaml.PopupRoot 0 0 +2419444337032 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 44 58 +2419444353912 SmokeFixture.ItemsPage ms-appx:///ItemsPage.xaml 10 5 +2419444397448 Microsoft.UI.Xaml.Controls.TextBlock HeaderText ms-appx:///ItemsPage.xaml 30 13 +2419444400264 Microsoft.UI.Xaml.Controls.TextBlock ClickReadout ms-appx:///ItemsPage.xaml 35 13 +2419444949256 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 25 30 +2419445038696 Microsoft.UI.Xaml.Controls.ScrollViewer ScrollViewer ms-resource:///Files/Microsoft.UI.Xaml;component/themes/generic.xaml 0 0 +2419445056152 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 44 58 +2419448253704 Microsoft.UI.Xaml.Internal.RootScrollViewer 0 0 +2419448339400 Microsoft.UI.Xaml.Controls.TextBlock PART_TitleText ms-appx:///Microsoft.UI.Xaml/Themes/generic.xaml 0 0 +2419448340104 Microsoft.UI.Xaml.Controls.Border ms-resource:///Files/Microsoft.UI.Xaml;component/themes/generic.xaml 0 0 +2419448340456 Microsoft.UI.Xaml.Controls.TextBlock SecondWindowLabel ms-appx:///SecondWindow.xaml 24 13 +2419448340808 Microsoft.UI.Xaml.Controls.Viewbox PART_Icon ms-appx:///Microsoft.UI.Xaml/Themes/generic.xaml 0 0 +2419448341864 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 45 63 +2419448344680 Microsoft.UI.Xaml.Controls.Border Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419448345032 Microsoft.UI.Xaml.Controls.Border ScrollBarSeparator ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419448345384 Microsoft.UI.Xaml.Controls.Border 0 0 +2419448345736 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2419448567912 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +2419448687080 Microsoft.UI.Xaml.Controls.Primitives.ScrollBar HorizontalScrollBar ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419448690792 Microsoft.UI.Xaml.Controls.Primitives.ScrollBar VerticalScrollBar ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419448772576 Microsoft.UI.Xaml.Hosting.DesktopWindowXamlSource 0 0 +2419448810248 Microsoft.UI.Xaml.Controls.ScrollContentPresenter 0 0 +2419448992944 Microsoft.UI.Xaml.Controls.ImageIcon 0 0 +2419449258424 Microsoft.UI.Xaml.Controls.Image 0 0 +2419449265416 Microsoft.UI.Xaml.Controls.ContentPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/generic.xaml 0 0 +2419449279304 Microsoft.UI.Xaml.Controls.ItemsPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/generic.xaml 0 0 +2419449611288 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419449614488 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419449627048 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 44 58 +2419519851320 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 44 58 +2419519943320 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419519943928 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419519944536 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419519945144 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419519945752 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419519946360 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419519946968 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419519947576 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419519948184 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419519949400 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419519950008 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419519950616 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419519970184 Microsoft.UI.Xaml.Controls.ContentPresenter ClientAreaPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/themeresources.xbf 0 0 +2419519970552 Microsoft.UI.Xaml.Controls.ContentPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/generic.xaml 0 0 +2419519971656 Microsoft.UI.Xaml.Shapes.Rectangle HorizontalTrackRect ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419519972024 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419519976440 Microsoft.UI.Xaml.Shapes.Rectangle VerticalTrackRect ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419520128168 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton HorizontalLargeIncrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419520128680 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton VerticalSmallDecrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419520129192 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton VerticalLargeDecrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419520130728 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton VerticalLargeIncrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419520131240 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton VerticalSmallIncrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419520133288 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton HorizontalSmallIncrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419520137384 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton HorizontalSmallDecrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419520139432 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton HorizontalLargeDecrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419520208072 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 44 58 +2419520227208 Microsoft.UI.Xaml.Controls.Grid HorizontalPanningRoot ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419520228408 Microsoft.UI.Xaml.Controls.Grid Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419520228808 Microsoft.UI.Xaml.Controls.Grid VerticalRoot ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419520232008 Microsoft.UI.Xaml.Controls.Grid VerticalPanningRoot ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419520232408 Microsoft.UI.Xaml.Controls.Grid HorizontalRoot ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419520380088 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419520380824 Microsoft.UI.Xaml.Shapes.Rectangle ThumbVisual ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419520381192 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419520381928 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419520383768 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419520385608 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419520385976 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419520388920 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419520389656 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419520391496 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419520391864 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419520396440 Microsoft.UI.Xaml.Controls.Grid Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419520463784 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 45 63 +2419520464136 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2419520464488 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 45 63 +2419520464840 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2419520465192 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2419520465544 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2419520466600 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 45 63 +2419520467304 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 45 63 +2419520467656 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 45 63 +2419520468712 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 45 63 +2419520469064 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 45 63 +2419520469416 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2419520469768 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 45 63 +2419520470472 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2419520470824 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2419520471528 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2419520503032 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 44 58 +2419520520344 Microsoft.UI.Xaml.Controls.Grid Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419520521544 Microsoft.UI.Xaml.Controls.Grid Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419520521944 Microsoft.UI.Xaml.Controls.Grid Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419520568200 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +2419520568904 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +2419520569608 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +2419520570312 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +2419520571016 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +2419520572424 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +2419520574536 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +2419520576648 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +2419520578056 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +2419520578760 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +2419520579464 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +2419521154248 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 49 29 +2419521156168 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 49 29 +2419521156648 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 49 29 +2419521157128 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 49 29 +2419521158088 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 49 29 +2419521158568 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 49 29 +2419521159528 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 49 29 +2419521160488 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 49 29 +2419521160968 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 49 29 +2419521387656 Microsoft.UI.Xaml.Controls.Border 0 0 +2419522503976 Microsoft.UI.Xaml.Controls.Border 0 0 +2419522941432 Microsoft.UI.Xaml.Controls.Border 0 0 +2419522949880 Microsoft.UI.Xaml.Controls.Border 0 0 +2419522950232 Microsoft.UI.Xaml.Controls.Border 0 0 +2419522950584 Microsoft.UI.Xaml.Controls.Border 0 0 +2419522951992 Microsoft.UI.Xaml.Controls.Border 0 0 +2419523609800 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 44 58 +2419523671320 Microsoft.UI.Xaml.Controls.FontIcon Arrow ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419523680888 Microsoft.UI.Xaml.Controls.FontIcon Arrow ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419524269864 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 44 58 +2419524467240 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 45 63 +2419524471464 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 45 63 +2419524472520 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2419524473576 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2419524473928 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 45 63 +2419524474280 Microsoft.UI.Xaml.Controls.Border 0 0 +2419524475336 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 45 63 +2419526627720 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419526628088 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419526629928 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419526631400 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419526631768 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419526634344 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419526634712 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419526637288 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419526638392 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419526638760 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419527173080 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419527173688 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419527174904 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419527177336 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419527178552 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419527180984 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419527181592 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419527182808 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419527187672 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419527588520 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 49 29 +2419527589960 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 49 29 +2419527590920 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 49 29 +2419527591880 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 49 29 +2419527594280 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 49 29 +2419527594760 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 49 29 +2419527604424 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 44 58 +2419527604856 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 44 58 +2419527605288 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 44 58 +2419527605720 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 44 58 +2419527606152 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 44 58 +2419527606584 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 44 58 +2419527607016 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 44 58 +2419527607448 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 44 58 +2419527607880 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 44 58 +2419527644504 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 45 63 +2419527648024 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2419527648728 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 45 63 +2419527649784 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2419527650136 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2419527651544 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2419527652600 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 45 63 +2419527653304 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2419527653656 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 45 63 +2419527655416 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 45 63 +2419527656472 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 45 63 +2419527658232 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2419528826424 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +2419528827832 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +2419528829944 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +2419528830648 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +2419528833464 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +2419528836984 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +2419528837688 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +2419528839800 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +2419529410760 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2419529411160 Microsoft.UI.Xaml.Controls.Grid 0 0 +2419529411560 Microsoft.UI.Xaml.Controls.Grid 0 0 +2419532376504 Microsoft.UI.Xaml.Controls.Border 0 0 +2419532377560 Microsoft.UI.Xaml.Controls.Border 0 0 +2419532378264 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 45 63 +2419532379672 Microsoft.UI.Xaml.Controls.Border 0 0 +2419532381432 Microsoft.UI.Xaml.Controls.Border 0 0 +2419532381784 Microsoft.UI.Xaml.Controls.Border 0 0 +2419532382840 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2419532384952 Microsoft.UI.Xaml.Controls.Border 0 0 +2419532385304 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2419532386712 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2419532388120 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2419532389528 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 45 63 +2419532390232 Microsoft.UI.Xaml.Controls.Border 0 0 +2419533586792 Microsoft.UI.Xaml.Controls.Border 0 0 +2419533587144 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2419533587848 Microsoft.UI.Xaml.Controls.Border 0 0 +2419533592072 Microsoft.UI.Xaml.Controls.Border 0 0 +2419533595944 Microsoft.UI.Xaml.Controls.Border 0 0 +2419533597352 Microsoft.UI.Xaml.Controls.Border 0 0 +2419533598760 Microsoft.UI.Xaml.Controls.Border 0 0 +2419533599464 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2419533600872 Microsoft.UI.Xaml.Controls.Border 0 0 +2419715317896 Microsoft.UI.Xaml.Controls.Border HorizontalPanningThumb ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 diff --git a/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Fixtures/census/release-Repeater.tsv b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Fixtures/census/release-Repeater.tsv new file mode 100644 index 00000000..b14301d1 --- /dev/null +++ b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Fixtures/census/release-Repeater.tsv @@ -0,0 +1,130 @@ +handle type name file line col +2293568447024 Microsoft.UI.Xaml.Hosting.DesktopWindowXamlSource 0 0 +2293568909992 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///RepeaterPage.xaml 55 62 +2293569049992 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///RepeaterPage.xaml 55 62 +2293569191368 Microsoft.UI.Xaml.Controls.ScrollViewer ItemScroller ms-appx:///RepeaterPage.xaml 48 13 +2293569342512 Microsoft.UI.Xaml.Controls.TitleBar AppTitleBar ms-appx:///MainWindow.xaml 21 59 +2293569463832 Microsoft.UI.Xaml.Controls.ScrollContentPresenter ScrollContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2293571543112 Microsoft.UI.Xaml.Controls.Border 0 0 +2293684070840 Microsoft.UI.Xaml.WindowChrome 0 0 +2293684501928 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///RepeaterPage.xaml 55 62 +2293684509416 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///RepeaterPage.xaml 33 30 +2293685002888 Microsoft.UI.Xaml.Controls.ContentControl MwSlot ms-appx:///SecondWindow.xaml 36 13 +2293685007288 Microsoft.UI.Xaml.PopupRoot 0 0 +2293685009288 Microsoft.UI.Xaml.Controls.Grid ms-appx:///SecondWindow.xaml 12 24 +2293685655400 Microsoft.UI.Xaml.WindowChrome 0 0 +2293685843480 Microsoft.UI.Xaml.Internal.RootScrollViewer 0 0 +2293685849080 Microsoft.UI.Xaml.Controls.ScrollContentPresenter 0 0 +2293685849656 Microsoft.UI.Xaml.Controls.ScrollContentPresenter 0 0 +2293685960488 Microsoft.UI.Xaml.Controls.Frame RootFrame ms-appx:///MainWindow.xaml 32 54 +2293686000408 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton HorizontalSmallIncrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2293686001432 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton VerticalSmallDecrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2293686001944 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton VerticalLargeDecrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2293686002456 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton HorizontalLargeDecrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2293686003480 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton HorizontalSmallDecrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2293686006040 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton VerticalLargeIncrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2293686006552 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton VerticalSmallIncrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2293686015256 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton HorizontalLargeIncrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2293686016248 Microsoft.UI.Xaml.Controls.ItemsRepeater ItemRepeater ms-appx:///RepeaterPage.xaml 51 17 +2293686577000 Microsoft.UI.Xaml.PopupRoot 0 0 +2293686581400 Microsoft.UI.Xaml.Controls.Grid ms-appx:///MainWindow.xaml 15 6 +2293686907384 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///RepeaterPage.xaml 55 62 +2293686964792 SmokeFixture.RepeaterPage ms-appx:///RepeaterPage.xaml 10 5 +2293686976568 Microsoft.UI.Xaml.Controls.TextBlock ClickReadout ms-appx:///RepeaterPage.xaml 43 13 +2293686980792 Microsoft.UI.Xaml.Controls.TextBlock HeaderText ms-appx:///RepeaterPage.xaml 38 13 +2293686983256 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2293688972344 Microsoft.UI.Xaml.Controls.Border ScrollBarSeparator ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2293688972696 Microsoft.UI.Xaml.Controls.Border Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2293688973048 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///RepeaterPage.xaml 56 67 +2293688974808 Microsoft.UI.Xaml.Controls.TextBlock PART_TitleText ms-appx:///Microsoft.UI.Xaml/Themes/generic.xaml 0 0 +2293688975512 Microsoft.UI.Xaml.Controls.Viewbox PART_Icon ms-appx:///Microsoft.UI.Xaml/Themes/generic.xaml 0 0 +2293688976216 Microsoft.UI.Xaml.Controls.Border HorizontalPanningThumb ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2293688976568 Microsoft.UI.Xaml.Controls.Border 0 0 +2293688976920 Microsoft.UI.Xaml.Controls.TextBlock SecondWindowLabel ms-appx:///SecondWindow.xaml 24 13 +2293688977624 Microsoft.UI.Xaml.Controls.Border VerticalPanningThumb ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2293690048952 Microsoft.UI.Xaml.Controls.Primitives.ScrollBar VerticalScrollBar ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2293690056376 Microsoft.UI.Xaml.Controls.Primitives.ScrollBar HorizontalScrollBar ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2293690320728 Microsoft.UI.Xaml.Controls.Primitives.Thumb HorizontalThumb ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2293690325656 Microsoft.UI.Xaml.Controls.Primitives.Thumb VerticalThumb ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2293690344936 Microsoft.UI.Xaml.Controls.Button ms-appx:///RepeaterPage.xaml 60 33 +2293690346856 Microsoft.UI.Xaml.Controls.Button ms-appx:///RepeaterPage.xaml 60 33 +2293690347336 Microsoft.UI.Xaml.Controls.Button ms-appx:///RepeaterPage.xaml 60 33 +2293690349736 Microsoft.UI.Xaml.Controls.Button ms-appx:///RepeaterPage.xaml 60 33 +2293690350696 Microsoft.UI.Xaml.Controls.Button ms-appx:///RepeaterPage.xaml 60 33 +2293690351176 Microsoft.UI.Xaml.Controls.Button ms-appx:///RepeaterPage.xaml 60 33 +2293690374968 Microsoft.UI.Xaml.Controls.ContentPresenter ClientAreaPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/themeresources.xbf 0 0 +2293690377912 Microsoft.UI.Xaml.Controls.Image 0 0 +2293690379752 Microsoft.UI.Xaml.Controls.ContentPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/generic.xaml 0 0 +2293690471464 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2293690473464 Microsoft.UI.Xaml.Controls.Grid 0 0 +2293690474664 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2293690477864 Microsoft.UI.Xaml.Controls.Grid PART_LayoutRoot ms-appx:///Microsoft.UI.Xaml/Themes/generic.xaml 0 0 +2293690515056 Microsoft.UI.Xaml.Controls.ImageIcon 0 0 +2293690882344 Microsoft.UI.Xaml.Shapes.Rectangle VerticalTrackRect ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2293690889336 Microsoft.UI.Xaml.Shapes.Rectangle HorizontalTrackRect ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2293690926616 Microsoft.UI.Xaml.Controls.Grid VerticalPanningRoot ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2293690927416 Microsoft.UI.Xaml.Controls.Grid HorizontalPanningRoot ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2293690928616 Microsoft.UI.Xaml.Controls.Grid HorizontalRoot ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2293690929416 Microsoft.UI.Xaml.Controls.Grid VerticalRoot ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2293690930216 Microsoft.UI.Xaml.Controls.Grid Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2293691045656 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2293691046024 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2293691048232 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2293691048600 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2293691049336 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2293691051176 Microsoft.UI.Xaml.Controls.ContentPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/generic.xaml 0 0 +2293691052280 Microsoft.UI.Xaml.Shapes.Rectangle ThumbVisual ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2293691053016 Microsoft.UI.Xaml.Controls.ContentPresenter ClientAreaPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/themeresources.xbf 0 0 +2293691056328 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2293691057064 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2293691059640 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2293691148632 Microsoft.UI.Xaml.Controls.Grid Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2293691151032 Microsoft.UI.Xaml.Controls.Grid Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2293691151832 Microsoft.UI.Xaml.Controls.Grid Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2293691152632 Microsoft.UI.Xaml.Controls.Grid Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2293691153832 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2293691254232 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///RepeaterPage.xaml 55 62 +2293691254664 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///RepeaterPage.xaml 55 62 +2293691255096 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///RepeaterPage.xaml 55 62 +2293691255528 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///RepeaterPage.xaml 55 62 +2293691255960 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///RepeaterPage.xaml 55 62 +2293691256392 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///RepeaterPage.xaml 55 62 +2293691256824 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///RepeaterPage.xaml 55 62 +2293691497584 Microsoft.UI.Xaml.Hosting.DesktopWindowXamlSource 0 0 +2293691699752 Microsoft.UI.Xaml.Internal.RootScrollViewer 0 0 +2293691798392 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2293691798744 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2293691799448 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///RepeaterPage.xaml 56 67 +2293691800152 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2293691800504 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2293691801208 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///RepeaterPage.xaml 56 67 +2293691801560 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///RepeaterPage.xaml 56 67 +2293691802264 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///RepeaterPage.xaml 56 67 +2293691803320 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2293691804376 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///RepeaterPage.xaml 56 67 +2293762868440 Microsoft.UI.Xaml.Controls.Button ms-appx:///RepeaterPage.xaml 60 33 +2293762868920 Microsoft.UI.Xaml.Controls.Button ms-appx:///RepeaterPage.xaml 60 33 +2293762869400 Microsoft.UI.Xaml.Controls.Button ms-appx:///RepeaterPage.xaml 60 33 +2293762870360 Microsoft.UI.Xaml.Controls.Button ms-appx:///RepeaterPage.xaml 60 33 +2293762874680 Microsoft.UI.Xaml.Controls.Button ms-appx:///RepeaterPage.xaml 60 33 +2293762945880 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2293762947640 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///RepeaterPage.xaml 56 67 +2293765218088 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///RepeaterPage.xaml 56 67 +2293765218440 Microsoft.UI.Xaml.Controls.Border 0 0 +2293765219496 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2293765222664 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2293765223368 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///RepeaterPage.xaml 56 67 +2293765224072 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///RepeaterPage.xaml 56 67 +2293765224776 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2293765225480 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2293765226184 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2293765226536 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///RepeaterPage.xaml 56 67 +2293765229000 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2293767865480 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2293767866584 Microsoft.UI.Xaml.Controls.FontIcon Arrow ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2293767867320 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2293767871736 Microsoft.UI.Xaml.Controls.FontIcon Arrow ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2293767873944 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2293772157720 Microsoft.UI.Xaml.Controls.Grid 0 0 +2293772159320 Microsoft.UI.Xaml.Controls.Grid 0 0 +2293772160520 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 diff --git a/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Fixtures/census/release-SmokePage.tsv b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Fixtures/census/release-SmokePage.tsv new file mode 100644 index 00000000..567946af --- /dev/null +++ b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Fixtures/census/release-SmokePage.tsv @@ -0,0 +1,101 @@ +handle type name file line col +2204604392592 Microsoft.UI.Xaml.Hosting.DesktopWindowXamlSource 0 0 +2204605038824 Microsoft.UI.Xaml.Controls.Primitives.Thumb HorizontalThumb ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2204605133464 Microsoft.UI.Xaml.WindowChrome 0 0 +2204605207976 Microsoft.UI.Xaml.Controls.ContentControl MwSlot ms-appx:///SecondWindow.xaml 36 13 +2204607691368 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2204607695944 Microsoft.UI.Xaml.Controls.Border 0 0 +2204691966616 Microsoft.UI.Xaml.Controls.Frame RootFrame ms-appx:///MainWindow.xaml 32 54 +2204692971832 Microsoft.UI.Xaml.PopupRoot 0 0 +2204692975032 Microsoft.UI.Xaml.PopupRoot 0 0 +2204693644568 Microsoft.UI.Xaml.Internal.RootScrollViewer 0 0 +2204693673128 Microsoft.UI.Xaml.WindowChrome 0 0 +2204693673776 Microsoft.UI.Xaml.Controls.TitleBar AppTitleBar ms-appx:///MainWindow.xaml 21 59 +2204693886904 SmokeFixture.SmokePage ms-appx:///SmokePage.xaml 10 5 +2204693945384 Microsoft.UI.Xaml.Controls.ScrollContentPresenter 0 0 +2204694095944 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton HorizontalSmallDecrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2204694099016 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton HorizontalLargeIncrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2204694100040 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton VerticalSmallDecrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2204694100552 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton VerticalLargeIncrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2204694103624 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton HorizontalLargeDecrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2204694104136 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton HorizontalSmallIncrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2204694105672 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton VerticalLargeDecrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2204694106184 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton VerticalSmallIncrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2204694732984 Microsoft.UI.Xaml.Controls.Grid ms-appx:///SmokePage.xaml 14 28 +2204694738584 Microsoft.UI.Xaml.Controls.Grid ms-appx:///MainWindow.xaml 15 6 +2204695095000 Microsoft.UI.Xaml.Controls.Button GoButton ms-appx:///SmokePage.xaml 64 17 +2204695103880 Microsoft.UI.Xaml.Controls.Border BorderElement ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2204695104232 Microsoft.UI.Xaml.Controls.Border AttachedProbe ms-appx:///SmokePage.xaml 48 17 +2204695105640 Microsoft.UI.Xaml.Controls.Border VerticalPanningThumb ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2204695108104 Microsoft.UI.Xaml.Controls.TextBlock BoundText ms-appx:///SmokePage.xaml 38 17 +2204695109512 Microsoft.UI.Xaml.Controls.TextBlock Title ms-appx:///SmokePage.xaml 31 17 +2204696187528 Microsoft.UI.Xaml.Internal.RootScrollViewer 0 0 +2204696220136 Microsoft.UI.Xaml.Controls.Grid 0 0 +2204696222936 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2204696224136 Microsoft.UI.Xaml.Controls.Grid ms-appx:///SecondWindow.xaml 12 24 +2204696224936 Microsoft.UI.Xaml.Controls.Grid PART_LayoutRoot ms-appx:///Microsoft.UI.Xaml/Themes/generic.xaml 0 0 +2204696225736 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2204696279848 Microsoft.UI.Xaml.Controls.ContentPresenter ClientAreaPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/themeresources.xbf 0 0 +2204696280216 Microsoft.UI.Xaml.Controls.Image 0 0 +2204696282424 Microsoft.UI.Xaml.Controls.ContentPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/generic.xaml 0 0 +2204696300952 Microsoft.UI.Xaml.Controls.Button DeleteButton ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2204696395248 Microsoft.UI.Xaml.Controls.ImageIcon 0 0 +2204696515368 Microsoft.UI.Xaml.Controls.ScrollContentPresenter ScrollContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2204696579544 Microsoft.UI.Xaml.Controls.Primitives.ScrollBar HorizontalScrollBar ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2204696587896 Microsoft.UI.Xaml.Controls.Primitives.ScrollBar VerticalScrollBar ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2204696588824 Microsoft.UI.Xaml.Controls.Primitives.ScrollBar HorizontalScrollBar ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2204696589752 Microsoft.UI.Xaml.Controls.Primitives.ScrollBar VerticalScrollBar ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2204696640520 Microsoft.UI.Xaml.Shapes.Rectangle HorizontalTrackRect ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2204696642360 Microsoft.UI.Xaml.Shapes.Rectangle VerticalTrackRect ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2204696689352 Microsoft.UI.Xaml.Controls.Grid HorizontalPanningRoot ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2204696690952 Microsoft.UI.Xaml.Controls.Grid Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2204696691352 Microsoft.UI.Xaml.Controls.Grid HorizontalRoot ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2204696691752 Microsoft.UI.Xaml.Controls.Grid VerticalRoot ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2204696694152 Microsoft.UI.Xaml.Controls.Grid VerticalPanningRoot ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2204696780216 Microsoft.UI.Xaml.Controls.ScrollContentPresenter ScrollContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2204696811416 Microsoft.UI.Xaml.Controls.Primitives.Thumb VerticalThumb ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2204696843208 Microsoft.UI.Xaml.Controls.ScrollViewer ContentElement ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2204696844984 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2204696847192 Microsoft.UI.Xaml.Controls.ContentPresenter DescriptionPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2204696851608 Microsoft.UI.Xaml.Controls.ContentPresenter ClientAreaPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/themeresources.xbf 0 0 +2204696854552 Microsoft.UI.Xaml.Controls.ContentPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/generic.xaml 0 0 +2204696855288 Microsoft.UI.Xaml.Internal.TextBoxView 0 0 +2204696858968 Microsoft.UI.Xaml.Controls.ContentPresenter HeaderContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2204696951560 Microsoft.UI.Xaml.Controls.Grid Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2204696953160 Microsoft.UI.Xaml.Controls.Grid Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2204696957160 Microsoft.UI.Xaml.Controls.Grid Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2204696957960 Microsoft.UI.Xaml.Controls.Grid Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2204699493712 Microsoft.UI.Xaml.Hosting.DesktopWindowXamlSource 0 0 +2204699540632 Microsoft.UI.Xaml.Controls.ScrollContentPresenter 0 0 +2204699541944 Microsoft.UI.Xaml.Controls.ScrollViewer Scroller ms-appx:///SmokePage.xaml 13 56 +2204699618184 Microsoft.UI.Xaml.Controls.TextBox ScratchInput ms-appx:///SmokePage.xaml 56 17 +2204699691768 Microsoft.UI.Xaml.Controls.ItemsRepeater Repeater ms-appx:///SmokePage.xaml 70 17 +2204699892600 Microsoft.UI.Xaml.Controls.TextBlock SecondWindowLabel ms-appx:///SecondWindow.xaml 24 13 +2204699895416 Microsoft.UI.Xaml.Controls.Viewbox PART_Icon ms-appx:///Microsoft.UI.Xaml/Themes/generic.xaml 0 0 +2204699896120 Microsoft.UI.Xaml.Controls.Border Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2204699897176 Microsoft.UI.Xaml.Controls.Border HorizontalPanningThumb ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2204699897880 Microsoft.UI.Xaml.Controls.TextBlock PART_TitleText ms-appx:///Microsoft.UI.Xaml/Themes/generic.xaml 0 0 +2204699898584 Microsoft.UI.Xaml.Controls.Border ScrollBarSeparator ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2204699899992 Microsoft.UI.Xaml.Controls.Border 0 0 +2204700066808 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///SmokePage.xaml 75 29 +2204700067512 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2204700067864 Microsoft.UI.Xaml.Controls.Border ScrollBarSeparator ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2204700069272 Microsoft.UI.Xaml.Controls.Border Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2204700071032 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///SmokePage.xaml 75 29 +2204700072088 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///SmokePage.xaml 75 29 +2204700072440 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///SmokePage.xaml 75 29 +2204700078616 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2204700080216 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2204700081416 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2204700208568 Microsoft.UI.Xaml.Controls.FontIcon Arrow ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2204700219608 Microsoft.UI.Xaml.Controls.FontIcon Arrow ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2204775941672 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2204775945192 Microsoft.UI.Xaml.Controls.Border 0 0 +2204775945896 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2204776197592 Microsoft.UI.Xaml.Controls.Grid 0 0 +2204776199992 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2204776201592 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2204776208392 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2204776209592 Microsoft.UI.Xaml.Controls.Grid 0 0 +2204776209992 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2205126213544 Microsoft.UI.Xaml.Controls.TextBlock PlaceholderTextContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 diff --git a/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Fixtures/census/release-UcHost.tsv b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Fixtures/census/release-UcHost.tsv new file mode 100644 index 00000000..57d027ee --- /dev/null +++ b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Fixtures/census/release-UcHost.tsv @@ -0,0 +1,72 @@ +handle type name file line col +2844553494832 Microsoft.UI.Xaml.Hosting.DesktopWindowXamlSource 0 0 +2844553768296 Microsoft.UI.Xaml.WindowChrome 0 0 +2844553769576 Microsoft.UI.Xaml.Controls.ScrollViewer ContentElement ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2844642476296 Microsoft.UI.Xaml.Internal.RootScrollViewer 0 0 +2844642483736 Microsoft.UI.Xaml.Internal.RootScrollViewer 0 0 +2844642773528 Microsoft.UI.Xaml.Controls.Border 0 0 +2844643175520 Microsoft.UI.Xaml.Controls.TitleBar AppTitleBar ms-appx:///MainWindow.xaml 21 59 +2844643179736 Microsoft.UI.Xaml.WindowChrome 0 0 +2844643845256 Microsoft.UI.Xaml.Controls.Grid ms-appx:///SecondWindow.xaml 12 24 +2844643846456 Microsoft.UI.Xaml.PopupRoot 0 0 +2844643847256 Microsoft.UI.Xaml.Controls.ContentControl MwSlot ms-appx:///SecondWindow.xaml 36 13 +2844643942408 Microsoft.UI.Xaml.Controls.ScrollContentPresenter 0 0 +2844643958920 Microsoft.UI.Xaml.Controls.TextBox CardBox ms-appx:///CardControl.xaml 26 13 +2844644404072 Microsoft.UI.Xaml.Controls.Frame RootFrame ms-appx:///MainWindow.xaml 32 54 +2844645005240 Microsoft.UI.Xaml.Controls.ScrollContentPresenter ScrollContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2844645012696 Microsoft.UI.Xaml.PopupRoot 0 0 +2844645013096 Microsoft.UI.Xaml.Controls.Grid ms-appx:///MainWindow.xaml 15 6 +2844645056312 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///UcHostPage.xaml 18 30 +2844645332400 SmokeFixture.CardControl HostedCard ms-appx:///UcHostPage.xaml 25 47 +2844645333624 SmokeFixture.UcHostPage ms-appx:///UcHostPage.xaml 9 5 +2844645374056 Microsoft.UI.Xaml.Controls.Border 0 0 +2844645963304 Microsoft.UI.Xaml.Controls.ScrollContentPresenter 0 0 +2844647598872 Microsoft.UI.Xaml.Controls.Primitives.ScrollBar VerticalScrollBar ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2844647599800 Microsoft.UI.Xaml.Controls.Primitives.ScrollBar VerticalScrollBar ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2844647606296 Microsoft.UI.Xaml.Controls.Primitives.ScrollBar HorizontalScrollBar ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2844647608152 Microsoft.UI.Xaml.Controls.Primitives.ScrollBar HorizontalScrollBar ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2844647678648 Microsoft.UI.Xaml.Controls.TextBox PageBox ms-appx:///UcHostPage.xaml 23 13 +2844647994280 Microsoft.UI.Xaml.Controls.Border BorderElement ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2844647994632 Microsoft.UI.Xaml.Controls.Border BorderElement ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2844647994984 Microsoft.UI.Xaml.Controls.Border Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2844647995336 Microsoft.UI.Xaml.Controls.TextBlock SecondWindowLabel ms-appx:///SecondWindow.xaml 24 13 +2844647996744 Microsoft.UI.Xaml.Controls.Border Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2844647997096 Microsoft.UI.Xaml.Controls.Viewbox PART_Icon ms-appx:///Microsoft.UI.Xaml/Themes/generic.xaml 0 0 +2844647997800 Microsoft.UI.Xaml.Controls.TextBlock PlaceholderTextContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2844647998152 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2844647999208 Microsoft.UI.Xaml.Controls.TextBlock PART_TitleText ms-appx:///Microsoft.UI.Xaml/Themes/generic.xaml 0 0 +2844648000264 Microsoft.UI.Xaml.Controls.Border ScrollBarSeparator ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2844648000616 Microsoft.UI.Xaml.Controls.TextBlock PlaceholderTextContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2844648000968 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2844648001320 Microsoft.UI.Xaml.Controls.Border ScrollBarSeparator ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2844648001704 Microsoft.UI.Xaml.Controls.ScrollContentPresenter ScrollContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2844648002808 Microsoft.UI.Xaml.Controls.ScrollViewer ContentElement ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2844648048168 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2844648050968 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2844648052168 Microsoft.UI.Xaml.Controls.Grid 0 0 +2844648052568 Microsoft.UI.Xaml.Controls.Grid PART_LayoutRoot ms-appx:///Microsoft.UI.Xaml/Themes/generic.xaml 0 0 +2844648078552 Microsoft.UI.Xaml.Controls.Image 0 0 +2844648079288 Microsoft.UI.Xaml.Internal.TextBoxView 0 0 +2844648079656 Microsoft.UI.Xaml.Controls.ContentPresenter DescriptionPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2844648081864 Microsoft.UI.Xaml.Controls.ContentPresenter HeaderContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2844648082600 Microsoft.UI.Xaml.Controls.ContentPresenter ClientAreaPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/themeresources.xbf 0 0 +2844648084072 Microsoft.UI.Xaml.Controls.ContentPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/generic.xaml 0 0 +2844648191968 Microsoft.UI.Xaml.Controls.ImageIcon 0 0 +2844648632448 Microsoft.UI.Xaml.Hosting.DesktopWindowXamlSource 0 0 +2844649581448 Microsoft.UI.Xaml.Controls.Button DeleteButton ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2844649584808 Microsoft.UI.Xaml.Controls.Button DeleteButton ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2844649803880 Microsoft.UI.Xaml.Controls.ContentPresenter HeaderContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2844649808296 Microsoft.UI.Xaml.Internal.TextBoxView 0 0 +2844649808664 Microsoft.UI.Xaml.Controls.ContentPresenter DescriptionPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2844649839096 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2844649839496 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2844649925128 Microsoft.UI.Xaml.Controls.ContentPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/generic.xaml 0 0 +2844649925496 Microsoft.UI.Xaml.Controls.ContentPresenter ClientAreaPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/themeresources.xbf 0 0 +2844705804888 Microsoft.UI.Xaml.Controls.Border ms-appx:///CardControl.xaml 21 9 +2844705809816 Microsoft.UI.Xaml.Controls.Border 0 0 +2844706152712 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2844706153112 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2844706154312 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2844706157512 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2844706157912 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2844706158712 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 diff --git a/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Fixtures/census/release-XBindFn.tsv b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Fixtures/census/release-XBindFn.tsv new file mode 100644 index 00000000..782bcb98 --- /dev/null +++ b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Fixtures/census/release-XBindFn.tsv @@ -0,0 +1,34 @@ +handle type name file line col +2117419833776 Microsoft.UI.Xaml.Controls.TitleBar AppTitleBar ms-appx:///MainWindow.xaml 21 59 +2256607101744 Microsoft.UI.Xaml.Hosting.DesktopWindowXamlSource 0 0 +2256607994488 Microsoft.UI.Xaml.WindowChrome 0 0 +2256607995384 Microsoft.UI.Xaml.WindowChrome 0 0 +2256610058184 Microsoft.UI.Xaml.Controls.Frame RootFrame ms-appx:///MainWindow.xaml 32 54 +2256610386184 Microsoft.UI.Xaml.Controls.Border 0 0 +2256724811640 Microsoft.UI.Xaml.Controls.Grid ms-appx:///SecondWindow.xaml 12 24 +2256724813240 Microsoft.UI.Xaml.PopupRoot 0 0 +2256725175048 Microsoft.UI.Xaml.Internal.RootScrollViewer 0 0 +2256725184744 Microsoft.UI.Xaml.Controls.ScrollContentPresenter 0 0 +2256725403912 Microsoft.UI.Xaml.Controls.ContentControl MwSlot ms-appx:///SecondWindow.xaml 36 13 +2256725407112 Microsoft.UI.Xaml.Controls.Grid ms-appx:///MainWindow.xaml 15 6 +2256725409912 Microsoft.UI.Xaml.PopupRoot 0 0 +2256725936736 Microsoft.UI.Xaml.Hosting.DesktopWindowXamlSource 0 0 +2256726406968 SmokeFixture.XBindFnPage ms-appx:///XBindFnPage.xaml 9 5 +2256726415608 Microsoft.UI.Xaml.Controls.TextBlock GreetOut ms-appx:///XBindFnPage.xaml 27 13 +2256726416664 Microsoft.UI.Xaml.Controls.Border 0 0 +2256726418072 Microsoft.UI.Xaml.Controls.TextBlock Marker ms-appx:///XBindFnPage.xaml 32 13 +2256726422648 Microsoft.UI.Xaml.Controls.Border 0 0 +2256727056024 Microsoft.UI.Xaml.Controls.ScrollContentPresenter 0 0 +2256728455000 Microsoft.UI.Xaml.Controls.Image 0 0 +2256728456104 Microsoft.UI.Xaml.Controls.ContentPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/generic.xaml 0 0 +2256728456472 Microsoft.UI.Xaml.Controls.ContentPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/generic.xaml 0 0 +2256728459416 Microsoft.UI.Xaml.Controls.ContentPresenter ClientAreaPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/themeresources.xbf 0 0 +2256728461624 Microsoft.UI.Xaml.Controls.ContentPresenter ClientAreaPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/themeresources.xbf 0 0 +2256728617048 Microsoft.UI.Xaml.Controls.Grid 0 0 +2256728618248 Microsoft.UI.Xaml.Controls.Grid PART_LayoutRoot ms-appx:///Microsoft.UI.Xaml/Themes/generic.xaml 0 0 +2256728635424 Microsoft.UI.Xaml.Controls.ImageIcon 0 0 +2256730400456 Microsoft.UI.Xaml.Controls.Viewbox PART_Icon ms-appx:///Microsoft.UI.Xaml/Themes/generic.xaml 0 0 +2256730406088 Microsoft.UI.Xaml.Controls.TextBlock SecondWindowLabel ms-appx:///SecondWindow.xaml 24 13 +2256730407848 Microsoft.UI.Xaml.Controls.TextBlock PART_TitleText ms-appx:///Microsoft.UI.Xaml/Themes/generic.xaml 0 0 +2256730414872 Microsoft.UI.Xaml.Controls.StackPanel RootPanel ms-appx:///XBindFnPage.xaml 24 9 +2256730811176 Microsoft.UI.Xaml.Internal.RootScrollViewer 0 0 diff --git a/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Fixtures/census/release-nolineinfo-Items.tsv b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Fixtures/census/release-nolineinfo-Items.tsv new file mode 100644 index 00000000..dd11ad6d --- /dev/null +++ b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Fixtures/census/release-nolineinfo-Items.tsv @@ -0,0 +1,248 @@ +handle type name file line col +3013495399704 Microsoft.UI.Xaml.Controls.Border HorizontalPanningThumb ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3013495494280 Microsoft.UI.Xaml.Controls.ScrollContentPresenter ScrollContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152148797560 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152149152224 Microsoft.UI.Xaml.Hosting.DesktopWindowXamlSource 0 0 +3152149157856 Microsoft.UI.Xaml.Hosting.DesktopWindowXamlSource 0 0 +3152150230440 Microsoft.UI.Xaml.WindowChrome 0 0 +3152150516296 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 0 0 +3152150516728 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 0 0 +3152150517160 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 0 0 +3152150518024 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 0 0 +3152150519320 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 0 0 +3152151944216 Microsoft.UI.Xaml.Controls.ItemsStackPanel ms-resource:///Files/Microsoft.UI.Xaml;component/themes/generic.xaml 0 0 +3152152350552 Microsoft.UI.Xaml.Controls.Border 0 0 +3152152351256 Microsoft.UI.Xaml.Controls.Border VerticalPanningThumb ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152266531688 Microsoft.UI.Xaml.Controls.Grid ms-appx:///SecondWindow.xaml 0 0 +3152266533288 Microsoft.UI.Xaml.PopupRoot 0 0 +3152266533688 Microsoft.UI.Xaml.Controls.ContentControl MwSlot ms-appx:///SecondWindow.xaml 0 0 +3152266840120 SmokeFixture.ItemsPage ms-appx:///ItemsPage.xaml 0 0 +3152266874088 Microsoft.UI.Xaml.Controls.ScrollContentPresenter 0 0 +3152266891192 Microsoft.UI.Xaml.Internal.RootScrollViewer 0 0 +3152266917336 Microsoft.UI.Xaml.Controls.Frame RootFrame ms-appx:///MainWindow.xaml 0 0 +3152266964576 Microsoft.UI.Xaml.Controls.TitleBar AppTitleBar ms-appx:///MainWindow.xaml 0 0 +3152267620552 Microsoft.UI.Xaml.PopupRoot 0 0 +3152267620952 Microsoft.UI.Xaml.Controls.Grid ms-appx:///MainWindow.xaml 0 0 +3152268010248 Microsoft.UI.Xaml.Controls.TextBlock ClickReadout ms-appx:///ItemsPage.xaml 0 0 +3152268014472 Microsoft.UI.Xaml.Controls.TextBlock HeaderText ms-appx:///ItemsPage.xaml 0 0 +3152268710264 Microsoft.UI.Xaml.WindowChrome 0 0 +3152268726200 Microsoft.UI.Xaml.Controls.ItemsPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/generic.xaml 0 0 +3152270018504 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 0 0 +3152270020616 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +3152270021672 Microsoft.UI.Xaml.Controls.Viewbox PART_Icon ms-appx:///Microsoft.UI.Xaml/Themes/generic.xaml 0 0 +3152270022024 Microsoft.UI.Xaml.Controls.Border 0 0 +3152270022728 Microsoft.UI.Xaml.Controls.TextBlock PART_TitleText ms-appx:///Microsoft.UI.Xaml/Themes/generic.xaml 0 0 +3152270023432 Microsoft.UI.Xaml.Controls.Border ms-resource:///Files/Microsoft.UI.Xaml;component/themes/generic.xaml 0 0 +3152270023784 Microsoft.UI.Xaml.Controls.TextBlock SecondWindowLabel ms-appx:///SecondWindow.xaml 0 0 +3152270025544 Microsoft.UI.Xaml.Controls.Border Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152270025896 Microsoft.UI.Xaml.Controls.Border ScrollBarSeparator ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152270050984 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152270052824 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152270055400 Microsoft.UI.Xaml.Controls.FontIcon Arrow ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152270056136 Microsoft.UI.Xaml.Controls.FontIcon Arrow ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152270115392 Microsoft.UI.Xaml.Controls.ImageIcon 0 0 +3152270332136 Microsoft.UI.Xaml.Controls.Image 0 0 +3152270334712 Microsoft.UI.Xaml.Controls.ContentPresenter ClientAreaPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/themeresources.xbf 0 0 +3152270335448 Microsoft.UI.Xaml.Controls.ContentPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/generic.xaml 0 0 +3152270455208 Microsoft.UI.Xaml.Controls.Grid 0 0 +3152270456408 Microsoft.UI.Xaml.Controls.Grid PART_LayoutRoot ms-appx:///Microsoft.UI.Xaml/Themes/generic.xaml 0 0 +3152270459608 Microsoft.UI.Xaml.Controls.ContentControl 0 0 +3152270460008 Microsoft.UI.Xaml.Controls.ContentControl 0 0 +3152270460808 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152270551272 Microsoft.UI.Xaml.Controls.ScrollViewer ScrollViewer ms-resource:///Files/Microsoft.UI.Xaml;component/themes/generic.xaml 0 0 +3152270555224 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152270776936 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152270777336 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152270847016 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152270848488 Microsoft.UI.Xaml.Controls.ContentPresenter ClientAreaPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/themeresources.xbf 0 0 +3152270851800 Microsoft.UI.Xaml.Controls.ContentPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/generic.xaml 0 0 +3152270936728 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 0 0 +3152270937208 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 0 0 +3152270937688 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 0 0 +3152270938168 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 0 0 +3152270938648 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 0 0 +3152270939608 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 0 0 +3152270940088 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 0 0 +3152270941528 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 0 0 +3152270942008 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 0 0 +3152270942488 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 0 0 +3152270943928 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 0 0 +3152270950232 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152270972872 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +3152270973576 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +3152270977800 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +3152270978504 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +3152270983432 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +3152270984136 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +3152270984840 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +3152270985544 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +3152270986248 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +3152271072376 Microsoft.UI.Xaml.Controls.Primitives.Thumb VerticalThumb ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152271077752 Microsoft.UI.Xaml.Controls.Primitives.Thumb HorizontalThumb ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152271079304 Microsoft.UI.Xaml.Controls.ScrollContentPresenter 0 0 +3152272209016 Microsoft.UI.Xaml.Controls.Primitives.ScrollBar VerticalScrollBar ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152272209944 Microsoft.UI.Xaml.Controls.Primitives.ScrollBar HorizontalScrollBar ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152272355736 Microsoft.UI.Xaml.Controls.ListView ItemList ms-appx:///ItemsPage.xaml 0 0 +3152272501096 Microsoft.UI.Xaml.Internal.RootScrollViewer 0 0 +3152272596584 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152272648120 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton HorizontalLargeIncrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152272651192 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton VerticalSmallDecrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152272651704 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton VerticalSmallIncrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152272658872 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton VerticalLargeDecrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152272659384 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton HorizontalLargeDecrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152272659896 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton VerticalLargeIncrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152272662456 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton HorizontalSmallDecrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152272663480 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton HorizontalSmallIncrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152272682216 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152272688504 Microsoft.UI.Xaml.Controls.Grid HorizontalPanningRoot ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152272688904 Microsoft.UI.Xaml.Controls.Grid VerticalRoot ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152272689304 Microsoft.UI.Xaml.Controls.Grid Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152272689704 Microsoft.UI.Xaml.Controls.Grid HorizontalRoot ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152272691704 Microsoft.UI.Xaml.Controls.Grid VerticalPanningRoot ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152272694120 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152272695224 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152272695960 Microsoft.UI.Xaml.Shapes.Rectangle HorizontalTrackRect ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152272696328 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152272696696 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152272700008 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152272702584 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152272704056 Microsoft.UI.Xaml.Shapes.Rectangle VerticalTrackRect ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152272704424 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152272707000 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152272707368 Microsoft.UI.Xaml.Shapes.Rectangle ThumbVisual ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152272845800 Microsoft.UI.Xaml.Controls.Grid Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152272911144 Microsoft.UI.Xaml.Controls.Grid Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152272911544 Microsoft.UI.Xaml.Controls.Grid Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152272913144 Microsoft.UI.Xaml.Controls.Grid Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152272914952 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 0 0 +3152272915656 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 0 0 +3152272916008 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +3152272916360 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +3152272916712 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 0 0 +3152272917064 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 0 0 +3152272917416 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 0 0 +3152272917768 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +3152272918120 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +3152272918472 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +3152272918824 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 0 0 +3152272919176 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +3152272919880 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 0 0 +3152272920232 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 0 0 +3152272921992 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +3152272922344 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +3152273208520 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 0 0 +3152273208952 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 0 0 +3152273209384 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 0 0 +3152273209816 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 0 0 +3152273210248 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 0 0 +3152273210680 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 0 0 +3152273211112 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 0 0 +3152273211544 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 0 0 +3152273211976 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 0 0 +3152273212408 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 0 0 +3152273213272 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 0 0 +3152273213704 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 0 0 +3152273214136 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 0 0 +3152273214568 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 0 0 +3152273215000 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 0 0 +3152273215432 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 0 0 +3152273215864 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///ItemsPage.xaml 0 0 +3152342884392 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152342885688 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152342957960 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152342958568 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152342959176 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152342959784 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152342960392 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152342961000 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152342961608 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152342962216 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152342962824 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152342963432 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152342964040 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152342964648 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152342965256 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152343138328 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152343138696 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152343143480 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152343144952 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152343148632 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152343149368 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152343150104 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152343151208 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152343153048 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152343153416 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152343234872 Microsoft.UI.Xaml.Controls.Border 0 0 +3152344014888 Microsoft.UI.Xaml.Controls.Border 0 0 +3152344680648 Microsoft.UI.Xaml.Controls.Border 0 0 +3152344684872 Microsoft.UI.Xaml.Controls.Border 0 0 +3152344686280 Microsoft.UI.Xaml.Controls.Border 0 0 +3152344689096 Microsoft.UI.Xaml.Controls.Border 0 0 +3152344694024 Microsoft.UI.Xaml.Controls.Border 0 0 +3152345956904 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 0 0 +3152345957384 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 0 0 +3152345957864 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 0 0 +3152345958344 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 0 0 +3152345958824 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 0 0 +3152345959304 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 0 0 +3152345960264 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 0 0 +3152345961224 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 0 0 +3152345962184 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 0 0 +3152345962664 Microsoft.UI.Xaml.Controls.Button ms-appx:///ItemsPage.xaml 0 0 +3152346276328 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 0 0 +3152346279496 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +3152346280552 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +3152346282664 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 0 0 +3152346283720 Microsoft.UI.Xaml.Controls.Border 0 0 +3152346285832 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 0 0 +3152346286184 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 0 0 +3152348460088 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +3152348462200 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +3152348463608 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +3152348466424 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +3152348467128 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +3152348468536 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +3152348469240 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +3152348473464 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +3152349569048 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 0 0 +3152349570456 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 0 0 +3152349571160 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +3152349572920 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +3152349573976 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +3152349575736 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 0 0 +3152349576440 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 0 0 +3152349576792 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 0 0 +3152349577496 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +3152349578552 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +3152349578904 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 0 0 +3152349584184 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +3152351171784 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152351185784 Microsoft.UI.Xaml.Controls.Grid 0 0 +3152351186184 Microsoft.UI.Xaml.Controls.Grid 0 0 +3152354111480 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +3152354111832 Microsoft.UI.Xaml.Controls.Border 0 0 +3152354112184 Microsoft.UI.Xaml.Controls.Border 0 0 +3152354114296 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 0 0 +3152354117816 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +3152354118168 Microsoft.UI.Xaml.Controls.Border 0 0 +3152354118872 Microsoft.UI.Xaml.Controls.Border 0 0 +3152354119928 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +3152354120632 Microsoft.UI.Xaml.Controls.Border 0 0 +3152354120984 Microsoft.UI.Xaml.Controls.Border 0 0 +3152354123448 Microsoft.UI.Xaml.Controls.Border 0 0 +3152354125560 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///ItemsPage.xaml 0 0 +3152354126616 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +3152354267336 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +3152354275080 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +3152354275784 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +3152354277192 Microsoft.UI.Xaml.Controls.ListViewItem 0 0 +3152354840296 Microsoft.UI.Xaml.Controls.Primitives.ListViewItemPresenter Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +3152355371448 Microsoft.UI.Xaml.Controls.Border 0 0 +3152355372504 Microsoft.UI.Xaml.Controls.Border 0 0 +3152355376024 Microsoft.UI.Xaml.Controls.Border 0 0 +3152355376376 Microsoft.UI.Xaml.Controls.Border 0 0 +3152355378136 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +3152355378840 Microsoft.UI.Xaml.Controls.Border 0 0 +3152355379544 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +3152355380600 Microsoft.UI.Xaml.Controls.Border 0 0 +3152355386936 Microsoft.UI.Xaml.Controls.Border 0 0 diff --git a/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Fixtures/census/release-nolineinfo-Repeater.tsv b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Fixtures/census/release-nolineinfo-Repeater.tsv new file mode 100644 index 00000000..c60df29e --- /dev/null +++ b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Fixtures/census/release-nolineinfo-Repeater.tsv @@ -0,0 +1,130 @@ +handle type name file line col +1983980219984 Microsoft.UI.Xaml.Hosting.DesktopWindowXamlSource 0 0 +1983980454184 Microsoft.UI.Xaml.WindowChrome 0 0 +1983980715248 Microsoft.UI.Xaml.Controls.TitleBar AppTitleBar ms-appx:///MainWindow.xaml 0 0 +1983983489336 Microsoft.UI.Xaml.Controls.Border 0 0 +1983983513112 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///RepeaterPage.xaml 0 0 +1984096721176 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///RepeaterPage.xaml 0 0 +1984097715688 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///RepeaterPage.xaml 0 0 +1984098117720 Microsoft.UI.Xaml.Controls.ContentControl MwSlot ms-appx:///SecondWindow.xaml 0 0 +1984098118120 Microsoft.UI.Xaml.Controls.Grid ms-appx:///SecondWindow.xaml 0 0 +1984098120120 Microsoft.UI.Xaml.PopupRoot 0 0 +1984098137528 SmokeFixture.RepeaterPage ms-appx:///RepeaterPage.xaml 0 0 +1984098230968 Microsoft.UI.Xaml.Internal.RootScrollViewer 0 0 +1984098232456 Microsoft.UI.Xaml.Controls.ScrollContentPresenter 0 0 +1984098399128 Microsoft.UI.Xaml.Controls.Primitives.ScrollBar VerticalScrollBar ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1984098401912 Microsoft.UI.Xaml.Controls.Primitives.ScrollBar HorizontalScrollBar ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1984098950336 Microsoft.UI.Xaml.Hosting.DesktopWindowXamlSource 0 0 +1984099008696 Microsoft.UI.Xaml.Controls.Frame RootFrame ms-appx:///MainWindow.xaml 0 0 +1984099132808 Microsoft.UI.Xaml.PopupRoot 0 0 +1984099139608 Microsoft.UI.Xaml.Controls.Grid ms-appx:///MainWindow.xaml 0 0 +1984099425576 Microsoft.UI.Xaml.Controls.Button ms-appx:///RepeaterPage.xaml 0 0 +1984099426536 Microsoft.UI.Xaml.Controls.Button ms-appx:///RepeaterPage.xaml 0 0 +1984099427016 Microsoft.UI.Xaml.Controls.Button ms-appx:///RepeaterPage.xaml 0 0 +1984099427496 Microsoft.UI.Xaml.Controls.Button ms-appx:///RepeaterPage.xaml 0 0 +1984099428456 Microsoft.UI.Xaml.Controls.Button ms-appx:///RepeaterPage.xaml 0 0 +1984099429416 Microsoft.UI.Xaml.Controls.Button ms-appx:///RepeaterPage.xaml 0 0 +1984099429896 Microsoft.UI.Xaml.Controls.Button ms-appx:///RepeaterPage.xaml 0 0 +1984099430376 Microsoft.UI.Xaml.Controls.Button ms-appx:///RepeaterPage.xaml 0 0 +1984099431336 Microsoft.UI.Xaml.Controls.Button ms-appx:///RepeaterPage.xaml 0 0 +1984099431816 Microsoft.UI.Xaml.Controls.Button ms-appx:///RepeaterPage.xaml 0 0 +1984099518952 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +1984099522472 Microsoft.UI.Xaml.Controls.TextBlock HeaderText ms-appx:///RepeaterPage.xaml 0 0 +1984099522824 Microsoft.UI.Xaml.Controls.TextBlock ClickReadout ms-appx:///RepeaterPage.xaml 0 0 +1984099524648 Microsoft.UI.Xaml.Controls.ItemsRepeater ItemRepeater ms-appx:///RepeaterPage.xaml 0 0 +1984100104376 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///RepeaterPage.xaml 0 0 +1984100172760 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///RepeaterPage.xaml 0 0 +1984102467080 Microsoft.UI.Xaml.Controls.ScrollContentPresenter 0 0 +1984102645768 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///RepeaterPage.xaml 0 0 +1984102814952 Microsoft.UI.Xaml.Controls.Border HorizontalPanningThumb ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1984102816360 Microsoft.UI.Xaml.Controls.Border Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1984102817064 Microsoft.UI.Xaml.Controls.TextBlock SecondWindowLabel ms-appx:///SecondWindow.xaml 0 0 +1984102819176 Microsoft.UI.Xaml.Controls.Border ScrollBarSeparator ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1984102819528 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///RepeaterPage.xaml 0 0 +1984102820232 Microsoft.UI.Xaml.Controls.TextBlock PART_TitleText ms-appx:///Microsoft.UI.Xaml/Themes/generic.xaml 0 0 +1984102820936 Microsoft.UI.Xaml.Controls.Border VerticalPanningThumb ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1984102821640 Microsoft.UI.Xaml.Controls.Border 0 0 +1984102822344 Microsoft.UI.Xaml.Controls.Viewbox PART_Icon ms-appx:///Microsoft.UI.Xaml/Themes/generic.xaml 0 0 +1984103854696 Microsoft.UI.Xaml.Controls.Primitives.Thumb VerticalThumb ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1984103860968 Microsoft.UI.Xaml.Controls.Primitives.Thumb HorizontalThumb ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1984103905624 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton HorizontalSmallDecrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1984103906136 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton HorizontalLargeIncrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1984103906648 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton HorizontalSmallIncrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1984103907672 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton VerticalSmallDecrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1984103908184 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton VerticalLargeDecrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1984103910232 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton VerticalLargeIncrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1984103911256 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton HorizontalLargeDecrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1984103912792 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton VerticalSmallIncrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1984103943912 Microsoft.UI.Xaml.Controls.ScrollViewer ItemScroller ms-appx:///RepeaterPage.xaml 0 0 +1984103952784 Microsoft.UI.Xaml.Controls.ImageIcon 0 0 +1984103960984 Microsoft.UI.Xaml.WindowChrome 0 0 +1984104174872 Microsoft.UI.Xaml.Internal.RootScrollViewer 0 0 +1984104239208 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +1984104239560 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///RepeaterPage.xaml 0 0 +1984104241320 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///RepeaterPage.xaml 0 0 +1984104243784 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///RepeaterPage.xaml 0 0 +1984104244488 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +1984104244840 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///RepeaterPage.xaml 0 0 +1984104245192 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///RepeaterPage.xaml 0 0 +1984104245544 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +1984104245896 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +1984104246600 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +1984156093608 Microsoft.UI.Xaml.Controls.ContentPresenter ClientAreaPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/themeresources.xbf 0 0 +1984156096184 Microsoft.UI.Xaml.Controls.ContentPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/generic.xaml 0 0 +1984156099496 Microsoft.UI.Xaml.Controls.Image 0 0 +1984156240008 Microsoft.UI.Xaml.Controls.Grid PART_LayoutRoot ms-appx:///Microsoft.UI.Xaml/Themes/generic.xaml 0 0 +1984156240408 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1984156241608 Microsoft.UI.Xaml.Controls.Grid 0 0 +1984156243208 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1984156338216 Microsoft.UI.Xaml.Controls.ScrollContentPresenter ScrollContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1984156598968 Microsoft.UI.Xaml.Shapes.Rectangle HorizontalTrackRect ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1984156601176 Microsoft.UI.Xaml.Shapes.Rectangle VerticalTrackRect ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1984156636360 Microsoft.UI.Xaml.Controls.Grid Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1984156638360 Microsoft.UI.Xaml.Controls.Grid VerticalRoot ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1984156638760 Microsoft.UI.Xaml.Controls.Grid HorizontalPanningRoot ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1984156639160 Microsoft.UI.Xaml.Controls.Grid VerticalPanningRoot ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1984156643560 Microsoft.UI.Xaml.Controls.Grid HorizontalRoot ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1984156720312 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///RepeaterPage.xaml 0 0 +1984156722696 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1984156723432 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1984156724536 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1984156725272 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1984156726008 Microsoft.UI.Xaml.Shapes.Rectangle ThumbVisual ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1984156727848 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1984156729320 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1984156731160 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1984156731528 Microsoft.UI.Xaml.Controls.ContentPresenter ClientAreaPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/themeresources.xbf 0 0 +1984156731896 Microsoft.UI.Xaml.Controls.ContentPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/generic.xaml 0 0 +1984156734840 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1984156766808 Microsoft.UI.Xaml.Controls.Grid Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1984156769208 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1984156770408 Microsoft.UI.Xaml.Controls.Grid Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1984156771208 Microsoft.UI.Xaml.Controls.Grid Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1984156773208 Microsoft.UI.Xaml.Controls.Grid Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1984156895256 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///RepeaterPage.xaml 0 0 +1984156895688 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///RepeaterPage.xaml 0 0 +1984156896120 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///RepeaterPage.xaml 0 0 +1984156897848 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///RepeaterPage.xaml 0 0 +1984156898280 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///RepeaterPage.xaml 0 0 +1984156995704 Microsoft.UI.Xaml.Controls.Grid 0 0 +1984156996104 Microsoft.UI.Xaml.Controls.Grid 0 0 +1984157002904 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1984157691112 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///RepeaterPage.xaml 0 0 +1984157691816 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +1984159598264 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///RepeaterPage.xaml 0 0 +1984159600024 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +1984159601432 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///RepeaterPage.xaml 0 0 +1984159602136 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +1984159602840 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +1984159603896 Microsoft.UI.Xaml.Controls.Border 0 0 +1984159605304 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///RepeaterPage.xaml 0 0 +1984159606008 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +1984159609176 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +1984159609880 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +1984159612344 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///RepeaterPage.xaml 0 0 +1984161884328 Microsoft.UI.Xaml.Controls.Button ms-appx:///RepeaterPage.xaml 0 0 +1984162271768 Microsoft.UI.Xaml.Controls.FontIcon Arrow ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1984162272504 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1984162273240 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1984162283912 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +1984162285384 Microsoft.UI.Xaml.Controls.FontIcon Arrow ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 diff --git a/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Fixtures/census/release-nolineinfo-SmokePage.tsv b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Fixtures/census/release-nolineinfo-SmokePage.tsv new file mode 100644 index 00000000..22b58d28 --- /dev/null +++ b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Fixtures/census/release-nolineinfo-SmokePage.tsv @@ -0,0 +1,101 @@ +handle type name file line col +2167350457896 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2306004566696 Microsoft.UI.Xaml.Internal.RootScrollViewer 0 0 +2306004923760 Microsoft.UI.Xaml.Hosting.DesktopWindowXamlSource 0 0 +2306004951960 Microsoft.UI.Xaml.Controls.ScrollContentPresenter 0 0 +2306004952536 Microsoft.UI.Xaml.Controls.ScrollContentPresenter 0 0 +2306004953688 Microsoft.UI.Xaml.Controls.ScrollContentPresenter ScrollContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2306004955992 Microsoft.UI.Xaml.Controls.ScrollContentPresenter ScrollContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2306005928648 Microsoft.UI.Xaml.WindowChrome 0 0 +2306121021208 Microsoft.UI.Xaml.Controls.Border Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2306121023320 Microsoft.UI.Xaml.Controls.Border 0 0 +2306121984952 Microsoft.UI.Xaml.PopupRoot 0 0 +2306121987352 Microsoft.UI.Xaml.PopupRoot 0 0 +2306122050168 Microsoft.UI.Xaml.Internal.RootScrollViewer 0 0 +2306122100984 SmokeFixture.SmokePage ms-appx:///SmokePage.xaml 0 0 +2306122283864 Microsoft.UI.Xaml.Controls.Frame RootFrame ms-appx:///MainWindow.xaml 0 0 +2306122429600 Microsoft.UI.Xaml.Controls.TitleBar AppTitleBar ms-appx:///MainWindow.xaml 0 0 +2306122970712 Microsoft.UI.Xaml.Controls.Grid ms-appx:///SmokePage.xaml 0 0 +2306122973512 Microsoft.UI.Xaml.Controls.Grid ms-appx:///MainWindow.xaml 0 0 +2306123484312 Microsoft.UI.Xaml.Controls.Button GoButton ms-appx:///SmokePage.xaml 0 0 +2306123485800 Microsoft.UI.Xaml.Controls.TextBlock BoundText ms-appx:///SmokePage.xaml 0 0 +2306123487208 Microsoft.UI.Xaml.Controls.Border AttachedProbe ms-appx:///SmokePage.xaml 0 0 +2306123488264 Microsoft.UI.Xaml.Controls.TextBlock Title ms-appx:///SmokePage.xaml 0 0 +2306123489320 Microsoft.UI.Xaml.Controls.Border BorderElement ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2306123490376 Microsoft.UI.Xaml.Controls.TextBlock PlaceholderTextContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2306127545240 Microsoft.UI.Xaml.Controls.Primitives.ScrollBar HorizontalScrollBar ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2306127546168 Microsoft.UI.Xaml.Controls.Primitives.ScrollBar VerticalScrollBar ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2306127549880 Microsoft.UI.Xaml.Controls.Primitives.ScrollBar VerticalScrollBar ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2306127552664 Microsoft.UI.Xaml.Controls.Primitives.ScrollBar HorizontalScrollBar ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2306127947592 Microsoft.UI.Xaml.WindowChrome 0 0 +2306127979256 Microsoft.UI.Xaml.Controls.ScrollViewer Scroller ms-appx:///SmokePage.xaml 0 0 +2306127983560 Microsoft.UI.Xaml.Controls.TextBox ScratchInput ms-appx:///SmokePage.xaml 0 0 +2306128181536 Microsoft.UI.Xaml.Controls.ImageIcon 0 0 +2306128233688 Microsoft.UI.Xaml.Controls.ItemsRepeater Repeater ms-appx:///SmokePage.xaml 0 0 +2306128247416 Microsoft.UI.Xaml.Controls.Border VerticalPanningThumb ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2306128248472 Microsoft.UI.Xaml.Controls.TextBlock SecondWindowLabel ms-appx:///SecondWindow.xaml 0 0 +2306128248824 Microsoft.UI.Xaml.Controls.Viewbox PART_Icon ms-appx:///Microsoft.UI.Xaml/Themes/generic.xaml 0 0 +2306128250936 Microsoft.UI.Xaml.Controls.TextBlock PART_TitleText ms-appx:///Microsoft.UI.Xaml/Themes/generic.xaml 0 0 +2306128251640 Microsoft.UI.Xaml.Controls.Border Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2306128253400 Microsoft.UI.Xaml.Controls.Border ScrollBarSeparator ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2306128253752 Microsoft.UI.Xaml.Controls.Border 0 0 +2306128254808 Microsoft.UI.Xaml.Controls.Border HorizontalPanningThumb ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2306128271664 Microsoft.UI.Xaml.Hosting.DesktopWindowXamlSource 0 0 +2306128382792 Microsoft.UI.Xaml.Controls.Primitives.Thumb VerticalThumb ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2306128385480 Microsoft.UI.Xaml.Controls.Primitives.Thumb HorizontalThumb ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2306128484264 Microsoft.UI.Xaml.Controls.ContentPresenter DescriptionPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2306128487944 Microsoft.UI.Xaml.Internal.TextBoxView 0 0 +2306128489416 Microsoft.UI.Xaml.Controls.ContentPresenter HeaderContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2306128493464 Microsoft.UI.Xaml.Controls.ContentPresenter ClientAreaPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/themeresources.xbf 0 0 +2306128493832 Microsoft.UI.Xaml.Controls.ContentPresenter ContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2306128495672 Microsoft.UI.Xaml.Controls.ContentPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/generic.xaml 0 0 +2306128499656 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2306128502456 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2306128505656 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2306128648600 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///SmokePage.xaml 0 0 +2306128649304 Microsoft.UI.Xaml.Controls.Border ScrollBarSeparator ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2306128652120 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///SmokePage.xaml 0 0 +2306128652824 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///SmokePage.xaml 0 0 +2306128653528 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2306128655288 Microsoft.UI.Xaml.Controls.TextBlock ms-appx:///SmokePage.xaml 0 0 +2306191631016 Microsoft.UI.Xaml.Controls.ContentControl MwSlot ms-appx:///SecondWindow.xaml 0 0 +2306191633416 Microsoft.UI.Xaml.Controls.Grid 0 0 +2306191634216 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2306191635816 Microsoft.UI.Xaml.Controls.Grid ms-appx:///SecondWindow.xaml 0 0 +2306191637016 Microsoft.UI.Xaml.Controls.Grid PART_LayoutRoot ms-appx:///Microsoft.UI.Xaml/Themes/generic.xaml 0 0 +2306191702136 Microsoft.UI.Xaml.Controls.ContentPresenter ClientAreaPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/themeresources.xbf 0 0 +2306191706184 Microsoft.UI.Xaml.Controls.Image 0 0 +2306191706920 Microsoft.UI.Xaml.Controls.ContentPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/generic.xaml 0 0 +2306191728312 Microsoft.UI.Xaml.Controls.Button DeleteButton ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2306192006808 Microsoft.UI.Xaml.Controls.Grid HorizontalPanningRoot ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2306192007208 Microsoft.UI.Xaml.Controls.Grid VerticalPanningRoot ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2306192007608 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2306192008808 Microsoft.UI.Xaml.Controls.Grid Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2306192012408 Microsoft.UI.Xaml.Controls.Grid VerticalRoot ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2306192013208 Microsoft.UI.Xaml.Controls.Grid HorizontalRoot ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2306192278952 Microsoft.UI.Xaml.Shapes.Rectangle HorizontalTrackRect ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2306192279320 Microsoft.UI.Xaml.Shapes.Rectangle VerticalTrackRect ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2306192333416 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton HorizontalLargeDecrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2306192333928 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton VerticalSmallDecrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2306192334440 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton VerticalLargeIncrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2306192335464 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton VerticalSmallIncrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2306192338024 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton HorizontalLargeIncrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2306192338536 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton VerticalLargeDecrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2306192339048 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton HorizontalSmallIncrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2306192340072 Microsoft.UI.Xaml.Controls.Primitives.RepeatButton HorizontalSmallDecrease ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2306192461992 Microsoft.UI.Xaml.Controls.ScrollViewer ContentElement ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2306192506776 Microsoft.UI.Xaml.Controls.Grid Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2306192507576 Microsoft.UI.Xaml.Controls.Grid Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2306192509176 Microsoft.UI.Xaml.Controls.Grid Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2306192511976 Microsoft.UI.Xaml.Controls.Grid Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2306197226664 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2306197229128 Microsoft.UI.Xaml.Controls.Border 0 0 +2306197231592 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2306197253000 Microsoft.UI.Xaml.Controls.Grid 0 0 +2306197254600 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2306197259000 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2306197260200 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2306197265400 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2306197267800 Microsoft.UI.Xaml.Controls.Grid 0 0 +2306197313144 Microsoft.UI.Xaml.Controls.FontIcon Arrow ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2306197314248 Microsoft.UI.Xaml.Controls.FontIcon Arrow ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 diff --git a/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Fixtures/census/release-nolineinfo-UcHost.tsv b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Fixtures/census/release-nolineinfo-UcHost.tsv new file mode 100644 index 00000000..29c9d179 --- /dev/null +++ b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Fixtures/census/release-nolineinfo-UcHost.tsv @@ -0,0 +1,72 @@ +handle type name file line col +2303388414592 Microsoft.UI.Xaml.Hosting.DesktopWindowXamlSource 0 0 +2303389223608 Microsoft.UI.Xaml.Controls.ScrollContentPresenter ScrollContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2303389506696 Microsoft.UI.Xaml.WindowChrome 0 0 +2303391715272 Microsoft.UI.Xaml.Controls.Border 0 0 +2303477833368 Microsoft.UI.Xaml.Internal.RootScrollViewer 0 0 +2303477990840 Microsoft.UI.Xaml.PopupRoot 0 0 +2303477994440 Microsoft.UI.Xaml.Controls.Grid ms-appx:///SecondWindow.xaml 0 0 +2303477995640 Microsoft.UI.Xaml.Controls.ContentControl MwSlot ms-appx:///SecondWindow.xaml 0 0 +2303478063536 SmokeFixture.CardControl HostedCard ms-appx:///UcHostPage.xaml 0 0 +2303478067192 SmokeFixture.UcHostPage ms-appx:///UcHostPage.xaml 0 0 +2303478088696 Microsoft.UI.Xaml.Controls.ScrollContentPresenter 0 0 +2303478133848 Microsoft.UI.Xaml.Controls.TextBox CardBox ms-appx:///CardControl.xaml 0 0 +2303478198408 Microsoft.UI.Xaml.Controls.Frame RootFrame ms-appx:///MainWindow.xaml 0 0 +2303478267848 Microsoft.UI.Xaml.WindowChrome 0 0 +2303478872120 Microsoft.UI.Xaml.Controls.Grid ms-appx:///MainWindow.xaml 0 0 +2303478877720 Microsoft.UI.Xaml.PopupRoot 0 0 +2303479223496 Microsoft.UI.Xaml.Controls.Border 0 0 +2303479224552 Microsoft.UI.Xaml.Controls.TextBlock SecondWindowLabel ms-appx:///SecondWindow.xaml 0 0 +2303481143896 Microsoft.UI.Xaml.Controls.TextBox PageBox ms-appx:///UcHostPage.xaml 0 0 +2303482109848 Microsoft.UI.Xaml.Internal.RootScrollViewer 0 0 +2303482112376 Microsoft.UI.Xaml.Controls.ScrollContentPresenter 0 0 +2303482172720 Microsoft.UI.Xaml.Controls.ImageIcon 0 0 +2303482239480 Microsoft.UI.Xaml.Controls.Primitives.ScrollBar HorizontalScrollBar ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2303482240408 Microsoft.UI.Xaml.Controls.Primitives.ScrollBar HorizontalScrollBar ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2303482243192 Microsoft.UI.Xaml.Controls.Primitives.ScrollBar VerticalScrollBar ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2303482244120 Microsoft.UI.Xaml.Controls.Primitives.ScrollBar VerticalScrollBar ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2303482263432 Microsoft.UI.Xaml.Controls.StackPanel ms-appx:///UcHostPage.xaml 0 0 +2303482279704 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2303482280504 Microsoft.UI.Xaml.Controls.Grid 0 0 +2303482281704 Microsoft.UI.Xaml.Controls.Grid PART_LayoutRoot ms-appx:///Microsoft.UI.Xaml/Themes/generic.xaml 0 0 +2303482286504 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2303482293272 Microsoft.UI.Xaml.Controls.Button DeleteButton ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2303482293752 Microsoft.UI.Xaml.Controls.Button DeleteButton ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2303482300728 Microsoft.UI.Xaml.Controls.ContentPresenter ClientAreaPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/themeresources.xbf 0 0 +2303482301096 Microsoft.UI.Xaml.Controls.Image 0 0 +2303482303672 Microsoft.UI.Xaml.Controls.ContentPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/generic.xaml 0 0 +2303482549192 Microsoft.UI.Xaml.Controls.ScrollViewer ContentElement ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2303482610568 Microsoft.UI.Xaml.Controls.ContentPresenter HeaderContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2303482612040 Microsoft.UI.Xaml.Controls.ContentPresenter DescriptionPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2303482612408 Microsoft.UI.Xaml.Internal.TextBoxView 0 0 +2303482617928 Microsoft.UI.Xaml.Internal.TextBoxView 0 0 +2303482762312 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2303482763112 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2303482837432 Microsoft.UI.Xaml.Controls.ContentPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/generic.xaml 0 0 +2303482841848 Microsoft.UI.Xaml.Controls.ContentPresenter ClientAreaPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/themeresources.xbf 0 0 +2303482844424 Microsoft.UI.Xaml.Controls.ContentPresenter DescriptionPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2303482845160 Microsoft.UI.Xaml.Controls.ContentPresenter HeaderContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2303482866248 Microsoft.UI.Xaml.Controls.ScrollContentPresenter ScrollContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2303483442928 Microsoft.UI.Xaml.Hosting.DesktopWindowXamlSource 0 0 +2303483729944 Microsoft.UI.Xaml.Controls.ScrollViewer ContentElement ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2303483834184 Microsoft.UI.Xaml.Controls.TextBlock PlaceholderTextContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2303483835240 Microsoft.UI.Xaml.Controls.Border Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2303483835592 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2303483835944 Microsoft.UI.Xaml.Controls.Border ScrollBarSeparator ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2303483837352 Microsoft.UI.Xaml.Controls.Viewbox PART_Icon ms-appx:///Microsoft.UI.Xaml/Themes/generic.xaml 0 0 +2303483837704 Microsoft.UI.Xaml.Controls.Border ScrollBarSeparator ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2303483838408 Microsoft.UI.Xaml.Controls.TextBlock 0 0 +2303483838760 Microsoft.UI.Xaml.Controls.Border BorderElement ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2303483839464 Microsoft.UI.Xaml.Controls.Border BorderElement ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2303483839816 Microsoft.UI.Xaml.Controls.TextBlock PART_TitleText ms-appx:///Microsoft.UI.Xaml/Themes/generic.xaml 0 0 +2303483840520 Microsoft.UI.Xaml.Controls.TextBlock PlaceholderTextContentPresenter ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2303483840872 Microsoft.UI.Xaml.Controls.Border Root ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2303560060024 Microsoft.UI.Xaml.Controls.Border 0 0 +2303560062488 Microsoft.UI.Xaml.Controls.Border ms-appx:///CardControl.xaml 0 0 +2303560250904 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2303560251304 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2303560253704 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2303560254904 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2303560255304 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2303560257304 Microsoft.UI.Xaml.Controls.Grid ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml 0 0 +2303888698576 Microsoft.UI.Xaml.Controls.TitleBar AppTitleBar ms-appx:///MainWindow.xaml 0 0 diff --git a/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Fixtures/census/release-nolineinfo-XBindFn.tsv b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Fixtures/census/release-nolineinfo-XBindFn.tsv new file mode 100644 index 00000000..5879f742 --- /dev/null +++ b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Fixtures/census/release-nolineinfo-XBindFn.tsv @@ -0,0 +1,34 @@ +handle type name file line col +1893219687776 Microsoft.UI.Xaml.Hosting.DesktopWindowXamlSource 0 0 +1893220267704 Microsoft.UI.Xaml.Controls.ScrollContentPresenter 0 0 +1893220395160 Microsoft.UI.Xaml.WindowChrome 0 0 +1893222762136 Microsoft.UI.Xaml.Controls.ContentPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/generic.xaml 0 0 +1893222813088 Microsoft.UI.Xaml.Hosting.DesktopWindowXamlSource 0 0 +1893307707736 Microsoft.UI.Xaml.Controls.Border 0 0 +1893308246792 Microsoft.UI.Xaml.Controls.Grid ms-appx:///SecondWindow.xaml 0 0 +1893308252792 Microsoft.UI.Xaml.PopupRoot 0 0 +1893308328056 SmokeFixture.XBindFnPage ms-appx:///XBindFnPage.xaml 0 0 +1893308533240 Microsoft.UI.Xaml.Controls.StackPanel RootPanel ms-appx:///XBindFnPage.xaml 0 0 +1893308873336 Microsoft.UI.Xaml.WindowChrome 0 0 +1893308874592 Microsoft.UI.Xaml.Controls.TitleBar AppTitleBar ms-appx:///MainWindow.xaml 0 0 +1893308923016 Microsoft.UI.Xaml.Internal.RootScrollViewer 0 0 +1893309055512 Microsoft.UI.Xaml.Controls.ScrollContentPresenter 0 0 +1893309143320 Microsoft.UI.Xaml.Controls.Frame RootFrame ms-appx:///MainWindow.xaml 0 0 +1893309705544 Microsoft.UI.Xaml.Controls.ContentControl MwSlot ms-appx:///SecondWindow.xaml 0 0 +1893309707544 Microsoft.UI.Xaml.PopupRoot 0 0 +1893309709144 Microsoft.UI.Xaml.Controls.Grid ms-appx:///MainWindow.xaml 0 0 +1893310201720 Microsoft.UI.Xaml.Controls.Border 0 0 +1893310203480 Microsoft.UI.Xaml.Controls.TextBlock GreetOut ms-appx:///XBindFnPage.xaml 0 0 +1893310207000 Microsoft.UI.Xaml.Controls.TextBlock Marker ms-appx:///XBindFnPage.xaml 0 0 +1893312325048 Microsoft.UI.Xaml.Controls.Image 0 0 +1893312326520 Microsoft.UI.Xaml.Controls.ContentPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/generic.xaml 0 0 +1893312329832 Microsoft.UI.Xaml.Controls.ContentPresenter ClientAreaPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/themeresources.xbf 0 0 +1893312332408 Microsoft.UI.Xaml.Controls.ContentPresenter ClientAreaPresenter ms-resource:///Files/Microsoft.UI.Xaml;component/themes/themeresources.xbf 0 0 +1893312504824 Microsoft.UI.Xaml.Controls.Grid PART_LayoutRoot ms-appx:///Microsoft.UI.Xaml/Themes/generic.xaml 0 0 +1893312510824 Microsoft.UI.Xaml.Controls.Grid 0 0 +1893312535248 Microsoft.UI.Xaml.Controls.ImageIcon 0 0 +1893314729128 Microsoft.UI.Xaml.Internal.RootScrollViewer 0 0 +1893314732808 Microsoft.UI.Xaml.Controls.Viewbox PART_Icon ms-appx:///Microsoft.UI.Xaml/Themes/generic.xaml 0 0 +1893314733512 Microsoft.UI.Xaml.Controls.TextBlock PART_TitleText ms-appx:///Microsoft.UI.Xaml/Themes/generic.xaml 0 0 +1893314735976 Microsoft.UI.Xaml.Controls.Border 0 0 +1893314736328 Microsoft.UI.Xaml.Controls.TextBlock SecondWindowLabel ms-appx:///SecondWindow.xaml 0 0 diff --git a/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Gate1EvaluatorTests.cs b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Gate1EvaluatorTests.cs new file mode 100644 index 00000000..1e12d272 --- /dev/null +++ b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Gate1EvaluatorTests.cs @@ -0,0 +1,139 @@ +using WinApp.DevTools.Provenance.Census; + +namespace WinApp.DevTools.Provenance.Tests; + +/// Tests for — the §5 kill-criteria decision logic. +[TestClass] +public sealed class Gate1EvaluatorTests +{ + [TestMethod] + public void Meeting_both_floors_with_no_false_confident_is_GO() + { + CensusResult census = TestData.Result( + TestData.Config("release", releaseFamily: true, strips: false, + total: 100, sourceBackedTotal: 10, sourceBackedResolved: 10, + templatedResolved: 5, generatedTotal: 10, falseConfident: 0)); + + Gate1Report report = Gate1Evaluator.Evaluate(census); + + Assert.AreEqual(Gate1Verdict.Go, report.Verdict); + Assert.IsTrue(report.IsPassing); + Assert.AreEqual("release", report.EvaluatedConfigLabel); + } + + [TestMethod] + public void Source_backed_below_floor_is_CONDITIONAL() + { + CensusResult census = TestData.Result( + TestData.Config("release", releaseFamily: true, strips: false, + total: 100, sourceBackedTotal: 10, sourceBackedResolved: 5, // 50% < 70% + templatedResolved: 5, generatedTotal: 10, falseConfident: 0)); + + Gate1Report report = Gate1Evaluator.Evaluate(census); + + Assert.AreEqual(Gate1Verdict.Conditional, report.Verdict); + Assert.IsFalse(report.IsPassing); + } + + [TestMethod] + public void Templated_below_floor_is_CONDITIONAL() + { + CensusResult census = TestData.Result( + TestData.Config("release", releaseFamily: true, strips: false, + total: 100, sourceBackedTotal: 10, sourceBackedResolved: 10, + templatedResolved: 3, generatedTotal: 10, falseConfident: 0)); // 30% < 40% + + Gate1Report report = Gate1Evaluator.Evaluate(census); + + Assert.AreEqual(Gate1Verdict.Conditional, report.Verdict); + } + + [TestMethod] + public void Any_false_confident_is_an_automatic_KILL() + { + CensusResult census = TestData.Result( + TestData.Config("release", releaseFamily: true, strips: false, + total: 100, sourceBackedTotal: 10, sourceBackedResolved: 10, + templatedResolved: 9, generatedTotal: 10, falseConfident: 1)); // otherwise perfect + + Gate1Report report = Gate1Evaluator.Evaluate(census); + + Assert.AreEqual(Gate1Verdict.Kill, report.Verdict); + Assert.AreEqual(1, report.FalseConfidentTotal); + } + + [TestMethod] + public void False_confident_in_any_config_kills_even_if_release_is_clean() + { + CensusResult census = TestData.Result( + TestData.Config("release", releaseFamily: true, strips: false, + total: 100, sourceBackedTotal: 10, sourceBackedResolved: 10, + templatedResolved: 9, generatedTotal: 10, falseConfident: 0), + TestData.Config("release-nolineinfo", releaseFamily: true, strips: true, + total: 100, sourceBackedTotal: 10, sourceBackedResolved: 0, + templatedResolved: 9, generatedTotal: 10, falseConfident: 2)); + + Gate1Report report = Gate1Evaluator.Evaluate(census); + + Assert.AreEqual(Gate1Verdict.Kill, report.Verdict); + Assert.AreEqual(2, report.FalseConfidentTotal); + } + + [TestMethod] + public void Zero_source_backed_resolution_in_release_is_a_KILL() + { + CensusResult census = TestData.Result( + TestData.Config("release", releaseFamily: true, strips: false, + total: 100, sourceBackedTotal: 10, sourceBackedResolved: 0, // select-to-source broken + templatedResolved: 9, generatedTotal: 10, falseConfident: 0)); + + Gate1Report report = Gate1Evaluator.Evaluate(census); + + Assert.AreEqual(Gate1Verdict.Kill, report.Verdict); + } + + [TestMethod] + public void No_release_family_config_is_INCONCLUSIVE() + { + CensusResult census = TestData.Result( + TestData.Config("debug", releaseFamily: false, strips: false, + total: 100, sourceBackedTotal: 10, sourceBackedResolved: 10, + templatedResolved: 9, generatedTotal: 10, falseConfident: 0)); + + Gate1Report report = Gate1Evaluator.Evaluate(census); + + Assert.AreEqual(Gate1Verdict.Inconclusive, report.Verdict); + } + + [TestMethod] + public void The_stripped_probe_is_never_the_arbiter_release_is_preferred() + { + // Only difference: release passes, release-nolineinfo would fail. The evaluator must judge release. + CensusResult census = TestData.Result( + TestData.Config("release-nolineinfo", releaseFamily: true, strips: true, + total: 100, sourceBackedTotal: 10, sourceBackedResolved: 0, + templatedResolved: 5, generatedTotal: 10, falseConfident: 0), + TestData.Config("release", releaseFamily: true, strips: false, + total: 100, sourceBackedTotal: 10, sourceBackedResolved: 10, + templatedResolved: 5, generatedTotal: 10, falseConfident: 0)); + + Gate1Report report = Gate1Evaluator.Evaluate(census); + + Assert.AreEqual(Gate1Verdict.Go, report.Verdict); + Assert.AreEqual("release", report.EvaluatedConfigLabel); + } + + [TestMethod] + public void Packaged_is_judged_when_no_plain_release_is_present() + { + CensusResult census = TestData.Result( + TestData.Config("packaged", releaseFamily: true, strips: false, + total: 100, sourceBackedTotal: 10, sourceBackedResolved: 8, + templatedResolved: 5, generatedTotal: 10, falseConfident: 0)); + + Gate1Report report = Gate1Evaluator.Evaluate(census); + + Assert.AreEqual(Gate1Verdict.Go, report.Verdict); + Assert.AreEqual("packaged", report.EvaluatedConfigLabel); + } +} diff --git a/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Gate1StandingCheckTests.cs b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Gate1StandingCheckTests.cs new file mode 100644 index 00000000..36a3a6a7 --- /dev/null +++ b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/Gate1StandingCheckTests.cs @@ -0,0 +1,77 @@ +using WinApp.DevTools.Provenance.Census; + +namespace WinApp.DevTools.Provenance.Tests; + +/// +/// The standing Gate-1 check: the kill-criteria (provenance spec §5) encoded as an always-on +/// test over the committed reference corpus. If a future change to the grader or aggregator regresses +/// source resolution or — critically — produces a single false-confident answer, this test fails and +/// the pipeline stops. It is the CI-runnable half of the census that needs no desktop. +/// +[TestClass] +public sealed class Gate1StandingCheckTests +{ + private static CensusResult _census = null!; + private static Gate1Report _gate = null!; + + [ClassInitialize] + public static void Init(TestContext _) + { + IReadOnlyList files = CensusTsvReader.ReadDirectory(Fixtures.CensusDir); + _census = new CensusAggregator().Aggregate(files); + _gate = Gate1Evaluator.Evaluate(_census); + } + + [TestMethod] + public void Reference_corpus_is_complete() + { + Assert.AreEqual(Fixtures.ExpectedTsvCount, _census.Pages.Count); + Assert.IsTrue(_census.Configs.Count >= 3, "expect debug, release and release-nolineinfo"); + } + + [TestMethod] + public void Gate1_verdict_is_GO() + { + Assert.AreEqual(Gate1Verdict.Go, _gate.Verdict, string.Join(" ", _gate.Reasons)); + Assert.AreEqual("release", _gate.EvaluatedConfigLabel); + } + + [TestMethod] + public void Zero_false_confident_across_the_whole_corpus() + { + Assert.AreEqual(0, _gate.FalseConfidentTotal); + foreach (ConfigCensus c in _census.Configs) + { + Assert.AreEqual(0, c.FalseConfident, $"config '{c.Config.Label}'"); + } + } + + [TestMethod] + public void Release_meets_the_source_backed_floor() + { + ConfigCensus release = _census.ForLabel("release")!; + Assert.IsTrue( + release.SourceBackedResolvedPct >= Gate1Evaluator.SourceBackedFloorPct, + $"source-backed resolved {release.SourceBackedResolvedPct}% must be >= {Gate1Evaluator.SourceBackedFloorPct}%"); + } + + [TestMethod] + public void Release_meets_the_templated_floor() + { + ConfigCensus release = _census.ForLabel("release")!; + Assert.IsTrue( + release.TemplatedToTemplatePct >= Gate1Evaluator.TemplatedFloorPct, + $"templated-to-template {release.TemplatedToTemplatePct}% must be >= {Gate1Evaluator.TemplatedFloorPct}%"); + } + + [TestMethod] + public void Report_renders_without_forbidden_labels() + { + string md = CensusReport.ToMarkdown(_census, _gate); + string json = CensusReport.ToJson(_census, _gate); + + Assert.IsTrue(md.Contains("Source-resolution census", StringComparison.Ordinal)); + Assert.IsFalse(md.Contains("RT1", StringComparison.Ordinal), "scrubbed reports must not carry internal probe labels"); + Assert.IsTrue(json.Contains("\"verdict\": \"Go\"", StringComparison.Ordinal)); + } +} diff --git a/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/GraderFixtureTests.cs b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/GraderFixtureTests.cs new file mode 100644 index 00000000..645293b1 --- /dev/null +++ b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/GraderFixtureTests.cs @@ -0,0 +1,233 @@ +namespace WinApp.DevTools.Provenance.Tests; + +/// +/// Unit tests for — the honesty model of provenance spec §4. +/// Each test pins one row of the grading decision table; the "false-confident prohibition" tests +/// pin the prime directive that nothing but genuinely authored markup can earn confidence. +/// +[TestClass] +public sealed class GraderFixtureTests +{ + private static readonly SourceProvenanceGrader Grader = new(); + + private static SourceResolutionInput Input( + string? file = null, + int line = 0, + int column = 0, + string? name = null, + CensusConfig? config = null, + SourceKind? kindHint = null, + bool reachable = true, + IReadOnlyList? candidates = null) => new() + { + File = file, + Line = line, + Column = column, + Name = name, + Config = config ?? CensusConfig.Debug, + KindHint = kindHint, + TargetReachable = reachable, + CandidateSpans = candidates, + }; + + // ---- source-backed (the only kind allowed confidence) ---- + + [TestMethod] + public void SourceBacked_named_with_line_is_exact() + { + GradedSource g = Grader.Grade(Input(file: "ms-appx:///SmokePage.xaml", line: 44, column: 58, name: "RootPanel")); + + Assert.AreEqual(SourceKind.SourceBacked, g.SourceKind); + Assert.AreEqual(Confidence.Exact, g.Confidence); + Assert.IsNull(g.ReasonCode); + Assert.AreEqual("ms-appx:///SmokePage.xaml", g.Uri); + Assert.AreEqual(44, g.Line); + Assert.AreEqual(58, g.Column); + Assert.IsTrue(g.IsConfident); + } + + [TestMethod] + public void SourceBacked_unnamed_with_line_is_exact() + { + GradedSource g = Grader.Grade(Input(file: "ms-appx:///ItemsPage.xaml", line: 44, column: 58)); + + Assert.AreEqual(SourceKind.SourceBacked, g.SourceKind); + Assert.AreEqual(Confidence.Exact, g.Confidence); + Assert.AreEqual(44, g.Line); + } + + [TestMethod] + public void SourceBacked_stripped_line_in_release_is_none_with_release_reason() + { + GradedSource g = Grader.Grade(Input(file: "ms-appx:///SmokePage.xaml", line: 0, config: CensusConfig.ReleaseNoLineInfo)); + + Assert.AreEqual(SourceKind.SourceBacked, g.SourceKind); + Assert.AreEqual(Confidence.None, g.Confidence); + Assert.AreEqual(ReasonCode.ReleaseNoLineInfo, g.ReasonCode); + Assert.AreEqual("ms-appx:///SmokePage.xaml", g.Uri, "we can still name the file, just not the line"); + Assert.IsNull(g.Line); + Assert.IsFalse(g.IsConfident); + } + + [TestMethod] + public void SourceBacked_missing_line_in_debug_is_none_with_missing_reason() + { + GradedSource g = Grader.Grade(Input(file: "ms-appx:///SmokePage.xaml", line: 0, config: CensusConfig.Debug)); + + Assert.AreEqual(SourceKind.SourceBacked, g.SourceKind); + Assert.AreEqual(Confidence.None, g.Confidence); + Assert.AreEqual(ReasonCode.SourceInfoMissing, g.ReasonCode); + Assert.IsFalse(g.IsConfident); + } + + // ---- generated (template / style) ---- + + [TestMethod] + public void Framework_control_template_maps_to_template_never_page() + { + GradedSource g = Grader.Grade(Input(file: "ms-appx:///Microsoft.UI.Xaml/Themes/generic.xaml", line: 12)); + + Assert.AreEqual(SourceKind.TemplateGenerated, g.SourceKind); + Assert.AreEqual(Confidence.Low, g.Confidence); + Assert.AreEqual(ReasonCode.TemplateGenerated, g.ReasonCode); + Assert.AreEqual("ms-appx:///Microsoft.UI.Xaml/Themes/generic.xaml", g.Uri); + Assert.IsFalse(g.IsConfident); + } + + [TestMethod] + public void Framework_theme_style_is_style_generated_low() + { + GradedSource g = Grader.Grade(Input(file: "ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml", line: 0)); + + Assert.AreEqual(SourceKind.StyleGenerated, g.SourceKind); + Assert.AreEqual(Confidence.Low, g.Confidence); + Assert.IsFalse(g.IsConfident); + } + + [TestMethod] + public void App_authored_generic_dictionary_is_template_generated_low() + { + GradedSource g = Grader.Grade(Input(file: "ms-appx:///Themes/generic.xaml", line: 30)); + + Assert.AreEqual(SourceKind.TemplateGenerated, g.SourceKind); + Assert.AreEqual(Confidence.Low, g.Confidence); + Assert.IsFalse(g.IsConfident); + } + + [TestMethod] + public void App_authored_dictionaries_can_be_treated_as_authored_when_policy_disabled() + { + SourceProvenanceGrader lenient = new(new ProvenanceGradingOptions + { + TreatAuthoredTemplateDictionariesAsGenerated = false, + }); + + GradedSource g = lenient.Grade(Input(file: "ms-appx:///Themes/generic.xaml", line: 30)); + + Assert.AreEqual(SourceKind.SourceBacked, g.SourceKind, "with the policy off, an app dictionary is treated as authored markup"); + Assert.AreEqual(Confidence.Exact, g.Confidence); + } + + // ---- runtime-only ---- + + [TestMethod] + public void Empty_file_is_runtime_only_none() + { + GradedSource g = Grader.Grade(Input(file: "", line: 0)); + + Assert.AreEqual(SourceKind.RuntimeOnly, g.SourceKind); + Assert.AreEqual(Confidence.None, g.Confidence); + Assert.AreEqual(ReasonCode.SourceInfoMissing, g.ReasonCode); + Assert.IsFalse(g.HasTarget); + Assert.IsFalse(g.IsConfident); + } + + // ---- ambiguity ---- + + [TestMethod] + public void Multiple_candidates_are_ambiguous_low_and_report_all() + { + List candidates = + [ + new("ms-appx:///A.xaml", 10, 4), + new("ms-appx:///B.xaml", 20, 8), + ]; + + GradedSource g = Grader.Grade(Input(candidates: candidates)); + + Assert.AreEqual(SourceKind.Ambiguous, g.SourceKind); + Assert.AreEqual(Confidence.Low, g.Confidence); + Assert.IsNotNull(g.Candidates); + Assert.AreEqual(2, g.Candidates!.Count); + Assert.IsFalse(g.IsConfident); + } + + // ---- enrichment hints (future live path) ---- + + [TestMethod] + public void Binding_hint_is_binding_generated_low() + { + GradedSource g = Grader.Grade(Input(file: "ms-appx:///ListPage.xaml", line: 5, kindHint: SourceKind.BindingGenerated)); + + Assert.AreEqual(SourceKind.BindingGenerated, g.SourceKind); + Assert.AreEqual(Confidence.Low, g.Confidence); + Assert.IsFalse(g.IsConfident); + } + + [TestMethod] + public void Resource_hint_is_resource_origin_low() + { + GradedSource g = Grader.Grade(Input(file: "ms-appx:///Resources.xaml", line: 3, kindHint: SourceKind.ResourceOrigin)); + + Assert.AreEqual(SourceKind.ResourceOrigin, g.SourceKind); + Assert.AreEqual(Confidence.Low, g.Confidence); + Assert.IsFalse(g.IsConfident); + } + + [TestMethod] + public void Unreachable_target_is_none() + { + GradedSource g = Grader.Grade(Input(file: "ms-appx:///Popup.xaml", line: 9, reachable: false)); + + Assert.AreEqual(SourceKind.Unreachable, g.SourceKind); + Assert.AreEqual(Confidence.None, g.Confidence); + Assert.IsFalse(g.IsConfident); + } + + // ---- the false-confident prohibition (prime directive) ---- + + [TestMethod] + public void FalseConfident_prohibition_framework_with_stray_line_is_never_confident() + { + // A framework element that (wrongly) carries an app-looking line must never be trusted. + GradedSource g = Grader.Grade(Input(file: "ms-appx:///Microsoft.UI.Xaml/Themes/generic.xaml", line: 42, column: 7)); + + Assert.AreNotEqual(Confidence.Exact, g.Confidence); + Assert.AreNotEqual(Confidence.High, g.Confidence); + Assert.IsFalse(g.IsConfident); + Assert.AreNotEqual(SourceKind.SourceBacked, g.SourceKind); + } + + [TestMethod] + public void FalseConfident_prohibition_runtime_hint_with_stray_line_is_never_confident() + { + // Even with a file+line present, an origin the daemon knows is runtime must not be exact. + GradedSource g = Grader.Grade(Input(file: "ms-appx:///SmokePage.xaml", line: 44, kindHint: SourceKind.RuntimeOnly)); + + Assert.AreEqual(SourceKind.RuntimeOnly, g.SourceKind); + Assert.AreEqual(Confidence.None, g.Confidence); + Assert.IsFalse(g.IsConfident); + } + + [TestMethod] + [DataRow("ms-appx:///Microsoft.UI.Xaml/Themes/themeresources.xaml", 5)] + [DataRow("ms-appx:///Microsoft.UI.Xaml/Themes/generic.xaml", 99)] + [DataRow("ms-appx:///Themes/generic.xaml", 12)] + [DataRow("", 77)] + public void No_generated_or_runtime_origin_is_ever_confident(string file, int line) + { + GradedSource g = Grader.Grade(Input(file: file, line: line)); + + Assert.IsFalse(g.IsConfident, $"'{file}' line {line} must not be graded confident"); + } +} diff --git a/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/TestData.cs b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/TestData.cs new file mode 100644 index 00000000..e244d79f --- /dev/null +++ b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/TestData.cs @@ -0,0 +1,42 @@ +using WinApp.DevTools.Provenance.Census; + +namespace WinApp.DevTools.Provenance.Tests; + +/// Builders for synthetic census aggregates used by the Gate-1 tests. +internal static class TestData +{ + public static ConfigCensus Config( + string label, + bool releaseFamily, + bool strips, + int total, + int sourceBackedTotal, + int sourceBackedResolved, + int templatedResolved, + int generatedTotal, + int falseConfident, + IReadOnlyDictionary? counts = null) => new() + { + Config = new CensusConfig(label, strips, releaseFamily), + Total = total, + CountsByKind = counts ?? new Dictionary(), + SourceBackedTotal = sourceBackedTotal, + SourceBackedResolved = sourceBackedResolved, + TemplatedResolved = templatedResolved, + GeneratedTotal = generatedTotal, + FalseConfident = falseConfident, + }; + + public static CensusResult Result(params ConfigCensus[] configs) => new() + { + Configs = configs, + Pages = [], + PageLabels = [], + }; +} + +/// A grader stub that returns a fixed grade, used to prove the aggregator's audit is independent. +internal sealed class StubGrader(GradedSource fixedGrade) : ISourceProvenanceGrader +{ + public GradedSource Grade(SourceResolutionInput input) => fixedGrade; +} diff --git a/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/WinApp.DevTools.Provenance.Tests.csproj b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/WinApp.DevTools.Provenance.Tests.csproj new file mode 100644 index 00000000..9716aff5 --- /dev/null +++ b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance.Tests/WinApp.DevTools.Provenance.Tests.csproj @@ -0,0 +1,18 @@ + + + + false + true + + CA1707;IDE1006 + + + + + + + + + + + diff --git a/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/Census/CensusAggregator.cs b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/Census/CensusAggregator.cs new file mode 100644 index 00000000..ed1a8768 --- /dev/null +++ b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/Census/CensusAggregator.cs @@ -0,0 +1,134 @@ +namespace WinApp.DevTools.Provenance.Census; + +/// +/// Grades every raw census row and aggregates the results by build config and , +/// producing the per-config rates the Gate-1 evaluator judges. The false-confident tally is an +/// independent audit: it re-checks each confident grade against the row's own file rather +/// than trusting the grade, so a future grader regression that mislabels a framework/runtime element +/// as confident is caught here and trips Gate-1. +/// +public sealed class CensusAggregator +{ + private readonly ISourceProvenanceGrader _grader; + + /// Creates an aggregator using the given grader (defaults to ). + public CensusAggregator(ISourceProvenanceGrader? grader = null) => + _grader = grader ?? new SourceProvenanceGrader(); + + /// Aggregates a set of parsed census TSVs into a . + public CensusResult Aggregate(IReadOnlyList files) + { + ArgumentNullException.ThrowIfNull(files); + + List configs = []; + List pages = []; + List configOrder = []; + Dictionary> byConfig = new(StringComparer.OrdinalIgnoreCase); + List pageOrder = []; + HashSet seenPages = new(StringComparer.OrdinalIgnoreCase); + + foreach (CensusTsvFile file in files) + { + string label = file.Config.Label; + if (!byConfig.TryGetValue(label, out List? list)) + { + list = []; + byConfig[label] = list; + configOrder.Add(label); + } + + list.Add(file); + pages.Add(new PageCoverage(file.Config, file.Page, file.FileName, file.Elements.Count, file.Elements.Count > 0)); + if (file.Page.Length > 0 && seenPages.Add(file.Page)) + { + pageOrder.Add(file.Page); + } + } + + foreach (string label in configOrder) + { + configs.Add(AggregateConfig(byConfig[label])); + } + + return new CensusResult + { + Configs = configs, + Pages = pages, + PageLabels = pageOrder, + }; + } + + private ConfigCensus AggregateConfig(List configFiles) + { + CensusConfig config = configFiles[0].Config; + Dictionary counts = []; + int total = 0, sourceBackedTotal = 0, sourceBackedResolved = 0; + int templatedResolved = 0, generatedTotal = 0, falseConfident = 0; + + foreach (CensusTsvFile file in configFiles) + { + foreach (TapElement element in file.Elements) + { + SourceResolutionInput input = SourceResolutionInput.FromTap(element, config); + GradedSource graded = _grader.Grade(input); + + total++; + counts[graded.SourceKind] = counts.GetValueOrDefault(graded.SourceKind) + 1; + + if (graded.SourceKind == SourceKind.SourceBacked) + { + sourceBackedTotal++; + if (graded.Confidence == Confidence.Exact) + { + sourceBackedResolved++; + } + } + + if (IsGenerated(graded.SourceKind)) + { + generatedTotal++; + if (graded.HasTarget) + { + templatedResolved++; + } + } + + if (IsFalseConfident(element, graded)) + { + falseConfident++; + } + } + } + + return new ConfigCensus + { + Config = config, + Total = total, + CountsByKind = counts, + SourceBackedTotal = sourceBackedTotal, + SourceBackedResolved = sourceBackedResolved, + TemplatedResolved = templatedResolved, + GeneratedTotal = generatedTotal, + FalseConfident = falseConfident, + }; + } + + /// Template/style/binding/runtime origins — the "not directly authored" generated population. + private static bool IsGenerated(SourceKind kind) => kind is + SourceKind.TemplateGenerated or + SourceKind.StyleGenerated or + SourceKind.BindingGenerated or + SourceKind.RuntimeOnly; + + /// + /// Independent false-confident audit: a grade is false-confident when it claims + /// exact/high confidence yet the underlying row does not point at the app's own + /// authored markup. This does not trust the grader's own . + /// + public static bool IsFalseConfident(TapElement element, GradedSource graded) + { + ArgumentNullException.ThrowIfNull(element); + ArgumentNullException.ThrowIfNull(graded); + return graded.IsConfident && !SourceFileClassifier.IsAuthoredMarkup(element.File); + } +} diff --git a/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/Census/CensusReport.cs b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/Census/CensusReport.cs new file mode 100644 index 00000000..dbff5fdb --- /dev/null +++ b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/Census/CensusReport.cs @@ -0,0 +1,203 @@ +using System.Globalization; +using System.Text; +using System.Text.Encodings.Web; +using System.Text.Json; +using System.Text.Json.Nodes; + +namespace WinApp.DevTools.Provenance.Census; + +/// +/// Renders an aggregated census + Gate-1 verdict to the published report shapes: a human-readable +/// Markdown summary (aggregated by ) and a machine-readable JSON document. +/// Both are deterministic given the same input so they can be committed as a baseline and diffed. +/// +public static class CensusReport +{ + /// Canonical column order for the per- breakdown. + private static readonly SourceKind[] KindOrder = + [ + SourceKind.SourceBacked, + SourceKind.TemplateGenerated, + SourceKind.StyleGenerated, + SourceKind.BindingGenerated, + SourceKind.RuntimeOnly, + SourceKind.ResourceOrigin, + SourceKind.Ambiguous, + SourceKind.Unreachable, + ]; + + /// Renders the Markdown census report. + public static string ToMarkdown(CensusResult census, Gate1Report gate) + { + ArgumentNullException.ThrowIfNull(census); + ArgumentNullException.ThrowIfNull(gate); + + StringBuilder sb = new(); + sb.AppendLine("# Source-resolution census (Gate 1)"); + sb.AppendLine(); + sb.Append("_Generated ").Append(census.GeneratedUtc.ToString("u", CultureInfo.InvariantCulture)); + if (census.PageLabels.Count > 0) + { + sb.Append(" · pages: ").Append(string.Join(", ", census.PageLabels)); + } + + sb.AppendLine("_"); + sb.AppendLine(); + + sb.Append("**Verdict: ").Append(gate.Verdict.ToString().ToUpperInvariant()).Append("** — ") + .AppendLine(string.Join(" ", gate.Reasons)); + sb.AppendLine(); + + // Gate-1 summary table. + sb.AppendLine("## Gate-1 metrics"); + sb.AppendLine(); + sb.AppendLine("| Config | Total | Source-backed→line % | Templated→template % | False-confident % |"); + sb.AppendLine("|---|--:|--:|--:|--:|"); + foreach (ConfigCensus c in census.Configs) + { + sb.Append("| ").Append(c.Config.Label) + .Append(" | ").Append(c.Total.ToString(CultureInfo.InvariantCulture)) + .Append(" | ").Append(Pct(c.SourceBackedResolvedPct)) + .Append(" | ").Append(Pct(c.TemplatedToTemplatePct)) + .Append(" | ").Append(Pct(c.FalseConfidentPct)) + .AppendLine(" |"); + } + + sb.AppendLine(); + + // Per-SourceKind breakdown. + sb.AppendLine("## Elements by SourceKind"); + sb.AppendLine(); + sb.Append("| Config | Total |"); + foreach (SourceKind kind in KindOrder) + { + sb.Append(' ').Append(kind.ToWire()).Append(" |"); + } + + sb.AppendLine(); + sb.Append("|---|--:|"); + foreach (SourceKind _ in KindOrder) + { + sb.Append("--:|"); + } + + sb.AppendLine(); + foreach (ConfigCensus c in census.Configs) + { + sb.Append("| ").Append(c.Config.Label).Append(" | ").Append(c.Total.ToString(CultureInfo.InvariantCulture)).Append(" |"); + foreach (SourceKind kind in KindOrder) + { + sb.Append(' ').Append(c.Count(kind).ToString(CultureInfo.InvariantCulture)).Append(" |"); + } + + sb.AppendLine(); + } + + sb.AppendLine(); + sb.AppendLine( + "Grades come from the source-provenance grader (spec §4): **source-backed** = the app's own " + + "authored page/UserControl markup (the only kind allowed an exact line); **template/style-generated** " + + "= mapped to a control-template or theme/style definition, never the page; **runtime-only** = no " + + "markup provenance. *Source-backed→line %* is the select-to-source floor; *Templated→template %* is " + + "the fraction of generated elements that still map to a template/style source; *False-confident %* " + + "must be 0."); + sb.AppendLine(); + + // Per-page coverage. + sb.AppendLine("## Per page × config (raw)"); + sb.AppendLine(); + sb.AppendLine("| Config | Page | OK | Elements | TSV |"); + sb.AppendLine("|---|---|:--:|--:|---|"); + Dictionary configIndex = new(StringComparer.OrdinalIgnoreCase); + for (int i = 0; i < census.Configs.Count; i++) + { + configIndex[census.Configs[i].Config.Label] = i; + } + + Dictionary pageIndex = new(StringComparer.OrdinalIgnoreCase); + for (int i = 0; i < census.PageLabels.Count; i++) + { + pageIndex[census.PageLabels[i]] = i; + } + + IEnumerable orderedPages = census.Pages + .OrderBy(p => configIndex.GetValueOrDefault(p.Config.Label, int.MaxValue)) + .ThenBy(p => pageIndex.GetValueOrDefault(p.Page, int.MaxValue)); + foreach (PageCoverage p in orderedPages) + { + sb.Append("| ").Append(p.Config.Label) + .Append(" | ").Append(p.Page) + .Append(" | ").Append(p.Ok ? "✅" : "❌") + .Append(" | ").Append(p.Elements.ToString(CultureInfo.InvariantCulture)) + .Append(" | ").Append(p.FileName) + .AppendLine(" |"); + } + + sb.AppendLine(); + return sb.ToString(); + } + + /// Renders the machine-readable JSON census report. + public static string ToJson(CensusResult census, Gate1Report gate) + { + ArgumentNullException.ThrowIfNull(census); + ArgumentNullException.ThrowIfNull(gate); + + JsonObject configs = []; + foreach (ConfigCensus c in census.Configs) + { + JsonObject kinds = []; + foreach (SourceKind kind in KindOrder) + { + kinds[kind.ToWire()] = c.Count(kind); + } + + configs[c.Config.Label] = new JsonObject + { + ["total"] = c.Total, + ["stripsLineInfo"] = c.Config.StripsLineInfo, + ["releaseFamily"] = c.Config.IsReleaseFamily, + ["sourceKind"] = kinds, + ["sourceBackedTotal"] = c.SourceBackedTotal, + ["sourceBackedResolved"] = c.SourceBackedResolved, + ["sourceBackedResolvedPct"] = Round(c.SourceBackedResolvedPct), + ["templatedResolved"] = c.TemplatedResolved, + ["generatedTotal"] = c.GeneratedTotal, + ["templatedToTemplatePct"] = Round(c.TemplatedToTemplatePct), + ["falseConfident"] = c.FalseConfident, + ["falseConfidentPct"] = Round(c.FalseConfidentPct), + }; + } + + JsonObject root = new() + { + ["generatedUtc"] = census.GeneratedUtc.ToString("o", CultureInfo.InvariantCulture), + ["pages"] = new JsonArray([.. census.PageLabels.Select(static p => JsonValue.Create(p))]), + ["gate1"] = new JsonObject + { + ["verdict"] = gate.Verdict.ToString(), + ["evaluatedConfig"] = gate.EvaluatedConfigLabel, + ["sourceBackedResolvedPct"] = Round(gate.SourceBackedResolvedPct), + ["templatedToTemplatePct"] = Round(gate.TemplatedToTemplatePct), + ["falseConfidentTotal"] = gate.FalseConfidentTotal, + ["thresholds"] = new JsonObject + { + ["sourceBackedFloorPct"] = Gate1Evaluator.SourceBackedFloorPct, + ["templatedFloorPct"] = Gate1Evaluator.TemplatedFloorPct, + }, + ["reasons"] = new JsonArray([.. gate.Reasons.Select(static r => JsonValue.Create(r))]), + }, + ["configs"] = configs, + }; + + return root.ToJsonString(new JsonSerializerOptions + { + WriteIndented = true, + Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping, + }); + } + + private static string Pct(double value) => Round(value).ToString("0.#", CultureInfo.InvariantCulture); + + private static double Round(double value) => Math.Round(value, 1, MidpointRounding.AwayFromZero); +} diff --git a/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/Census/CensusResult.cs b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/Census/CensusResult.cs new file mode 100644 index 00000000..4a9387df --- /dev/null +++ b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/Census/CensusResult.cs @@ -0,0 +1,79 @@ +namespace WinApp.DevTools.Provenance.Census; + +/// +/// The source-resolution census aggregated for a single build config: counts by +/// plus the derived Gate-1 rates. Percentages are computed from the raw +/// counts so callers can compare against the Gate-1 thresholds without rounding drift. +/// +public sealed record ConfigCensus +{ + /// The build config these numbers describe. + public required CensusConfig Config { get; init; } + + /// Total elements observed across all pages for this config. + public required int Total { get; init; } + + /// Element count for every (grader-assigned). + public required IReadOnlyDictionary CountsByKind { get; init; } + + /// Elements graded (the select-to-source population). + public required int SourceBackedTotal { get; init; } + + /// Source-backed elements that resolved to an exact file+line span. + public required int SourceBackedResolved { get; init; } + + /// Generated elements (template/style/binding) that mapped to a template/style definition. + public required int TemplatedResolved { get; init; } + + /// All generated elements (templated + runtime-only) — the templated-to-template denominator. + public required int GeneratedTotal { get; init; } + + /// + /// Elements the audit found confidently graded (exact/high) yet not pointing at the + /// app's own authored markup — i.e. a false-confident answer. MUST stay 0 (Gate-1 kill-criteria). + /// + public required int FalseConfident { get; init; } + + /// Percent of source-backed elements resolved to an exact span (Gate-1 floor: ≥70% in Release). + public double SourceBackedResolvedPct => Percent(SourceBackedResolved, SourceBackedTotal); + + /// Percent of generated elements mapped to a template/style def (Gate-1 floor: ≥40% in Release). + public double TemplatedToTemplatePct => Percent(TemplatedResolved, GeneratedTotal); + + /// Percent of all elements that were false-confident (Gate-1: must be exactly 0%). + public double FalseConfidentPct => Percent(FalseConfident, Total); + + /// Element count for a given kind (0 when absent). + public int Count(SourceKind kind) => CountsByKind.TryGetValue(kind, out int v) ? v : 0; + + private static double Percent(int numerator, int denominator) => + denominator == 0 ? 0d : (double)numerator / denominator * 100d; +} + +/// Whether one fixture page produced any elements under one config (per-page coverage). +/// The build config. +/// The fixture page label. +/// The source TSV file name. +/// Number of elements read. +/// True when at least one element was collected. +public sealed record PageCoverage(CensusConfig Config, string Page, string FileName, int Elements, bool Ok); + +/// The full aggregated census across every config and page. +public sealed record CensusResult +{ + /// Per-config aggregates, in the order configs were first seen. + public required IReadOnlyList Configs { get; init; } + + /// Per-page-per-config coverage rows (for the raw coverage table). + public required IReadOnlyList Pages { get; init; } + + /// Distinct fixture page labels observed. + public required IReadOnlyList PageLabels { get; init; } + + /// When the aggregation was produced. + public DateTimeOffset GeneratedUtc { get; init; } = DateTimeOffset.UtcNow; + + /// The aggregate for a config label, or null when that config was not measured. + public ConfigCensus? ForLabel(string label) => + Configs.FirstOrDefault(c => string.Equals(c.Config.Label, label, StringComparison.OrdinalIgnoreCase)); +} diff --git a/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/Census/CensusTsvReader.cs b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/Census/CensusTsvReader.cs new file mode 100644 index 00000000..4719f766 --- /dev/null +++ b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/Census/CensusTsvReader.cs @@ -0,0 +1,112 @@ +using System.Globalization; + +namespace WinApp.DevTools.Provenance.Census; + +/// +/// A parsed census TSV: the raw element rows plus the build config the file name identified. +/// +/// The build config this file was collected under. +/// The fixture page label (the part of the file name after the config). +/// The source TSV file name (for the per-page coverage report). +/// The parsed element rows. +public sealed record CensusTsvFile( + CensusConfig Config, + string Page, + string FileName, + IReadOnlyList Elements); + +/// +/// Reads raw census TSVs (handle, type, name, file, line, col) emitted by the "reading the +/// UI" collector. File names follow <config>-<page>.tsv; the config is resolved by +/// longest-matching known label so release-nolineinfo-* is not mistaken for release-*. +/// Pure I/O + parsing — no grading (that is the aggregator's job). +/// +public static class CensusTsvReader +{ + private const string ExpectedHeader = "handle\ttype\tname\tfile\tline\tcol"; + + /// Reads and parses every *.tsv in . + public static IReadOnlyList ReadDirectory(string directory) + { + ArgumentException.ThrowIfNullOrWhiteSpace(directory); + if (!Directory.Exists(directory)) + { + throw new DirectoryNotFoundException($"Census TSV directory not found: {directory}"); + } + + List files = []; + foreach (string path in Directory.EnumerateFiles(directory, "*.tsv").OrderBy(static p => p, StringComparer.OrdinalIgnoreCase)) + { + files.Add(ReadFile(path)); + } + + return files; + } + + /// Reads and parses a single census TSV file. + public static CensusTsvFile ReadFile(string path) + { + ArgumentException.ThrowIfNullOrWhiteSpace(path); + string name = Path.GetFileNameWithoutExtension(path); + (CensusConfig config, string page) = SplitConfigAndPage(name); + + List elements = []; + foreach (string line in File.ReadLines(path)) + { + if (line.Length == 0 || IsHeader(line)) + { + continue; + } + + if (TryParseRow(line, out TapElement element)) + { + elements.Add(element); + } + } + + return new CensusTsvFile(config, page, Path.GetFileName(path), elements); + } + + /// + /// Splits a <config>-<page> file stem into its config (by longest known-label + /// prefix) and page. An unknown prefix yields a neutral config labelled with the first segment. + /// + public static (CensusConfig Config, string Page) SplitConfigAndPage(string stem) + { + ArgumentNullException.ThrowIfNull(stem); + foreach (CensusConfig config in CensusConfig.Known) + { + string prefix = config.Label + "-"; + if (stem.StartsWith(prefix, StringComparison.OrdinalIgnoreCase)) + { + return (config, stem[prefix.Length..]); + } + } + + int dash = stem.IndexOf('-', StringComparison.Ordinal); + return dash > 0 + ? (CensusConfig.FromLabel(stem[..dash]), stem[(dash + 1)..]) + : (CensusConfig.FromLabel(stem), string.Empty); + } + + private static bool IsHeader(string line) => + line.StartsWith("handle\t", StringComparison.OrdinalIgnoreCase) + || line.Equals(ExpectedHeader, StringComparison.OrdinalIgnoreCase); + + private static bool TryParseRow(string line, out TapElement element) + { + element = default!; + string[] parts = line.Split('\t'); + if (parts.Length < 6) + { + return false; + } + + long handle = long.TryParse(parts[0], NumberStyles.Integer, CultureInfo.InvariantCulture, out long h) ? h : 0; + int lineNo = int.TryParse(parts[4], NumberStyles.Integer, CultureInfo.InvariantCulture, out int l) ? l : 0; + int col = int.TryParse(parts[5], NumberStyles.Integer, CultureInfo.InvariantCulture, out int c) ? c : 0; + + element = new TapElement(handle, parts[1].Trim(), parts[2].Trim(), parts[3].Trim(), lineNo, col); + return true; + } +} diff --git a/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/Census/Gate1Evaluator.cs b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/Census/Gate1Evaluator.cs new file mode 100644 index 00000000..f978a359 --- /dev/null +++ b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/Census/Gate1Evaluator.cs @@ -0,0 +1,138 @@ +using System.Globalization; + +namespace WinApp.DevTools.Provenance.Census; + +/// +/// Applies the Gate-1 kill-criteria (provenance spec §5) to an aggregated census. The criteria are, +/// judged on the Release config: +/// +/// % of source-backed elements resolve to an exact span; +/// % of generated elements map to a template/style def; +/// 0% false-confident answers — any single one is an automatic KILL. +/// +/// The false-confident rule dominates; a Release config that resolves 0% of source-backed elements +/// is also a KILL (select-to-source does not work at all). +/// +public static class Gate1Evaluator +{ + /// Minimum share of source-backed elements that must resolve to an exact span in Release. + public const double SourceBackedFloorPct = 70d; + + /// Minimum share of generated elements that must map to a template/style def in Release. + public const double TemplatedFloorPct = 40d; + + /// Evaluates the Gate-1 criteria against an aggregated census. + public static Gate1Report Evaluate(CensusResult census) + { + ArgumentNullException.ThrowIfNull(census); + + int falseConfidentTotal = census.Configs.Sum(static c => c.FalseConfident); + ConfigCensus? release = PickReleaseConfig(census); + List reasons = []; + + // 1. The false-confident prohibition dominates every other signal. + if (falseConfidentTotal > 0) + { + IEnumerable offenders = census.Configs + .Where(static c => c.FalseConfident > 0) + .Select(static c => $"{c.Config.Label}={c.FalseConfident}"); + reasons.Add($"KILL: {falseConfidentTotal} false-confident answer(s) ({string.Join(", ", offenders)}); the kill-criteria require exactly 0%."); + return new Gate1Report + { + Verdict = Gate1Verdict.Kill, + Reasons = reasons, + EvaluatedConfigLabel = release?.Config.Label, + SourceBackedResolvedPct = release?.SourceBackedResolvedPct ?? 0d, + TemplatedToTemplatePct = release?.TemplatedToTemplatePct ?? 0d, + FalseConfidentTotal = falseConfidentTotal, + }; + } + + // 2. Without a non-stripping Release-family config there is nothing to judge Gate-1 on. + if (release is null) + { + reasons.Add("INCONCLUSIVE: no non-stripping Release-family config was measured; run the Release census to decide Gate-1."); + return new Gate1Report + { + Verdict = Gate1Verdict.Inconclusive, + Reasons = reasons, + FalseConfidentTotal = 0, + }; + } + + double sb = release.SourceBackedResolvedPct; + double tt = release.TemplatedToTemplatePct; + bool sourceBackedPass = sb >= SourceBackedFloorPct; + bool templatedPass = tt >= TemplatedFloorPct; + + // 3. Select-to-source resolving 0% of real source-backed elements in Release is a hard failure. + if (release.SourceBackedTotal > 0 && sb <= 0d) + { + reasons.Add($"KILL: 0% of {release.SourceBackedTotal} source-backed elements resolved to a line in '{release.Config.Label}'; select-to-source does not work in Release."); + return new Gate1Report + { + Verdict = Gate1Verdict.Kill, + Reasons = reasons, + EvaluatedConfigLabel = release.Config.Label, + SourceBackedResolvedPct = sb, + TemplatedToTemplatePct = tt, + FalseConfidentTotal = 0, + }; + } + + // 4. Both floors met and no false-confident answers -> GO; otherwise CONDITIONAL. + Gate1Verdict verdict; + if (sourceBackedPass && templatedPass) + { + verdict = Gate1Verdict.Go; + reasons.Add($"GO: source-backed resolved {Fmt(sb)}% ≥ {Fmt(SourceBackedFloorPct)}% and templated-to-template {Fmt(tt)}% ≥ {Fmt(TemplatedFloorPct)}% in '{release.Config.Label}', 0 false-confident."); + } + else + { + verdict = Gate1Verdict.Conditional; + if (!sourceBackedPass) + { + reasons.Add($"CONDITIONAL: source-backed resolved {Fmt(sb)}% < {Fmt(SourceBackedFloorPct)}% floor in '{release.Config.Label}'."); + } + + if (!templatedPass) + { + reasons.Add($"CONDITIONAL: templated-to-template {Fmt(tt)}% < {Fmt(TemplatedFloorPct)}% floor in '{release.Config.Label}'."); + } + + if (release.SourceBackedTotal == 0) + { + reasons.Add($"CONDITIONAL: no source-backed elements were present in '{release.Config.Label}' to measure resolution."); + } + } + + return new Gate1Report + { + Verdict = verdict, + Reasons = reasons, + EvaluatedConfigLabel = release.Config.Label, + SourceBackedResolvedPct = sb, + TemplatedToTemplatePct = tt, + FalseConfidentTotal = 0, + }; + } + + /// + /// Picks the config Gate-1 judges: a Release-family config that does NOT strip line-info, + /// preferring the standard release, then packaged, then any such config. The + /// diagnostic line-info-stripped probe is deliberately never the arbiter. + /// + public static ConfigCensus? PickReleaseConfig(CensusResult census) + { + ArgumentNullException.ThrowIfNull(census); + List candidates = census.Configs + .Where(static c => c.Config.IsReleaseFamily && !c.Config.StripsLineInfo) + .ToList(); + + return candidates.FirstOrDefault(static c => string.Equals(c.Config.Label, "release", StringComparison.OrdinalIgnoreCase)) + ?? candidates.FirstOrDefault(static c => string.Equals(c.Config.Label, "packaged", StringComparison.OrdinalIgnoreCase)) + ?? candidates.FirstOrDefault(); + } + + private static string Fmt(double value) => value.ToString("0.#", CultureInfo.InvariantCulture); +} diff --git a/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/Census/Gate1Report.cs b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/Census/Gate1Report.cs new file mode 100644 index 00000000..1f6f67b8 --- /dev/null +++ b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/Census/Gate1Report.cs @@ -0,0 +1,42 @@ +namespace WinApp.DevTools.Provenance.Census; + +/// The Gate-1 decision for source mapping (provenance spec §5). +public enum Gate1Verdict +{ + /// Not enough data to decide (no non-stripping Release-family config was measured). + Inconclusive, + + /// Proceed: Release meets the source-backed and templated floors with zero false-confident answers. + Go, + + /// Proceed with caution: no false-confident answers, but a Release floor was missed. + Conditional, + + /// Stop: a false-confident answer occurred, or select-to-source fails outright in Release. + Kill, +} + +/// The outcome of evaluating the Gate-1 kill-criteria against a census. +public sealed record Gate1Report +{ + /// The decision. + public required Gate1Verdict Verdict { get; init; } + + /// Human-readable reasons behind the verdict. + public required IReadOnlyList Reasons { get; init; } + + /// The config label whose Release rates were judged, when one was found. + public string? EvaluatedConfigLabel { get; init; } + + /// Release source-backed resolution rate that was judged. + public double SourceBackedResolvedPct { get; init; } + + /// Release templated-to-template rate that was judged. + public double TemplatedToTemplatePct { get; init; } + + /// Total false-confident answers across all configs (must be 0 to pass). + public int FalseConfidentTotal { get; init; } + + /// True only when the verdict is . + public bool IsPassing => Verdict == Gate1Verdict.Go; +} diff --git a/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/CensusConfig.cs b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/CensusConfig.cs new file mode 100644 index 00000000..bc28aad2 --- /dev/null +++ b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/CensusConfig.cs @@ -0,0 +1,46 @@ +namespace WinApp.DevTools.Provenance; + +/// +/// A build configuration the census probes. The four normative configs are Debug, Release, +/// Packaged and Trimmed (provenance spec §5); is an extra +/// diagnostic probe (Release with XAML line-info explicitly disabled) that surfaces the +/// worst-case "line-info stripped" behaviour. +/// +/// Stable lowercase label used in TSV file names and reports. +/// Whether this config is expected to strip XAML line-info. +/// Whether this is a Release-style (optimized) build. +public sealed record CensusConfig(string Label, bool StripsLineInfo, bool IsReleaseFamily) +{ + /// Debug: the upper bound (line-info intact). + public static readonly CensusConfig Debug = new("debug", StripsLineInfo: false, IsReleaseFamily: false); + + /// Release: the honest field case and the primary Gate-1 config. + public static readonly CensusConfig Release = new("release", StripsLineInfo: false, IsReleaseFamily: true); + + /// Release with XAML line-info disabled: the "stripped" worst case. + public static readonly CensusConfig ReleaseNoLineInfo = new("release-nolineinfo", StripsLineInfo: true, IsReleaseFamily: true); + + /// MSIX-installed reality. + public static readonly CensusConfig Packaged = new("packaged", StripsLineInfo: false, IsReleaseFamily: true); + + /// Trimmed / self-contained: worst case for metadata survival. + public static readonly CensusConfig Trimmed = new("trimmed", StripsLineInfo: true, IsReleaseFamily: true); + + /// All configs the census understands, longest label first (for prefix matching). + public static readonly IReadOnlyList Known = + [ReleaseNoLineInfo, Debug, Release, Packaged, Trimmed]; + + /// Resolves a known config by label, or fabricates a neutral one for an unknown label. + public static CensusConfig FromLabel(string label) + { + foreach (CensusConfig c in Known) + { + if (string.Equals(c.Label, label, StringComparison.OrdinalIgnoreCase)) + { + return c; + } + } + + return new CensusConfig(label, StripsLineInfo: false, IsReleaseFamily: false); + } +} diff --git a/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/Enums/Confidence.cs b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/Enums/Confidence.cs new file mode 100644 index 00000000..0d9a300d --- /dev/null +++ b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/Enums/Confidence.cs @@ -0,0 +1,26 @@ +namespace WinApp.DevTools.Provenance; + +/// +/// How sure we are of a resolved source span. The prime directive of provenance is to never +/// report a confidence we cannot back up: an uncertain mapping is or +/// , never or . +/// +/// +/// Mirrors the normative Confidence enumeration in the WDXP protocol schema +/// (specs/winapp-devtools-protocol.md Appendix B). The protocol schema is the source of +/// truth; see remarks for the coordination rule. +/// +public enum Confidence +{ + /// Source-backed element with intact line-info: an exact file+line. Wire: exact. + Exact, + + /// Strongly indicated but not pinpoint-verified. Wire: high. + High, + + /// Best-effort: a template/style definition, or an ambiguous / partial mapping. Wire: low. + Low, + + /// No trustworthy span (runtime-only, or line-info stripped). Wire: none. + None, +} diff --git a/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/Enums/ProvenanceWire.cs b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/Enums/ProvenanceWire.cs new file mode 100644 index 00000000..79aa7f43 --- /dev/null +++ b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/Enums/ProvenanceWire.cs @@ -0,0 +1,51 @@ +namespace WinApp.DevTools.Provenance; + +/// +/// Maps the mirrored honesty enums to/from their normative kebab-case wire strings, matching the +/// WDXP protocol schema values exactly. Keeping this mapping in one place means serialization +/// stays in lockstep with the contract even while these enums are a local mirror (see +/// remarks). +/// +public static class ProvenanceWire +{ + /// Wire string for a . + public static string ToWire(this SourceKind value) => value switch + { + SourceKind.SourceBacked => "source-backed", + SourceKind.TemplateGenerated => "template-generated", + SourceKind.StyleGenerated => "style-generated", + SourceKind.BindingGenerated => "binding-generated", + SourceKind.RuntimeOnly => "runtime-only", + SourceKind.ResourceOrigin => "resource-origin", + SourceKind.Ambiguous => "ambiguous", + SourceKind.Unreachable => "unreachable", + _ => throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown SourceKind"), + }; + + /// Wire string for a . + public static string ToWire(this Confidence value) => value switch + { + Confidence.Exact => "exact", + Confidence.High => "high", + Confidence.Low => "low", + Confidence.None => "none", + _ => throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown Confidence"), + }; + + /// Wire string for a . + public static string ToWire(this ReasonCode value) => value switch + { + ReasonCode.ParseError => "parse-error", + ReasonCode.BindingFailure => "binding-failure", + ReasonCode.ApplyFailed => "apply-failed", + ReasonCode.SourceInfoMissing => "source-info-missing", + ReasonCode.TemplateGenerated => "template-generated", + ReasonCode.UnreachablePopup => "unreachable-popup", + ReasonCode.ReleaseNoLineInfo => "release-no-line-info", + ReasonCode.UnsafeRefused => "unsafe-refused", + _ => throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown ReasonCode"), + }; + + /// Wire string for an optional (null when absent). + public static string? ToWire(this ReasonCode? value) => value?.ToWire(); +} diff --git a/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/Enums/ReasonCode.cs b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/Enums/ReasonCode.cs new file mode 100644 index 00000000..8cc0a2a6 --- /dev/null +++ b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/Enums/ReasonCode.cs @@ -0,0 +1,39 @@ +namespace WinApp.DevTools.Provenance; + +/// +/// Machine-readable reason a mapping is imperfect — surfaced as API, not free log text. +/// +/// +/// Mirrors the normative Diagnostics.ReasonCode enumeration in the WDXP protocol schema +/// (specs/winapp-devtools-protocol.md §6.5 and Appendix B). The full set is mirrored for +/// fidelity; provenance grading emits the source-related subset +/// (, , +/// ). The protocol schema is the source of truth; see +/// remarks for the coordination rule. +/// +public enum ReasonCode +{ + /// Wire: parse-error. + ParseError, + + /// Wire: binding-failure. + BindingFailure, + + /// Wire: apply-failed. + ApplyFailed, + + /// Source line-info is absent for this element. Wire: source-info-missing. + SourceInfoMissing, + + /// The element was produced by a template/style, not authored inline. Wire: template-generated. + TemplateGenerated, + + /// Wire: unreachable-popup. + UnreachablePopup, + + /// A Release/optimized build stripped XAML line-info. Wire: release-no-line-info. + ReleaseNoLineInfo, + + /// Wire: unsafe-refused. + UnsafeRefused, +} diff --git a/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/Enums/SourceKind.cs b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/Enums/SourceKind.cs new file mode 100644 index 00000000..4148ab52 --- /dev/null +++ b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/Enums/SourceKind.cs @@ -0,0 +1,40 @@ +namespace WinApp.DevTools.Provenance; + +/// +/// What kind of origin a live element has. +/// +/// +/// This mirrors the normative Source.SourceKind enumeration defined by the WDXP +/// protocol schema (see specs/winapp-devtools-protocol.md §6.3 and Appendix B). +/// The protocol schema (wdxp.v0.json, owned by the protocol workstream) is the single +/// source of truth; when its generator emits C# types, this local mirror should be replaced by +/// them. Do not add, remove, or rename members here — request any change from the +/// protocol workstream as a [schema-change] Source PR. Wire (kebab-case) strings are +/// produced by . +/// +public enum SourceKind +{ + /// Written directly in the developer's own markup (a page / UserControl). Wire: source-backed. + SourceBacked, + + /// Instantiated from a control template (generic.xaml). Wire: template-generated. + TemplateGenerated, + + /// Produced by a style / theme resource dictionary. Wire: style-generated. + StyleGenerated, + + /// Materialized by a binding (e.g. an ItemTemplate instance). Wire: binding-generated. + BindingGenerated, + + /// Created in code with no markup provenance. Wire: runtime-only. + RuntimeOnly, + + /// Originates from a resource lookup. Wire: resource-origin. + ResourceOrigin, + + /// Multiple candidate source spans; reported with all candidates, never a coin-flip. Wire: ambiguous. + Ambiguous, + + /// The element is not reachable / the target was lost. Wire: unreachable. + Unreachable, +} diff --git a/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/GradedSource.cs b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/GradedSource.cs new file mode 100644 index 00000000..2ed38204 --- /dev/null +++ b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/GradedSource.cs @@ -0,0 +1,36 @@ +namespace WinApp.DevTools.Provenance; + +/// +/// The graded result of resolving a live element to source: the honest answer to +/// "where did this come from, and how sure are we?". This is the shape the Source.resolve +/// command returns and the input the confidence badge (and W5 persist gating) consumes. +/// +public sealed record GradedSource +{ + /// The classified origin kind. + public required SourceKind SourceKind { get; init; } + + /// How much to trust the span. Never / unless truly source-backed with a line. + public required Confidence Confidence { get; init; } + + /// Machine-readable reason the mapping is imperfect, when applicable. + public ReasonCode? ReasonCode { get; init; } + + /// Best target document URI (the page, or a template/style definition), when one exists. + public string? Uri { get; init; } + + /// Target 1-based line, when resolved. + public int? Line { get; init; } + + /// Target 1-based column, when resolved. + public int? Column { get; init; } + + /// All candidate spans when is . + public IReadOnlyList? Candidates { get; init; } + + /// True when a target document URI was resolved (even without a precise line). + public bool HasTarget => !string.IsNullOrEmpty(Uri); + + /// True when the grade asserts a trustworthy, pinpoint span (exact/high). + public bool IsConfident => Confidence is Confidence.Exact or Confidence.High; +} diff --git a/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/ISourceProvenanceGrader.cs b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/ISourceProvenanceGrader.cs new file mode 100644 index 00000000..b0e1aa80 --- /dev/null +++ b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/ISourceProvenanceGrader.cs @@ -0,0 +1,12 @@ +namespace WinApp.DevTools.Provenance; + +/// +/// Grades a live element's source provenance into a — the honesty model +/// of provenance spec §4. Exposed as an interface so clients (the census aggregator, the future +/// Source.resolve command) can depend on the seam and it can be substituted in tests. +/// +public interface ISourceProvenanceGrader +{ + /// Grades a single element's provenance. + GradedSource Grade(SourceResolutionInput input); +} diff --git a/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/ProvenanceGradingOptions.cs b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/ProvenanceGradingOptions.cs new file mode 100644 index 00000000..58f51e28 --- /dev/null +++ b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/ProvenanceGradingOptions.cs @@ -0,0 +1,21 @@ +namespace WinApp.DevTools.Provenance; + +/// +/// Policy knobs for . Defaults encode the provenance-spec +/// baseline; these exist so the open design questions can be tuned without touching the honesty +/// core. +/// +public sealed record ProvenanceGradingOptions +{ + /// + /// When true (baseline for open question Q-TEMPLATE-TARGET), an element resolved + /// to the app's own template/style resource dictionary (generic.xaml / themeresources.xaml) is + /// graded as a generated origin (template/style-generated, ) mapped + /// to that definition, rather than as directly authored source. This keeps templated parts from + /// being presented as the user's page even when the template lives in the app's markup. + /// + public bool TreatAuthoredTemplateDictionariesAsGenerated { get; init; } = true; + + /// The default options. + public static ProvenanceGradingOptions Default { get; } = new(); +} diff --git a/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/SourceFileClassifier.cs b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/SourceFileClassifier.cs new file mode 100644 index 00000000..8050ca6e --- /dev/null +++ b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/SourceFileClassifier.cs @@ -0,0 +1,52 @@ +namespace WinApp.DevTools.Provenance; + +/// +/// Pure classification of a resolved source-file URI into provenance categories. Shared by the +/// grader (to assign ) and the census audit (to independently detect a +/// false-confident grade), so both agree on what "framework", "template/style dictionary" and +/// "the app's own authored markup" mean. +/// +public static class SourceFileClassifier +{ + /// No source file was resolved at all (runtime-only origin). + public static bool IsEmpty(string? file) => string.IsNullOrWhiteSpace(file); + + /// A framework-owned source file (WinUI theme dictionaries / control templates). + public static bool IsFramework(string? file) => + !IsEmpty(file) && file!.Contains("Microsoft.UI.Xaml", StringComparison.OrdinalIgnoreCase); + + /// A theme/style resource dictionary (styles), as opposed to a control-template dictionary. + public static bool IsThemeResource(string? file) => + !IsEmpty(file) && file!.Contains("themeresources", StringComparison.OrdinalIgnoreCase); + + /// + /// A well-known template/style resource dictionary (generic.xaml / themeresources.xaml), whether + /// framework- or app-owned. Matched by leaf name so ordinary pages are never caught. + /// + public static bool IsTemplateOrStyleDictionary(string? file) + { + if (IsEmpty(file)) + { + return false; + } + + string leaf = LeafName(file!); + return leaf.Equals("generic.xaml", StringComparison.OrdinalIgnoreCase) + || leaf.Equals("themeresources.xaml", StringComparison.OrdinalIgnoreCase); + } + + /// + /// The app's own directly-authored markup (a page / UserControl) — a resolved file that is + /// neither framework-owned nor a template/style resource dictionary. This is the ONLY category + /// permitted to earn . + /// + public static bool IsAuthoredMarkup(string? file) => + !IsEmpty(file) && !IsFramework(file) && !IsTemplateOrStyleDictionary(file); + + /// The file name without any directory prefix. + public static string LeafName(string file) + { + int slash = file.LastIndexOfAny(['/', '\\']); + return slash >= 0 && slash < file.Length - 1 ? file[(slash + 1)..] : file; + } +} diff --git a/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/SourceProvenanceGrader.cs b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/SourceProvenanceGrader.cs new file mode 100644 index 00000000..c4720b4e --- /dev/null +++ b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/SourceProvenanceGrader.cs @@ -0,0 +1,155 @@ +namespace WinApp.DevTools.Provenance; + +/// +/// Grades a live element's source provenance, assigning a , a +/// , and (when imperfect) a — the honesty model +/// of provenance spec §4. +/// +/// +/// The prime directive is the false-confident prohibition: the grader never returns +/// or unless the element is truly +/// authored inline in the developer's own page/UserControl markup and a source line is +/// present. Framework/template/style/runtime origins are graded or +/// and mapped (at best) to a template/style definition — never +/// presented as the user's page. This makes the 0%-false-confident Gate-1 invariant hold by +/// construction. +/// The grader is pure and deterministic (no live-tree or Windows dependency) so it runs on +/// hosted CI and is unit-tested against fixtures. +/// +public sealed class SourceProvenanceGrader : ISourceProvenanceGrader +{ + private readonly ProvenanceGradingOptions _options; + + /// Creates a grader with the given policy (defaults to ). + public SourceProvenanceGrader(ProvenanceGradingOptions? options = null) => + _options = options ?? ProvenanceGradingOptions.Default; + + /// + public GradedSource Grade(SourceResolutionInput input) + { + ArgumentNullException.ThrowIfNull(input); + + // 1. Ambiguity is honest by construction: multiple candidates => low, all reported. + if (input.CandidateSpans is { Count: > 1 } candidates) + { + SourceSpan first = candidates[0]; + return new GradedSource + { + SourceKind = SourceKind.Ambiguous, + Confidence = Confidence.Low, + Candidates = candidates, + Uri = first.Uri, + Line = first.Line > 0 ? first.Line : null, + Column = first.Column > 0 ? first.Column : null, + }; + } + + // 2. Explicit origin hints the live daemon can supply but a bare census row cannot. + if (!input.TargetReachable) + { + return Bare(SourceKind.Unreachable, Confidence.None, ReasonCode.SourceInfoMissing); + } + + if (input.KindHint is SourceKind hint) + { + switch (hint) + { + case SourceKind.Unreachable: + return Bare(SourceKind.Unreachable, Confidence.None, ReasonCode.SourceInfoMissing); + case SourceKind.RuntimeOnly: + return Bare(SourceKind.RuntimeOnly, Confidence.None, ReasonCode.SourceInfoMissing); + case SourceKind.BindingGenerated: + // A binding-materialized element may know its template def; low at best, never exact. + return Targeted(SourceKind.BindingGenerated, Confidence.Low, ReasonCode.SourceInfoMissing, input); + case SourceKind.ResourceOrigin: + return Targeted(SourceKind.ResourceOrigin, Confidence.Low, reason: null, input); + default: + // source-backed / template-generated / style-generated / ambiguous hints fall + // through to the file-based derivation below, which classifies them honestly. + break; + } + } + + // 3. Derive from file provenance. + string file = (input.File ?? string.Empty).Trim(); + + // No markup provenance at all -> runtime-only. + if (file.Length == 0) + { + return Bare(SourceKind.RuntimeOnly, Confidence.None, ReasonCode.SourceInfoMissing); + } + + // Framework template/style instantiation -> mapped to the framework template/style def, + // low confidence, never the user's page. + if (SourceFileClassifier.IsFramework(file)) + { + return TemplateOrStyle(file, input); + } + + // The app's own template/style resource dictionary (generic.xaml / themeresources.xaml): + // an authored template/style definition is still a generated origin -> low, mapped to the def. + if (_options.TreatAuthoredTemplateDictionariesAsGenerated && SourceFileClassifier.IsTemplateOrStyleDictionary(file)) + { + return TemplateOrStyle(file, input); + } + + // Directly-authored page / UserControl markup. + if (input.Line > 0) + { + return new GradedSource + { + SourceKind = SourceKind.SourceBacked, + Confidence = Confidence.Exact, + Uri = file, + Line = input.Line, + Column = input.Column > 0 ? input.Column : null, + }; + } + + // Authored file but no line: honest 'none' (we can name the file, not the span) with the + // reason that distinguishes a stripped-line build from genuinely missing info. + ReasonCode why = input.Config.StripsLineInfo ? ReasonCode.ReleaseNoLineInfo : ReasonCode.SourceInfoMissing; + return new GradedSource + { + SourceKind = SourceKind.SourceBacked, + Confidence = Confidence.None, + ReasonCode = why, + Uri = file, + }; + } + + private static GradedSource TemplateOrStyle(string file, SourceResolutionInput input) + { + SourceKind kind = SourceFileClassifier.IsThemeResource(file) ? SourceKind.StyleGenerated : SourceKind.TemplateGenerated; + return new GradedSource + { + SourceKind = kind, + Confidence = Confidence.Low, + ReasonCode = ReasonCode.TemplateGenerated, + Uri = file, + Line = input.Line > 0 ? input.Line : null, + Column = input.Column > 0 ? input.Column : null, + }; + } + + private static GradedSource Bare(SourceKind kind, Confidence confidence, ReasonCode? reason) => new() + { + SourceKind = kind, + Confidence = confidence, + ReasonCode = reason, + }; + + private static GradedSource Targeted(SourceKind kind, Confidence confidence, ReasonCode? reason, SourceResolutionInput input) + { + string file = (input.File ?? string.Empty).Trim(); + return new GradedSource + { + SourceKind = kind, + Confidence = confidence, + ReasonCode = reason, + Uri = file.Length > 0 ? file : null, + Line = file.Length > 0 && input.Line > 0 ? input.Line : null, + Column = file.Length > 0 && input.Column > 0 ? input.Column : null, + }; + } +} diff --git a/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/SourceResolutionInput.cs b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/SourceResolutionInput.cs new file mode 100644 index 00000000..494f6a47 --- /dev/null +++ b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/SourceResolutionInput.cs @@ -0,0 +1,55 @@ +namespace WinApp.DevTools.Provenance; + +/// +/// Normalized input to for a single live element. Populated +/// from a for the census path; the optional enrichment signals model +/// what a live daemon can additionally supply on the future per-element Source.resolve path +/// (a bare census TSV leaves them unset). +/// +public sealed record SourceResolutionInput +{ + /// The element's x:Name, if any. + public string? Name { get; init; } + + /// Runtime type name, if known. + public string? TypeName { get; init; } + + /// Resolved source file URI, or empty/null when unresolved. + public string? File { get; init; } + + /// Resolved 1-based line, or 0 when unknown. + public int Line { get; init; } + + /// Resolved 1-based column, or 0 when unknown. + public int Column { get; init; } + + /// The build config context (drives stripped-line-info reason codes). + public CensusConfig Config { get; init; } = CensusConfig.Debug; + + /// + /// Enrichment: multiple candidate spans. When more than one is present the element is graded + /// and all candidates are reported — never a coin-flip. + /// + public IReadOnlyList? CandidateSpans { get; init; } + + /// + /// Enrichment: an explicit origin hint from the live daemon for a kind a bare TSV cannot + /// express (e.g. , , + /// , ). + /// + public SourceKind? KindHint { get; init; } + + /// Enrichment: whether the element is still reachable in the live tree. + public bool TargetReachable { get; init; } = true; + + /// Builds an input from a raw census row under the given config. + public static SourceResolutionInput FromTap(TapElement element, CensusConfig config) => new() + { + Name = element.Name, + TypeName = element.Type, + File = element.File, + Line = element.Line, + Column = element.Column, + Config = config, + }; +} diff --git a/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/SourceSpan.cs b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/SourceSpan.cs new file mode 100644 index 00000000..13c9d93a --- /dev/null +++ b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/SourceSpan.cs @@ -0,0 +1,7 @@ +namespace WinApp.DevTools.Provenance; + +/// A resolved source location: a document URI plus an optional line/column. +/// Source document URI (e.g. an ms-appx:/// XAML path). +/// 1-based line, or 0 when unknown. +/// 1-based column, or 0 when unknown. +public sealed record SourceSpan(string Uri, int Line, int Column); diff --git a/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/TapElement.cs b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/TapElement.cs new file mode 100644 index 00000000..0579ba3e --- /dev/null +++ b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/TapElement.cs @@ -0,0 +1,13 @@ +namespace WinApp.DevTools.Provenance; + +/// +/// One row of the raw per-element source-resolution census emitted by the "reading the UI" +/// collector for a live app: the flat handle, type, name, file, line, col record. +/// +/// Opaque live-element handle. +/// Runtime type name of the element. +/// The element's x:Name, or empty. +/// Resolved source file URI, or empty when unresolved. +/// Resolved 1-based line, or 0. +/// Resolved 1-based column, or 0. +public sealed record TapElement(long Handle, string Type, string Name, string File, int Line, int Column); diff --git a/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/WinApp.DevTools.Provenance.csproj b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/WinApp.DevTools.Provenance.csproj new file mode 100644 index 00000000..54156be4 --- /dev/null +++ b/src/winapp-devtools/provenance/WinApp.DevTools.Provenance/WinApp.DevTools.Provenance.csproj @@ -0,0 +1,9 @@ + + + + WinApp.DevTools.Provenance + WinApp.DevTools.Provenance + Confidence-graded source mapping (provenance) for WinUI design-time DevTools: the honesty model (SourceKind + Confidence + ReasonCode) and the source-resolution census analysis + Gate-1 evaluation. + + + diff --git a/src/winapp-devtools/scripts/scrub-scan.ps1 b/src/winapp-devtools/scripts/scrub-scan.ps1 new file mode 100644 index 00000000..ec214636 --- /dev/null +++ b/src/winapp-devtools/scripts/scrub-scan.ps1 @@ -0,0 +1,78 @@ +<# +.SYNOPSIS + Public-repo scrub scan for the DevTools provenance (W4) area: fails if any forbidden internal token + appears in the source, harness, docs, or reference corpus. + +.DESCRIPTION + This repo is public-bound. The following must never appear in W4 files: + MCP, SM- (internal probe label), clean-room, nikolame, win-devex, FrameworkUdk, InitializeXaml + Deliberately NOT forbidden (legitimate/public, and required by the domain): census, xamlOM.h, + DisableXbfLineInfo, and the branch name 'winui-devex' (which does not contain 'win-devex'). + +.PARAMETER Root + Directory to scan. Defaults to the winapp-devtools area (the parent of this script's folder). + +.EXAMPLE + pwsh src/winapp-devtools/scripts/scrub-scan.ps1 +#> +[CmdletBinding()] +param( + [string]$Root, + [string[]]$ExtraPaths +) + +$ErrorActionPreference = 'Stop' +$Root = if ($Root) { $Root } else { Resolve-Path (Join-Path $PSScriptRoot '..') } + +# W4-owned files that live outside the winapp-devtools area (repo root is three levels up from here). +if (-not $ExtraPaths) { + $repoRoot = Resolve-Path (Join-Path $PSScriptRoot '..\..\..') + $ExtraPaths = @( + (Join-Path $repoRoot '.github\workflows\devtools-provenance.yml'), + (Join-Path $repoRoot 'specs\winapp-devtools-provenance.md') + ) | Where-Object { Test-Path $_ } +} + +# Case-sensitive patterns (acronyms / labels that must match exactly to avoid false positives). +$caseSensitive = @('MCP', 'SM-', 'FrameworkUdk', 'InitializeXaml') +# Case-insensitive patterns (names / phrases). +$caseInsensitive = @('clean-room', 'nikolame', 'win-devex') + +# Skip build output and this script itself (it necessarily names the tokens it forbids). +$skip = '\\(bin|obj)\\|scrub-scan\.ps1$' + +$files = Get-ChildItem -Path $Root -Recurse -File | + Where-Object { $_.FullName -notmatch $skip } + +# Append the W4-owned files that live outside $Root (deduped by full path). +$files = @($files) +foreach ($p in $ExtraPaths) { + $item = Get-Item -LiteralPath $p -ErrorAction SilentlyContinue + if ($item -and ($files.FullName -notcontains $item.FullName)) { $files += $item } +} + +$hits = [System.Collections.Generic.List[string]]::new() +foreach ($file in $files) { + $text = Get-Content -LiteralPath $file.FullName -Raw -ErrorAction SilentlyContinue + if (-not $text) { continue } + + foreach ($pat in $caseSensitive) { + if ($text -cmatch [regex]::Escape($pat)) { + $hits.Add("$($file.FullName): '$pat' (case-sensitive)") + } + } + foreach ($pat in $caseInsensitive) { + if ($text -imatch [regex]::Escape($pat)) { + $hits.Add("$($file.FullName): '$pat' (case-insensitive)") + } + } +} + +if ($hits.Count -gt 0) { + Write-Host "SCRUB SCAN FAILED - $($hits.Count) forbidden token hit(s):" -ForegroundColor Red + $hits | ForEach-Object { Write-Host " $_" -ForegroundColor Red } + exit 1 +} + +Write-Host "SCRUB SCAN CLEAN - 0 forbidden tokens across $($files.Count) files under $Root" -ForegroundColor Green +exit 0