Skip to content

Commit fd4c424

Browse files
committed
Index P-026 (Dispatcher/Task continuation leak) in ROADMAP
1 parent 52d563a commit fd4c424

1 file changed

Lines changed: 3 additions & 1 deletion

File tree

docs/ROADMAP.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ ownership/lifetime/effects, (4) an MVP needs no PhD in Roslyn.
126126

127127
| Tier | Targets | Proposal |
128128
|------|---------|----------|
129-
| **P0** | WPF/event/timer/subscription leaks; `IDisposable` ownership (leaks, fields, use-after-dispose); DI lifetime mismatch (captive dependency) | [P-004](proposals/P-004-wpf-lifetime-profile.md), [P-005](proposals/P-005-idisposable-ownership.md), [P-006](proposals/P-006-di-lifetimes.md) |
129+
| **P0** | WPF/event/timer/subscription leaks; closures escaping to Dispatcher/TPL infrastructure; `IDisposable` ownership (leaks, fields, use-after-dispose); DI lifetime mismatch (captive dependency) | [P-004](proposals/P-004-wpf-lifetime-profile.md), [P-026](proposals/P-026-dispatcher-task-continuation-leaks.md), [P-005](proposals/P-005-idisposable-ownership.md), [P-006](proposals/P-006-di-lifetimes.md) |
130130
| **P1** | ArrayPool/Span ownership-view bugs; hidden effects / architecture rules | [P-007](proposals/P-007-arraypool-span.md), [P-008](proposals/P-008-effects-and-resources.md) |
131131
| **P2** | async resource lifecycle / WPF async audit; `ValueTask` affine usage; typestate/protocols | [P-021](proposals/P-021-async-audit-pack.md), [P-008](proposals/P-008-effects-and-resources.md), [P-010](proposals/P-010-type-disciplines.md) |
132132
| **P3** | LOH fragmentation; static-collection memory bloat; cross-thread `ObjectDisposedException` | — (runtime-bound; see detectability matrix) |
@@ -259,6 +259,7 @@ bucket it falls in, so we never promise a runtime-only bug to a static checker.
259259
| `ArrayPool.Rent` without `Return` (one method) | ✅ deterministic | both calls in one CFG |
260260
| Simple use-after-dispose (one method) | ✅ deterministic | `x.Dispose(); x.Use();` is visible |
261261
| `event +=` without `-=` | ⚠️ heuristic | depends on object lifetime → warn only in long-lived owners; false positives |
262+
| Closure captured by `Dispatcher.BeginInvoke`/`Task.ContinueWith` escaping to process-lived infrastructure | ⚠️ heuristic | one-hop closure-capture analysis; cancellation/guard evidence is heuristic, not proof (P-026) |
262263
| Ownership transfer through a callee | ⚠️ heuristic | `ProcessStream(s)` may dispose internally |
263264
| Cross-thread `ObjectDisposedException` | ❌ impossible | a happens-before race, not a structure |
264265
| LOH fragmentation | ❌ impossible | depends on runtime data volume / GC timing |
@@ -326,3 +327,4 @@ own scan. Label them as estimates wherever they appear.
326327
| [P-020](proposals/P-020-ownts-react-effects.md) | OwnTS React effects profile (`Own.React`) — effect-storm angle | horizon | draft |
327328
| [P-021](proposals/P-021-async-audit-pack.md) | Async audit pack (`Own.Async`) — safety-first WPF/application async lifecycle diagnostics | P2 | draft |
328329
| [P-025](proposals/P-025-obligation-protocols.md) | Obligation protocols (`Own.Protocols`) — barrier-sensitive project invariants (OBL001–005) | P1 | first slice built (core + bridge + fixtures; extractor pending) |
330+
| [P-026](proposals/P-026-dispatcher-task-continuation-leaks.md) | Dispatcher/Task continuation capture leak (`WPF006`) — closures escaping to Dispatcher/TPL infrastructure | P0 | draft |

0 commit comments

Comments
 (0)