chore: stop committing normalized capture twins

Every capture was committed twice: once raw and once with pids, handles,
timestamps and bounds canonicalized. The twin is produced by common.ps1 on
every run and is byte-reproducible from the capture beside it -- verified
across all thirty-seven of them -- so tracking both doubled the evidence diff
for no information a re-runner cannot regenerate locally.

The twins are still written on disk and -Compare still diffs them, so
re-runnability is unchanged.
This commit is contained in:
Lahfir 2026-07-26 23:06:16 -06:00
parent f5d6c81eb5
commit 07aee1246d
38 changed files with 5 additions and 10547 deletions

5
.gitignore vendored
View file

@ -104,3 +104,8 @@ __pycache__/
# Probe scratch-fixture build output (regenerated by build-scratch.ps1)
probes/windows/scratch/bin/
# Normalized capture twins are regenerated by common.ps1 on every probe run and
# are byte-reproducible from the capture beside them; committing both doubles the
# evidence diff for no added information.
probes/*/captures/**/*.normalized

View file

@ -1,15 +0,0 @@
{
"Probe": "00-environment",
"CapturedAtUtc": "<timestamp>",
"Area": "session and DPI/multi-monitor behavior (plan area 10): RDP session-transition behavior",
"Facet": "How UIA tree reads, window handles, foreground/focus, and input synthesis behave across an RDP connect/disconnect/reconnect session transition, and how a disconnected session differs from an attached console session.",
"Verdict": "DEFERRED",
"ObservedHere": {
"SessionNameEnv": "Console",
"SessionId": 1,
"UserInteractive": true
},
"Reason": "This VM runs on the physical console: SESSIONNAME=Console, UserInteractive=True, one interactive session. An RDP session transition cannot be produced here without disconnecting the very session the probe corpus runs in, so no honest observation of remote-session behavior is available from this environment (KTD3).",
"ClosurePoint": "Sub-phase 2.1 runner registration. Registering the Windows CI runner in 2.1 creates the second, non-console session environment; the RDP session-transition facet is measured there and this row closes against that runner. Until then no Windows adapter behavior may assume console-session semantics.",
"PhasesAction": "phases.md must not claim RDP/remote-session support for the Windows adapter until 2.1 runner evidence exists."
}

View file

@ -1,281 +0,0 @@
{
"Probe": "00-environment",
"CapturedAtUtc": "<timestamp>",
"Purpose": "machine facts every sub-phase 2.0 ledger row inherits",
"Os": {
"ProductName": "Windows Server 2019 Datacenter",
"EditionId": "ServerDatacenter",
"InstallationType": "Server",
"CurrentBuild": "17763",
"Ubr": 7434,
"ReleaseId": "1809",
"BuildLabEx": "17763.1.amd64fre.rs5_release.180914-1434",
"OsVersionString": "Microsoft Windows NT 10.0.17763.0",
"Is64BitOs": true,
"Is64BitProcess": true,
"CurrentCulture": "en-US",
"InstalledUiCulture": "es-ES",
"AnsiCodePage": "1252",
"OemCodePage": "850",
"DotNetDefaultEncodingCodePage": 1252
},
"Session": {
"SessionNameEnv": "Console",
"SessionId": 1,
"UserInteractive": true,
"QuerySession": [
" SESSIONNAME USERNAME ID STATE TYPE DEVICE",
" services 0 Disc",
"\u003econsole <user> 1 Active"
]
},
"Identity": {
"AccountNameShape": "\u003cmachine\u003e\\\u003cuser\u003e",
"AccountName": "<machine>\\<user>",
"UserSidShape": "S-1-5-21-\u003credacted\u003e-500",
"UserSid": "S-1-5-21-<redacted>-500",
"SidAuthority": "S-1-5-21 (local machine authority)",
"WellKnownRid": "500",
"RidMeaning": "RID 500 is the built-in Administrator account",
"TokenOwnerSid": "S-1-5-32-544",
"TokenOwnerAccount": "BUILTIN\\Administradores",
"IsAuthenticated": true,
"IsSystem": false,
"InAdministratorsRole": true,
"AuthenticationType": "NTLM",
"GroupCount": 12,
"Groups": [
{
"Sid": "S-1-1-0",
"WellKnown": true,
"Account": "Todos"
},
{
"Sid": "S-1-2-0",
"WellKnown": true,
"Account": "LOCAL"
},
{
"Sid": "S-1-2-1",
"WellKnown": true,
"Account": "INICIO DE SESIÓN EN LA CONSOLA"
},
{
"Sid": "S-1-5-11",
"WellKnown": true,
"Account": "NT AUTHORITY\\Usuarios autentificados"
},
{
"Sid": "S-1-5-113",
"WellKnown": true,
"Account": "NT AUTHORITY\\Cuenta local"
},
{
"Sid": "S-1-5-114",
"WellKnown": true,
"Account": "NT AUTHORITY\\Cuenta local y miembro del grupo de administradores"
},
{
"Sid": "S-1-5-15",
"WellKnown": true,
"Account": "NT AUTHORITY\\Esta compañía"
},
{
"Sid": "S-1-5-21-<redacted>-513",
"WellKnown": false,
"Account": "<machine>\\Ninguno"
},
{
"Sid": "S-1-5-32-544",
"WellKnown": true,
"Account": "BUILTIN\\Administradores"
},
{
"Sid": "S-1-5-32-545",
"WellKnown": true,
"Account": "BUILTIN\\Usuarios"
},
{
"Sid": "S-1-5-4",
"WellKnown": true,
"Account": "NT AUTHORITY\\INTERACTIVE"
},
{
"Sid": "S-1-5-64-10",
"WellKnown": true,
"Account": "NT AUTHORITY\\Autenticación NTLM"
}
]
},
"Integrity": {
"ProcessId": <pid>,
"MandatoryLabelSid": "S-1-16-12288",
"MandatoryLabelName": "High",
"EnableLua": 1,
"FilterAdministratorToken": "\u003cunset\u003e",
"ConsentPromptBehaviorAdmin": 5,
"AdminApprovalModeActive": "no — built-in Administrator (RID 500) with FilterAdministratorToken unset runs a full High-IL token; Start-Process -Verb RunAs yields High-vs-High and no integrity boundary"
},
"DefaultAcl": {
"SamplePath": "<localappdata>\\Temp\\<tempfile>",
"OwnerAccount": "BUILTIN\\Administradores",
"OwnerSid": "S-1-5-32-544",
"OwnerClass": "group (BUILTIN\\Administrators, TokenOwner)",
"OwnerMatchesTokenOwner": true,
"OwnerMatchesTokenUser": false,
"AreAccessRulesProtected": false,
"AceCount": 3,
"InheritedAceCount": 3,
"Aces": [
{
"Identity": "NT AUTHORITY\\SYSTEM",
"Rights": "FullControl",
"Type": "Allow",
"IsInherited": true,
"Inheritance": "None",
"Propagation": "None"
},
{
"Identity": "BUILTIN\\Administradores",
"Rights": "FullControl",
"Type": "Allow",
"IsInherited": true,
"Inheritance": "None",
"Propagation": "None"
},
{
"Identity": "<machine>\\<user>",
"Rights": "FullControl",
"Type": "Allow",
"IsInherited": true,
"Inheritance": "None",
"Propagation": "None"
}
]
},
"Display": {
"ScreenCount": 1,
"Screens": [
{
"DeviceName": "\\\\.\\DISPLAY1",
"Primary": true,
"BitsPerPixel": 32,
"X": 0,
"Y": 0,
"Width": 1640,
"Height": 736
}
],
"VirtualScreenX": 0,
"VirtualScreenY": 0,
"VirtualScreenWidth": 1639,
"VirtualScreenHeight": 732,
"ReportedDpiX": 96,
"ReportedDpiY": 96,
"ScaleFactor": 1,
"LogPixelsRegistry": "\u003cunset\u003e",
"DpiAwarenessNote": "PowerShell 5.1 is DPI-unaware, so these values are the virtualized system DPI; per-monitor DPI behavior is measured in the DPI/multi-monitor probe, not here",
"TopologyNote": "Bounds come from the VM console framebuffer, which resizes with the console viewer. A normalized diff confined to Screens/VirtualScreen bounds is viewer resize, not platform drift; ScreenCount, Primary, and ScaleFactor are the load-bearing topology facts."
},
"Tools": {
"PowerShellVersion": "5.1.17763.7434",
"PowerShellEdition": "Desktop (Windows PowerShell 5.1; pwsh absent)",
"ClrVersion": "4.0.30319.42000",
"Csc": {
"Label": "csc.exe",
"Path": "C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\csc.exe",
"Present": true,
"FileVersion": "4.8.3761.0 built by: NET48REL1",
"ProductVersion": "4.8.3761.0"
},
"CscLanguageCeiling": "C# 5 (pre-Roslyn .NET Framework compiler)",
"UiAutomationCore": {
"Label": "UIAutomationCore.dll",
"Path": "C:\\Windows\\System32\\UIAutomationCore.dll",
"Present": true,
"FileVersion": "7.2.17763.1 (WinBuild.160101.0800)",
"ProductVersion": "10.0.17763.1"
},
"DotNetFullVersion": "4.8.03761",
"DotNetFullRelease": 528049,
"FrameworkDirectories": [
"v4.0.30319"
],
"GacAssemblies": [
{
"Name": "UIAutomationClient",
"Loaded": true,
"FullName": "UIAutomationClient, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"Location": "C:\\Windows\\Microsoft.Net\\assembly\\GAC_MSIL\\UIAutomationClient\\v4.0_4.0.0.0__31bf3856ad364e35\\UIAutomationClient.dll"
},
{
"Name": "UIAutomationTypes",
"Loaded": true,
"FullName": "UIAutomationTypes, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"Location": "C:\\Windows\\Microsoft.Net\\assembly\\GAC_MSIL\\UIAutomationTypes\\v4.0_4.0.0.0__31bf3856ad364e35\\UIAutomationTypes.dll"
},
{
"Name": "UIAutomationClientsideProviders",
"Loaded": true,
"FullName": "UIAutomationClientsideProviders, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"Location": "C:\\Windows\\Microsoft.Net\\assembly\\GAC_MSIL\\UIAutomationClientsideProviders\\v4.0_4.0.0.0__31bf3856ad364e35\\UIAutomationClientsideProviders.dll"
},
{
"Name": "WindowsBase",
"Loaded": true,
"FullName": "WindowsBase, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"Location": "C:\\Windows\\Microsoft.Net\\assembly\\GAC_MSIL\\WindowsBase\\v4.0_4.0.0.0__31bf3856ad364e35\\WindowsBase.dll"
},
{
"Name": "System.Windows.Forms",
"Loaded": true,
"FullName": "System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"Location": "C:\\Windows\\Microsoft.Net\\assembly\\GAC_MSIL\\System.Windows.Forms\\v4.0_4.0.0.0__b77a5c561934e089\\System.Windows.Forms.dll"
},
{
"Name": "System.Drawing",
"Loaded": true,
"FullName": "System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Location": "C:\\Windows\\Microsoft.Net\\assembly\\GAC_MSIL\\System.Drawing\\v4.0_4.0.0.0__b03f5f7f11d50a3a\\System.Drawing.dll"
}
],
"Uia3ComExposure": {
"Question": "Does the GAC UIAutomationClient assembly expose the UIA3 COM types (IUIAutomation / CUIAutomation)?",
"Answer": "no — it is the managed System.Windows.Automation stack; UIA3 COM requires a csc-compiled interop shim against the registered COM server",
"AssemblyFullName": "UIAutomationClient, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"AssemblyLocation": "C:\\Windows\\Microsoft.Net\\assembly\\GAC_MSIL\\UIAutomationClient\\v4.0_4.0.0.0__31bf3856ad364e35\\UIAutomationClient.dll",
"ExportedTypeCount": 57,
"ExportedNamespaces": [
{
"Namespace": "System.Windows.Automation",
"TypeCount": 56
},
{
"Namespace": "System.Windows.Automation.Text",
"TypeCount": 1
}
],
"ExposesIUIAutomation": false,
"ExposesCUIAutomation": false,
"ExposesAutomationElement": true,
"ComServers": [
{
"Label": "CUIAutomation",
"Clsid": "{<guid>}",
"Registered": true,
"FriendlyName": "UIAutomation Client Central Class",
"InprocServer32": "C:\\Windows\\System32\\uiautomationcore.dll",
"ThreadingModel": "Both"
},
{
"Label": "CUIAutomation8",
"Clsid": "{<guid>}",
"Registered": true,
"FriendlyName": "UIAutomation8 Client Central Class",
"InprocServer32": "C:\\Windows\\System32\\uiautomationcore.dll",
"ThreadingModel": "Both"
}
]
}
}
}

View file

@ -1,178 +0,0 @@
{
"Probe": "01-tree-dump",
"CapturedAtUtc": "<timestamp>",
"Target": "explorer.exe",
"TargetKind": "folder window (CabinetWClass) over %WINDIR%\\System32",
"Stack": "managed",
"Scope": "app/provider",
"Preexisting": false,
"ShellOnlyNote": "explorer.exe runs shell-only on this box: the desktop/taskbar process has an empty MainWindowTitle and exposes no folder tree. A folder window has to be opened to get a real Explorer tree, and only that window is closed in teardown — explorer.exe is never terminated.",
"VirtualizationNote": "the item list is UI-virtualized, so NodeCount tracks the placed window size, not the folder item count. The window is placed at a fixed rect so the count is reproducible.",
"Dump": {
"Label": "explorer-folder-window",
"Stack": "managed",
"View": "ControlView (System.Windows.Automation.TreeWalker.ControlViewWalker)",
"NodeCount": 196,
"DeepestDepth": 7,
"MaxDepth": 12,
"NodeBudget": 3000,
"NodeBudgetExhausted": false,
"DepthTruncatedNodeCount": 0,
"NodesWithNonEmptyBounds": 196,
"PctNonEmptyBounds": 100,
"BoundsMetricNote": "PctNonEmptyBounds counts nodes whose BoundingRectangle is not Rect.Empty — the exact degeneracy a minimized window produces. PctPositiveAreaBounds additionally excludes zero-width/zero-height rects, which are collapsed-but-present controls (a hidden scrollbar), not missing geometry.",
"NodesWithPositiveArea": 196,
"PctPositiveAreaBounds": 100,
"NodesAtOffscreenOrigin": 0,
"NodesWithControlType": 196,
"NodesWithAutomationId": 148,
"RefableNodeCount": 168,
"RefableDefinition": "node advertising at least one managed control pattern; the managed stack cannot see the six UIA3-only patterns (KTD1), so this is a floor not a total",
"NameRedactionRule": "R11: Name is reduced to \u003credacted:N chars\u003e on document/content control types (Document, Edit, Text, ListItem, DataItem, TreeItem, Hyperlink, Image), on a document-titled root when the target carries user content, and on any node whose Name is a \u003e=4 character substring of that root Name — Electron and Win32 chrome panes echo the document title onto themselves. ControlType, AutomationId, ClassName, FrameworkId, bounds, patterns and states stay verbatim, and application-chrome names (button and tab labels) are deliberately kept.",
"SerializedNodeLimit": 120,
"SerializedNodeCount": 120,
"NodeRecordFormat": "one node per line, space separated key=value fields in fixed order: i=\u003cindex\u003e d=\u003cdepth\u003e parent=\u003cparent index, -1 at root\u003e ct=\u003cControlType.ProgrammaticName\u003e cls=\u003cClassName\u003e fw=\u003cFrameworkId\u003e aid=\u003cAutomationId\u003e pid=\u003cProcessId\u003e bounds=\u003cok|empty\u003e left=\u003cpx\u003e top=\u003cpx\u003e width=\u003cpx\u003e height=\u003cpx\u003e en=\u003c0|1 IsEnabled\u003e off=\u003c0|1 IsOffscreen\u003e kbf=\u003c0|1 IsKeyboardFocusable\u003e pats=\u003ccomma separated pattern short names, the ProgrammaticName with its PatternIdentifiers.Pattern suffix removed; \"-\" when none\u003e children=\u003cchild count, present only on a node truncated at MaxDepth\u003e name=\u003cName, or \u003credacted:N chars\u003e on a content node\u003e. left/top/width/height are omitted when bounds=empty. name= is always the last field so a Name containing spaces needs no quoting. Empty string values render as \"-\".",
"TruncationNote": "statistics above cover every walked node; Nodes[] below is truncated to SerializedNodeLimit in document order so the PR stays reviewable (KTD6), and secondary passes of the same target carry statistics only. Re-run this probe locally for the full record.",
"Nodes": [
"i=0 d=0 parent=-1 ct=ControlType.Window cls=CabinetWClass fw=Win32 aid=- pid=<pid> bounds=ok left=40 top=40 width=1000 height=640 en=1 off=0 kbf=1 pats=Transform,Window name=System32",
"i=1 d=1 parent=0 ct=ControlType.Pane cls=UIRibbonCommandBarDock fw=Win32 aid=- pid=<pid> bounds=ok left=48 top=72 width=984 height=24 en=1 off=0 kbf=0 pats=- name=UIRibbonDockTop",
"i=2 d=2 parent=1 ct=ControlType.Pane cls=UIRibbonCommandBar fw=Win32 aid=- pid=<pid> bounds=ok left=48 top=72 width=984 height=24 en=1 off=0 kbf=0 pats=- name=Ribbon",
"i=3 d=3 parent=2 ct=ControlType.Pane cls=UIRibbonWorkPane fw=Win32 aid=- pid=<pid> bounds=ok left=48 top=72 width=984 height=24 en=1 off=0 kbf=0 pats=- name=Ribbon",
"i=4 d=4 parent=3 ct=ControlType.Pane cls=NUIPane fw=Win32 aid=- pid=<pid> bounds=ok left=48 top=72 width=984 height=56 en=1 off=0 kbf=0 pats=- name=-",
"i=5 d=5 parent=4 ct=ControlType.Pane cls=NetUIHWND fw=Win32 aid=- pid=<pid> bounds=ok left=48 top=40 width=984 height=56 en=1 off=0 kbf=0 pats=- name=-",
"i=6 d=1 parent=0 ct=ControlType.Pane cls=WorkerW fw=Win32 aid=- pid=<pid> bounds=ok left=48 top=96 width=984 height=32 en=1 off=0 kbf=0 pats=- name=-",
"i=7 d=2 parent=6 ct=ControlType.Pane cls=ReBarWindow32 fw=Win32 aid=40965 pid=<pid> bounds=ok left=48 top=96 width=984 height=32 en=1 off=0 kbf=0 pats=- name=-",
"i=8 d=3 parent=7 ct=ControlType.Pane cls=TravelBand fw=Win32 aid=- pid=<pid> bounds=ok left=48 top=96 width=80 height=32 en=1 off=0 kbf=0 pats=- name=-",
"i=9 d=4 parent=8 ct=ControlType.Pane cls=ToolbarWindow32 fw=Win32 aid=- pid=<pid> bounds=ok left=48 top=96 width=80 height=32 en=1 off=0 kbf=0 pats=- name=Navigation buttons",
"i=10 d=3 parent=7 ct=ControlType.Pane cls=UpBand fw=Win32 aid=- pid=<pid> bounds=ok left=128 top=96 width=24 height=32 en=1 off=0 kbf=0 pats=- name=-",
"i=11 d=4 parent=10 ct=ControlType.Pane cls=ToolbarWindow32 fw=Win32 aid=- pid=<pid> bounds=ok left=128 top=96 width=24 height=32 en=1 off=0 kbf=0 pats=- name=Up band toolbar",
"i=12 d=3 parent=7 ct=ControlType.Pane cls=Address Band Root fw=Win32 aid=41477 pid=<pid> bounds=ok left=152 top=96 width=656 height=32 en=1 off=0 kbf=0 pats=- name=-",
"i=13 d=4 parent=12 ct=ControlType.Pane cls=msctls_progress32 fw=Win32 aid=- pid=<pid> bounds=ok left=152 top=104 width=648 height=24 en=1 off=0 kbf=0 pats=- name=-",
"i=14 d=5 parent=13 ct=ControlType.Pane cls=Breadcrumb Parent fw=Win32 aid=- pid=<pid> bounds=ok left=152 top=104 width=608 height=24 en=1 off=0 kbf=0 pats=- name=-",
"i=15 d=6 parent=14 ct=ControlType.Pane cls=ToolbarWindow32 fw=Win32 aid=1001 pid=<pid> bounds=ok left=152 top=104 width=608 height=24 en=1 off=0 kbf=0 pats=- name=Address: C:\\Windows\\System32",
"i=16 d=5 parent=13 ct=ControlType.Pane cls=ToolbarWindow32 fw=Win32 aid=- pid=<pid> bounds=ok left=768 top=104 width=40 height=24 en=1 off=0 kbf=0 pats=- name=Address band toolbar",
"i=17 d=3 parent=7 ct=ControlType.Pane cls=SeparatorBand fw=Win32 aid=- pid=<pid> bounds=ok left=808 top=112 width=8 height=0 en=1 off=0 kbf=0 pats=- name=-",
"i=18 d=3 parent=7 ct=ControlType.Pane cls=UniversalSearchBand fw=Win32 aid=- pid=<pid> bounds=ok left=816 top=96 width=208 height=32 en=1 off=0 kbf=0 pats=- name=-",
"i=19 d=4 parent=18 ct=ControlType.Pane cls=Search Box fw=Win32 aid=- pid=<pid> bounds=ok left=816 top=96 width=208 height=24 en=1 off=0 kbf=0 pats=- name=-",
"i=20 d=5 parent=19 ct=ControlType.Pane cls=SearchEditBoxWrapperClass fw=Win32 aid=- pid=<pid> bounds=ok left=824 top=96 width=192 height=24 en=1 off=0 kbf=0 pats=- name=-",
"i=21 d=6 parent=20 ct=ControlType.Edit cls=SearchEditBox fw=DirectUI aid=SearchEditBox pid=<pid> bounds=ok left=824 top=104 width=168 height=16 en=1 off=0 kbf=1 pats=Text,Value name=\u003credacted:10 chars\u003e",
"i=22 d=6 parent=20 ct=ControlType.Button cls=Button fw=DirectUI aid=SearchBoxSearchButton pid=<pid> bounds=ok left=1000 top=96 width=16 height=24 en=1 off=0 kbf=0 pats=Invoke,Value name=Search",
"i=23 d=3 parent=7 ct=ControlType.Pane cls=SeparatorBand fw=Win32 aid=- pid=<pid> bounds=ok left=1024 top=112 width=8 height=0 en=1 off=0 kbf=0 pats=- name=-",
"i=24 d=1 parent=0 ct=ControlType.Pane cls=ShellTabWindowClass fw=Win32 aid=- pid=<pid> bounds=ok left=48 top=128 width=984 height=544 en=1 off=0 kbf=0 pats=- name=System32",
"i=25 d=2 parent=24 ct=ControlType.Pane cls=DUIViewWndClassName fw=Win32 aid=- pid=<pid> bounds=ok left=48 top=128 width=984 height=544 en=1 off=0 kbf=0 pats=- name=-",
"i=26 d=3 parent=25 ct=ControlType.StatusBar cls=StatusBarModuleInner fw=DirectUI aid=StatusBarModuleInner pid=<pid> bounds=ok left=48 top=648 width=984 height=24 en=1 off=0 kbf=0 pats=Value name=Status bar",
"i=27 d=4 parent=26 ct=ControlType.Group cls=Element fw=DirectUI aid=System.StatusBarViewItemCount pid=<pid> bounds=ok left=56 top=648 width=72 height=24 en=1 off=0 kbf=0 pats=Value name=Property Field",
"i=28 d=5 parent=27 ct=ControlType.Text cls=MetadataLabel fw=DirectUI aid=PropertyValue pid=<pid> bounds=ok left=64 top=648 width=64 height=24 en=1 off=0 kbf=0 pats=Value name=\u003credacted:11 chars\u003e",
"i=29 d=4 parent=26 ct=ControlType.Group cls=SelectorNoDefault fw=DirectUI aid=ViewButtonsGroup pid=<pid> bounds=ok left=984 top=648 width=48 height=24 en=1 off=0 kbf=0 pats=Selection,Value name=View Modes",
"i=30 d=5 parent=29 ct=ControlType.RadioButton cls=SelectorButton fw=DirectUI aid=ViewMode_Details pid=<pid> bounds=ok left=984 top=648 width=24 height=24 en=1 off=0 kbf=1 pats=SelectionItem,Value name=Details",
"i=31 d=5 parent=29 ct=ControlType.RadioButton cls=SelectorButton fw=DirectUI aid=ViewMode_LargeIcons pid=<pid> bounds=ok left=1008 top=648 width=24 height=24 en=1 off=0 kbf=1 pats=SelectionItem,Value name=Large Icons",
"i=32 d=3 parent=25 ct=ControlType.Pane cls=ProperTreeHost fw=DirectUI aid=ProperTreeHost pid=<pid> bounds=ok left=48 top=128 width=160 height=520 en=1 off=0 kbf=1 pats=- name=Control Host",
"i=33 d=4 parent=32 ct=ControlType.Pane cls=SysTreeView32 fw=Win32 aid=100 pid=<pid> bounds=ok left=48 top=128 width=160 height=520 en=1 off=0 kbf=0 pats=- name=Tree View",
"i=34 d=3 parent=25 ct=ControlType.Pane cls=DUIListView fw=DirectUI aid=listview pid=<pid> bounds=ok left=208 top=128 width=824 height=520 en=1 off=0 kbf=1 pats=- name=Shell Folder View",
"i=35 d=4 parent=34 ct=ControlType.List cls=UIItemsView fw=DirectUI aid=- pid=<pid> bounds=ok left=208 top=128 width=824 height=520 en=1 off=0 kbf=0 pats=Grid,ItemContainer,MultipleView,Scroll,Selection,Table,Value name=Items View",
"i=36 d=5 parent=35 ct=ControlType.Pane cls=LineVScrollBar fw=DirectUI aid=VerticalScrollBar pid=<pid> bounds=ok left=1016 top=128 width=16 height=520 en=1 off=0 kbf=0 pats=- name=Vertical Scroll Bar",
"i=37 d=5 parent=35 ct=ControlType.Header cls=UIViewHeader fw=DirectUI aid=- pid=<pid> bounds=ok left=208 top=128 width=808 height=24 en=1 off=0 kbf=0 pats=Value name=Header",
"i=38 d=6 parent=37 ct=ControlType.SplitButton cls=UIColumnHeader fw=DirectUI aid=System.ItemNameDisplay pid=<pid> bounds=ok left=208 top=128 width=272 height=24 en=1 off=0 kbf=1 pats=ExpandCollapse,Invoke,Value name=Name",
"i=39 d=7 parent=38 ct=ControlType.Button cls=Button fw=DirectUI aid=Dropdown pid=<pid> bounds=ok left=464 top=128 width=16 height=24 en=1 off=0 kbf=0 pats=Invoke,Value name=Filter dropdown",
"i=40 d=6 parent=37 ct=ControlType.SplitButton cls=UIColumnHeader fw=DirectUI aid=System.DateModified pid=<pid> bounds=ok left=480 top=128 width=120 height=24 en=1 off=0 kbf=1 pats=ExpandCollapse,Invoke,Value name=Date modified",
"i=41 d=7 parent=40 ct=ControlType.Button cls=Button fw=DirectUI aid=Dropdown pid=<pid> bounds=ok left=584 top=128 width=16 height=24 en=1 off=0 kbf=0 pats=Invoke,Value name=Filter dropdown",
"i=42 d=6 parent=37 ct=ControlType.SplitButton cls=UIColumnHeader fw=DirectUI aid=System.ItemTypeText pid=<pid> bounds=ok left=600 top=128 width=120 height=24 en=1 off=0 kbf=1 pats=ExpandCollapse,Invoke,Value name=Type",
"i=43 d=7 parent=42 ct=ControlType.Button cls=Button fw=DirectUI aid=Dropdown pid=<pid> bounds=ok left=704 top=128 width=16 height=24 en=1 off=0 kbf=0 pats=Invoke,Value name=Filter dropdown",
"i=44 d=6 parent=37 ct=ControlType.SplitButton cls=UIColumnHeader fw=DirectUI aid=System.Size pid=<pid> bounds=ok left=720 top=128 width=80 height=24 en=1 off=0 kbf=1 pats=ExpandCollapse,Invoke,Value name=Size",
"i=45 d=7 parent=44 ct=ControlType.Button cls=Button fw=DirectUI aid=Dropdown pid=<pid> bounds=ok left=784 top=128 width=16 height=24 en=1 off=0 kbf=0 pats=Invoke,Value name=Filter dropdown",
"i=46 d=5 parent=35 ct=ControlType.ListItem cls=UIItem fw=DirectUI aid=0 pid=<pid> bounds=ok left=224 top=160 width=576 height=24 en=1 off=0 kbf=1 pats=Invoke,ScrollItem,SelectionItem,Value name=\u003credacted:4 chars\u003e",
"i=47 d=6 parent=46 ct=ControlType.Image cls=UIImage fw=DirectUI aid=- pid=<pid> bounds=ok left=224 top=160 width=16 height=24 en=1 off=0 kbf=0 pats=Value name=-",
"i=48 d=6 parent=46 ct=ControlType.Edit cls=UIProperty fw=DirectUI aid=System.ItemNameDisplay pid=<pid> bounds=ok left=240 top=160 width=240 height=24 en=1 off=0 kbf=0 pats=GridItem,TableItem,Value name=\u003credacted:4 chars\u003e",
"i=49 d=6 parent=46 ct=ControlType.Edit cls=UIProperty fw=DirectUI aid=System.DateModified pid=<pid> bounds=ok left=480 top=160 width=120 height=24 en=1 off=0 kbf=1 pats=GridItem,TableItem,Value name=\u003credacted:13 chars\u003e",
"i=50 d=6 parent=46 ct=ControlType.Edit cls=UIProperty fw=DirectUI aid=System.ItemTypeText pid=<pid> bounds=ok left=600 top=160 width=120 height=24 en=1 off=0 kbf=1 pats=GridItem,TableItem,Value name=\u003credacted:4 chars\u003e",
"i=51 d=6 parent=46 ct=ControlType.Edit cls=UIProperty fw=DirectUI aid=System.Size pid=<pid> bounds=ok left=720 top=160 width=80 height=24 en=1 off=0 kbf=1 pats=GridItem,TableItem,Value name=\u003credacted:4 chars\u003e",
"i=52 d=5 parent=35 ct=ControlType.ListItem cls=UIItem fw=DirectUI aid=1 pid=<pid> bounds=ok left=224 top=184 width=576 height=24 en=1 off=0 kbf=1 pats=Invoke,ScrollItem,SelectionItem,Value name=\u003credacted:4 chars\u003e",
"i=53 d=6 parent=52 ct=ControlType.Image cls=UIImage fw=DirectUI aid=- pid=<pid> bounds=ok left=224 top=184 width=16 height=24 en=1 off=0 kbf=0 pats=Value name=-",
"i=54 d=6 parent=52 ct=ControlType.Edit cls=UIProperty fw=DirectUI aid=System.ItemNameDisplay pid=<pid> bounds=ok left=240 top=184 width=240 height=24 en=1 off=0 kbf=0 pats=GridItem,TableItem,Value name=\u003credacted:4 chars\u003e",
"i=55 d=6 parent=52 ct=ControlType.Edit cls=UIProperty fw=DirectUI aid=System.DateModified pid=<pid> bounds=ok left=480 top=184 width=120 height=24 en=1 off=0 kbf=1 pats=GridItem,TableItem,Value name=\u003credacted:13 chars\u003e",
"i=56 d=6 parent=52 ct=ControlType.Edit cls=UIProperty fw=DirectUI aid=System.ItemTypeText pid=<pid> bounds=ok left=600 top=184 width=120 height=24 en=1 off=0 kbf=1 pats=GridItem,TableItem,Value name=\u003credacted:4 chars\u003e",
"i=57 d=6 parent=52 ct=ControlType.Edit cls=UIProperty fw=DirectUI aid=System.Size pid=<pid> bounds=ok left=720 top=184 width=80 height=24 en=1 off=0 kbf=1 pats=GridItem,TableItem,Value name=\u003credacted:4 chars\u003e",
"i=58 d=5 parent=35 ct=ControlType.ListItem cls=UIItem fw=DirectUI aid=2 pid=<pid> bounds=ok left=224 top=200 width=576 height=24 en=1 off=0 kbf=1 pats=Invoke,ScrollItem,SelectionItem,Value name=\u003credacted:18 chars\u003e",
"i=59 d=6 parent=58 ct=ControlType.Image cls=UIImage fw=DirectUI aid=- pid=<pid> bounds=ok left=224 top=200 width=16 height=24 en=1 off=0 kbf=0 pats=Value name=-",
"i=60 d=6 parent=58 ct=ControlType.Edit cls=UIProperty fw=DirectUI aid=System.ItemNameDisplay pid=<pid> bounds=ok left=240 top=200 width=240 height=24 en=1 off=0 kbf=0 pats=GridItem,TableItem,Value name=\u003credacted:4 chars\u003e",
"i=61 d=6 parent=58 ct=ControlType.Edit cls=UIProperty fw=DirectUI aid=System.DateModified pid=<pid> bounds=ok left=480 top=200 width=120 height=24 en=1 off=0 kbf=1 pats=GridItem,TableItem,Value name=\u003credacted:13 chars\u003e",
"i=62 d=6 parent=58 ct=ControlType.Edit cls=UIProperty fw=DirectUI aid=System.ItemTypeText pid=<pid> bounds=ok left=600 top=200 width=120 height=24 en=1 off=0 kbf=1 pats=GridItem,TableItem,Value name=\u003credacted:4 chars\u003e",
"i=63 d=6 parent=58 ct=ControlType.Edit cls=UIProperty fw=DirectUI aid=System.Size pid=<pid> bounds=ok left=720 top=200 width=80 height=24 en=1 off=0 kbf=1 pats=GridItem,TableItem,Value name=\u003credacted:4 chars\u003e",
"i=64 d=5 parent=35 ct=ControlType.ListItem cls=UIItem fw=DirectUI aid=3 pid=<pid> bounds=ok left=224 top=224 width=576 height=24 en=1 off=0 kbf=1 pats=Invoke,ScrollItem,SelectionItem,Value name=\u003credacted:5 chars\u003e",
"i=65 d=6 parent=64 ct=ControlType.Image cls=UIImage fw=DirectUI aid=- pid=<pid> bounds=ok left=224 top=224 width=16 height=24 en=1 off=0 kbf=0 pats=Value name=-",
"i=66 d=6 parent=64 ct=ControlType.Edit cls=UIProperty fw=DirectUI aid=System.ItemNameDisplay pid=<pid> bounds=ok left=240 top=224 width=240 height=24 en=1 off=0 kbf=0 pats=GridItem,TableItem,Value name=\u003credacted:4 chars\u003e",
"i=67 d=6 parent=64 ct=ControlType.Edit cls=UIProperty fw=DirectUI aid=System.DateModified pid=<pid> bounds=ok left=480 top=224 width=120 height=24 en=1 off=0 kbf=1 pats=GridItem,TableItem,Value name=\u003credacted:13 chars\u003e",
"i=68 d=6 parent=64 ct=ControlType.Edit cls=UIProperty fw=DirectUI aid=System.ItemTypeText pid=<pid> bounds=ok left=600 top=224 width=120 height=24 en=1 off=0 kbf=1 pats=GridItem,TableItem,Value name=\u003credacted:4 chars\u003e",
"i=69 d=6 parent=64 ct=ControlType.Edit cls=UIProperty fw=DirectUI aid=System.Size pid=<pid> bounds=ok left=720 top=224 width=80 height=24 en=1 off=0 kbf=1 pats=GridItem,TableItem,Value name=\u003credacted:4 chars\u003e",
"i=70 d=5 parent=35 ct=ControlType.ListItem cls=UIItem fw=DirectUI aid=4 pid=<pid> bounds=ok left=224 top=248 width=576 height=24 en=1 off=0 kbf=1 pats=Invoke,ScrollItem,SelectionItem,Value name=\u003credacted:9 chars\u003e",
"i=71 d=6 parent=70 ct=ControlType.Image cls=UIImage fw=DirectUI aid=- pid=<pid> bounds=ok left=224 top=248 width=16 height=24 en=1 off=0 kbf=0 pats=Value name=-",
"i=72 d=6 parent=70 ct=ControlType.Edit cls=UIProperty fw=DirectUI aid=System.ItemNameDisplay pid=<pid> bounds=ok left=240 top=248 width=240 height=24 en=1 off=0 kbf=0 pats=GridItem,TableItem,Value name=\u003credacted:4 chars\u003e",
"i=73 d=6 parent=70 ct=ControlType.Edit cls=UIProperty fw=DirectUI aid=System.DateModified pid=<pid> bounds=ok left=480 top=248 width=120 height=24 en=1 off=0 kbf=1 pats=GridItem,TableItem,Value name=\u003credacted:13 chars\u003e",
"i=74 d=6 parent=70 ct=ControlType.Edit cls=UIProperty fw=DirectUI aid=System.ItemTypeText pid=<pid> bounds=ok left=600 top=248 width=120 height=24 en=1 off=0 kbf=1 pats=GridItem,TableItem,Value name=\u003credacted:4 chars\u003e",
"i=75 d=6 parent=70 ct=ControlType.Edit cls=UIProperty fw=DirectUI aid=System.Size pid=<pid> bounds=ok left=720 top=248 width=80 height=24 en=1 off=0 kbf=1 pats=GridItem,TableItem,Value name=\u003credacted:4 chars\u003e",
"i=76 d=5 parent=35 ct=ControlType.ListItem cls=UIItem fw=DirectUI aid=5 pid=<pid> bounds=ok left=224 top=264 width=576 height=24 en=1 off=0 kbf=1 pats=Invoke,ScrollItem,SelectionItem,Value name=\u003credacted:9 chars\u003e",
"i=77 d=6 parent=76 ct=ControlType.Image cls=UIImage fw=DirectUI aid=- pid=<pid> bounds=ok left=224 top=264 width=16 height=24 en=1 off=0 kbf=0 pats=Value name=-",
"i=78 d=6 parent=76 ct=ControlType.Edit cls=UIProperty fw=DirectUI aid=System.ItemNameDisplay pid=<pid> bounds=ok left=240 top=264 width=240 height=24 en=1 off=0 kbf=0 pats=GridItem,TableItem,Value name=\u003credacted:4 chars\u003e",
"i=79 d=6 parent=76 ct=ControlType.Edit cls=UIProperty fw=DirectUI aid=System.DateModified pid=<pid> bounds=ok left=480 top=264 width=120 height=24 en=1 off=0 kbf=1 pats=GridItem,TableItem,Value name=\u003credacted:13 chars\u003e",
"i=80 d=6 parent=76 ct=ControlType.Edit cls=UIProperty fw=DirectUI aid=System.ItemTypeText pid=<pid> bounds=ok left=600 top=264 width=120 height=24 en=1 off=0 kbf=1 pats=GridItem,TableItem,Value name=\u003credacted:4 chars\u003e",
"i=81 d=6 parent=76 ct=ControlType.Edit cls=UIProperty fw=DirectUI aid=System.Size pid=<pid> bounds=ok left=720 top=264 width=80 height=24 en=1 off=0 kbf=1 pats=GridItem,TableItem,Value name=\u003credacted:4 chars\u003e",
"i=82 d=5 parent=35 ct=ControlType.ListItem cls=UIItem fw=DirectUI aid=6 pid=<pid> bounds=ok left=224 top=288 width=576 height=24 en=1 off=0 kbf=1 pats=Invoke,ScrollItem,SelectionItem,Value name=\u003credacted:4 chars\u003e",
"i=83 d=6 parent=82 ct=ControlType.Image cls=UIImage fw=DirectUI aid=- pid=<pid> bounds=ok left=224 top=288 width=16 height=24 en=1 off=0 kbf=0 pats=Value name=-",
"i=84 d=6 parent=82 ct=ControlType.Edit cls=UIProperty fw=DirectUI aid=System.ItemNameDisplay pid=<pid> bounds=ok left=240 top=288 width=240 height=24 en=1 off=0 kbf=0 pats=GridItem,TableItem,Value name=\u003credacted:4 chars\u003e",
"i=85 d=6 parent=82 ct=ControlType.Edit cls=UIProperty fw=DirectUI aid=System.DateModified pid=<pid> bounds=ok left=480 top=288 width=120 height=24 en=1 off=0 kbf=1 pats=GridItem,TableItem,Value name=\u003credacted:13 chars\u003e",
"i=86 d=6 parent=82 ct=ControlType.Edit cls=UIProperty fw=DirectUI aid=System.ItemTypeText pid=<pid> bounds=ok left=600 top=288 width=120 height=24 en=1 off=0 kbf=1 pats=GridItem,TableItem,Value name=\u003credacted:4 chars\u003e",
"i=87 d=6 parent=82 ct=ControlType.Edit cls=UIProperty fw=DirectUI aid=System.Size pid=<pid> bounds=ok left=720 top=288 width=80 height=24 en=1 off=0 kbf=1 pats=GridItem,TableItem,Value name=\u003credacted:4 chars\u003e",
"i=88 d=5 parent=35 ct=ControlType.ListItem cls=UIItem fw=DirectUI aid=7 pid=<pid> bounds=ok left=224 top=304 width=576 height=24 en=1 off=0 kbf=1 pats=Invoke,ScrollItem,SelectionItem,Value name=\u003credacted:5 chars\u003e",
"i=89 d=6 parent=88 ct=ControlType.Image cls=UIImage fw=DirectUI aid=- pid=<pid> bounds=ok left=224 top=304 width=16 height=24 en=1 off=0 kbf=0 pats=Value name=-",
"i=90 d=6 parent=88 ct=ControlType.Edit cls=UIProperty fw=DirectUI aid=System.ItemNameDisplay pid=<pid> bounds=ok left=240 top=304 width=240 height=24 en=1 off=0 kbf=0 pats=GridItem,TableItem,Value name=\u003credacted:4 chars\u003e",
"i=91 d=6 parent=88 ct=ControlType.Edit cls=UIProperty fw=DirectUI aid=System.DateModified pid=<pid> bounds=ok left=480 top=304 width=120 height=24 en=1 off=0 kbf=1 pats=GridItem,TableItem,Value name=\u003credacted:13 chars\u003e",
"i=92 d=6 parent=88 ct=ControlType.Edit cls=UIProperty fw=DirectUI aid=System.ItemTypeText pid=<pid> bounds=ok left=600 top=304 width=120 height=24 en=1 off=0 kbf=1 pats=GridItem,TableItem,Value name=\u003credacted:4 chars\u003e",
"i=93 d=6 parent=88 ct=ControlType.Edit cls=UIProperty fw=DirectUI aid=System.Size pid=<pid> bounds=ok left=720 top=304 width=80 height=24 en=1 off=0 kbf=1 pats=GridItem,TableItem,Value name=\u003credacted:4 chars\u003e",
"i=94 d=5 parent=35 ct=ControlType.ListItem cls=UIItem fw=DirectUI aid=8 pid=<pid> bounds=ok left=224 top=328 width=576 height=24 en=1 off=0 kbf=1 pats=Invoke,ScrollItem,SelectionItem,Value name=\u003credacted:13 chars\u003e",
"i=95 d=6 parent=94 ct=ControlType.Image cls=UIImage fw=DirectUI aid=- pid=<pid> bounds=ok left=224 top=328 width=16 height=24 en=1 off=0 kbf=0 pats=Value name=-",
"i=96 d=6 parent=94 ct=ControlType.Edit cls=UIProperty fw=DirectUI aid=System.ItemNameDisplay pid=<pid> bounds=ok left=240 top=328 width=240 height=24 en=1 off=0 kbf=0 pats=GridItem,TableItem,Value name=\u003credacted:4 chars\u003e",
"i=97 d=6 parent=94 ct=ControlType.Edit cls=UIProperty fw=DirectUI aid=System.DateModified pid=<pid> bounds=ok left=480 top=328 width=120 height=24 en=1 off=0 kbf=1 pats=GridItem,TableItem,Value name=\u003credacted:13 chars\u003e",
"i=98 d=6 parent=94 ct=ControlType.Edit cls=UIProperty fw=DirectUI aid=System.ItemTypeText pid=<pid> bounds=ok left=600 top=328 width=120 height=24 en=1 off=0 kbf=1 pats=GridItem,TableItem,Value name=\u003credacted:4 chars\u003e",
"i=99 d=6 parent=94 ct=ControlType.Edit cls=UIProperty fw=DirectUI aid=System.Size pid=<pid> bounds=ok left=720 top=328 width=80 height=24 en=1 off=0 kbf=1 pats=GridItem,TableItem,Value name=\u003credacted:4 chars\u003e",
"i=100 d=5 parent=35 ct=ControlType.ListItem cls=UIItem fw=DirectUI aid=9 pid=<pid> bounds=ok left=224 top=352 width=576 height=24 en=1 off=0 kbf=1 pats=Invoke,ScrollItem,SelectionItem,Value name=\u003credacted:5 chars\u003e",
"i=101 d=6 parent=100 ct=ControlType.Image cls=UIImage fw=DirectUI aid=- pid=<pid> bounds=ok left=224 top=352 width=16 height=24 en=1 off=0 kbf=0 pats=Value name=-",
"i=102 d=6 parent=100 ct=ControlType.Edit cls=UIProperty fw=DirectUI aid=System.ItemNameDisplay pid=<pid> bounds=ok left=240 top=352 width=240 height=24 en=1 off=0 kbf=0 pats=GridItem,TableItem,Value name=\u003credacted:4 chars\u003e",
"i=103 d=6 parent=100 ct=ControlType.Edit cls=UIProperty fw=DirectUI aid=System.DateModified pid=<pid> bounds=ok left=480 top=352 width=120 height=24 en=1 off=0 kbf=1 pats=GridItem,TableItem,Value name=\u003credacted:13 chars\u003e",
"i=104 d=6 parent=100 ct=ControlType.Edit cls=UIProperty fw=DirectUI aid=System.ItemTypeText pid=<pid> bounds=ok left=600 top=352 width=120 height=24 en=1 off=0 kbf=1 pats=GridItem,TableItem,Value name=\u003credacted:4 chars\u003e",
"i=105 d=6 parent=100 ct=ControlType.Edit cls=UIProperty fw=DirectUI aid=System.Size pid=<pid> bounds=ok left=720 top=352 width=80 height=24 en=1 off=0 kbf=1 pats=GridItem,TableItem,Value name=\u003credacted:4 chars\u003e",
"i=106 d=5 parent=35 ct=ControlType.ListItem cls=UIItem fw=DirectUI aid=10 pid=<pid> bounds=ok left=224 top=368 width=576 height=24 en=1 off=0 kbf=1 pats=Invoke,ScrollItem,SelectionItem,Value name=\u003credacted:4 chars\u003e",
"i=107 d=6 parent=106 ct=ControlType.Image cls=UIImage fw=DirectUI aid=- pid=<pid> bounds=ok left=224 top=368 width=16 height=24 en=1 off=0 kbf=0 pats=Value name=-",
"i=108 d=6 parent=106 ct=ControlType.Edit cls=UIProperty fw=DirectUI aid=System.ItemNameDisplay pid=<pid> bounds=ok left=240 top=368 width=240 height=24 en=1 off=0 kbf=0 pats=GridItem,TableItem,Value name=\u003credacted:4 chars\u003e",
"i=109 d=6 parent=106 ct=ControlType.Edit cls=UIProperty fw=DirectUI aid=System.DateModified pid=<pid> bounds=ok left=480 top=368 width=120 height=24 en=1 off=0 kbf=1 pats=GridItem,TableItem,Value name=\u003credacted:13 chars\u003e",
"i=110 d=6 parent=106 ct=ControlType.Edit cls=UIProperty fw=DirectUI aid=System.ItemTypeText pid=<pid> bounds=ok left=600 top=368 width=120 height=24 en=1 off=0 kbf=1 pats=GridItem,TableItem,Value name=\u003credacted:4 chars\u003e",
"i=111 d=6 parent=106 ct=ControlType.Edit cls=UIProperty fw=DirectUI aid=System.Size pid=<pid> bounds=ok left=720 top=368 width=80 height=24 en=1 off=0 kbf=1 pats=GridItem,TableItem,Value name=\u003credacted:4 chars\u003e",
"i=112 d=5 parent=35 ct=ControlType.ListItem cls=UIItem fw=DirectUI aid=11 pid=<pid> bounds=ok left=224 top=392 width=576 height=24 en=1 off=0 kbf=1 pats=Invoke,ScrollItem,SelectionItem,Value name=\u003credacted:8 chars\u003e",
"i=113 d=6 parent=112 ct=ControlType.Image cls=UIImage fw=DirectUI aid=- pid=<pid> bounds=ok left=224 top=392 width=16 height=24 en=1 off=0 kbf=0 pats=Value name=-",
"i=114 d=6 parent=112 ct=ControlType.Edit cls=UIProperty fw=DirectUI aid=System.ItemNameDisplay pid=<pid> bounds=ok left=240 top=392 width=240 height=24 en=1 off=0 kbf=0 pats=GridItem,TableItem,Value name=\u003credacted:4 chars\u003e",
"i=115 d=6 parent=112 ct=ControlType.Edit cls=UIProperty fw=DirectUI aid=System.DateModified pid=<pid> bounds=ok left=480 top=392 width=120 height=24 en=1 off=0 kbf=1 pats=GridItem,TableItem,Value name=\u003credacted:13 chars\u003e",
"i=116 d=6 parent=112 ct=ControlType.Edit cls=UIProperty fw=DirectUI aid=System.ItemTypeText pid=<pid> bounds=ok left=600 top=392 width=120 height=24 en=1 off=0 kbf=1 pats=GridItem,TableItem,Value name=\u003credacted:4 chars\u003e",
"i=117 d=6 parent=112 ct=ControlType.Edit cls=UIProperty fw=DirectUI aid=System.Size pid=<pid> bounds=ok left=720 top=392 width=80 height=24 en=1 off=0 kbf=1 pats=GridItem,TableItem,Value name=\u003credacted:4 chars\u003e",
"i=118 d=5 parent=35 ct=ControlType.ListItem cls=UIItem fw=DirectUI aid=12 pid=<pid> bounds=ok left=224 top=416 width=576 height=24 en=1 off=0 kbf=1 pats=Invoke,ScrollItem,SelectionItem,Value name=\u003credacted:7 chars\u003e",
"i=119 d=6 parent=118 ct=ControlType.Image cls=UIImage fw=DirectUI aid=- pid=<pid> bounds=ok left=224 top=416 width=16 height=24 en=1 off=0 kbf=0 pats=Value name=-"
],
"FocusBefore": {
"Resolved": true,
"ControlType": "ControlType.Window",
"ClassName": "org.wezfurlong.wezterm",
"ProcessId": <pid>,
"NativeWindowHandle": <hwnd>
},
"FocusAfter": {
"Resolved": true,
"ControlType": "ControlType.Window",
"ClassName": "org.wezfurlong.wezterm",
"ProcessId": <pid>,
"NativeWindowHandle": <hwnd>
},
"FocusUnchanged": true,
"FocusIdentityNote": "focus identity is asserted on ControlType/ClassName/ProcessId/NativeWindowHandle; the focused element is usually the operator console, whose Name mutates independently of focus and would produce false interference",
"Foreground": {
"ProcessId": <pid>
}
}
}

View file

@ -1,127 +0,0 @@
{
"Probe": "01-tree-dump",
"CapturedAtUtc": "<timestamp>",
"Target": "notepad.exe",
"TargetKind": "classic Win32 Notepad (%WINDIR%\\System32\\notepad.exe) — not the Store/MSIX RichEdit Notepad",
"Stack": "managed",
"Scope": "app/provider",
"LaunchPolicy": "Start-Process then ShowWindow(SW_SHOWNOACTIVATE) + SetWindowPos(SWP_NOACTIVATE|SWP_NOZORDER); SetForegroundWindow is never called",
"PlacementRect": {
"Left": 40,
"Top": 40,
"Width": 1000,
"Height": 640
},
"MinimizedDelta": {
"RestoredNodeCount": 3,
"MinimizedNodeCount": 3,
"NodeCountDelta": 0,
"RestoredPctNonEmpty": 100,
"MinimizedPctNonEmpty": 66.67,
"RestoredOffscreenOrigin": 0,
"MinimizedOffscreenOrigin": 2,
"Finding": "launch/window state does not change managed tree completeness on classic Notepad: identical node count restored and minimized. It changes geometry only.",
"MinimizedOffscreenState": "NEW-EDGE: every node in the minimized pass still reports IsOffscreen=0, including the Window node whose rect is Rect.Empty. UIA does not mark a minimized window or its children offscreen on this build, so 2.6 cannot use IsOffscreen alone to detect a non-visible window.",
"MinimizedGeometryShape": "NEW-EDGE, and narrower than the plan assumed: only the minimized top-level Window node reports Rect.Empty. Its descendants report a NON-empty rect anchored at the -32000 off-screen origin with real width/height. A geometry corpus taken minimized is therefore degenerate in two different shapes, and an occlusion/hit-test gate that only tests Rect.IsEmpty would accept the -32000 descendants as real screen geometry."
},
"RestoredPass": {
"Label": "notepad-restored-not-activated",
"Stack": "managed",
"View": "ControlView (System.Windows.Automation.TreeWalker.ControlViewWalker)",
"NodeCount": 3,
"DeepestDepth": 1,
"MaxDepth": 12,
"NodeBudget": 3000,
"NodeBudgetExhausted": false,
"DepthTruncatedNodeCount": 0,
"NodesWithNonEmptyBounds": 3,
"PctNonEmptyBounds": 100,
"BoundsMetricNote": "PctNonEmptyBounds counts nodes whose BoundingRectangle is not Rect.Empty — the exact degeneracy a minimized window produces. PctPositiveAreaBounds additionally excludes zero-width/zero-height rects, which are collapsed-but-present controls (a hidden scrollbar), not missing geometry.",
"NodesWithPositiveArea": 3,
"PctPositiveAreaBounds": 100,
"NodesAtOffscreenOrigin": 0,
"NodesWithControlType": 3,
"NodesWithAutomationId": 2,
"RefableNodeCount": 1,
"RefableDefinition": "node advertising at least one managed control pattern; the managed stack cannot see the six UIA3-only patterns (KTD1), so this is a floor not a total",
"NameRedactionRule": "R11: Name is reduced to \u003credacted:N chars\u003e on document/content control types (Document, Edit, Text, ListItem, DataItem, TreeItem, Hyperlink, Image), on a document-titled root when the target carries user content, and on any node whose Name is a \u003e=4 character substring of that root Name — Electron and Win32 chrome panes echo the document title onto themselves. ControlType, AutomationId, ClassName, FrameworkId, bounds, patterns and states stay verbatim, and application-chrome names (button and tab labels) are deliberately kept.",
"SerializedNodeLimit": 120,
"SerializedNodeCount": 3,
"NodeRecordFormat": "one node per line, space separated key=value fields in fixed order: i=\u003cindex\u003e d=\u003cdepth\u003e parent=\u003cparent index, -1 at root\u003e ct=\u003cControlType.ProgrammaticName\u003e cls=\u003cClassName\u003e fw=\u003cFrameworkId\u003e aid=\u003cAutomationId\u003e pid=\u003cProcessId\u003e bounds=\u003cok|empty\u003e left=\u003cpx\u003e top=\u003cpx\u003e width=\u003cpx\u003e height=\u003cpx\u003e en=\u003c0|1 IsEnabled\u003e off=\u003c0|1 IsOffscreen\u003e kbf=\u003c0|1 IsKeyboardFocusable\u003e pats=\u003ccomma separated pattern short names, the ProgrammaticName with its PatternIdentifiers.Pattern suffix removed; \"-\" when none\u003e children=\u003cchild count, present only on a node truncated at MaxDepth\u003e name=\u003cName, or \u003credacted:N chars\u003e on a content node\u003e. left/top/width/height are omitted when bounds=empty. name= is always the last field so a Name containing spaces needs no quoting. Empty string values render as \"-\".",
"TruncationNote": "statistics above cover every walked node; Nodes[] below is truncated to SerializedNodeLimit in document order so the PR stays reviewable (KTD6), and secondary passes of the same target carry statistics only. Re-run this probe locally for the full record.",
"Nodes": [
"i=0 d=0 parent=-1 ct=ControlType.Window cls=Notepad fw=Win32 aid=- pid=<pid> bounds=ok left=40 top=40 width=1000 height=640 en=1 off=0 kbf=0 pats=Transform,Window name=Untitled - Notepad",
"i=1 d=1 parent=0 ct=ControlType.Pane cls=Edit fw=Win32 aid=15 pid=<pid> bounds=ok left=48 top=88 width=984 height=560 en=1 off=0 kbf=0 pats=- name=-",
"i=2 d=1 parent=0 ct=ControlType.Pane cls=msctls_statusbar32 fw=Win32 aid=1025 pid=<pid> bounds=ok left=48 top=648 width=984 height=24 en=1 off=0 kbf=0 pats=- name=-"
],
"FocusBefore": {
"Resolved": true,
"ControlType": "ControlType.Window",
"ClassName": "org.wezfurlong.wezterm",
"ProcessId": <pid>,
"NativeWindowHandle": <hwnd>
},
"FocusAfter": {
"Resolved": true,
"ControlType": "ControlType.Window",
"ClassName": "org.wezfurlong.wezterm",
"ProcessId": <pid>,
"NativeWindowHandle": <hwnd>
},
"FocusUnchanged": true,
"FocusIdentityNote": "focus identity is asserted on ControlType/ClassName/ProcessId/NativeWindowHandle; the focused element is usually the operator console, whose Name mutates independently of focus and would produce false interference",
"Foreground": {
"ProcessId": <pid>
}
},
"MinimizedPass": {
"Label": "notepad-minimized-control",
"Stack": "managed",
"View": "ControlView (System.Windows.Automation.TreeWalker.ControlViewWalker)",
"NodeCount": 3,
"DeepestDepth": 1,
"MaxDepth": 12,
"NodeBudget": 3000,
"NodeBudgetExhausted": false,
"DepthTruncatedNodeCount": 0,
"NodesWithNonEmptyBounds": 2,
"PctNonEmptyBounds": 66.67,
"BoundsMetricNote": "PctNonEmptyBounds counts nodes whose BoundingRectangle is not Rect.Empty — the exact degeneracy a minimized window produces. PctPositiveAreaBounds additionally excludes zero-width/zero-height rects, which are collapsed-but-present controls (a hidden scrollbar), not missing geometry.",
"NodesWithPositiveArea": 2,
"PctPositiveAreaBounds": 66.67,
"NodesAtOffscreenOrigin": 2,
"NodesWithControlType": 3,
"NodesWithAutomationId": 2,
"RefableNodeCount": 1,
"RefableDefinition": "node advertising at least one managed control pattern; the managed stack cannot see the six UIA3-only patterns (KTD1), so this is a floor not a total",
"NameRedactionRule": "R11: Name is reduced to \u003credacted:N chars\u003e on document/content control types (Document, Edit, Text, ListItem, DataItem, TreeItem, Hyperlink, Image), on a document-titled root when the target carries user content, and on any node whose Name is a \u003e=4 character substring of that root Name — Electron and Win32 chrome panes echo the document title onto themselves. ControlType, AutomationId, ClassName, FrameworkId, bounds, patterns and states stay verbatim, and application-chrome names (button and tab labels) are deliberately kept.",
"SerializedNodeLimit": 120,
"SerializedNodeCount": 3,
"NodeRecordFormat": "one node per line, space separated key=value fields in fixed order: i=\u003cindex\u003e d=\u003cdepth\u003e parent=\u003cparent index, -1 at root\u003e ct=\u003cControlType.ProgrammaticName\u003e cls=\u003cClassName\u003e fw=\u003cFrameworkId\u003e aid=\u003cAutomationId\u003e pid=\u003cProcessId\u003e bounds=\u003cok|empty\u003e left=\u003cpx\u003e top=\u003cpx\u003e width=\u003cpx\u003e height=\u003cpx\u003e en=\u003c0|1 IsEnabled\u003e off=\u003c0|1 IsOffscreen\u003e kbf=\u003c0|1 IsKeyboardFocusable\u003e pats=\u003ccomma separated pattern short names, the ProgrammaticName with its PatternIdentifiers.Pattern suffix removed; \"-\" when none\u003e children=\u003cchild count, present only on a node truncated at MaxDepth\u003e name=\u003cName, or \u003credacted:N chars\u003e on a content node\u003e. left/top/width/height are omitted when bounds=empty. name= is always the last field so a Name containing spaces needs no quoting. Empty string values render as \"-\".",
"TruncationNote": "statistics above cover every walked node; Nodes[] below is truncated to SerializedNodeLimit in document order so the PR stays reviewable (KTD6), and secondary passes of the same target carry statistics only. Re-run this probe locally for the full record.",
"Nodes": [
"i=0 d=0 parent=-1 ct=ControlType.Window cls=Notepad fw=Win32 aid=- pid=<pid> bounds=empty en=1 off=0 kbf=0 pats=Transform,Window name=Untitled - Notepad",
"i=1 d=1 parent=0 ct=ControlType.Pane cls=Edit fw=Win32 aid=15 pid=<pid> bounds=ok left=-32000 top=-32000 width=984 height=560 en=1 off=0 kbf=0 pats=- name=-",
"i=2 d=1 parent=0 ct=ControlType.Pane cls=msctls_statusbar32 fw=Win32 aid=1025 pid=<pid> bounds=ok left=-32000 top=-31440 width=984 height=24 en=1 off=0 kbf=0 pats=- name=-"
],
"FocusBefore": {
"Resolved": true,
"ControlType": "ControlType.Window",
"ClassName": "org.wezfurlong.wezterm",
"ProcessId": <pid>,
"NativeWindowHandle": <hwnd>
},
"FocusAfter": {
"Resolved": true,
"ControlType": "ControlType.Window",
"ClassName": "org.wezfurlong.wezterm",
"ProcessId": <pid>,
"NativeWindowHandle": <hwnd>
},
"FocusUnchanged": true,
"FocusIdentityNote": "focus identity is asserted on ControlType/ClassName/ProcessId/NativeWindowHandle; the focused element is usually the operator console, whose Name mutates independently of focus and would produce false interference",
"Foreground": {
"ProcessId": <pid>
}
}
}

View file

@ -1,288 +0,0 @@
{
"Probe": "01-tree-dump",
"CapturedAtUtc": "<timestamp>",
"Target": "Obsidian (Electron/Chromium)",
"TargetKind": "%LOCALAPPDATA%\\Programs\\Obsidian\\Obsidian.exe",
"ObsidianVersion": "1.12.7",
"Stack": "managed",
"Scope": "app/provider",
"Preexisting": false,
"SettleMs": 8000,
"ActivationFinding": {
"FirstContactNodeCount": 9,
"AfterSettleNodeCount": 113,
"AfterOtherTargetsMinimizedCount": 113,
"FirstContactRefableNodeCount": 9,
"SettledRefableNodeCount": 113,
"Verdict": "NEW-EDGE",
"Finding": "the managed client does trigger Chromium renderer-accessibility activation with no --force-renderer-accessibility flag: the control view grows from FirstContactNodeCount to AfterSettleNodeCount across the 8 s settle. A single immediate read understates the tree by more than an order of magnitude, so any Electron measurement taken without a settle is a false baseline.",
"CrossCheck": "U7 measured 9 -\u003e 133 ControlView across an 8 s settle on the UIA3 COM stack. First contact reproduces exactly on the managed stack; the settled size tracks Obsidian window content and is not a fixed number.",
"PlacementHazard": "OBSERVED, and the reason this script minimizes each target after its own dump: an earlier revision that left Notepad, Settings, and Explorer restored on top of Obsidian at the same 40,40,1000,640 rect held Obsidian at the first-contact count for the full 8 s settle and for a 16 s instrumented hold across three consecutive runs. With the covering windows minimized the same HWND populates normally. The causal mechanism is not isolated here — Chromium native-window occlusion tracking is the obvious candidate but was not proven — so this is recorded as a probe-placement hazard, not as a product-contract claim. A sub-phase that measures an Electron tree behind another window may be measuring nothing.",
"SettledSizeStability": "the settled node count is content-dependent (133 measured on a bare-walker run, 113 here). Treat the growth ratio, not the absolute count, as the stable fact.",
"BaselineForU8": "SettledRefableNodeCount is the ref-able baseline U8 diffs its --force-renderer-accessibility run against, and it is only valid taken after a settle"
},
"FirstContactPass": {
"Label": "obsidian-first-contact",
"Stack": "managed",
"View": "ControlView (System.Windows.Automation.TreeWalker.ControlViewWalker)",
"NodeCount": 9,
"DeepestDepth": 7,
"MaxDepth": 12,
"NodeBudget": 3000,
"NodeBudgetExhausted": false,
"DepthTruncatedNodeCount": 0,
"NodesWithNonEmptyBounds": 9,
"PctNonEmptyBounds": 100,
"BoundsMetricNote": "PctNonEmptyBounds counts nodes whose BoundingRectangle is not Rect.Empty — the exact degeneracy a minimized window produces. PctPositiveAreaBounds additionally excludes zero-width/zero-height rects, which are collapsed-but-present controls (a hidden scrollbar), not missing geometry.",
"NodesWithPositiveArea": 9,
"PctPositiveAreaBounds": 100,
"NodesAtOffscreenOrigin": 0,
"NodesWithControlType": 9,
"NodesWithAutomationId": 0,
"RefableNodeCount": 9,
"RefableDefinition": "node advertising at least one managed control pattern; the managed stack cannot see the six UIA3-only patterns (KTD1), so this is a floor not a total",
"NameRedactionRule": "R11: Name is reduced to \u003credacted:N chars\u003e on document/content control types (Document, Edit, Text, ListItem, DataItem, TreeItem, Hyperlink, Image), on a document-titled root when the target carries user content, and on any node whose Name is a \u003e=4 character substring of that root Name — Electron and Win32 chrome panes echo the document title onto themselves. ControlType, AutomationId, ClassName, FrameworkId, bounds, patterns and states stay verbatim, and application-chrome names (button and tab labels) are deliberately kept.",
"SerializedNodeLimit": 120,
"SerializedNodeCount": 9,
"NodeRecordFormat": "one node per line, space separated key=value fields in fixed order: i=\u003cindex\u003e d=\u003cdepth\u003e parent=\u003cparent index, -1 at root\u003e ct=\u003cControlType.ProgrammaticName\u003e cls=\u003cClassName\u003e fw=\u003cFrameworkId\u003e aid=\u003cAutomationId\u003e pid=\u003cProcessId\u003e bounds=\u003cok|empty\u003e left=\u003cpx\u003e top=\u003cpx\u003e width=\u003cpx\u003e height=\u003cpx\u003e en=\u003c0|1 IsEnabled\u003e off=\u003c0|1 IsOffscreen\u003e kbf=\u003c0|1 IsKeyboardFocusable\u003e pats=\u003ccomma separated pattern short names, the ProgrammaticName with its PatternIdentifiers.Pattern suffix removed; \"-\" when none\u003e children=\u003cchild count, present only on a node truncated at MaxDepth\u003e name=\u003cName, or \u003credacted:N chars\u003e on a content node\u003e. left/top/width/height are omitted when bounds=empty. name= is always the last field so a Name containing spaces needs no quoting. Empty string values render as \"-\".",
"TruncationNote": "statistics above cover every walked node; Nodes[] below is truncated to SerializedNodeLimit in document order so the PR stays reviewable (KTD6), and secondary passes of the same target carry statistics only. Re-run this probe locally for the full record.",
"Nodes": [
"i=0 d=0 parent=-1 ct=ControlType.Window cls=Chrome_WidgetWin_1 fw=Win32 aid=- pid=<pid> bounds=ok left=40 top=40 width=1000 height=640 en=1 off=0 kbf=0 pats=ItemContainer,ScrollItem,Transform,Window name=\u003credacted:45 chars\u003e",
"i=1 d=1 parent=0 ct=ControlType.Pane cls=RootView fw=Chrome aid=- pid=<pid> bounds=ok left=40 top=40 width=1000 height=640 en=1 off=0 kbf=0 pats=ScrollItem name=\u003credacted:45 chars\u003e",
"i=2 d=2 parent=1 ct=ControlType.Pane cls=NonClientView fw=Chrome aid=- pid=<pid> bounds=ok left=40 top=40 width=1000 height=640 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=3 d=3 parent=2 ct=ControlType.Pane cls=WinFrameView fw=Chrome aid=- pid=<pid> bounds=ok left=40 top=40 width=1000 height=640 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=4 d=4 parent=3 ct=ControlType.Pane cls=ClientView fw=Chrome aid=- pid=<pid> bounds=ok left=40 top=40 width=1000 height=640 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=5 d=5 parent=4 ct=ControlType.Pane cls=View fw=Chrome aid=- pid=<pid> bounds=ok left=40 top=40 width=1000 height=640 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=6 d=6 parent=5 ct=ControlType.Pane cls=View fw=Chrome aid=- pid=<pid> bounds=ok left=40 top=40 width=1000 height=640 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=7 d=7 parent=6 ct=ControlType.Pane cls=View fw=Chrome aid=- pid=<pid> bounds=ok left=40 top=40 width=1000 height=640 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=8 d=7 parent=6 ct=ControlType.Pane cls=View fw=Chrome aid=- pid=<pid> bounds=ok left=40 top=40 width=1000 height=640 en=1 off=0 kbf=0 pats=ScrollItem name=-"
],
"FocusBefore": {
"Resolved": true,
"ControlType": "ControlType.Window",
"ClassName": "org.wezfurlong.wezterm",
"ProcessId": <pid>,
"NativeWindowHandle": <hwnd>
},
"FocusAfter": {
"Resolved": true,
"ControlType": "ControlType.Window",
"ClassName": "org.wezfurlong.wezterm",
"ProcessId": <pid>,
"NativeWindowHandle": <hwnd>
},
"FocusUnchanged": true,
"FocusIdentityNote": "focus identity is asserted on ControlType/ClassName/ProcessId/NativeWindowHandle; the focused element is usually the operator console, whose Name mutates independently of focus and would produce false interference",
"Foreground": {
"ProcessId": <pid>
}
},
"AfterSettlePass": {
"Label": "obsidian-after-settle",
"Stack": "managed",
"View": "ControlView (System.Windows.Automation.TreeWalker.ControlViewWalker)",
"NodeCount": 113,
"DeepestDepth": 12,
"MaxDepth": 12,
"NodeBudget": 3000,
"NodeBudgetExhausted": false,
"DepthTruncatedNodeCount": 2,
"NodesWithNonEmptyBounds": 112,
"PctNonEmptyBounds": 99.12,
"BoundsMetricNote": "PctNonEmptyBounds counts nodes whose BoundingRectangle is not Rect.Empty — the exact degeneracy a minimized window produces. PctPositiveAreaBounds additionally excludes zero-width/zero-height rects, which are collapsed-but-present controls (a hidden scrollbar), not missing geometry.",
"NodesWithPositiveArea": 112,
"PctPositiveAreaBounds": 99.12,
"NodesAtOffscreenOrigin": 0,
"NodesWithControlType": 113,
"NodesWithAutomationId": 2,
"RefableNodeCount": 113,
"RefableDefinition": "node advertising at least one managed control pattern; the managed stack cannot see the six UIA3-only patterns (KTD1), so this is a floor not a total",
"NameRedactionRule": "R11: Name is reduced to \u003credacted:N chars\u003e on document/content control types (Document, Edit, Text, ListItem, DataItem, TreeItem, Hyperlink, Image), on a document-titled root when the target carries user content, and on any node whose Name is a \u003e=4 character substring of that root Name — Electron and Win32 chrome panes echo the document title onto themselves. ControlType, AutomationId, ClassName, FrameworkId, bounds, patterns and states stay verbatim, and application-chrome names (button and tab labels) are deliberately kept.",
"SerializedNodeLimit": 120,
"SerializedNodeCount": 0,
"NodeRecordFormat": "one node per line, space separated key=value fields in fixed order: i=\u003cindex\u003e d=\u003cdepth\u003e parent=\u003cparent index, -1 at root\u003e ct=\u003cControlType.ProgrammaticName\u003e cls=\u003cClassName\u003e fw=\u003cFrameworkId\u003e aid=\u003cAutomationId\u003e pid=\u003cProcessId\u003e bounds=\u003cok|empty\u003e left=\u003cpx\u003e top=\u003cpx\u003e width=\u003cpx\u003e height=\u003cpx\u003e en=\u003c0|1 IsEnabled\u003e off=\u003c0|1 IsOffscreen\u003e kbf=\u003c0|1 IsKeyboardFocusable\u003e pats=\u003ccomma separated pattern short names, the ProgrammaticName with its PatternIdentifiers.Pattern suffix removed; \"-\" when none\u003e children=\u003cchild count, present only on a node truncated at MaxDepth\u003e name=\u003cName, or \u003credacted:N chars\u003e on a content node\u003e. left/top/width/height are omitted when bounds=empty. name= is always the last field so a Name containing spaces needs no quoting. Empty string values render as \"-\".",
"TruncationNote": "statistics above cover every walked node; Nodes[] below is truncated to SerializedNodeLimit in document order so the PR stays reviewable (KTD6), and secondary passes of the same target carry statistics only. Re-run this probe locally for the full record.",
"Nodes": [
],
"FocusBefore": {
"Resolved": true,
"ControlType": "ControlType.Window",
"ClassName": "org.wezfurlong.wezterm",
"ProcessId": <pid>,
"NativeWindowHandle": <hwnd>
},
"FocusAfter": {
"Resolved": true,
"ControlType": "ControlType.Window",
"ClassName": "org.wezfurlong.wezterm",
"ProcessId": <pid>,
"NativeWindowHandle": <hwnd>
},
"FocusUnchanged": true,
"FocusIdentityNote": "focus identity is asserted on ControlType/ClassName/ProcessId/NativeWindowHandle; the focused element is usually the operator console, whose Name mutates independently of focus and would produce false interference",
"Foreground": {
"ProcessId": <pid>
}
},
"SettledPass": {
"Label": "obsidian-after-other-targets-minimized",
"Stack": "managed",
"View": "ControlView (System.Windows.Automation.TreeWalker.ControlViewWalker)",
"NodeCount": 113,
"DeepestDepth": 12,
"MaxDepth": 12,
"NodeBudget": 3000,
"NodeBudgetExhausted": false,
"DepthTruncatedNodeCount": 2,
"NodesWithNonEmptyBounds": 112,
"PctNonEmptyBounds": 99.12,
"BoundsMetricNote": "PctNonEmptyBounds counts nodes whose BoundingRectangle is not Rect.Empty — the exact degeneracy a minimized window produces. PctPositiveAreaBounds additionally excludes zero-width/zero-height rects, which are collapsed-but-present controls (a hidden scrollbar), not missing geometry.",
"NodesWithPositiveArea": 112,
"PctPositiveAreaBounds": 99.12,
"NodesAtOffscreenOrigin": 0,
"NodesWithControlType": 113,
"NodesWithAutomationId": 2,
"RefableNodeCount": 113,
"RefableDefinition": "node advertising at least one managed control pattern; the managed stack cannot see the six UIA3-only patterns (KTD1), so this is a floor not a total",
"NameRedactionRule": "R11: Name is reduced to \u003credacted:N chars\u003e on document/content control types (Document, Edit, Text, ListItem, DataItem, TreeItem, Hyperlink, Image), on a document-titled root when the target carries user content, and on any node whose Name is a \u003e=4 character substring of that root Name — Electron and Win32 chrome panes echo the document title onto themselves. ControlType, AutomationId, ClassName, FrameworkId, bounds, patterns and states stay verbatim, and application-chrome names (button and tab labels) are deliberately kept.",
"SerializedNodeLimit": 120,
"SerializedNodeCount": 113,
"NodeRecordFormat": "one node per line, space separated key=value fields in fixed order: i=\u003cindex\u003e d=\u003cdepth\u003e parent=\u003cparent index, -1 at root\u003e ct=\u003cControlType.ProgrammaticName\u003e cls=\u003cClassName\u003e fw=\u003cFrameworkId\u003e aid=\u003cAutomationId\u003e pid=\u003cProcessId\u003e bounds=\u003cok|empty\u003e left=\u003cpx\u003e top=\u003cpx\u003e width=\u003cpx\u003e height=\u003cpx\u003e en=\u003c0|1 IsEnabled\u003e off=\u003c0|1 IsOffscreen\u003e kbf=\u003c0|1 IsKeyboardFocusable\u003e pats=\u003ccomma separated pattern short names, the ProgrammaticName with its PatternIdentifiers.Pattern suffix removed; \"-\" when none\u003e children=\u003cchild count, present only on a node truncated at MaxDepth\u003e name=\u003cName, or \u003credacted:N chars\u003e on a content node\u003e. left/top/width/height are omitted when bounds=empty. name= is always the last field so a Name containing spaces needs no quoting. Empty string values render as \"-\".",
"TruncationNote": "statistics above cover every walked node; Nodes[] below is truncated to SerializedNodeLimit in document order so the PR stays reviewable (KTD6), and secondary passes of the same target carry statistics only. Re-run this probe locally for the full record.",
"Nodes": [
"i=0 d=0 parent=-1 ct=ControlType.Window cls=Chrome_WidgetWin_1 fw=Win32 aid=- pid=<pid> bounds=ok left=40 top=40 width=1000 height=640 en=1 off=0 kbf=0 pats=ItemContainer,ScrollItem,Transform,Window name=\u003credacted:45 chars\u003e",
"i=1 d=1 parent=0 ct=ControlType.Pane cls=RootView fw=Chrome aid=- pid=<pid> bounds=ok left=40 top=40 width=1000 height=640 en=1 off=0 kbf=0 pats=ScrollItem name=\u003credacted:45 chars\u003e",
"i=2 d=2 parent=1 ct=ControlType.Pane cls=NonClientView fw=Chrome aid=- pid=<pid> bounds=ok left=40 top=40 width=1000 height=640 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=3 d=3 parent=2 ct=ControlType.Pane cls=WinFrameView fw=Chrome aid=- pid=<pid> bounds=ok left=40 top=40 width=1000 height=640 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=4 d=4 parent=3 ct=ControlType.Pane cls=ClientView fw=Chrome aid=- pid=<pid> bounds=ok left=40 top=40 width=1000 height=640 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=5 d=5 parent=4 ct=ControlType.Pane cls=View fw=Chrome aid=- pid=<pid> bounds=ok left=40 top=40 width=1000 height=640 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=6 d=6 parent=5 ct=ControlType.Pane cls=View fw=Chrome aid=- pid=<pid> bounds=ok left=40 top=40 width=1000 height=640 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=7 d=7 parent=6 ct=ControlType.Pane cls=View fw=Chrome aid=- pid=<pid> bounds=ok left=40 top=40 width=1000 height=640 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=8 d=8 parent=7 ct=ControlType.Document cls=- fw=Chrome aid=RootWebArea pid=<pid> bounds=ok left=40 top=40 width=1000 height=640 en=1 off=0 kbf=1 pats=Scroll,ScrollItem,Text,Value name=\u003credacted:45 chars\u003e",
"i=9 d=9 parent=8 ct=ControlType.Group cls=titlebar-button mod-minimize fw=Chrome aid=- pid=<pid> bounds=ok left=912 top=40 width=48 height=40 en=1 off=0 kbf=0 pats=Invoke,ScrollItem name=Minimize",
"i=10 d=10 parent=9 ct=ControlType.Image cls=- fw=Chrome aid=- pid=<pid> bounds=ok left=928 top=56 width=16 height=16 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=11 d=9 parent=8 ct=ControlType.Group cls=titlebar-button mod-maximize fw=Chrome aid=- pid=<pid> bounds=ok left=952 top=40 width=48 height=40 en=1 off=0 kbf=0 pats=Invoke,ScrollItem name=Maximize",
"i=12 d=10 parent=11 ct=ControlType.Image cls=- fw=Chrome aid=- pid=<pid> bounds=ok left=968 top=56 width=16 height=16 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=13 d=9 parent=8 ct=ControlType.Group cls=titlebar-button mod-close fw=Chrome aid=- pid=<pid> bounds=ok left=992 top=40 width=48 height=40 en=1 off=0 kbf=0 pats=Invoke,ScrollItem name=Close window",
"i=14 d=10 parent=13 ct=ControlType.Image cls=- fw=Chrome aid=- pid=<pid> bounds=ok left=1008 top=56 width=16 height=16 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=15 d=9 parent=8 ct=ControlType.Group cls=sidebar-toggle-button mod-left fw=Chrome aid=- pid=<pid> bounds=ok left=40 top=40 width=48 height=40 en=1 off=0 kbf=0 pats=Invoke,ScrollItem name=-",
"i=16 d=10 parent=15 ct=ControlType.Image cls=svg-icon sidebar-toggle-button-icon fw=Chrome aid=- pid=<pid> bounds=ok left=56 top=48 width=16 height=16 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=17 d=9 parent=8 ct=ControlType.Group cls=clickable-icon side-dock-ribbon-action fw=Chrome aid=- pid=<pid> bounds=ok left=48 top=88 width=32 height=24 en=1 off=0 kbf=0 pats=Invoke,ScrollItem name=Open quick switcher",
"i=18 d=10 parent=17 ct=ControlType.Image cls=svg-icon lucide-file-search fw=Chrome aid=- pid=<pid> bounds=ok left=48 top=96 width=16 height=16 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=19 d=9 parent=8 ct=ControlType.Group cls=clickable-icon side-dock-ribbon-action fw=Chrome aid=- pid=<pid> bounds=ok left=48 top=120 width=32 height=24 en=1 off=0 kbf=0 pats=Invoke,ScrollItem name=Open graph view",
"i=20 d=10 parent=19 ct=ControlType.Image cls=svg-icon lucide-git-fork fw=Chrome aid=- pid=<pid> bounds=ok left=48 top=128 width=16 height=16 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=21 d=9 parent=8 ct=ControlType.Group cls=clickable-icon side-dock-ribbon-action fw=Chrome aid=- pid=<pid> bounds=ok left=48 top=152 width=32 height=24 en=1 off=0 kbf=0 pats=Invoke,ScrollItem name=Create new canvas",
"i=22 d=10 parent=21 ct=ControlType.Image cls=svg-icon lucide-layout-dashboard fw=Chrome aid=- pid=<pid> bounds=ok left=48 top=160 width=16 height=16 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=23 d=9 parent=8 ct=ControlType.Group cls=clickable-icon side-dock-ribbon-action fw=Chrome aid=- pid=<pid> bounds=ok left=48 top=184 width=32 height=24 en=1 off=0 kbf=0 pats=Invoke,ScrollItem name=Open today\u0027s daily note",
"i=24 d=10 parent=23 ct=ControlType.Image cls=svg-icon lucide-calendar fw=Chrome aid=- pid=<pid> bounds=ok left=48 top=192 width=16 height=16 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=25 d=9 parent=8 ct=ControlType.Group cls=clickable-icon side-dock-ribbon-action fw=Chrome aid=- pid=<pid> bounds=ok left=48 top=216 width=32 height=24 en=1 off=0 kbf=0 pats=Invoke,ScrollItem name=Insert template",
"i=26 d=10 parent=25 ct=ControlType.Image cls=svg-icon lucide-files fw=Chrome aid=- pid=<pid> bounds=ok left=48 top=224 width=16 height=16 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=27 d=9 parent=8 ct=ControlType.Group cls=clickable-icon side-dock-ribbon-action fw=Chrome aid=- pid=<pid> bounds=ok left=48 top=248 width=32 height=24 en=1 off=0 kbf=0 pats=Invoke,ScrollItem name=Open command palette",
"i=28 d=10 parent=27 ct=ControlType.Image cls=svg-icon lucide-terminal fw=Chrome aid=- pid=<pid> bounds=ok left=48 top=256 width=16 height=16 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=29 d=9 parent=8 ct=ControlType.Group cls=clickable-icon side-dock-ribbon-action fw=Chrome aid=- pid=<pid> bounds=ok left=48 top=280 width=32 height=24 en=1 off=0 kbf=0 pats=Invoke,ScrollItem name=Create new base",
"i=30 d=10 parent=29 ct=ControlType.Image cls=svg-icon lucide-layout-list fw=Chrome aid=- pid=<pid> bounds=ok left=48 top=288 width=16 height=16 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=31 d=9 parent=8 ct=ControlType.Separator cls=workspace-leaf-resize-handle fw=Chrome aid=- pid=<pid> bounds=ok left=384 top=40 width=0 height=640 en=1 off=0 kbf=0 pats=Invoke,ScrollItem name=-",
"i=32 d=9 parent=8 ct=ControlType.Group cls=workspace-drawer-vault-switcher fw=Chrome aid=- pid=<pid> bounds=ok left=96 top=648 width=224 height=24 en=1 off=0 kbf=0 pats=Invoke,ScrollItem name=-",
"i=33 d=10 parent=32 ct=ControlType.Image cls=svg-icon lucide-chevrons-up-down fw=Chrome aid=- pid=<pid> bounds=ok left=96 top=648 width=16 height=16 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=34 d=10 parent=32 ct=ControlType.Text cls=- fw=Chrome aid=- pid=<pid> bounds=ok left=128 top=648 width=88 height=16 en=1 off=0 kbf=0 pats=ScrollItem,Text name=\u003credacted:14 chars\u003e",
"i=35 d=9 parent=8 ct=ControlType.Group cls=clickable-icon fw=Chrome aid=- pid=<pid> bounds=ok left=320 top=648 width=32 height=24 en=1 off=0 kbf=0 pats=Invoke,ScrollItem name=-",
"i=36 d=10 parent=35 ct=ControlType.Image cls=svg-icon help fw=Chrome aid=- pid=<pid> bounds=ok left=320 top=648 width=16 height=16 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=37 d=9 parent=8 ct=ControlType.Group cls=clickable-icon fw=Chrome aid=- pid=<pid> bounds=ok left=344 top=648 width=32 height=24 en=1 off=0 kbf=0 pats=Invoke,ScrollItem name=-",
"i=38 d=10 parent=37 ct=ControlType.Image cls=svg-icon lucide-settings fw=Chrome aid=- pid=<pid> bounds=ok left=352 top=648 width=16 height=16 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=39 d=9 parent=8 ct=ControlType.Group cls=workspace-tabs mod-top mod-top-left-space fw=Chrome aid=- pid=<pid> bounds=ok left=80 top=40 width=304 height=600 en=1 off=0 kbf=0 pats=Invoke,ScrollItem name=-",
"i=40 d=10 parent=39 ct=ControlType.Group cls=workspace-tab-header tappable is-active fw=Chrome aid=- pid=<pid> bounds=ok left=96 top=48 width=32 height=24 en=1 off=0 kbf=0 pats=Invoke,ScrollItem name=Files",
"i=41 d=11 parent=40 ct=ControlType.Image cls=svg-icon lucide-folder-closed fw=Chrome aid=- pid=<pid> bounds=ok left=96 top=48 width=16 height=16 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=42 d=10 parent=39 ct=ControlType.Group cls=workspace-tab-header tappable fw=Chrome aid=- pid=<pid> bounds=ok left=128 top=48 width=32 height=24 en=1 off=0 kbf=0 pats=Invoke,ScrollItem name=Search",
"i=43 d=11 parent=42 ct=ControlType.Image cls=svg-icon lucide-search fw=Chrome aid=- pid=<pid> bounds=ok left=136 top=48 width=16 height=16 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=44 d=10 parent=39 ct=ControlType.Group cls=workspace-tab-header tappable fw=Chrome aid=- pid=<pid> bounds=ok left=168 top=48 width=32 height=24 en=1 off=0 kbf=0 pats=Invoke,ScrollItem name=Bookmarks",
"i=45 d=11 parent=44 ct=ControlType.Image cls=svg-icon lucide-bookmark fw=Chrome aid=- pid=<pid> bounds=ok left=176 top=48 width=16 height=16 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=46 d=10 parent=39 ct=ControlType.Group cls=workspace-leaf-content fw=Chrome aid=- pid=<pid> bounds=ok left=80 top=80 width=304 height=560 en=1 off=0 kbf=0 pats=Invoke,ScrollItem name=-",
"i=47 d=11 parent=46 ct=ControlType.Group cls=clickable-icon nav-action-button fw=Chrome aid=- pid=<pid> bounds=ok left=152 top=88 width=32 height=24 en=1 off=0 kbf=0 pats=Invoke,ScrollItem name=New note",
"i=48 d=12 parent=47 ct=ControlType.Image cls=svg-icon lucide-edit fw=Chrome aid=- pid=<pid> bounds=ok left=160 top=96 width=16 height=16 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=49 d=11 parent=46 ct=ControlType.Group cls=clickable-icon nav-action-button fw=Chrome aid=- pid=<pid> bounds=ok left=184 top=88 width=32 height=24 en=1 off=0 kbf=0 pats=Invoke,ScrollItem name=New folder",
"i=50 d=12 parent=49 ct=ControlType.Image cls=svg-icon lucide-folder-plus fw=Chrome aid=- pid=<pid> bounds=ok left=192 top=96 width=16 height=16 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=51 d=11 parent=46 ct=ControlType.Group cls=clickable-icon nav-action-button fw=Chrome aid=- pid=<pid> bounds=ok left=216 top=88 width=32 height=24 en=1 off=0 kbf=0 pats=Invoke,ScrollItem name=Change sort order",
"i=52 d=12 parent=51 ct=ControlType.Image cls=svg-icon lucide-sort-asc fw=Chrome aid=- pid=<pid> bounds=ok left=224 top=96 width=16 height=16 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=53 d=11 parent=46 ct=ControlType.Group cls=clickable-icon nav-action-button fw=Chrome aid=- pid=<pid> bounds=ok left=248 top=88 width=32 height=24 en=1 off=0 kbf=0 pats=Invoke,ScrollItem name=Auto-reveal current file",
"i=54 d=12 parent=53 ct=ControlType.Image cls=svg-icon lucide-gallery-vertical fw=Chrome aid=- pid=<pid> bounds=ok left=256 top=96 width=16 height=16 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=55 d=11 parent=46 ct=ControlType.Group cls=clickable-icon nav-action-button fw=Chrome aid=- pid=<pid> bounds=ok left=280 top=88 width=32 height=24 en=1 off=0 kbf=0 pats=Invoke,ScrollItem name=Expand all",
"i=56 d=12 parent=55 ct=ControlType.Image cls=svg-icon lucide-chevrons-up-down fw=Chrome aid=- pid=<pid> bounds=ok left=288 top=96 width=16 height=16 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=57 d=11 parent=46 ct=ControlType.Group cls=nav-files-container node-insert-event fw=Chrome aid=- pid=<pid> bounds=ok left=80 top=120 width=304 height=512 en=1 off=0 kbf=0 pats=Invoke,ScrollItem name=-",
"i=58 d=12 parent=57 ct=ControlType.Text cls=- fw=Chrome aid=- pid=<pid> bounds=empty en=1 off=0 kbf=0 pats=ScrollItem,Text name=\u003credacted:1 chars\u003e",
"i=59 d=12 parent=57 ct=ControlType.Text cls=- fw=Chrome aid=- pid=<pid> bounds=ok left=120 top=128 width=56 height=16 en=1 off=0 kbf=0 pats=ScrollItem,Text name=\u003credacted:7 chars\u003e",
"i=60 d=9 parent=8 ct=ControlType.Group cls=workspace-tabs mod-top fw=Chrome aid=- pid=<pid> bounds=ok left=384 top=40 width=328 height=640 en=1 off=0 kbf=0 pats=Invoke,ScrollItem name=-",
"i=61 d=10 parent=60 ct=ControlType.Separator cls=workspace-leaf-resize-handle fw=Chrome aid=- pid=<pid> bounds=ok left=712 top=40 width=0 height=640 en=1 off=0 kbf=0 pats=Invoke,ScrollItem name=-",
"i=62 d=10 parent=60 ct=ControlType.Group cls=workspace-tab-header tappable is-active fw=Chrome aid=- pid=<pid> bounds=ok left=400 top=48 width=200 height=32 en=1 off=0 kbf=0 pats=Invoke,ScrollItem name=Welcome",
"i=63 d=11 parent=62 ct=ControlType.Text cls=- fw=Chrome aid=- pid=<pid> bounds=ok left=408 top=48 width=56 height=16 en=1 off=0 kbf=0 pats=ScrollItem,Text name=\u003credacted:7 chars\u003e",
"i=64 d=11 parent=62 ct=ControlType.Group cls=workspace-tab-header-inner-close-button fw=Chrome aid=- pid=<pid> bounds=ok left=576 top=48 width=16 height=24 en=1 off=0 kbf=0 pats=Invoke,ScrollItem name=Close",
"i=65 d=12 parent=64 ct=ControlType.Image cls=svg-icon lucide-x fw=Chrome aid=- pid=<pid> bounds=ok left=576 top=56 width=16 height=16 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=66 d=10 parent=60 ct=ControlType.Group cls=clickable-icon fw=Chrome aid=- pid=<pid> bounds=ok left=608 top=48 width=24 height=24 en=1 off=0 kbf=0 pats=Invoke,ScrollItem name=New tab",
"i=67 d=11 parent=66 ct=ControlType.Image cls=svg-icon lucide-plus fw=Chrome aid=- pid=<pid> bounds=ok left=608 top=48 width=16 height=16 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=68 d=10 parent=60 ct=ControlType.Group cls=clickable-icon fw=Chrome aid=- pid=<pid> bounds=ok left=672 top=48 width=24 height=24 en=1 off=0 kbf=0 pats=Invoke,ScrollItem name=-",
"i=69 d=11 parent=68 ct=ControlType.Image cls=svg-icon lucide-chevron-down fw=Chrome aid=- pid=<pid> bounds=ok left=680 top=48 width=16 height=16 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=70 d=10 parent=60 ct=ControlType.Button cls=clickable-icon fw=Chrome aid=- pid=<pid> bounds=ok left=400 top=88 width=32 height=24 en=0 off=0 kbf=1 pats=Invoke,ScrollItem name=Navigate back",
"i=71 d=11 parent=70 ct=ControlType.Image cls=svg-icon lucide-arrow-left fw=Chrome aid=- pid=<pid> bounds=ok left=400 top=88 width=16 height=16 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=72 d=10 parent=60 ct=ControlType.Button cls=clickable-icon fw=Chrome aid=- pid=<pid> bounds=ok left=424 top=88 width=32 height=24 en=0 off=0 kbf=1 pats=Invoke,ScrollItem name=Navigate forward",
"i=73 d=11 parent=72 ct=ControlType.Image cls=svg-icon lucide-arrow-right fw=Chrome aid=- pid=<pid> bounds=ok left=432 top=88 width=16 height=16 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=74 d=10 parent=60 ct=ControlType.Group cls=view-header-title fw=Chrome aid=- pid=<pid> bounds=ok left=520 top=88 width=56 height=16 en=1 off=0 kbf=1 pats=ScrollItem,Text name=-",
"i=75 d=11 parent=74 ct=ControlType.Text cls=- fw=Chrome aid=- pid=<pid> bounds=ok left=520 top=88 width=56 height=16 en=1 off=0 kbf=0 pats=ScrollItem,Text name=\u003credacted:7 chars\u003e",
"i=76 d=10 parent=60 ct=ControlType.Button cls=clickable-icon view-action fw=Chrome aid=- pid=<pid> bounds=ok left=640 top=88 width=32 height=24 en=1 off=0 kbf=1 pats=Invoke,ScrollItem name=Current view: editing Click to read Ctrl+Click to open to the right",
"i=77 d=11 parent=76 ct=ControlType.Image cls=svg-icon lucide-book-open fw=Chrome aid=- pid=<pid> bounds=ok left=648 top=88 width=16 height=16 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=78 d=10 parent=60 ct=ControlType.Button cls=clickable-icon view-action fw=Chrome aid=- pid=<pid> bounds=ok left=672 top=88 width=32 height=24 en=1 off=0 kbf=1 pats=Invoke,ScrollItem name=More options",
"i=79 d=11 parent=78 ct=ControlType.Image cls=svg-icon lucide-more-vertical fw=Chrome aid=- pid=<pid> bounds=ok left=680 top=88 width=16 height=16 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=80 d=10 parent=60 ct=ControlType.Group cls=markdown-source-view cm-s-obsidian mod-cm6 node-insert-event is-readable-line-width is-live-preview is-folding show-properties fw=Chrome aid=- pid=<pid> bounds=ok left=384 top=120 width=328 height=560 en=1 off=0 kbf=0 pats=Invoke,ScrollItem name=-",
"i=81 d=11 parent=80 ct=ControlType.Group cls=cm-announced fw=Chrome aid=- pid=<pid> bounds=ok left=384 top=-9920 width=328 height=10600 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=82 d=11 parent=80 ct=ControlType.Group cls=cm-scroller fw=Chrome aid=- pid=<pid> bounds=ok left=384 top=120 width=328 height=560 en=1 off=0 kbf=1 pats=Invoke,Scroll,ScrollItem name=-",
"i=83 d=12 parent=82 ct=ControlType.Group cls=inline-title fw=Chrome aid=- pid=<pid> bounds=ok left=416 top=152 width=256 height=32 en=1 off=0 kbf=1 pats=ScrollItem,Text children=1 name=-",
"i=84 d=12 parent=82 ct=ControlType.Edit cls=cm-content cm-lineWrapping fw=Chrome aid=- pid=<pid> bounds=ok left=416 top=192 width=256 height=472 en=1 off=0 kbf=1 pats=ScrollItem,Text,Value children=11 name=-",
"i=85 d=9 parent=8 ct=ControlType.Group cls=workspace-tabs mod-active mod-top mod-top-right-space fw=Chrome aid=- pid=<pid> bounds=ok left=712 top=40 width=328 height=640 en=1 off=0 kbf=0 pats=Invoke,ScrollItem name=-",
"i=86 d=10 parent=85 ct=ControlType.Group cls=workspace-tab-header tappable is-active mod-active fw=Chrome aid=- pid=<pid> bounds=ok left=728 top=48 width=72 height=32 en=1 off=0 kbf=0 pats=Invoke,ScrollItem name=\u003credacted:10 chars\u003e",
"i=87 d=11 parent=86 ct=ControlType.Image cls=svg-icon lucide-git-fork fw=Chrome aid=- pid=<pid> bounds=ok left=736 top=56 width=16 height=16 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=88 d=11 parent=86 ct=ControlType.Text cls=- fw=Chrome aid=- pid=<pid> bounds=ok left=760 top=48 width=16 height=16 en=1 off=0 kbf=0 pats=ScrollItem,Text name=\u003credacted:10 chars\u003e",
"i=89 d=11 parent=86 ct=ControlType.Group cls=workspace-tab-header-inner-close-button fw=Chrome aid=- pid=<pid> bounds=ok left=776 top=48 width=16 height=24 en=1 off=0 kbf=0 pats=Invoke,ScrollItem name=Close",
"i=90 d=12 parent=89 ct=ControlType.Image cls=svg-icon lucide-x fw=Chrome aid=- pid=<pid> bounds=ok left=776 top=56 width=16 height=16 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=91 d=10 parent=85 ct=ControlType.Group cls=clickable-icon fw=Chrome aid=- pid=<pid> bounds=ok left=808 top=48 width=24 height=24 en=1 off=0 kbf=0 pats=Invoke,ScrollItem name=New tab",
"i=92 d=11 parent=91 ct=ControlType.Image cls=svg-icon lucide-plus fw=Chrome aid=- pid=<pid> bounds=ok left=816 top=48 width=16 height=16 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=93 d=10 parent=85 ct=ControlType.Group cls=clickable-icon fw=Chrome aid=- pid=<pid> bounds=ok left=848 top=48 width=24 height=24 en=1 off=0 kbf=0 pats=Invoke,ScrollItem name=-",
"i=94 d=11 parent=93 ct=ControlType.Image cls=svg-icon lucide-chevron-down fw=Chrome aid=- pid=<pid> bounds=ok left=848 top=48 width=16 height=16 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=95 d=10 parent=85 ct=ControlType.Group cls=sidebar-toggle-button mod-right fw=Chrome aid=- pid=<pid> bounds=ok left=880 top=40 width=32 height=40 en=1 off=0 kbf=0 pats=Invoke,ScrollItem name=-",
"i=96 d=11 parent=95 ct=ControlType.Image cls=svg-icon sidebar-toggle-button-icon fw=Chrome aid=- pid=<pid> bounds=ok left=880 top=48 width=16 height=16 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=97 d=10 parent=85 ct=ControlType.Button cls=clickable-icon fw=Chrome aid=- pid=<pid> bounds=ok left=720 top=88 width=32 height=24 en=0 off=0 kbf=1 pats=Invoke,ScrollItem name=Navigate back",
"i=98 d=11 parent=97 ct=ControlType.Image cls=svg-icon lucide-arrow-left fw=Chrome aid=- pid=<pid> bounds=ok left=728 top=88 width=16 height=16 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=99 d=10 parent=85 ct=ControlType.Button cls=clickable-icon fw=Chrome aid=- pid=<pid> bounds=ok left=752 top=88 width=32 height=24 en=0 off=0 kbf=1 pats=Invoke,ScrollItem name=Navigate forward",
"i=100 d=11 parent=99 ct=ControlType.Image cls=svg-icon lucide-arrow-right fw=Chrome aid=- pid=<pid> bounds=ok left=760 top=88 width=16 height=16 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=101 d=10 parent=85 ct=ControlType.Text cls=- fw=Chrome aid=- pid=<pid> bounds=ok left=856 top=88 width=64 height=16 en=1 off=0 kbf=0 pats=ScrollItem,Text name=\u003credacted:10 chars\u003e",
"i=102 d=10 parent=85 ct=ControlType.Button cls=clickable-icon view-action fw=Chrome aid=- pid=<pid> bounds=ok left=1000 top=88 width=32 height=24 en=1 off=0 kbf=1 pats=Invoke,ScrollItem name=More options",
"i=103 d=11 parent=102 ct=ControlType.Image cls=svg-icon lucide-more-vertical fw=Chrome aid=- pid=<pid> bounds=ok left=1008 top=88 width=16 height=16 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=104 d=10 parent=85 ct=ControlType.Image cls=- fw=Chrome aid=- pid=<pid> bounds=ok left=712 top=120 width=328 height=560 en=1 off=0 kbf=0 pats=Invoke,ScrollItem name=-",
"i=105 d=10 parent=85 ct=ControlType.Document cls=- fw=Chrome aid=RootWebArea pid=<pid> bounds=ok left=712 top=120 width=328 height=560 en=1 off=0 kbf=1 pats=Scroll,ScrollItem,Text,Value name=-",
"i=106 d=10 parent=85 ct=ControlType.Group cls=clickable-icon graph-controls-button mod-open fw=Chrome aid=- pid=<pid> bounds=ok left=992 top=136 width=32 height=24 en=1 off=0 kbf=0 pats=Invoke,ScrollItem name=Open graph settings",
"i=107 d=11 parent=106 ct=ControlType.Image cls=svg-icon lucide-settings fw=Chrome aid=- pid=<pid> bounds=ok left=1000 top=144 width=16 height=16 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=108 d=10 parent=85 ct=ControlType.Group cls=clickable-icon graph-controls-button mod-animate fw=Chrome aid=- pid=<pid> bounds=ok left=992 top=168 width=32 height=24 en=1 off=0 kbf=0 pats=Invoke,ScrollItem name=Start timelapse animation",
"i=109 d=11 parent=108 ct=ControlType.Image cls=svg-icon lucide-wand-2 fw=Chrome aid=- pid=<pid> bounds=ok left=1000 top=176 width=16 height=16 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=110 d=9 parent=8 ct=ControlType.Group cls=status-bar-item plugin-sync fw=Chrome aid=- pid=<pid> bounds=ok left=1008 top=656 width=24 height=16 en=1 off=0 kbf=0 pats=Invoke,ScrollItem name=Uninitialized",
"i=111 d=10 parent=110 ct=ControlType.Image cls=svg-icon refresh-cw-off fw=Chrome aid=- pid=<pid> bounds=ok left=1008 top=656 width=16 height=16 en=1 off=0 kbf=0 pats=ScrollItem name=-",
"i=112 d=7 parent=6 ct=ControlType.Pane cls=View fw=Chrome aid=- pid=<pid> bounds=ok left=40 top=40 width=1000 height=640 en=1 off=0 kbf=0 pats=ScrollItem name=-"
],
"FocusBefore": {
"Resolved": true,
"ControlType": "ControlType.Window",
"ClassName": "org.wezfurlong.wezterm",
"ProcessId": <pid>,
"NativeWindowHandle": <hwnd>
},
"FocusAfter": {
"Resolved": true,
"ControlType": "ControlType.Window",
"ClassName": "org.wezfurlong.wezterm",
"ProcessId": <pid>,
"NativeWindowHandle": <hwnd>
},
"FocusUnchanged": true,
"FocusIdentityNote": "focus identity is asserted on ControlType/ClassName/ProcessId/NativeWindowHandle; the focused element is usually the operator console, whose Name mutates independently of focus and would produce false interference",
"Foreground": {
"ProcessId": <pid>
}
}
}

View file

@ -1,128 +0,0 @@
{
"Probe": "01-tree-dump",
"CapturedAtUtc": "<timestamp>",
"Target": "SystemSettings.exe (UWP), hosted by ApplicationFrameHost.exe",
"TargetKind": "ms-settings: home page",
"Stack": "managed",
"Scope": "app/provider",
"Preexisting": false,
"ResolutionPath": "enumerate top-level ApplicationFrameWindow elements; for each, FindFirst(Descendants, ClassName = Windows.UI.Core.CoreWindow); select the frame whose CoreWindow ProcessId is a SystemSettings.exe pid",
"LocaleSafety": "no window/element Name is compared anywhere in this script; selection is by ClassName and ProcessId only. InstalledUICulture on this box is es-ES while CurrentCulture is en-US and the observed Settings chrome renders English, so a title match would have been both forbidden and silently environment-dependent.",
"PlacementRect": {
"Left": 0,
"Top": 0,
"Width": 1616,
"Height": 704
},
"PlacementReason": "placed at a large fixed rect rather than the launch-maximized size: the XAML content is scroll-virtualized, so both the node count and whether a VerticalScrollBar exists at all depend on window size. A fixed rect makes the capture reproducible independently of the VM framebuffer size.",
"FrameHostSplit": {
"FrameWindow": {
"ClassName": "ApplicationFrameWindow",
"ProcessName": "ApplicationFrameHost",
"ProcessId": <pid>
},
"CoreWindow": {
"ClassName": "Windows.UI.Core.CoreWindow",
"ProcessName": "SystemSettings",
"ProcessId": <pid>
},
"Verdict": "NEW-EDGE",
"Consequence": "the top-level window a UWP app presents does not belong to the app pid. Windows app targeting in 2.4 cannot resolve a UWP target by matching the top-level window ProcessId; it must descend to the CoreWindow."
},
"Dump": {
"Label": "settings-frame-window",
"Stack": "managed",
"View": "ControlView (System.Windows.Automation.TreeWalker.ControlViewWalker)",
"NodeCount": 49,
"DeepestDepth": 5,
"MaxDepth": 12,
"NodeBudget": 3000,
"NodeBudgetExhausted": false,
"DepthTruncatedNodeCount": 0,
"NodesWithNonEmptyBounds": 47,
"PctNonEmptyBounds": 95.92,
"BoundsMetricNote": "PctNonEmptyBounds counts nodes whose BoundingRectangle is not Rect.Empty — the exact degeneracy a minimized window produces. PctPositiveAreaBounds additionally excludes zero-width/zero-height rects, which are collapsed-but-present controls (a hidden scrollbar), not missing geometry.",
"NodesWithPositiveArea": 47,
"PctPositiveAreaBounds": 95.92,
"NodesAtOffscreenOrigin": 0,
"NodesWithControlType": 49,
"NodesWithAutomationId": 20,
"RefableNodeCount": 46,
"RefableDefinition": "node advertising at least one managed control pattern; the managed stack cannot see the six UIA3-only patterns (KTD1), so this is a floor not a total",
"NameRedactionRule": "R11: Name is reduced to \u003credacted:N chars\u003e on document/content control types (Document, Edit, Text, ListItem, DataItem, TreeItem, Hyperlink, Image), on a document-titled root when the target carries user content, and on any node whose Name is a \u003e=4 character substring of that root Name — Electron and Win32 chrome panes echo the document title onto themselves. ControlType, AutomationId, ClassName, FrameworkId, bounds, patterns and states stay verbatim, and application-chrome names (button and tab labels) are deliberately kept.",
"SerializedNodeLimit": 120,
"SerializedNodeCount": 49,
"NodeRecordFormat": "one node per line, space separated key=value fields in fixed order: i=\u003cindex\u003e d=\u003cdepth\u003e parent=\u003cparent index, -1 at root\u003e ct=\u003cControlType.ProgrammaticName\u003e cls=\u003cClassName\u003e fw=\u003cFrameworkId\u003e aid=\u003cAutomationId\u003e pid=\u003cProcessId\u003e bounds=\u003cok|empty\u003e left=\u003cpx\u003e top=\u003cpx\u003e width=\u003cpx\u003e height=\u003cpx\u003e en=\u003c0|1 IsEnabled\u003e off=\u003c0|1 IsOffscreen\u003e kbf=\u003c0|1 IsKeyboardFocusable\u003e pats=\u003ccomma separated pattern short names, the ProgrammaticName with its PatternIdentifiers.Pattern suffix removed; \"-\" when none\u003e children=\u003cchild count, present only on a node truncated at MaxDepth\u003e name=\u003cName, or \u003credacted:N chars\u003e on a content node\u003e. left/top/width/height are omitted when bounds=empty. name= is always the last field so a Name containing spaces needs no quoting. Empty string values render as \"-\".",
"TruncationNote": "statistics above cover every walked node; Nodes[] below is truncated to SerializedNodeLimit in document order so the PR stays reviewable (KTD6), and secondary passes of the same target carry statistics only. Re-run this probe locally for the full record.",
"Nodes": [
"i=0 d=0 parent=-1 ct=ControlType.Window cls=ApplicationFrameWindow fw=Win32 aid=- pid=<pid> bounds=ok left=0 top=0 width=1616 height=704 en=1 off=0 kbf=0 pats=Transform,Window name=Settings",
"i=1 d=1 parent=0 ct=ControlType.Window cls=ApplicationFrameTitleBarWindow fw=Win32 aid=TitleBar pid=<pid> bounds=ok left=1424 top=0 width=192 height=32 en=1 off=0 kbf=0 pats=Value name=Settings",
"i=2 d=2 parent=1 ct=ControlType.MenuBar cls=- fw=- aid=SystemMenuBar pid=<pid> bounds=empty en=1 off=0 kbf=1 pats=- name=System",
"i=3 d=3 parent=2 ct=ControlType.MenuItem cls=- fw=- aid=- pid=<pid> bounds=empty en=1 off=0 kbf=1 pats=ExpandCollapse name=System",
"i=4 d=2 parent=1 ct=ControlType.Button cls=- fw=- aid=Minimize pid=<pid> bounds=ok left=1472 top=0 width=48 height=32 en=1 off=0 kbf=0 pats=Invoke name=Minimize Settings",
"i=5 d=2 parent=1 ct=ControlType.Button cls=- fw=- aid=Maximize pid=<pid> bounds=ok left=1520 top=0 width=48 height=32 en=1 off=0 kbf=0 pats=Invoke name=Maximize Settings",
"i=6 d=2 parent=1 ct=ControlType.Button cls=- fw=- aid=Close pid=<pid> bounds=ok left=1568 top=0 width=48 height=32 en=1 off=0 kbf=0 pats=Invoke name=Close Settings",
"i=7 d=1 parent=0 ct=ControlType.Window cls=Windows.UI.Core.CoreWindow fw=XAML aid=- pid=<pid> bounds=ok left=8 top=0 width=1600 height=688 en=1 off=0 kbf=0 pats=- name=Settings",
"i=8 d=2 parent=7 ct=ControlType.Text cls=TextBlock fw=XAML aid=SettingsLabel pid=<pid> bounds=ok left=24 top=8 width=1400 height=24 en=1 off=0 kbf=0 pats=ScrollItem,Text name=\u003credacted:8 chars\u003e",
"i=9 d=2 parent=7 ct=ControlType.Text cls=TextBlock fw=XAML aid=SettingsAppTitle pid=<pid> bounds=ok left=720 top=56 width=176 height=32 en=1 off=0 kbf=0 pats=ScrollItem,Text name=\u003credacted:16 chars\u003e",
"i=10 d=2 parent=7 ct=ControlType.Edit cls=TextBox fw=XAML aid=TextBox pid=<pid> bounds=ok left=640 top=120 width=336 height=32 en=1 off=0 kbf=1 pats=ScrollItem,Text,Value name=\u003credacted:26 chars\u003e",
"i=11 d=3 parent=10 ct=ControlType.Text cls=TextBlock fw=XAML aid=- pid=<pid> bounds=ok left=656 top=128 width=80 height=16 en=1 off=0 kbf=0 pats=ScrollItem,Text name=\u003credacted:14 chars\u003e",
"i=12 d=2 parent=7 ct=ControlType.Hyperlink cls=Hyperlink fw=XAML aid=- pid=<pid> bounds=ok left=664 top=648 width=296 height=32 en=1 off=0 kbf=1 pats=Invoke,ScrollItem name=\u003credacted:46 chars\u003e",
"i=13 d=2 parent=7 ct=ControlType.Pane cls=ScrollViewer fw=XAML aid=- pid=<pid> bounds=ok left=8 top=168 width=1600 height=472 en=1 off=0 kbf=0 pats=Scroll,ScrollItem name=-",
"i=14 d=3 parent=13 ct=ControlType.List cls=GridView fw=XAML aid=PageGroupsListView pid=<pid> bounds=ok left=8 top=192 width=1600 height=440 en=1 off=0 kbf=0 pats=ItemContainer,Scroll,ScrollItem name=-",
"i=15 d=4 parent=14 ct=ControlType.ListItem cls=GridViewItem fw=XAML aid=SettingsPageGroupPCSystem pid=<pid> bounds=ok left=144 top=208 width=248 height=88 en=1 off=0 kbf=1 pats=Invoke,ScrollItem,VirtualizedItem name=\u003credacted:6 chars\u003e",
"i=16 d=5 parent=15 ct=ControlType.Text cls=TextBlock fw=XAML aid=- pid=<pid> bounds=ok left=208 top=224 width=152 height=16 en=1 off=0 kbf=0 pats=ScrollItem,Text name=\u003credacted:6 chars\u003e",
"i=17 d=5 parent=15 ct=ControlType.Text cls=TextBlock fw=XAML aid=- pid=<pid> bounds=ok left=208 top=240 width=152 height=32 en=1 off=0 kbf=0 pats=ScrollItem,Text name=\u003credacted:36 chars\u003e",
"i=18 d=4 parent=14 ct=ControlType.ListItem cls=GridViewItem fw=XAML aid=SettingsPageGroupDevices pid=<pid> bounds=ok left=416 top=208 width=248 height=88 en=1 off=0 kbf=1 pats=Invoke,ScrollItem,VirtualizedItem name=\u003credacted:7 chars\u003e",
"i=19 d=5 parent=18 ct=ControlType.Text cls=TextBlock fw=XAML aid=- pid=<pid> bounds=ok left=480 top=224 width=144 height=16 en=1 off=0 kbf=0 pats=ScrollItem,Text name=\u003credacted:7 chars\u003e",
"i=20 d=5 parent=18 ct=ControlType.Text cls=TextBlock fw=XAML aid=- pid=<pid> bounds=ok left=480 top=240 width=144 height=16 en=1 off=0 kbf=0 pats=ScrollItem,Text name=\u003credacted:26 chars\u003e",
"i=21 d=4 parent=14 ct=ControlType.ListItem cls=GridViewItem fw=XAML aid=SettingsPageGroupNetwork pid=<pid> bounds=ok left=688 top=208 width=248 height=88 en=1 off=0 kbf=1 pats=Invoke,ScrollItem,VirtualizedItem name=\u003credacted:18 chars\u003e",
"i=22 d=5 parent=21 ct=ControlType.Text cls=TextBlock fw=XAML aid=- pid=<pid> bounds=ok left=752 top=224 width=136 height=16 en=1 off=0 kbf=0 pats=ScrollItem,Text name=\u003credacted:18 chars\u003e",
"i=23 d=5 parent=21 ct=ControlType.Text cls=TextBlock fw=XAML aid=- pid=<pid> bounds=ok left=752 top=240 width=136 height=16 en=1 off=0 kbf=0 pats=ScrollItem,Text name=\u003credacted:25 chars\u003e",
"i=24 d=4 parent=14 ct=ControlType.ListItem cls=GridViewItem fw=XAML aid=SettingsPageGroupPersonalization pid=<pid> bounds=ok left=952 top=208 width=248 height=88 en=1 off=0 kbf=1 pats=Invoke,ScrollItem,VirtualizedItem name=\u003credacted:15 chars\u003e",
"i=25 d=5 parent=24 ct=ControlType.Text cls=TextBlock fw=XAML aid=- pid=<pid> bounds=ok left=1024 top=224 width=168 height=16 en=1 off=0 kbf=0 pats=ScrollItem,Text name=\u003credacted:15 chars\u003e",
"i=26 d=5 parent=24 ct=ControlType.Text cls=TextBlock fw=XAML aid=- pid=<pid> bounds=ok left=1024 top=240 width=168 height=16 en=1 off=0 kbf=0 pats=ScrollItem,Text name=\u003credacted:31 chars\u003e",
"i=27 d=4 parent=14 ct=ControlType.ListItem cls=GridViewItem fw=XAML aid=SettingsPageGroupApps pid=<pid> bounds=ok left=1224 top=208 width=248 height=88 en=1 off=0 kbf=1 pats=Invoke,ScrollItem,VirtualizedItem name=\u003credacted:4 chars\u003e",
"i=28 d=5 parent=27 ct=ControlType.Text cls=TextBlock fw=XAML aid=- pid=<pid> bounds=ok left=1288 top=224 width=144 height=16 en=1 off=0 kbf=0 pats=ScrollItem,Text name=\u003credacted:4 chars\u003e",
"i=29 d=5 parent=27 ct=ControlType.Text cls=TextBlock fw=XAML aid=- pid=<pid> bounds=ok left=1288 top=240 width=144 height=32 en=1 off=0 kbf=0 pats=ScrollItem,Text name=\u003credacted:38 chars\u003e",
"i=30 d=4 parent=14 ct=ControlType.ListItem cls=GridViewItem fw=XAML aid=SettingsPageGroupAccounts pid=<pid> bounds=ok left=144 top=312 width=248 height=88 en=1 off=0 kbf=1 pats=Invoke,ScrollItem,VirtualizedItem name=\u003credacted:8 chars\u003e",
"i=31 d=5 parent=30 ct=ControlType.Text cls=TextBlock fw=XAML aid=- pid=<pid> bounds=ok left=208 top=328 width=144 height=16 en=1 off=0 kbf=0 pats=ScrollItem,Text name=\u003credacted:8 chars\u003e",
"i=32 d=5 parent=30 ct=ControlType.Text cls=TextBlock fw=XAML aid=- pid=<pid> bounds=ok left=208 top=344 width=144 height=32 en=1 off=0 kbf=0 pats=ScrollItem,Text name=\u003credacted:46 chars\u003e",
"i=33 d=4 parent=14 ct=ControlType.ListItem cls=GridViewItem fw=XAML aid=SettingsPageGroupTimeRegion pid=<pid> bounds=ok left=416 top=312 width=248 height=88 en=1 off=0 kbf=1 pats=Invoke,ScrollItem,VirtualizedItem name=\u003credacted:15 chars\u003e",
"i=34 d=5 parent=33 ct=ControlType.Text cls=TextBlock fw=XAML aid=- pid=<pid> bounds=ok left=480 top=328 width=112 height=16 en=1 off=0 kbf=0 pats=ScrollItem,Text name=\u003credacted:15 chars\u003e",
"i=35 d=5 parent=33 ct=ControlType.Text cls=TextBlock fw=XAML aid=- pid=<pid> bounds=ok left=480 top=344 width=112 height=16 en=1 off=0 kbf=0 pats=ScrollItem,Text name=\u003credacted:20 chars\u003e",
"i=36 d=4 parent=14 ct=ControlType.ListItem cls=GridViewItem fw=XAML aid=SettingsPageGroupEaseOfAccess pid=<pid> bounds=ok left=688 top=312 width=248 height=88 en=1 off=0 kbf=1 pats=Invoke,ScrollItem,VirtualizedItem name=\u003credacted:14 chars\u003e",
"i=37 d=5 parent=36 ct=ControlType.Text cls=TextBlock fw=XAML aid=- pid=<pid> bounds=ok left=752 top=328 width=128 height=16 en=1 off=0 kbf=0 pats=ScrollItem,Text name=\u003credacted:14 chars\u003e",
"i=38 d=5 parent=36 ct=ControlType.Text cls=TextBlock fw=XAML aid=- pid=<pid> bounds=ok left=752 top=344 width=128 height=32 en=1 off=0 kbf=0 pats=ScrollItem,Text name=\u003credacted:34 chars\u003e",
"i=39 d=4 parent=14 ct=ControlType.ListItem cls=GridViewItem fw=XAML aid=SettingsPageGroupPrivacy pid=<pid> bounds=ok left=952 top=312 width=248 height=88 en=1 off=0 kbf=1 pats=Invoke,ScrollItem,VirtualizedItem name=\u003credacted:7 chars\u003e",
"i=40 d=5 parent=39 ct=ControlType.Text cls=TextBlock fw=XAML aid=- pid=<pid> bounds=ok left=1024 top=328 width=88 height=16 en=1 off=0 kbf=0 pats=ScrollItem,Text name=\u003credacted:7 chars\u003e",
"i=41 d=5 parent=39 ct=ControlType.Text cls=TextBlock fw=XAML aid=- pid=<pid> bounds=ok left=1024 top=344 width=88 height=16 en=1 off=0 kbf=0 pats=ScrollItem,Text name=\u003credacted:16 chars\u003e",
"i=42 d=4 parent=14 ct=ControlType.ListItem cls=GridViewItem fw=XAML aid=SettingsPageGroupRestore pid=<pid> bounds=ok left=1224 top=312 width=248 height=88 en=1 off=0 kbf=1 pats=Invoke,ScrollItem,VirtualizedItem name=\u003credacted:17 chars\u003e",
"i=43 d=5 parent=42 ct=ControlType.Text cls=TextBlock fw=XAML aid=- pid=<pid> bounds=ok left=1288 top=328 width=144 height=16 en=1 off=0 kbf=0 pats=ScrollItem,Text name=\u003credacted:17 chars\u003e",
"i=44 d=5 parent=42 ct=ControlType.Text cls=TextBlock fw=XAML aid=- pid=<pid> bounds=ok left=1288 top=344 width=144 height=32 en=1 off=0 kbf=0 pats=ScrollItem,Text name=\u003credacted:32 chars\u003e",
"i=45 d=4 parent=14 ct=ControlType.ListItem cls=GridViewItem fw=XAML aid=SettingsPageGroupSearch pid=<pid> bounds=ok left=144 top=416 width=248 height=88 en=1 off=0 kbf=1 pats=Invoke,ScrollItem,VirtualizedItem name=\u003credacted:6 chars\u003e",
"i=46 d=5 parent=45 ct=ControlType.Text cls=TextBlock fw=XAML aid=- pid=<pid> bounds=ok left=208 top=432 width=160 height=16 en=1 off=0 kbf=0 pats=ScrollItem,Text name=\u003credacted:6 chars\u003e",
"i=47 d=5 parent=45 ct=ControlType.Text cls=TextBlock fw=XAML aid=- pid=<pid> bounds=ok left=208 top=448 width=160 height=16 en=1 off=0 kbf=0 pats=ScrollItem,Text name=\u003credacted:30 chars\u003e",
"i=48 d=1 parent=0 ct=ControlType.Pane cls=ApplicationFrameInputSinkWindow fw=Win32 aid=- pid=<pid> bounds=ok left=8 top=32 width=1600 height=656 en=1 off=0 kbf=0 pats=- name=-"
],
"FocusBefore": {
"Resolved": true,
"ControlType": "ControlType.Window",
"ClassName": "org.wezfurlong.wezterm",
"ProcessId": <pid>,
"NativeWindowHandle": <hwnd>
},
"FocusAfter": {
"Resolved": true,
"ControlType": "ControlType.Window",
"ClassName": "org.wezfurlong.wezterm",
"ProcessId": <pid>,
"NativeWindowHandle": <hwnd>
},
"FocusUnchanged": true,
"FocusIdentityNote": "focus identity is asserted on ControlType/ClassName/ProcessId/NativeWindowHandle; the focused element is usually the operator console, whose Name mutates independently of focus and would produce false interference",
"Foreground": {
"ProcessId": <pid>
}
}
}

View file

@ -1,75 +0,0 @@
{
"Probe": "01-tree-dump",
"CapturedAtUtc": "<timestamp>",
"Stack": "managed",
"BaselineFocus": {
"Resolved": true,
"ControlType": "ControlType.Window",
"ClassName": "org.wezfurlong.wezterm",
"ProcessId": <pid>,
"NativeWindowHandle": <hwnd>
},
"FocusInterference": [
],
"FocusSelfActivation": [
],
"BoundsFloorPct": 95,
"BelowBoundsFloor": [
],
"Targets": [
{
"Target": "notepad",
"NodeCount": 3,
"PctNonEmptyBounds": 100,
"PctPositiveAreaBounds": 100,
"NodesWithControlType": 3,
"RefableNodeCount": 1,
"FocusUnchanged": true
},
{
"Target": "settings",
"NodeCount": 49,
"PctNonEmptyBounds": 95.92,
"PctPositiveAreaBounds": 95.92,
"NodesWithControlType": 49,
"RefableNodeCount": 46,
"FocusUnchanged": true
},
{
"Target": "explorer",
"NodeCount": 196,
"PctNonEmptyBounds": 100,
"PctPositiveAreaBounds": 100,
"NodesWithControlType": 196,
"RefableNodeCount": 168,
"FocusUnchanged": true
},
{
"Target": "obsidian",
"NodeCount": 113,
"PctNonEmptyBounds": 99.12,
"PctPositiveAreaBounds": 99.12,
"NodesWithControlType": 113,
"RefableNodeCount": 113,
"FocusUnchanged": true
}
],
"MinimizedVsRestored": {
"RestoredNodeCount": 3,
"MinimizedNodeCount": 3,
"NodeCountDelta": 0,
"RestoredPctNonEmptyBounds": 100,
"MinimizedPctNonEmptyBounds": 66.67,
"RestoredNodesAtOffscreenOrigin": 0,
"MinimizedNodesAtOffscreenOrigin": 2,
"Verdict": "launch policy does not affect tree completeness; it affects geometry only"
},
"NotepadVocabulary": {
"Verdict": "NEW-EDGE",
"Finding": "classic Notepad\u0027s editor exposes as ControlType.Pane with ClassName Edit and AutomationId 15 to the managed client — not ControlType.Edit or ControlType.Document. 2.3\u0027s vocabulary map cannot key an editable text surface off ControlType alone."
},
"StackDivergence": "all counts here are managed ControlView. U7 measured classic Notepad at 26 nodes on the UIA3 COM stack against the 3 recorded here, so a low managed count on a Win32 target is evidence of client-stack divergence (KTD1), not of a missing tree."
}

View file

@ -1,77 +0,0 @@
{
"Probe": "02-cache-timing",
"CapturedAtUtc": "<timestamp>",
"Stack": "managed",
"Scope": "api-contract",
"Authority": "NON-AUTHORITATIVE managed cross-check (KTD1). The authoritative CacheRequest measurement is U7 08-uia3-com/cache-timing.json on the UIA3 COM stack — the stack the Rust adapter uses.",
"Method": "per-property pass calls FindAll(Subtree) then GetCurrentPropertyValue for each of 8 properties on each node; cached pass activates a CacheRequest carrying the same 8 properties over the same TreeScope.Subtree with the ControlView tree filter, then reads GetCachedPropertyValue. One discarded warm-up pass of each precedes the measured repetitions.",
"Targets": [
{
"Label": "notepad",
"Stack": "managed",
"NodeCount": 3,
"CachedNodeCount": 3,
"PropertiesPerNode": 8,
"PropertyNames": "Name,ControlType,AutomationId,ClassName,BoundingRectangle,IsEnabled,IsOffscreen,FrameworkId",
"Repetitions": 5,
"PropertyReadsPerRepetition": 24,
"CachedPropertyReadsPerRepetition": 24,
"AutomationElementMode": "Full (CacheRequest default) — matched to the per-property pass so the delta is caching, not element-mode weight",
"timingPerPropertyTotalMs": <duration>,
"timingCachedTotalMs": <duration>,
"timingPerPropertyFindMs": <duration>,
"timingCachedFindMs": <duration>,
"timingPerPropertyReadMs": <duration>,
"timingCachedReadMs": <duration>,
"timingOverallMultiplier": <duration>,
"timingFindPhaseMultiplier": <duration>,
"timingReadPhaseMultiplier": <duration>
},
{
"Label": "explorer",
"Stack": "managed",
"NodeCount": 196,
"CachedNodeCount": 196,
"PropertiesPerNode": 8,
"PropertyNames": "Name,ControlType,AutomationId,ClassName,BoundingRectangle,IsEnabled,IsOffscreen,FrameworkId",
"Repetitions": 5,
"PropertyReadsPerRepetition": 1568,
"CachedPropertyReadsPerRepetition": 1568,
"AutomationElementMode": "Full (CacheRequest default) — matched to the per-property pass so the delta is caching, not element-mode weight",
"timingPerPropertyTotalMs": <duration>,
"timingCachedTotalMs": <duration>,
"timingPerPropertyFindMs": <duration>,
"timingCachedFindMs": <duration>,
"timingPerPropertyReadMs": <duration>,
"timingCachedReadMs": <duration>,
"timingOverallMultiplier": <duration>,
"timingFindPhaseMultiplier": <duration>,
"timingReadPhaseMultiplier": <duration>
}
],
"Uia3ComReference": {
"Source": "probes/windows/captures/08-uia3-com/cache-timing.json",
"Stack": "uia3-com",
"Target": "explorer folder window over %WINDIR%\\System32",
"NodeCount": 220,
"timingComOverallMultiplier": <duration>,
"timingComReadPhaseMultiplier": <duration>,
"ComFindPhaseFinding": "the cache-building find phase is SLOWER than the uncached find (180.25 ms vs 117.38 ms): building the cache costs time up front and pays it back on reads",
"ClaimVerdict": "below-3x-claim against the phases.md 3-5x batched-read claim"
},
"Comparison": "stated in ComparisonToAuthoritative below; the managed numbers are reported to show whether the managed stack reproduces the COM shape, not to replace it",
"Interpretation": {
"Notepad": "NEW-EDGE: batching is a PESSIMIZATION here — timingOverallMultiplier is below 1.0 on classic Notepad. Notepad is a plain Win32 control tree served by UIAutomationClientsideProviders, which run inside the client process, so an uncached property read costs no cross-process RPC and the CacheRequest adds pure setup cost. A Windows adapter that batches unconditionally will make simple Win32 windows slower.",
"Explorer": "on a genuinely out-of-process provider the managed stack reproduces the COM shape exactly: timingFindPhaseMultiplier below 1.0 (building the cache makes the find phase slower) and timingReadPhaseMultiplier in the hundreds, leaving a modest overall multiplier.",
"Headline": "U7 uia3-com stays authoritative at 2.6942x overall and 298.158x on the read phase. The managed cross-check reproduces the direction and the phase split, not the magnitude, and adds the client-side-provider caveat above."
},
"ComparisonToAuthoritative": {
"ComOverallMultiplier": 2.6942,
"timingManagedOverallMultiplier": <duration>,
"ComReadPhaseMultiplier": 298.158,
"timingManagedReadPhaseMultiplier": <duration>,
"timingManagedFindPhaseMultiplier": <duration>,
"SameTargetShape": "both measure an explorer folder window over %WINDIR%\\System32 with the same 8 properties and 5 repetitions; managed NodeCount differs from the COM NodeCount because the two client stacks do not present the same control view (KTD1)",
"Note": "a find-phase multiplier below 1.0 reproduces the COM finding that cache-building makes the find phase slower; the payback is entirely in the read phase"
}
}

View file

@ -1,298 +0,0 @@
{
"Probe": "03-pattern-census",
"Question": "does a managed pattern census record the same availability the Rust adapter will see through UIA3 COM",
"ComparisonBase": "COM occurrences summed across the four census targets in captures/08-uia3-com/census.json; managed occurrences summed across the four fresh sweeps in managed-crosscheck.json",
"ManagedPatternClasses": [
"Dock",
"ExpandCollapse",
"Grid",
"GridItem",
"Invoke",
"ItemContainer",
"MultipleView",
"RangeValue",
"Scroll",
"ScrollItem",
"Selection",
"SelectionItem",
"SynchronizedInput",
"Table",
"TableItem",
"Text",
"Toggle",
"Transform",
"Value",
"VirtualizedItem",
"Window"
],
"ManagedPatternClassCount": 21,
"ManagedVocabularyNote": "ManagedPatternClasses is reflected out of the UIAutomationTypes assembly at run time (public types named *PatternIdentifiers), not transcribed. It is the complete set of pattern names System.Windows.Automation can ever return, so a COM-observed pattern outside this set is a structural blind spot rather than a sampling gap. The two cases are separated in every row: ExpressibleByManagedStack=false is structural, ExpressibleByManagedStack=true with zero managed occurrences only means the smaller managed tree did not reach an element advertising it.",
"Rows": [
{
"Pattern": "ExpandCollapse",
"ExpressibleByManagedStack": true,
"ComOccurrences": 13,
"ManagedOccurrences": 2,
"ComTargets": [
"winforms-default",
"winforms-host-providers",
"wpf",
"notepad"
],
"ManagedTargets": [
"winforms-host-providers",
"wpf"
],
"Verdict": "both stacks report it"
},
{
"Pattern": "Invoke",
"ExpressibleByManagedStack": true,
"ComOccurrences": 48,
"ManagedOccurrences": 3,
"ComTargets": [
"winforms-default",
"winforms-host-providers",
"wpf",
"notepad"
],
"ManagedTargets": [
"winforms-host-providers",
"wpf"
],
"Verdict": "both stacks report it"
},
{
"Pattern": "ItemContainer",
"ExpressibleByManagedStack": true,
"ComOccurrences": 2,
"ManagedOccurrences": 2,
"ComTargets": [
"wpf"
],
"ManagedTargets": [
"wpf"
],
"Verdict": "both stacks report it"
},
{
"Pattern": "LegacyIAccessible",
"ExpressibleByManagedStack": false,
"ComOccurrences": 141,
"ManagedOccurrences": 0,
"ComTargets": [
"winforms-default",
"winforms-host-providers",
"wpf",
"notepad"
],
"ManagedTargets": [
],
"Verdict": "COM only - the managed stack has no identifier for this pattern and can never report it"
},
{
"Pattern": "RangeValue",
"ExpressibleByManagedStack": true,
"ComOccurrences": 8,
"ManagedOccurrences": 4,
"ComTargets": [
"winforms-default",
"winforms-host-providers",
"wpf",
"notepad"
],
"ManagedTargets": [
"wpf"
],
"Verdict": "both stacks report it"
},
{
"Pattern": "Scroll",
"ExpressibleByManagedStack": true,
"ComOccurrences": 8,
"ManagedOccurrences": 5,
"ComTargets": [
"winforms-default",
"winforms-host-providers",
"wpf",
"notepad"
],
"ManagedTargets": [
"wpf"
],
"Verdict": "both stacks report it"
},
{
"Pattern": "ScrollItem",
"ExpressibleByManagedStack": true,
"ComOccurrences": 12,
"ManagedOccurrences": 5,
"ComTargets": [
"winforms-host-providers",
"wpf"
],
"ManagedTargets": [
"wpf"
],
"Verdict": "both stacks report it"
},
{
"Pattern": "Selection",
"ExpressibleByManagedStack": true,
"ComOccurrences": 4,
"ManagedOccurrences": 2,
"ComTargets": [
"winforms-host-providers",
"wpf"
],
"ManagedTargets": [
"wpf"
],
"Verdict": "both stacks report it"
},
{
"Pattern": "SelectionItem",
"ExpressibleByManagedStack": true,
"ComOccurrences": 12,
"ManagedOccurrences": 5,
"ComTargets": [
"winforms-host-providers",
"wpf"
],
"ManagedTargets": [
"wpf"
],
"Verdict": "both stacks report it"
},
{
"Pattern": "SynchronizedInput",
"ExpressibleByManagedStack": true,
"ComOccurrences": 28,
"ManagedOccurrences": 28,
"ComTargets": [
"wpf"
],
"ManagedTargets": [
"wpf"
],
"Verdict": "both stacks report it"
},
{
"Pattern": "Text",
"ExpressibleByManagedStack": true,
"ComOccurrences": 3,
"ManagedOccurrences": 2,
"ComTargets": [
"wpf",
"notepad"
],
"ManagedTargets": [
"wpf"
],
"Verdict": "both stacks report it"
},
{
"Pattern": "Text2",
"ExpressibleByManagedStack": false,
"ComOccurrences": 1,
"ManagedOccurrences": 0,
"ComTargets": [
"notepad"
],
"ManagedTargets": [
],
"Verdict": "COM only - the managed stack has no identifier for this pattern and can never report it"
},
{
"Pattern": "Toggle",
"ExpressibleByManagedStack": true,
"ComOccurrences": 2,
"ManagedOccurrences": 1,
"ComTargets": [
"winforms-host-providers",
"wpf"
],
"ManagedTargets": [
"wpf"
],
"Verdict": "both stacks report it"
},
{
"Pattern": "Transform",
"ExpressibleByManagedStack": true,
"ComOccurrences": 4,
"ManagedOccurrences": 4,
"ComTargets": [
"winforms-default",
"winforms-host-providers",
"wpf",
"notepad"
],
"ManagedTargets": [
"winforms-default",
"winforms-host-providers",
"wpf",
"notepad"
],
"Verdict": "both stacks report it"
},
{
"Pattern": "Value",
"ExpressibleByManagedStack": true,
"ComOccurrences": 11,
"ManagedOccurrences": 3,
"ComTargets": [
"winforms-default",
"winforms-host-providers",
"wpf",
"notepad"
],
"ManagedTargets": [
"winforms-host-providers",
"wpf"
],
"Verdict": "both stacks report it"
},
{
"Pattern": "Window",
"ExpressibleByManagedStack": true,
"ComOccurrences": 4,
"ManagedOccurrences": 4,
"ComTargets": [
"winforms-default",
"winforms-host-providers",
"wpf",
"notepad"
],
"ManagedTargets": [
"winforms-default",
"winforms-host-providers",
"wpf",
"notepad"
],
"Verdict": "both stacks report it"
}
],
"ComOnlyPatterns": [
"LegacyIAccessible",
"Text2"
],
"StructurallyInvisibleToManaged": [
"LegacyIAccessible",
"Text2"
],
"LegacyIAccessibleRow": {
"ComElementsReportingIt": 141,
"ManagedElementsReportingIt": 0,
"ComElementsTotal": 141,
"Verdict": "CONFIRMS KTD1",
"Finding": "LegacyIAccessible is advertised by every element the COM census walked and by zero elements the managed sweep walked. The managed absence is structural, not environmental: System.Windows.Automation exposes 22 pattern classes and has no LegacyIAccessible identifier to return, so GetSupportedPatterns() can never name it. A managed-only census would have filed that as \"pattern unavailable\" for the whole corpus.",
"Consequence": "every pattern-availability row in this sub-phase must carry stack=uia3-com. A Windows adapter that decides actionability from a managed-derived pattern table would under-report actionable elements on exactly the legacy Win32 surfaces where LegacyIAccessible.DoDefaultAction is the only affordance."
},
"NotepadDocumentRow": {
"Finding": "the same divergence shows up as a ControlType disagreement, not only a pattern one: classic Notepad edit surface is ControlType.Pane with AutomationId 15 to the managed client (U3, 01-tree-dump) and ControlType.Document with Value, Text, Text2, Scroll, LegacyIAccessible to the COM client. Text2 (30119) is another pattern the managed stack cannot name.",
"Verdict": "NEW-EDGE"
}
}

View file

@ -1,67 +0,0 @@
{
"Probe": "03-pattern-census",
"Stack": "managed-System.Windows.Automation",
"Authoritative": false,
"Scope": "app/provider",
"Method": "fresh RawViewWalker sweep over the same four fixture shapes, calling AutomationElement.GetSupportedPatterns() per element and reducing each AutomationPattern ProgrammaticName by stripping the PatternIdentifiers.Pattern suffix",
"WhyNotAuthoritative": "KTD1: recorded only so the COM-vs-managed pattern vocabulary can be diffed. Where a managed row disagrees with the COM matrix the COM row is the product-relevant one, because the Rust adapter wraps a UIA3 COM client.",
"SameRunCaveat": "these windows are fresh instances launched by this probe, not the HWNDs U7 measured. That does not weaken the divergence row: the claim under test is which pattern names a client stack can express at all, which is a property of the client library, not of a window instance. U7 comparison.json already holds the same-run, same-HWND node-count comparison.",
"WpfPeerActivation": {
"Verdict": "NEW-EDGE",
"ClassNameShapeAfterActivation": "Window",
"timingPeerActivationLaunches": <duration>,
"Observation": "if a UIA client reads the WPF window before WPF has built its automation peer, the client binds the generic HWND provider for that window and never re-resolves it. The window then reports ControlType.Window with ClassName HwndWrapper[\u003cappdomain\u003e;\u003cthread name\u003e;\u003cguid\u003e] and ZERO children, and stays that way. Measured: a 30 s poll loop in the same client process, including AutomationElement.FromHandle and a FindAll(Descendants, TrueCondition) forced traversal on every pass, never recovered the tree. The same fixture read for the first time 8 s after launch reports ClassName=Window with 8 children immediately.",
"Consequence": "a Windows snapshot taken immediately after launching a WPF app can return a permanently empty one-node tree, and retrying inside the same process cannot fix it - the adapter would have to re-resolve from a new HWND or a new client. This is a different failure mode from the Electron settle U3 measured: Electron under-reports and then grows, WPF binds the wrong provider and stays wrong.",
"ProbePolicy": "this probe launches the WPF fixture first, settles before its first UIA touch, verifies the root has children, and relaunches on a fresh HWND if it does not. timingPeerActivationLaunches records how many launches that took on this run.",
"ClassNameCorollary": "the two shapes ClassName takes (Window when the peer is bound, HwndWrapper[...;\u003cguid\u003e] when it is not) also disqualify ClassName as an element-identity component on WPF: one of them embeds a per-launch GUID."
},
"MatrixRecordFormat": "one row per line, space separated key=value fields in fixed order: target=\u003ccensus target label\u003e ct=\u003cUIA ControlType short name\u003e n=\u003celements of that ControlType in the RawView walk\u003e withpat=\u003chow many of them advertise at least one pattern\u003e pats=\u003cName:count comma separated, \"-\" when none\u003e. Counts are element occurrences, not distinct patterns.",
"Targets": [
{
"Label": "winforms-default",
"RawViewNodes": 24,
"ElementsWithAnyPattern": 1,
"PatternTotals": "Transform:1,Window:1"
},
{
"Label": "winforms-host-providers",
"RawViewNodes": 26,
"ElementsWithAnyPattern": 3,
"PatternTotals": "ExpandCollapse:1,Invoke:1,Transform:1,Value:1,Window:1"
},
{
"Label": "wpf",
"RawViewNodes": 28,
"ElementsWithAnyPattern": 28,
"PatternTotals": "ExpandCollapse:1,Invoke:2,ItemContainer:2,RangeValue:4,Scroll:5,ScrollItem:5,Selection:2,SelectionItem:5,SynchronizedInput:28,Text:2,Toggle:1,Transform:1,Value:2,Window:1"
},
{
"Label": "notepad",
"RawViewNodes": 3,
"ElementsWithAnyPattern": 1,
"PatternTotals": "Transform:1,Window:1"
}
],
"Rows": [
"target=winforms-default ct=Pane n=23 withpat=0 pats=-",
"target=winforms-default ct=Window n=1 withpat=1 pats=Transform:1,Window:1",
"target=winforms-host-providers ct=Button n=1 withpat=1 pats=Invoke:1",
"target=winforms-host-providers ct=ComboBox n=1 withpat=1 pats=ExpandCollapse:1,Value:1",
"target=winforms-host-providers ct=Pane n=17 withpat=0 pats=-",
"target=winforms-host-providers ct=Text n=6 withpat=0 pats=-",
"target=winforms-host-providers ct=Window n=1 withpat=1 pats=Transform:1,Window:1",
"target=wpf ct=Button n=2 withpat=2 pats=Invoke:2,SynchronizedInput:2",
"target=wpf ct=CheckBox n=1 withpat=1 pats=SynchronizedInput:1,Toggle:1",
"target=wpf ct=ComboBox n=1 withpat=1 pats=ExpandCollapse:1,ItemContainer:1,Selection:1,SynchronizedInput:1",
"target=wpf ct=Edit n=2 withpat=2 pats=Scroll:2,SynchronizedInput:2,Text:2,Value:2",
"target=wpf ct=List n=1 withpat=1 pats=ItemContainer:1,Scroll:1,Selection:1,SynchronizedInput:1",
"target=wpf ct=ListItem n=5 withpat=5 pats=ScrollItem:5,SelectionItem:5,SynchronizedInput:5",
"target=wpf ct=Pane n=2 withpat=2 pats=Scroll:2,SynchronizedInput:2",
"target=wpf ct=ScrollBar n=4 withpat=4 pats=RangeValue:4,SynchronizedInput:4",
"target=wpf ct=Text n=9 withpat=9 pats=SynchronizedInput:9",
"target=wpf ct=Window n=1 withpat=1 pats=SynchronizedInput:1,Transform:1,Window:1",
"target=notepad ct=Pane n=2 withpat=0 pats=-",
"target=notepad ct=Window n=1 withpat=1 pats=Transform:1,Window:1"
],
"NodeBudget": 400
}

View file

@ -1,181 +0,0 @@
{
"Probe": "03-pattern-census",
"Stack": "uia3-com",
"Authoritative": true,
"Scope": "app/provider",
"Source": "captures/08-uia3-com/census.json, produced by U7 shim mode \"census\" over hand-declared ComImport UIA3 (CUIAutomation8); reshaped here, not re-measured",
"SourceRationale": "KTD1 puts pattern availability on the COM stack because the managed stack structurally cannot name LegacyIAccessible, Drag, DropTarget, Annotation, Styles or TextChild. Re-walking the same four targets a second time would add a second sample of the same fact and a second chance for drift, so this probe consumes the committed measurement.",
"View": "RawView walk (shim census mode); inControlView is recorded per element in the source capture",
"MatrixRecordFormat": "one row per line, space separated key=value fields in fixed order: target=\u003ccensus target label\u003e ct=\u003cUIA ControlType short name\u003e n=\u003celements of that ControlType in the RawView walk\u003e withpat=\u003chow many of them advertise at least one pattern\u003e pats=\u003cName:count comma separated, \"-\" when none\u003e. Counts are element occurrences, not distinct patterns.",
"Targets": [
{
"Label": "winforms-default",
"ProcessName": "ScratchForms",
"RootFrameworkId": "WinForm",
"ControlViewNodes": 35,
"RawViewNodes": 35,
"ElementsWithAnyPattern": 35,
"ElementsWithAnyPatternExcludingLegacy": 11
},
{
"Label": "winforms-host-providers",
"ProcessName": "ScratchForms",
"RootFrameworkId": "WinForm",
"ControlViewNodes": 46,
"RawViewNodes": 46,
"ElementsWithAnyPattern": 46,
"ElementsWithAnyPatternExcludingLegacy": 37
},
{
"Label": "wpf",
"ProcessName": "powershell",
"RootFrameworkId": "WPF",
"ControlViewNodes": 32,
"RawViewNodes": 34,
"ElementsWithAnyPattern": 34,
"ElementsWithAnyPatternExcludingLegacy": 33
},
{
"Label": "notepad",
"ProcessName": "notepad",
"RootFrameworkId": "Win32",
"ControlViewNodes": 26,
"RawViewNodes": 26,
"ElementsWithAnyPattern": 26,
"ElementsWithAnyPatternExcludingLegacy": 18
}
],
"PatternTotalsByTarget": {
"winforms-default": "ExpandCollapse:1,Invoke:6,LegacyIAccessible:35,RangeValue:1,Scroll:1,Transform:1,Value:1,Window:1",
"winforms-host-providers": "ExpandCollapse:4,Invoke:24,LegacyIAccessible:46,RangeValue:1,Scroll:1,ScrollItem:7,Selection:2,SelectionItem:7,Toggle:1,Transform:1,Value:5,Window:1",
"wpf": "ExpandCollapse:2,Invoke:5,ItemContainer:2,LegacyIAccessible:34,RangeValue:4,Scroll:5,ScrollItem:5,Selection:2,SelectionItem:5,SynchronizedInput:28,Text:2,Toggle:1,Transform:1,Value:3,Window:1",
"notepad": "ExpandCollapse:6,Invoke:13,LegacyIAccessible:26,RangeValue:2,Scroll:1,Text:1,Text2:1,Transform:1,Value:2,Window:1"
},
"Rows": [
"target=winforms-default ct=Button n=6 withpat=6 pats=Invoke:6,LegacyIAccessible:6",
"target=winforms-default ct=MenuBar n=1 withpat=1 pats=LegacyIAccessible:1",
"target=winforms-default ct=MenuItem n=1 withpat=1 pats=ExpandCollapse:1,LegacyIAccessible:1",
"target=winforms-default ct=Pane n=23 withpat=23 pats=LegacyIAccessible:23,Scroll:1",
"target=winforms-default ct=ScrollBar n=1 withpat=1 pats=LegacyIAccessible:1,RangeValue:1",
"target=winforms-default ct=Thumb n=1 withpat=1 pats=LegacyIAccessible:1",
"target=winforms-default ct=TitleBar n=1 withpat=1 pats=LegacyIAccessible:1,Value:1",
"target=winforms-default ct=Window n=1 withpat=1 pats=LegacyIAccessible:1,Transform:1,Window:1",
"target=winforms-host-providers ct=Button n=18 withpat=18 pats=Invoke:18,LegacyIAccessible:18",
"target=winforms-host-providers ct=CheckBox n=1 withpat=1 pats=Invoke:1,LegacyIAccessible:1,Toggle:1",
"target=winforms-host-providers ct=ComboBox n=1 withpat=1 pats=ExpandCollapse:1,LegacyIAccessible:1,Value:1",
"target=winforms-host-providers ct=Edit n=2 withpat=2 pats=LegacyIAccessible:2,Value:2",
"target=winforms-host-providers ct=List n=1 withpat=1 pats=LegacyIAccessible:1,Selection:1",
"target=winforms-host-providers ct=ListItem n=5 withpat=5 pats=Invoke:5,LegacyIAccessible:5,ScrollItem:5,SelectionItem:5",
"target=winforms-host-providers ct=MenuBar n=1 withpat=1 pats=LegacyIAccessible:1",
"target=winforms-host-providers ct=MenuItem n=1 withpat=1 pats=ExpandCollapse:1,LegacyIAccessible:1",
"target=winforms-host-providers ct=Pane n=1 withpat=1 pats=LegacyIAccessible:1,Scroll:1",
"target=winforms-host-providers ct=ScrollBar n=1 withpat=1 pats=LegacyIAccessible:1,RangeValue:1",
"target=winforms-host-providers ct=Slider n=1 withpat=1 pats=LegacyIAccessible:1,Value:1",
"target=winforms-host-providers ct=Text n=6 withpat=6 pats=LegacyIAccessible:6",
"target=winforms-host-providers ct=Thumb n=2 withpat=2 pats=LegacyIAccessible:2",
"target=winforms-host-providers ct=TitleBar n=1 withpat=1 pats=LegacyIAccessible:1,Value:1",
"target=winforms-host-providers ct=Tree n=1 withpat=1 pats=LegacyIAccessible:1,Selection:1",
"target=winforms-host-providers ct=TreeItem n=2 withpat=2 pats=ExpandCollapse:2,LegacyIAccessible:2,ScrollItem:2,SelectionItem:2",
"target=winforms-host-providers ct=Window n=1 withpat=1 pats=LegacyIAccessible:1,Transform:1,Window:1",
"target=wpf ct=Button n=5 withpat=5 pats=Invoke:5,LegacyIAccessible:5,SynchronizedInput:2",
"target=wpf ct=CheckBox n=1 withpat=1 pats=LegacyIAccessible:1,SynchronizedInput:1,Toggle:1",
"target=wpf ct=ComboBox n=1 withpat=1 pats=ExpandCollapse:1,ItemContainer:1,LegacyIAccessible:1,Selection:1,SynchronizedInput:1",
"target=wpf ct=Edit n=2 withpat=2 pats=LegacyIAccessible:2,Scroll:2,SynchronizedInput:2,Text:2,Value:2",
"target=wpf ct=List n=1 withpat=1 pats=ItemContainer:1,LegacyIAccessible:1,Scroll:1,Selection:1,SynchronizedInput:1",
"target=wpf ct=ListItem n=5 withpat=5 pats=LegacyIAccessible:5,ScrollItem:5,SelectionItem:5,SynchronizedInput:5",
"target=wpf ct=MenuBar n=1 withpat=1 pats=LegacyIAccessible:1",
"target=wpf ct=MenuItem n=1 withpat=1 pats=ExpandCollapse:1,LegacyIAccessible:1",
"target=wpf ct=Pane n=2 withpat=2 pats=LegacyIAccessible:2,Scroll:2,SynchronizedInput:2",
"target=wpf ct=ScrollBar n=4 withpat=4 pats=LegacyIAccessible:4,RangeValue:4,SynchronizedInput:4",
"target=wpf ct=Text n=9 withpat=9 pats=LegacyIAccessible:9,SynchronizedInput:9",
"target=wpf ct=TitleBar n=1 withpat=1 pats=LegacyIAccessible:1,Value:1",
"target=wpf ct=Window n=1 withpat=1 pats=LegacyIAccessible:1,SynchronizedInput:1,Transform:1,Window:1",
"target=notepad ct=Button n=7 withpat=7 pats=Invoke:7,LegacyIAccessible:7",
"target=notepad ct=Document n=1 withpat=1 pats=LegacyIAccessible:1,Scroll:1,Text:1,Text2:1,Value:1",
"target=notepad ct=MenuBar n=2 withpat=2 pats=LegacyIAccessible:2",
"target=notepad ct=MenuItem n=6 withpat=6 pats=ExpandCollapse:6,Invoke:6,LegacyIAccessible:6",
"target=notepad ct=ScrollBar n=2 withpat=2 pats=LegacyIAccessible:2,RangeValue:2",
"target=notepad ct=StatusBar n=1 withpat=1 pats=LegacyIAccessible:1",
"target=notepad ct=Text n=4 withpat=4 pats=LegacyIAccessible:4",
"target=notepad ct=Thumb n=1 withpat=1 pats=LegacyIAccessible:1",
"target=notepad ct=TitleBar n=1 withpat=1 pats=LegacyIAccessible:1,Value:1",
"target=notepad ct=Window n=1 withpat=1 pats=LegacyIAccessible:1,Transform:1,Window:1"
],
"SanityAnchors": [
{
"Target": "winforms-default",
"ButtonElements": 6,
"ButtonsWithInvoke": 6,
"ButtonAnchorHolds": true,
"TextElements": 0,
"TextWithInvoke": 0,
"TextAnchorHolds": true,
"TextControlTypePresent": false
},
{
"Target": "winforms-host-providers",
"ButtonElements": 18,
"ButtonsWithInvoke": 18,
"ButtonAnchorHolds": true,
"TextElements": 6,
"TextWithInvoke": 0,
"TextAnchorHolds": true,
"TextControlTypePresent": true
},
{
"Target": "wpf",
"ButtonElements": 5,
"ButtonsWithInvoke": 5,
"ButtonAnchorHolds": true,
"TextElements": 9,
"TextWithInvoke": 0,
"TextAnchorHolds": true,
"TextControlTypePresent": true
},
{
"Target": "notepad",
"ButtonElements": 7,
"ButtonsWithInvoke": 7,
"ButtonAnchorHolds": true,
"TextElements": 4,
"TextWithInvoke": 0,
"TextAnchorHolds": true,
"TextControlTypePresent": true
}
],
"SanityAnchorNote": "Invoke on Button and no-Invoke on Text are the two anchors that would catch a census reading the wrong property ids. winforms-default has no Text ControlType at all: its custom IRawElementProviderSimple collapses every child to Pane, so the Text anchor there is vacuously true and is reported with TextControlTypePresent=false rather than silently counted as a pass.",
"Uia3OnlyPatterns": [
{
"pattern": "LegacyIAccessible",
"availabilityPropertyDiscovered": true,
"availabilityPropertyId": 30090
},
{
"pattern": "Drag",
"availabilityPropertyDiscovered": true,
"availabilityPropertyId": 30137
},
{
"pattern": "DropTarget",
"availabilityPropertyDiscovered": true,
"availabilityPropertyId": 30141
},
{
"pattern": "Annotation",
"availabilityPropertyDiscovered": true,
"availabilityPropertyId": 30118
},
{
"pattern": "Styles",
"availabilityPropertyDiscovered": true,
"availabilityPropertyId": 30127
},
{
"pattern": "TextChild",
"availabilityPropertyDiscovered": true,
"availabilityPropertyId": 30136
}
],
"PropertyIdNote": "every availability property id in Uia3OnlyPatterns was discovered from the OS at runtime by U7, not written from memory. IsAnnotationPatternAvailable is 30118 on this build; 30113 - the value a from-memory table would carry - is a different property. A hardcoded id table is the single most likely silent failure in a Rust pattern-availability check.",
"FixtureModeNote": "winforms-default is a fixture artifact, not a Win32/WinForms platform fact: the scratch app installs a custom server-side IRawElementProviderSimple that suppresses both the client-side proxies and WinForms own providers, so every child collapses to Pane with LegacyIAccessible only. winforms-host-providers is the apples-to-apples WinForms row - there chkToggle is CheckBox+Toggle, txtValue is Edit+Value, cboChoice is ComboBox+ExpandCollapse+Value."
}

View file

@ -1,291 +0,0 @@
{
"Probe": "04-automationid-census",
"Question": "what fraction of interactive elements carries a non-empty AutomationId on each Windows UI stack, and in what style",
"Stack": "managed-System.Windows.Automation",
"Scope": "app/provider",
"View": "ControlView - the view a snapshot would walk; the COM cross-check below is RawView, so its denominators are larger by construction",
"InteractiveControlTypes": [
"Button",
"CheckBox",
"ComboBox",
"DataItem",
"Edit",
"Hyperlink",
"ListItem",
"MenuItem",
"RadioButton",
"Slider",
"Spinner",
"SplitButton",
"Tab",
"TabItem",
"TreeItem"
],
"InteractiveDefinition": "the ControlTypes that map onto the interactive roles the repo ref system already allocates refs for. Container roles that are actionable-but-not-interactive (scrollarea, disclosure) are deliberately excluded from the denominator - they are ref-able because they advertise an action, not because they are interactive.",
"WalkLimits": {
"NodeBudget": 800,
"MaxDepth": 14
},
"Rows": [
{
"Target": "obsidian",
"Stack": "electron-chromium",
"Elements": 133,
"ElementsWithAutomationId": 2,
"PctAllElements": 1.5,
"InteractiveElements": 8,
"InteractiveWithAutomationId": 0,
"PctInteractiveElements": 0,
"IdStyleEmpty": 131,
"IdStyleNumericControlId": 0,
"IdStyleSymbolic": 2,
"DominantIdStyle": "symbolic",
"AutomationIdSample": [
],
"timingSettlePasses": <duration>,
"AutomationIdSampleWithheld": "AutomationId values are emitted verbatim for probe-owned fixtures and for Win32 chrome, but not for Obsidian: an Electron AutomationId can be derived from note or vault content, which R11 keeps out of the corpus. Only counts and id-style statistics are reported for this row."
},
{
"Target": "winforms-default",
"Stack": "winforms",
"Elements": 24,
"ElementsWithAutomationId": 24,
"PctAllElements": 100,
"InteractiveElements": 0,
"InteractiveWithAutomationId": 0,
"PctInteractiveElements": 0,
"IdStyleEmpty": 0,
"IdStyleNumericControlId": 0,
"IdStyleSymbolic": 24,
"DominantIdStyle": "symbolic",
"AutomationIdSample": [
"Window=frmScratchMain",
"Pane=chkToggle",
"Pane=lblValueCaption",
"Pane=txtValue",
"Pane=cboChoice",
"Pane=btnAction",
"Pane=btnMutateList",
"Pane=tbSlider",
"Pane=trvNodes",
"Pane=lstItems",
"Pane=pnlScroll",
"Pane=btnRow00",
"Pane=btnRow01",
"Pane=btnRow02",
"Pane=btnRow03",
"Pane=btnRow04",
"Pane=btnRow05",
"Pane=btnRow06",
"Pane=btnRow07",
"Pane=lblStatus",
"Pane=txtStatusMirror",
"Pane=lblScrollPos",
"Pane=lblSliderValue",
"Pane=lblInstance"
]
},
{
"Target": "winforms-host-providers",
"Stack": "winforms",
"Elements": 26,
"ElementsWithAutomationId": 23,
"PctAllElements": 88.5,
"InteractiveElements": 2,
"InteractiveWithAutomationId": 1,
"PctInteractiveElements": 50,
"IdStyleEmpty": 3,
"IdStyleNumericControlId": 23,
"IdStyleSymbolic": 0,
"DominantIdStyle": "numeric-control-id",
"AutomationIdSample": [
"Pane=1001",
"Text=1002",
"Pane=1003",
"ComboBox=1004",
"Pane=1005",
"Pane=1006",
"Pane=1008",
"Pane=1009",
"Pane=1010",
"Pane=1011",
"Pane=1012",
"Pane=1013",
"Pane=1014",
"Pane=1015",
"Pane=1016",
"Pane=1017",
"Pane=1018",
"Pane=1019",
"Text=1020",
"Pane=1021",
"Text=1022",
"Text=1023",
"Text=1024"
]
},
{
"Target": "wpf",
"Stack": "wpf",
"Elements": 26,
"ElementsWithAutomationId": 18,
"PctAllElements": 69.2,
"InteractiveElements": 11,
"InteractiveWithAutomationId": 11,
"PctInteractiveElements": 100,
"IdStyleEmpty": 8,
"IdStyleNumericControlId": 0,
"IdStyleSymbolic": 18,
"DominantIdStyle": "symbolic",
"AutomationIdSample": [
"Window=wndScratchWpf",
"CheckBox=chkToggle",
"Edit=txtValue",
"ScrollBar=VerticalScrollBar",
"ScrollBar=HorizontalScrollBar",
"ComboBox=cboChoice",
"Button=btnAction",
"Button=btnMutateList",
"List=lstItems",
"ListItem=lstItem-Item-Alpha",
"ListItem=lstItem-Item-Bravo",
"ListItem=lstItem-Item-Charlie",
"ListItem=lstItem-Item-Delta",
"ListItem=lstItem-Item-Echo",
"Edit=txtStatusMirror",
"ScrollBar=VerticalScrollBar",
"ScrollBar=HorizontalScrollBar",
"Text=lblStatus"
]
},
{
"Target": "notepad",
"Stack": "win32",
"Elements": 3,
"ElementsWithAutomationId": 2,
"PctAllElements": 66.7,
"InteractiveElements": 0,
"InteractiveWithAutomationId": 0,
"PctInteractiveElements": 0,
"IdStyleEmpty": 1,
"IdStyleNumericControlId": 2,
"IdStyleSymbolic": 0,
"DominantIdStyle": "numeric-control-id",
"AutomationIdSample": [
"Pane=15",
"Pane=1025"
]
},
{
"Target": "explorer-folder-window",
"Stack": "win32",
"Elements": 82,
"ElementsWithAutomationId": 53,
"PctAllElements": 64.6,
"InteractiveElements": 41,
"InteractiveWithAutomationId": 40,
"PctInteractiveElements": 97.6,
"IdStyleEmpty": 29,
"IdStyleNumericControlId": 9,
"IdStyleSymbolic": 44,
"DominantIdStyle": "symbolic",
"AutomationIdSample": [
"Pane=40965",
"Pane=41477",
"Pane=1001",
"Edit=SearchEditBox",
"Button=SearchBoxSearchButton",
"StatusBar=StatusBarModuleInner",
"Group=System.StatusBarViewItemCount",
"Text=PropertyValue",
"Group=ViewButtonsGroup",
"RadioButton=ViewMode_Details",
"RadioButton=ViewMode_LargeIcons",
"Pane=ProperTreeHost",
"Pane=100",
"Pane=listview",
"Pane=HorizontalScrollBar",
"SplitButton=System.ItemNameDisplay",
"Button=Dropdown",
"SplitButton=System.DateModified",
"Button=Dropdown",
"SplitButton=System.ItemTypeText",
"Button=Dropdown",
"SplitButton=System.Size",
"Button=Dropdown",
"ListItem=0",
"Edit=System.ItemNameDisplay",
"Edit=System.DateModified",
"Edit=System.ItemTypeText",
"Edit=System.Size",
"ListItem=1",
"Edit=System.ItemNameDisplay",
"Edit=System.DateModified",
"Edit=System.ItemTypeText",
"Edit=System.Size",
"ListItem=2",
"Edit=System.ItemNameDisplay",
"Edit=System.DateModified",
"Edit=System.ItemTypeText",
"Edit=System.Size",
"ListItem=3",
"Edit=System.ItemNameDisplay",
"Edit=System.DateModified",
"Edit=System.ItemTypeText",
"Edit=System.Size",
"ListItem=4",
"Edit=System.ItemNameDisplay"
]
}
],
"ComCrossCheck": [
{
"Target": "winforms-default",
"Stack": "uia3-com",
"View": "RawView",
"Elements": 35,
"ElementsWithAutomationId": 34,
"PctAllElements": 97.1,
"InteractiveElements": 7,
"InteractiveWithAutomationId": 6,
"PctInteractiveElements": 85.7
},
{
"Target": "winforms-host-providers",
"Stack": "uia3-com",
"View": "RawView",
"Elements": 46,
"ElementsWithAutomationId": 34,
"PctAllElements": 73.9,
"InteractiveElements": 31,
"InteractiveWithAutomationId": 21,
"PctInteractiveElements": 67.7
},
{
"Target": "wpf",
"Stack": "uia3-com",
"View": "RawView",
"Elements": 34,
"ElementsWithAutomationId": 25,
"PctAllElements": 73.5,
"InteractiveElements": 15,
"InteractiveWithAutomationId": 14,
"PctInteractiveElements": 93.3
},
{
"Target": "notepad",
"Stack": "uia3-com",
"View": "RawView",
"Elements": 26,
"ElementsWithAutomationId": 14,
"PctAllElements": 53.8,
"InteractiveElements": 13,
"InteractiveWithAutomationId": 7,
"PctInteractiveElements": 53.8
}
],
"ComCrossCheckNote": "consumed from captures/08-uia3-com/census.json. The shim serializes at most 60 per-element records per target, so a row is only emitted when the element list covers the whole RawView walk; Explorer and Obsidian are therefore managed-only rows.",
"ObsidianVersion": "1.12.7",
"ObsidianPlacementNote": "the Electron row is measured first, with no other probe window on the desktop, and after an 8 s settle. U3 measured that an Electron tree read behind another window can stay at its first-contact size indefinitely."
}

View file

@ -1,351 +0,0 @@
{
"Probe": "04-automationid-census",
"Question": "when list content changes inside a live process, which per-node identity properties survive",
"Why": "2.5 chooses the Windows RefEntry evidence set. The repo contract is pid, role, path, stable text identity and bounds hash; this arm is the one that shows what a content change does to path, text identity and bounds while pid and role are held constant.",
"ReRunStability": "measured over three consecutive runs on this box: every field here reproduces exactly except the Explorer RuntimeId survival count, which moved between 59/82 and 60/82 - one DirectUI Edit node whose RuntimeId is regenerated or not depending on how the shell refresh lands. That is real platform nondeterminism in the property, not probe noise, and under KTD9 a non-empty normalized diff on this one number is the signal a later re-runner should see rather than something to smooth away. All other captures in this probe were byte-identical across runs.",
"WinFormsNotHere": "the WinForms fixture has no in-process arm because no managed-visible affordance exists to drive it: in --host-providers mode the managed client sees the whole form as Panes with numeric control ids and btnMutateList advertises no InvokePattern, and in default mode the custom provider suppresses patterns entirely. Its list change is measured in identity-restart.json as the restart+mutation row against the pure restart row as control. Driving it any other way would need SendInput or PostMessage, which belongs to U6.",
"RuntimeIdHandling": "RuntimeId is compared in memory and only survived/changed counts are written. The KTD9 normalizer rewrites any literal RuntimeId to \u003cruntimeid\u003e, so a capture holding raw ids would normalize away the exact evidence this arm produces.",
"NameHandling": "Name is compared in memory and only equality counts are written. No Name value from any target reaches a capture, so the R11 content rule is satisfied by construction rather than by redaction.",
"Rows": [
{
"Target": "wpf",
"Arm": "mutation",
"Change": "InvokePattern on btnMutateList: same list change as the WinForms arm. The WPF fixture also derives each item AutomationId from the item text (lstItem-\u003cname\u003e), which is the interesting contrast.",
"Stack": "managed-System.Windows.Automation ControlView",
"BeforeNodes": 26,
"AfterNodes": 28,
"PathMatchedPairs": 26,
"PathsOnlyInBefore": 0,
"PathsOnlyInAfter": 2,
"PerPropertySurvival": [
{
"Property": "ControlType",
"Matched": 26,
"Survived": 26,
"PctSurvived": 100
},
{
"Property": "AutomationId",
"Matched": 26,
"Survived": 22,
"PctSurvived": 84.6
},
{
"Property": "ClassName",
"Matched": 26,
"Survived": 26,
"PctSurvived": 100
},
{
"Property": "Name",
"Matched": 26,
"Survived": 17,
"PctSurvived": 65.4
},
{
"Property": "RuntimeId",
"Matched": 26,
"Survived": 16,
"PctSurvived": 61.5
},
{
"Property": "Bounds",
"Matched": 26,
"Survived": 22,
"PctSurvived": 84.6
}
],
"BoundsBucketed8pxSurvival": {
"Property": "BoundsBucketed",
"Matched": 26,
"Survived": 23,
"PctSurvived": 88.5
},
"AutomationIdKeyedMatch": {
"UniqueKeysBefore": 14,
"KeysReFound": 13,
"KeysLost": 1,
"PathAlsoSurvived": 10,
"RuntimeIdAlsoSurvived": 9,
"KeysReFoundOnADifferentElement": 1,
"KeysReFoundOnADifferentElementNote": "the number of AutomationId keys that still resolve after the change but now land on an element whose Name differs. This is the silent-wrong-target count: a ref keyed on AutomationId alone would resolve successfully and act on the wrong element. Names are compared in memory only.",
"Note": "the key is ControlType|AutomationId; keys that are not unique within a dump are excluded from both sides rather than matched arbitrarily"
},
"ByControlType": [
{
"ControlType": "Button",
"PathMatchedPairs": 2,
"AutomationIdSurvived": 2,
"NameSurvived": 2,
"RuntimeIdSurvived": 2,
"BoundsSurvived": 2
},
{
"ControlType": "CheckBox",
"PathMatchedPairs": 1,
"AutomationIdSurvived": 1,
"NameSurvived": 1,
"RuntimeIdSurvived": 1,
"BoundsSurvived": 1
},
{
"ControlType": "ComboBox",
"PathMatchedPairs": 1,
"AutomationIdSurvived": 1,
"NameSurvived": 1,
"RuntimeIdSurvived": 1,
"BoundsSurvived": 1
},
{
"ControlType": "Edit",
"PathMatchedPairs": 2,
"AutomationIdSurvived": 2,
"NameSurvived": 2,
"RuntimeIdSurvived": 2,
"BoundsSurvived": 2
},
{
"ControlType": "List",
"PathMatchedPairs": 1,
"AutomationIdSurvived": 1,
"NameSurvived": 1,
"RuntimeIdSurvived": 1,
"BoundsSurvived": 1
},
{
"ControlType": "ListItem",
"PathMatchedPairs": 5,
"AutomationIdSurvived": 1,
"NameSurvived": 1,
"RuntimeIdSurvived": 0,
"BoundsSurvived": 5
},
{
"ControlType": "ScrollBar",
"PathMatchedPairs": 4,
"AutomationIdSurvived": 4,
"NameSurvived": 4,
"RuntimeIdSurvived": 4,
"BoundsSurvived": 4
},
{
"ControlType": "Text",
"PathMatchedPairs": 9,
"AutomationIdSurvived": 9,
"NameSurvived": 4,
"RuntimeIdSurvived": 4,
"BoundsSurvived": 5
},
{
"ControlType": "Window",
"PathMatchedPairs": 1,
"AutomationIdSurvived": 1,
"NameSurvived": 1,
"RuntimeIdSurvived": 1,
"BoundsSurvived": 1
}
],
"MutationVerifiedByObservation": true,
"StatusTextBefore": "status:ready",
"StatusTextAfter": "list:mutated"
},
{
"Target": "explorer-folder-window",
"Arm": "mutation",
"Change": "the probe-owned folder loses item-bravo.txt and gains item-foxtrot.txt and item-golf.txt; Explorer refreshes itself from the file-system change notification, with no window, process or input change",
"Stack": "managed-System.Windows.Automation ControlView",
"BeforeNodes": 82,
"AfterNodes": 88,
"PathMatchedPairs": 82,
"PathsOnlyInBefore": 0,
"PathsOnlyInAfter": 6,
"PerPropertySurvival": [
{
"Property": "ControlType",
"Matched": 82,
"Survived": 82,
"PctSurvived": 100
},
{
"Property": "AutomationId",
"Matched": 82,
"Survived": 82,
"PctSurvived": 100
},
{
"Property": "ClassName",
"Matched": 82,
"Survived": 82,
"PctSurvived": 100
},
{
"Property": "Name",
"Matched": 82,
"Survived": 77,
"PctSurvived": 93.9
},
{
"Property": "RuntimeId",
"Matched": 82,
"Survived": 60,
"PctSurvived": 73.2
},
{
"Property": "Bounds",
"Matched": 82,
"Survived": 82,
"PctSurvived": 100
}
],
"BoundsBucketed8pxSurvival": {
"Property": "BoundsBucketed",
"Matched": 82,
"Survived": 82,
"PctSurvived": 100
},
"AutomationIdKeyedMatch": {
"UniqueKeysBefore": 29,
"KeysReFound": 29,
"KeysLost": 0,
"PathAlsoSurvived": 29,
"RuntimeIdAlsoSurvived": 27,
"KeysReFoundOnADifferentElement": 5,
"KeysReFoundOnADifferentElementNote": "the number of AutomationId keys that still resolve after the change but now land on an element whose Name differs. This is the silent-wrong-target count: a ref keyed on AutomationId alone would resolve successfully and act on the wrong element. Names are compared in memory only.",
"Note": "the key is ControlType|AutomationId; keys that are not unique within a dump are excluded from both sides rather than matched arbitrarily"
},
"ByControlType": [
{
"ControlType": "Button",
"PathMatchedPairs": 8,
"AutomationIdSurvived": 8,
"NameSurvived": 8,
"RuntimeIdSurvived": 8,
"BoundsSurvived": 8
},
{
"ControlType": "Edit",
"PathMatchedPairs": 21,
"AutomationIdSurvived": 21,
"NameSurvived": 21,
"RuntimeIdSurvived": 1,
"BoundsSurvived": 21
},
{
"ControlType": "Group",
"PathMatchedPairs": 2,
"AutomationIdSurvived": 2,
"NameSurvived": 2,
"RuntimeIdSurvived": 1,
"BoundsSurvived": 2
},
{
"ControlType": "Header",
"PathMatchedPairs": 1,
"AutomationIdSurvived": 1,
"NameSurvived": 1,
"RuntimeIdSurvived": 1,
"BoundsSurvived": 1
},
{
"ControlType": "Image",
"PathMatchedPairs": 5,
"AutomationIdSurvived": 5,
"NameSurvived": 5,
"RuntimeIdSurvived": 5,
"BoundsSurvived": 5
},
{
"ControlType": "List",
"PathMatchedPairs": 1,
"AutomationIdSurvived": 1,
"NameSurvived": 1,
"RuntimeIdSurvived": 1,
"BoundsSurvived": 1
},
{
"ControlType": "ListItem",
"PathMatchedPairs": 5,
"AutomationIdSurvived": 5,
"NameSurvived": 1,
"RuntimeIdSurvived": 5,
"BoundsSurvived": 5
},
{
"ControlType": "MenuBar",
"PathMatchedPairs": 1,
"AutomationIdSurvived": 1,
"NameSurvived": 1,
"RuntimeIdSurvived": 1,
"BoundsSurvived": 1
},
{
"ControlType": "MenuItem",
"PathMatchedPairs": 1,
"AutomationIdSurvived": 1,
"NameSurvived": 1,
"RuntimeIdSurvived": 1,
"BoundsSurvived": 1
},
{
"ControlType": "Pane",
"PathMatchedPairs": 27,
"AutomationIdSurvived": 27,
"NameSurvived": 27,
"RuntimeIdSurvived": 27,
"BoundsSurvived": 27
},
{
"ControlType": "RadioButton",
"PathMatchedPairs": 2,
"AutomationIdSurvived": 2,
"NameSurvived": 2,
"RuntimeIdSurvived": 2,
"BoundsSurvived": 2
},
{
"ControlType": "SplitButton",
"PathMatchedPairs": 4,
"AutomationIdSurvived": 4,
"NameSurvived": 4,
"RuntimeIdSurvived": 4,
"BoundsSurvived": 4
},
{
"ControlType": "StatusBar",
"PathMatchedPairs": 1,
"AutomationIdSurvived": 1,
"NameSurvived": 1,
"RuntimeIdSurvived": 1,
"BoundsSurvived": 1
},
{
"ControlType": "Text",
"PathMatchedPairs": 1,
"AutomationIdSurvived": 1,
"NameSurvived": 0,
"RuntimeIdSurvived": 0,
"BoundsSurvived": 1
},
{
"ControlType": "TitleBar",
"PathMatchedPairs": 1,
"AutomationIdSurvived": 1,
"NameSurvived": 1,
"RuntimeIdSurvived": 1,
"BoundsSurvived": 1
},
{
"ControlType": "Window",
"PathMatchedPairs": 1,
"AutomationIdSurvived": 1,
"NameSurvived": 1,
"RuntimeIdSurvived": 1,
"BoundsSurvived": 1
}
],
"MutationVerifiedByObservation": true,
"timingRefreshLatencySeconds": <duration>,
"RefreshLatencyNote": "measured, not assumed: the folder window took this long to reflect the file-system change. A 4 s wait was tried first and reported a completely unchanged tree, which would have been filed as \"Explorer identity is perfectly stable across content mutation\" - the exact opposite of what the window does once it refreshes."
}
]
}

View file

@ -1,445 +0,0 @@
{
"Probe": "04-automationid-census",
"Question": "when a process is restarted, which per-node identity properties survive",
"PlacementControl": "every target is relaunched at the identical window origin (scratch fixtures via --pos / -Left -Top, Notepad via SetWindowPos with the same rect). Without that control every bounds comparison would report 0% survival for the trivial reason that Windows cascades a new window, and the interesting question - whether layout inside the window is reproducible - would be unanswerable.",
"RuntimeIdHandling": "as in identity-mutation.json: compared in memory, only survived/changed counts written.",
"Rows": [
{
"Target": "winforms-host-providers",
"Arm": "restart",
"Change": "process terminated and relaunched with identical arguments and the identical --pos origin; the list is back at its baseline content",
"Stack": "managed-System.Windows.Automation ControlView",
"BeforeNodes": 26,
"AfterNodes": 26,
"PathMatchedPairs": 26,
"PathsOnlyInBefore": 0,
"PathsOnlyInAfter": 0,
"PerPropertySurvival": [
{
"Property": "ControlType",
"Matched": 26,
"Survived": 26,
"PctSurvived": 100
},
{
"Property": "AutomationId",
"Matched": 26,
"Survived": 26,
"PctSurvived": 100
},
{
"Property": "ClassName",
"Matched": 26,
"Survived": 26,
"PctSurvived": 100
},
{
"Property": "Name",
"Matched": 26,
"Survived": 25,
"PctSurvived": 96.2
},
{
"Property": "RuntimeId",
"Matched": 26,
"Survived": 0,
"PctSurvived": 0
},
{
"Property": "Bounds",
"Matched": 26,
"Survived": 26,
"PctSurvived": 100
}
],
"BoundsBucketed8pxSurvival": {
"Property": "BoundsBucketed",
"Matched": 26,
"Survived": 26,
"PctSurvived": 100
},
"AutomationIdKeyedMatch": {
"UniqueKeysBefore": 23,
"KeysReFound": 23,
"KeysLost": 0,
"PathAlsoSurvived": 23,
"RuntimeIdAlsoSurvived": 0,
"KeysReFoundOnADifferentElement": 1,
"KeysReFoundOnADifferentElementNote": "the number of AutomationId keys that still resolve after the change but now land on an element whose Name differs. This is the silent-wrong-target count: a ref keyed on AutomationId alone would resolve successfully and act on the wrong element. Names are compared in memory only.",
"Note": "the key is ControlType|AutomationId; keys that are not unique within a dump are excluded from both sides rather than matched arbitrarily"
},
"ByControlType": [
{
"ControlType": "Button",
"PathMatchedPairs": 1,
"AutomationIdSurvived": 1,
"NameSurvived": 1,
"RuntimeIdSurvived": 0,
"BoundsSurvived": 1
},
{
"ControlType": "ComboBox",
"PathMatchedPairs": 1,
"AutomationIdSurvived": 1,
"NameSurvived": 1,
"RuntimeIdSurvived": 0,
"BoundsSurvived": 1
},
{
"ControlType": "Pane",
"PathMatchedPairs": 17,
"AutomationIdSurvived": 17,
"NameSurvived": 17,
"RuntimeIdSurvived": 0,
"BoundsSurvived": 17
},
{
"ControlType": "Text",
"PathMatchedPairs": 6,
"AutomationIdSurvived": 6,
"NameSurvived": 5,
"RuntimeIdSurvived": 0,
"BoundsSurvived": 6
},
{
"ControlType": "Window",
"PathMatchedPairs": 1,
"AutomationIdSurvived": 1,
"NameSurvived": 1,
"RuntimeIdSurvived": 0,
"BoundsSurvived": 1
}
]
},
{
"Target": "wpf",
"Arm": "restart",
"Change": "process terminated and relaunched with identical -Left/-Top arguments; the peer-activation settle is applied again because a WPF window read too early binds the HWND fallback provider permanently (03-pattern-census)",
"Stack": "managed-System.Windows.Automation ControlView",
"BeforeNodes": 26,
"AfterNodes": 26,
"PathMatchedPairs": 26,
"PathsOnlyInBefore": 0,
"PathsOnlyInAfter": 0,
"PerPropertySurvival": [
{
"Property": "ControlType",
"Matched": 26,
"Survived": 26,
"PctSurvived": 100
},
{
"Property": "AutomationId",
"Matched": 26,
"Survived": 26,
"PctSurvived": 100
},
{
"Property": "ClassName",
"Matched": 26,
"Survived": 26,
"PctSurvived": 100
},
{
"Property": "Name",
"Matched": 26,
"Survived": 26,
"PctSurvived": 100
},
{
"Property": "RuntimeId",
"Matched": 26,
"Survived": 0,
"PctSurvived": 0
},
{
"Property": "Bounds",
"Matched": 26,
"Survived": 26,
"PctSurvived": 100
}
],
"BoundsBucketed8pxSurvival": {
"Property": "BoundsBucketed",
"Matched": 26,
"Survived": 26,
"PctSurvived": 100
},
"AutomationIdKeyedMatch": {
"UniqueKeysBefore": 14,
"KeysReFound": 14,
"KeysLost": 0,
"PathAlsoSurvived": 14,
"RuntimeIdAlsoSurvived": 0,
"KeysReFoundOnADifferentElement": 0,
"KeysReFoundOnADifferentElementNote": "the number of AutomationId keys that still resolve after the change but now land on an element whose Name differs. This is the silent-wrong-target count: a ref keyed on AutomationId alone would resolve successfully and act on the wrong element. Names are compared in memory only.",
"Note": "the key is ControlType|AutomationId; keys that are not unique within a dump are excluded from both sides rather than matched arbitrarily"
},
"ByControlType": [
{
"ControlType": "Button",
"PathMatchedPairs": 2,
"AutomationIdSurvived": 2,
"NameSurvived": 2,
"RuntimeIdSurvived": 0,
"BoundsSurvived": 2
},
{
"ControlType": "CheckBox",
"PathMatchedPairs": 1,
"AutomationIdSurvived": 1,
"NameSurvived": 1,
"RuntimeIdSurvived": 0,
"BoundsSurvived": 1
},
{
"ControlType": "ComboBox",
"PathMatchedPairs": 1,
"AutomationIdSurvived": 1,
"NameSurvived": 1,
"RuntimeIdSurvived": 0,
"BoundsSurvived": 1
},
{
"ControlType": "Edit",
"PathMatchedPairs": 2,
"AutomationIdSurvived": 2,
"NameSurvived": 2,
"RuntimeIdSurvived": 0,
"BoundsSurvived": 2
},
{
"ControlType": "List",
"PathMatchedPairs": 1,
"AutomationIdSurvived": 1,
"NameSurvived": 1,
"RuntimeIdSurvived": 0,
"BoundsSurvived": 1
},
{
"ControlType": "ListItem",
"PathMatchedPairs": 5,
"AutomationIdSurvived": 5,
"NameSurvived": 5,
"RuntimeIdSurvived": 0,
"BoundsSurvived": 5
},
{
"ControlType": "ScrollBar",
"PathMatchedPairs": 4,
"AutomationIdSurvived": 4,
"NameSurvived": 4,
"RuntimeIdSurvived": 0,
"BoundsSurvived": 4
},
{
"ControlType": "Text",
"PathMatchedPairs": 9,
"AutomationIdSurvived": 9,
"NameSurvived": 9,
"RuntimeIdSurvived": 0,
"BoundsSurvived": 9
},
{
"ControlType": "Window",
"PathMatchedPairs": 1,
"AutomationIdSurvived": 1,
"NameSurvived": 1,
"RuntimeIdSurvived": 0,
"BoundsSurvived": 1
}
]
},
{
"Target": "notepad",
"Arm": "restart",
"Change": "the real Win32 target: process terminated and relaunched, then placed at the identical rect with SetWindowPos so window placement cannot masquerade as layout drift",
"Stack": "managed-System.Windows.Automation ControlView",
"BeforeNodes": 3,
"AfterNodes": 3,
"PathMatchedPairs": 3,
"PathsOnlyInBefore": 0,
"PathsOnlyInAfter": 0,
"PerPropertySurvival": [
{
"Property": "ControlType",
"Matched": 3,
"Survived": 3,
"PctSurvived": 100
},
{
"Property": "AutomationId",
"Matched": 3,
"Survived": 3,
"PctSurvived": 100
},
{
"Property": "ClassName",
"Matched": 3,
"Survived": 3,
"PctSurvived": 100
},
{
"Property": "Name",
"Matched": 3,
"Survived": 3,
"PctSurvived": 100
},
{
"Property": "RuntimeId",
"Matched": 3,
"Survived": 0,
"PctSurvived": 0
},
{
"Property": "Bounds",
"Matched": 3,
"Survived": 3,
"PctSurvived": 100
}
],
"BoundsBucketed8pxSurvival": {
"Property": "BoundsBucketed",
"Matched": 3,
"Survived": 3,
"PctSurvived": 100
},
"AutomationIdKeyedMatch": {
"UniqueKeysBefore": 2,
"KeysReFound": 2,
"KeysLost": 0,
"PathAlsoSurvived": 2,
"RuntimeIdAlsoSurvived": 0,
"KeysReFoundOnADifferentElement": 0,
"KeysReFoundOnADifferentElementNote": "the number of AutomationId keys that still resolve after the change but now land on an element whose Name differs. This is the silent-wrong-target count: a ref keyed on AutomationId alone would resolve successfully and act on the wrong element. Names are compared in memory only.",
"Note": "the key is ControlType|AutomationId; keys that are not unique within a dump are excluded from both sides rather than matched arbitrarily"
},
"ByControlType": [
{
"ControlType": "Pane",
"PathMatchedPairs": 2,
"AutomationIdSurvived": 2,
"NameSurvived": 2,
"RuntimeIdSurvived": 0,
"BoundsSurvived": 2
},
{
"ControlType": "Window",
"PathMatchedPairs": 1,
"AutomationIdSurvived": 1,
"NameSurvived": 1,
"RuntimeIdSurvived": 0,
"BoundsSurvived": 1
}
]
},
{
"Target": "winforms-host-providers",
"Arm": "restart+mutation",
"Change": "relaunched with --mutate-list added: same origin, same arguments otherwise, but the list starts as Alpha/Charlie/Delta/Echo/Foxtrot/Golf. Its control is the pure restart row above; any survival difference between the two rows is attributable to the list change alone.",
"Stack": "managed-System.Windows.Automation ControlView",
"BeforeNodes": 26,
"AfterNodes": 26,
"PathMatchedPairs": 26,
"PathsOnlyInBefore": 0,
"PathsOnlyInAfter": 0,
"PerPropertySurvival": [
{
"Property": "ControlType",
"Matched": 26,
"Survived": 26,
"PctSurvived": 100
},
{
"Property": "AutomationId",
"Matched": 26,
"Survived": 26,
"PctSurvived": 100
},
{
"Property": "ClassName",
"Matched": 26,
"Survived": 26,
"PctSurvived": 100
},
{
"Property": "Name",
"Matched": 26,
"Survived": 25,
"PctSurvived": 96.2
},
{
"Property": "RuntimeId",
"Matched": 26,
"Survived": 0,
"PctSurvived": 0
},
{
"Property": "Bounds",
"Matched": 26,
"Survived": 26,
"PctSurvived": 100
}
],
"BoundsBucketed8pxSurvival": {
"Property": "BoundsBucketed",
"Matched": 26,
"Survived": 26,
"PctSurvived": 100
},
"AutomationIdKeyedMatch": {
"UniqueKeysBefore": 23,
"KeysReFound": 23,
"KeysLost": 0,
"PathAlsoSurvived": 23,
"RuntimeIdAlsoSurvived": 0,
"KeysReFoundOnADifferentElement": 1,
"KeysReFoundOnADifferentElementNote": "the number of AutomationId keys that still resolve after the change but now land on an element whose Name differs. This is the silent-wrong-target count: a ref keyed on AutomationId alone would resolve successfully and act on the wrong element. Names are compared in memory only.",
"Note": "the key is ControlType|AutomationId; keys that are not unique within a dump are excluded from both sides rather than matched arbitrarily"
},
"ByControlType": [
{
"ControlType": "Button",
"PathMatchedPairs": 1,
"AutomationIdSurvived": 1,
"NameSurvived": 1,
"RuntimeIdSurvived": 0,
"BoundsSurvived": 1
},
{
"ControlType": "ComboBox",
"PathMatchedPairs": 1,
"AutomationIdSurvived": 1,
"NameSurvived": 1,
"RuntimeIdSurvived": 0,
"BoundsSurvived": 1
},
{
"ControlType": "Pane",
"PathMatchedPairs": 17,
"AutomationIdSurvived": 17,
"NameSurvived": 17,
"RuntimeIdSurvived": 0,
"BoundsSurvived": 17
},
{
"ControlType": "Text",
"PathMatchedPairs": 6,
"AutomationIdSurvived": 6,
"NameSurvived": 5,
"RuntimeIdSurvived": 0,
"BoundsSurvived": 6
},
{
"ControlType": "Window",
"PathMatchedPairs": 1,
"AutomationIdSurvived": 1,
"NameSurvived": 1,
"RuntimeIdSurvived": 0,
"BoundsSurvived": 1
}
],
"StatusText": "status:ready"
}
]
}

View file

@ -1,23 +0,0 @@
{
"probe": "05-interactions",
"question": "does AutomationElement.SetFocus on a background window move the desktop foreground, or only keyboard focus inside that window",
"why": "2.7 wants headless interaction. If SetFocus steals foreground, no interaction that needs focus can be headless; if it does not, focus-dependent actions are headless-safe and the design can rely on it.",
"method": "a second probe-owned scratch window is brought forward with ShowWindow(SW_MINIMIZE) then ShowWindow(SW_RESTORE) - the sanctioned pattern, SetForegroundWindow is never called - then SetFocus is issued on an element of the OTHER probe-owned window and the foreground is re-read.",
"foregroundBefore": {
"windowTitle": "AgentDesktop Scratch WinForms [u5-default]",
"processId": <pid>
},
"foregroundAfter": {
"windowTitle": "AgentDesktop Scratch WPF [u5]",
"processId": <pid>
},
"foregroundChanged": true,
"foregroundWasTheOtherScratchWindow": true,
"setFocusTarget": "wpf txtValue",
"setFocusError": "",
"hadKeyboardFocusBefore": false,
"hasKeyboardFocusAfter": true,
"focusedElementAutomationIdAfter": "txtValue",
"titleEvidenceNote": "the two foreground observations are nested objects with a key named exactly processId, so the KTD9 normalizer canonicalizes the run-varying pid to \u003cpid\u003e. A flat foregroundPidBefore/foregroundPidAfter pair was tried first and does NOT match the normalizer\u0027s word-boundary rule: the raw pids survived into the twin and the capture failed to reproduce across runs. The probe-owned window titles are what carry the fact into the normalized twin.",
"verdict": "SetFocus moved the desktop foreground"
}

View file

@ -1,394 +0,0 @@
{
"probe": "05-interactions",
"question": "does every 2.0(3) interaction actually take effect through a UIA pattern, verified by independent re-read rather than by the call return",
"stack": "managed-System.Windows.Automation",
"scope": "app/provider",
"verificationDiscipline": "no row trusts the pattern call return. Element state is re-read after re-finding the element by AutomationId, and where the fixture exposes an independent sink control (lblStatus, lblScrollPos) that separate element is read as well.",
"fixtureArtifactNote": "winforms-default rows report pattern-unavailable because the fixture installs a server-side IRawElementProviderSimple that suppresses the client-side proxies and WinForms\u0027 own providers. That is a property of this fixture, not of WinForms or of Windows. winforms-host-providers rows show what WinForms itself exposes to a managed client.",
"managedVsComNote": "several winforms-host-providers rows report pattern-unavailable for patterns the UIA3 COM census in captures/08-uia3-com/census.json records on the same providers (Invoke and Toggle on chkToggle, Value on txtValue, SelectionItem on the ListItems, Scroll on pnlScroll). Under KTD1 the COM row is the product-relevant one because the Rust adapter wraps a UIA3 COM client; these rows are filed as managed-client divergence, not as absent affordances. ExpandCollapse on cboChoice is the one WinForms pattern both stacks agree on, which is why it is the only non-WPF ok row here.",
"wheelCounterpartNote": "the SendInput wheel arm is deliberately not in this file. It runs in 06-input-synthesis against the WinForms pnlScroll and its lblScrollPos sink, because that is the control this probe could NOT drive by pattern - the pair of the two captures is the pattern-vs-physical comparison 2.6 needs.",
"rows": [
{
"interaction": "invoke",
"target": "wpf",
"stack": "managed-System.Windows.Automation",
"automationId": "btnAction",
"pattern": "Invoke",
"controlType": "Button",
"patternAcquired": true,
"supportedPatterns": [
"Invoke",
"SynchronizedInput"
],
"sinkElement": "lblStatus (a different element than the one invoked)",
"sinkBefore": "status:ready",
"sinkAfter": "action:1",
"changed": true,
"verdict": "ok"
},
{
"interaction": "invoke",
"target": "winforms-host-providers",
"stack": "managed-System.Windows.Automation",
"automationId": "btnAction",
"pattern": "Invoke",
"controlType": "Pane",
"patternAcquired": false,
"supportedPatterns": [
],
"verdict": "pattern-unavailable",
"detail": "no InvokePattern on this element in this fixture mode; recorded as a verdict row"
},
{
"interaction": "invoke",
"target": "winforms-default",
"stack": "managed-System.Windows.Automation",
"automationId": "btnAction",
"pattern": "Invoke",
"controlType": "Pane",
"patternAcquired": false,
"supportedPatterns": [
],
"verdict": "pattern-unavailable",
"detail": "no InvokePattern on this element in this fixture mode; recorded as a verdict row"
},
{
"interaction": "toggle",
"target": "wpf",
"stack": "managed-System.Windows.Automation",
"automationId": "chkToggle",
"pattern": "Toggle",
"controlType": "CheckBox",
"patternAcquired": true,
"preState": "Off",
"postState": "On",
"reReadMethod": "the element is re-found by AutomationId and its TogglePattern re-acquired, so the post-state is not read off the same pattern object the call returned",
"sinkBefore": "action:1",
"sinkAfter": "action:1",
"sinkChanged": false,
"sinkNote": "the WPF fixture updates lblStatus from a Click handler. TogglePattern.Toggle flips ToggleState without raising Click, so the sink is expected to stay silent here while the element state changes - which is exactly why the element is re-read instead of the sink being trusted as the only observable.",
"changed": true,
"verdict": "ok"
},
{
"interaction": "toggle",
"target": "winforms-host-providers",
"stack": "managed-System.Windows.Automation",
"automationId": "chkToggle",
"pattern": "Toggle",
"controlType": "Pane",
"patternAcquired": false,
"supportedPatterns": [
],
"verdict": "pattern-unavailable",
"detail": "no TogglePattern on this element in this fixture mode; recorded as a verdict row"
},
{
"interaction": "toggle",
"target": "winforms-default",
"stack": "managed-System.Windows.Automation",
"automationId": "chkToggle",
"pattern": "Toggle",
"controlType": "Pane",
"patternAcquired": false,
"supportedPatterns": [
],
"verdict": "pattern-unavailable",
"detail": "no TogglePattern on this element in this fixture mode; recorded as a verdict row"
},
{
"interaction": "set-value/ascii",
"target": "wpf",
"stack": "managed-System.Windows.Automation",
"automationId": "txtValue",
"pattern": "Value",
"controlType": "Edit",
"patternAcquired": true,
"payloadKind": "ascii",
"payloadOrigin": "built with [char]::ConvertFromUtf32 so payload integrity does not depend on this file\u0027s encoding (R12)",
"preValueShape": {
"utf16Units": 10,
"codepoints": 10,
"surrogatePairs": 0,
"replacementChars": 0,
"sha256Utf16": "730365c1825e69a9171fd18ccdefab7962df67a8fcb7b64e4e3c8dd8bdf8ec6b"
},
"expectedShape": {
"utf16Units": 20,
"codepoints": 20,
"surrogatePairs": 0,
"replacementChars": 0,
"sha256Utf16": "030def08bed320dbbc368c2ea990e349c43af499a9e25a5c6727d280e9e816e0"
},
"observedShape": {
"utf16Units": 20,
"codepoints": 20,
"surrogatePairs": 0,
"replacementChars": 0,
"sha256Utf16": "030def08bed320dbbc368c2ea990e349c43af499a9e25a5c6727d280e9e816e0"
},
"exactRoundTrip": true,
"reReadMethod": "element re-found by AutomationId and ValuePattern re-acquired before reading",
"payloadHandling": "only length, codepoint counts and a SHA-256 of the UTF-16 bytes are recorded; no payload text reaches the capture",
"verdict": "ok"
},
{
"interaction": "set-value/cjk",
"target": "wpf",
"stack": "managed-System.Windows.Automation",
"automationId": "txtValue",
"pattern": "Value",
"controlType": "Edit",
"patternAcquired": true,
"payloadKind": "cjk",
"payloadOrigin": "built with [char]::ConvertFromUtf32 so payload integrity does not depend on this file\u0027s encoding (R12)",
"preValueShape": {
"utf16Units": 20,
"codepoints": 20,
"surrogatePairs": 0,
"replacementChars": 0,
"sha256Utf16": "030def08bed320dbbc368c2ea990e349c43af499a9e25a5c6727d280e9e816e0"
},
"expectedShape": {
"utf16Units": 3,
"codepoints": 3,
"surrogatePairs": 0,
"replacementChars": 0,
"sha256Utf16": "6181046d83c65ba9b401f6f67eec1316201493cb8c6c7faad5fb68009b3c7c33"
},
"observedShape": {
"utf16Units": 3,
"codepoints": 3,
"surrogatePairs": 0,
"replacementChars": 0,
"sha256Utf16": "6181046d83c65ba9b401f6f67eec1316201493cb8c6c7faad5fb68009b3c7c33"
},
"exactRoundTrip": true,
"reReadMethod": "element re-found by AutomationId and ValuePattern re-acquired before reading",
"payloadHandling": "only length, codepoint counts and a SHA-256 of the UTF-16 bytes are recorded; no payload text reaches the capture",
"verdict": "ok"
},
{
"interaction": "set-value/astral-plane",
"target": "wpf",
"stack": "managed-System.Windows.Automation",
"automationId": "txtValue",
"pattern": "Value",
"controlType": "Edit",
"patternAcquired": true,
"payloadKind": "astral-plane",
"payloadOrigin": "built with [char]::ConvertFromUtf32 so payload integrity does not depend on this file\u0027s encoding (R12)",
"preValueShape": {
"utf16Units": 3,
"codepoints": 3,
"surrogatePairs": 0,
"replacementChars": 0,
"sha256Utf16": "6181046d83c65ba9b401f6f67eec1316201493cb8c6c7faad5fb68009b3c7c33"
},
"expectedShape": {
"utf16Units": 4,
"codepoints": 3,
"surrogatePairs": 1,
"replacementChars": 0,
"sha256Utf16": "67c86e7a35b2aa45d8169108221af0cce098b6f81ea3da0c3df836caca0c743b"
},
"observedShape": {
"utf16Units": 4,
"codepoints": 3,
"surrogatePairs": 1,
"replacementChars": 0,
"sha256Utf16": "67c86e7a35b2aa45d8169108221af0cce098b6f81ea3da0c3df836caca0c743b"
},
"exactRoundTrip": true,
"reReadMethod": "element re-found by AutomationId and ValuePattern re-acquired before reading",
"payloadHandling": "only length, codepoint counts and a SHA-256 of the UTF-16 bytes are recorded; no payload text reaches the capture",
"verdict": "ok"
},
{
"interaction": "set-value/mixed",
"target": "wpf",
"stack": "managed-System.Windows.Automation",
"automationId": "txtValue",
"pattern": "Value",
"controlType": "Edit",
"patternAcquired": true,
"payloadKind": "mixed",
"payloadOrigin": "built with [char]::ConvertFromUtf32 so payload integrity does not depend on this file\u0027s encoding (R12)",
"preValueShape": {
"utf16Units": 4,
"codepoints": 3,
"surrogatePairs": 1,
"replacementChars": 0,
"sha256Utf16": "67c86e7a35b2aa45d8169108221af0cce098b6f81ea3da0c3df836caca0c743b"
},
"expectedShape": {
"utf16Units": 29,
"codepoints": 28,
"surrogatePairs": 1,
"replacementChars": 0,
"sha256Utf16": "5783f6f2168ecd35d4775d850bf880d7dca2b3d8a3a811f6893d4c82a089f441"
},
"observedShape": {
"utf16Units": 29,
"codepoints": 28,
"surrogatePairs": 1,
"replacementChars": 0,
"sha256Utf16": "5783f6f2168ecd35d4775d850bf880d7dca2b3d8a3a811f6893d4c82a089f441"
},
"exactRoundTrip": true,
"reReadMethod": "element re-found by AutomationId and ValuePattern re-acquired before reading",
"payloadHandling": "only length, codepoint counts and a SHA-256 of the UTF-16 bytes are recorded; no payload text reaches the capture",
"verdict": "ok"
},
{
"interaction": "set-value",
"target": "winforms-host-providers",
"stack": "managed-System.Windows.Automation",
"automationId": "txtValue",
"pattern": "Value",
"controlType": "Pane",
"patternAcquired": false,
"supportedPatterns": [
],
"verdict": "pattern-unavailable",
"detail": "no ValuePattern on this element in this fixture mode; recorded as a verdict row"
},
{
"interaction": "expand-collapse",
"target": "wpf",
"stack": "managed-System.Windows.Automation",
"automationId": "cboChoice",
"pattern": "ExpandCollapse",
"controlType": "ComboBox",
"patternAcquired": true,
"preState": "Collapsed",
"stateAfterExpand": "Expanded",
"stateAfterCollapse": "Collapsed",
"reReadMethod": "state re-read after each half of the round trip from a freshly found element",
"roundTripped": true,
"verdict": "ok"
},
{
"interaction": "expand-collapse",
"target": "winforms-host-providers",
"stack": "managed-System.Windows.Automation",
"automationId": "cboChoice",
"pattern": "ExpandCollapse",
"controlType": "ComboBox",
"patternAcquired": true,
"preState": "Collapsed",
"stateAfterExpand": "Expanded",
"stateAfterCollapse": "Collapsed",
"reReadMethod": "state re-read after each half of the round trip from a freshly found element",
"roundTripped": true,
"verdict": "ok"
},
{
"interaction": "expand-collapse",
"target": "winforms-default",
"stack": "managed-System.Windows.Automation",
"automationId": "cboChoice",
"pattern": "ExpandCollapse",
"controlType": "Pane",
"patternAcquired": false,
"supportedPatterns": [
],
"verdict": "pattern-unavailable",
"detail": "no ExpandCollapsePattern on this element in this fixture mode; recorded as a verdict row"
},
{
"interaction": "select",
"target": "wpf",
"stack": "managed-System.Windows.Automation",
"automationId": "lstItems/item[2]",
"pattern": "SelectionItem",
"controlType": "ListItem",
"patternAcquired": true,
"selectionCountBefore": 0,
"selectionCountAfter": 1,
"isSelectedAfter": true,
"sinkBefore": "action:1",
"sinkAfter": "list-sel:Item-Charlie",
"reReadMethod": "container SelectionPattern re-acquired from a freshly found list, plus the item IsSelected re-read, plus the independent lblStatus sink",
"verdict": "ok"
},
{
"interaction": "select",
"target": "winforms-host-providers",
"stack": "managed-System.Windows.Automation",
"automationId": "lstItems/item[2]",
"pattern": "SelectionItem",
"controlType": "\u003celement-not-found\u003e",
"patternAcquired": false,
"supportedPatterns": [
],
"verdict": "pattern-unavailable",
"detail": "no ListItem with SelectionItemPattern reachable under lstItems in this fixture mode; recorded as a verdict row"
},
{
"interaction": "select",
"target": "winforms-default",
"stack": "managed-System.Windows.Automation",
"automationId": "lstItems/item[2]",
"pattern": "SelectionItem",
"controlType": "\u003celement-not-found\u003e",
"patternAcquired": false,
"supportedPatterns": [
],
"verdict": "pattern-unavailable",
"detail": "no ListItem with SelectionItemPattern reachable under lstItems in this fixture mode; recorded as a verdict row"
},
{
"interaction": "scroll-via-pattern",
"target": "winforms-host-providers",
"stack": "managed-System.Windows.Automation",
"automationId": "pnlScroll",
"pattern": "Scroll",
"controlType": "Pane",
"patternAcquired": false,
"supportedPatterns": [
],
"verdict": "pattern-unavailable",
"detail": "the UIA3 COM census (captures/08-uia3-com/census.json) records Scroll on this exact provider in BOTH fixture modes; the managed client cannot acquire it. Divergence row, not a platform verdict."
},
{
"interaction": "scroll-via-pattern",
"target": "winforms-default",
"stack": "managed-System.Windows.Automation",
"automationId": "pnlScroll",
"pattern": "Scroll",
"controlType": "Pane",
"patternAcquired": false,
"supportedPatterns": [
],
"verdict": "pattern-unavailable",
"detail": "the UIA3 COM census (captures/08-uia3-com/census.json) records Scroll on this exact provider in BOTH fixture modes; the managed client cannot acquire it. Divergence row, not a platform verdict."
},
{
"interaction": "scroll-via-pattern",
"target": "wpf",
"stack": "managed-System.Windows.Automation",
"automationId": "lstItems",
"pattern": "Scroll",
"controlType": "List",
"patternAcquired": true,
"makeScrollableMethod": "the window is shrunk with SetWindowPos(SWP_NOACTIVATE) until the ListBox viewport is smaller than its five items; the client-height step that achieved it is recorded",
"shrinkStepUsed": 240,
"verticallyScrollable": true,
"verticalPercentBefore": 0,
"verticalPercentAfter": 80,
"reReadMethod": "percent re-read from a freshly acquired ScrollPattern on a freshly found element",
"verdict": "ok"
}
]
}

View file

@ -1,84 +0,0 @@
{
"probe": "05-interactions",
"question": "is TextPattern exposed on a classic Win32 Edit on Server 2019 at all, and does the managed stack agree with the COM stack about it",
"stack": "managed-System.Windows.Automation",
"scope": "app/provider",
"whyTwoLookups": "GetSupportedPatterns is not a reliable negative: it is answered by the client-side proxy that happens to be bound. Every row therefore also records TryGetCurrentPattern per pattern, which is the call the adapter would actually make. Both lookups are recorded because they disagree.",
"comCounterpart": "captures/08-uia3-com/census.json records the SAME notepad window through hand-declared UIA3 COM as one Document element carrying LegacyIAccessible, Scroll, Text, Text2 and Value. Any managed row below that reports Text absent is a client-stack divergence, not an absence of the provider.",
"p2o12Relevance": "2.0(3) text get/selection/caret/insert and P2-O12 both assume a Text-capable Edit. The WPF row shows what a full managed TextPattern surface supports; the notepad rows show what the real Win32 Edit gives the two client stacks.",
"rows": [
{
"target": "wpf-txtValue",
"stack": "managed-System.Windows.Automation",
"controlType": "Edit",
"className": "TextBox",
"supportedPatterns": [
"Scroll",
"SynchronizedInput",
"Text",
"Value"
],
"textPatternExposed": true,
"getText": {
"expectedShape": {
"utf16Units": 29,
"codepoints": 28,
"surrogatePairs": 1,
"replacementChars": 0,
"sha256Utf16": "5783f6f2168ecd35d4775d850bf880d7dca2b3d8a3a811f6893d4c82a089f441"
},
"observedShape": {
"utf16Units": 29,
"codepoints": 28,
"surrogatePairs": 1,
"replacementChars": 0,
"sha256Utf16": "5783f6f2168ecd35d4775d850bf880d7dca2b3d8a3a811f6893d4c82a089f441"
},
"exactMatch": true,
"note": "the value was set through ValuePattern and read back through TextPattern.DocumentRange.GetText - a cross-pattern read, not the same call returning its own argument"
},
"selection": {
"rangesBefore": 1,
"rangesAfter": 1,
"requestedUnits": 5,
"selectedShape": {
"utf16Units": 5,
"codepoints": 5,
"surrogatePairs": 0,
"replacementChars": 0,
"sha256Utf16": "9d17cf8d7d1b14ceec751b8f91702aaea1d386a4ed188d5e279cbe02394b18ca"
},
"matchesSubstring": true
},
"caret": {
"method": "a degenerate range (End collapsed onto Start) is Selected at character offset 4 and the selection is re-read",
"rangesAfter": 1,
"degenerate": true
},
"insert": {
"method": "TextPattern is read-only by contract; insertion is done through ValuePattern.SetValue and verified through the TextPattern read above",
"verified": true
}
},
{
"target": "notepad-edit",
"stack": "managed-System.Windows.Automation",
"lookup": "FindFirst(Descendants, ControlType=Document)",
"resolved": false
},
{
"target": "notepad-edit",
"stack": "managed-System.Windows.Automation",
"lookup": "AutomationElement.FromHandle(the Edit child HWND found with FindWindowEx)",
"resolved": true,
"controlType": "Pane",
"className": "Edit",
"supportedPatterns": [
],
"tryGetCurrentPattern_Text": false,
"tryGetCurrentPattern_Value": false,
"tryGetCurrentPattern_Scroll": false
}
]
}

View file

@ -1,197 +0,0 @@
{
"probe": "06-input-synthesis",
"question": "does SendInput deliver non-BMP text intact through the UTF-16 chunking the API forces, and does a modifier chord register",
"stack": "win32-SendInput",
"scope": "system",
"why": "2.8\u0027s type_text has to decide how to chunk a string into KEYEVENTF_UNICODE events. A surrogate pair cannot be sent as one event, so the chunk boundary is forced by the API; whether the target reassembles it is the measurement.",
"foregroundAcquisitionMethod": "ShowWindow(SW_MINIMIZE) then ShowWindow(SW_RESTORE) on the probe-owned scratch window. SetForegroundWindow is never called.",
"foregroundAcquired": true,
"injectionGate": "every SendInput call below is bracketed by Assert-Foreground before and after; the first mismatch stops all further injection and is recorded in interference",
"interference": null,
"typingRows": [
{
"payloadKind": "ascii",
"payloadOrigin": "built with [char]::ConvertFromUtf32 (R12), then sent one UTF-16 code unit per KEYEVENTF_UNICODE key-down/key-up pair - a surrogate pair is therefore two separate SendInput chunks",
"clearedBeforeTyping": true,
"utf16UnitsSent": 14,
"expectedShape": {
"utf16Units": 14,
"codepoints": 14,
"surrogatePairs": 0,
"replacementChars": 0,
"sha256Utf16": "8979f954f551343fafd76c88772a84e9b12a12b8f56aca0796fb98f0331bf603"
},
"observedShape": {
"utf16Units": 14,
"codepoints": 14,
"surrogatePairs": 0,
"replacementChars": 0,
"sha256Utf16": "8979f954f551343fafd76c88772a84e9b12a12b8f56aca0796fb98f0331bf603"
},
"exactRoundTrip": true,
"surrogatePairSurvived": true,
"reReadMethod": "WM_GETTEXT against the control HWND resolved with GetDlgItem - a Win32 read, independent of both the injection path and of UIA",
"verdict": "ok"
},
{
"payloadKind": "cjk",
"payloadOrigin": "built with [char]::ConvertFromUtf32 (R12), then sent one UTF-16 code unit per KEYEVENTF_UNICODE key-down/key-up pair - a surrogate pair is therefore two separate SendInput chunks",
"clearedBeforeTyping": true,
"utf16UnitsSent": 3,
"expectedShape": {
"utf16Units": 3,
"codepoints": 3,
"surrogatePairs": 0,
"replacementChars": 0,
"sha256Utf16": "6181046d83c65ba9b401f6f67eec1316201493cb8c6c7faad5fb68009b3c7c33"
},
"observedShape": {
"utf16Units": 3,
"codepoints": 3,
"surrogatePairs": 0,
"replacementChars": 0,
"sha256Utf16": "6181046d83c65ba9b401f6f67eec1316201493cb8c6c7faad5fb68009b3c7c33"
},
"exactRoundTrip": true,
"surrogatePairSurvived": true,
"reReadMethod": "WM_GETTEXT against the control HWND resolved with GetDlgItem - a Win32 read, independent of both the injection path and of UIA",
"verdict": "ok"
},
{
"payloadKind": "astral-plane",
"payloadOrigin": "built with [char]::ConvertFromUtf32 (R12), then sent one UTF-16 code unit per KEYEVENTF_UNICODE key-down/key-up pair - a surrogate pair is therefore two separate SendInput chunks",
"clearedBeforeTyping": true,
"utf16UnitsSent": 4,
"expectedShape": {
"utf16Units": 4,
"codepoints": 3,
"surrogatePairs": 1,
"replacementChars": 0,
"sha256Utf16": "67c86e7a35b2aa45d8169108221af0cce098b6f81ea3da0c3df836caca0c743b"
},
"observedShape": {
"utf16Units": 4,
"codepoints": 3,
"surrogatePairs": 1,
"replacementChars": 0,
"sha256Utf16": "67c86e7a35b2aa45d8169108221af0cce098b6f81ea3da0c3df836caca0c743b"
},
"exactRoundTrip": true,
"surrogatePairSurvived": true,
"reReadMethod": "WM_GETTEXT against the control HWND resolved with GetDlgItem - a Win32 read, independent of both the injection path and of UIA",
"verdict": "ok"
},
{
"payloadKind": "mixed",
"payloadOrigin": "built with [char]::ConvertFromUtf32 (R12), then sent one UTF-16 code unit per KEYEVENTF_UNICODE key-down/key-up pair - a surrogate pair is therefore two separate SendInput chunks",
"clearedBeforeTyping": true,
"utf16UnitsSent": 5,
"expectedShape": {
"utf16Units": 5,
"codepoints": 4,
"surrogatePairs": 1,
"replacementChars": 0,
"sha256Utf16": "466b637a36902077d734c147874d2a78a8449ad23e25e0fcc9322573276f30ec"
},
"observedShape": {
"utf16Units": 5,
"codepoints": 4,
"surrogatePairs": 1,
"replacementChars": 0,
"sha256Utf16": "466b637a36902077d734c147874d2a78a8449ad23e25e0fcc9322573276f30ec"
},
"exactRoundTrip": true,
"surrogatePairSurvived": true,
"reReadMethod": "WM_GETTEXT against the control HWND resolved with GetDlgItem - a Win32 read, independent of both the injection path and of UIA",
"verdict": "ok"
}
],
"chord": {
"chordSent": true,
"keys": "Ctrl down, A down, A up, C down, C up, Ctrl up - six discrete SendInput calls, each individually foreground-gated",
"sourceTypedShape": {
"utf16Units": 16,
"codepoints": 16,
"surrogatePairs": 0,
"replacementChars": 0,
"sha256Utf16": "ac4b5a78fbe066f9b012bb77a4cdc6699889391dbccff4c5b58bdb5d3ba6ad55"
},
"sourceObservedShape": {
"utf16Units": 16,
"codepoints": 16,
"surrogatePairs": 0,
"replacementChars": 0,
"sha256Utf16": "ac4b5a78fbe066f9b012bb77a4cdc6699889391dbccff4c5b58bdb5d3ba6ad55"
},
"sourceRoundTrip": true,
"clipboardReadOk": true,
"clipboardObservedShape": {
"utf16Units": 16,
"codepoints": 16,
"surrogatePairs": 0,
"replacementChars": 0,
"sha256Utf16": "ac4b5a78fbe066f9b012bb77a4cdc6699889391dbccff4c5b58bdb5d3ba6ad55"
},
"verifiedByShape": true,
"verificationRule": "the clipboard is verified by SHAPE against the hash of the string the probe itself typed into the control, never against the observed clipboard value. The operator clipboard could hold a secret; comparing hashes means a non-probe value simply fails to match and nothing about it is recorded beyond its length and hash.",
"verdict": "ok - Ctrl+A then Ctrl+C put exactly the typed string on the clipboard"
},
"modifierStateAfterChord": [
{
"key": "VK_SHIFT",
"asyncKeyIsDown": false,
"keyStateIsDown": false
},
{
"key": "VK_CONTROL",
"asyncKeyIsDown": false,
"keyStateIsDown": false
},
{
"key": "VK_MENU",
"asyncKeyIsDown": false,
"keyStateIsDown": false
},
{
"key": "VK_LWIN",
"asyncKeyIsDown": false,
"keyStateIsDown": false
},
{
"key": "VK_RWIN",
"asyncKeyIsDown": false,
"keyStateIsDown": false
},
{
"key": "VK_LSHIFT",
"asyncKeyIsDown": false,
"keyStateIsDown": false
},
{
"key": "VK_RSHIFT",
"asyncKeyIsDown": false,
"keyStateIsDown": false
},
{
"key": "VK_LCONTROL",
"asyncKeyIsDown": false,
"keyStateIsDown": false
},
{
"key": "VK_RCONTROL",
"asyncKeyIsDown": false,
"keyStateIsDown": false
},
{
"key": "VK_LMENU",
"asyncKeyIsDown": false,
"keyStateIsDown": false
},
{
"key": "VK_RMENU",
"asyncKeyIsDown": false,
"keyStateIsDown": false
}
],
"modifierStateAfterChordVerdict": "no modifier left down by the chord"
}

View file

@ -1,70 +0,0 @@
{
"probe": "06-input-synthesis",
"question": "do SendInput absolute moves land where asked, and do click, wheel and drag register as real input on the target",
"stack": "win32-SendInput",
"scope": "system",
"coordinateModel": "MOUSEEVENTF_ABSOLUTE normalises against GetSystemMetrics(SM_CXSCREEN/SM_CYSCREEN), i.e. the PRIMARY monitor only. This box has one display; a multi-monitor adapter must use MOUSEEVENTF_VIRTUALDESK instead, and the single-display limit here is why that is a DEFERRED row rather than a measured one.",
"interference": null,
"click": {
"targetControl": "btnAction (control id 1005)",
"targetRect": "340,235,104,26",
"requestedPoint": "392,248",
"cursorLandedPoint": "392,248",
"absoluteMoveExact": true,
"absoluteMoveNote": "the landing point is read back with GetCursorPos. The 0..65535 normalisation is lossy at odd screen widths, so an off-by-one landing is expected and is recorded rather than asserted away.",
"statusBefore": "status:ready",
"statusAfter": "action:1",
"registered": true,
"reReadMethod": "WM_GETTEXT on lblStatus (control id 1020), a different control than the one clicked"
},
"wheel": {
"targetControl": "pnlScroll (control id 1011)",
"targetRect": "124,363,340,180",
"ticks": <duration>,
"deltaPerTick": -120,
"sinkBefore": "scroll:0",
"sinkAfter": "scroll:140",
"scrollPixelsBefore": 0,
"scrollPixelsAfter": 140,
"deltaScrollPixels": 140,
"registered": true,
"patternCounterpart": "the pattern-scroll arm is in captures/05-interactions/interactions.json. It could NOT be run on this control: the managed client cannot acquire ScrollPattern on pnlScroll in either fixture mode even though the UIA3 COM census records Scroll on that exact provider. The wheel path drives the control the pattern path could not, and both are observed through the same lblScrollPos sink.",
"measuredFactNaming": "the observed delta is named deltaScrollPixels, not \"y\" or \"height\", so the KTD9 normalizer - which buckets any key named x/y/left/top/right/bottom/width/height to 8 px - cannot canonicalize the measurement away."
},
"drag": {
"targetControl": "tbSlider (control id 1008), Minimum 0 Maximum 100",
"targetRect": "124,307,320,45",
"method": "mouse-down on the thumb at the left end, six absolute moves rightwards, mouse-up; the fixture label lblSliderValue is read after every step",
"sliderValueBefore": 0,
"sliderValueAfter": 90,
"samples": [
{
"step": 1,
"sliderValue": 15
},
{
"step": 2,
"sliderValue": 30
},
{
"step": 3,
"sliderValue": 45
},
{
"step": 4,
"sliderValue": 60
},
{
"step": 5,
"sliderValue": 75
},
{
"step": 6,
"sliderValue": 90
}
],
"monotonicNonDecreasing": true,
"increased": true,
"verdict": "ok - monotonic increase under drag"
}
}

View file

@ -1,77 +0,0 @@
{
"probe": "06-input-synthesis",
"question": "does posting WM_KEYDOWN/WM_KEYUP to a control actually register the keystroke - on a classic Win32 control and on Chromium",
"stack": "win32-PostMessage",
"scope": "system",
"why": "Engineering Invariant #5 asserts the message-posting path is dead for Chromium and UWP. Nothing else in this corpus tests it, so the invariant has been carried on assumption. These rows file it from observation.",
"foregroundIrrelevantNote": "PostMessage is targeted at a window, not at the desktop input queue, so these rows are deliberately NOT foreground-gated. That is the whole appeal of the path and the reason it is worth measuring rather than assuming.",
"rows": [
{
"target": "scratch WinForms Edit (control id 1003), same session, same integrity level as the probe",
"stack": "win32-PostMessage",
"integrityRelation": "High -\u003e High. 09-elevation-uipi measured the Medium -\u003e High case for PostMessage(WM_CHAR) and got false with error 5 (ERROR_ACCESS_DENIED). This row is the different question: with UIPI out of the way entirely, does a posted key message register at all?",
"keyDownPostResult": "true",
"keyUpPostResult": "true",
"charPostResult": "true",
"resultFormat": "\"true\" on success, \"false:\u003cGetLastError\u003e\" on failure. The error code is only meaningful when the call failed, so it is only recorded then.",
"textBeforeShape": {
"utf16Units": 0,
"codepoints": 0,
"surrogatePairs": 0,
"replacementChars": 0,
"sha256Utf16": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
},
"textAfterKeyDownShape": {
"utf16Units": 1,
"codepoints": 1,
"surrogatePairs": 0,
"replacementChars": 0,
"sha256Utf16": "c03ad57f5b1b1bddf59ddb5c973b459f432291edad374fe9d051c59d102d8742"
},
"textAfterKeyUpShape": {
"utf16Units": 1,
"codepoints": 1,
"surrogatePairs": 0,
"replacementChars": 0,
"sha256Utf16": "c03ad57f5b1b1bddf59ddb5c973b459f432291edad374fe9d051c59d102d8742"
},
"textAfterCharShape": {
"utf16Units": 2,
"codepoints": 2,
"surrogatePairs": 0,
"replacementChars": 0,
"sha256Utf16": "219173f2f738427068d89f63e4ebe7b9d440ec37c08234356c276d6eafc77eca"
},
"keyDownRegistered": true,
"keyUpAddedAnything": false,
"charMessageRegistered": true,
"measuredResult": "the posted WM_KEYDOWN alone inserted one character into the Edit. WM_KEYUP added nothing, and a subsequently posted WM_CHAR inserted a second character.",
"interpretation": "this contradicts the usual reading that a posted WM_KEYDOWN is inert because it carries a virtual key rather than a character. TranslateMessage runs inside the TARGET thread\u0027s own message pump and does not care whether the message it retrieved was posted or came from the input queue, so it synthesises the WM_CHAR itself. The message-posting path is therefore alive - not dead - for a classic Win32 Edit at equal integrity. What it cannot do is carry modifier state: TranslateMessage reads the target thread\u0027s keyboard state, which the poster cannot set, so a posted chord or a shifted character is unreachable by this path even where a plain character is not.",
"invariantRelevance": "Engineering Invariant #5 is about Chromium and UWP, and this row does not weaken it. It does remove the convenient generalisation that message posting never types anything: on classic Win32 controls it does, which is exactly why the Chromium row below has to be measured rather than inferred from the same mechanism."
},
{
"target": "chromium/electron (Obsidian, launched by this probe)",
"stack": "win32-PostMessage",
"obsidianVersion": "1.12.7",
"topLevelClassName": "Chrome_WidgetWin_1",
"childWindowClasses": "Chrome_RenderWidgetHostHWND",
"renderWidgetChildFound": true,
"topLevelKeyDownPostResult": "true",
"topLevelKeyUpPostResult": "true",
"renderWidgetKeyDownPostResult": "true",
"renderWidgetKeyUpPostResult": "true",
"renderWidgetCharPostResult": "true",
"observable": "a bounded RawView UIA walk of the Chromium top-level window (250 nodes, depth 10) reduced to a SHA-256 of the ControlType|Name stream. Only the derived booleans and node counts are recorded - neither the hash nor any Chromium Name value reaches the capture (R11), and the hash would in any case be run-varying and break the KTD9 twin.",
"controlPass": "the fingerprint is first polled every 2 s until two consecutive reads agree, so the measurement starts from a quiet tree rather than a loading one. A further idle fingerprint is then taken five seconds later with NO input at all, and only then are the messages posted. Without that control an Electron tree still growing on its own reads as a registered keystroke - which is exactly what the first run of this probe recorded before the control was added: 13 nodes to 15 with nothing posted.",
"timingStabilizationPasses": <duration>,
"nodesAtSettle": 15,
"nodesAfterIdleWait": 15,
"nodesAfterPostedKeys": 15,
"treeChurnWithoutInput": false,
"treeChangedAfterPostedKeys": false,
"keystrokeRegistered": false,
"verdict": "not registered - every PostMessage call returned success and the Chromium tree was byte-identical before and after, over the same window and the same bounded walk",
"caveat": "an unchanged fingerprint is evidence of no observable effect within the bounded walk, not a proof that no byte anywhere changed. It is recorded as such."
}
]
}

View file

@ -1,148 +0,0 @@
{
"probe": "06-input-synthesis",
"question": "does the probe leave the desktop exactly as it found it - no stuck modifier, the original clipboard, the original cursor position, no surviving process",
"why": "KTD5. A probe that types into a shared desktop and leaves a modifier down or a clipboard overwritten has corrupted the box for everything that runs after it, including the rest of this corpus.",
"modifierSweep": {
"policy": "conditional by design: modifier state is read first and a key-up is injected only for a modifier actually found down. On the normal path no key is injected at all, so the sweep does not need the foreground gate it would otherwise require.",
"stateBeforeSweep": [
{
"key": "VK_SHIFT",
"asyncKeyIsDown": false,
"keyStateIsDown": false
},
{
"key": "VK_CONTROL",
"asyncKeyIsDown": false,
"keyStateIsDown": false
},
{
"key": "VK_MENU",
"asyncKeyIsDown": false,
"keyStateIsDown": false
},
{
"key": "VK_LWIN",
"asyncKeyIsDown": false,
"keyStateIsDown": false
},
{
"key": "VK_RWIN",
"asyncKeyIsDown": false,
"keyStateIsDown": false
},
{
"key": "VK_LSHIFT",
"asyncKeyIsDown": false,
"keyStateIsDown": false
},
{
"key": "VK_RSHIFT",
"asyncKeyIsDown": false,
"keyStateIsDown": false
},
{
"key": "VK_LCONTROL",
"asyncKeyIsDown": false,
"keyStateIsDown": false
},
{
"key": "VK_RCONTROL",
"asyncKeyIsDown": false,
"keyStateIsDown": false
},
{
"key": "VK_LMENU",
"asyncKeyIsDown": false,
"keyStateIsDown": false
},
{
"key": "VK_RMENU",
"asyncKeyIsDown": false,
"keyStateIsDown": false
}
],
"keysSwept": [
],
"stateAfterSweep": [
{
"key": "VK_SHIFT",
"asyncKeyIsDown": false,
"keyStateIsDown": false
},
{
"key": "VK_CONTROL",
"asyncKeyIsDown": false,
"keyStateIsDown": false
},
{
"key": "VK_MENU",
"asyncKeyIsDown": false,
"keyStateIsDown": false
},
{
"key": "VK_LWIN",
"asyncKeyIsDown": false,
"keyStateIsDown": false
},
{
"key": "VK_RWIN",
"asyncKeyIsDown": false,
"keyStateIsDown": false
},
{
"key": "VK_LSHIFT",
"asyncKeyIsDown": false,
"keyStateIsDown": false
},
{
"key": "VK_RSHIFT",
"asyncKeyIsDown": false,
"keyStateIsDown": false
},
{
"key": "VK_LCONTROL",
"asyncKeyIsDown": false,
"keyStateIsDown": false
},
{
"key": "VK_RCONTROL",
"asyncKeyIsDown": false,
"keyStateIsDown": false
},
{
"key": "VK_LMENU",
"asyncKeyIsDown": false,
"keyStateIsDown": false
},
{
"key": "VK_RMENU",
"asyncKeyIsDown": false,
"keyStateIsDown": false
}
],
"allClear": true
},
"clipboard": {
"snapshotTaken": true,
"originalFormats": [
"text"
],
"originalTextPresent": true,
"restoredExactly": true,
"verificationMethod": "the restored clipboard is read back and compared to the snapshot by SHA-256 of its UTF-16 bytes, in memory. Neither the value nor its hash reaches the capture: the operator clipboard can hold a secret, and a hash of a secret is still a fingerprint of it.",
"formatCaveat": "only text is snapshotted and restored. originalFormats records what was actually on the clipboard so a non-text loss would be visible in the capture rather than silent."
},
"cursor": {
"snapshotTaken": true,
"offsetAfterRestore": "0,0",
"restoredExactly": true,
"recordingChoice": "the offset from the snapshot is recorded rather than the absolute positions: an absolute origin is a run-varying value that would break the KTD9 twin, while \"0,0\" proves exact restoration. It is a comma-joined string rather than numeric x/y keys because the normalizer buckets any numeric key named x or y to 8 px, which would have hidden an 8 px restoration error."
},
"processes": {
"spawnedCount": 5,
"survivorCount": 0,
"confirmedGone": true,
"confirmationMethod": "Stop-ScratchProcess terminates and then re-reads the process list until the pid is gone or a 10 s deadline expires; the survivor count above is a second, independent re-read after all teardown."
}
}

View file

@ -1,105 +0,0 @@
{
"probe": "07-hittest",
"question": "do the hit-test primitives 2.6 needs behave correctly against occluded, zero-size and minimized targets",
"stack": "managed-System.Windows.Automation AutomationElement.FromPoint, cross-checked with Win32 WindowFromPoint",
"scope": "system",
"safety": "both windows are launched by this probe at deterministic --pos origins; nothing else on the desktop is touched, moved or raised.",
"occlusion": {
"question": "at a point covered by a second window, does ElementFromPoint return the occluder or the covered target",
"why": "2.6\u0027s occlusion gate decides whether an element is actually clickable. If ElementFromPoint answered with the covered element the gate would have no primitive to build on and every actionability check would be a guess.",
"underWindowTitle": "AgentDesktop Scratch WinForms [u6-under]",
"overWindowTitle": "AgentDesktop Scratch WinForms [u6-over]",
"underWindowRect": "100,100,776,559",
"overWindowRect": "260,180,776,559",
"raiseMethod": "ShowWindow(SW_MINIMIZE) then ShowWindow(SW_RESTORE) on the probe-owned over window. SetForegroundWindow is never called (KTD5).",
"overlapRect": "260,180,616,479",
"probePoint": "568,420",
"probePointInsideUnder": true,
"probePointInsideOver": true,
"elementFromPoint": {
"resolved": true,
"controlType": "Pane",
"automationId": "tbSlider",
"className": "WindowsForms10.msctls_trackbar32.app.0.34f5582_r8_ad1",
"topLevelWindow": "AgentDesktop Scratch WinForms [u6-over]",
"rect": "284,387,320,45"
},
"win32WindowFromPointRootTitle": "AgentDesktop Scratch WinForms [u6-over]",
"resolvedToOccluder": true,
"resolvedToOccluded": false,
"win32AgreesWithUia": true,
"titleEvidenceNote": "the two windows are distinguished by the --tag switch, so the identity that proves which window answered survives KTD9 normalization - process ids and window handles do not.",
"verdict": "ok - ElementFromPoint returned the occluder"
},
"zeroSize": {
"question": "what does a 0x0 control look like to a hit test, and is it reachable at all",
"controlId": 1007,
"automationId": "btnZeroSize",
"reachableByGetDlgItem": true,
"win32Rect": "248,271,0,0",
"win32ClassName": "WindowsForms10.BUTTON.app.0.34f5582_r8_ad1",
"win32IsWindowVisible": true,
"foundByFindFirstAutomationId": false,
"controlViewNodeCount": 24,
"rawViewNodeCount": 24,
"fromHandleResolved": true,
"fromHandleControlType": "Pane",
"fromHandleRect": "\u003cempty\u003e",
"fromHandleIsOffscreen": false,
"elementFromPointAtItsOrigin": {
"resolved": true,
"controlType": "Window",
"automationId": "frmScratchMain",
"className": "WindowsForms10.Window.8.app.0.34f5582_r8_ad1",
"topLevelWindow": "AgentDesktop Scratch WinForms [u6-under]",
"rect": "100,100,776,559"
},
"priorEvidence": "U7 recorded this control as absent from BOTH the COM RawView and ControlView walks of the same fixture. The rows above are the managed-side confirmation plus the two things the COM census could not answer: whether the control is still reachable by handle, and what a hit test at its coordinates returns.",
"consequence": "a zero-size control is addressable through Win32 and through AutomationElement.FromHandle, but it can be enumerated by no tree walk and hit by no point. Any Windows actionability check that treats \"not hit-testable\" as \"does not exist\" will be right about the click and wrong about the element."
},
"minimized": {
"question": "what does a minimized window report, and what does a hit test at its former coordinates return",
"priorEvidence": "U3 measured that minimizing degenerates geometry in two different shapes: only the TOP-LEVEL window reports an empty rect, while descendants report REAL dimensions anchored at -32000, and every node still reports IsOffscreen false. An occlusion gate testing emptiness or IsOffscreen alone accepts both as visible.",
"pointProbed": "130,380",
"pointChoice": "a point inside the under window but outside the over window, so the only thing that can change the answer is the minimize itself",
"topLevelRectBefore": "100,100,776,559",
"topLevelRectAfterMinimize": "\u003cempty\u003e",
"topLevelRectAfterRestore": "100,100,776,559",
"topLevelIsOffscreenBefore": false,
"topLevelIsOffscreenAfterMinimize": false,
"descendantAutomationId": "btnAction",
"descendantFoundAfterMinimize": true,
"descendantRectBefore": "340,235,104,26",
"descendantRectAfterMinimize": "-31768,-31896,104,26",
"descendantIsOffscreenBefore": false,
"descendantIsOffscreenAfterMinimize": false,
"win32IsIconic": true,
"elementFromPointBefore": {
"resolved": true,
"controlType": "Pane",
"automationId": "pnlScroll",
"className": "WindowsForms10.Window.8.app.0.34f5582_r8_ad1",
"topLevelWindow": "AgentDesktop Scratch WinForms [u6-under]",
"rect": "124,363,340,180"
},
"elementFromPointAfterMinimize": {
"resolved": true,
"controlType": "Pane",
"automationId": "1",
"className": "SysListView32",
"topLevelWindow": "Program Manager",
"rect": "0,0,1639,732"
},
"elementFromPointAtDescendantAnchor": {
"resolved": true,
"controlType": "Pane",
"automationId": "",
"className": "#32769",
"topLevelWindow": "\u003cno-top-level-reached\u003e",
"rect": "0,0,1639,732"
},
"hitTestFreedTheCoordinates": true,
"gateConsequence": "ElementFromPoint is the one primitive here that degrades cleanly: after the minimize the coordinates resolve to whatever is genuinely on top instead of to the minimized window. Emptiness and IsOffscreen do not - the top-level rect empties while its descendants keep real dimensions at -32000, and IsOffscreen stays false on both. 2.6 should gate on a hit test, and where it must reason about geometry it has to test the -32000 anchor explicitly, because a -32000 rect is neither empty nor offscreen by either property.",
"rectRecordingNote": "every rect here is a comma-joined string. As numeric x/y/width/height keys the KTD9 normalizer would bucket them to 8 px, which rounds -32000 into a neighbouring bucket and erases exactly the anchor this row exists to record."
}
}

View file

@ -1,31 +0,0 @@
{
"target": "explorer.exe",
"targetKind": "probe-opened folder window (CabinetWClass) over %WINDIR%\\System32, closed in teardown",
"shim": {
"stack": "uia3-com",
"binding": "hand-declared ComImport, no GAC UIAutomationClient reference",
"coclass": "CUIAutomation8",
"mainThreadId": 8356,
"mainApartment": "MTA",
"discoveredPatternAvailabilityProperties": 35,
"result": {
"mode": "cache",
"label": "explorer",
"hwnd": "<hwnd>",
"nodeCount": 220,
"propertiesPerNode": 8,
"propertyNames": "Name,ControlType,AutomationId,ClassName,BoundingRectangle,IsEnabled,IsOffscreen,FrameworkId",
"repetitions": 5,
"perPropertyMs": <duration>,
"cachedMs": <duration>,
"timingPerPropertyFindMs": <duration>,
"timingCachedFindMs": <duration>,
"timingPerPropertyReadMs": <duration>,
"timingCachedReadMs": <duration>,
"timingReadPhaseMultiplier": <duration>,
"timingMultiplier": <duration>,
"claimVerdict": "below-3x-claim",
"claimChecked": "phases.md 3-5x batched-read speedup"
}
}
}

File diff suppressed because it is too large Load diff

View file

@ -1,100 +0,0 @@
{
"question": "do UIA3 COM and managed System.Windows.Automation report the same pattern availability on this VM",
"note": "COM rows are authoritative (KTD1); managed rows are a labeled non-authoritative cross-check",
"com": [
{
"label": "winforms-default",
"stack": "uia3-com",
"authoritative": true,
"rawViewNodes": 35,
"controlViewNodes": 35,
"elementsWithAnyPattern": 35,
"elementsWithAnyPatternExcludingLegacy": 11
},
{
"label": "winforms-host-providers",
"stack": "uia3-com",
"authoritative": true,
"rawViewNodes": 46,
"controlViewNodes": 46,
"elementsWithAnyPattern": 46,
"elementsWithAnyPatternExcludingLegacy": 37
},
{
"label": "wpf",
"stack": "uia3-com",
"authoritative": true,
"rawViewNodes": 34,
"controlViewNodes": 32,
"elementsWithAnyPattern": 34,
"elementsWithAnyPatternExcludingLegacy": 33
},
{
"label": "notepad",
"stack": "uia3-com",
"authoritative": true,
"rawViewNodes": 26,
"controlViewNodes": 26,
"elementsWithAnyPattern": 26,
"elementsWithAnyPatternExcludingLegacy": 18
}
],
"managed": [
{
"label": "winforms-default",
"stack": "managed-System.Windows.Automation",
"authoritative": false,
"rawViewNodes": 24,
"elementsWithAnyPattern": 1,
"controlTypes": {
"Pane": 23,
"Window": 1
}
},
{
"label": "winforms-host-providers",
"stack": "managed-System.Windows.Automation",
"authoritative": false,
"rawViewNodes": 26,
"elementsWithAnyPattern": 3,
"controlTypes": {
"Text": 6,
"ComboBox": 1,
"Button": 1,
"Window": 1,
"Pane": 17
}
},
{
"label": "wpf",
"stack": "managed-System.Windows.Automation",
"authoritative": false,
"rawViewNodes": 28,
"elementsWithAnyPattern": 28,
"controlTypes": {
"CheckBox": 1,
"Text": 9,
"ComboBox": 1,
"List": 1,
"Button": 2,
"Pane": 2,
"Edit": 2,
"Window": 1,
"ListItem": 5,
"ScrollBar": 4
}
},
{
"label": "notepad",
"stack": "managed-System.Windows.Automation",
"authoritative": false,
"rawViewNodes": 3,
"elementsWithAnyPattern": 1,
"controlTypes": {
"Pane": 2,
"Window": 1
}
}
],
"stacksDiverge": true
}

View file

@ -1,120 +0,0 @@
{
"question": "what makes RemoveXEventHandler on the MTA worker block for tens of seconds",
"method": "same 20-repetition drive loop with one action class removed at a time; teardown timed per handler on the registering thread",
"arms": [
{
"arm": "full drive loop (value + click + focus + window hide/show), property reads inside callbacks",
"driveActions": "vcfw",
"cheapCallbacks": false,
"totalEvents": 557,
"quiescentTeardownElapsedMs": 86184.2359,
"inflightTeardownElapsedMs": 72.4894,
"quiescentTeardownPerHandler": [
{
"handler": "Invoke_Invoked",
"elapsedMs": <duration>
},
{
"handler": "Text_TextChanged",
"elapsedMs": <duration>
},
{
"handler": "SelectionItem_ElementSelected",
"elapsedMs": <duration>
},
{
"handler": "Window_WindowOpened",
"elapsedMs": <duration>
},
{
"handler": "Window_WindowClosed",
"elapsedMs": <duration>
},
{
"handler": "PropertyChanged",
"elapsedMs": <duration>
},
{
"handler": "FocusChanged",
"elapsedMs": <duration>
}
]
},
{
"arm": "no window hide/show (value + click + focus only)",
"driveActions": "vcf",
"cheapCallbacks": false,
"totalEvents": 532,
"quiescentTeardownElapsedMs": 63.7518,
"inflightTeardownElapsedMs": 69.5929,
"quiescentTeardownPerHandler": [
{
"handler": "Invoke_Invoked",
"elapsedMs": <duration>
},
{
"handler": "Text_TextChanged",
"elapsedMs": <duration>
},
{
"handler": "SelectionItem_ElementSelected",
"elapsedMs": <duration>
},
{
"handler": "Window_WindowOpened",
"elapsedMs": <duration>
},
{
"handler": "Window_WindowClosed",
"elapsedMs": <duration>
},
{
"handler": "PropertyChanged",
"elapsedMs": <duration>
},
{
"handler": "FocusChanged",
"elapsedMs": <duration>
}
]
},
{
"arm": "window hide/show only, with callbacks that do no property reads",
"driveActions": "w",
"cheapCallbacks": true,
"totalEvents": 490,
"quiescentTeardownElapsedMs": 22757.3847,
"inflightTeardownElapsedMs": 99.6363,
"quiescentTeardownPerHandler": [
{
"handler": "Invoke_Invoked",
"elapsedMs": <duration>
},
{
"handler": "Text_TextChanged",
"elapsedMs": <duration>
},
{
"handler": "SelectionItem_ElementSelected",
"elapsedMs": <duration>
},
{
"handler": "Window_WindowOpened",
"elapsedMs": <duration>
},
{
"handler": "Window_WindowClosed",
"elapsedMs": <duration>
},
{
"handler": "PropertyChanged",
"elapsedMs": <duration>
},
{
"handler": "FocusChanged",
"elapsedMs": <duration>
}
]
}
]
}

View file

@ -1,804 +0,0 @@
{
"stack": "uia3-com",
"binding": "hand-declared ComImport, no GAC UIAutomationClient reference",
"coclass": "CUIAutomation8",
"mainThreadId": 2868,
"mainApartment": "MTA",
"discoveredPatternAvailabilityProperties": 35,
"result": {
"mode": "events",
"repetitions": 20,
"cheapCallbacks": false,
"driveActions": "vcfw",
"callbackWork": "reads AutomationId+ControlType+ProcessId on sender inside the callback",
"targetHwnd": "0x1800e6",
"targetProcessId": 6008,
"workerThreadId": 7552,
"workerApartment": "MTA",
"watchedProperties": "Name=30005,ValuePattern.Value=30045,TogglePattern.ToggleState=30086,HasKeyboardFocus=30008,RangeValuePattern.Value=30047",
"totalEvents": 557,
"distinctEventThreadCount": 4,
"eventThreadsDistinctFromMain": true,
"eventThreadsDistinctFromWorker": false,
"kindTotals": {
"AutomationEvent:Window_WindowClosed": 10,
"AutomationEvent:Window_WindowOpened": 7,
"FocusChanged": 42,
"PropertyChanged:Name": 180,
"PropertyChanged:ValuePattern.Value": 318
},
"orderingStableAcrossReps": false,
"distinctOrderingSignatures": 6,
"orderingStableExcludingWindowEvents": true,
"distinctCoreOrderingSignatures": 1,
"orderingPerRep": [
{
"rep": 0,
"sequence": "PropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:Name\u003ePropertyChanged:Name\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:Name\u003ePropertyChanged:Name\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003eFocusChanged\u003eFocusChanged\u003eAutomationEvent:Window_WindowClosed\u003eAutomationEvent:Window_WindowOpened"
},
{
"rep": 1,
"sequence": "PropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:Name\u003ePropertyChanged:Name\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:Name\u003ePropertyChanged:Name\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003eFocusChanged\u003eFocusChanged\u003eAutomationEvent:Window_WindowClosed\u003eAutomationEvent:Window_WindowOpened"
},
{
"rep": 2,
"sequence": "PropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:Name\u003ePropertyChanged:Name\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:Name\u003ePropertyChanged:Name\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003eFocusChanged\u003eFocusChanged\u003eAutomationEvent:Window_WindowClosed\u003eAutomationEvent:Window_WindowOpened"
},
{
"rep": 3,
"sequence": "PropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:Name\u003ePropertyChanged:Name\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:Name\u003ePropertyChanged:Name\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003eFocusChanged\u003eFocusChanged\u003eAutomationEvent:Window_WindowClosed\u003eAutomationEvent:Window_WindowOpened"
},
{
"rep": 4,
"sequence": "PropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:Name\u003ePropertyChanged:Name\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:Name\u003ePropertyChanged:Name\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003eFocusChanged\u003eFocusChanged\u003eAutomationEvent:Window_WindowClosed"
},
{
"rep": 5,
"sequence": "PropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:Name\u003ePropertyChanged:Name\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:Name\u003ePropertyChanged:Name\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003eAutomationEvent:Window_WindowOpened\u003eFocusChanged\u003eFocusChanged\u003eAutomationEvent:Window_WindowClosed"
},
{
"rep": 6,
"sequence": "PropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:Name\u003ePropertyChanged:Name\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:Name\u003ePropertyChanged:Name\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003eFocusChanged\u003eFocusChanged"
},
{
"rep": 7,
"sequence": "PropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:Name\u003ePropertyChanged:Name\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:Name\u003ePropertyChanged:Name\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003eFocusChanged\u003eFocusChanged\u003eAutomationEvent:Window_WindowOpened\u003eAutomationEvent:Window_WindowClosed"
},
{
"rep": 8,
"sequence": "PropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:Name\u003ePropertyChanged:Name\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:Name\u003ePropertyChanged:Name\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003eFocusChanged\u003eFocusChanged"
},
{
"rep": 9,
"sequence": "PropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:Name\u003ePropertyChanged:Name\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:Name\u003ePropertyChanged:Name\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003eFocusChanged\u003eFocusChanged"
},
{
"rep": 10,
"sequence": "PropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:Name\u003ePropertyChanged:Name\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:Name\u003ePropertyChanged:Name\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003eFocusChanged\u003eFocusChanged"
},
{
"rep": 11,
"sequence": "PropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:Name\u003ePropertyChanged:Name\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:Name\u003ePropertyChanged:Name\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003eFocusChanged\u003eFocusChanged"
},
{
"rep": 12,
"sequence": "PropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:Name\u003ePropertyChanged:Name\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:Name\u003ePropertyChanged:Name\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003eFocusChanged\u003eFocusChanged"
},
{
"rep": 13,
"sequence": "PropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:Name\u003ePropertyChanged:Name\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:Name\u003ePropertyChanged:Name\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003eFocusChanged\u003eFocusChanged"
},
{
"rep": 14,
"sequence": "PropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:Name\u003ePropertyChanged:Name\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:Name\u003ePropertyChanged:Name\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003eFocusChanged\u003eFocusChanged"
},
{
"rep": 15,
"sequence": "PropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:Name\u003ePropertyChanged:Name\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:Name\u003ePropertyChanged:Name\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003eFocusChanged\u003eFocusChanged"
},
{
"rep": 16,
"sequence": "PropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:Name\u003ePropertyChanged:Name\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:Name\u003ePropertyChanged:Name\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003eFocusChanged\u003eFocusChanged"
},
{
"rep": 17,
"sequence": "PropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:Name\u003ePropertyChanged:Name\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:Name\u003ePropertyChanged:Name\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003eFocusChanged\u003eFocusChanged"
},
{
"rep": 18,
"sequence": "PropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:Name\u003ePropertyChanged:Name\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:Name\u003ePropertyChanged:Name\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003eFocusChanged\u003eFocusChanged"
},
{
"rep": 19,
"sequence": "PropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:Name\u003ePropertyChanged:Name\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:Name\u003ePropertyChanged:Name\u003ePropertyChanged:ValuePattern.Value\u003ePropertyChanged:ValuePattern.Value\u003eFocusChanged\u003eAutomationEvent:Window_WindowOpened\u003eAutomationEvent:Window_WindowClosed\u003eFocusChanged"
}
],
"quiescentTeardownCompleted": true,
"quiescentTeardownElapsedMs": 86184.2359,
"inflightTeardownCompletedUnderLoad": true,
"inflightTeardownCompletedOnlyAfterLoadStopped": false,
"inflightTeardownElapsedMs": 72.4894,
"quiescentTeardownPerHandler": [
{
"handler": "Invoke_Invoked",
"elapsedMs": <duration>
},
{
"handler": "Text_TextChanged",
"elapsedMs": <duration>
},
{
"handler": "SelectionItem_ElementSelected",
"elapsedMs": <duration>
},
{
"handler": "Window_WindowOpened",
"elapsedMs": <duration>
},
{
"handler": "Window_WindowClosed",
"elapsedMs": <duration>
},
{
"handler": "PropertyChanged",
"elapsedMs": <duration>
},
{
"handler": "FocusChanged",
"elapsedMs": <duration>
}
],
"inflightTeardownPerHandler": [
{
"handler": "Invoke_Invoked",
"elapsedMs": <duration>
},
{
"handler": "Text_TextChanged",
"elapsedMs": <duration>
},
{
"handler": "SelectionItem_ElementSelected",
"elapsedMs": <duration>
},
{
"handler": "Window_WindowOpened",
"elapsedMs": <duration>
},
{
"handler": "Window_WindowClosed",
"elapsedMs": <duration>
},
{
"handler": "PropertyChanged",
"elapsedMs": <duration>
},
{
"handler": "FocusChanged",
"elapsedMs": <duration>
}
],
"inflightEventBacklogAtTeardown": 296,
"eventsDuringTeardownWindow": 300,
"workerErrors": "",
"sample": [
{
"seq": 0,
"rep": 0,
"label": "FocusChanged",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "ImmersiveBackground",
"senderControlType": "Button",
"senderIsTarget": false
},
{
"seq": 1,
"rep": 0,
"label": "PropertyChanged:ValuePattern.Value",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "txtValue",
"senderControlType": "Edit",
"senderIsTarget": true
},
{
"seq": 2,
"rep": 0,
"label": "PropertyChanged:ValuePattern.Value",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "txtValue",
"senderControlType": "Edit",
"senderIsTarget": true
},
{
"seq": 3,
"rep": 0,
"label": "PropertyChanged:Name",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "btnAction",
"senderControlType": "Button",
"senderIsTarget": true,
"newValue": "Do Action"
},
{
"seq": 4,
"rep": 0,
"label": "PropertyChanged:Name",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "btnAction",
"senderControlType": "Button",
"senderIsTarget": true,
"newValue": "Do Action"
},
{
"seq": 5,
"rep": 0,
"label": "PropertyChanged:ValuePattern.Value",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "txtStatusMirror",
"senderControlType": "Edit",
"senderIsTarget": true
},
{
"seq": 6,
"rep": 0,
"label": "PropertyChanged:ValuePattern.Value",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "txtStatusMirror",
"senderControlType": "Edit",
"senderIsTarget": true
},
{
"seq": 7,
"rep": 0,
"label": "PropertyChanged:Name",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "chkToggle",
"senderControlType": "CheckBox",
"senderIsTarget": true,
"newValue": "Enable feature"
},
{
"seq": 8,
"rep": 0,
"label": "PropertyChanged:Name",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "chkToggle",
"senderControlType": "CheckBox",
"senderIsTarget": true,
"newValue": "Enable feature"
},
{
"seq": 9,
"rep": 0,
"label": "PropertyChanged:ValuePattern.Value",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "txtStatusMirror",
"senderControlType": "Edit",
"senderIsTarget": true
},
{
"seq": 10,
"rep": 0,
"label": "PropertyChanged:ValuePattern.Value",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "txtStatusMirror",
"senderControlType": "Edit",
"senderIsTarget": true
},
{
"seq": 11,
"rep": 0,
"label": "FocusChanged",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "txtValue",
"senderControlType": "Edit",
"senderIsTarget": true
},
{
"seq": 12,
"rep": 0,
"label": "FocusChanged",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "btnAction",
"senderControlType": "Button",
"senderIsTarget": true
},
{
"seq": 13,
"rep": 0,
"label": "AutomationEvent:Window_WindowClosed",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "frmScratchMain",
"senderControlType": "Window",
"senderIsTarget": true
},
{
"seq": 14,
"rep": 0,
"label": "AutomationEvent:Window_WindowOpened",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "frmScratchMain",
"senderControlType": "Window",
"senderIsTarget": true
},
{
"seq": 15,
"rep": 1,
"label": "PropertyChanged:ValuePattern.Value",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "txtValue",
"senderControlType": "Edit",
"senderIsTarget": true
},
{
"seq": 16,
"rep": 1,
"label": "PropertyChanged:ValuePattern.Value",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "txtValue",
"senderControlType": "Edit",
"senderIsTarget": true
},
{
"seq": 17,
"rep": 1,
"label": "PropertyChanged:Name",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "btnAction",
"senderControlType": "Button",
"senderIsTarget": true,
"newValue": "Do Action"
},
{
"seq": 18,
"rep": 1,
"label": "PropertyChanged:Name",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "btnAction",
"senderControlType": "Button",
"senderIsTarget": true,
"newValue": "Do Action"
},
{
"seq": 19,
"rep": 1,
"label": "PropertyChanged:ValuePattern.Value",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "txtStatusMirror",
"senderControlType": "Edit",
"senderIsTarget": true
},
{
"seq": 20,
"rep": 1,
"label": "PropertyChanged:ValuePattern.Value",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "txtStatusMirror",
"senderControlType": "Edit",
"senderIsTarget": true
},
{
"seq": 21,
"rep": 1,
"label": "PropertyChanged:Name",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "chkToggle",
"senderControlType": "CheckBox",
"senderIsTarget": true,
"newValue": "Enable feature"
},
{
"seq": 22,
"rep": 1,
"label": "PropertyChanged:Name",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "chkToggle",
"senderControlType": "CheckBox",
"senderIsTarget": true,
"newValue": "Enable feature"
},
{
"seq": 23,
"rep": 1,
"label": "PropertyChanged:ValuePattern.Value",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "txtStatusMirror",
"senderControlType": "Edit",
"senderIsTarget": true
},
{
"seq": 24,
"rep": 1,
"label": "PropertyChanged:ValuePattern.Value",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "txtStatusMirror",
"senderControlType": "Edit",
"senderIsTarget": true
},
{
"seq": 25,
"rep": 1,
"label": "FocusChanged",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "txtValue",
"senderControlType": "Edit",
"senderIsTarget": true
},
{
"seq": 26,
"rep": 1,
"label": "FocusChanged",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "btnAction",
"senderControlType": "Button",
"senderIsTarget": true
},
{
"seq": 27,
"rep": 1,
"label": "AutomationEvent:Window_WindowClosed",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "frmScratchMain",
"senderControlType": "Window",
"senderIsTarget": true
},
{
"seq": 28,
"rep": 1,
"label": "AutomationEvent:Window_WindowOpened",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "frmScratchMain",
"senderControlType": "Window",
"senderIsTarget": true
},
{
"seq": 29,
"rep": 2,
"label": "PropertyChanged:ValuePattern.Value",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "txtValue",
"senderControlType": "Edit",
"senderIsTarget": true
},
{
"seq": 30,
"rep": 2,
"label": "PropertyChanged:ValuePattern.Value",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "txtValue",
"senderControlType": "Edit",
"senderIsTarget": true
},
{
"seq": 31,
"rep": 2,
"label": "PropertyChanged:Name",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "btnAction",
"senderControlType": "Button",
"senderIsTarget": true,
"newValue": "Do Action"
},
{
"seq": 32,
"rep": 2,
"label": "PropertyChanged:Name",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "btnAction",
"senderControlType": "Button",
"senderIsTarget": true,
"newValue": "Do Action"
},
{
"seq": 33,
"rep": 2,
"label": "PropertyChanged:ValuePattern.Value",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "txtStatusMirror",
"senderControlType": "Edit",
"senderIsTarget": true
},
{
"seq": 34,
"rep": 2,
"label": "PropertyChanged:ValuePattern.Value",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "txtStatusMirror",
"senderControlType": "Edit",
"senderIsTarget": true
},
{
"seq": 35,
"rep": 2,
"label": "PropertyChanged:Name",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "chkToggle",
"senderControlType": "CheckBox",
"senderIsTarget": true,
"newValue": "Enable feature"
},
{
"seq": 36,
"rep": 2,
"label": "PropertyChanged:Name",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "chkToggle",
"senderControlType": "CheckBox",
"senderIsTarget": true,
"newValue": "Enable feature"
},
{
"seq": 37,
"rep": 2,
"label": "PropertyChanged:ValuePattern.Value",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "txtStatusMirror",
"senderControlType": "Edit",
"senderIsTarget": true
},
{
"seq": 38,
"rep": 2,
"label": "PropertyChanged:ValuePattern.Value",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "txtStatusMirror",
"senderControlType": "Edit",
"senderIsTarget": true
},
{
"seq": 39,
"rep": 2,
"label": "FocusChanged",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "txtValue",
"senderControlType": "Edit",
"senderIsTarget": true
},
{
"seq": 40,
"rep": 2,
"label": "FocusChanged",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "btnAction",
"senderControlType": "Button",
"senderIsTarget": true
},
{
"seq": 41,
"rep": 2,
"label": "AutomationEvent:Window_WindowClosed",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "frmScratchMain",
"senderControlType": "Window",
"senderIsTarget": true
},
{
"seq": 42,
"rep": 2,
"label": "AutomationEvent:Window_WindowOpened",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "frmScratchMain",
"senderControlType": "Window",
"senderIsTarget": true
},
{
"seq": 43,
"rep": 3,
"label": "PropertyChanged:ValuePattern.Value",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "txtValue",
"senderControlType": "Edit",
"senderIsTarget": true
},
{
"seq": 44,
"rep": 3,
"label": "PropertyChanged:ValuePattern.Value",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "txtValue",
"senderControlType": "Edit",
"senderIsTarget": true
},
{
"seq": 45,
"rep": 3,
"label": "PropertyChanged:Name",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "btnAction",
"senderControlType": "Button",
"senderIsTarget": true,
"newValue": "Do Action"
},
{
"seq": 46,
"rep": 3,
"label": "PropertyChanged:Name",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "btnAction",
"senderControlType": "Button",
"senderIsTarget": true,
"newValue": "Do Action"
},
{
"seq": 47,
"rep": 3,
"label": "PropertyChanged:ValuePattern.Value",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "txtStatusMirror",
"senderControlType": "Edit",
"senderIsTarget": true
},
{
"seq": 48,
"rep": 3,
"label": "PropertyChanged:ValuePattern.Value",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "txtStatusMirror",
"senderControlType": "Edit",
"senderIsTarget": true
},
{
"seq": 49,
"rep": 3,
"label": "PropertyChanged:Name",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "chkToggle",
"senderControlType": "CheckBox",
"senderIsTarget": true,
"newValue": "Enable feature"
},
{
"seq": 50,
"rep": 3,
"label": "PropertyChanged:Name",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "chkToggle",
"senderControlType": "CheckBox",
"senderIsTarget": true,
"newValue": "Enable feature"
},
{
"seq": 51,
"rep": 3,
"label": "PropertyChanged:ValuePattern.Value",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "txtStatusMirror",
"senderControlType": "Edit",
"senderIsTarget": true
},
{
"seq": 52,
"rep": 3,
"label": "PropertyChanged:ValuePattern.Value",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "txtStatusMirror",
"senderControlType": "Edit",
"senderIsTarget": true
},
{
"seq": 53,
"rep": 3,
"label": "FocusChanged",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "txtValue",
"senderControlType": "Edit",
"senderIsTarget": true
},
{
"seq": 54,
"rep": 3,
"label": "FocusChanged",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "btnAction",
"senderControlType": "Button",
"senderIsTarget": true
},
{
"seq": 55,
"rep": 3,
"label": "AutomationEvent:Window_WindowClosed",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "frmScratchMain",
"senderControlType": "Window",
"senderIsTarget": true
},
{
"seq": 56,
"rep": 3,
"label": "AutomationEvent:Window_WindowOpened",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "frmScratchMain",
"senderControlType": "Window",
"senderIsTarget": true
},
{
"seq": 57,
"rep": 4,
"label": "PropertyChanged:ValuePattern.Value",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "txtValue",
"senderControlType": "Edit",
"senderIsTarget": true
},
{
"seq": 58,
"rep": 4,
"label": "PropertyChanged:ValuePattern.Value",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "txtValue",
"senderControlType": "Edit",
"senderIsTarget": true
},
{
"seq": 59,
"rep": 4,
"label": "PropertyChanged:Name",
"threadId": <tid>,
"elapsedMs": <duration>,
"senderAutomationId": "btnAction",
"senderControlType": "Button",
"senderIsTarget": true,
"newValue": "Do Action"
}
]
}
}

View file

@ -1,893 +0,0 @@
{
"stack": "uia3-com",
"binding": "hand-declared ComImport, no GAC UIAutomationClient reference",
"coclass": "CUIAutomation8",
"mainThreadId": 4424,
"mainApartment": "MTA",
"discoveredPatternAvailabilityProperties": 35,
"result": {
"mode": "ids",
"propertyCount": 175,
"properties": [
{
"id": 30000,
"programmaticName": "RuntimeId"
},
{
"id": 30001,
"programmaticName": "BoundingRectangle"
},
{
"id": 30002,
"programmaticName": "ProcessId"
},
{
"id": 30003,
"programmaticName": "ControlType"
},
{
"id": 30004,
"programmaticName": "LocalizedControlType"
},
{
"id": 30005,
"programmaticName": "Name"
},
{
"id": 30006,
"programmaticName": "AcceleratorKey"
},
{
"id": 30007,
"programmaticName": "AccessKey"
},
{
"id": 30008,
"programmaticName": "HasKeyboardFocus"
},
{
"id": 30009,
"programmaticName": "IsKeyboardFocusable"
},
{
"id": 30010,
"programmaticName": "IsEnabled"
},
{
"id": 30011,
"programmaticName": "AutomationId"
},
{
"id": 30012,
"programmaticName": "ClassName"
},
{
"id": 30013,
"programmaticName": "HelpText"
},
{
"id": 30014,
"programmaticName": "ClickablePoint"
},
{
"id": 30015,
"programmaticName": "Culture"
},
{
"id": 30016,
"programmaticName": "IsControlElement"
},
{
"id": 30017,
"programmaticName": "IsContentElement"
},
{
"id": 30018,
"programmaticName": "LabeledBy"
},
{
"id": 30019,
"programmaticName": "IsPassword"
},
{
"id": 30020,
"programmaticName": "NativeWindowHandle"
},
{
"id": 30021,
"programmaticName": "ItemType"
},
{
"id": 30022,
"programmaticName": "IsOffscreen"
},
{
"id": 30023,
"programmaticName": "Orientation"
},
{
"id": 30024,
"programmaticName": "FrameworkId"
},
{
"id": 30025,
"programmaticName": "IsRequiredForForm"
},
{
"id": 30026,
"programmaticName": "ItemStatus"
},
{
"id": 30027,
"programmaticName": "IsDockPatternAvailable"
},
{
"id": 30028,
"programmaticName": "IsExpandCollapsePatternAvailable"
},
{
"id": 30029,
"programmaticName": "IsGridItemPatternAvailable"
},
{
"id": 30030,
"programmaticName": "IsGridPatternAvailable"
},
{
"id": 30031,
"programmaticName": "IsInvokePatternAvailable"
},
{
"id": 30032,
"programmaticName": "IsMultipleViewPatternAvailable"
},
{
"id": 30033,
"programmaticName": "IsRangeValuePatternAvailable"
},
{
"id": 30034,
"programmaticName": "IsScrollPatternAvailable"
},
{
"id": 30035,
"programmaticName": "IsScrollItemPatternAvailable"
},
{
"id": 30036,
"programmaticName": "IsSelectionItemPatternAvailable"
},
{
"id": 30037,
"programmaticName": "IsSelectionPatternAvailable"
},
{
"id": 30038,
"programmaticName": "IsTablePatternAvailable"
},
{
"id": 30039,
"programmaticName": "IsTableItemPatternAvailable"
},
{
"id": 30040,
"programmaticName": "IsTextPatternAvailable"
},
{
"id": 30041,
"programmaticName": "IsTogglePatternAvailable"
},
{
"id": 30042,
"programmaticName": "IsTransformPatternAvailable"
},
{
"id": 30043,
"programmaticName": "IsValuePatternAvailable"
},
{
"id": 30044,
"programmaticName": "IsWindowPatternAvailable"
},
{
"id": 30045,
"programmaticName": "ValuePattern.Value"
},
{
"id": 30046,
"programmaticName": "ValuePattern.IsReadOnly"
},
{
"id": 30047,
"programmaticName": "RangeValuePattern.Value"
},
{
"id": 30048,
"programmaticName": "RangeValuePattern.IsReadOnly"
},
{
"id": 30049,
"programmaticName": "RangeValuePattern.Minimum"
},
{
"id": 30050,
"programmaticName": "RangeValuePattern.Maximum"
},
{
"id": 30051,
"programmaticName": "RangeValuePattern.LargeChange"
},
{
"id": 30052,
"programmaticName": "RangeValuePattern.SmallChange"
},
{
"id": 30053,
"programmaticName": "ScrollPattern.HorizontalScrollPercent"
},
{
"id": 30054,
"programmaticName": "ScrollPattern.HorizontalViewSize"
},
{
"id": 30055,
"programmaticName": "ScrollPattern.VerticalScrollPercent"
},
{
"id": 30056,
"programmaticName": "ScrollPattern.VerticalViewSize"
},
{
"id": 30057,
"programmaticName": "ScrollPattern.HorizontallyScrollable"
},
{
"id": 30058,
"programmaticName": "ScrollPattern.VerticallyScrollable"
},
{
"id": 30059,
"programmaticName": "SelectionPattern.Selection"
},
{
"id": 30060,
"programmaticName": "SelectionPattern.CanSelectMultiple"
},
{
"id": 30061,
"programmaticName": "SelectionPattern.IsSelectionRequired"
},
{
"id": 30062,
"programmaticName": "GridPattern.RowCount"
},
{
"id": 30063,
"programmaticName": "GridPattern.ColumnCount"
},
{
"id": 30064,
"programmaticName": "GridItemPattern.Row"
},
{
"id": 30065,
"programmaticName": "GridItemPattern.Column"
},
{
"id": 30066,
"programmaticName": "GridItemPattern.RowSpan"
},
{
"id": 30067,
"programmaticName": "GridItemPattern.ColumnSpan"
},
{
"id": 30068,
"programmaticName": "GridItemPattern.Parent"
},
{
"id": 30069,
"programmaticName": "DockPattern.DockPosition"
},
{
"id": 30070,
"programmaticName": "ExpandCollapsePattern.ExpandCollapseState"
},
{
"id": 30071,
"programmaticName": "MultipleViewPattern.CurrentView"
},
{
"id": 30072,
"programmaticName": "MultipleViewPattern.SupportedViews"
},
{
"id": 30073,
"programmaticName": "WindowPattern.CanMaximize"
},
{
"id": 30074,
"programmaticName": "WindowPattern.CanMinimize"
},
{
"id": 30075,
"programmaticName": "WindowPattern.WindowVisualState"
},
{
"id": 30076,
"programmaticName": "WindowPattern.WindowInteractionState"
},
{
"id": 30077,
"programmaticName": "WindowPattern.IsModal"
},
{
"id": 30078,
"programmaticName": "WindowPattern.IsTopmost"
},
{
"id": 30079,
"programmaticName": "SelectionItemPattern.IsSelected"
},
{
"id": 30080,
"programmaticName": "SelectionItemPattern.SelectionContainer"
},
{
"id": 30081,
"programmaticName": "TablePattern.RowHeaders"
},
{
"id": 30082,
"programmaticName": "TablePattern.ColumnHeaders"
},
{
"id": 30083,
"programmaticName": "TablePattern.RowOrColumnMajor"
},
{
"id": 30084,
"programmaticName": "TableItemPattern.RowHeaderItems"
},
{
"id": 30085,
"programmaticName": "TableItemPattern.ColumnHeaderItems"
},
{
"id": 30086,
"programmaticName": "TogglePattern.ToggleState"
},
{
"id": 30087,
"programmaticName": "TransformPattern.CanMove"
},
{
"id": 30088,
"programmaticName": "TransformPattern.CanResize"
},
{
"id": 30089,
"programmaticName": "TransformPattern.CanRotate"
},
{
"id": 30090,
"programmaticName": "IsLegacyIAccessiblePatternAvailable"
},
{
"id": 30091,
"programmaticName": "LegacyIAccessiblePattern.ChildId"
},
{
"id": 30092,
"programmaticName": "LegacyIAccessiblePattern.Name"
},
{
"id": 30093,
"programmaticName": "LegacyIAccessiblePattern.Value"
},
{
"id": 30094,
"programmaticName": "LegacyIAccessiblePattern.Description"
},
{
"id": 30095,
"programmaticName": "LegacyIAccessiblePattern.Role"
},
{
"id": 30096,
"programmaticName": "LegacyIAccessiblePattern.State"
},
{
"id": 30097,
"programmaticName": "LegacyIAccessiblePattern.Help"
},
{
"id": 30098,
"programmaticName": "LegacyIAccessiblePattern.KeyboardShortcut"
},
{
"id": 30099,
"programmaticName": "LegacyIAccessiblePattern.Selection"
},
{
"id": 30100,
"programmaticName": "LegacyIAccessiblePattern.DefaultAction"
},
{
"id": 30101,
"programmaticName": "AriaRole"
},
{
"id": 30102,
"programmaticName": "AriaProperties"
},
{
"id": 30103,
"programmaticName": "IsDataValidForForm"
},
{
"id": 30104,
"programmaticName": "ControllerFor"
},
{
"id": 30105,
"programmaticName": "DescribedBy"
},
{
"id": 30106,
"programmaticName": "FlowsTo"
},
{
"id": 30107,
"programmaticName": "ProviderDescription"
},
{
"id": 30108,
"programmaticName": "IsItemContainerPatternAvailable"
},
{
"id": 30109,
"programmaticName": "IsVirtualizedItemPatternAvailable"
},
{
"id": 30110,
"programmaticName": "IsSynchronizedInputPatternAvailable"
},
{
"id": 30111,
"programmaticName": "OptimizeForVisualContent"
},
{
"id": 30112,
"programmaticName": "IsObjectModelPatternAvailable"
},
{
"id": 30113,
"programmaticName": "AnnotationPattern.AnnotationTypeId"
},
{
"id": 30114,
"programmaticName": "AnnotationPattern.AnnotationTypeName"
},
{
"id": 30115,
"programmaticName": "AnnotationPattern.Author"
},
{
"id": 30116,
"programmaticName": "AnnotationPattern.DateTime"
},
{
"id": 30117,
"programmaticName": "AnnotationPattern.Target"
},
{
"id": 30118,
"programmaticName": "IsAnnotationPatternAvailable"
},
{
"id": 30119,
"programmaticName": "IsTextPattern2Available"
},
{
"id": 30120,
"programmaticName": "StylesPattern.StyleId"
},
{
"id": 30121,
"programmaticName": "StylesPattern.StyleName"
},
{
"id": 30122,
"programmaticName": "StylesPattern.FillColor"
},
{
"id": 30123,
"programmaticName": "StylesPattern.FillPatternStyle"
},
{
"id": 30124,
"programmaticName": "StylesPattern.Shape"
},
{
"id": 30125,
"programmaticName": "StylesPattern.FillPatternColor"
},
{
"id": 30126,
"programmaticName": "StylesPattern.ExtendedProperties"
},
{
"id": 30127,
"programmaticName": "IsStylesPatternAvailable"
},
{
"id": 30128,
"programmaticName": "IsSpreadsheetPatternAvailable"
},
{
"id": 30129,
"programmaticName": "SpreadsheetItemPattern.Formula"
},
{
"id": 30130,
"programmaticName": "SpreadsheetItemPattern.AnnotationObjects"
},
{
"id": 30131,
"programmaticName": "SpreadsheetItemPattern.AnnotationTypes"
},
{
"id": 30132,
"programmaticName": "IsSpreadsheetItemPatternAvailable"
},
{
"id": 30133,
"programmaticName": "TransformPattern2.CanZoom"
},
{
"id": 30134,
"programmaticName": "IsTransformPattern2Available"
},
{
"id": 30135,
"programmaticName": "LiveSetting"
},
{
"id": 30136,
"programmaticName": "IsTextChildPatternAvailable"
},
{
"id": 30137,
"programmaticName": "IsDragPatternAvailable"
},
{
"id": 30138,
"programmaticName": "Drag.IsGrabbed"
},
{
"id": 30139,
"programmaticName": "Drag.DropEffect"
},
{
"id": 30140,
"programmaticName": "Drag.DropEffects"
},
{
"id": 30141,
"programmaticName": "IsDropTargetPatternAvailable"
},
{
"id": 30142,
"programmaticName": "DropTarget.DropTargetEffect"
},
{
"id": 30143,
"programmaticName": "DropTarget.DropTargetEffects"
},
{
"id": 30144,
"programmaticName": "Drag.GrabbedItems"
},
{
"id": 30145,
"programmaticName": "TransformPattern2.ZoomLevel"
},
{
"id": 30146,
"programmaticName": "TransformPattern2.ZoomMinimum"
},
{
"id": 30147,
"programmaticName": "TransformPattern2.ZoomMaximum"
},
{
"id": 30148,
"programmaticName": "FlowsFrom"
},
{
"id": 30149,
"programmaticName": "IsTextEditPatternAvailable"
},
{
"id": 30150,
"programmaticName": "IsPeripheral"
},
{
"id": 30151,
"programmaticName": "IsCustomNavigationPatternAvailable"
},
{
"id": 30152,
"programmaticName": "PositionInSet"
},
{
"id": 30153,
"programmaticName": "SizeOfSet"
},
{
"id": 30154,
"programmaticName": "Level"
},
{
"id": 30155,
"programmaticName": "AnnotationTypes"
},
{
"id": 30156,
"programmaticName": "AnnotationObjects"
},
{
"id": 30157,
"programmaticName": "LandmarkType"
},
{
"id": 30158,
"programmaticName": "LocalizedLandmarkType"
},
{
"id": 30159,
"programmaticName": "FullDescription"
},
{
"id": 30160,
"programmaticName": "FillColor"
},
{
"id": 30161,
"programmaticName": "OutlineColor"
},
{
"id": 30162,
"programmaticName": "FillType"
},
{
"id": 30163,
"programmaticName": "VisualEffects"
},
{
"id": 30164,
"programmaticName": "OutlineThickness"
},
{
"id": 30165,
"programmaticName": "CenterPoint"
},
{
"id": 30166,
"programmaticName": "Rotation"
},
{
"id": 30167,
"programmaticName": "Size"
},
{
"id": 30168,
"programmaticName": "IsSelectionPattern2Available"
},
{
"id": 30169,
"programmaticName": "Selection2.FirstSelectedItem"
},
{
"id": 30170,
"programmaticName": "Selection2.LastSelectedItem"
},
{
"id": 30171,
"programmaticName": "Selection2.CurrentSelectedItem"
},
{
"id": 30172,
"programmaticName": "Selection2.ItemCount"
},
{
"id": 30173,
"programmaticName": "HeadingLevel"
},
{
"id": 30174,
"programmaticName": "IsDialog"
}
],
"patterns": [
"10000=InvokePattern",
"10001=SelectionPattern",
"10002=ValuePattern",
"10003=RangeValuePattern",
"10004=ScrollPattern",
"10005=ExpandCollapsePattern",
"10006=GridPattern",
"10007=GridItemPattern",
"10008=MultipleViewPattern",
"10009=WindowPattern",
"10010=SelectionItemPattern",
"10011=DockPattern",
"10012=TablePattern",
"10013=TableItemPattern",
"10014=TextPattern",
"10015=TogglePattern",
"10016=TransformPattern",
"10017=ScrollItemPattern",
"10018=LegacyIAccessiblePattern",
"10019=ItemContainerPattern",
"10020=VirtualizedItemPattern",
"10021=SynchronizedInputPattern",
"10022=ObjectModelPattern",
"10023=AnnotationPattern",
"10024=TextPattern2",
"10025=StylesPattern",
"10026=SpreadsheetPattern",
"10027=SpreadsheetItemPattern",
"10028=TransformPattern2",
"10029=TextChildPattern",
"10030=DragPattern",
"10031=DropTargetPattern",
"10032=TextEditPattern",
"10033=CustomNavigationPattern",
"10034=SelectionPattern2"
],
"patternAvailabilityProperties": [
{
"pattern": "Annotation",
"availabilityPropertyId": 30118
},
{
"pattern": "CustomNavigation",
"availabilityPropertyId": 30151
},
{
"pattern": "Dock",
"availabilityPropertyId": 30027
},
{
"pattern": "Drag",
"availabilityPropertyId": 30137
},
{
"pattern": "DropTarget",
"availabilityPropertyId": 30141
},
{
"pattern": "ExpandCollapse",
"availabilityPropertyId": 30028
},
{
"pattern": "Grid",
"availabilityPropertyId": 30030
},
{
"pattern": "GridItem",
"availabilityPropertyId": 30029
},
{
"pattern": "Invoke",
"availabilityPropertyId": 30031
},
{
"pattern": "ItemContainer",
"availabilityPropertyId": 30108
},
{
"pattern": "LegacyIAccessible",
"availabilityPropertyId": 30090
},
{
"pattern": "MultipleView",
"availabilityPropertyId": 30032
},
{
"pattern": "ObjectModel",
"availabilityPropertyId": 30112
},
{
"pattern": "RangeValue",
"availabilityPropertyId": 30033
},
{
"pattern": "Scroll",
"availabilityPropertyId": 30034
},
{
"pattern": "ScrollItem",
"availabilityPropertyId": 30035
},
{
"pattern": "Selection",
"availabilityPropertyId": 30037
},
{
"pattern": "Selection2",
"availabilityPropertyId": 30168
},
{
"pattern": "SelectionItem",
"availabilityPropertyId": 30036
},
{
"pattern": "Spreadsheet",
"availabilityPropertyId": 30128
},
{
"pattern": "SpreadsheetItem",
"availabilityPropertyId": 30132
},
{
"pattern": "Styles",
"availabilityPropertyId": 30127
},
{
"pattern": "SynchronizedInput",
"availabilityPropertyId": 30110
},
{
"pattern": "Table",
"availabilityPropertyId": 30038
},
{
"pattern": "TableItem",
"availabilityPropertyId": 30039
},
{
"pattern": "Text",
"availabilityPropertyId": 30040
},
{
"pattern": "Text2",
"availabilityPropertyId": 30119
},
{
"pattern": "TextChild",
"availabilityPropertyId": 30136
},
{
"pattern": "TextEdit",
"availabilityPropertyId": 30149
},
{
"pattern": "Toggle",
"availabilityPropertyId": 30041
},
{
"pattern": "Transform",
"availabilityPropertyId": 30042
},
{
"pattern": "Transform2",
"availabilityPropertyId": 30134
},
{
"pattern": "Value",
"availabilityPropertyId": 30043
},
{
"pattern": "VirtualizedItem",
"availabilityPropertyId": 30109
},
{
"pattern": "Window",
"availabilityPropertyId": 30044
}
]
}
}

View file

@ -1,71 +0,0 @@
{
"target": "obsidian",
"obsidianPreexisting": false,
"obsidianVersion": "1.12.7.0",
"shim": {
"stack": "uia3-com",
"binding": "hand-declared ComImport, no GAC UIAutomationClient reference",
"coclass": "CUIAutomation8",
"mainThreadId": 7856,
"mainApartment": "MTA",
"discoveredPatternAvailabilityProperties": 35,
"result": {
"settleMs": 8000,
"viewsFirstContact": [
{
"view": "RawView",
"nodeCount": 13,
"deepestDepth": 9,
"truncated": false,
"elapsedMs": <duration>
},
{
"view": "ControlView",
"nodeCount": 9,
"deepestDepth": 7,
"truncated": false,
"elapsedMs": <duration>
},
{
"view": "ContentView",
"nodeCount": 9,
"deepestDepth": 7,
"truncated": false,
"elapsedMs": <duration>
}
],
"mode": "walker",
"label": "obsidian",
"hwnd": "<hwnd>",
"processId": <pid>,
"processName": "Obsidian",
"frameworkId": "Win32",
"maxNodes": 20000,
"maxDepth": 60,
"viewsAfterSettle": [
{
"view": "RawView",
"nodeCount": 172,
"deepestDepth": 21,
"truncated": false,
"elapsedMs": <duration>
},
{
"view": "ControlView",
"nodeCount": 133,
"deepestDepth": 14,
"truncated": false,
"elapsedMs": <duration>
},
{
"view": "ContentView",
"nodeCount": 133,
"deepestDepth": 14,
"truncated": false,
"elapsedMs": <duration>
}
],
"rawMinusControl": 39
}
}
}

View file

@ -1,194 +0,0 @@
{
"question": "does UIPI block SendInput and window messages from a Medium-integrity process into a High-integrity target, and are UIA reads still allowed",
"invariant": "Engineering Invariant #6 (UIPI)",
"stack": "managed (UIA reads) + raw Win32 SendInput/SendMessage/PostMessage",
"scope": "api-contract",
"boundaryOrigin": "manufactured by common.ps1 Start-MediumIntegrityProcess (DuplicateTokenEx + SetTokenInformation(TokenIntegrityLevel, S-1-16-8192) + CreateProcessAsUser), label asserted on read-back",
"boundaryRuledOut": [
"Start-Process -Verb RunAs: AAM off on this box (FilterAdministratorToken unset, RID 500 full token) so it yields High-vs-High",
"runas.exe /trustlevel:0x20000: restricts the token but leaves the mandatory label at S-1-16-12288"
],
"uacPolicy": {
"EnableLUA": 1,
"FilterAdministratorToken": "\u003cvalue not present\u003e",
"ConsentPromptBehaviorAdmin": 5,
"EnableInstallerDetection": 1,
"sessionIntegritySid": "S-1-16-12288",
"adminApprovalModeActive": false
},
"target": {
"process": "notepad.exe",
"processId": <pid>,
"integritySid": "S-1-16-12288",
"windowHandle": <hwnd>,
"editChild": {
"className": "Edit",
"windowHandle": <hwnd>
},
"launchedByThisProbe": true
},
"arms": [
{
"arm": "high",
"workerIntegritySid": "S-1-16-12288",
"workerLaunchError": "",
"marker": "HHH",
"parentForegroundHandoff": "target foreground restored by parent ShowWindow(SW_MINIMIZE-\u003eSW_RESTORE) on the probe-launched window; SetForegroundWindow never called",
"targetStateBeforeInjection": "U8-BASE",
"targetStateAfterInjection": "HHHPU8-BASE",
"targetStateChanged": true,
"markerPresentInTargetAfterwards": true,
"observedBy": "parent High-integrity WM_GETTEXT on the notepad Edit child, independent of SendInput return",
"worker": {
"arm": "high",
"processId": <pid>,
"addTypeCompilationAvailable": true,
"selfIntegritySid": "S-1-16-12288",
"targetIntegritySid": "S-1-16-12288",
"uiaRead": {
"fromHandle": "ok",
"name": "Untitled - Notepad",
"className": "Notepad",
"controlType": "Window",
"ownerProcessId": <pid>,
"boundingRectangle": {
"Left": 480,
"Top": 96,
"Width": 768,
"Height": 528
},
"rawViewNodes": 3,
"editPatterns": [
],
"editValueSeenByThisProcess": "\u003cno value/text pattern: Exception calling \"GetCurrentPattern\" with \"1\" argument(s): \"Unsupported Pattern.\"\u003e"
},
"wmGetTextFromWorker": {
"returned": "U8-BASE",
"sendMessageResult": 7,
"lastError": 0
},
"foregroundOwnerAtAssert": {
"processId": <pid>
},
"foregroundAssertPre": "ok",
"sendInputEventsAccepted": 6,
"sendInputLastError": 0,
"sendInputStructSize": 40,
"foregroundAssertPost": "ok",
"postMessageWmChar": {
"returned": true,
"lastError": 203
},
"wmGetTextAfterFromWorker": {
"returned": "HHHPU8-BASE",
"sendMessageResult": 11,
"lastError": 0
},
"uiaReadAfter": {
"fromHandle": "ok",
"name": "Untitled - Notepad",
"className": "Notepad",
"controlType": "Window",
"ownerProcessId": <pid>,
"boundingRectangle": {
"Left": 480,
"Top": 96,
"Width": 768,
"Height": 528
},
"rawViewNodes": 3,
"editPatterns": [
],
"editValueSeenByThisProcess": "\u003cno value/text pattern: Exception calling \"GetCurrentPattern\" with \"1\" argument(s): \"Unsupported Pattern.\"\u003e"
}
}
},
{
"arm": "medium",
"workerIntegritySid": "S-1-16-8192",
"workerLaunchError": "",
"marker": "MMM",
"parentForegroundHandoff": "target foreground restored by parent ShowWindow(SW_MINIMIZE-\u003eSW_RESTORE) on the probe-launched window; SetForegroundWindow never called",
"targetStateBeforeInjection": "U8-BASE",
"targetStateAfterInjection": "U8-BASE",
"targetStateChanged": false,
"markerPresentInTargetAfterwards": false,
"observedBy": "parent High-integrity WM_GETTEXT on the notepad Edit child, independent of SendInput return",
"worker": {
"arm": "medium",
"processId": <pid>,
"addTypeCompilationAvailable": false,
"addTypeCompilationError": "A required privilege is not held by the client",
"selfIntegritySid": "S-1-16-8192",
"targetIntegritySid": "S-1-16-12288",
"uiaRead": {
"fromHandle": "ok",
"name": "Untitled - Notepad",
"className": "Notepad",
"controlType": "Window",
"ownerProcessId": <pid>,
"boundingRectangle": {
"Left": 480,
"Top": 96,
"Width": 768,
"Height": 528
},
"rawViewNodes": 3,
"editPatterns": [
],
"editValueSeenByThisProcess": "\u003cno value/text pattern: Exception calling \"GetCurrentPattern\" with \"1\" argument(s): \"Unsupported Pattern.\"\u003e"
},
"wmGetTextFromWorker": {
"returned": "U8-BASE",
"sendMessageResult": 7,
"lastError": 0
},
"foregroundOwnerAtAssert": {
"processId": <pid>
},
"foregroundAssertPre": "ok",
"sendInputEventsAccepted": 6,
"sendInputLastError": 0,
"sendInputStructSize": 40,
"foregroundAssertPost": "ok",
"postMessageWmChar": {
"returned": false,
"lastError": 5
},
"wmGetTextAfterFromWorker": {
"returned": "U8-BASE",
"sendMessageResult": 7,
"lastError": 0
},
"uiaReadAfter": {
"fromHandle": "ok",
"name": "Untitled - Notepad",
"className": "Notepad",
"controlType": "Window",
"ownerProcessId": <pid>,
"boundingRectangle": {
"Left": 480,
"Top": 96,
"Width": 768,
"Height": 528
},
"rawViewNodes": 3,
"editPatterns": [
],
"editValueSeenByThisProcess": "\u003cno value/text pattern: Exception calling \"GetCurrentPattern\" with \"1\" argument(s): \"Unsupported Pattern.\"\u003e"
}
}
}
],
"findings": {
"uiaReadFromMediumAgainstHigh": "ok",
"sendInputFromHighLanded": true,
"sendInputFromMediumLanded": false,
"sendInputReturnIsNotEvidence": "SendInput reports the event count it accepted in both arms; only the re-read of the target distinguishes them",
"wmGetTextFromMediumBlocked": false
}
}

View file

@ -1,224 +0,0 @@
{
"question": "what bounds delta does DPI awareness produce between two processes reading the same element, and what scale can this environment actually apply",
"stack": "managed UIA for BoundingRectangle; raw Win32 for awareness, DisplayConfig and metrics",
"scope": "api-contract for the awareness APIs; app/provider and environment-specific for the achievable scale",
"session": {
"sessionId": 1,
"activeConsoleSessionId": 1,
"isRemoteSession": false,
"windowStation": "Console",
"note": "RDP session-transition behavior is not measurable here (physical console session); it closes at sub-phase 2.1 runner registration"
},
"displays": [
{
"primary": true,
"Left": 0,
"Top": 0,
"Width": 1640,
"Height": 736
}
],
"displayScaleCapability": {
"displayConfigGetResult": 0,
"scaleRelMin": 0,
"scaleRelCurrent": 0,
"scaleRelMax": 0,
"monitorRegistryKeys": [
"NOEDID_15AD_0405_00000000_000F0000_0^20ED182961F2CFDB3A2D28C95A99744F"
],
"stepsAvailableAboveRecommended": 0
},
"method": "two sibling powershell children read the same probe-launched notepad window and its Edit child; the unaware arm is forced with __COMPAT_LAYER=DPIUNAWARE, the aware arm calls SetProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2)",
"normalizationNote": "raw rectangles are bucketed to 8px by the KTD9 normalizer; delta fields are named deltaLeft/deltaTop/deltaWidth/deltaHeight, which the bucketing regex does not match, so the measured delta survives the normalized twin verbatim",
"passes": [
{
"pass": "recommended",
"requested": "display recommended scale (100%)",
"requestedScaleRel": 0,
"displayConfigSetResult": null,
"scaleRelReportedAfterwards": 0,
"registryDpiValueAfterwards": 0,
"effectiveDpiSeenByAwareArm": 96,
"scaleActuallyApplied": false,
"awareArm": {
"mode": "aware",
"processId": <pid>,
"awarenessAtStartup": "PROCESS_DPI_UNAWARE",
"setProcessDpiAwarenessContextPerMonitorV2": "succeeded",
"awarenessEffective": "PROCESS_PER_MONITOR_DPI_AWARE",
"monitorEffectiveDpiX": 96,
"monitorEffectiveDpiY": 96,
"logPixels": 96,
"screenMetricsCx": 1639,
"screenMetricsCy": 732,
"getWindowRect": {
"Left": 480,
"Top": 96,
"Right": 1248,
"Bottom": 624
},
"uiaBounds_window": {
"className": "Notepad",
"Left": 480,
"Top": 96,
"Width": 768,
"Height": 528
},
"uiaBounds_editChild": {
"className": "Edit",
"Left": 480,
"Top": 152,
"Width": 752,
"Height": 440
}
},
"unawareArm": {
"mode": "unaware",
"processId": <pid>,
"awarenessAtStartup": "PROCESS_DPI_UNAWARE",
"setProcessDpiAwarenessContextPerMonitorV2": "not attempted (unaware arm, forced with __COMPAT_LAYER=DPIUNAWARE)",
"awarenessEffective": "PROCESS_DPI_UNAWARE",
"monitorEffectiveDpiX": 96,
"monitorEffectiveDpiY": 96,
"logPixels": 96,
"screenMetricsCx": 1639,
"screenMetricsCy": 732,
"getWindowRect": {
"Left": 480,
"Top": 96,
"Right": 1248,
"Bottom": 624
},
"uiaBounds_window": {
"className": "Notepad",
"Left": 480,
"Top": 96,
"Width": 768,
"Height": 528
},
"uiaBounds_editChild": {
"className": "Edit",
"Left": 480,
"Top": 152,
"Width": 752,
"Height": 440
}
},
"windowBoundsDelta": {
"measurable": true,
"deltaLeft": 0,
"deltaTop": 0,
"deltaWidth": 0,
"deltaHeight": 0
},
"editChildBoundsDelta": {
"measurable": true,
"deltaLeft": 0,
"deltaTop": 0,
"deltaWidth": 0,
"deltaHeight": 0
}
},
{
"pass": "plus-one-step",
"requested": "one scale step above recommended (125%)",
"requestedScaleRel": 1,
"displayConfigSetResult": 0,
"scaleRelReportedAfterwards": 1,
"registryDpiValueAfterwards": 1,
"effectiveDpiSeenByAwareArm": 96,
"scaleActuallyApplied": false,
"awareArm": {
"mode": "aware",
"processId": <pid>,
"awarenessAtStartup": "PROCESS_DPI_UNAWARE",
"setProcessDpiAwarenessContextPerMonitorV2": "succeeded",
"awarenessEffective": "PROCESS_PER_MONITOR_DPI_AWARE",
"monitorEffectiveDpiX": 96,
"monitorEffectiveDpiY": 96,
"logPixels": 96,
"screenMetricsCx": 1639,
"screenMetricsCy": 732,
"getWindowRect": {
"Left": 480,
"Top": 96,
"Right": 1248,
"Bottom": 624
},
"uiaBounds_window": {
"className": "Notepad",
"Left": 480,
"Top": 96,
"Width": 768,
"Height": 528
},
"uiaBounds_editChild": {
"className": "Edit",
"Left": 480,
"Top": 152,
"Width": 752,
"Height": 440
}
},
"unawareArm": {
"mode": "unaware",
"processId": <pid>,
"awarenessAtStartup": "PROCESS_DPI_UNAWARE",
"setProcessDpiAwarenessContextPerMonitorV2": "not attempted (unaware arm, forced with __COMPAT_LAYER=DPIUNAWARE)",
"awarenessEffective": "PROCESS_DPI_UNAWARE",
"monitorEffectiveDpiX": 96,
"monitorEffectiveDpiY": 96,
"logPixels": 96,
"screenMetricsCx": 1639,
"screenMetricsCy": 732,
"getWindowRect": {
"Left": 480,
"Top": 96,
"Right": 1248,
"Bottom": 624
},
"uiaBounds_window": {
"className": "Notepad",
"Left": 480,
"Top": 96,
"Width": 768,
"Height": 528
},
"uiaBounds_editChild": {
"className": "Edit",
"Left": 480,
"Top": 152,
"Width": 752,
"Height": 440
}
},
"windowBoundsDelta": {
"measurable": true,
"deltaLeft": 0,
"deltaTop": 0,
"deltaWidth": 0,
"deltaHeight": 0
},
"editChildBoundsDelta": {
"measurable": true,
"deltaLeft": 0,
"deltaTop": 0,
"deltaWidth": 0,
"deltaHeight": 0
}
}
],
"teardown": {
"originalScaleRel": 0,
"displayConfigSetResult": 0,
"scaleRelReadBackAfterwards": 0,
"registryDpiValueAfterwards": 0,
"restored": true
},
"deferred": {
"row": "multi-monitor and mixed-DPI bounds behavior, and any non-zero aware-vs-unaware delta",
"reason": "single display, and that display reports no EDID so Windows offers exactly one scale step (min=cur=max); the 125% request is accepted by DisplayConfigSetDeviceInfo and persisted to the registry but never takes effect",
"closesAt": "sub-phase 2.4 (owns list_displays and per-monitor scale_factor) on a runner with a scalable display",
"neverLeaves": "Phase 2"
}
}

View file

@ -1,164 +0,0 @@
{
"question": "does Chromium 138+ expose a UIA tree to any UIA client with no flag, and does --force-renderer-accessibility still change anything",
"gradedAgainst": "the committed phases.md line that Chromium 138+ exposes a UIA tree to any UIA client with no flag (P2-O15 / 2.4)",
"stack": "both: managed System.Windows.Automation and the U7 UIA3 COM shim (KTD1 - the COM rows are the authoritative ones)",
"scope": "app/provider - specific to this Obsidian/Electron/Chromium build; the activation mechanism is Chromium behavior, not a Windows API contract",
"versions": {
"method": "user-agent string scanned out of the shipped Obsidian.exe on this installation",
"obsidianFileVersion": "1.12.7.0",
"chromiumVersion": "142.0.7444.265",
"electronVersion": "39.8.3",
"established": true,
"rejectedMethods": [
"ELECTRON_RUN_AS_NODE=1 Obsidian.exe -p process.versions produced no output on this VM",
"framework DLL file versions carry component versions, not the Chromium version"
]
},
"obsidianPreexistingAtProbeStart": false,
"method": "one fresh Obsidian instance per (stack x flag) cell, because the first UIA client to touch a renderer activates accessibility for that process",
"placementHazards": [
"U3: an earlier revision that left other windows on top of Obsidian held it at its first-contact node count through a full 8s settle and a 16s instrumented hold, three runs running. Minimizing the covering windows fixed it. The mechanism was NOT isolated (Chromium native-window occlusion tracking is the obvious candidate, unproven). Carried here as a probe-placement hazard, explicitly not a product claim.",
"U4: matching a bare Chrome_WidgetWin_1 window found an unrelated window and recorded 9 nodes / 0% coverage as if it were the Electron answer. This probe only accepts a window whose owning pid is one of the launched Obsidian pids, and reads the hosting pid back off the window."
],
"countStabilityNote": "settled node counts are content-dependent (U7 measured RawView 172 on a bare walker run, U3 measured 119 through its probe). The stable fact is the growth ratio across the settle, not the absolute count.",
"cells": [
{
"flagArm": "no-flag",
"stack": "managed",
"authoritative": false,
"windowClassName": "Chrome_WidgetWin_1",
"windowHandle": <hwnd>,
"windowHost": {
"processId": <pid>
},
"latencyObsidianProcessCountAtWindowDiscovery": <duration>,
"foregroundOwner": {
"processId": <pid>
},
"settleMs": 8000,
"firstContact": {
"latencyFirstContactRawViewNodes": <duration>,
"latencyFirstContactRawViewRefableNodes": <duration>,
"latencyFirstContactControlViewNodes": <duration>,
"latencyFirstContactControlViewRefableNodes": <duration>
},
"afterSettle": {
"settledRawViewNodes": 172,
"settledRawViewRefableNodes": 172,
"settledControlViewNodes": 133,
"settledControlViewRefableNodes": 133
},
"latencyRawViewGrowthRatio": <duration>,
"activatedWithoutFlag": true
},
{
"flagArm": "no-flag",
"stack": "uia3-com",
"authoritative": true,
"windowClassName": "Chrome_WidgetWin_1",
"windowHandle": <hwnd>,
"windowHost": {
"processId": <pid>
},
"latencyObsidianProcessCountAtWindowDiscovery": <duration>,
"foregroundOwner": {
"processId": <pid>
},
"settleMs": 8000,
"firstContact": {
"latencyFirstContactRawViewNodes": <duration>,
"latencyFirstContactControlViewNodes": <duration>,
"latencyFirstContactContentViewNodes": <duration>
},
"afterSettle": {
"settledRawViewNodes": 172,
"settledControlViewNodes": 133,
"settledContentViewNodes": 133,
"settledRefableNodesWithAnyPattern": 171,
"settledRefableNodesExcludingLegacy": 171
},
"censusNote": "census ran in a second shim process against the already-activated instance, so its counts are settled counts; per-element rows are deliberately not captured (R11: Obsidian note titles are content)",
"latencyRawViewGrowthRatio": <duration>,
"activatedWithoutFlag": true
},
{
"flagArm": "force-renderer-accessibility",
"stack": "managed",
"authoritative": false,
"windowClassName": "Chrome_WidgetWin_1",
"windowHandle": <hwnd>,
"windowHost": {
"processId": <pid>
},
"latencyObsidianProcessCountAtWindowDiscovery": <duration>,
"foregroundOwner": {
"processId": <pid>
},
"settleMs": 8000,
"firstContact": {
"latencyFirstContactRawViewNodes": <duration>,
"latencyFirstContactRawViewRefableNodes": <duration>,
"latencyFirstContactControlViewNodes": <duration>,
"latencyFirstContactControlViewRefableNodes": <duration>
},
"afterSettle": {
"settledRawViewNodes": 172,
"settledRawViewRefableNodes": 172,
"settledControlViewNodes": 133,
"settledControlViewRefableNodes": 133
},
"latencyRawViewGrowthRatio": <duration>,
"activatedWithoutFlag": false
},
{
"flagArm": "force-renderer-accessibility",
"stack": "uia3-com",
"authoritative": true,
"windowClassName": "Chrome_WidgetWin_1",
"windowHandle": <hwnd>,
"windowHost": {
"processId": <pid>
},
"latencyObsidianProcessCountAtWindowDiscovery": <duration>,
"foregroundOwner": {
"processId": <pid>
},
"settleMs": 8000,
"firstContact": {
"latencyFirstContactRawViewNodes": <duration>,
"latencyFirstContactControlViewNodes": <duration>,
"latencyFirstContactContentViewNodes": <duration>
},
"afterSettle": {
"settledRawViewNodes": 172,
"settledControlViewNodes": 133,
"settledContentViewNodes": 133,
"settledRefableNodesWithAnyPattern": 172,
"settledRefableNodesExcludingLegacy": 172
},
"censusNote": "census ran in a second shim process against the already-activated instance, so its counts are settled counts; per-element rows are deliberately not captured (R11: Obsidian note titles are content)",
"latencyRawViewGrowthRatio": <duration>,
"activatedWithoutFlag": false
}
],
"findings": {
"managedActivatesWithoutFlag": true,
"comActivatesWithoutFlag": true,
"clientStackDivergence": false,
"latencyComRawViewNoFlagFirstContact": <duration>,
"latencyComRawViewWithFlagFirstContact": <duration>,
"latencyManagedRawViewNoFlagFirstContact": <duration>,
"latencyManagedRawViewWithFlagFirstContact": <duration>,
"settledComRawViewNoFlag": 172,
"settledComRawViewWithFlag": 172,
"settledManagedRawViewNoFlag": 172,
"settledManagedRawViewWithFlag": 172,
"settledCountsMatchAcrossFlagArms": true,
"firstContactCountsAreRunVarying": "first-contact counts are a race against Chromium async tree construction and are named latency* so the KTD9 normalizer canonicalizes them; the raw samples stay in this capture, the settled counts are the stable evidence",
"flagVerdict": "partially useful - redundant for eventual tree exposure: on Chromium 142.0.7444.265 both client stacks reach the same settled RawView count with no flag, so the phases.md claim holds for exposure. It is not redundant for first-contact readiness: without the flag first contact is deterministically the small pre-activation shell on every run and both stacks, while with the flag first contact is a race against the async tree build and was observed anywhere from a fraction of the settled count to nearly all of it. Neither arm removes the need to settle before trusting a first snapshot.",
"supersededPreFinding": "the plan pre-finding (8 managed descendants, stable at 2/5/10s, candidate CONTRADICTS) is superseded: it was measured through an occluded window with a managed client, and neither the occlusion nor the settle window was controlled"
},
"teardown": {
"allObsidianProcessesTerminated": true
}
}

View file

@ -1,491 +0,0 @@
{
"Experiment": "DACL of a plain leaf vs a leaf under a protected parent, plus the full ancestor chain",
"Question": "does the leaf alone or the ancestor chain carry the meaningful restriction",
"PlainLeaf": {
"Path": "<localappdata>\\Temp\\<tempfile>",
"IsDirectory": false,
"OwnerSid": "S-1-5-32-544",
"OwnerAccount": "BUILTIN\\Administradores",
"InheritanceProtected": false,
"AceCount": 3,
"InheritedAceCount": 3,
"ExplicitAceCount": 0,
"UntrustedWriteGrants": [
],
"Sddl": "O:BAG:S-1-5-21-<redacted>-513D:(A;ID;FA;;;SY)(A;ID;FA;;;BA)(A;ID;FA;;;LA)",
"Aces": [
{
"IdentitySid": "S-1-5-18",
"IdentityAccount": "NT AUTHORITY\\SYSTEM",
"Rights": "FullControl",
"RightsMask": "0x001F01FF",
"AccessType": "Allow",
"InheritedAce": true,
"InheritanceFlags": "None",
"PropagationFlags": "None"
},
{
"IdentitySid": "S-1-5-32-544",
"IdentityAccount": "BUILTIN\\Administradores",
"Rights": "FullControl",
"RightsMask": "0x001F01FF",
"AccessType": "Allow",
"InheritedAce": true,
"InheritanceFlags": "None",
"PropagationFlags": "None"
},
{
"IdentitySid": "S-1-5-21-<redacted>-500",
"IdentityAccount": "<machine>\\<user>",
"Rights": "FullControl",
"RightsMask": "0x001F01FF",
"AccessType": "Allow",
"InheritedAce": true,
"InheritanceFlags": "None",
"PropagationFlags": "None"
}
]
},
"PlainLeafAllAcesInherited": true,
"PlainAncestorChain": [
{
"Path": "<localappdata>\\Temp\\<tempfile>",
"IsDirectory": true,
"OwnerSid": "S-1-5-32-544",
"OwnerAccount": "BUILTIN\\Administradores",
"InheritanceProtected": false,
"AceCount": 3,
"InheritedAceCount": 3,
"ExplicitAceCount": 0,
"UntrustedWriteGrants": [
],
"Sddl": "O:BAG:S-1-5-21-<redacted>-513D:(A;OICIID;FA;;;SY)(A;OICIID;FA;;;BA)(A;OICIID;FA;;;LA)",
"Aces": [
{
"IdentitySid": "S-1-5-18",
"IdentityAccount": "NT AUTHORITY\\SYSTEM",
"Rights": "FullControl",
"RightsMask": "0x001F01FF",
"AccessType": "Allow",
"InheritedAce": true,
"InheritanceFlags": "ContainerInherit, ObjectInherit",
"PropagationFlags": "None"
},
{
"IdentitySid": "S-1-5-32-544",
"IdentityAccount": "BUILTIN\\Administradores",
"Rights": "FullControl",
"RightsMask": "0x001F01FF",
"AccessType": "Allow",
"InheritedAce": true,
"InheritanceFlags": "ContainerInherit, ObjectInherit",
"PropagationFlags": "None"
},
{
"IdentitySid": "S-1-5-21-<redacted>-500",
"IdentityAccount": "<machine>\\<user>",
"Rights": "FullControl",
"RightsMask": "0x001F01FF",
"AccessType": "Allow",
"InheritedAce": true,
"InheritanceFlags": "ContainerInherit, ObjectInherit",
"PropagationFlags": "None"
}
]
},
{
"Path": "<localappdata>\\Temp",
"IsDirectory": true,
"OwnerSid": "S-1-5-32-544",
"OwnerAccount": "BUILTIN\\Administradores",
"InheritanceProtected": false,
"AceCount": 3,
"InheritedAceCount": 3,
"ExplicitAceCount": 0,
"UntrustedWriteGrants": [
],
"Sddl": "O:BAG:S-1-5-21-<redacted>-513D:(A;OICIID;FA;;;SY)(A;OICIID;FA;;;BA)(A;OICIID;FA;;;LA)",
"Aces": [
{
"IdentitySid": "S-1-5-18",
"IdentityAccount": "NT AUTHORITY\\SYSTEM",
"Rights": "FullControl",
"RightsMask": "0x001F01FF",
"AccessType": "Allow",
"InheritedAce": true,
"InheritanceFlags": "ContainerInherit, ObjectInherit",
"PropagationFlags": "None"
},
{
"IdentitySid": "S-1-5-32-544",
"IdentityAccount": "BUILTIN\\Administradores",
"Rights": "FullControl",
"RightsMask": "0x001F01FF",
"AccessType": "Allow",
"InheritedAce": true,
"InheritanceFlags": "ContainerInherit, ObjectInherit",
"PropagationFlags": "None"
},
{
"IdentitySid": "S-1-5-21-<redacted>-500",
"IdentityAccount": "<machine>\\<user>",
"Rights": "FullControl",
"RightsMask": "0x001F01FF",
"AccessType": "Allow",
"InheritedAce": true,
"InheritanceFlags": "ContainerInherit, ObjectInherit",
"PropagationFlags": "None"
}
]
},
{
"Path": "<localappdata>",
"IsDirectory": true,
"OwnerSid": "S-1-5-32-544",
"OwnerAccount": "BUILTIN\\Administradores",
"InheritanceProtected": false,
"AceCount": 3,
"InheritedAceCount": 3,
"ExplicitAceCount": 0,
"UntrustedWriteGrants": [
],
"Sddl": "O:BAG:S-1-5-21-<redacted>-513D:(A;OICIID;FA;;;SY)(A;OICIID;FA;;;BA)(A;OICIID;FA;;;LA)",
"Aces": [
{
"IdentitySid": "S-1-5-18",
"IdentityAccount": "NT AUTHORITY\\SYSTEM",
"Rights": "FullControl",
"RightsMask": "0x001F01FF",
"AccessType": "Allow",
"InheritedAce": true,
"InheritanceFlags": "ContainerInherit, ObjectInherit",
"PropagationFlags": "None"
},
{
"IdentitySid": "S-1-5-32-544",
"IdentityAccount": "BUILTIN\\Administradores",
"Rights": "FullControl",
"RightsMask": "0x001F01FF",
"AccessType": "Allow",
"InheritedAce": true,
"InheritanceFlags": "ContainerInherit, ObjectInherit",
"PropagationFlags": "None"
},
{
"IdentitySid": "S-1-5-21-<redacted>-500",
"IdentityAccount": "<machine>\\<user>",
"Rights": "FullControl",
"RightsMask": "0x001F01FF",
"AccessType": "Allow",
"InheritedAce": true,
"InheritanceFlags": "ContainerInherit, ObjectInherit",
"PropagationFlags": "None"
}
]
},
{
"Path": "<userprofile>\\AppData",
"IsDirectory": true,
"OwnerSid": "S-1-5-32-544",
"OwnerAccount": "BUILTIN\\Administradores",
"InheritanceProtected": false,
"AceCount": 3,
"InheritedAceCount": 3,
"ExplicitAceCount": 0,
"UntrustedWriteGrants": [
],
"Sddl": "O:BAG:S-1-5-21-<redacted>-513D:(A;OICIID;FA;;;SY)(A;OICIID;FA;;;BA)(A;OICIID;FA;;;LA)",
"Aces": [
{
"IdentitySid": "S-1-5-18",
"IdentityAccount": "NT AUTHORITY\\SYSTEM",
"Rights": "FullControl",
"RightsMask": "0x001F01FF",
"AccessType": "Allow",
"InheritedAce": true,
"InheritanceFlags": "ContainerInherit, ObjectInherit",
"PropagationFlags": "None"
},
{
"IdentitySid": "S-1-5-32-544",
"IdentityAccount": "BUILTIN\\Administradores",
"Rights": "FullControl",
"RightsMask": "0x001F01FF",
"AccessType": "Allow",
"InheritedAce": true,
"InheritanceFlags": "ContainerInherit, ObjectInherit",
"PropagationFlags": "None"
},
{
"IdentitySid": "S-1-5-21-<redacted>-500",
"IdentityAccount": "<machine>\\<user>",
"Rights": "FullControl",
"RightsMask": "0x001F01FF",
"AccessType": "Allow",
"InheritedAce": true,
"InheritanceFlags": "ContainerInherit, ObjectInherit",
"PropagationFlags": "None"
}
]
},
{
"Path": "<userprofile>",
"IsDirectory": true,
"OwnerSid": "S-1-5-32-544",
"OwnerAccount": "BUILTIN\\Administradores",
"InheritanceProtected": true,
"AceCount": 3,
"InheritedAceCount": 0,
"ExplicitAceCount": 3,
"UntrustedWriteGrants": [
],
"Sddl": "O:BAG:SYD:P(A;OICI;FA;;;SY)(A;OICI;FA;;;BA)(A;OICI;FA;;;LA)",
"Aces": [
{
"IdentitySid": "S-1-5-18",
"IdentityAccount": "NT AUTHORITY\\SYSTEM",
"Rights": "FullControl",
"RightsMask": "0x001F01FF",
"AccessType": "Allow",
"InheritedAce": false,
"InheritanceFlags": "ContainerInherit, ObjectInherit",
"PropagationFlags": "None"
},
{
"IdentitySid": "S-1-5-32-544",
"IdentityAccount": "BUILTIN\\Administradores",
"Rights": "FullControl",
"RightsMask": "0x001F01FF",
"AccessType": "Allow",
"InheritedAce": false,
"InheritanceFlags": "ContainerInherit, ObjectInherit",
"PropagationFlags": "None"
},
{
"IdentitySid": "S-1-5-21-<redacted>-500",
"IdentityAccount": "<machine>\\<user>",
"Rights": "FullControl",
"RightsMask": "0x001F01FF",
"AccessType": "Allow",
"InheritedAce": false,
"InheritanceFlags": "ContainerInherit, ObjectInherit",
"PropagationFlags": "None"
}
]
},
{
"Path": "C:\\Users",
"IsDirectory": true,
"OwnerSid": "S-1-5-18",
"OwnerAccount": "NT AUTHORITY\\SYSTEM",
"InheritanceProtected": true,
"AceCount": 6,
"InheritedAceCount": 0,
"ExplicitAceCount": 6,
"UntrustedWriteGrants": [
],
"Sddl": "O:SYG:SYD:PAI(A;OICIIO;GXGR;;;WD)(A;;0x1200a9;;;WD)(A;OICI;FA;;;SY)(A;OICI;FA;;;BA)(A;;0x1200a9;;;BU)(A;OICIIO;GXGR;;;BU)",
"Aces": [
{
"IdentitySid": "S-1-1-0",
"IdentityAccount": "Todos",
"Rights": "-1610612736",
"RightsMask": "0xA0000000",
"AccessType": "Allow",
"InheritedAce": false,
"InheritanceFlags": "ContainerInherit, ObjectInherit",
"PropagationFlags": "InheritOnly"
},
{
"IdentitySid": "S-1-1-0",
"IdentityAccount": "Todos",
"Rights": "ReadAndExecute, Synchronize",
"RightsMask": "0x001200A9",
"AccessType": "Allow",
"InheritedAce": false,
"InheritanceFlags": "None",
"PropagationFlags": "None"
},
{
"IdentitySid": "S-1-5-18",
"IdentityAccount": "NT AUTHORITY\\SYSTEM",
"Rights": "FullControl",
"RightsMask": "0x001F01FF",
"AccessType": "Allow",
"InheritedAce": false,
"InheritanceFlags": "ContainerInherit, ObjectInherit",
"PropagationFlags": "None"
},
{
"IdentitySid": "S-1-5-32-544",
"IdentityAccount": "BUILTIN\\Administradores",
"Rights": "FullControl",
"RightsMask": "0x001F01FF",
"AccessType": "Allow",
"InheritedAce": false,
"InheritanceFlags": "ContainerInherit, ObjectInherit",
"PropagationFlags": "None"
},
{
"IdentitySid": "S-1-5-32-545",
"IdentityAccount": "BUILTIN\\Usuarios",
"Rights": "ReadAndExecute, Synchronize",
"RightsMask": "0x001200A9",
"AccessType": "Allow",
"InheritedAce": false,
"InheritanceFlags": "None",
"PropagationFlags": "None"
},
{
"IdentitySid": "S-1-5-32-545",
"IdentityAccount": "BUILTIN\\Usuarios",
"Rights": "-1610612736",
"RightsMask": "0xA0000000",
"AccessType": "Allow",
"InheritedAce": false,
"InheritanceFlags": "ContainerInherit, ObjectInherit",
"PropagationFlags": "InheritOnly"
}
]
},
{
"Path": "C:\\",
"IsDirectory": true,
"OwnerSid": "S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464",
"OwnerAccount": "NT SERVICE\\TrustedInstaller",
"InheritanceProtected": true,
"AceCount": 6,
"InheritedAceCount": 0,
"ExplicitAceCount": 6,
"UntrustedWriteGrants": [
"BUILTIN\\Usuarios"
],
"Sddl": "O:S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464G:S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464D:PAI(A;OICIIO;GA;;;CO)(A;OICI;FA;;;SY)(A;OICI;FA;;;BA)(A;CI;LC;;;BU)(A;CIIO;DC;;;BU)(A;OICI;0x1200a9;;;BU)",
"Aces": [
{
"IdentitySid": "S-1-3-0",
"IdentityAccount": "CREATOR OWNER",
"Rights": "268435456",
"RightsMask": "0x10000000",
"AccessType": "Allow",
"InheritedAce": false,
"InheritanceFlags": "ContainerInherit, ObjectInherit",
"PropagationFlags": "InheritOnly"
},
{
"IdentitySid": "S-1-5-18",
"IdentityAccount": "NT AUTHORITY\\SYSTEM",
"Rights": "FullControl",
"RightsMask": "0x001F01FF",
"AccessType": "Allow",
"InheritedAce": false,
"InheritanceFlags": "ContainerInherit, ObjectInherit",
"PropagationFlags": "None"
},
{
"IdentitySid": "S-1-5-32-544",
"IdentityAccount": "BUILTIN\\Administradores",
"Rights": "FullControl",
"RightsMask": "0x001F01FF",
"AccessType": "Allow",
"InheritedAce": false,
"InheritanceFlags": "ContainerInherit, ObjectInherit",
"PropagationFlags": "None"
},
{
"IdentitySid": "S-1-5-32-545",
"IdentityAccount": "BUILTIN\\Usuarios",
"Rights": "AppendData",
"RightsMask": "0x00000004",
"AccessType": "Allow",
"InheritedAce": false,
"InheritanceFlags": "ContainerInherit",
"PropagationFlags": "None"
},
{
"IdentitySid": "S-1-5-32-545",
"IdentityAccount": "BUILTIN\\Usuarios",
"Rights": "CreateFiles",
"RightsMask": "0x00000002",
"AccessType": "Allow",
"InheritedAce": false,
"InheritanceFlags": "ContainerInherit",
"PropagationFlags": "InheritOnly"
},
{
"IdentitySid": "S-1-5-32-545",
"IdentityAccount": "BUILTIN\\Usuarios",
"Rights": "ReadAndExecute, Synchronize",
"RightsMask": "0x001200A9",
"AccessType": "Allow",
"InheritedAce": false,
"InheritanceFlags": "ContainerInherit, ObjectInherit",
"PropagationFlags": "None"
}
]
}
],
"PermissiveAncestors": [
"C:\\ -\u003e BUILTIN\\Usuarios"
],
"ProtectedParent": {
"Path": "<localappdata>\\Temp\\<tempfile>",
"IsDirectory": true,
"OwnerSid": "S-1-5-32-544",
"OwnerAccount": "BUILTIN\\Administradores",
"InheritanceProtected": true,
"AceCount": 1,
"InheritedAceCount": 0,
"ExplicitAceCount": 1,
"UntrustedWriteGrants": [
],
"Sddl": "O:BAG:S-1-5-21-<redacted>-513D:PAI(A;OICI;FA;;;LA)",
"Aces": [
{
"IdentitySid": "S-1-5-21-<redacted>-500",
"IdentityAccount": "<machine>\\<user>",
"Rights": "FullControl",
"RightsMask": "0x001F01FF",
"AccessType": "Allow",
"InheritedAce": false,
"InheritanceFlags": "ContainerInherit, ObjectInherit",
"PropagationFlags": "None"
}
]
},
"ProtectedLeaf": {
"Path": "<localappdata>\\Temp\\<tempfile>",
"IsDirectory": false,
"OwnerSid": "S-1-5-32-544",
"OwnerAccount": "BUILTIN\\Administradores",
"InheritanceProtected": false,
"AceCount": 1,
"InheritedAceCount": 1,
"ExplicitAceCount": 0,
"UntrustedWriteGrants": [
],
"Sddl": "O:BAG:S-1-5-21-<redacted>-513D:AI(A;ID;FA;;;LA)",
"Aces": [
{
"IdentitySid": "S-1-5-21-<redacted>-500",
"IdentityAccount": "<machine>\\<user>",
"Rights": "FullControl",
"RightsMask": "0x001F01FF",
"AccessType": "Allow",
"InheritedAce": true,
"InheritanceFlags": "None",
"PropagationFlags": "None"
}
]
},
"ProtectedLeafAllAcesInherited": true
}

View file

@ -1,283 +0,0 @@
{
"Experiment": "GetFileInformationByHandleEx(FileRemoteProtocolInfo, FILE_INFO_BY_HANDLE_CLASS 13) locality classification",
"Question": "can FileRemoteProtocolInfo distinguish local from remote volumes on this build",
"ControlClass": "FileBasicInfo (class 0) on the same handle, proving the call plumbing",
"OutOfRangeControlClass": "class 55 (past MaximumFileInfoByHandleClass) on the same handle, testing whether ERROR_INVALID_PARAMETER is specific to locality",
"BufferSize": "sizeof(FILE_REMOTE_PROTOCOL_INFO) = 116 bytes",
"LocalTargetsSucceeding": 0,
"RemoteTargetsSucceeding": 3,
"DistinguishesLocalFromRemote": true,
"ErrorCodeIsAmbiguous": 6,
"Targets": [
{
"Label": "local-ntfs-temp-file",
"Target": "<localappdata>\\Temp\\<tempfile>",
"DriveTypeName": "DRIVE_FIXED",
"DriveTypeValue": 3,
"PathIsNetworkPath": false,
"OpenSucceeded": true,
"OpenError": 0,
"OpenErrorName": "ERROR_SUCCESS",
"ControlCallSucceeded": true,
"ControlErrorName": "ERROR_SUCCESS",
"ControlDetail": "FileBasicInfo.FileAttributes=0x20",
"InfoClass": 13,
"OutOfRangeClassSucceeded": false,
"OutOfRangeClassError": 87,
"OutOfRangeClassErrorName": "ERROR_INVALID_PARAMETER",
"RemoteCallSucceeded": false,
"RemoteError": 87,
"RemoteErrorName": "ERROR_INVALID_PARAMETER",
"RemoteMessage": "The parameter is incorrect",
"StructureVersion": 0,
"StructureSize": 0,
"Protocol": null,
"ProtocolName": null,
"ProtocolMajor": 0,
"ProtocolMinor": 0,
"ProtocolRevision": 0,
"RemoteFlags": null,
"RemoteFlagNames": null
},
{
"Label": "local-ntfs-temp-dir",
"Target": "<localappdata>\\Temp\\<tempfile>",
"DriveTypeName": "DRIVE_FIXED",
"DriveTypeValue": 3,
"PathIsNetworkPath": false,
"OpenSucceeded": true,
"OpenError": 0,
"OpenErrorName": "ERROR_SUCCESS",
"ControlCallSucceeded": true,
"ControlErrorName": "ERROR_SUCCESS",
"ControlDetail": "FileBasicInfo.FileAttributes=0x10",
"InfoClass": 13,
"OutOfRangeClassSucceeded": false,
"OutOfRangeClassError": 87,
"OutOfRangeClassErrorName": "ERROR_INVALID_PARAMETER",
"RemoteCallSucceeded": false,
"RemoteError": 87,
"RemoteErrorName": "ERROR_INVALID_PARAMETER",
"RemoteMessage": "The parameter is incorrect",
"StructureVersion": 0,
"StructureSize": 0,
"Protocol": null,
"ProtocolName": null,
"ProtocolMajor": 0,
"ProtocolMinor": 0,
"ProtocolRevision": 0,
"RemoteFlags": null,
"RemoteFlagNames": null
},
{
"Label": "local-ntfs-system-file",
"Target": "C:\\Windows\\System32\\notepad.exe",
"DriveTypeName": "DRIVE_FIXED",
"DriveTypeValue": 3,
"PathIsNetworkPath": false,
"OpenSucceeded": true,
"OpenError": 0,
"OpenErrorName": "ERROR_SUCCESS",
"ControlCallSucceeded": true,
"ControlErrorName": "ERROR_SUCCESS",
"ControlDetail": "FileBasicInfo.FileAttributes=0x20",
"InfoClass": 13,
"OutOfRangeClassSucceeded": false,
"OutOfRangeClassError": 87,
"OutOfRangeClassErrorName": "ERROR_INVALID_PARAMETER",
"RemoteCallSucceeded": false,
"RemoteError": 87,
"RemoteErrorName": "ERROR_INVALID_PARAMETER",
"RemoteMessage": "The parameter is incorrect",
"StructureVersion": 0,
"StructureSize": 0,
"Protocol": null,
"ProtocolName": null,
"ProtocolMajor": 0,
"ProtocolMinor": 0,
"ProtocolRevision": 0,
"RemoteFlags": null,
"RemoteFlagNames": null
},
{
"Label": "local-ntfs-volume-root",
"Target": "C:\\",
"DriveTypeName": "DRIVE_FIXED",
"DriveTypeValue": 3,
"PathIsNetworkPath": false,
"OpenSucceeded": true,
"OpenError": 0,
"OpenErrorName": "ERROR_SUCCESS",
"ControlCallSucceeded": true,
"ControlErrorName": "ERROR_SUCCESS",
"ControlDetail": "FileBasicInfo.FileAttributes=0x16",
"InfoClass": 13,
"OutOfRangeClassSucceeded": false,
"OutOfRangeClassError": 87,
"OutOfRangeClassErrorName": "ERROR_INVALID_PARAMETER",
"RemoteCallSucceeded": false,
"RemoteError": 87,
"RemoteErrorName": "ERROR_INVALID_PARAMETER",
"RemoteMessage": "The parameter is incorrect",
"StructureVersion": 0,
"StructureSize": 0,
"Protocol": null,
"ProtocolName": null,
"ProtocolMajor": 0,
"ProtocolMinor": 0,
"ProtocolRevision": 0,
"RemoteFlags": null,
"RemoteFlagNames": null
},
{
"Label": "local-udf-cdrom-root",
"Target": "D:\\",
"DriveTypeName": "DRIVE_CDROM",
"DriveTypeValue": 5,
"PathIsNetworkPath": false,
"OpenSucceeded": true,
"OpenError": 0,
"OpenErrorName": "ERROR_SUCCESS",
"ControlCallSucceeded": true,
"ControlErrorName": "ERROR_SUCCESS",
"ControlDetail": "FileBasicInfo.FileAttributes=0x11",
"InfoClass": 13,
"OutOfRangeClassSucceeded": false,
"OutOfRangeClassError": 87,
"OutOfRangeClassErrorName": "ERROR_INVALID_PARAMETER",
"RemoteCallSucceeded": false,
"RemoteError": 87,
"RemoteErrorName": "ERROR_INVALID_PARAMETER",
"RemoteMessage": "The parameter is incorrect",
"StructureVersion": 0,
"StructureSize": 0,
"Protocol": null,
"ProtocolName": null,
"ProtocolMajor": 0,
"ProtocolMinor": 0,
"ProtocolRevision": 0,
"RemoteFlags": null,
"RemoteFlagNames": null
},
{
"Label": "local-udf-cdrom-file",
"Target": "D:\\autorun.inf",
"DriveTypeName": "DRIVE_CDROM",
"DriveTypeValue": 5,
"PathIsNetworkPath": false,
"OpenSucceeded": true,
"OpenError": 0,
"OpenErrorName": "ERROR_SUCCESS",
"ControlCallSucceeded": true,
"ControlErrorName": "ERROR_SUCCESS",
"ControlDetail": "FileBasicInfo.FileAttributes=0x1",
"InfoClass": 13,
"OutOfRangeClassSucceeded": false,
"OutOfRangeClassError": 87,
"OutOfRangeClassErrorName": "ERROR_INVALID_PARAMETER",
"RemoteCallSucceeded": false,
"RemoteError": 87,
"RemoteErrorName": "ERROR_INVALID_PARAMETER",
"RemoteMessage": "The parameter is incorrect",
"StructureVersion": 0,
"StructureSize": 0,
"Protocol": null,
"ProtocolName": null,
"ProtocolMajor": 0,
"ProtocolMinor": 0,
"ProtocolRevision": 0,
"RemoteFlags": null,
"RemoteFlagNames": null
},
{
"Label": "unc-loopback-share-root",
"Target": "\\\\localhost\\C$\\",
"DriveTypeName": "DRIVE_REMOTE",
"DriveTypeValue": 4,
"PathIsNetworkPath": true,
"OpenSucceeded": true,
"OpenError": 0,
"OpenErrorName": "ERROR_SUCCESS",
"ControlCallSucceeded": true,
"ControlErrorName": "ERROR_SUCCESS",
"ControlDetail": "FileBasicInfo.FileAttributes=0x16",
"InfoClass": 13,
"OutOfRangeClassSucceeded": false,
"OutOfRangeClassError": 87,
"OutOfRangeClassErrorName": "ERROR_INVALID_PARAMETER",
"RemoteCallSucceeded": true,
"RemoteError": 0,
"RemoteErrorName": "ERROR_SUCCESS",
"RemoteMessage": "",
"StructureVersion": 4,
"StructureSize": 116,
"Protocol": "0x00020000",
"ProtocolName": "WNNC_NET_SMB",
"ProtocolMajor": 3,
"ProtocolMinor": 1,
"ProtocolRevision": 1,
"RemoteFlags": "0x00000021",
"RemoteFlagNames": "LOOPBACK|MUTUAL_AUTH"
},
{
"Label": "unc-loopback-file",
"Target": "\\\\localhost\\C$\\Windows\\System32\\notepad.exe",
"DriveTypeName": "DRIVE_REMOTE",
"DriveTypeValue": 4,
"PathIsNetworkPath": true,
"OpenSucceeded": true,
"OpenError": 0,
"OpenErrorName": "ERROR_SUCCESS",
"ControlCallSucceeded": true,
"ControlErrorName": "ERROR_SUCCESS",
"ControlDetail": "FileBasicInfo.FileAttributes=0x20",
"InfoClass": 13,
"OutOfRangeClassSucceeded": false,
"OutOfRangeClassError": 87,
"OutOfRangeClassErrorName": "ERROR_INVALID_PARAMETER",
"RemoteCallSucceeded": true,
"RemoteError": 0,
"RemoteErrorName": "ERROR_SUCCESS",
"RemoteMessage": "",
"StructureVersion": 4,
"StructureSize": 116,
"Protocol": "0x00020000",
"ProtocolName": "WNNC_NET_SMB",
"ProtocolMajor": 3,
"ProtocolMinor": 1,
"ProtocolRevision": 1,
"RemoteFlags": "0x00000021",
"RemoteFlagNames": "LOOPBACK|MUTUAL_AUTH"
},
{
"Label": "unc-ip-loopback-file",
"Target": "\\\\127.0.0.1\\C$\\Windows\\System32\\notepad.exe",
"DriveTypeName": "DRIVE_REMOTE",
"DriveTypeValue": 4,
"PathIsNetworkPath": true,
"OpenSucceeded": true,
"OpenError": 0,
"OpenErrorName": "ERROR_SUCCESS",
"ControlCallSucceeded": true,
"ControlErrorName": "ERROR_SUCCESS",
"ControlDetail": "FileBasicInfo.FileAttributes=0x20",
"InfoClass": 13,
"OutOfRangeClassSucceeded": false,
"OutOfRangeClassError": 87,
"OutOfRangeClassErrorName": "ERROR_INVALID_PARAMETER",
"RemoteCallSucceeded": true,
"RemoteError": 0,
"RemoteErrorName": "ERROR_SUCCESS",
"RemoteMessage": "",
"StructureVersion": 4,
"StructureSize": 116,
"Protocol": "0x00020000",
"ProtocolName": "WNNC_NET_SMB",
"ProtocolMajor": 3,
"ProtocolMinor": 1,
"ProtocolRevision": 1,
"RemoteFlags": "0x00000021",
"RemoteFlagNames": "LOOPBACK|MUTUAL_AUTH"
}
]
}

View file

@ -1,49 +0,0 @@
{
"Experiment": "owner of a newly created file, High-integrity parent vs Medium-integrity child",
"Question": "does a new object land as TokenUser or as TokenOwner (BUILTIN\\Administrators)",
"MediumLaunch": "Start-MediumIntegrityProcess (DuplicateTokenEx + SetTokenInformation(TokenIntegrityLevel) + CreateProcessAsUser), label asserted S-1-16-8192",
"HighIntegrity": {
"Stage": "high-integrity-parent",
"ProcessId": <pid>,
"IntegritySid": "S-1-16-12288",
"TokenUserSid": "S-1-5-21-<redacted>-500",
"TokenOwnerSid": "S-1-5-32-544",
"TokenAccount": "<machine>\\<user>",
"FileOwnerSid": "S-1-5-32-544",
"FileOwnerAccount": "BUILTIN\\Administradores",
"OwnerMatchesTokenUser": false,
"OwnerMatchesTokenOwner": true,
"Icacls": [
"<localappdata>\\Temp\\<tempfile> NT AUTHORITY\\SYSTEM:(F)",
" BUILTIN\\Administradores:(F)",
" <machine>\\<user>:(F)",
"",
"Successfully processed 1 files; Failed processing 0 files"
],
"Sddl": "O:BAG:S-1-5-21-<redacted>-513D:(A;ID;FA;;;SY)(A;ID;FA;;;BA)(A;ID;FA;;;LA)"
},
"MediumIntegrity": {
"Stage": "medium-integrity-child",
"ProcessId": <pid>,
"TokenUserSid": "S-1-5-21-<redacted>-500",
"TokenOwnerSid": "S-1-5-32-544",
"TokenAccount": "<machine>\\<user>",
"FileOwnerSid": "S-1-5-32-544",
"FileOwnerAccount": "BUILTIN\\Administradores",
"OwnerMatchesTokenUser": false,
"OwnerMatchesTokenOwner": true,
"Icacls": [
"<localappdata>\\Temp\\<tempfile> NT AUTHORITY\\SYSTEM:(F)",
" BUILTIN\\Administradores:(F)",
" <machine>\\<user>:(F)",
"",
"Successfully processed 1 files; Failed processing 0 files"
],
"Sddl": "O:BAG:S-1-5-21-<redacted>-513D:(A;ID;FA;;;SY)(A;ID;FA;;;BA)(A;ID;FA;;;LA)",
"ChildError": "",
"IntegritySid": "S-1-16-8192"
},
"OwnerSourceHigh": "TokenOwner",
"OwnerSourceMedium": "TokenOwner",
"EnvironmentLimit": "single built-in Administrator account on this VM; a non-admin CI account could not be exercised here"
}

View file

@ -1,897 +0,0 @@
{
"Experiment": "share-mode rename over a concurrently open validation handle",
"Question": "does atomic rename over a concurrently open handle require FILE_SHARE_DELETE",
"Toolchain": "csc.exe 4.8.3761.0 built by: NET48REL1",
"MoveFileExFlags": "MOVEFILE_REPLACE_EXISTING (0x1)",
"ReplaceFileFlags": "0x0",
"CaseCount": 42,
"SharingViolations": 22,
"Successes": 10,
"SuccessWithoutShareDelete": [
],
"Cases": [
{
"Operation": "MoveFileEx",
"HandleOn": "none",
"Access": "n/a",
"AccessMask": "0x00000000",
"Share": "n/a",
"ShareMask": "0x00000000",
"HandleShareDelete": false,
"OpenStatus": "not-opened",
"OpenError": 0,
"OpenErrorName": "n/a",
"OperationSucceeded": true,
"OperationError": 0,
"OperationErrorName": "ERROR_SUCCESS",
"OperationMessage": "",
"TargetContentAfter": "SOURCE",
"SourceExistsAfter": false,
"HeldHandleReadAfter": "n/a",
"HeldHandleContent": "",
"Verdict": "succeeded"
},
{
"Operation": "MoveFileEx",
"HandleOn": "target",
"Access": "GENERIC_READ",
"AccessMask": "0x80000000",
"Share": "NONE",
"ShareMask": "0x00000000",
"HandleShareDelete": false,
"OpenStatus": "opened",
"OpenError": 0,
"OpenErrorName": "ERROR_SUCCESS",
"OperationSucceeded": false,
"OperationError": 5,
"OperationErrorName": "ERROR_ACCESS_DENIED",
"OperationMessage": "Access is denied",
"TargetContentAfter": "TARGET",
"SourceExistsAfter": true,
"HeldHandleReadAfter": "ERROR_SUCCESS",
"HeldHandleContent": "TARGET",
"Verdict": "failed-5"
},
{
"Operation": "MoveFileEx",
"HandleOn": "target",
"Access": "GENERIC_READ",
"AccessMask": "0x80000000",
"Share": "FILE_SHARE_READ",
"ShareMask": "0x00000001",
"HandleShareDelete": false,
"OpenStatus": "opened",
"OpenError": 0,
"OpenErrorName": "ERROR_SUCCESS",
"OperationSucceeded": false,
"OperationError": 5,
"OperationErrorName": "ERROR_ACCESS_DENIED",
"OperationMessage": "Access is denied",
"TargetContentAfter": "TARGET",
"SourceExistsAfter": true,
"HeldHandleReadAfter": "ERROR_SUCCESS",
"HeldHandleContent": "TARGET",
"Verdict": "failed-5"
},
{
"Operation": "MoveFileEx",
"HandleOn": "target",
"Access": "GENERIC_READ",
"AccessMask": "0x80000000",
"Share": "FILE_SHARE_READ|FILE_SHARE_WRITE",
"ShareMask": "0x00000003",
"HandleShareDelete": false,
"OpenStatus": "opened",
"OpenError": 0,
"OpenErrorName": "ERROR_SUCCESS",
"OperationSucceeded": false,
"OperationError": 5,
"OperationErrorName": "ERROR_ACCESS_DENIED",
"OperationMessage": "Access is denied",
"TargetContentAfter": "TARGET",
"SourceExistsAfter": true,
"HeldHandleReadAfter": "ERROR_SUCCESS",
"HeldHandleContent": "TARGET",
"Verdict": "failed-5"
},
{
"Operation": "MoveFileEx",
"HandleOn": "target",
"Access": "GENERIC_READ",
"AccessMask": "0x80000000",
"Share": "FILE_SHARE_DELETE",
"ShareMask": "0x00000004",
"HandleShareDelete": true,
"OpenStatus": "opened",
"OpenError": 0,
"OpenErrorName": "ERROR_SUCCESS",
"OperationSucceeded": false,
"OperationError": 5,
"OperationErrorName": "ERROR_ACCESS_DENIED",
"OperationMessage": "Access is denied",
"TargetContentAfter": "TARGET",
"SourceExistsAfter": true,
"HeldHandleReadAfter": "ERROR_SUCCESS",
"HeldHandleContent": "TARGET",
"Verdict": "failed-5"
},
{
"Operation": "MoveFileEx",
"HandleOn": "target",
"Access": "GENERIC_READ",
"AccessMask": "0x80000000",
"Share": "FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE",
"ShareMask": "0x00000007",
"HandleShareDelete": true,
"OpenStatus": "opened",
"OpenError": 0,
"OpenErrorName": "ERROR_SUCCESS",
"OperationSucceeded": false,
"OperationError": 5,
"OperationErrorName": "ERROR_ACCESS_DENIED",
"OperationMessage": "Access is denied",
"TargetContentAfter": "TARGET",
"SourceExistsAfter": true,
"HeldHandleReadAfter": "ERROR_SUCCESS",
"HeldHandleContent": "TARGET",
"Verdict": "failed-5"
},
{
"Operation": "MoveFileEx",
"HandleOn": "target",
"Access": "GENERIC_READ|GENERIC_WRITE",
"AccessMask": "0xC0000000",
"Share": "NONE",
"ShareMask": "0x00000000",
"HandleShareDelete": false,
"OpenStatus": "opened",
"OpenError": 0,
"OpenErrorName": "ERROR_SUCCESS",
"OperationSucceeded": false,
"OperationError": 5,
"OperationErrorName": "ERROR_ACCESS_DENIED",
"OperationMessage": "Access is denied",
"TargetContentAfter": "TARGET",
"SourceExistsAfter": true,
"HeldHandleReadAfter": "ERROR_SUCCESS",
"HeldHandleContent": "TARGET",
"Verdict": "failed-5"
},
{
"Operation": "MoveFileEx",
"HandleOn": "target",
"Access": "GENERIC_READ|GENERIC_WRITE",
"AccessMask": "0xC0000000",
"Share": "FILE_SHARE_READ",
"ShareMask": "0x00000001",
"HandleShareDelete": false,
"OpenStatus": "opened",
"OpenError": 0,
"OpenErrorName": "ERROR_SUCCESS",
"OperationSucceeded": false,
"OperationError": 5,
"OperationErrorName": "ERROR_ACCESS_DENIED",
"OperationMessage": "Access is denied",
"TargetContentAfter": "TARGET",
"SourceExistsAfter": true,
"HeldHandleReadAfter": "ERROR_SUCCESS",
"HeldHandleContent": "TARGET",
"Verdict": "failed-5"
},
{
"Operation": "MoveFileEx",
"HandleOn": "target",
"Access": "GENERIC_READ|GENERIC_WRITE",
"AccessMask": "0xC0000000",
"Share": "FILE_SHARE_READ|FILE_SHARE_WRITE",
"ShareMask": "0x00000003",
"HandleShareDelete": false,
"OpenStatus": "opened",
"OpenError": 0,
"OpenErrorName": "ERROR_SUCCESS",
"OperationSucceeded": false,
"OperationError": 5,
"OperationErrorName": "ERROR_ACCESS_DENIED",
"OperationMessage": "Access is denied",
"TargetContentAfter": "TARGET",
"SourceExistsAfter": true,
"HeldHandleReadAfter": "ERROR_SUCCESS",
"HeldHandleContent": "TARGET",
"Verdict": "failed-5"
},
{
"Operation": "MoveFileEx",
"HandleOn": "target",
"Access": "GENERIC_READ|GENERIC_WRITE",
"AccessMask": "0xC0000000",
"Share": "FILE_SHARE_DELETE",
"ShareMask": "0x00000004",
"HandleShareDelete": true,
"OpenStatus": "opened",
"OpenError": 0,
"OpenErrorName": "ERROR_SUCCESS",
"OperationSucceeded": false,
"OperationError": 5,
"OperationErrorName": "ERROR_ACCESS_DENIED",
"OperationMessage": "Access is denied",
"TargetContentAfter": "TARGET",
"SourceExistsAfter": true,
"HeldHandleReadAfter": "ERROR_SUCCESS",
"HeldHandleContent": "TARGET",
"Verdict": "failed-5"
},
{
"Operation": "MoveFileEx",
"HandleOn": "target",
"Access": "GENERIC_READ|GENERIC_WRITE",
"AccessMask": "0xC0000000",
"Share": "FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE",
"ShareMask": "0x00000007",
"HandleShareDelete": true,
"OpenStatus": "opened",
"OpenError": 0,
"OpenErrorName": "ERROR_SUCCESS",
"OperationSucceeded": false,
"OperationError": 5,
"OperationErrorName": "ERROR_ACCESS_DENIED",
"OperationMessage": "Access is denied",
"TargetContentAfter": "TARGET",
"SourceExistsAfter": true,
"HeldHandleReadAfter": "ERROR_SUCCESS",
"HeldHandleContent": "TARGET",
"Verdict": "failed-5"
},
{
"Operation": "MoveFileEx",
"HandleOn": "source",
"Access": "GENERIC_READ",
"AccessMask": "0x80000000",
"Share": "NONE",
"ShareMask": "0x00000000",
"HandleShareDelete": false,
"OpenStatus": "opened",
"OpenError": 0,
"OpenErrorName": "ERROR_SUCCESS",
"OperationSucceeded": false,
"OperationError": 32,
"OperationErrorName": "ERROR_SHARING_VIOLATION",
"OperationMessage": "The process cannot access the file because it is being used by another process",
"TargetContentAfter": "TARGET",
"SourceExistsAfter": true,
"HeldHandleReadAfter": "ERROR_SUCCESS",
"HeldHandleContent": "SOURCE",
"Verdict": "sharing-violation-32"
},
{
"Operation": "MoveFileEx",
"HandleOn": "source",
"Access": "GENERIC_READ",
"AccessMask": "0x80000000",
"Share": "FILE_SHARE_READ",
"ShareMask": "0x00000001",
"HandleShareDelete": false,
"OpenStatus": "opened",
"OpenError": 0,
"OpenErrorName": "ERROR_SUCCESS",
"OperationSucceeded": false,
"OperationError": 32,
"OperationErrorName": "ERROR_SHARING_VIOLATION",
"OperationMessage": "The process cannot access the file because it is being used by another process",
"TargetContentAfter": "TARGET",
"SourceExistsAfter": true,
"HeldHandleReadAfter": "ERROR_SUCCESS",
"HeldHandleContent": "SOURCE",
"Verdict": "sharing-violation-32"
},
{
"Operation": "MoveFileEx",
"HandleOn": "source",
"Access": "GENERIC_READ",
"AccessMask": "0x80000000",
"Share": "FILE_SHARE_READ|FILE_SHARE_WRITE",
"ShareMask": "0x00000003",
"HandleShareDelete": false,
"OpenStatus": "opened",
"OpenError": 0,
"OpenErrorName": "ERROR_SUCCESS",
"OperationSucceeded": false,
"OperationError": 32,
"OperationErrorName": "ERROR_SHARING_VIOLATION",
"OperationMessage": "The process cannot access the file because it is being used by another process",
"TargetContentAfter": "TARGET",
"SourceExistsAfter": true,
"HeldHandleReadAfter": "ERROR_SUCCESS",
"HeldHandleContent": "SOURCE",
"Verdict": "sharing-violation-32"
},
{
"Operation": "MoveFileEx",
"HandleOn": "source",
"Access": "GENERIC_READ",
"AccessMask": "0x80000000",
"Share": "FILE_SHARE_DELETE",
"ShareMask": "0x00000004",
"HandleShareDelete": true,
"OpenStatus": "opened",
"OpenError": 0,
"OpenErrorName": "ERROR_SUCCESS",
"OperationSucceeded": true,
"OperationError": 0,
"OperationErrorName": "ERROR_SUCCESS",
"OperationMessage": "",
"TargetContentAfter": "SOURCE",
"SourceExistsAfter": false,
"HeldHandleReadAfter": "ERROR_SUCCESS",
"HeldHandleContent": "SOURCE",
"Verdict": "succeeded"
},
{
"Operation": "MoveFileEx",
"HandleOn": "source",
"Access": "GENERIC_READ",
"AccessMask": "0x80000000",
"Share": "FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE",
"ShareMask": "0x00000007",
"HandleShareDelete": true,
"OpenStatus": "opened",
"OpenError": 0,
"OpenErrorName": "ERROR_SUCCESS",
"OperationSucceeded": true,
"OperationError": 0,
"OperationErrorName": "ERROR_SUCCESS",
"OperationMessage": "",
"TargetContentAfter": "SOURCE",
"SourceExistsAfter": false,
"HeldHandleReadAfter": "ERROR_SUCCESS",
"HeldHandleContent": "SOURCE",
"Verdict": "succeeded"
},
{
"Operation": "MoveFileEx",
"HandleOn": "source",
"Access": "GENERIC_READ|GENERIC_WRITE",
"AccessMask": "0xC0000000",
"Share": "NONE",
"ShareMask": "0x00000000",
"HandleShareDelete": false,
"OpenStatus": "opened",
"OpenError": 0,
"OpenErrorName": "ERROR_SUCCESS",
"OperationSucceeded": false,
"OperationError": 32,
"OperationErrorName": "ERROR_SHARING_VIOLATION",
"OperationMessage": "The process cannot access the file because it is being used by another process",
"TargetContentAfter": "TARGET",
"SourceExistsAfter": true,
"HeldHandleReadAfter": "ERROR_SUCCESS",
"HeldHandleContent": "SOURCE",
"Verdict": "sharing-violation-32"
},
{
"Operation": "MoveFileEx",
"HandleOn": "source",
"Access": "GENERIC_READ|GENERIC_WRITE",
"AccessMask": "0xC0000000",
"Share": "FILE_SHARE_READ",
"ShareMask": "0x00000001",
"HandleShareDelete": false,
"OpenStatus": "opened",
"OpenError": 0,
"OpenErrorName": "ERROR_SUCCESS",
"OperationSucceeded": false,
"OperationError": 32,
"OperationErrorName": "ERROR_SHARING_VIOLATION",
"OperationMessage": "The process cannot access the file because it is being used by another process",
"TargetContentAfter": "TARGET",
"SourceExistsAfter": true,
"HeldHandleReadAfter": "ERROR_SUCCESS",
"HeldHandleContent": "SOURCE",
"Verdict": "sharing-violation-32"
},
{
"Operation": "MoveFileEx",
"HandleOn": "source",
"Access": "GENERIC_READ|GENERIC_WRITE",
"AccessMask": "0xC0000000",
"Share": "FILE_SHARE_READ|FILE_SHARE_WRITE",
"ShareMask": "0x00000003",
"HandleShareDelete": false,
"OpenStatus": "opened",
"OpenError": 0,
"OpenErrorName": "ERROR_SUCCESS",
"OperationSucceeded": false,
"OperationError": 32,
"OperationErrorName": "ERROR_SHARING_VIOLATION",
"OperationMessage": "The process cannot access the file because it is being used by another process",
"TargetContentAfter": "TARGET",
"SourceExistsAfter": true,
"HeldHandleReadAfter": "ERROR_SUCCESS",
"HeldHandleContent": "SOURCE",
"Verdict": "sharing-violation-32"
},
{
"Operation": "MoveFileEx",
"HandleOn": "source",
"Access": "GENERIC_READ|GENERIC_WRITE",
"AccessMask": "0xC0000000",
"Share": "FILE_SHARE_DELETE",
"ShareMask": "0x00000004",
"HandleShareDelete": true,
"OpenStatus": "opened",
"OpenError": 0,
"OpenErrorName": "ERROR_SUCCESS",
"OperationSucceeded": true,
"OperationError": 0,
"OperationErrorName": "ERROR_SUCCESS",
"OperationMessage": "",
"TargetContentAfter": "SOURCE",
"SourceExistsAfter": false,
"HeldHandleReadAfter": "ERROR_SUCCESS",
"HeldHandleContent": "SOURCE",
"Verdict": "succeeded"
},
{
"Operation": "MoveFileEx",
"HandleOn": "source",
"Access": "GENERIC_READ|GENERIC_WRITE",
"AccessMask": "0xC0000000",
"Share": "FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE",
"ShareMask": "0x00000007",
"HandleShareDelete": true,
"OpenStatus": "opened",
"OpenError": 0,
"OpenErrorName": "ERROR_SUCCESS",
"OperationSucceeded": true,
"OperationError": 0,
"OperationErrorName": "ERROR_SUCCESS",
"OperationMessage": "",
"TargetContentAfter": "SOURCE",
"SourceExistsAfter": false,
"HeldHandleReadAfter": "ERROR_SUCCESS",
"HeldHandleContent": "SOURCE",
"Verdict": "succeeded"
},
{
"Operation": "ReplaceFile",
"HandleOn": "none",
"Access": "n/a",
"AccessMask": "0x00000000",
"Share": "n/a",
"ShareMask": "0x00000000",
"HandleShareDelete": false,
"OpenStatus": "not-opened",
"OpenError": 0,
"OpenErrorName": "n/a",
"OperationSucceeded": true,
"OperationError": 0,
"OperationErrorName": "ERROR_SUCCESS",
"OperationMessage": "",
"TargetContentAfter": "SOURCE",
"SourceExistsAfter": false,
"HeldHandleReadAfter": "n/a",
"HeldHandleContent": "",
"Verdict": "succeeded"
},
{
"Operation": "ReplaceFile",
"HandleOn": "target",
"Access": "GENERIC_READ",
"AccessMask": "0x80000000",
"Share": "NONE",
"ShareMask": "0x00000000",
"HandleShareDelete": false,
"OpenStatus": "opened",
"OpenError": 0,
"OpenErrorName": "ERROR_SUCCESS",
"OperationSucceeded": false,
"OperationError": 32,
"OperationErrorName": "ERROR_SHARING_VIOLATION",
"OperationMessage": "The process cannot access the file because it is being used by another process",
"TargetContentAfter": "TARGET",
"SourceExistsAfter": true,
"HeldHandleReadAfter": "ERROR_SUCCESS",
"HeldHandleContent": "TARGET",
"Verdict": "sharing-violation-32"
},
{
"Operation": "ReplaceFile",
"HandleOn": "target",
"Access": "GENERIC_READ",
"AccessMask": "0x80000000",
"Share": "FILE_SHARE_READ",
"ShareMask": "0x00000001",
"HandleShareDelete": false,
"OpenStatus": "opened",
"OpenError": 0,
"OpenErrorName": "ERROR_SUCCESS",
"OperationSucceeded": false,
"OperationError": 32,
"OperationErrorName": "ERROR_SHARING_VIOLATION",
"OperationMessage": "The process cannot access the file because it is being used by another process",
"TargetContentAfter": "TARGET",
"SourceExistsAfter": true,
"HeldHandleReadAfter": "ERROR_SUCCESS",
"HeldHandleContent": "TARGET",
"Verdict": "sharing-violation-32"
},
{
"Operation": "ReplaceFile",
"HandleOn": "target",
"Access": "GENERIC_READ",
"AccessMask": "0x80000000",
"Share": "FILE_SHARE_READ|FILE_SHARE_WRITE",
"ShareMask": "0x00000003",
"HandleShareDelete": false,
"OpenStatus": "opened",
"OpenError": 0,
"OpenErrorName": "ERROR_SUCCESS",
"OperationSucceeded": false,
"OperationError": 32,
"OperationErrorName": "ERROR_SHARING_VIOLATION",
"OperationMessage": "The process cannot access the file because it is being used by another process",
"TargetContentAfter": "TARGET",
"SourceExistsAfter": true,
"HeldHandleReadAfter": "ERROR_SUCCESS",
"HeldHandleContent": "TARGET",
"Verdict": "sharing-violation-32"
},
{
"Operation": "ReplaceFile",
"HandleOn": "target",
"Access": "GENERIC_READ",
"AccessMask": "0x80000000",
"Share": "FILE_SHARE_DELETE",
"ShareMask": "0x00000004",
"HandleShareDelete": true,
"OpenStatus": "opened",
"OpenError": 0,
"OpenErrorName": "ERROR_SUCCESS",
"OperationSucceeded": true,
"OperationError": 0,
"OperationErrorName": "ERROR_SUCCESS",
"OperationMessage": "",
"TargetContentAfter": "SOURCE",
"SourceExistsAfter": false,
"HeldHandleReadAfter": "ERROR_SUCCESS",
"HeldHandleContent": "TARGET",
"Verdict": "succeeded"
},
{
"Operation": "ReplaceFile",
"HandleOn": "target",
"Access": "GENERIC_READ",
"AccessMask": "0x80000000",
"Share": "FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE",
"ShareMask": "0x00000007",
"HandleShareDelete": true,
"OpenStatus": "opened",
"OpenError": 0,
"OpenErrorName": "ERROR_SUCCESS",
"OperationSucceeded": true,
"OperationError": 0,
"OperationErrorName": "ERROR_SUCCESS",
"OperationMessage": "",
"TargetContentAfter": "SOURCE",
"SourceExistsAfter": false,
"HeldHandleReadAfter": "ERROR_SUCCESS",
"HeldHandleContent": "TARGET",
"Verdict": "succeeded"
},
{
"Operation": "ReplaceFile",
"HandleOn": "target",
"Access": "GENERIC_READ|GENERIC_WRITE",
"AccessMask": "0xC0000000",
"Share": "NONE",
"ShareMask": "0x00000000",
"HandleShareDelete": false,
"OpenStatus": "opened",
"OpenError": 0,
"OpenErrorName": "ERROR_SUCCESS",
"OperationSucceeded": false,
"OperationError": 32,
"OperationErrorName": "ERROR_SHARING_VIOLATION",
"OperationMessage": "The process cannot access the file because it is being used by another process",
"TargetContentAfter": "TARGET",
"SourceExistsAfter": true,
"HeldHandleReadAfter": "ERROR_SUCCESS",
"HeldHandleContent": "TARGET",
"Verdict": "sharing-violation-32"
},
{
"Operation": "ReplaceFile",
"HandleOn": "target",
"Access": "GENERIC_READ|GENERIC_WRITE",
"AccessMask": "0xC0000000",
"Share": "FILE_SHARE_READ",
"ShareMask": "0x00000001",
"HandleShareDelete": false,
"OpenStatus": "opened",
"OpenError": 0,
"OpenErrorName": "ERROR_SUCCESS",
"OperationSucceeded": false,
"OperationError": 32,
"OperationErrorName": "ERROR_SHARING_VIOLATION",
"OperationMessage": "The process cannot access the file because it is being used by another process",
"TargetContentAfter": "TARGET",
"SourceExistsAfter": true,
"HeldHandleReadAfter": "ERROR_SUCCESS",
"HeldHandleContent": "TARGET",
"Verdict": "sharing-violation-32"
},
{
"Operation": "ReplaceFile",
"HandleOn": "target",
"Access": "GENERIC_READ|GENERIC_WRITE",
"AccessMask": "0xC0000000",
"Share": "FILE_SHARE_READ|FILE_SHARE_WRITE",
"ShareMask": "0x00000003",
"HandleShareDelete": false,
"OpenStatus": "opened",
"OpenError": 0,
"OpenErrorName": "ERROR_SUCCESS",
"OperationSucceeded": false,
"OperationError": 32,
"OperationErrorName": "ERROR_SHARING_VIOLATION",
"OperationMessage": "The process cannot access the file because it is being used by another process",
"TargetContentAfter": "TARGET",
"SourceExistsAfter": true,
"HeldHandleReadAfter": "ERROR_SUCCESS",
"HeldHandleContent": "TARGET",
"Verdict": "sharing-violation-32"
},
{
"Operation": "ReplaceFile",
"HandleOn": "target",
"Access": "GENERIC_READ|GENERIC_WRITE",
"AccessMask": "0xC0000000",
"Share": "FILE_SHARE_DELETE",
"ShareMask": "0x00000004",
"HandleShareDelete": true,
"OpenStatus": "opened",
"OpenError": 0,
"OpenErrorName": "ERROR_SUCCESS",
"OperationSucceeded": true,
"OperationError": 0,
"OperationErrorName": "ERROR_SUCCESS",
"OperationMessage": "",
"TargetContentAfter": "SOURCE",
"SourceExistsAfter": false,
"HeldHandleReadAfter": "ERROR_SUCCESS",
"HeldHandleContent": "TARGET",
"Verdict": "succeeded"
},
{
"Operation": "ReplaceFile",
"HandleOn": "target",
"Access": "GENERIC_READ|GENERIC_WRITE",
"AccessMask": "0xC0000000",
"Share": "FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE",
"ShareMask": "0x00000007",
"HandleShareDelete": true,
"OpenStatus": "opened",
"OpenError": 0,
"OpenErrorName": "ERROR_SUCCESS",
"OperationSucceeded": true,
"OperationError": 0,
"OperationErrorName": "ERROR_SUCCESS",
"OperationMessage": "",
"TargetContentAfter": "SOURCE",
"SourceExistsAfter": false,
"HeldHandleReadAfter": "ERROR_SUCCESS",
"HeldHandleContent": "TARGET",
"Verdict": "succeeded"
},
{
"Operation": "ReplaceFile",
"HandleOn": "source",
"Access": "GENERIC_READ",
"AccessMask": "0x80000000",
"Share": "NONE",
"ShareMask": "0x00000000",
"HandleShareDelete": false,
"OpenStatus": "opened",
"OpenError": 0,
"OpenErrorName": "ERROR_SUCCESS",
"OperationSucceeded": false,
"OperationError": 32,
"OperationErrorName": "ERROR_SHARING_VIOLATION",
"OperationMessage": "The process cannot access the file because it is being used by another process",
"TargetContentAfter": "TARGET",
"SourceExistsAfter": true,
"HeldHandleReadAfter": "ERROR_SUCCESS",
"HeldHandleContent": "SOURCE",
"Verdict": "sharing-violation-32"
},
{
"Operation": "ReplaceFile",
"HandleOn": "source",
"Access": "GENERIC_READ",
"AccessMask": "0x80000000",
"Share": "FILE_SHARE_READ",
"ShareMask": "0x00000001",
"HandleShareDelete": false,
"OpenStatus": "opened",
"OpenError": 0,
"OpenErrorName": "ERROR_SUCCESS",
"OperationSucceeded": false,
"OperationError": 32,
"OperationErrorName": "ERROR_SHARING_VIOLATION",
"OperationMessage": "The process cannot access the file because it is being used by another process",
"TargetContentAfter": "TARGET",
"SourceExistsAfter": true,
"HeldHandleReadAfter": "ERROR_SUCCESS",
"HeldHandleContent": "SOURCE",
"Verdict": "sharing-violation-32"
},
{
"Operation": "ReplaceFile",
"HandleOn": "source",
"Access": "GENERIC_READ",
"AccessMask": "0x80000000",
"Share": "FILE_SHARE_READ|FILE_SHARE_WRITE",
"ShareMask": "0x00000003",
"HandleShareDelete": false,
"OpenStatus": "opened",
"OpenError": 0,
"OpenErrorName": "ERROR_SUCCESS",
"OperationSucceeded": false,
"OperationError": 32,
"OperationErrorName": "ERROR_SHARING_VIOLATION",
"OperationMessage": "The process cannot access the file because it is being used by another process",
"TargetContentAfter": "TARGET",
"SourceExistsAfter": true,
"HeldHandleReadAfter": "ERROR_SUCCESS",
"HeldHandleContent": "SOURCE",
"Verdict": "sharing-violation-32"
},
{
"Operation": "ReplaceFile",
"HandleOn": "source",
"Access": "GENERIC_READ",
"AccessMask": "0x80000000",
"Share": "FILE_SHARE_DELETE",
"ShareMask": "0x00000004",
"HandleShareDelete": true,
"OpenStatus": "opened",
"OpenError": 0,
"OpenErrorName": "ERROR_SUCCESS",
"OperationSucceeded": false,
"OperationError": 32,
"OperationErrorName": "ERROR_SHARING_VIOLATION",
"OperationMessage": "The process cannot access the file because it is being used by another process",
"TargetContentAfter": "TARGET",
"SourceExistsAfter": true,
"HeldHandleReadAfter": "ERROR_SUCCESS",
"HeldHandleContent": "SOURCE",
"Verdict": "sharing-violation-32"
},
{
"Operation": "ReplaceFile",
"HandleOn": "source",
"Access": "GENERIC_READ",
"AccessMask": "0x80000000",
"Share": "FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE",
"ShareMask": "0x00000007",
"HandleShareDelete": true,
"OpenStatus": "opened",
"OpenError": 0,
"OpenErrorName": "ERROR_SUCCESS",
"OperationSucceeded": false,
"OperationError": 32,
"OperationErrorName": "ERROR_SHARING_VIOLATION",
"OperationMessage": "The process cannot access the file because it is being used by another process",
"TargetContentAfter": "TARGET",
"SourceExistsAfter": true,
"HeldHandleReadAfter": "ERROR_SUCCESS",
"HeldHandleContent": "SOURCE",
"Verdict": "sharing-violation-32"
},
{
"Operation": "ReplaceFile",
"HandleOn": "source",
"Access": "GENERIC_READ|GENERIC_WRITE",
"AccessMask": "0xC0000000",
"Share": "NONE",
"ShareMask": "0x00000000",
"HandleShareDelete": false,
"OpenStatus": "opened",
"OpenError": 0,
"OpenErrorName": "ERROR_SUCCESS",
"OperationSucceeded": false,
"OperationError": 32,
"OperationErrorName": "ERROR_SHARING_VIOLATION",
"OperationMessage": "The process cannot access the file because it is being used by another process",
"TargetContentAfter": "TARGET",
"SourceExistsAfter": true,
"HeldHandleReadAfter": "ERROR_SUCCESS",
"HeldHandleContent": "SOURCE",
"Verdict": "sharing-violation-32"
},
{
"Operation": "ReplaceFile",
"HandleOn": "source",
"Access": "GENERIC_READ|GENERIC_WRITE",
"AccessMask": "0xC0000000",
"Share": "FILE_SHARE_READ",
"ShareMask": "0x00000001",
"HandleShareDelete": false,
"OpenStatus": "opened",
"OpenError": 0,
"OpenErrorName": "ERROR_SUCCESS",
"OperationSucceeded": false,
"OperationError": 32,
"OperationErrorName": "ERROR_SHARING_VIOLATION",
"OperationMessage": "The process cannot access the file because it is being used by another process",
"TargetContentAfter": "TARGET",
"SourceExistsAfter": true,
"HeldHandleReadAfter": "ERROR_SUCCESS",
"HeldHandleContent": "SOURCE",
"Verdict": "sharing-violation-32"
},
{
"Operation": "ReplaceFile",
"HandleOn": "source",
"Access": "GENERIC_READ|GENERIC_WRITE",
"AccessMask": "0xC0000000",
"Share": "FILE_SHARE_READ|FILE_SHARE_WRITE",
"ShareMask": "0x00000003",
"HandleShareDelete": false,
"OpenStatus": "opened",
"OpenError": 0,
"OpenErrorName": "ERROR_SUCCESS",
"OperationSucceeded": false,
"OperationError": 32,
"OperationErrorName": "ERROR_SHARING_VIOLATION",
"OperationMessage": "The process cannot access the file because it is being used by another process",
"TargetContentAfter": "TARGET",
"SourceExistsAfter": true,
"HeldHandleReadAfter": "ERROR_SUCCESS",
"HeldHandleContent": "SOURCE",
"Verdict": "sharing-violation-32"
},
{
"Operation": "ReplaceFile",
"HandleOn": "source",
"Access": "GENERIC_READ|GENERIC_WRITE",
"AccessMask": "0xC0000000",
"Share": "FILE_SHARE_DELETE",
"ShareMask": "0x00000004",
"HandleShareDelete": true,
"OpenStatus": "opened",
"OpenError": 0,
"OpenErrorName": "ERROR_SUCCESS",
"OperationSucceeded": false,
"OperationError": 32,
"OperationErrorName": "ERROR_SHARING_VIOLATION",
"OperationMessage": "The process cannot access the file because it is being used by another process",
"TargetContentAfter": "TARGET",
"SourceExistsAfter": true,
"HeldHandleReadAfter": "ERROR_SUCCESS",
"HeldHandleContent": "SOURCE",
"Verdict": "sharing-violation-32"
},
{
"Operation": "ReplaceFile",
"HandleOn": "source",
"Access": "GENERIC_READ|GENERIC_WRITE",
"AccessMask": "0xC0000000",
"Share": "FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE",
"ShareMask": "0x00000007",
"HandleShareDelete": true,
"OpenStatus": "opened",
"OpenError": 0,
"OpenErrorName": "ERROR_SUCCESS",
"OperationSucceeded": false,
"OperationError": 32,
"OperationErrorName": "ERROR_SHARING_VIOLATION",
"OperationMessage": "The process cannot access the file because it is being used by another process",
"TargetContentAfter": "TARGET",
"SourceExistsAfter": true,
"HeldHandleReadAfter": "ERROR_SUCCESS",
"HeldHandleContent": "SOURCE",
"Verdict": "sharing-violation-32"
}
]
}

View file

@ -1,96 +0,0 @@
{
"Probe": "13-ledger-check",
"CapturedAtUtc": "<timestamp>",
"Question": "does FINDINGS.md satisfy R5, R6 and R7 as a machine-checkable contract",
"Ledger": "probes/windows/FINDINGS.md",
"RowCount": 79,
"SessionEvidenceRows": 25,
"AreaCoverage": [
{
"Area": "1",
"Rows": 8
},
{
"Area": "2",
"Rows": 6
},
{
"Area": "3",
"Rows": 5
},
{
"Area": "4",
"Rows": 7
},
{
"Area": "5",
"Rows": 3
},
{
"Area": "6",
"Rows": 2
},
{
"Area": "7",
"Rows": 4
},
{
"Area": "8",
"Rows": 4
},
{
"Area": "9",
"Rows": 3
},
{
"Area": "10",
"Rows": 7
},
{
"Area": "11",
"Rows": 5
}
],
"VerdictCounts": {
"CONFIRMS": 43,
"CONTRADICTS": 5,
"NEW-EDGE": 26,
"DEFERRED": 5
},
"DeferredRows": [
{
"Id": "A10-2",
"Area": "10",
"Closure": "2.1"
},
{
"Id": "A10-3",
"Area": "10",
"Closure": "2.4"
},
{
"Id": "A10-5",
"Area": "10",
"Closure": "2.10"
},
{
"Id": "A10-6",
"Area": "10",
"Closure": "2.4"
},
{
"Id": "A10-7",
"Area": "10",
"Closure": "2.12"
}
],
"MeasuredHunkCount": 37,
"HunkIndexRowCount": 37,
"ContradictsRowCount": 5,
"ContradictsRowsMapped": 5,
"BijectionHolds": true,
"Failures": [
],
"HunkCountSource": "git -C \u003crepo\u003e diff -U0 main -- docs/phases.md, counting lines matching ^@@ -[0-9]; the measured count is authoritative over any count written in prose"
}