You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 3fbd6c6
Browse filesBrowse the repository at this point in the historyBrowse files
extractor: a static class subscriber can't over-promote (OWN014 FP)
A subscription to a process-lived static event (AppDomain.ProcessExit,
Console.CancelKeyPress) from inside a `static class` is not an OWN014 region
escape: a static class has NO instance, so the 'promotes the component instance
to the source's lifetime' premise is vacuously false — its state is already
process-lived by the language definition. Sound by guarantee, not heuristic.
Extends the existing process-lived-subscriber exemption (the WPF `App` singleton,
clsIsApp) with clsIsStatic, gated identically: only the source=="static" region
escape, non-timers. Mined on CsvHelper's static ConsoleHost, whose
ProcessExit/CancelKeyPress shutdown hooks were false OWN014s.
New corpus fixture subscription-static-class-host: before.cs is an INSTANCE host
subscribing this to Console.CancelKeyPress (real OWN014), after.cs is the same as
a static class (silent). case.own models the token form (OWN001) like the sibling
screentogif-systemevents-leak case.
Newtonsoft TraceJsonReader._textWriter stays baselined: it is a JsonTextWriter
over a StringWriter, no-op only because of what it wraps — recognising that needs
wrapper-cascade analysis (unsound to blanket-exempt JsonTextWriter), so the
honest call is to leave it. Re-pointing the oracle at CsvHelper to confirm the
ConsoleHost FPs clear.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019846YSZ35c7CdkWQ1qX5gm
JamesNK/Newtonsoft.Json | JsonSerializer.cs | OWN001 | serializer.Error | intra-call self-subscription: the serializer is freshly created from the same JsonSerializerSettings whose .Error handler it subscribes; source and handler are co-lifetimed
JoshClose/CsvHelper | ConsoleHost.cs | OWN014 | AppDomain.CurrentDomain.ProcessExit | non-product (docs-src/ doc-generator) + process-lived subscriber: ConsoleHost itself lives for the whole process, so promoting it to a process-lived event source changes nothing
48
-
JoshClose/CsvHelper | ConsoleHost.cs | OWN014 | Console.CancelKeyPress | non-product (docs-src/ doc-generator) + process-lived subscriber: same — a process-lived host subscribing to a process-lived event source is not a lifetime leak
47
+
# [fix-pending experiment] Both ConsoleHost entries are cleared by the static-class
48
+
# subscriber exemption (clsIsStatic) — ConsoleHost is a `static class`, so the
49
+
# process-lived subscription promotes no instance. Disabled here to confirm on a live
50
+
# CsvHelper oracle run that they no longer fire; if confirmed they are deleted, if they
51
+
# resurface they are restored.
52
+
# JoshClose/CsvHelper | ConsoleHost.cs | OWN014 | AppDomain.CurrentDomain.ProcessExit | non-product (docs-src/ doc-generator) + process-lived subscriber: ConsoleHost itself lives for the whole process, so promoting it to a process-lived event source changes nothing
53
+
# JoshClose/CsvHelper | ConsoleHost.cs | OWN014 | Console.CancelKeyPress | non-product (docs-src/ doc-generator) + process-lived subscriber: same — a process-lived host subscribing to a process-lived event source is not a lifetime leak
Copy file name to clipboardExpand all lines: docs/notes/oracle-known-fps.md
+22-10Lines changed: 22 additions & 10 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -23,17 +23,25 @@ reason: we and the oracles occupy orthogonal niches.
23
23
24
24
| disposition | count | what happens on re-run |
25
25
|---|---:|---|
26
-
|**Fixed in the extractor**|6| no longer fire (5 NLog `WaitForDispose` timers + protobuf `XsltOptions` self-cycle — see below) |
27
-
|**Baselined FP**|6| moved to "Known FP (baselined)", out of the triage queue |
26
+
|**Fixed in the extractor**|8| no longer fire (5 NLog `WaitForDispose` timers + protobuf `XsltOptions` self-cycle + 2 CsvHelper static-class hooks — see below) |
27
+
|**Baselined FP**|4| moved to "Known FP (baselined)", out of the triage queue |
0 commit comments